~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/selftest/testrevision.py

  • Committer: Martin Pool
  • Date: 2005-09-16 07:38:10 UTC
  • Revision ID: mbp@sourcefrog.net-20050916073810-1f358be198c9ed91
- fix bug in committing files that are renamed but not modified

- add test for this

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
 
17
 
 
18
import os
 
19
 
17
20
from bzrlib.selftest import TestCaseInTempDir
18
 
 
 
21
from bzrlib.branch import Branch
 
22
from bzrlib.commit import commit
 
23
from bzrlib.fetch import fetch
 
24
from bzrlib.revision import (find_present_ancestors, common_ancestor,
 
25
                             is_ancestor)
 
26
from bzrlib.trace import mutter
 
27
from bzrlib.errors import NoSuchRevision
19
28
 
20
29
def make_branches():
21
 
    from bzrlib.branch import Branch
22
 
    from bzrlib.commit import commit
23
 
    import os
24
30
    os.mkdir("branch1")
25
31
    br1 = Branch("branch1", init=True)
26
32
    
34
40
    commit(br2, "Commit four", rev_id="b@u-0-3")
35
41
    commit(br2, "Commit five", rev_id="b@u-0-4")
36
42
    revisions_2 = br2.revision_history()
 
43
    
 
44
    fetch(from_branch=br2, to_branch=br1)
37
45
    br1.add_pending_merge(revisions_2[4])
 
46
    assert revisions_2[4] == 'b@u-0-4'
38
47
    commit(br1, "Commit six", rev_id="a@u-0-3")
39
48
    commit(br1, "Commit seven", rev_id="a@u-0-4")
40
49
    commit(br2, "Commit eight", rev_id="b@u-0-5")
 
50
    
 
51
    fetch(from_branch=br2, to_branch=br1)
41
52
    br1.add_pending_merge(br2.revision_history()[5])
42
53
    commit(br1, "Commit nine", rev_id="a@u-0-5")
 
54
 
 
55
    fetch(from_branch=br1, to_branch=br2)
43
56
    br2.add_pending_merge(br1.revision_history()[4])
44
57
    commit(br2, "Commit ten", rev_id="b@u-0-6")
 
58
 
 
59
    fetch(from_branch=br2, to_branch=br1)
 
60
    
45
61
    return br1, br2
46
62
 
47
63
 
48
64
class TestIsAncestor(TestCaseInTempDir):
 
65
    def test_recorded_ancestry(self):
 
66
        """Test that commit records all ancestors"""
 
67
        br1, br2 = make_branches()
 
68
        d = [('a@u-0-0', ['a@u-0-0']),
 
69
             ('a@u-0-1', ['a@u-0-0', 'a@u-0-1']),
 
70
             ('a@u-0-2', ['a@u-0-0', 'a@u-0-1', 'a@u-0-2']),
 
71
             ('b@u-0-3', ['a@u-0-0', 'a@u-0-1', 'a@u-0-2', 'b@u-0-3']),
 
72
             ('b@u-0-4', ['a@u-0-0', 'a@u-0-1', 'a@u-0-2', 'b@u-0-3',
 
73
                          'b@u-0-4']),
 
74
             ('a@u-0-3', ['a@u-0-0', 'a@u-0-1', 'a@u-0-2', 'b@u-0-3', 'b@u-0-4',
 
75
                          'a@u-0-3']),
 
76
             ('a@u-0-4', ['a@u-0-0', 'a@u-0-1', 'a@u-0-2', 'b@u-0-3', 'b@u-0-4',
 
77
                          'a@u-0-3', 'a@u-0-4']),
 
78
             ('b@u-0-5', ['a@u-0-0', 'a@u-0-1', 'a@u-0-2', 'b@u-0-3', 'b@u-0-4',
 
79
                          'b@u-0-5']),
 
80
             ('a@u-0-5', ['a@u-0-0', 'a@u-0-1', 'a@u-0-2', 'a@u-0-3', 'a@u-0-4',
 
81
                          'b@u-0-3', 'b@u-0-4',
 
82
                          'b@u-0-5', 'a@u-0-5']),
 
83
             ('b@u-0-6', ['a@u-0-0', 'a@u-0-1', 'a@u-0-2', 'a@u-0-3', 'a@u-0-4',
 
84
                          'b@u-0-3', 'b@u-0-4',
 
85
                          'b@u-0-5', 'b@u-0-6']),
 
86
             ]
 
