~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_commit_merge.py

Fix #531967 by creating helpers for PathConflicts when a deletion
is involved.

* bzrlib/tests/test_conflicts.py:
(TestParametrizedResolveConflicts.mirror_scenarios): Renamed from
multiply_scenarios to make the intent clearer. Turned into a
classmethod too for the same reason.
(TestParametrizedResolveConflicts.scenarios): Now a classmethod.

* bzrlib/merge.py:
(Merge3Merger._merge_names): 'name conflict' and 'parent conflict'
can (and must) be handled in the same way. If a deletion is
involved we create an unversioned copy of the rejected item so the
user can restore that easily.
(Merge3Merger.cook_conflicts): Get rid of 'name conflict', 'parent
conflict' distinction and just create PathConflicts with a file_id
to address bug #531967.

* bzrlib/conflicts.py:
(PathConflict.associated_filenames): Helpers exist only when a
deletion is involved.
(PathConflict._resolve): We may have to version one path
again. This may happen when a deletion have occurred.
(PathConflict.action_take_this, PathConflict.action_take_other):
As a special case, we may have an helper to use when deletion was
involved.

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
 
18
18
import os
19
19
import shutil
20
20
 
 
21
from bzrlib import check, osutils
 
22
from bzrlib.branch import Branch
 
23
from bzrlib.errors import PointlessCommit, BzrError
21
24
from bzrlib.tests import (
22
25
    SymlinkFeature,
23
26
    TestCaseWithTransport,
24
27
    )
25
 
from bzrlib.branch import Branch
26
 
from bzrlib.errors import PointlessCommit, BzrError
27
28
from bzrlib.tests.test_revision import make_branches
28
 
from bzrlib import osutils
29
29
 
30
30
 
31
31
class TestCommitMerge(TestCaseWithTransport):
42
42
        bx = wtx.branch
43
43
        wty = wtx.bzrdir.sprout('y').open_workingtree()
44
44
        by = wty.branch
45
 
        
 
45
 
46
46
        wtx.commit('commit one', rev_id='x@u-0-1', allow_pointless=True)
47
47
        wty.commit('commit two', rev_id='y@u-0-1', allow_pointless=True)
48
48
 
49
 
        self.assertEqual((1, []), by.fetch(bx))
 
49
        by.fetch(bx)
50
50
        # just having the history there does nothing
51
51
        self.assertRaises(PointlessCommit,
52
52
                          wty.commit,
89
89
                          wty.commit,
90
90
                          'partial commit', allow_pointless=False,
91
91
                          specific_files=['ecks'])
92
 
        
 
92
 
93
93
        wty.commit('merge from x', rev_id='y@u-0-2', allow_pointless=False)
94
94
        tree = by.repository.revision_tree('y@u-0-2')
95
95
        inv = tree.inventory
96
96
        self.assertEquals(inv['ecks-id'].revision, 'x@u-0-1')
97
97
        self.assertEquals(inv['why-id'].revision, 'y@u-0-1')
98
98
 
99
 
        bx.check()
100
 
        by.check()
101
 
        bx.repository.check([bx.last_revision()])
102
 
        by.repository.check([by.last_revision()])
 
99
        check.check_dwim(bx.base, False, True, True)
 
100
        check.check_dwim(by.base, False, True, True)
103
101
 
104
102
    def test_merge_with_symlink(self):
105
103
        self.requireFeature(SymlinkFeature)