~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: Canonical.com Patch Queue Manager
  • Date: 2010-02-11 04:02:41 UTC
  • mfrom: (5017.2.2 tariff)
  • Revision ID: pqm@pqm.ubuntu.com-20100211040241-w6n021dz0uus341n
(mbp) add import-tariff tests

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
 
1
# Copyright (C) 2006 Canonical Ltd
2
2
# Authors:  Robert Collins <robert.collins@canonical.com>
3
3
#
4
4
# This program is free software; you can redistribute it and/or modify
20
20
import os
21
21
 
22
22
from bzrlib import (
23
 
    branchbuilder,
24
23
    errors,
25
24
    merge
26
25
    )
27
 
from bzrlib.tests import per_workingtree
28
 
 
29
 
 
30
 
class TestMergeFromBranch(per_workingtree.TestCaseWithWorkingTree):
 
26
from bzrlib.tests.per_workingtree import TestCaseWithWorkingTree
 
27
 
 
28
 
 
29
class TestMergeFromBranch(TestCaseWithWorkingTree):
31
30
 
32
31
    def create_two_trees_for_merging(self):
33
32
        """Create two trees that can be merged from.
115
114
                self.tt.create_file('qux', trans_id)
116
115
        this.merge_from_branch(other.branch, merge_type=QuxMerge)
117
116
        self.assertEqual('qux', this.get_file_text('foo-id'))
118
 
 
119
 
 
120
 
class TestMergedBranch(per_workingtree.TestCaseWithWorkingTree):
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
 
    def make_inner_branch(self):
130
 
        bld_inner = self.make_branch_builder('inner')
131
 
        bld_inner.start_series()
132
 
        bld_inner.build_snapshot(
133
 
            '1', None,
134
 
            [('add', ('', 'inner-root-id', 'directory', '')),
135
 
             ('add', ('dir', 'dir-id', 'directory', '')),
136
 
             ('add', ('dir/file1', 'file1-id', 'file', 'file1 content\n')),
137
 
             ('add', ('file3', 'file3-id', 'file', 'file3 content\n')),
138
 
             ])
139
 
        bld_inner.build_snapshot(
140
 
            '3', ['1'], [('modify', ('file3-id', 'new file3 contents\n')),])
141
 
        bld_inner.build_snapshot(
142
 
            '2', ['1'],
143
 
            [('add', ('dir/file2', 'file2-id', 'file', 'file2 content\n')),
144
 
             ])
145
 
        bld_inner.finish_series()
146
 
        br = bld_inner.get_branch()
147
 
        return br
148
 
 
149
 
    def assertTreeLayout(self, expected, tree):
150
 
        tree.lock_read()
151
 
        try:
152
 
            actual = [e[0] for e in tree.list_files()]
153
 
            # list_files doesn't guarantee order
154
 
            actual = sorted(actual)
155
 
            self.assertEqual(expected, actual)
156
 
        finally:
157
 
            tree.unlock()
158
 
 
159
 
    def make_outer_tree(self):
160
 
        outer = self.make_branch_and_tree('outer')
161
 
        self.build_tree_contents([('outer/foo', 'foo')])
162
 
        outer.add('foo', 'foo-id')
163
 
        outer.commit('added foo')
164
 
        inner = self.make_inner_branch()
165
 
        outer.merge_from_branch(inner, to_revision='1', from_revision='null:')
166
 
        outer.commit('merge inner branch')
167
 
        outer.mkdir('dir-outer', 'dir-outer-id')
168
 
        outer.move(['dir', 'file3'], to_dir='dir-outer')
169
 
        outer.commit('rename imported dir and file3 to dir-outer')
170
 
        return outer, inner
171
 
 
172
 
    def test_file1_deleted_in_dir(self):
173
 
        outer, inner = self.make_outer_tree()
174
 
        outer.remove(['dir-outer/dir/file1'], keep_files=False)
175
 
        outer.commit('delete file1')
176
 
        outer.merge_from_branch(inner)
177
 
        outer.commit('merge the rest')
178
 
        self.assertTreeLayout(['dir-outer',
179
 
                               'dir-outer/dir',
180
 
                               'dir-outer/dir/file2',
181
 
                               'dir-outer/file3',
182
 
                               'foo'],
183
 
                              outer)
184
 
 
185
 
    def test_file3_deleted_in_root(self):
186
 
        # Reproduce bug #375898
187
 
        outer, inner = self.make_outer_tree()
188
 
        outer.remove(['dir-outer/file3'], keep_files=False)
189
 
        outer.commit('delete file3')
190
 
        outer.merge_from_branch(inner)
191
 
        outer.commit('merge the rest')
192
 
        self.assertTreeLayout(['dir-outer',
193
 
                               'dir-outer/dir',
194
 
                               'dir-outer/dir/file1',
195
 
                               'dir-outer/dir/file2',
196
 
                               'foo'],
197
 
                              outer)
198
 
 
199
 
 
200
 
    def test_file3_in_root_conflicted(self):
201
 
        outer, inner = self.make_outer_tree()
202
 
        outer.remove(['dir-outer/file3'], keep_files=False)
203
 
        outer.commit('delete file3')
204
 
        nb_conflicts = outer.merge_from_branch(inner, to_revision='3')
205
 
        self.assertEqual(4, nb_conflicts)
206
 
        self.assertTreeLayout(['dir-outer',
207
 
                               'dir-outer/dir',
208
 
                               'dir-outer/dir/file1',
209
 
                               # Ideally th conflict helpers should be in
210
 
                               # dir-outer/dir but since we can't easily find
211
 
                               # back the file3 -> outer-dir/dir rename, root
212
 
                               # is good enough -- vila 20100401
213
 
                               'file3.BASE',
214
 
                               'file3.OTHER',
215
 
                               'foo'],
216
 
                              outer)
217