/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
2052.3.1 by John Arbash Meinel
Add tests to cleanup the copyright of all source files
1
# Copyright (C) 2005 Canonical Ltd
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
2
#
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
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
#
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
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
#
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
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
1263 by Martin Pool
- clean up imports
17
18
import os
1685.1.67 by Martin Pool
Suppress warning from test of deprecated method
19
import warnings
1263 by Martin Pool
- clean up imports
20
1911.2.1 by John Arbash Meinel
Cache encode/decode operations, saves memory and time. Especially when committing a new kernel tree with 7.7M new lines to annotate
21
from bzrlib import (
4119.4.3 by Jonathan Lange
Add Revision.iter_bugs.
22
    bugtracker,
1911.2.1 by John Arbash Meinel
Cache encode/decode operations, saves memory and time. Especially when committing a new kernel tree with 7.7M new lines to annotate
23
    revision,
3228.4.11 by John Arbash Meinel
Deprecations abound.
24
    symbol_versioning,
1911.2.1 by John Arbash Meinel
Cache encode/decode operations, saves memory and time. Especially when committing a new kernel tree with 7.7M new lines to annotate
25
    )
1263 by Martin Pool
- clean up imports
26
from bzrlib.branch import Branch
4119.4.3 by Jonathan Lange
Add Revision.iter_bugs.
27
from bzrlib.errors import (
28
    InvalidBugStatus,
29
    InvalidLineInBugsProperty,
30
    NoSuchRevision,
31
    )
2490.2.21 by Aaron Bentley
Rename graph to deprecated_graph
32
from bzrlib.deprecated_graph import Graph
3350.4.2 by Robert Collins
Remove more deprecated methods following the chain of deprecated functions outwards.
33
from bzrlib.revision import (find_present_ancestors,
1836.3.1 by Robert Collins
(robertc) Teach repository.get_revision_graph, and revision.common_ancestor, about NULL_REVISION.
34
                             NULL_REVISION)
3400.3.6 by Martin Pool
Remove code deprecated prior to 1.1 and its tests
35
from bzrlib.symbol_versioning import one_three
1911.2.1 by John Arbash Meinel
Cache encode/decode operations, saves memory and time. Especially when committing a new kernel tree with 7.7M new lines to annotate
36
from bzrlib.tests import TestCase, TestCaseWithTransport
1270 by Martin Pool
- fix recording of merged ancestry lines
37
from bzrlib.trace import mutter
1534.4.36 by Robert Collins
Finish deprecating Branch.working_tree()
38
from bzrlib.workingtree import WorkingTree
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
39
1685.1.67 by Martin Pool
Suppress warning from test of deprecated method
40
# We're allowed to test deprecated interfaces
41
warnings.filterwarnings('ignore',
42
        '.*get_intervening_revisions was deprecated',
43
        DeprecationWarning,
44
        r'bzrlib\.tests\.test_revision')
45
1185.16.145 by Martin Pool
Remove all assert statements from test cases.
46
# XXX: Make this a method of a merge base case
2696.3.3 by Martin Pool
Start setting the default format to dirstate-tags
47
def make_branches(self, format=None):
1392 by Robert Collins
reinstate testfetch test case
48
    """Create two branches
49
50
    branch 1 has 6 commits, branch 2 has 3 commits
1607.1.12 by Robert Collins
Fix common_ancestor to still calculate a common ancestor when ghosts are
51
    commit 10 is a ghosted merge merge from branch 1
1392 by Robert Collins
reinstate testfetch test case
52
53
    the object graph is
54
    B:     A:
3830.3.23 by John Arbash Meinel
Use Branch.sprout rather than Branch.clone.
55
    a..0   a..0
1392 by Robert Collins
reinstate testfetch test case
56
    a..1   a..1
57
    a..2   a..2
58
    b..3   a..3 merges b..4
59
    b..4   a..4
60
    b..5   a..5 merges b..5
1092.2.26 by Robert Collins
fetch should work with ghosts
61
    b..6 merges a4
1392 by Robert Collins
reinstate testfetch test case
62
63
    so A is missing b6 at the start
64
    and B is missing a3, a4, a5
65
    """