87
        for branch in br1, br2:
 
88
            for rev_id, anc in d:
 
89
                mutter('ancestry of {%s}: %r',
 
90
                       rev_id, branch.get_ancestry(rev_id))
 
91
                self.assertEquals(sorted(branch.get_ancestry(rev_id)),
 
92
                                  sorted(anc))
 
93
    
 
94
    
49
95
    def test_is_ancestor(self):
50
96
        """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
97
        br1, br2 = make_branches()
54
98
        revisions = br1.revision_history()
55
99
        revisions_2 = br2.revision_history()
56
 
        sources = MultipleRevisionSources(br1, br2)
 
100
        sources = br1
57
101
 
58
 
        assert is_ancestor(revisions[0], revisions[0], sources)
 
102
        assert is_ancestor(revisions[0], revisions[0], br1)
59
103
        assert is_ancestor(revisions[1], revisions[0], sources)
60
104
        assert not is_ancestor(revisions[0], revisions[1], sources)
61
105
        assert is_ancestor(revisions_2[3], revisions[0], sources)
62
 
        self.assertRaises(NoSuchRevision, is_ancestor, revisions_2[3],
63
 
                          revisions[0], br1)        
 
106
        # disabled mbp 20050914, doesn't seem to happen anymore
 
107
        ## self.assertRaises(NoSuchRevision, is_ancestor, revisions_2[3],
 
108
        ##                  revisions[0], br1)        
64
109
        assert is_ancestor(revisions[3], revisions_2[4], sources)
65
110
        assert is_ancestor(revisions[3], revisions_2[4], br1)
66
111
        assert is_ancestor(revisions[3], revisions_2[3], sources)
67
 
        assert not is_ancestor(revisions[3], revisions_2[3], br1)
 
112
        ## assert not is_ancestor(revisions[3], revisions_2[3], br1)
 
113
 
 
114
 
68
115
 
69
116
class TestIntermediateRevisions(TestCaseInTempDir):
70
117
 
72
119
        from bzrlib.commit import commit
73
120
        TestCaseInTempDir.setUp(self)
74
121
        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")
 
122
 
 
123
        self.br2.commit("Commit eleven", rev_id="b@u-0-7")
 
124
        self.br2.commit("Commit twelve", rev_id="b@u-0-8")
 
125
        self.br2.commit("Commit thirtteen", rev_id="b@u-0-9")
 
126
 
 
127
        fetch(from_branch=self.br2, to_branch=self.br1)
78
128
        self.br1.add_pending_merge(self.br2.revision_history()[6])
79
 
        commit(self.br1, "Commit fourtten", rev_id="a@u-0-6")
 
129
        self.br1.commit("Commit fourtten", rev_id="a@u-0-6")
 
130
 
 
131
        fetch(from_branch=self.br1, to_branch=self.br2)
80
132
        self.br2.add_pending_merge(self.br1.revision_history()[6])
81
 
        commit(self.br2, "Commit fifteen", rev_id="b@u-0-10")
 
133
        self.br2.commit("Commit fifteen", rev_id="b@u-0-10")
82
134
 
83
135
        from bzrlib.revision import MultipleRevisionSources
84
136
        self.sources = MultipleRevisionSources(self.br1, self.br2)
133
185
    """Test checking whether a revision is an ancestor of another revision"""
134
186
 
135
187
    def test_common_ancestor(self):
136
 
        from bzrlib.revision import find_present_ancestors, common_ancestor
137
 
        from bzrlib.revision import MultipleRevisionSources
138
188
        br1, br2 = make_branches()
139
189
        revisions = br1.revision_history()
140
190
        revisions_2 = br2.revision_history()
141
 
        sources = MultipleRevisionSources(br1, br2)
 
191
        sources = br1
142
192
 
143
193
        expected_ancestors_list = {revisions[3]:(0, 0), 
144
194
                                   revisions[2]:(1, 1),
169
219
                          revisions[4])
170
220
        self.assertEqual(common_ancestor(revisions_2[6], revisions[5], sources),
171
221
                          revisions_2[5])
 
222
 
 
223
 
 
224
if __name__ == '__main__':
 
225
    import unittest, sys
 
226
    unittest.main()
 
227