~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/selftest/testfetch.py

  • Committer: Robert Collins
  • Date: 2005-10-17 11:56:54 UTC
  • mfrom: (1185.16.59)
  • Revision ID: robertc@robertcollins.net-20051017115654-662239e1587524a8
mergeĀ fromĀ martin.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
import sys
19
19
 
20
20
import bzrlib.errors
21
 
from bzrlib.tests.test_revision import make_branches
 
21
from bzrlib.selftest.testrevision import make_branches
22
22
from bzrlib.trace import mutter
23
23
from bzrlib.branch import Branch
24
24
from bzrlib.fetch import greedy_fetch
25
 
from bzrlib.merge import merge
26
 
from bzrlib.clone import copy_branch
27
25
 
28
 
from bzrlib.tests import TestCaseInTempDir
29
 
from bzrlib.tests.HTTPTestUtil import TestCaseWithWebserver
 
26
from bzrlib.selftest import TestCaseInTempDir
 
27
from bzrlib.selftest.HTTPTestUtil import TestCaseWithWebserver
30
28
 
31
29
 
32
30
def has_revision(branch, revision_id):
33
31
    try:
34
 
        branch.get_revision_xml(revision_id)
 
32
        branch.get_revision_xml_file(revision_id)
35
33
        return True
36
34
    except bzrlib.errors.NoSuchRevision:
37
35
        return False
42
40
        os.mkdir(name)
43
41
        return Branch.initialize(name)
44
42
            
45
 
    self.assertFalse(has_revision(br_b, br_a.revision_history()[3]))
46
 
    self.assert_(has_revision(br_b, br_a.revision_history()[2]))
47
 
    self.assertEquals(len(br_b.revision_history()), 7)
48
 
    self.assertEquals(greedy_fetch(br_b, br_a, br_a.revision_history()[2])[0], 0)
 
43
    assert not has_revision(br_b, br_a.revision_history()[3])
 
44
    assert has_revision(br_b, br_a.revision_history()[2])
 
45
    assert len(br_b.revision_history()) == 7
 
46
    assert greedy_fetch(br_b, br_a, br_a.revision_history()[2])[0] == 0
49
47
 
50
48
    # greedy_fetch is not supposed to alter the revision history
51
 
    self.assertEquals(len(br_b.revision_history()), 7)
52
 
    self.assertFalse(has_revision(br_b, br_a.revision_history()[3]))
 
49
    assert len(br_b.revision_history()) == 7
 
50
    assert not has_revision(br_b, br_a.revision_history()[3])
53
51
 
54
 
    self.assertEquals(len(br_b.revision_history()), 7)
55
 
    self.assertEquals(greedy_fetch(br_b, br_a, br_a.revision_history()[3])[0], 1)
56
 
    self.assert_(has_revision(br_b, br_a.revision_history()[3]))
57
 
    self.assertFalse(has_revision(br_a, br_b.revision_history()[6]))
58
 
    self.assert_(has_revision(br_a, br_b.revision_history()[5]))
 
52
    assert len(br_b.revision_history()) == 7
 
53
    assert greedy_fetch(br_b, br_a, br_a.revision_history()[3])[0] == 1
 
54
    assert has_revision(br_b, br_a.revision_history()[3])
 
55
    assert not has_revision(br_a, br_b.revision_history()[6])
 
56
    assert has_revision(br_a, br_b.revision_history()[5])
59
57
 
60
58
    # When a non-branch ancestor is missing, it should be unlisted...
61
59
    # as its not reference from the inventory weave.
65
63
    self.assertEqual(failures, [])
66
64
 
67
65
    self.assertEqual(greedy_fetch(writable_a, br_b)[0], 1)
68
 
    self.assert_(has_revision(br_a, br_b.revision_history()[3]))
69
 
    self.assert_(has_revision(br_a, br_b.revision_history()[4]))
 
66
    assert has_revision(br_a, br_b.revision_history()[3])
 
67
    assert has_revision(br_a, br_b.revision_history()[4])
70
68
        
71
69
    br_b2 = new_branch('br_b2')
72
 
    self.assertEquals(greedy_fetch(br_b2, br_b)[0], 7)