2696.3.3 by Martin Pool
Start setting the default format to dirstate-tags
66
    tree1 = self.make_branch_and_tree("branch1", format=format)
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
67
    br1 = tree1.branch
3830.3.23 by John Arbash Meinel
Use Branch.sprout rather than Branch.clone.
68
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
69
    tree1.commit("Commit one", rev_id="a@u-0-0")
70
    tree1.commit("Commit two", rev_id="a@u-0-1")
71
    tree1.commit("Commit three", rev_id="a@u-0-2")
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
72
3830.3.23 by John Arbash Meinel
Use Branch.sprout rather than Branch.clone.
73
    tree2 = tree1.bzrdir.sprout("branch2").open_workingtree()
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
74
    br2 = tree2.branch
75
    tree2.commit("Commit four", rev_id="b@u-0-3")
76
    tree2.commit("Commit five", rev_id="b@u-0-4")
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
77
    revisions_2 = br2.revision_history()
1908.6.7 by Robert Collins
Remove all users of set_pending_merges and add_pending_merge except tests that they work correctly.
78
    self.assertEquals(revisions_2[-1], 'b@u-0-4')
3830.3.23 by John Arbash Meinel
Use Branch.sprout rather than Branch.clone.
79
1979.2.1 by Robert Collins
(robertc) adds a convenience method "merge_from_branch" to WorkingTree.
80
    tree1.merge_from_branch(br2)
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
81
    tree1.commit("Commit six", rev_id="a@u-0-3")
82
    tree1.commit("Commit seven", rev_id="a@u-0-4")
83
    tree2.commit("Commit eight", rev_id="b@u-0-5")
1908.6.7 by Robert Collins
Remove all users of set_pending_merges and add_pending_merge except tests that they work correctly.
84
    self.assertEquals(br2.revision_history()[-1], 'b@u-0-5')
3830.3.23 by John Arbash Meinel
Use Branch.sprout rather than Branch.clone.
85
1979.2.1 by Robert Collins
(robertc) adds a convenience method "merge_from_branch" to WorkingTree.
86
    tree1.merge_from_branch(br2)
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
87
    tree1.commit("Commit nine", rev_id="a@u-0-5")
1908.6.7 by Robert Collins
Remove all users of set_pending_merges and add_pending_merge except tests that they work correctly.
88
    # DO NOT MERGE HERE - we WANT a GHOST.
89
    tree2.add_parent_tree_id(br1.revision_history()[4])
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
90
    tree2.commit("Commit ten - ghost merge", rev_id="b@u-0-6")
3830.3.23 by John Arbash Meinel
Use Branch.sprout rather than Branch.clone.
91
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
92
    return br1, br2
93
94
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
95
class TestIsAncestor(TestCaseWithTransport):
96
1268 by Martin Pool
- is_ancestor now works by looking at the Branch's stored ancestry
97
    def test_recorded_ancestry(self):
98
        """Test that commit records all ancestors"""
1185.16.145 by Martin Pool
Remove all assert statements from test cases.
99
        br1, br2 = make_branches(self)
