1
# Copyright (C) 2005, 2006 Canonical Ltd
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.
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.
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
"""Blackbox tests for version_info"""
21
from bzrlib.tests import TestCaseWithTransport
24
class TestVersionInfo(TestCaseWithTransport):
26
def test_invalid_format(self):
27
self.run_bzr('version-info --format quijibo', retcode=3)
29
def create_tree(self):
30
wt = self.make_branch_and_tree('branch')
32
self.build_tree(['branch/a'])
34
wt.commit('adding a', rev_id='r1')
36
self.build_tree(['branch/b'])
38
wt.commit('adding b', rev_id='r2')
40
self.revisions = wt.branch.revision_history()
46
txt = self.run_bzr('version-info branch')[0]
47
self.assertContainsRe(txt, 'date:')
48
self.assertContainsRe(txt, 'build-date:')
49
self.assertContainsRe(txt, 'revno: 2')
50
self.assertContainsRe(txt, 'revision-id: ' + self.revisions[-1])
53
"""'--all' includes clean, revision history, and file revisions"""
55
txt = self.run_bzr('version-info branch --all')[0]
56
self.assertContainsRe(txt, 'date:')
57
self.assertContainsRe(txt, 'revno: 2')
58
self.assertContainsRe(txt, 'revision-id: ' + self.revisions[-1])
59
self.assertContainsRe(txt, 'clean: True')
60
self.assertContainsRe(txt, 'revisions:')
61
for rev_id in self.revisions:
62
self.assertContainsRe(txt, 'id: ' + rev_id)
63
self.assertContainsRe(txt, 'message: adding a')
64
self.assertContainsRe(txt, 'message: adding b')
65
self.assertContainsRe(txt, 'file-revisions:')
66
self.assertContainsRe(txt, 'path: a')
67
self.assertContainsRe(txt, 'path: b')
70
"""Test that --check-clean includes the right info"""
73
txt = self.run_bzr('version-info branch --check-clean')[0]
74
self.assertContainsRe(txt, 'clean: True')
76
self.build_tree_contents([('branch/c', 'now unclean\n')])
77
txt = self.run_bzr('version-info branch --check-clean')[0]
78
self.assertContainsRe(txt, 'clean: False')
80
txt = self.run_bzr('version-info branch --check-clean'
81
' --include-file-revisions')[0]
82
self.assertContainsRe(txt, 'revision: unversioned')
86
def test_no_working_tree(self):
87
tree = self.create_tree()
88
branch = self.make_branch('just_branch')
89
branch.pull(tree.branch)
91
txt = self.run_bzr('version-info just_branch')[0]
92
self.assertStartsWith(txt, 'revision-id: r2\n')
94
def assertEqualNoBuildDate(self, text1, text2):
95
"""Compare 2 texts, but ignore the build-date field.
97
build-date is the current timestamp, accurate to seconds. But the
98
clock is always ticking, and it may have ticked between the time
99
that text1 and text2 were generated.
101
lines1 = text1.splitlines(True)
102
lines2 = text2.splitlines(True)
103
for line1, line2 in zip(lines1, lines2):
104
if line1.startswith('build-date: '):
105
self.assertStartsWith(line2, 'build-date: ')
107
self.assertEqual(line1, line2)
108
self.assertEqual(len(lines1), len(lines2))
110
def test_no_branch(self):
111
"""Test that bzr defaults to the local working directory"""
114
txt1 = self.run_bzr('version-info branch')[0]
117
txt2 = self.run_bzr('version-info')[0]
118
self.assertEqualNoBuildDate(txt1, txt2)
121
"""Test that we can pass --format=rio"""
124
txt = self.run_bzr('version-info branch')[0]
125
txt1 = self.run_bzr('version-info --format rio branch')[0]
126
txt2 = self.run_bzr('version-info --format=rio branch')[0]
127
self.assertEqualNoBuildDate(txt, txt1)
128
self.assertEqualNoBuildDate(txt, txt2)
130
def test_python(self):
131
"""Test that we can do --format=python"""
134
txt = self.run_bzr('version-info --format python branch')[0]
136
self.assertContainsRe(txt, 'version_info = {')
138
def test_custom_without_template(self):
139
wt = self.make_branch_and_tree('branch')
140
out, err = self.run_bzr('version-info --custom', retcode=3)
141
self.assertContainsRe(err, r'ERROR: No template specified\.')
143
def test_custom_implies_all(self):
145
out, err = self.run_bzr('version-info --custom --template='
146
'"{revno} {branch_nick} {clean}\n" branch')
147
self.assertEqual("2 branch 1\n", out)
148
self.assertEqual("", err)
149
self.build_tree_contents([('branch/c', 'now unclean\n')])
150
out, err = self.run_bzr('version-info --custom --template='
151
'"{revno} {branch_nick} {clean}\n" branch')
152
self.assertEqual("2 branch 0\n", out)
153
self.assertEqual("", err)