/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/selftest/testrevision.py

  • Committer: Martin Pool
  • Date: 2005-09-06 02:26:28 UTC
  • Revision ID: mbp@sourcefrog.net-20050906022628-66d65f0feb4a9e80
- implement version 5 xml storage, and tests

  This stores files identified by the version that introduced the 
  text, and the version that introduced the name.  Entry kinds are
  given by the xml tag not an explicit kind field.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# (C) 2005 Canonical Ltd
 
2
 
 
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.
 
7
 
 
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.
 
12
 
 
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
 
 
17
from bzrlib.selftest import TestCaseInTempDir
 
18
 
 
19
 
 
20
def make_branches():
 
21
    from bzrlib.branch import Branch
 
22
    from bzrlib.commit import commit
 
23
    import os
 
24
    os.mkdir("branch1")
 
25
    br1 = Branch("branch1", init=True)
 
26
    
 
27
    commit(br1, "Commit one", rev_id="a@u-0-0")
 
28
    commit(br1, "Commit two", rev_id="a@u-0-1")
 
29
    commit(br1, "Commit three", rev_id="a@u-0-2")
 
30
 
 
31
    os.mkdir("branch2")
 
32
    br2 = Branch("branch2", init=True)
 
33
    br2.update_revisions(br1)
 
34
    commit(br2, "Commit four", rev_id="b@u-0-3")
 
35
    commit(br2, "Commit five", rev_id="b@u-0-4")
 
36
    revisions_2 = br2.revision_history()
 
37
    br1.add_pending_merge(revisions_2[4])
 
38
    commit(br1, "Commit six", rev_id="a@u-0-3")
 
39
    commit(br1, "Commit seven", rev_id="a@u-0-4")
 
40
    commit(br2, "Commit eight", rev_id="b@u-0-5")
 
41
    br1.add_pending_merge(br2.revision_history()[5])
 
42
    commit(br1, "Commit nine", rev_id="a@u-0-5")
 
43
    br2.add_pending_merge(br1.revision_history()[4])
 
44
    commit(br2, "Commit ten", rev_id="b@u-0-6")
 
45
    return br1, br2
 
46
 
 
47
 
 
48
class TestIsAncestor(TestCaseInTempDir):
 
49
    def test_is_ancestor(self):
 
50
        """Test checking whether a revision is an ancestor of another revision"""
 
51
        from bzrlib.revision import is_ancestor, MultipleRevisionSources
 
52
        from bzrlib.errors import NoSuchRevision
 
53
        br1, br2 = make_branches()
 
54
        revisions = br1.revision_history()
 
55
        revisions_2 = br2.revision_history()
 
56
        sources = MultipleRevisionSources(br1, br2)
 
57
 
 
58
        assert is_ancestor(revisions[0], revisions[0], sources)
 
59
        assert is_ancestor(revisions[1], revisions[0], sources)
 
60
        assert not is_ancestor(revisions[0], revisions[1], sources)
 
61
        assert is_ancestor(revisions_2[3], revisions[0], sources)
 
62
        self.assertRaises(NoSuchRevision, is_ancestor, revisions_2[3],
 
63
                          revisions[0], br1)        
 
64
        assert is_ancestor(revisions[3], revisions_2[4], sources)
 
65
        assert is_ancestor(revisions[3], revisions_2[4], br1)
 
66
        assert is_ancestor(revisions[3], revisions_2[3], sources)
 
67
        assert not is_ancestor(revisions[3], revisions_2[3], br1)
 
68
 
 
69
class TestIntermediateRevisions(TestCaseInTempDir):
 
70
 
 
71
    def setUp(self):
 
72
        from bzrlib.commit import commit
 
73
        TestCaseInTempDir.setUp(self)
 
74
        self.br1, self.br2 = make_branches()
 
75
        commit(self.br2, "Commit eleven", rev_id="b@u-0-7")
 
76
        commit(self.br2, "Commit twelve", rev_id="b@u-0-8")
 
77
        commit(self.br2, "Commit thirtteen", rev_id="b@u-0-9")
 
78
        self.br1.add_pending_merge(self.br2.revision_history()[6])
 
79
        commit(self.br1, "Commit fourtten", rev_id="a@u-0-6")
 
80
        self.br2.add_pending_merge(self.br1.revision_history()[6])
 
81
        commit(self.br2, "Commit fifteen", rev_id="b@u-0-10")
 
82
 
 
83
        from bzrlib.revision import MultipleRevisionSources
 
84
        self.sources = MultipleRevisionSources(self.br1, self.br2)
 
85
 
 
86
    def intervene(self, ancestor, revision, revision_history=None):
 
87
        from bzrlib.revision import get_intervening_revisions
 
88
        return get_intervening_revisions(ancestor,revision, self.sources, 
 
89
                                         revision_history)
 
90
 
 
91
    def test_intervene(self):
 
92
        """Find intermediate revisions, without requiring history"""
 
93
        from bzrlib.errors import NotAncestor, NoSuchRevision
 
94
        assert len(self.intervene('a@u-0-0', 'a@u-0-0')) == 0
 
95
        self.assertEqual(self.intervene('a@u-0-0', 'a@u-0-1'), ['a@u-0-1'])
 