1268 by Martin Pool
- is_ancestor now works by looking at the Branch's stored ancestry
100
        d = [('a@u-0-0', ['a@u-0-0']),
101
             ('a@u-0-1', ['a@u-0-0', 'a@u-0-1']),
102
             ('a@u-0-2', ['a@u-0-0', 'a@u-0-1', 'a@u-0-2']),
103
             ('b@u-0-3', ['a@u-0-0', 'a@u-0-1', 'a@u-0-2', 'b@u-0-3']),
1270 by Martin Pool
- fix recording of merged ancestry lines
104
             ('b@u-0-4', ['a@u-0-0', 'a@u-0-1', 'a@u-0-2', 'b@u-0-3',
105
                          'b@u-0-4']),
106
             ('a@u-0-3', ['a@u-0-0', 'a@u-0-1', 'a@u-0-2', 'b@u-0-3', 'b@u-0-4',
107
                          'a@u-0-3']),
1271 by Martin Pool
- more commit ancestry tests
108
             ('a@u-0-4', ['a@u-0-0', 'a@u-0-1', 'a@u-0-2', 'b@u-0-3', 'b@u-0-4',
109
                          'a@u-0-3', 'a@u-0-4']),
110
             ('b@u-0-5', ['a@u-0-0', 'a@u-0-1', 'a@u-0-2', 'b@u-0-3', 'b@u-0-4',
111
                          'b@u-0-5']),
112
             ('a@u-0-5', ['a@u-0-0', 'a@u-0-1', 'a@u-0-2', 'a@u-0-3', 'a@u-0-4',
113
                          'b@u-0-3', 'b@u-0-4',
114
                          'b@u-0-5', 'a@u-0-5']),
1392 by Robert Collins
reinstate testfetch test case
115
             ('b@u-0-6', ['a@u-0-0', 'a@u-0-1', 'a@u-0-2',
1271 by Martin Pool
- more commit ancestry tests
116
                          'b@u-0-3', 'b@u-0-4',
117
                          'b@u-0-5', 'b@u-0-6']),
1268 by Martin Pool
- is_ancestor now works by looking at the Branch's stored ancestry
118
             ]
1392 by Robert Collins
reinstate testfetch test case
119
        br1_only = ('a@u-0-3', 'a@u-0-4', 'a@u-0-5')
120
        br2_only = ('b@u-0-6',)
1268 by Martin Pool
- is_ancestor now works by looking at the Branch's stored ancestry
121
        for branch in br1, br2:
122
            for rev_id, anc in d:
1392 by Robert Collins
reinstate testfetch test case
123
                if rev_id in br1_only and not branch is br1:
124
                    continue
125
                if rev_id in br2_only and not branch is br2:
126
                    continue
1270 by Martin Pool
- fix recording of merged ancestry lines
127
                mutter('ancestry of {%s}: %r',
1185.67.2 by Aaron Bentley
Renamed Branch.storage to Branch.repository
128
                       rev_id, branch.repository.get_ancestry(rev_id))
129
                result = sorted(branch.repository.get_ancestry(rev_id))
130
                self.assertEquals(result, [None] + sorted(anc))
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
131
1268 by Martin Pool
- is_ancestor now works by looking at the Branch's stored ancestry
132
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
133
class TestIntermediateRevisions(TestCaseWithTransport):
1092.3.2 by Robert Collins
merge from baz2bzr
134
135
    def setUp(self):
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
136
        TestCaseWithTransport.setUp(self)
1185.16.145 by Martin Pool
Remove all assert statements from test cases.
137
        self.br1, self.br2 = make_branches(self)
1508.1.19 by Robert Collins
Give format3 working trees their own last-revision marker.
138
        wt1 = self.br1.bzrdir.open_workingtree()
139
        wt2 = self.br2.bzrdir.open_workingtree()
1534.4.36 by Robert Collins
Finish deprecating Branch.working_tree()
140
        wt2.commit("Commit eleven", rev_id="b@u-0-7")
141
        wt2.commit("Commit twelve", rev_id="b@u-0-8")
142
        wt2.commit("Commit thirtteen", rev_id="b@u-0-9")
1268 by Martin Pool
- is_ancestor now works by looking at the Branch's stored ancestry
143
1979.2.1 by Robert Collins
(robertc) adds a convenience method "merge_from_branch" to WorkingTree.
144
        wt1.merge_from_branch(self.br2)
