~bzr-pqm/bzr/bzr.dev

2052.3.2 by John Arbash Meinel
Change Copyright .. by Canonical to Copyright ... Canonical
1
# Copyright (C) 2006 Canonical Ltd
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
2
#
1551.2.17 by Aaron Bentley
Fixed conflict commands
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
7
#
1551.2.17 by Aaron Bentley
Fixed conflict commands
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
12
#
1551.2.17 by Aaron Bentley
Fixed conflict commands
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1551.2.17 by Aaron Bentley
Fixed conflict commands
16
17
import os
18
2120.7.3 by Aaron Bentley
Update resolve command to automatically mark conflicts as resolved
19
from bzrlib import (
20
    conflicts
21
    )
1652.1.1 by Martin Pool
Fix 'bzr resolve' run from subdirectory
22
from bzrlib.workingtree import WorkingTree
1551.2.17 by Aaron Bentley
Fixed conflict commands
23
from bzrlib.tests.blackbox import ExternalBase
24
1692.7.2 by Martin Pool
doc
25
# FIXME: These don't really look at the output of the conflict commands, just
26
# the number of lines - there should be more examination.
27
1551.2.17 by Aaron Bentley
Fixed conflict commands
28
class TestConflicts(ExternalBase):
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
29
1551.2.17 by Aaron Bentley
Fixed conflict commands
30
    def setUp(self):
31
        super(ExternalBase, self).setUp()
2664.13.3 by Daniel Watkins
tests.blackbox.test_conflicts now uses internals where appropriate.
32
        a_tree = self.make_branch_and_tree('a')
33
        self.build_tree_contents([
2738.4.5 by Daniel Watkins
Fixed whitespace issues.
34
            ('a/myfile', 'contentsa\n'),
2664.13.3 by Daniel Watkins
tests.blackbox.test_conflicts now uses internals where appropriate.
35
            ('a/my_other_file', 'contentsa\n'),
2738.4.5 by Daniel Watkins
Fixed whitespace issues.
36
            ('a/mydir/',),
2664.13.3 by Daniel Watkins
tests.blackbox.test_conflicts now uses internals where appropriate.
37
            ])
38
        a_tree.add('myfile')
39
        a_tree.add('my_other_file')
40
        a_tree.add('mydir')
41
        a_tree.commit(message="new")
42
        b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
43
        self.build_tree_contents([
2738.4.5 by Daniel Watkins
Fixed whitespace issues.
44
            ('b/myfile', 'contentsb\n'),
2664.13.3 by Daniel Watkins
tests.blackbox.test_conflicts now uses internals where appropriate.
45
            ('b/my_other_file', 'contentsb\n'),
46
            ])
47
        b_tree.rename_one('mydir', 'mydir2')
48
        b_tree.commit(message="change")
49
        self.build_tree_contents([
2738.4.5 by Daniel Watkins
Fixed whitespace issues.
50
            ('a/myfile', 'contentsa2\n'),
2664.13.3 by Daniel Watkins
tests.blackbox.test_conflicts now uses internals where appropriate.
51
            ('a/my_other_file', 'contentsa2\n'),
52
            ])
53
        a_tree.rename_one('mydir', 'mydir3')
54
        a_tree.commit(message='change')
55
        a_tree.merge_from_branch(b_tree.branch)
1551.2.17 by Aaron Bentley
Fixed conflict commands
56
        os.chdir('a')
57
58
    def test_conflicts(self):
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
59
        conflicts, errs = self.run_bzr('conflicts')
1551.9.8 by Aaron Bentley
Add --text parameter to conflicts
60
        self.assertEqual(3, len(conflicts.splitlines()))
61
62
    def test_conflicts_text(self):
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
63
        conflicts = self.run_bzr('conflicts --text')[0].splitlines()
1551.9.8 by Aaron Bentley
Add --text parameter to conflicts
64
        self.assertEqual(['my_other_file', 'myfile'], conflicts)
1551.2.17 by Aaron Bentley
Fixed conflict commands
65
66
    def test_resolve(self):
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
67
        self.run_bzr('resolve myfile')
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
68
        conflicts, errs = self.run_bzr('conflicts')
1551.9.8 by Aaron Bentley
Add --text parameter to conflicts
69
        self.assertEqual(2, len(conflicts.splitlines()))
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
70
        self.run_bzr('resolve my_other_file')
71
        self.run_bzr('resolve mydir2')
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
72
        conflicts, errs = self.run_bzr('conflicts')
1551.2.17 by Aaron Bentley
Fixed conflict commands
73
        self.assertEqual(len(conflicts.splitlines()), 0)
74
75
    def test_resolve_all(self):
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
76
        self.run_bzr('resolve --all')
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
77
        conflicts, errs = self.run_bzr('conflicts')
1551.2.17 by Aaron Bentley
Fixed conflict commands
78
        self.assertEqual(len(conflicts.splitlines()), 0)
79
1652.1.1 by Martin Pool
Fix 'bzr resolve' run from subdirectory
80
    def test_resolve_in_subdir(self):
81
        """resolve when run from subdirectory should handle relative paths"""
82
        orig_dir = os.getcwdu()
83
        try:
84
            os.mkdir("subdir")
85
            os.chdir("subdir")
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
86
            self.run_bzr("resolve ../myfile")
1652.1.1 by Martin Pool
Fix 'bzr resolve' run from subdirectory
87
            os.chdir("../../b")
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
88
            self.run_bzr("resolve ../a/myfile")
1652.1.1 by Martin Pool
Fix 'bzr resolve' run from subdirectory
89
            wt = WorkingTree.open_containing('.')[0]
90
            conflicts = wt.conflicts()
91
            if not conflicts.is_empty():
92
                self.fail("tree still contains conflicts: %r" % conflicts)
93
        finally:
94
            os.chdir(orig_dir)
2120.7.3 by Aaron Bentley
Update resolve command to automatically mark conflicts as resolved
95
96
    def test_auto_resolve(self):
97
        """Text conflicts can be resolved automatically"""
98
        tree = self.make_branch_and_tree('tree')
99
        self.build_tree_contents([('tree/file',
100
            '<<<<<<<\na\n=======\n>>>>>>>\n')])
101
        tree.add('file', 'file_id')
102
        self.assertEqual(tree.kind('file_id'), 'file')
103
        file_conflict = conflicts.TextConflict('file', file_id='file_id')
104
        tree.set_conflicts(conflicts.ConflictList([file_conflict]))
105
        os.chdir('tree')
106
        note = self.run_bzr('resolve', retcode=1)[1]
107
        self.assertContainsRe(note, '0 conflict\\(s\\) auto-resolved.')
108
        self.assertContainsRe(note,
109
            'Remaining conflicts:\nText conflict in file')
110
        self.build_tree_contents([('file', 'a\n')])
111
        note = self.run_bzr('resolve')[1]
112
        self.assertContainsRe(note, 'All conflicts resolved.')