/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/tests/per_workingtree/test_merge_from_branch.py

  • Committer: Jelmer Vernooij
  • Date: 2018-03-27 01:05:35 UTC
  • mto: (6940.2.1 base)
  • mto: This revision was merged to the branch mainline in revision 6942.
  • Revision ID: jelmer@jelmer.uk-20180327010535-b0ifkr2cveufyo2d
Cope with trees without rename tracking in merge_from_branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
160
160
        inner, revs = self.make_inner_branch()
161
161
        outer.merge_from_branch(inner, to_revision=revs[0], from_revision=b'null:')
162
162
        #retain original root id.
163
 
        outer.set_root_id(outer.basis_tree().get_root_id())
 
163
        if outer.supports_setting_file_ids():
 
164
            outer.set_root_id(outer.basis_tree().get_root_id())
164
165
        outer.commit('merge inner branch')
165
 
        outer.mkdir('dir-outer', b'dir-outer-id')
 
166
        outer.mkdir('dir-outer')
166
167
        outer.move(['dir', 'file3'], to_dir='dir-outer')
167
168
        outer.commit('rename imported dir and file3 to dir-outer')
168
169
        return outer, inner, revs
173
174
        outer.commit('delete file1')
174
175
        outer.merge_from_branch(inner)
175
176
        outer.commit('merge the rest')
176
 
        self.assertTreeLayout(['dir-outer',
177
 
                               'dir-outer/dir',
178
 
                               'dir-outer/dir/file2',
179
 
                               'dir-outer/file3',
180
 
                               'foo'],
181
 
                              outer)
 
177
        if outer.supports_rename_tracking():
 
178
            self.assertTreeLayout(['dir-outer',
 
179
                                   'dir-outer/dir',
 
180
                                   'dir-outer/dir/file2',
 
181
                                   'dir-outer/file3',
 
182
                                   'foo'],
 
183
                                  outer)
 
184
        else:
 
185
            self.assertTreeLayout(['dir',
 
186
                                   'dir-outer',
 
187
                                   'dir-outer/dir',
 
188
                                   'dir-outer/file3',
 
189
                                   'dir/file2',
 
190
                                   'foo'],
 
191
                                  outer)
182
192
 
183
193
    def test_file3_deleted_in_root(self):
184
194
        # Reproduce bug #375898
187
197
        outer.commit('delete file3')
188
198
        outer.merge_from_branch(inner)
189
199
        outer.commit('merge the rest')
190
 
        self.assertTreeLayout(['dir-outer',
191
 
                               'dir-outer/dir',
192
 
                               'dir-outer/dir/file1',
193
 
                               'dir-outer/dir/file2',
194
 
                               'foo'],
195
 
                              outer)
196
 
 
 
200
        if outer.supports_rename_tracking():
 
201
            self.assertTreeLayout(['dir-outer',
 
202
                                   'dir-outer/dir',
 
203
                                   'dir-outer/dir/file1',
 
204
                                   'dir-outer/dir/file2',
 
205
                                   'foo'],
 
206
                                  outer)
 
207
        else:
 
208
            self.assertTreeLayout(['dir',
 
209
                                   'dir-outer',
 
210
                                   'dir-outer/dir',
 
211
                                   'dir-outer/dir/file1',
 
212
                                   'dir/file2',
 
213
                                   'foo'],
 
214
                                  outer)
197
215
 
198
216
    def test_file3_in_root_conflicted(self):
199
217
        outer, inner, revs = self.make_outer_tree()
200
218
        outer.remove(['dir-outer/file3'], keep_files=False)
201
219
        outer.commit('delete file3')
202
220
        nb_conflicts = outer.merge_from_branch(inner, to_revision=revs[2])
203
 
        self.assertEqual(4, nb_conflicts)
 
221
        if outer.supports_rename_tracking():
 
222
            self.assertEqual(4, nb_conflicts)
 
223
        else:
 
224
            self.assertEqual(1, nb_conflicts)
204
225
        self.assertTreeLayout(['dir-outer',
205
226
                               'dir-outer/dir',
206
227
                               'dir-outer/dir/file1',
218
239
        nb_conflicts = outer.merge_from_branch(inner, to_revision=revs[3])
219
240
        # file4 could not be added to its original root, so it gets added to
220
241
        # the new root with a conflict.
221
 
        self.assertEqual(1, nb_conflicts)
 
242
        if outer.supports_rename_tracking():
 
243
            self.assertEqual(1, nb_conflicts)
 
244
        else:
 
245
            self.assertEqual(0, nb_conflicts)
222
246
        self.assertTreeLayout(['dir-outer',
223
247
                               'dir-outer/dir',
224
248
                               'dir-outer/dir/file1',
230
254
    def test_file4_added_then_renamed(self):
231
255
        outer, inner, revs = self.make_outer_tree()
232
256
        # 1 conflict, because file4 can't be put into the old root
233
 
        self.assertEqual(1, outer.merge_from_branch(inner, to_revision=revs[3]))
 
257
        nb_conflicts = outer.merge_from_branch(inner, to_revision=revs[3])
 
258
        if outer.supports_rename_tracking():
 
259
            self.assertEqual(1, nb_conflicts)
 
260
        else:
 
261
            self.assertEqual(0, nb_conflicts)
234
262
        try:
235
263
            outer.set_conflicts(conflicts.ConflictList())
236
264
        except errors.UnsupportedOperation:
241
269
        outer.commit('added file4')
242
270
        # And now file4 gets renamed into an existing dir
243
271
        nb_conflicts = outer.merge_from_branch(inner, to_revision=revs[4])
244
 
        self.assertEqual(1, nb_conflicts)
245
 
        self.assertTreeLayout(['dir-outer',
246
 
                               'dir-outer/dir',
247
 
                               'dir-outer/dir/file1',
248
 
                               'dir-outer/dir/file4',
249
 
                               'dir-outer/file3',
250
 
                               'foo'],
251
 
                              outer)
 
272
        if outer.supports_rename_tracking():
 
273
            self.assertEqual(1, nb_conflicts)
 
274
            self.assertTreeLayout(['dir-outer',
 
275
                                   'dir-outer/dir',
 
276
                                   'dir-outer/dir/file1',
 
277
                                   'dir-outer/dir/file4',
 
278
                                   'dir-outer/file3',
 
279
                                   'foo'],
 
280
                                  outer)
 
281
        else:
 
282
            self.assertEqual(2, nb_conflicts)
 
283
            self.assertTreeLayout(['dir',
 
284
                                   'dir-outer',
 
285
                                   'dir-outer/dir',
 
286
                                   'dir-outer/dir/file1',
 
287
                                   'dir-outer/file3',
 
288
                                   'dir/file4',
 
289
                                   'foo'],
 
290
                                  outer)