1534.4.36 by Robert Collins
Finish deprecating Branch.working_tree()
145
        wt1.commit("Commit fourtten", rev_id="a@u-0-6")
1268 by Martin Pool
- is_ancestor now works by looking at the Branch's stored ancestry
146
1979.2.1 by Robert Collins
(robertc) adds a convenience method "merge_from_branch" to WorkingTree.
147
        wt2.merge_from_branch(self.br1)
1534.4.36 by Robert Collins
Finish deprecating Branch.working_tree()
148
        wt2.commit("Commit fifteen", rev_id="b@u-0-10")
1092.3.2 by Robert Collins
merge from baz2bzr
149
974.2.7 by aaron.bentley at utoronto
Merged from bzr.24
150
1607.1.12 by Robert Collins
Fix common_ancestor to still calculate a common ancestor when ghosts are
151
class MockRevisionSource(object):
152
    """A RevisionSource that takes a pregenerated graph.
153
154
    This is useful for testing revision graph algorithms where
155
    the actual branch existing is irrelevant.
156
    """
157
158
    def __init__(self, full_graph):
159
        self._full_graph = full_graph
160
161
    def get_revision_graph_with_ghosts(self, revision_ids):
162
        # This is mocked out to just return a constant graph.
163
        return self._full_graph
164
165
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
166
class TestCommonAncestor(TestCaseWithTransport):
974.1.35 by aaron.bentley at utoronto
Added revision-based common-ancestor checking
167
    """Test checking whether a revision is an ancestor of another revision"""
1092.1.39 by Robert Collins
merge from mpool
168
1534.4.49 by Robert Collins
Provide a revision.get_history(repository) method for generating a synthetic revision history.
169
    def test_get_history(self):
170
        # TODO: test ghosts on the left hand branch's impact
171
        # TODO: test ghosts on all parents, we should get some
172
        # indicator. i.e. NULL_REVISION
173
        # RBC 20060608
174
        tree = self.make_branch_and_tree('.')
175
        tree.commit('1', rev_id = '1', allow_pointless=True)
176
        tree.commit('2', rev_id = '2', allow_pointless=True)
177
        tree.commit('3', rev_id = '3', allow_pointless=True)
178
        rev = tree.branch.repository.get_revision('1')
179
        history = rev.get_history(tree.branch.repository)
180
        self.assertEqual([None, '1'], history)
181
        rev = tree.branch.repository.get_revision('2')
182
        history = rev.get_history(tree.branch.repository)
183
        self.assertEqual([None, '1', '2'], history)
184
        rev = tree.branch.repository.get_revision('3')
185
        history = rev.get_history(tree.branch.repository)
186
        self.assertEqual([None, '1', '2' ,'3'], history)
