~bzr-pqm/bzr/bzr.dev

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
3778.5.1 by Martin Pool
missing -q is quieter (#284748)
29
    def test_missing_quiet(self):
30
        # <https://bugs.launchpad.net/bzr/+bug/284748>
31
        # create a source branch
3778.5.2 by Martin Pool
review cleanups
32
        #
33
        # XXX: This still needs a test that missing is quiet when there are
34
        # missing revisions.
3778.5.1 by Martin Pool
missing -q is quieter (#284748)
35
        a_tree = self.make_branch_and_tree('.')
36
        self.build_tree_contents([('a', 'initial\n')])
37
        a_tree.add('a')
38
        a_tree.commit(message='initial')
39
40
        out, err = self.run_bzr('missing -q .')
41
        self.assertEqual('', out)
42
        self.assertEqual('', err)
43
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
44
    def test_missing(self):
1185.54.21 by Aaron Bentley
Fixed up tests
45
        missing = "You are missing 1 revision(s):"
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
46
47
        # create a source branch
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
48
        a_tree = self.make_branch_and_tree('a')
49
        self.build_tree_contents([('a/a', 'initial\n')])
50
        a_tree.add('a')
51
        a_tree.commit(message='initial')
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
52
53
        # clone and add a differing revision
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
54
        b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
55
        self.build_tree_contents([('b/a', 'initial\nmore\n')])
56
        b_tree.commit(message='more')
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
57
1607.1.15 by Robert Collins
Change missing to not require a write lock unless it is setting the parent.
58
        # run missing in a against b
59
        # this should not require missing to take out a write lock on a 
60
        # or b. So we take a write lock on both to test that at the same
61
        # time. This may let the test pass while the default branch is an
62
        # os-locking branch, but it will trigger failures with lockdir based
63
        # branches.
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
64
        a_branch = a_tree.branch
65
        a_branch.lock_write()
66
        b_branch = b_tree.branch
67
        b_branch.lock_write()
68
        os.chdir('a')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
69
        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.
70
        lines = out.splitlines()
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
71
        # we're missing the extra revision here
72
        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.
73
        # and we expect 8 lines of output which we trust at the moment to be
74
        # good.
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
75
        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.
76
        # we do not expect any error output.
77
        self.assertEqual('', err)
78
        # 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.
79
        a_branch.unlock()
80
        b_branch.unlock()
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
81
82
        # get extra revision from b
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
83
        a_tree.merge_from_branch(b_branch)
84
        a_tree.commit(message='merge')
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
85
86
        # 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.
87
        lines = self.run_bzr('missing ../b', retcode=1)[0].splitlines()
1185.54.21 by Aaron Bentley
Fixed up tests
88
        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
89
        self.assertEqual(8, len(lines))
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
90
        lines2 = self.run_bzr('missing ../b --mine-only', retcode=1)[0]
1185.54.22 by Aaron Bentley
Test every option for "bzr missing"
91
        lines2 = lines2.splitlines()
92
        self.assertEqual(lines, lines2)
3427.3.7 by John Arbash Meinel
Update how 'bzr missing' works when given --mine-only or --theirs-only
93
        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
94
        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
95
96
        # relative to a, missing the 'merge' commit 
97
        os.chdir('../b')
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
98
        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
99
        self.assertEqual(missing, lines[0])
100
        self.assertEqual(8, len(lines))
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
101
        lines2 = self.run_bzr('missing ../a --theirs-only', retcode=1)[0]
1185.54.22 by Aaron Bentley
Test every option for "bzr missing"
102
        lines2 = lines2.splitlines()
103
        self.assertEqual(lines, lines2)
3427.3.7 by John Arbash Meinel
Update how 'bzr missing' works when given --mine-only or --theirs-only
104
        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
105
        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.
106
        lines4 = self.run_bzr('missing ../a --short', retcode=1)[0]
1185.54.22 by Aaron Bentley
Test every option for "bzr missing"
107
        lines4 = lines4.splitlines()
108
        self.assertEqual(4, len(lines4))
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
109
        lines5 = self.run_bzr('missing ../a --line', retcode=1)[0]
1185.54.22 by Aaron Bentley
Test every option for "bzr missing"
110
        lines5 = lines5.splitlines()
111
        self.assertEqual(2, len(lines5))
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
112
        lines6 = self.run_bzr('missing ../a --reverse', retcode=1)[0]
1185.54.22 by Aaron Bentley
Test every option for "bzr missing"
113
        lines6 = lines6.splitlines()
114
        self.assertEqual(lines6, lines)
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
115
        lines7 = self.run_bzr('missing ../a --show-ids', retcode=1)[0]
1185.54.22 by Aaron Bentley
Test every option for "bzr missing"
116
        lines7 = lines7.splitlines()
117
        self.assertEqual(11, len(lines7))
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
118
        lines8 = self.run_bzr('missing ../a --verbose', retcode=1)[0]
1185.54.22 by Aaron Bentley
Test every option for "bzr missing"
119
        lines8 = lines8.splitlines()
120
        self.assertEqual("modified:", lines8[-2])
121
        self.assertEqual("  a", lines8[-1])
122
3427.3.7 by John Arbash Meinel
Update how 'bzr missing' works when given --mine-only or --theirs-only
123
        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
124
        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
125
                             self.run_bzr('missing ../b --theirs-only')[0])
126
1185.55.1 by Wouter van Heyst
Add testcase for missing command, improved with feedback from Robert
127
        # after a pull we're back on track
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
128
        b_tree.pull(a_branch)
3427.3.7 by John Arbash Meinel
Update how 'bzr missing' works when given --mine-only or --theirs-only
129
        self.assertEqualDiff("Branches are up to date.\n",
130
                             self.run_bzr('missing ../b')[0])
131
        os.chdir('../b')
132
        self.assertEqualDiff('Branches are up to date.\n',
133
                             self.run_bzr('missing ../a')[0])
134
        # 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
135
        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
136
                             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
137
        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
138
                             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
139
2193.4.1 by Alexander Belchenko
'bzr missing' without specifying location show remembered location unescaped
140
    def test_missing_check_last_location(self):
141
        # check that last location shown as filepath not file URL
142
143
        # create a source branch
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
144
        wt = self.make_branch_and_tree('a')
2193.4.3 by Alexander Belchenko
Use new API for testing
145
        b = wt.branch
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
146
        self.build_tree(['a/foo'])
2193.4.3 by Alexander Belchenko
Use new API for testing
147
        wt.add('foo')
148
        wt.commit('initial')
149
2664.14.2 by Daniel Watkins
Fixed tests.blackbox.test_missing to use internals where appropriate.
150
        os.chdir('a')
2193.4.3 by Alexander Belchenko
Use new API for testing
151
        location = osutils.getcwd() + '/'
152
2193.4.1 by Alexander Belchenko
'bzr missing' without specifying location show remembered location unescaped
153
        # clone
2193.4.3 by Alexander Belchenko
Use new API for testing
154
        b.bzrdir.sprout('../b')
2193.4.1 by Alexander Belchenko
'bzr missing' without specifying location show remembered location unescaped
155
156
        # check last location
2193.4.3 by Alexander Belchenko
Use new API for testing
157
        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.
158
        self.assertEquals('Using saved parent location: %s\n'
2193.4.1 by Alexander Belchenko
'bzr missing' without specifying location show remembered location unescaped
159
                          'Branches are up to date.\n' % location,
160
                          lines)
2193.4.3 by Alexander Belchenko
Use new API for testing
161
        self.assertEquals('', err)