154
129
self.assertEqual('directory',
155
130
creator.shelf_transform.final_kind(s_bar_trans_id))
157
def test_shelve_creation(self):
158
creator, tree = self.prepare_shelve_creation()
159
creator.shelve_creation('foo-id')
160
creator.shelve_creation('bar-id')
162
self.check_shelve_creation(creator, tree)
164
def test_shelve_change_handles_creation(self):
165
creator, tree = self.prepare_shelve_creation()
166
creator.shelve_change(('add file', 'foo-id', 'file', 'foo'))
167
creator.shelve_change(('add file', 'bar-id', 'directory', 'bar'))
169
self.check_shelve_creation(creator, tree)
171
def _test_shelve_symlink_creation(self, link_name, link_target,
172
shelve_change=False):
173
self.requireFeature(tests.SymlinkFeature)
174
tree = self.make_branch_and_tree('.')
176
self.addCleanup(tree.unlock)
177
tree.commit('Empty tree')
178
os.symlink(link_target, link_name)
179
tree.add(link_name, 'foo-id')
180
creator = shelf.ShelfCreator(tree, tree.basis_tree())
181
self.addCleanup(creator.finalize)
182
self.assertEqual([('add file', 'foo-id', 'symlink', link_name)],
183
list(creator.iter_shelvable()))
185
creator.shelve_change(('add file', 'foo-id', 'symlink', link_name))
187
creator.shelve_creation('foo-id')
189
s_trans_id = creator.shelf_transform.trans_id_file_id('foo-id')
190
self.failIfExists(link_name)
191
limbo_name = creator.shelf_transform._limbo_name(s_trans_id)
192
self.assertEqual(link_target, osutils.readlink(limbo_name))
193
ptree = creator.shelf_transform.get_preview_tree()
194
self.assertEqual(link_target, ptree.get_symlink_target('foo-id'))
196
132
def test_shelve_symlink_creation(self):
197
self._test_shelve_symlink_creation('foo', 'bar')
199
def test_shelve_unicode_symlink_creation(self):
200
self.requireFeature(tests.UnicodeFilenameFeature)
201
self._test_shelve_symlink_creation(u'fo\N{Euro Sign}o',
204
def test_shelve_change_handles_symlink_creation(self):
205
self._test_shelve_symlink_creation('foo', 'bar', shelve_change=True)
207
def _test_shelve_symlink_target_change(self, link_name,
208
old_target, new_target,
209
shelve_change=False):
210
self.requireFeature(tests.SymlinkFeature)
211
tree = self.make_branch_and_tree('.')
213
self.addCleanup(tree.unlock)
214
os.symlink(old_target, link_name)
215
tree.add(link_name, 'foo-id')
133
self.requireFeature(tests.SymlinkFeature)
134
tree = self.make_branch_and_tree('.')
136
self.addCleanup(tree.unlock)
137
tree.commit('Empty tree')
138
os.symlink('bar', 'foo')
139
tree.add('foo', 'foo-id')
140
creator = shelf.ShelfCreator(tree, tree.basis_tree())
141
self.addCleanup(creator.finalize)
142
self.assertEqual([('add file', 'foo-id', 'symlink', 'foo')],
143
list(creator.iter_shelvable()))
144
creator.shelve_creation('foo-id')
146
s_trans_id = creator.shelf_transform.trans_id_file_id('foo-id')
147
self.failIfExists('foo')
148
limbo_name = creator.shelf_transform._limbo_name(s_trans_id)
149
self.assertEqual('bar', os.readlink(limbo_name))
151
def test_shelve_symlink_target_change(self):
152
self.requireFeature(tests.SymlinkFeature)
153
tree = self.make_branch_and_tree('.')
155
self.addCleanup(tree.unlock)
156
os.symlink('bar', 'foo')
157
tree.add('foo', 'foo-id')
216
158
tree.commit("commit symlink")
218
os.symlink(new_target, link_name)
160
os.symlink('baz', 'foo')
219
161
creator = shelf.ShelfCreator(tree, tree.basis_tree())
220
162
self.addCleanup(creator.finalize)
221
self.assertEqual([('modify target', 'foo-id', link_name,
222
old_target, new_target)],
163
self.assertEqual([('modify target', 'foo-id', 'foo', 'bar', 'baz')],
223
164
list(creator.iter_shelvable()))
225
creator.shelve_change(('modify target', 'foo-id', link_name,
226
old_target, new_target))
228
creator.shelve_modify_target('foo-id')
165
creator.shelve_modify_target('foo-id')
229
166
creator.transform()
230
self.assertEqual(old_target, osutils.readlink(link_name))
167
self.assertEqual('bar', os.readlink('foo'))
231
168
s_trans_id = creator.shelf_transform.trans_id_file_id('foo-id')
232
169
limbo_name = creator.shelf_transform._limbo_name(s_trans_id)
233
self.assertEqual(new_target, osutils.readlink(limbo_name))
234
ptree = creator.shelf_transform.get_preview_tree()
235
self.assertEqual(new_target, ptree.get_symlink_target('foo-id'))
237
def test_shelve_symlink_target_change(self):
238
self._test_shelve_symlink_target_change('foo', 'bar', 'baz')
240
def test_shelve_unicode_symlink_target_change(self):
241
self.requireFeature(tests.UnicodeFilenameFeature)
242
self._test_shelve_symlink_target_change(
243
u'fo\N{Euro Sign}o', u'b\N{Euro Sign}ar', u'b\N{Euro Sign}az')
245
def test_shelve_change_handles_symlink_target_change(self):
246
self._test_shelve_symlink_target_change('foo', 'bar', 'baz',
170
self.assertEqual('baz', os.readlink(limbo_name))
249
172
def test_shelve_creation_no_contents(self):
250
173
tree = self.make_branch_and_tree('.')
283
206
self.assertEqual([('delete file', 'bar-id', 'file', 'foo/bar'),
284
207
('delete file', 'foo-id', 'directory', 'foo')],
285
208
sorted(list(creator.iter_shelvable())))
288
def check_shelve_deletion(self, tree):
209
creator.shelve_deletion('foo-id')
210
creator.shelve_deletion('bar-id')
289
212
self.assertTrue('foo-id' in tree)
290
213
self.assertTrue('bar-id' in tree)
291
214
self.assertFileEqual('baz', 'tree/foo/bar')
293
def test_shelve_deletion(self):
294
creator, tree = self.prepare_shelve_deletion()
295
creator.shelve_deletion('foo-id')
296
creator.shelve_deletion('bar-id')
298
self.check_shelve_deletion(tree)
300
def test_shelve_change_handles_deletion(self):
301
creator, tree = self.prepare_shelve_deletion()
302
creator.shelve_change(('delete file', 'foo-id', 'directory', 'foo'))
303
creator.shelve_change(('delete file', 'bar-id', 'file', 'foo/bar'))
305
self.check_shelve_deletion(tree)
307
216
def test_shelve_delete_contents(self):
308
217
tree = self.make_branch_and_tree('tree')
309
218
self.build_tree(['tree/foo',])
329
238
self.addCleanup(creator.finalize)
330
239
self.assertEqual([('change kind', 'foo-id', 'file', 'directory',
331
240
'foo')], sorted(list(creator.iter_shelvable())))
334
def check_shelve_change_kind(self, creator):
241
creator.shelve_content_change('foo-id')
335
243
self.assertFileEqual('bar', 'tree/foo')
336
244
s_trans_id = creator.shelf_transform.trans_id_file_id('foo-id')
337
245
self.assertEqual('directory',
338
246
creator.shelf_transform._new_contents[s_trans_id])
340
def test_shelve_change_kind(self):
341
creator = self.prepare_shelve_change_kind()
342
creator.shelve_content_change('foo-id')
344
self.check_shelve_change_kind(creator)
346
def test_shelve_change_handles_change_kind(self):
347
creator = self.prepare_shelve_change_kind()
348
creator.shelve_change(('change kind', 'foo-id', 'file', 'directory',
351
self.check_shelve_change_kind(creator)
353
def test_shelve_change_unknown_change(self):
354
tree = self.make_branch_and_tree('tree')
355
creator = shelf.ShelfCreator(tree, tree.basis_tree())
356
self.addCleanup(creator.finalize)
357
e = self.assertRaises(ValueError, creator.shelve_change, ('unknown',))
358
self.assertEqual('Unknown change kind: "unknown"', str(e))
360
248
def test_shelve_unversion(self):
361
249
tree = self.make_branch_and_tree('tree')
362
250
self.build_tree(['tree/foo',])