62
46
def prepare_shelve_rename(self):
63
47
tree = self.make_branch_and_tree('.')
64
48
self.build_tree(['foo'])
65
tree.add(['foo'], [b'foo-id'])
49
tree.add(['foo'], ['foo-id'])
67
51
tree.rename_one('foo', 'bar')
68
52
tree.lock_tree_write()
69
53
self.addCleanup(tree.unlock)
70
54
creator = shelf.ShelfCreator(tree, tree.basis_tree())
71
55
self.addCleanup(creator.finalize)
72
self.assertEqual([('rename', b'foo-id', 'foo', 'bar')],
73
list(creator.iter_shelvable()))
56
self.assertEqual([('rename', 'foo-id', 'foo', 'bar')],
57
list(creator.iter_shelvable()))
76
60
def check_shelve_rename(self, creator):
77
work_trans_id = creator.work_transform.trans_id_file_id(b'foo-id')
61
work_trans_id = creator.work_transform.trans_id_file_id('foo-id')
78
62
self.assertEqual('foo', creator.work_transform.final_name(
80
shelf_trans_id = creator.shelf_transform.trans_id_file_id(b'foo-id')
64
shelf_trans_id = creator.shelf_transform.trans_id_file_id('foo-id')
81
65
self.assertEqual('bar', creator.shelf_transform.final_name(
84
68
def test_shelve_rename(self):
85
69
creator = self.prepare_shelve_rename()
86
creator.shelve_rename(b'foo-id')
70
creator.shelve_rename('foo-id')
87
71
self.check_shelve_rename(creator)
89
73
def test_shelve_change_handles_rename(self):
90
74
creator = self.prepare_shelve_rename()
91
creator.shelve_change(('rename', b'foo-id', 'foo', 'bar'))
75
creator.shelve_change(('rename', 'foo-id', 'foo', 'bar'))
92
76
self.check_shelve_rename(creator)
94
78
def prepare_shelve_move(self):
95
79
tree = self.make_branch_and_tree('.')
96
80
self.build_tree(['foo/', 'bar/', 'foo/baz'])
97
tree.add(['foo', 'bar', 'foo/baz'], [b'foo-id', b'bar-id', b'baz-id'])
81
tree.add(['foo', 'bar', 'foo/baz'], ['foo-id', 'bar-id', 'baz-id'])
99
83
tree.rename_one('foo/baz', 'bar/baz')
100
84
tree.lock_tree_write()
101
85
self.addCleanup(tree.unlock)
102
86
creator = shelf.ShelfCreator(tree, tree.basis_tree())
103
87
self.addCleanup(creator.finalize)
104
self.assertEqual([('rename', b'baz-id', 'foo/baz', 'bar/baz')],
88
self.assertEqual([('rename', 'baz-id', 'foo/baz', 'bar/baz')],
105
89
list(creator.iter_shelvable()))
106
90
return creator, tree
108
92
def check_shelve_move(self, creator, tree):
109
work_trans_id = creator.work_transform.trans_id_file_id(b'baz-id')
110
work_foo = creator.work_transform.trans_id_file_id(b'foo-id')
93
work_trans_id = creator.work_transform.trans_id_file_id('baz-id')
94
work_foo = creator.work_transform.trans_id_file_id('foo-id')
111
95
self.assertEqual(work_foo, creator.work_transform.final_parent(
113
shelf_trans_id = creator.shelf_transform.trans_id_file_id(b'baz-id')
114
shelf_bar = creator.shelf_transform.trans_id_file_id(b'bar-id')
97
shelf_trans_id = creator.shelf_transform.trans_id_file_id('baz-id')
98
shelf_bar = creator.shelf_transform.trans_id_file_id('bar-id')
115
99
self.assertEqual(shelf_bar, creator.shelf_transform.final_parent(
117
101
creator.transform()
118
self.assertEqual('foo/baz', tree.id2path(b'baz-id'))
102
self.assertEqual('foo/baz', tree.id2path('baz-id'))
120
104
def test_shelve_move(self):
121
105
creator, tree = self.prepare_shelve_move()
122
creator.shelve_rename(b'baz-id')
106
creator.shelve_rename('baz-id')
123
107
self.check_shelve_move(creator, tree)
125
109
def test_shelve_change_handles_move(self):
126
110
creator, tree = self.prepare_shelve_move()
127
creator.shelve_change(('rename', b'baz-id', 'foo/baz', 'bar/baz'))
111
creator.shelve_change(('rename', 'baz-id', 'foo/baz', 'bar/baz'))
128
112
self.check_shelve_move(creator, tree)
130
114
def test_shelve_changed_root_id(self):
131
115
tree = self.make_branch_and_tree('.')
132
116
self.build_tree(['foo'])
133
tree.set_root_id(b'first-root-id')
134
tree.add(['foo'], [b'foo-id'])
117
tree.set_root_id('first-root-id')
118
tree.add(['foo'], ['foo-id'])
135
119
tree.commit('foo')
136
tree.set_root_id(b'second-root-id')
120
tree.set_root_id('second-root-id')
137
121
tree.lock_tree_write()
138
122
self.addCleanup(tree.unlock)
139
123
creator = shelf.ShelfCreator(tree, tree.basis_tree())
140
124
self.addCleanup(creator.finalize)
142
'shelf doesn\'t support shelving root changes yet',
125
self.expectFailure('shelf doesn\'t support shelving root changes yet',
143
126
self.assertEqual, [
144
('delete file', b'first-root-id', 'directory', ''),
145
('add file', b'second-root-id', 'directory', ''),
146
('rename', b'foo-id', u'foo', u'foo'),
127
('delete file', 'first-root-id', 'directory', ''),
128
('add file', 'second-root-id', 'directory', ''),
129
('rename', 'foo-id', u'foo', u'foo'),
147
130
], list(creator.iter_shelvable()))
149
self.assertEqual([('delete file', b'first-root-id', 'directory', ''),
150
('add file', b'second-root-id', 'directory', ''),
151
('rename', b'foo-id', u'foo', u'foo'),
152
], list(creator.iter_shelvable()))
132
self.assertEqual([('delete file', 'first-root-id', 'directory', ''),
133
('add file', 'second-root-id', 'directory', ''),
134
('rename', 'foo-id', u'foo', u'foo'),
135
], list(creator.iter_shelvable()))
154
137
def assertShelvedFileEqual(self, expected_content, creator, file_id):
155
138
s_trans_id = creator.shelf_transform.trans_id_file_id(file_id)
160
143
tree = self.make_branch_and_tree('.')
161
144
tree.lock_write()
162
145
self.addCleanup(tree.unlock)
163
self.build_tree_contents([('foo', b'a\n')])
164
tree.add('foo', b'foo-id')
146
self.build_tree_contents([('foo', 'a\n')])
147
tree.add('foo', 'foo-id')
165
148
tree.commit('Committed foo')
166
self.build_tree_contents([('foo', b'b\na\nc\n')])
149
self.build_tree_contents([('foo', 'b\na\nc\n')])
167
150
creator = shelf.ShelfCreator(tree, tree.basis_tree())
168
151
self.addCleanup(creator.finalize)
171
154
def test_shelve_content_change(self):
172
155
creator = self.prepare_content_change()
173
self.assertEqual([('modify text', b'foo-id')],
156
self.assertEqual([('modify text', 'foo-id')],
174
157
list(creator.iter_shelvable()))
175
creator.shelve_lines(b'foo-id', [b'a\n', b'c\n'])
158
creator.shelve_lines('foo-id', ['a\n', 'c\n'])
176
159
creator.transform()
177
self.assertFileEqual(b'a\nc\n', 'foo')
178
self.assertShelvedFileEqual(b'b\na\n', creator, b'foo-id')
160
self.assertFileEqual('a\nc\n', 'foo')
161
self.assertShelvedFileEqual('b\na\n', creator, 'foo-id')
180
163
def test_shelve_change_handles_modify_text(self):
181
164
creator = self.prepare_content_change()
182
creator.shelve_change(('modify text', b'foo-id'))
165
creator.shelve_change(('modify text', 'foo-id'))
183
166
creator.transform()
184
self.assertFileEqual(b'a\n', 'foo')
185
self.assertShelvedFileEqual(b'b\na\nc\n', creator, b'foo-id')
167
self.assertFileEqual('a\n', 'foo')
168
self.assertShelvedFileEqual('b\na\nc\n', creator, 'foo-id')
187
170
def test_shelve_all(self):
188
171
creator = self.prepare_content_change()
189
172
creator.shelve_all()
190
173
creator.transform()
191
self.assertFileEqual(b'a\n', 'foo')
192
self.assertShelvedFileEqual(b'b\na\nc\n', creator, b'foo-id')
174
self.assertFileEqual('a\n', 'foo')
175
self.assertShelvedFileEqual('b\na\nc\n', creator, 'foo-id')
194
177
def prepare_shelve_creation(self):
195
178
tree = self.make_branch_and_tree('.')
196
179
tree.lock_write()
197
180
self.addCleanup(tree.unlock)
198
181
tree.commit('Empty tree')
199
self.build_tree_contents([('foo', b'a\n'), ('bar/',)])
200
tree.add(['foo', 'bar'], [b'foo-id', b'bar-id'])
182
self.build_tree_contents([('foo', 'a\n'), ('bar/',)])
183
tree.add(['foo', 'bar'], ['foo-id', 'bar-id'])
201
184
creator = shelf.ShelfCreator(tree, tree.basis_tree())
202
185
self.addCleanup(creator.finalize)
203
self.assertEqual([('add file', b'bar-id', 'directory', 'bar'),
204
('add file', b'foo-id', 'file', 'foo')],
205
sorted(list(creator.iter_shelvable())))
186
self.assertEqual([('add file', 'bar-id', 'directory', 'bar'),
187
('add file', 'foo-id', 'file', 'foo')],
188
sorted(list(creator.iter_shelvable())))
206
189
return creator, tree
208
191
def check_shelve_creation(self, creator, tree):
211
tree.iter_entries_by_dir(specific_files=['foo']))
212
s_trans_id = creator.shelf_transform.trans_id_file_id(b'foo-id')
213
self.assertEqual(b'foo-id',
192
self.assertRaises(StopIteration,
193
tree.iter_entries_by_dir(['foo-id']).next)
194
s_trans_id = creator.shelf_transform.trans_id_file_id('foo-id')
195
self.assertEqual('foo-id',
214
196
creator.shelf_transform.final_file_id(s_trans_id))
215
197
self.assertPathDoesNotExist('foo')
216
198
self.assertPathDoesNotExist('bar')
217
self.assertShelvedFileEqual('a\n', creator, b'foo-id')
218
s_bar_trans_id = creator.shelf_transform.trans_id_file_id(b'bar-id')
199
self.assertShelvedFileEqual('a\n', creator, 'foo-id')
200
s_bar_trans_id = creator.shelf_transform.trans_id_file_id('bar-id')
219
201
self.assertEqual('directory',
220
creator.shelf_transform.final_kind(s_bar_trans_id))
202
creator.shelf_transform.final_kind(s_bar_trans_id))
222
204
def test_shelve_creation(self):
223
205
creator, tree = self.prepare_shelve_creation()
224
creator.shelve_creation(b'foo-id')
225
creator.shelve_creation(b'bar-id')
206
creator.shelve_creation('foo-id')
207
creator.shelve_creation('bar-id')
226
208
creator.transform()
227
209
self.check_shelve_creation(creator, tree)
229
211
def test_shelve_change_handles_creation(self):
230
212
creator, tree = self.prepare_shelve_creation()
231
creator.shelve_change(('add file', b'foo-id', 'file', 'foo'))
232
creator.shelve_change(('add file', b'bar-id', 'directory', 'bar'))
213
creator.shelve_change(('add file', 'foo-id', 'file', 'foo'))
214
creator.shelve_change(('add file', 'bar-id', 'directory', 'bar'))
233
215
creator.transform()
234
216
self.check_shelve_creation(creator, tree)
236
def test_shelve_directory_with_ignored(self):
237
tree = self.make_branch_and_tree('.')
239
self.addCleanup(tree.unlock)
240
tree.commit('Empty tree')
241
self.build_tree_contents(
242
[('foo', b'a\n'), ('bar/',), ('bar/ignored', b'ign\n')])
243
tree.add(['foo', 'bar'], [b'foo-id', b'bar-id'])
244
creator = shelf.ShelfCreator(tree, tree.basis_tree())
245
self.addCleanup(creator.finalize)
246
self.assertEqual([('add file', b'bar-id', 'directory', 'bar'),
247
('add file', b'foo-id', 'file', 'foo')],
248
sorted(list(creator.iter_shelvable())))
249
ignores._set_user_ignores([])
250
in_patterns = ['ignored', ]
251
ignores.add_unique_user_ignores(in_patterns)
253
creator.shelve_change(('add file', b'bar-id', 'directory', 'bar'))
256
self.check_shelve_creation(creator, tree)
257
except MalformedTransform:
259
'shelving directory with ignored file: see bug #611739')
261
218
def _test_shelve_symlink_creation(self, link_name, link_target,
262
219
shelve_change=False):
263
220
self.requireFeature(features.SymlinkFeature)
266
223
self.addCleanup(tree.unlock)
267
224
tree.commit('Empty tree')
268
225
os.symlink(link_target, link_name)
269
tree.add(link_name, b'foo-id')
226
tree.add(link_name, 'foo-id')
270
227
creator = shelf.ShelfCreator(tree, tree.basis_tree())
271
228
self.addCleanup(creator.finalize)
272
self.assertEqual([('add file', b'foo-id', 'symlink', link_name)],
229
self.assertEqual([('add file', 'foo-id', 'symlink', link_name)],
273
230
list(creator.iter_shelvable()))
274
231
if shelve_change:
275
creator.shelve_change(
276
('add file', b'foo-id', 'symlink', link_name))
232
creator.shelve_change(('add file', 'foo-id', 'symlink', link_name))
278
creator.shelve_creation(b'foo-id')
234
creator.shelve_creation('foo-id')
279
235
creator.transform()
280
s_trans_id = creator.shelf_transform.trans_id_file_id(b'foo-id')
236
s_trans_id = creator.shelf_transform.trans_id_file_id('foo-id')
281
237
self.assertPathDoesNotExist(link_name)
282
238
limbo_name = creator.shelf_transform._limbo_name(s_trans_id)
283
239
self.assertEqual(link_target, osutils.readlink(limbo_name))
284
240
ptree = creator.shelf_transform.get_preview_tree()
287
ptree.get_symlink_target(ptree.id2path(b'foo-id')))
241
self.assertEqual(link_target, ptree.get_symlink_target('foo-id'))
289
243
def test_shelve_symlink_creation(self):
290
244
self._test_shelve_symlink_creation('foo', 'bar')
305
259
tree.lock_write()
306
260
self.addCleanup(tree.unlock)
307
261
os.symlink(old_target, link_name)
308
tree.add(link_name, b'foo-id')
262
tree.add(link_name, 'foo-id')
309
263
tree.commit("commit symlink")
310
264
os.unlink(link_name)
311
265
os.symlink(new_target, link_name)
312
266
creator = shelf.ShelfCreator(tree, tree.basis_tree())
313
267
self.addCleanup(creator.finalize)
314
self.assertEqual([('modify target', b'foo-id', link_name,
268
self.assertEqual([('modify target', 'foo-id', link_name,
315
269
old_target, new_target)],
316
270
list(creator.iter_shelvable()))
317
271
if shelve_change:
318
creator.shelve_change(('modify target', b'foo-id', link_name,
272
creator.shelve_change(('modify target', 'foo-id', link_name,
319
273
old_target, new_target))
321
creator.shelve_modify_target(b'foo-id')
275
creator.shelve_modify_target('foo-id')
322
276
creator.transform()
323
277
self.assertEqual(old_target, osutils.readlink(link_name))
324
s_trans_id = creator.shelf_transform.trans_id_file_id(b'foo-id')
278
s_trans_id = creator.shelf_transform.trans_id_file_id('foo-id')
325
279
limbo_name = creator.shelf_transform._limbo_name(s_trans_id)
326
280
self.assertEqual(new_target, osutils.readlink(limbo_name))
327
281
ptree = creator.shelf_transform.get_preview_tree()
328
self.assertEqual(new_target, ptree.get_symlink_target(
329
ptree.id2path(b'foo-id')))
282
self.assertEqual(new_target, ptree.get_symlink_target('foo-id'))
331
284
def test_shelve_symlink_target_change(self):
332
285
self._test_shelve_symlink_target_change('foo', 'bar', 'baz')
346
299
self.addCleanup(tree.unlock)
347
300
tree.commit('Empty tree')
348
301
self.build_tree(['foo'])
349
tree.add('foo', b'foo-id')
302
tree.add('foo', 'foo-id')
351
304
creator = shelf.ShelfCreator(tree, tree.basis_tree())
352
305
self.addCleanup(creator.finalize)
353
self.assertEqual([('add file', b'foo-id', None, 'foo')],
306
self.assertEqual([('add file', 'foo-id', None, 'foo')],
354
307
sorted(list(creator.iter_shelvable())))
355
creator.shelve_creation(b'foo-id')
308
creator.shelve_creation('foo-id')
356
309
creator.transform()
359
tree.iter_entries_by_dir(specific_files=['foo']))
360
self.assertShelvedFileEqual('', creator, b'foo-id')
361
s_trans_id = creator.shelf_transform.trans_id_file_id(b'foo-id')
362
self.assertEqual(b'foo-id',
310
self.assertRaises(StopIteration,
311
tree.iter_entries_by_dir(['foo-id']).next)
312
self.assertShelvedFileEqual('', creator, 'foo-id')
313
s_trans_id = creator.shelf_transform.trans_id_file_id('foo-id')
314
self.assertEqual('foo-id',
363
315
creator.shelf_transform.final_file_id(s_trans_id))
364
316
self.assertPathDoesNotExist('foo')
367
319
tree = self.make_branch_and_tree('tree')
368
320
tree.lock_write()
369
321
self.addCleanup(tree.unlock)
370
self.build_tree_contents([('tree/foo/',), ('tree/foo/bar', b'baz')])
371
tree.add(['foo', 'foo/bar'], [b'foo-id', b'bar-id'])
322
self.build_tree_contents([('tree/foo/',), ('tree/foo/bar', 'baz')])
323
tree.add(['foo', 'foo/bar'], ['foo-id', 'bar-id'])
372
324
tree.commit('Added file and directory')
373
tree.unversion(['foo', 'foo/bar'])
325
tree.unversion(['foo-id', 'bar-id'])
374
326
os.unlink('tree/foo/bar')
375
327
os.rmdir('tree/foo')
376
328
creator = shelf.ShelfCreator(tree, tree.basis_tree())
377
329
self.addCleanup(creator.finalize)
378
self.assertEqual([('delete file', b'bar-id', 'file', 'foo/bar'),
379
('delete file', b'foo-id', 'directory', 'foo')],
380
sorted(list(creator.iter_shelvable())))
330
self.assertEqual([('delete file', 'bar-id', 'file', 'foo/bar'),
331
('delete file', 'foo-id', 'directory', 'foo')],
332
sorted(list(creator.iter_shelvable())))
381
333
return creator, tree
383
335
def check_shelve_deletion(self, tree):
384
self.assertEqual(tree.id2path(b'foo-id'), 'foo')
385
self.assertEqual(tree.id2path(b'bar-id'), 'foo/bar')
386
self.assertFileEqual(b'baz', 'tree/foo/bar')
336
self.assertTrue(tree.has_id('foo-id'))
337
self.assertTrue(tree.has_id('bar-id'))
338
self.assertFileEqual('baz', 'tree/foo/bar')
388
340
def test_shelve_deletion(self):
389
341
creator, tree = self.prepare_shelve_deletion()
390
creator.shelve_deletion(b'foo-id')
391
creator.shelve_deletion(b'bar-id')
342
creator.shelve_deletion('foo-id')
343
creator.shelve_deletion('bar-id')
392
344
creator.transform()
393
345
self.check_shelve_deletion(tree)
395
347
def test_shelve_change_handles_deletion(self):
396
348
creator, tree = self.prepare_shelve_deletion()
397
creator.shelve_change(('delete file', b'foo-id', 'directory', 'foo'))
398
creator.shelve_change(('delete file', b'bar-id', 'file', 'foo/bar'))
349
creator.shelve_change(('delete file', 'foo-id', 'directory', 'foo'))
350
creator.shelve_change(('delete file', 'bar-id', 'file', 'foo/bar'))
399
351
creator.transform()
400
352
self.check_shelve_deletion(tree)
402
354
def test_shelve_delete_contents(self):
403
355
tree = self.make_branch_and_tree('tree')
404
self.build_tree(['tree/foo', ])
405
tree.add('foo', b'foo-id')
356
self.build_tree(['tree/foo',])
357
tree.add('foo', 'foo-id')
406
358
tree.commit('Added file and directory')
407
359
os.unlink('tree/foo')
408
360
tree.lock_tree_write()
409
361
self.addCleanup(tree.unlock)
410
362
creator = shelf.ShelfCreator(tree, tree.basis_tree())
411
363
self.addCleanup(creator.finalize)
412
self.assertEqual([('delete file', b'foo-id', 'file', 'foo')],
364
self.assertEqual([('delete file', 'foo-id', 'file', 'foo')],
413
365
sorted(list(creator.iter_shelvable())))
414
creator.shelve_deletion(b'foo-id')
366
creator.shelve_deletion('foo-id')
415
367
creator.transform()
416
368
self.assertPathExists('tree/foo')
418
370
def prepare_shelve_change_kind(self):
419
371
tree = self.make_branch_and_tree('tree')
420
self.build_tree_contents([('tree/foo', b'bar')])
421
tree.add('foo', b'foo-id')
372
self.build_tree_contents([('tree/foo', 'bar')])
373
tree.add('foo', 'foo-id')
422
374
tree.commit('Added file and directory')
423
375
os.unlink('tree/foo')
424
376
os.mkdir('tree/foo')
426
378
self.addCleanup(tree.unlock)
427
379
creator = shelf.ShelfCreator(tree, tree.basis_tree())
428
380
self.addCleanup(creator.finalize)
429
self.assertEqual([('change kind', b'foo-id', 'file', 'directory',
381
self.assertEqual([('change kind', 'foo-id', 'file', 'directory',
430
382
'foo')], sorted(list(creator.iter_shelvable())))
433
385
def check_shelve_change_kind(self, creator):
434
self.assertFileEqual(b'bar', 'tree/foo')
435
s_trans_id = creator.shelf_transform.trans_id_file_id(b'foo-id')
386
self.assertFileEqual('bar', 'tree/foo')
387
s_trans_id = creator.shelf_transform.trans_id_file_id('foo-id')
436
388
self.assertEqual('directory',
437
389
creator.shelf_transform._new_contents[s_trans_id])
439
391
def test_shelve_change_kind(self):
440
392
creator = self.prepare_shelve_change_kind()
441
creator.shelve_content_change(b'foo-id')
393
creator.shelve_content_change('foo-id')
442
394
creator.transform()
443
395
self.check_shelve_change_kind(creator)
445
397
def test_shelve_change_handles_change_kind(self):
446
398
creator = self.prepare_shelve_change_kind()
447
creator.shelve_change(('change kind', b'foo-id', 'file', 'directory',
399
creator.shelve_change(('change kind', 'foo-id', 'file', 'directory',
449
401
creator.transform()
450
402
self.check_shelve_change_kind(creator)
491
443
def test_write_shelf(self):
492
444
tree = self.make_branch_and_tree('tree')
493
445
self.build_tree(['tree/foo'])
494
tree.add('foo', b'foo-id')
446
tree.add('foo', 'foo-id')
495
447
tree.lock_tree_write()
496
448
self.addCleanup(tree.unlock)
497
449
creator = shelf.ShelfCreator(tree, tree.basis_tree())
498
450
self.addCleanup(creator.finalize)
499
451
list(creator.iter_shelvable())
500
creator.shelve_creation(b'foo-id')
501
with open('shelf', 'wb') as shelf_file:
452
creator.shelve_creation('foo-id')
453
shelf_file = open('shelf', 'wb')
502
455
creator.write_shelf(shelf_file)
503
458
parser = pack.ContainerPushParser()
504
with open('shelf', 'rb') as shelf_file:
459
shelf_file = open('shelf', 'rb')
505
461
parser.accept_bytes(shelf_file.read())
506
464
tt = transform.TransformPreview(tree)
507
465
self.addCleanup(tt.finalize)
508
466
records = iter(parser.read_pending_records())
511
469
tt.deserialize(records)
513
471
def test_shelve_unversioned(self):
514
472
tree = self.make_branch_and_tree('tree')
515
with tree.lock_tree_write():
473
tree.lock_tree_write()
516
475
self.assertRaises(errors.PathsNotVersionedError,
517
shelf.ShelfCreator, tree, tree.basis_tree(),
476
shelf.ShelfCreator, tree, tree.basis_tree(), ['foo'])
519
479
# We should be able to lock/unlock the tree if ShelfCreator cleaned
521
481
wt = workingtree.WorkingTree.open('tree')
552
514
def test_make_merger(self):
553
515
tree = self.make_branch_and_tree('tree')
554
516
tree.commit('first commit')
555
self.build_tree_contents([('tree/foo', b'bar')])
517
self.build_tree_contents([('tree/foo', 'bar')])
556
518
tree.lock_write()
557
519
self.addCleanup(tree.unlock)
558
tree.add('foo', b'foo-id')
520
tree.add('foo', 'foo-id')
559
521
creator = shelf.ShelfCreator(tree, tree.basis_tree())
560
522
self.addCleanup(creator.finalize)
561
523
list(creator.iter_shelvable())
562
creator.shelve_creation(b'foo-id')
563
with open('shelf-file', 'w+b') as shelf_file:
524
creator.shelve_creation('foo-id')
525
shelf_file = open('shelf-file', 'w+b')
564
527
creator.write_shelf(shelf_file)
565
528
creator.transform()
566
529
shelf_file.seek(0)
567
530
unshelver = shelf.Unshelver.from_tree_and_shelf(tree, shelf_file)
568
531
unshelver.make_merger().do_merge()
569
532
self.addCleanup(unshelver.finalize)
570
self.assertFileEqual(b'bar', 'tree/foo')
533
self.assertFileEqual('bar', 'tree/foo')
572
537
def test_unshelve_changed(self):
573
538
tree = self.make_branch_and_tree('tree')
574
539
tree.lock_write()
575
540
self.addCleanup(tree.unlock)
576
self.build_tree_contents([('tree/foo', b'a\nb\nc\n')])
577
tree.add('foo', b'foo-id')
541
self.build_tree_contents([('tree/foo', 'a\nb\nc\n')])
542
tree.add('foo', 'foo-id')
578
543
tree.commit('first commit')
579
self.build_tree_contents([('tree/foo', b'a\nb\nd\n')])
544
self.build_tree_contents([('tree/foo', 'a\nb\nd\n')])
580
545
creator = shelf.ShelfCreator(tree, tree.basis_tree())
581
546
self.addCleanup(creator.finalize)
582
547
list(creator.iter_shelvable())
583
creator.shelve_lines(b'foo-id', [b'a\n', b'b\n', b'c\n'])
548
creator.shelve_lines('foo-id', ['a\n', 'b\n', 'c\n'])
584
549
shelf_file = open('shelf', 'w+b')
585
550
self.addCleanup(shelf_file.close)
586
551
creator.write_shelf(shelf_file)
587
552
creator.transform()
588
self.build_tree_contents([('tree/foo', b'z\na\nb\nc\n')])
553
self.build_tree_contents([('tree/foo', 'z\na\nb\nc\n')])
589
554
shelf_file.seek(0)
590
555
unshelver = shelf.Unshelver.from_tree_and_shelf(tree, shelf_file)
591
556
self.addCleanup(unshelver.finalize)
592
557
unshelver.make_merger().do_merge()
593
self.assertFileEqual(b'z\na\nb\nd\n', 'tree/foo')
558
self.assertFileEqual('z\na\nb\nd\n', 'tree/foo')
595
560
def test_unshelve_deleted(self):
596
561
tree = self.make_branch_and_tree('tree')
597
562
tree.lock_write()
598
563
self.addCleanup(tree.unlock)
599
self.build_tree_contents([('tree/foo/',), ('tree/foo/bar', b'baz')])
600
tree.add(['foo', 'foo/bar'], [b'foo-id', b'bar-id'])
564
self.build_tree_contents([('tree/foo/',), ('tree/foo/bar', 'baz')])
565
tree.add(['foo', 'foo/bar'], ['foo-id', 'bar-id'])
601
566
tree.commit('Added file and directory')
602
tree.unversion(['foo', 'foo/bar'])
567
tree.unversion(['foo-id', 'bar-id'])
603
568
os.unlink('tree/foo/bar')
604
569
os.rmdir('tree/foo')
605
570
creator = shelf.ShelfCreator(tree, tree.basis_tree())
606
571
list(creator.iter_shelvable())
607
creator.shelve_deletion(b'foo-id')
608
creator.shelve_deletion(b'bar-id')
572
creator.shelve_deletion('foo-id')
573
creator.shelve_deletion('bar-id')
609
574
with open('shelf', 'w+b') as shelf_file:
610
575
creator.write_shelf(shelf_file)
611
576
creator.transform()
612
577
creator.finalize()
613
578
# validate the test setup
614
self.assertEqual(tree.id2path(b'foo-id'), 'foo')
615
self.assertEqual(tree.id2path(b'bar-id'), 'foo/bar')
616
self.assertFileEqual(b'baz', 'tree/foo/bar')
579
self.assertTrue(tree.has_id('foo-id'))
580
self.assertTrue(tree.has_id('bar-id'))
581
self.assertFileEqual('baz', 'tree/foo/bar')
617
582
with open('shelf', 'r+b') as shelf_file:
618
583
unshelver = shelf.Unshelver.from_tree_and_shelf(tree, shelf_file)
619
584
self.addCleanup(unshelver.finalize)
620
585
unshelver.make_merger().do_merge()
621
self.assertRaises(errors.NoSuchId, tree.id2path, b'foo-id')
622
self.assertRaises(errors.NoSuchId, tree.id2path, b'bar-id')
586
self.assertFalse(tree.has_id('foo-id'))
587
self.assertFalse(tree.has_id('bar-id'))
624
589
def test_unshelve_base(self):
625
590
tree = self.make_branch_and_tree('tree')
626
591
tree.lock_write()
627
592
self.addCleanup(tree.unlock)
628
tree.commit('rev1', rev_id=b'rev1')
593
tree.commit('rev1', rev_id='rev1')
629
594
creator = shelf.ShelfCreator(tree, tree.basis_tree())
630
595
self.addCleanup(creator.finalize)
631
596
manager = tree.get_shelf_manager()