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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
17
"""Black-box tests for bzr missing."""
27
27
class TestMissing(TestCaseWithTransport):
29
def assertMessages(self, out, must_have=(), must_not_have=()):
30
"""Check if commit messages are in or not in the output"""
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)
36
29
def test_missing_quiet(self):
37
30
# <https://bugs.launchpad.net/bzr/+bug/284748>
38
31
# create a source branch
63
56
b_tree.commit(message='more')
65
58
# run missing in a against b
66
# this should not require missing to take out a write lock on a
59
# this should not require missing to take out a write lock on a
67
60
# or b. So we take a write lock on both to test that at the same
68
61
# time. This may let the test pass while the default branch is an
69
62
# os-locking branch, but it will trigger failures with lockdir based
93
86
# compare again, but now we have the 'merge' commit extra
94
87
lines = self.run_bzr('missing ../b', retcode=1)[0].splitlines()
95
self.assertEqual("You have 1 extra revision:", lines[0])
88
self.assertEqual("You have 1 extra revision(s):", lines[0])
96
89
self.assertEqual(8, len(lines))
97
90
lines2 = self.run_bzr('missing ../b --mine-only', retcode=1)[0]
98
91
lines2 = lines2.splitlines()
99
92
self.assertEqual(lines, lines2)
100
93
lines3 = self.run_bzr('missing ../b --theirs-only', retcode=0)[0]
101
self.assertEqualDiff('Other branch has no new revisions.\n', lines3)
94
self.assertEqualDiff('Other branch is up to date.\n', lines3)
103
# relative to a, missing the 'merge' commit
96
# relative to a, missing the 'merge' commit
105
98
lines = self.run_bzr('missing ../a', retcode=1)[0].splitlines()
106
99
self.assertEqual(missing, lines[0])
109
102
lines2 = lines2.splitlines()
110
103
self.assertEqual(lines, lines2)
111
104
lines3 = self.run_bzr('missing ../a --mine-only', retcode=0)[0]
112
self.assertEqualDiff('This branch has no new revisions.\n', lines3)
105
self.assertEqualDiff('This branch is up to date.\n', lines3)
113
106
lines4 = self.run_bzr('missing ../a --short', retcode=1)[0]
114
107
lines4 = lines4.splitlines()
115
108
self.assertEqual(4, len(lines4))
116
lines4a = self.run_bzr('missing ../a -S', retcode=1)[0]
117
lines4a = lines4a.splitlines()
118
self.assertEqual(lines4, lines4a)
119
109
lines5 = self.run_bzr('missing ../a --line', retcode=1)[0]
120
110
lines5 = lines5.splitlines()
121
111
self.assertEqual(2, len(lines5))
142
132
self.assertEqualDiff('Branches are up to date.\n',
143
133
self.run_bzr('missing ../a')[0])
144
134
# If you supply mine or theirs you only know one side is up to date
145
self.assertEqualDiff('This branch has no new revisions.\n',
135
self.assertEqualDiff('This branch is up to date.\n',
146
136
self.run_bzr('missing ../a --mine-only')[0])
147
self.assertEqualDiff('Other branch has no new revisions.\n',
137
self.assertEqualDiff('Other branch is up to date.\n',
148
138
self.run_bzr('missing ../a --theirs-only')[0])
150
def test_missing_filtered(self):
151
# create a source branch
152
a_tree = self.make_branch_and_tree('a')
153
self.build_tree_contents([('a/a', 'initial\n')])
155
a_tree.commit(message='r1')
156
# clone and add differing revisions
157
b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
159
for i in range(2, 6):
160
a_tree.commit(message='a%d' % i)
161
b_tree.commit(message='b%d' % i)
165
out,err = self.run_bzr('missing ../b --my-revision 3', retcode=1)
166
self.assertMessages(out, ('a3', 'b2', 'b3', 'b4', 'b5'), ('a2', 'a4'))
168
out,err = self.run_bzr('missing ../b --my-revision 3..4', retcode=1)
169
self.assertMessages(out, ('a3', 'a4'), ('a2', 'a5'))
172
out,err = self.run_bzr('missing ../b -r 3', retcode=1)
173
self.assertMessages(out, ('a2', 'a3', 'a4', 'a5', 'b3'), ('b2', 'b4'))
175
out,err = self.run_bzr('missing ../b -r 3..4', retcode=1)
176
self.assertMessages(out, ('b3', 'b4'), ('b2', 'b5'))
179
out,err = self.run_bzr('missing ../b --my-revision 3..4 -r 3..4',
181
self.assertMessages(out, ('a3', 'a4', 'b3', 'b4'),
182
('a2', 'a5', 'b2', 'b5'))
184
140
def test_missing_check_last_location(self):
185
141
# check that last location shown as filepath not file URL
203
159
'Branches are up to date.\n' % location,
205
161
self.assertEquals('', err)
207
def test_missing_directory(self):
208
"""Test --directory option"""
210
# create a source branch
211
a_tree = self.make_branch_and_tree('a')
212
self.build_tree_contents([('a/a', 'initial\n')])
214
a_tree.commit(message='initial')
216
# clone and add a differing revision
217
b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
218
self.build_tree_contents([('b/a', 'initial\nmore\n')])
219
b_tree.commit(message='more')
221
out2, err2 = self.run_bzr('missing --directory a b', retcode=1)
223
out1, err1 = self.run_bzr('missing ../b', retcode=1)
224
self.assertEqualDiff(out1, out2)
225
self.assertEqualDiff(err1, err2)