/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
3778.5.1 by Martin Pool
missing -q is quieter (#284748)
1
# Copyright (C) 2005, 2008 Canonical Ltd
1685.1.80 by Wouter van Heyst
more code cleanup
2
#
1185.85.7 by John Arbash Meinel
Added Copyright, changed test_missing to use run_bzr instead of capture.
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.
1685.1.80 by Wouter van Heyst
more code cleanup
7
#
1185.85.7 by John Arbash Meinel
Added Copyright, changed test_missing to use run_bzr instead of capture.
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.
1685.1.80 by Wouter van Heyst
more code cleanup
12
#
1185.85.7 by John Arbash Meinel
Added Copyright, changed test_missing to use run_bzr instead of capture.
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
1685.1.80 by Wouter van Heyst
more code cleanup
16
17
"""Black-box tests for bzr missing."""
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
18
19
import os
20
2193.4.3 by Alexander Belchenko
Use new API for testing
21
from bzrlib import osutils
22
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
23
from bzrlib.branch import Branch
2193.4.3 by Alexander Belchenko
Use new API for testing
24
from bzrlib.tests import TestCaseWithTransport
25
26
27
class TestMissing(TestCaseWithTransport):
1607.1.15 by Robert Collins
Change missing to not require a write lock unless it is setting the parent.
28
3921.3.9 by Marius Kruger
* add some blackbox tests and another whitebox test
29
    def assertMessages(self, out, must_have=(), must_not_have=()):
30
        """Check if commit messages are in or not in the output"""
31
        for m in must_have:
32
            self.assertContainsRe(out, r'\nmessage:\n  %s\n' % m)
33
        for m in must_not_have:
34
            self.assertNotContainsRe(out, r'\nmessage:\n  %s\n' % m)
35
3778.5.1 by Martin Pool
missing -q is quieter (#284748)
36
    def test_missing_quiet(self):
37
        # <https://bugs.launchpad.net/bzr/+bug/284748>
38
        # create a source branch
3778.5.2 by Martin Pool
review cleanups
39
        #
40
        # XXX: This still needs a test that missing is quiet when there are
41
        # missing revisions.
3778.5.1 by Martin Pool
missing -q is quieter (#284748)
42
        a_tree = self.make_branch_and_tree('.')
43
        self.build_tree_contents([('a', 'initial\n')])
44
        a_tree.add('a')
45
        a_tree.commit(message='initial')
46
47
        out, err = self.run_bzr('missing -q .')
48
        self.assertEqual('', out)
49
        self.assertEqual('', err)
50
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
51
    def test_missing(self):
1185.54.21 by Aaron Bentley
Fixed up tests
52
        missing = "You are missing 1 revision(s):"
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
53
54
        # create a source branch
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
55
        a_tree = self.make_branch_and_tree('a')
56
        self.build_tree_contents([('a/a', 'initial\n')])
57
        a_tree.add('a')
58
        a_tree.commit(message='initial')
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
59
60
        # clone and add a differing revision
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
61
        b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
62
        self.build_tree_contents([('b/a', 'initial\nmore\n')])
63
        b_tree.commit(message='more')
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
64
1607.1.15 by Robert Collins
Change missing to not require a write lock unless it is setting the parent.
65
        # run missing in a against b
66
        # this should not require missing to take out a write lock on a 
67
        # or b. So we take a write lock on both to test that at the same
68
        # time. This may let the test pass while the default branch is an
69
        # os-locking branch, but it will trigger failures with lockdir based
70
        # branches.
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
71
        a_branch = a_tree.branch
72
        a_branch.lock_write()
73
        b_branch = b_tree.branch
74
        b_branch.lock_write()
75
        os.chdir('a')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
76
        out,err = self.run_bzr('missing ../b', retcode=1)
1607.1.15 by Robert Collins
Change missing to not require a write lock unless it is setting the parent.
77
        lines = out.splitlines()
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
78
        # we're missing the extra revision here
79
        self.assertEqual(missing, lines[0])
1607.1.15 by Robert Collins
Change missing to not require a write lock unless it is setting the parent.
80
        # and we expect 8 lines of output which we trust at the moment to be
81
        # good.
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
82
        self.assertEqual(8, len(lines))
1607.1.15 by Robert Collins
Change missing to not require a write lock unless it is setting the parent.
83
        # we do not expect any error output.
84
        self.assertEqual('', err)
85
        # unlock the branches for the rest of the test
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
86
        a_branch.unlock()
87
        b_branch.unlock()
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
88
89
        # get extra revision from b
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
90
        a_tree.merge_from_branch(b_branch)
91
        a_tree.commit(message='merge')
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
92
93
        # compare again, but now we have the 'merge' commit extra
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
94
        lines = self.run_bzr('missing ../b', retcode=1)[0].splitlines()
1185.54.21 by Aaron Bentley
Fixed up tests
95
        self.assertEqual("You have 1 extra revision(s):", lines[0])
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
96
        self.assertEqual(8, len(lines))
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
97
        lines2 = self.run_bzr('missing ../b --mine-only', retcode=1)[0]
1185.54.22 by Aaron Bentley
Test every option for "bzr missing"
98
        lines2 = lines2.splitlines()
99
        self.assertEqual(lines, lines2)
3427.3.7 by John Arbash Meinel
Update how 'bzr missing' works when given --mine-only or --theirs-only
100
        lines3 = self.run_bzr('missing ../b --theirs-only', retcode=0)[0]
3427.3.8 by John Arbash Meinel
Change the output to 'This branch' and 'Other branch', and document the text in NEWS
101
        self.assertEqualDiff('Other branch is up to date.\n', lines3)
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
102
103
        # relative to a, missing the 'merge' commit 
104
        os.chdir('../b')
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
105
        lines = self.run_bzr('missing ../a', retcode=1)[0].splitlines()
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
106
        self.assertEqual(missing, lines[0])
107
        self.assertEqual(8, len(lines))
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
108
        lines2 = self.run_bzr('missing ../a --theirs-only', retcode=1)[0]
1185.54.22 by Aaron Bentley
Test every option for "bzr missing"
109
        lines2 = lines2.splitlines()
110
        self.assertEqual(lines, lines2)
3427.3.7 by John Arbash Meinel
Update how 'bzr missing' works when given --mine-only or --theirs-only
111
        lines3 = self.run_bzr('missing ../a --mine-only', retcode=0)[0]
3427.3.8 by John Arbash Meinel
Change the output to 'This branch' and 'Other branch', and document the text in NEWS
112
        self.assertEqualDiff('This branch is up to date.\n', lines3)
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
113
        lines4 = self.run_bzr('missing ../a --short', retcode=1)[0]
1185.54.22 by Aaron Bentley
Test every option for "bzr missing"
114
        lines4 = lines4.splitlines()
115
        self.assertEqual(4, len(lines4))
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
116
        lines5 = self.run_bzr('missing ../a --line', retcode=1)[0]
1185.54.22 by Aaron Bentley
Test every option for "bzr missing"
117
        lines5 = lines5.splitlines()
118
        self.assertEqual(2, len(lines5))
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
119
        lines6 = self.run_bzr('missing ../a --reverse', retcode=1)[0]
1185.54.22 by Aaron Bentley
Test every option for "bzr missing"
120
        lines6 = lines6.splitlines()
121
        self.assertEqual(lines6, lines)
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
122
        lines7 = self.run_bzr('missing ../a --show-ids', retcode=1)[0]
1185.54.22 by Aaron Bentley
Test every option for "bzr missing"
123
        lines7 = lines7.splitlines()
124
        self.assertEqual(11, len(lines7))
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
125
        lines8 = self.run_bzr('missing ../a --verbose', retcode=1)[0]
1185.54.22 by Aaron Bentley
Test every option for "bzr missing"
126
        lines8 = lines8.splitlines()
127
        self.assertEqual("modified:", lines8[-2])
128
        self.assertEqual("  a", lines8[-1])
129
3427.3.7 by John Arbash Meinel
Update how 'bzr missing' works when given --mine-only or --theirs-only
130
        os.chdir('../a')
3427.3.8 by John Arbash Meinel
Change the output to 'This branch' and 'Other branch', and document the text in NEWS
131
        self.assertEqualDiff('Other branch is up to date.\n',
3427.3.7 by John Arbash Meinel
Update how 'bzr missing' works when given --mine-only or --theirs-only
132
                             self.run_bzr('missing ../b --theirs-only')[0])
133
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
134
        # after a pull we're back on track
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
135
        b_tree.pull(a_branch)
3427.3.7 by John Arbash Meinel
Update how 'bzr missing' works when given --mine-only or --theirs-only
136
        self.assertEqualDiff("Branches are up to date.\n",
137
                             self.run_bzr('missing ../b')[0])
138
        os.chdir('../b')
139
        self.assertEqualDiff('Branches are up to date.\n',
140
                             self.run_bzr('missing ../a')[0])
141
        # If you supply mine or theirs you only know one side is up to date
3427.3.8 by John Arbash Meinel
Change the output to 'This branch' and 'Other branch', and document the text in NEWS
142
        self.assertEqualDiff('This branch is up to date.\n',
3427.3.7 by John Arbash Meinel
Update how 'bzr missing' works when given --mine-only or --theirs-only
143
                             self.run_bzr('missing ../a --mine-only')[0])
3427.3.8 by John Arbash Meinel
Change the output to 'This branch' and 'Other branch', and document the text in NEWS
144
        self.assertEqualDiff('Other branch is up to date.\n',
3427.3.7 by John Arbash Meinel
Update how 'bzr missing' works when given --mine-only or --theirs-only
145
                             self.run_bzr('missing ../a --theirs-only')[0])
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
146
3921.3.9 by Marius Kruger
* add some blackbox tests and another whitebox test
147
    def test_missing_filtered(self):
148
        # create a source branch
149
        a_tree = self.make_branch_and_tree('a')
150
        self.build_tree_contents([('a/a', 'initial\n')])
151
        a_tree.add('a')
152
        a_tree.commit(message='r1')
153
        # clone and add a differing revision
154
        b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
155
156
        for i in range(2, 6):
157
            a_tree.commit(message='a%d' % i)
158
            b_tree.commit(message='b%d' % i)
159
160
        os.chdir('a')
161
        # local
162
        out,err = self.run_bzr('missing ../b -r 2', retcode=1)
163
        self.assertMessages(out, ('a2', 'b2', 'b3', 'b4', 'b5'), ('a3',))
164
165
        out,err = self.run_bzr('missing ../b -r 3..4', retcode=1)
166
        self.assertMessages(out, ('a3', 'a4'), ('a2', 'a5'))
167
168
        #remote
169
        out,err = self.run_bzr('missing ../b -o 2', retcode=1)
170
        self.assertMessages(out, ('a2', 'a3', 'a4', 'a5', 'b2'), ('b3',))
171
172
        out,err = self.run_bzr('missing ../b -o 3..4', retcode=1)
173
        self.assertMessages(out, ('b3', 'b4'), ('b2', 'b5'))
174
175
        #both
176
        out,err = self.run_bzr('missing ../b -r 3..4 -o 3..4', retcode=1)
177
        self.assertMessages(out, ('a3', 'a4', 'b3', 'b4'),
178
            ('a2', 'a5', 'b2', 'b5'))
179
2193.4.1 by Alexander Belchenko
'bzr missing' without specifying location show remembered location unescaped
180
    def test_missing_check_last_location(self):
181
        # check that last location shown as filepath not file URL
182
183
        # create a source branch
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
184
        wt = self.make_branch_and_tree('a')
2193.4.3 by Alexander Belchenko
Use new API for testing
185
        b = wt.branch
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
186
        self.build_tree(['a/foo'])
2193.4.3 by Alexander Belchenko
Use new API for testing
187
        wt.add('foo')
188
        wt.commit('initial')
189
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
190
        os.chdir('a')
2193.4.3 by Alexander Belchenko
Use new API for testing
191
        location = osutils.getcwd() + '/'
192
2193.4.1 by Alexander Belchenko
'bzr missing' without specifying location show remembered location unescaped
193
        # clone
2193.4.3 by Alexander Belchenko
Use new API for testing
194
        b.bzrdir.sprout('../b')
2193.4.1 by Alexander Belchenko
'bzr missing' without specifying location show remembered location unescaped
195
196
        # check last location
2193.4.3 by Alexander Belchenko
Use new API for testing
197
        lines, err = self.run_bzr('missing', working_dir='../b')
3596.3.1 by James Westby
Give the user a bit more information about which saved location is being used.
198
        self.assertEquals('Using saved parent location: %s\n'
2193.4.1 by Alexander Belchenko
'bzr missing' without specifying location show remembered location unescaped
199
                          'Branches are up to date.\n' % location,
200
                          lines)
2193.4.3 by Alexander Belchenko
Use new API for testing
201
        self.assertEquals('', err)