70
70
creator = shelf.ShelfCreator(tree, tree.basis_tree())
71
71
self.addCleanup(creator.finalize)
72
72
self.assertEqual([('rename', b'foo-id', 'foo', 'bar')],
73
list(creator.iter_shelvable()))
73
list(creator.iter_shelvable()))
76
76
def check_shelve_rename(self, creator):
139
139
creator = shelf.ShelfCreator(tree, tree.basis_tree())
140
140
self.addCleanup(creator.finalize)
141
141
self.expectFailure('shelf doesn\'t support shelving root changes yet',
143
('delete file', b'first-root-id', 'directory', ''),
144
('add file', b'second-root-id', 'directory', ''),
145
('rename', b'foo-id', u'foo', u'foo'),
146
], list(creator.iter_shelvable()))
143
('delete file', b'first-root-id', 'directory', ''),
144
('add file', b'second-root-id', 'directory', ''),
145
('rename', b'foo-id', u'foo', u'foo'),
146
], list(creator.iter_shelvable()))
148
148
self.assertEqual([('delete file', b'first-root-id', 'directory', ''),
149
149
('add file', b'second-root-id', 'directory', ''),
150
150
('rename', b'foo-id', u'foo', u'foo'),
151
], list(creator.iter_shelvable()))
151
], list(creator.iter_shelvable()))
153
153
def assertShelvedFileEqual(self, expected_content, creator, file_id):
154
154
s_trans_id = creator.shelf_transform.trans_id_file_id(file_id)
201
201
self.addCleanup(creator.finalize)
202
202
self.assertEqual([('add file', b'bar-id', 'directory', 'bar'),
203
203
('add file', b'foo-id', 'file', 'foo')],
204
sorted(list(creator.iter_shelvable())))
204
sorted(list(creator.iter_shelvable())))
205
205
return creator, tree
207
207
def check_shelve_creation(self, creator, tree):
215
215
self.assertShelvedFileEqual('a\n', creator, b'foo-id')
216
216
s_bar_trans_id = creator.shelf_transform.trans_id_file_id(b'bar-id')
217
217
self.assertEqual('directory',
218
creator.shelf_transform.final_kind(s_bar_trans_id))
218
creator.shelf_transform.final_kind(s_bar_trans_id))
220
220
def test_shelve_creation(self):
221
221
creator, tree = self.prepare_shelve_creation()
236
236
tree.lock_write()
237
237
self.addCleanup(tree.unlock)
238
238
tree.commit('Empty tree')
239
self.build_tree_contents([('foo', b'a\n'), ('bar/',), ('bar/ignored', b'ign\n')])
239
self.build_tree_contents(
240
[('foo', b'a\n'), ('bar/',), ('bar/ignored', b'ign\n')])
240
241
tree.add(['foo', 'bar'], [b'foo-id', b'bar-id'])
241
242
creator = shelf.ShelfCreator(tree, tree.basis_tree())
242
243
self.addCleanup(creator.finalize)
243
244
self.assertEqual([('add file', b'bar-id', 'directory', 'bar'),
244
245
('add file', b'foo-id', 'file', 'foo')],
245
sorted(list(creator.iter_shelvable())))
246
sorted(list(creator.iter_shelvable())))
246
247
ignores._set_user_ignores([])
247
in_patterns = ['ignored',]
248
in_patterns = ['ignored', ]
248
249
ignores.add_unique_user_ignores(in_patterns)
250
251
creator.shelve_change(('add file', b'bar-id', 'directory', 'bar'))
252
253
creator.transform()
253
254
self.check_shelve_creation(creator, tree)
254
255
except MalformedTransform:
255
raise KnownFailure('shelving directory with ignored file: see bug #611739')
257
'shelving directory with ignored file: see bug #611739')
257
259
def _test_shelve_symlink_creation(self, link_name, link_target,
258
260
shelve_change=False):
268
270
self.assertEqual([('add file', b'foo-id', 'symlink', link_name)],
269
271
list(creator.iter_shelvable()))
270
272
if shelve_change:
271
creator.shelve_change(('add file', b'foo-id', 'symlink', link_name))
273
creator.shelve_change(
274
('add file', b'foo-id', 'symlink', link_name))
273
276
creator.shelve_creation(b'foo-id')
274
277
creator.transform()
278
281
self.assertEqual(link_target, osutils.readlink(limbo_name))
279
282
ptree = creator.shelf_transform.get_preview_tree()
280
283
self.assertEqual(
282
ptree.get_symlink_target(ptree.id2path(b'foo-id'), b'foo-id'))
285
ptree.get_symlink_target(ptree.id2path(b'foo-id'), b'foo-id'))
284
287
def test_shelve_symlink_creation(self):
285
288
self._test_shelve_symlink_creation('foo', 'bar')
320
323
limbo_name = creator.shelf_transform._limbo_name(s_trans_id)
321
324
self.assertEqual(new_target, osutils.readlink(limbo_name))
322
325
ptree = creator.shelf_transform.get_preview_tree()
323
self.assertEqual(new_target, ptree.get_symlink_target(ptree.id2path(b'foo-id')))
326
self.assertEqual(new_target, ptree.get_symlink_target(
327
ptree.id2path(b'foo-id')))
325
329
def test_shelve_symlink_target_change(self):
326
330
self._test_shelve_symlink_target_change('foo', 'bar', 'baz')
370
374
self.addCleanup(creator.finalize)
371
375
self.assertEqual([('delete file', b'bar-id', 'file', 'foo/bar'),
372
376
('delete file', b'foo-id', 'directory', 'foo')],
373
sorted(list(creator.iter_shelvable())))
377
sorted(list(creator.iter_shelvable())))
374
378
return creator, tree
376
380
def check_shelve_deletion(self, tree):
395
399
def test_shelve_delete_contents(self):
396
400
tree = self.make_branch_and_tree('tree')
397
self.build_tree(['tree/foo',])
401
self.build_tree(['tree/foo', ])
398
402
tree.add('foo', b'foo-id')
399
403
tree.commit('Added file and directory')
400
404
os.unlink('tree/foo')
454
458
def test_shelve_unversion(self):
455
459
tree = self.make_branch_and_tree('tree')
456
self.build_tree(['tree/foo',])
460
self.build_tree(['tree/foo', ])
457
461
tree.add('foo', b'foo-id')
458
462
tree.commit('Added file and directory')
459
463
tree.unversion(['foo'])