~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Tarmac
  • Author(s): Vincent Ladeuil, Patch Queue Manager, Jelmer Vernooij
  • Date: 2017-01-17 16:20:41 UTC
  • mfrom: (6619.1.2 trunk)
  • Revision ID: tarmac-20170117162041-oo62uk1qsmgc9j31
Merge 2.7 into trunk including fixes for bugs #1622039, #1644003, #1579093 and #1645017. [r=vila]

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
import os
21
21
 
22
22
from bzrlib import (
23
 
    branchbuilder,
 
23
    conflicts,
24
24
    errors,
25
 
    merge
 
25
    merge,
26
26
    )
27
27
from bzrlib.tests import per_workingtree
28
28
 
119
119
 
120
120
class TestMergedBranch(per_workingtree.TestCaseWithWorkingTree):
121
121
 
122
 
    def make_branch_builder(self, relpath, format=None):
123
 
        if format is None:
124
 
            format = self.bzrdir_format
125
 
        builder = branchbuilder.BranchBuilder(self.get_transport(),
126
 
                                              format=format)
127
 
        return builder
128
 
 
129
122
    def make_inner_branch(self):
130
123
        bld_inner = self.make_branch_builder('inner')
131
124
        bld_inner.start_series()
137
130
             ('add', ('file3', 'file3-id', 'file', 'file3 content\n')),
138
131
             ])
139
132
        bld_inner.build_snapshot(
 
133
            '4', ['1'],
 
134
            [('add', ('file4', 'file4-id', 'file', 'file4 content\n'))
 
135
             ])
 
136
        bld_inner.build_snapshot(
 
137
            '5', ['4'], [('rename', ('file4', 'dir/file4'))])
 
138
        bld_inner.build_snapshot(
140
139
            '3', ['1'], [('modify', ('file3-id', 'new file3 contents\n')),])
141
140
        bld_inner.build_snapshot(
142
141
            '2', ['1'],
163
162
        outer.commit('added foo')
164
163
        inner = self.make_inner_branch()
165
164
        outer.merge_from_branch(inner, to_revision='1', from_revision='null:')
 
165
        #retain original root id.
 
166
        outer.set_root_id(outer.basis_tree().get_root_id())
166
167
        outer.commit('merge inner branch')
167
168
        outer.mkdir('dir-outer', 'dir-outer-id')
168
169
        outer.move(['dir', 'file3'], to_dir='dir-outer')
215
216
                               'foo'],
216
217
                              outer)
217
218
 
 
219
    def test_file4_added_in_root(self):
 
220
        outer, inner = self.make_outer_tree()
 
221
        nb_conflicts = outer.merge_from_branch(inner, to_revision='4')
 
222
        # file4 could not be added to its original root, so it gets added to
 
223
        # the new root with a conflict.
 
224
        self.assertEqual(1, nb_conflicts)
 
225
        self.assertTreeLayout(['dir-outer',
 
226
                               'dir-outer/dir',
 
227
                               'dir-outer/dir/file1',
 
228
                               'dir-outer/file3',
 
229
                               'file4',
 
230
                               'foo'],
 
231
                              outer)
 
232
 
 
233
    def test_file4_added_then_renamed(self):
 
234
        outer, inner = self.make_outer_tree()
 
235
        # 1 conflict, because file4 can't be put into the old root
 
236
        self.assertEqual(1, outer.merge_from_branch(inner, to_revision='4'))
 
237
        try:
 
238
            outer.set_conflicts(conflicts.ConflictList())
 
239
        except errors.UnsupportedOperation:
 
240
            # WT2 doesn't have a separate list of conflicts to clear. It
 
241
            # actually says there is a conflict, but happily forgets all about
 
242
            # it.
 
243
            pass
 
244
        outer.commit('added file4')
 
245
        # And now file4 gets renamed into an existing dir
 
246
        nb_conflicts = outer.merge_from_branch(inner, to_revision='5')
 
247
        self.assertEqual(1, nb_conflicts)
 
248
        self.assertTreeLayout(['dir-outer',
 
249
                               'dir-outer/dir',
 
250
                               'dir-outer/dir/file1',
 
251
                               'dir-outer/dir/file4',
 
252
                               'dir-outer/file3',
 
253
                               'foo'],
 
254
                              outer)