96
        self.assertEqual(self.intervene('a@u-0-0', 'a@u-0-2'), 
 
97
                         ['a@u-0-1', 'a@u-0-2'])
 
98
        self.assertEqual(self.intervene('a@u-0-0', 'b@u-0-3'), 
 
99
                         ['a@u-0-1', 'a@u-0-2', 'b@u-0-3'])
 
100
        self.assertEqual(self.intervene('b@u-0-3', 'a@u-0-3'), 
 
101
                         ['b@u-0-4', 'a@u-0-3'])
 
102
        self.assertEqual(self.intervene('a@u-0-2', 'a@u-0-3', 
 
103
                                        self.br1.revision_history()), 
 
104
                         ['a@u-0-3'])
 
105
        self.assertEqual(self.intervene('a@u-0-0', 'a@u-0-5', 
 
106
                                        self.br1.revision_history()), 
 
107
                         ['a@u-0-1', 'a@u-0-2', 'a@u-0-3', 'a@u-0-4', 
 
108
                          'a@u-0-5'])
 
109
        self.assertEqual(self.intervene('a@u-0-0', 'b@u-0-6', 
 
110
                         self.br1.revision_history()), 
 
111
                         ['a@u-0-1', 'a@u-0-2', 'a@u-0-3', 'a@u-0-4', 
 
112
                          'b@u-0-6'])
 
113
        self.assertEqual(self.intervene('a@u-0-0', 'b@u-0-5'), 
 
114
                         ['a@u-0-1', 'a@u-0-2', 'b@u-0-3', 'b@u-0-4', 
 
115
                          'b@u-0-5'])
 
116
        self.assertEqual(self.intervene('b@u-0-3', 'b@u-0-6', 
 
117
                         self.br2.revision_history()), 
 
118
                         ['b@u-0-4', 'b@u-0-5', 'b@u-0-6'])
 
119
        self.assertEqual(self.intervene('b@u-0-6', 'b@u-0-10'), 
 
120
                         ['b@u-0-7', 'b@u-0-8', 'b@u-0-9', 'b@u-0-10'])
 
121
        self.assertEqual(self.intervene('b@u-0-6', 'b@u-0-10', 
 
122
                                        self.br2.revision_history()), 
 
123
                         ['b@u-0-7', 'b@u-0-8', 'b@u-0-9', 'b@u-0-10'])
 
124
        self.assertRaises(NotAncestor, self.intervene, 'b@u-0-10', 'b@u-0-6', 
 
125
                          self.br2.revision_history())
 
126
        self.assertRaises(NoSuchRevision, self.intervene, 'c@u-0-10', 
 
127
                          'b@u-0-6', self.br2.revision_history())
 
128
        self.assertRaises(NoSuchRevision, self.intervene, 'b@u-0-10', 
 
129
                          'c@u-0-6', self.br2.revision_history())
 
130
 
 
131
 
 
132
class TestCommonAncestor(TestCaseInTempDir):
 
133
    """Test checking whether a revision is an ancestor of another revision"""
 
134
 
 
135
    def test_common_ancestor(self):
 
136
        from bzrlib.revision import find_present_ancestors, common_ancestor
 
137
        from bzrlib.revision import MultipleRevisionSources
 
138
        br1, br2 = make_branches()
 
139
        revisions = br1.revision_history()
 
140
        revisions_2 = br2.revision_history()
 
141
        sources = MultipleRevisionSources(br1, br2)
 
142
 
 
143
        expected_ancestors_list = {revisions[3]:(0, 0), 
 
144
                                   revisions[2]:(1, 1),
 
145
                                   revisions_2[4]:(2, 1), 
 
146
                                   revisions[1]:(3, 2),
 
147
                                   revisions_2[3]:(4, 2),
 
148
                                   revisions[0]:(5, 3) }
 
149
        ancestors_list = find_present_ancestors(revisions[3], sources)
 
150
        assert len(expected_ancestors_list) == len(ancestors_list)
 
151
        for key, value in expected_ancestors_list.iteritems():
 
152
            self.assertEqual(ancestors_list[key], value, 
 
153
                              "key %r, %r != %r" % (key, ancestors_list[key],
 
154
                                                    value))
 
155
 
 
156
        self.assertEqual(common_ancestor(revisions[0], revisions[0], sources),
 
157
                          revisions[0])
 
158
        self.assertEqual(common_ancestor(revisions[1], revisions[2], sources),
 
159
                          revisions[1])
 
160
        self.assertEqual(common_ancestor(revisions[1], revisions[1], sources),
 
161
                          revisions[1])
 
162
        self.assertEqual(common_ancestor(revisions[2], revisions_2[4], sources),
 
163
                          revisions[2])
 
164
        self.assertEqual(common_ancestor(revisions[3], revisions_2[4], sources),
 
165
                          revisions_2[4])
 
166
        self.assertEqual(common_ancestor(revisions[4], revisions_2[5], sources),
 
167
                          revisions_2[4])
 
168
        self.assertEqual(common_ancestor(revisions[5], revisions_2[6], sources),
 
169
                          revisions[4])
 
170
        self.assertEqual(common_ancestor(revisions_2[6], revisions[5], sources),
 
171
                          revisions_2[5])