~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
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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()
32
        try:
33
            os.mkdir('a')
34
        except:
35
            raise os.getcwd()
36
        os.chdir('a')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
37
        self.run_bzr('init')
1551.2.17 by Aaron Bentley
Fixed conflict commands
38
        file('myfile', 'wb').write('contentsa\n')
39
        file('my_other_file', 'wb').write('contentsa\n')
1551.9.8 by Aaron Bentley
Add --text parameter to conflicts
40
        os.mkdir('mydir')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
41
        self.run_bzr('add')
42
        self.run_bzr('commit -m new')
1551.2.17 by Aaron Bentley
Fixed conflict commands
43
        os.chdir('..')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
44
        self.run_bzr('branch a b')
1551.2.17 by Aaron Bentley
Fixed conflict commands
45
        os.chdir('b')
46
        file('myfile', 'wb').write('contentsb\n')
47
        file('my_other_file', 'wb').write('contentsb\n')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
48
        self.run_bzr('mv mydir mydir2')
49
        self.run_bzr('commit -m change')
1551.2.17 by Aaron Bentley
Fixed conflict commands
50
        os.chdir('../a')
51
        file('myfile', 'wb').write('contentsa2\n')
52
        file('my_other_file', 'wb').write('contentsa2\n')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
53
        self.run_bzr('mv mydir mydir3')
54
        self.run_bzr('commit -m change')
55
        self.run_bzr('merge ../b', retcode=1)
1551.2.17 by Aaron Bentley
Fixed conflict commands
56
57
    def test_conflicts(self):
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
58
        conflicts, errs = self.run_bzr('conflicts')
1551.9.8 by Aaron Bentley
Add --text parameter to conflicts
59
        self.assertEqual(3, len(conflicts.splitlines()))
60
61
    def test_conflicts_text(self):
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
62
        conflicts = self.run_bzr('conflicts --text')[0].splitlines()
1551.9.8 by Aaron Bentley
Add --text parameter to conflicts
63
        self.assertEqual(['my_other_file', 'myfile'], conflicts)
1551.2.17 by Aaron Bentley
Fixed conflict commands
64
65
    def test_resolve(self):
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
66
        self.run_bzr('resolve myfile')
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
67
        conflicts, errs = self.run_bzr('conflicts')
1551.9.8 by Aaron Bentley
Add --text parameter to conflicts
68
        self.assertEqual(2, len(conflicts.splitlines()))
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
69
        self.run_bzr('resolve my_other_file')
70
        self.run_bzr('resolve mydir2')
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
71
        conflicts, errs = self.run_bzr('conflicts')
1551.2.17 by Aaron Bentley
Fixed conflict commands
72
        self.assertEqual(len(conflicts.splitlines()), 0)
73
74
    def test_resolve_all(self):
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
75
        self.run_bzr('resolve --all')
2552.2.2 by Vincent Ladeuil
Enforce run_bzr(string) where possible.
76
        conflicts, errs = self.run_bzr('conflicts')
1551.2.17 by Aaron Bentley
Fixed conflict commands
77
        self.assertEqual(len(conflicts.splitlines()), 0)
78
1652.1.1 by Martin Pool
Fix 'bzr resolve' run from subdirectory
79
    def test_resolve_in_subdir(self):
80
        """resolve when run from subdirectory should handle relative paths"""
81
        orig_dir = os.getcwdu()
82
        try:
83
            os.mkdir("subdir")
84
            os.chdir("subdir")
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
85
            self.run_bzr("resolve ../myfile")
1652.1.1 by Martin Pool
Fix 'bzr resolve' run from subdirectory
86
            os.chdir("../../b")
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
87
            self.run_bzr("resolve ../a/myfile")
1652.1.1 by Martin Pool
Fix 'bzr resolve' run from subdirectory
88
            wt = WorkingTree.open_containing('.')[0]
89
            conflicts = wt.conflicts()
90
            if not conflicts.is_empty():
91
                self.fail("tree still contains conflicts: %r" % conflicts)
92
        finally:
93
            os.chdir(orig_dir)
2120.7.3 by Aaron Bentley
Update resolve command to automatically mark conflicts as resolved
94
95
    def test_auto_resolve(self):
96
        """Text conflicts can be resolved automatically"""
97
        tree = self.make_branch_and_tree('tree')
98
        self.build_tree_contents([('tree/file',
99
            '<<<<<<<\na\n=======\n>>>>>>>\n')])
100
        tree.add('file', 'file_id')
101
        self.assertEqual(tree.kind('file_id'), 'file')
102
        file_conflict = conflicts.TextConflict('file', file_id='file_id')
103
        tree.set_conflicts(conflicts.ConflictList([file_conflict]))
104
        os.chdir('tree')
105
        note = self.run_bzr('resolve', retcode=1)[1]
106
        self.assertContainsRe(note, '0 conflict\\(s\\) auto-resolved.')
107
        self.assertContainsRe(note,
108
            'Remaining conflicts:\nText conflict in file')
109
        self.build_tree_contents([('file', 'a\n')])
110
        note = self.run_bzr('resolve')[1]
111
        self.assertContainsRe(note, 'All conflicts resolved.')