73
 
    self.assert_(has_revision(br_b2, br_b.revision_history()[4]))
74
 
    self.assert_(has_revision(br_b2, br_a.revision_history()[2]))
75
 
    self.assertFalse(has_revision(br_b2, br_a.revision_history()[3]))
 
70
    assert greedy_fetch(br_b2, br_b)[0] == 7
 
71
    assert has_revision(br_b2, br_b.revision_history()[4])
 
72
    assert has_revision(br_b2, br_a.revision_history()[2])
 
73
    assert not has_revision(br_b2, br_a.revision_history()[3])
76
74
 
77
75
    br_a2 = new_branch('br_a2')
78
 
    self.assertEquals(greedy_fetch(br_a2, br_a)[0], 9)
79
 
    self.assert_(has_revision(br_a2, br_b.revision_history()[4]))
80
 
    self.assert_(has_revision(br_a2, br_a.revision_history()[3]))
81
 
    self.assert_(has_revision(br_a2, br_a.revision_history()[2]))
 
76
    assert greedy_fetch(br_a2, br_a)[0] == 9
 
77
    assert has_revision(br_a2, br_b.revision_history()[4])
 
78
    assert has_revision(br_a2, br_a.revision_history()[3])
 
79
    assert has_revision(br_a2, br_a.revision_history()[2])
82
80
 
83
81
    br_a3 = new_branch('br_a3')
84
 
    self.assertEquals(greedy_fetch(br_a3, br_a2)[0], 0)
 
82
    assert greedy_fetch(br_a3, br_a2)[0] == 0
85
83
    for revno in range(4):
86
 
        self.assertFalse(has_revision(br_a3, br_a.revision_history()[revno]))
 
84
        assert not has_revision(br_a3, br_a.revision_history()[revno])
87
85
    self.assertEqual(greedy_fetch(br_a3, br_a2, br_a.revision_history()[2])[0], 3)
88
86
    fetched = greedy_fetch(br_a3, br_a2, br_a.revision_history()[3])[0]
89
 
    self.assertEquals(fetched, 3, "fetched %d instead of 3" % fetched)
 
87
    assert fetched == 3, "fetched %d instead of 3" % fetched
90
88
    # InstallFailed should be raised if the branch is missing the revision
91
89
    # that was requested.