1594.2.3 by Robert Collins
bugfix revision.MultipleRevisionSources.get_revision_graph to integrate ghosts between sources. [slow on weaves, fast on knits.
187
2229.2.3 by Aaron Bentley
change reserved_id to is_reserved_id, add check_not_reserved for DRY
188
189
class TestReservedId(TestCase):
190
191
    def test_is_reserved_id(self):
192
        self.assertEqual(True, revision.is_reserved_id(NULL_REVISION))
193
        self.assertEqual(True, revision.is_reserved_id(
194
            revision.CURRENT_REVISION))
195
        self.assertEqual(True, revision.is_reserved_id('arch:'))
196
        self.assertEqual(False, revision.is_reserved_id('null'))
197
        self.assertEqual(False, revision.is_reserved_id(
198
            'arch:a@example.com/c--b--v--r'))
199
        self.assertEqual(False, revision.is_reserved_id(None))
2671.5.1 by Lukáš Lalinsky
Strip leading whitespace from the commit message before using the first line as a commit summary.
200
201
202
class TestRevisionMethods(TestCase):
203
204
    def test_get_summary(self):
205
        r = revision.Revision('1')
206
        r.message = 'a'
207
        self.assertEqual('a', r.get_summary())
208
        r.message = 'a\nb'
209
        self.assertEqual('a', r.get_summary())
210
        r.message = '\na\nb'
211
        self.assertEqual('a', r.get_summary())
2671.5.2 by Lukáš Lalinsky
Add Revision.get_author to return the author's name, either from the property 'author' or the name of the committer.
212
2671.5.7 by Lukáš Lalinsky
Rename get_author to get_apparent_author, revert the long log back to displaying the committer.
213
    def test_get_apparent_author(self):
2671.5.2 by Lukáš Lalinsky
Add Revision.get_author to return the author's name, either from the property 'author' or the name of the committer.
214
        r = revision.Revision('1')
215
        r.committer = 'A'
4056.2.1 by James Westby
Allow specifying multiple authors for a revision.
216
        author = self.applyDeprecated(
217
                symbol_versioning.deprecated_in((1, 13, 0)),
218
                r.get_apparent_author)
219
        self.assertEqual('A', author)
220
        r.properties['author'] = 'B'
221
        author = self.applyDeprecated(
222
                symbol_versioning.deprecated_in((1, 13, 0)),
223
                r.get_apparent_author)
224
        self.assertEqual('B', author)
4056.2.3 by James Westby
Use a new "authors" revision property to allow multiple authors
225
        r.properties['authors'] = 'C\nD'
4056.2.1 by James Westby
Allow specifying multiple authors for a revision.
226
        author = self.applyDeprecated(
227
                symbol_versioning.deprecated_in((1, 13, 0)),
228
                r.get_apparent_author)
4056.2.3 by James Westby
Use a new "authors" revision property to allow multiple authors
229
        self.assertEqual('C', author)
4056.2.1 by James Westby
Allow specifying multiple authors for a revision.
230
231
    def test_get_apparent_authors(self):
232
        r = revision.Revision('1')
233
        r.committer = 'A'
234
        self.assertEqual(['A'], r.get_apparent_authors())
235
        r.properties['author'] = 'B'
236
        self.assertEqual(['B'], r.get_apparent_authors())
4056.2.3 by James Westby
Use a new "authors" revision property to allow multiple authors
237
        r.properties['authors'] = 'C\nD'
238
        self.assertEqual(['C', 'D'], r.get_apparent_authors())
4119.4.3 by Jonathan Lange
Add Revision.iter_bugs.
239
240
241
class TestRevisionBugs(TestCase):
242
    """Tests for getting the bugs that a revision is linked to."""
243
244
    def test_no_bugs(self):
245
        r = revision.Revision('1')
246
        self.assertEqual([], list(r.iter_bugs()))
247
248
    def test_some_bugs(self):
249
        r = revision.Revision(
250
            '1', properties={
251
                'bugs': bugtracker.encode_fixes_bug_urls(
252
                    ['http://example.com/bugs/1',
253
                     'http://launchpad.net/bugs/1234'])})
254
        self.assertEqual(
255
            [('http://example.com/bugs/1', bugtracker.FIXED),
256
             ('http://launchpad.net/bugs/1234', bugtracker.FIXED)],
257
            list(r.iter_bugs()))
258
259
    def test_no_status(self):
260
        r = revision.Revision(
261
            '1', properties={'bugs': 'http://example.com/bugs/1'})
262
        self.assertRaises(InvalidLineInBugsProperty, list, r.iter_bugs())
263
264
    def test_too_much_information(self):
265
        r = revision.Revision(
266
            '1', properties={'bugs': 'http://example.com/bugs/1 fixed bar'})
267
        self.assertRaises(InvalidLineInBugsProperty, list, r.iter_bugs())
268
269
    def test_invalid_status(self):
270
        r = revision.Revision(
271
            '1', properties={'bugs': 'http://example.com/bugs/1 faxed'})
272
        self.assertRaises(InvalidBugStatus, list, r.iter_bugs())