92
90
    self.assertRaises(bzrlib.errors.InstallFailed, greedy_fetch, br_a3,
104
102
 
105
103
    def test_fetch(self):
106
104
        #highest indices a: 5, b: 7
107
 
        br_a, br_b = make_branches(self)
 
105
        br_a, br_b = make_branches()
108
106
        fetch_steps(self, br_a, br_b, br_a)
109
107
 
110
108
 
111
 
class TestMergeFetch(TestCaseInTempDir):
112
 
 
113
 
    def test_merge_fetches_unrelated(self):
114
 
        """Merge brings across history from unrelated source"""
115
 
        os.mkdir('br1')
116
 
        br1 = Branch.initialize('br1')
117
 
        br1.working_tree().commit(message='rev 1-1', rev_id='1-1')
118
 
        br1.working_tree().commit(message='rev 1-2', rev_id='1-2')
119
 
        os.mkdir('br2')
120
 
        br2 = Branch.initialize('br2')
121
 
        br2.working_tree().commit(message='rev 2-1', rev_id='2-1')
122
 
        merge(other_revision=['br1', -1], base_revision=['br1', 0],
123
 
              this_dir='br2')
124
 
        self._check_revs_present(br2)
125
 
 
126
 
    def test_merge_fetches(self):
127
 
        """Merge brings across history from source"""
128
 
        os.mkdir('br1')
129
 
        br1 = Branch.initialize('br1')
130
 
        br1.working_tree().commit(message='rev 1-1', rev_id='1-1')
131
 
        copy_branch(br1, 'br2')
132
 
        br2 = Branch.open('br2')
133
 
        br1.working_tree().commit(message='rev 1-2', rev_id='1-2')
134
 
        br2.working_tree().commit(message='rev 2-1', rev_id='2-1')
135
 
        merge(other_revision=['br1', -1], base_revision=[None, None], 
136
 
              this_dir='br2')
137
 
        self._check_revs_present(br2)
138
 
 
139
 
    def _check_revs_present(self, br2):
140
 
        for rev_id in '1-1', '1-2', '2-1':
141
 
            self.assertTrue(br2.has_revision(rev_id))
142
 
            rev = br2.get_revision(rev_id)
143
 
            self.assertEqual(rev.revision_id, rev_id)
144
 
            self.assertTrue(br2.get_inventory(rev_id))
145
 
 
146
 
 
147
 
 
148
 
class TestMergeFileHistory(TestCaseInTempDir):
149
 
    def setUp(self):
150
 
        TestCaseInTempDir.setUp(self)
151
 
        os.mkdir('br1')
152
 
        br1 = Branch.initialize('br1')
153
 
        self.build_tree_contents([('br1/file', 'original contents\n')])
154
 
        br1.working_tree().add(['file'], ['this-file-id'])
155
 
        br1.working_tree().commit(message='rev 1-1', rev_id='1-1')
156
 
        copy_branch(br1, 'br2')
157
 
        br2 = Branch.open('br2')
158
 
        self.build_tree_contents([('br1/file', 'original from 1\n')])
159
 
        br1.working_tree().commit(message='rev 1-2', rev_id='1-2')
160
 
        self.build_tree_contents([('br1/file', 'agreement\n')])
161
 
        br1.working_tree().commit(message='rev 1-3', rev_id='1-3')
162
 
        self.build_tree_contents([('br2/file', 'contents in 2\n')])
163
 
        br2.working_tree().commit(message='rev 2-1', rev_id='2-1')
164
 
        self.build_tree_contents([('br2/file', 'agreement\n')])
165
 
        br2.working_tree().commit(message='rev 2-2', rev_id='2-2')
166
 
 
167
 
    def test_merge_fetches_file_history(self):
168
 
        """Merge brings across file histories"""
169
 
        br2 = Branch.open('br2')
170
 
        merge(other_revision=['br1', -1], base_revision=[None, None], 
171
 
              this_dir='br2')
172
 
        for rev_id, text in [('1-2', 'original from 1\n'),
173
 
                             ('1-3', 'agreement\n'),
174
 
                             ('2-1', 'contents in 2\n'),
175
 
                             ('2-2', 'agreement\n')]:
176
 
            self.assertEqualDiff(br2.revision_tree(rev_id).get_file_text('this-file-id'),
177
 
                                 text)
178
 
 
179
 
 
180
 
 
181
 
 
182
109
class TestHttpFetch(TestCaseWithWebserver):
183
110
 
184
111
    def setUp(self):
187
114
 
188
115
    def test_fetch(self):
189
116
        #highest indices a: 5, b: 7
190
 
        br_a, br_b = make_branches(self)
 
117
        br_a, br_b = make_branches()
191
118
        br_rem_a = Branch.open(self.get_remote_url(br_a._transport.base))
192
119
        fetch_steps(self, br_rem_a, br_b, br_a)
193
120
 
194
121
    def log(self, *args):
195
122
        """Capture web server log messages for introspection."""
196
123
        super(TestHttpFetch, self).log(*args)
197
 
        # if this call indicates a url being fetched, save it specially
198
124
        if args[0].startswith("webserver"):
199
 
            self.weblogs.append(args[3])
 
125
            self.weblogs.append(args[0])
200
126
 
201
127
    def test_weaves_are_retrieved_once(self):
202
128
        self.build_tree(("source/", "source/file", "target/"))
203
129
        branch = Branch.initialize("source")
204
 
        branch.working_tree().add(["file"], ["id"])
205
 
        branch.working_tree().commit("added file")
 
130
        branch.add(["file"], ["id"])
 
131
        branch.commit("added file")
206
132
        print >>open("source/file", 'w'), "blah"
207
 
        branch.working_tree().commit("changed file")
 
133
        branch.commit("changed file")
208
134
        target = Branch.initialize("target/")
209
135
        source = Branch.open(self.get_remote_url("source/"))
210
136
        self.assertEqual(greedy_fetch(target, source), (2, []))