/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
2052.3.2 by John Arbash Meinel
Change Copyright .. by Canonical to Copyright ... Canonical
1
# Copyright (C) 2005 Canonical Ltd
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
2
#
1115 by Martin Pool
- split fetch tests into a separate file
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
#
1115 by Martin Pool
- split fetch tests into a separate file
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
#
1115 by Martin Pool
- split fetch tests into a separate file
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
1238 by Martin Pool
- remove a lot of dead code from fetch
16
1185.1.41 by Robert Collins
massive patch from Alexander Belchenko - many PEP8 fixes, removes unused function uuid
17
import os
2004.1.22 by v.ladeuil+lp at free
Implements Range header handling for GET requests. Fix a test.
18
import re
1238 by Martin Pool
- remove a lot of dead code from fetch
19
import sys
20
1551.8.42 by Aaron Bentley
Ensure that fetch properly updates inventory root knit
21
from bzrlib import bzrdir, repository
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
22
from bzrlib.branch import Branch
1534.4.41 by Robert Collins
Branch now uses BzrDir reasonably sanely.
23
from bzrlib.bzrdir import BzrDir
1534.1.16 by Robert Collins
Merge from jam-integration.
24
from bzrlib.builtins import merge
1115 by Martin Pool
- split fetch tests into a separate file
25
import bzrlib.errors
2241.1.5 by Martin Pool
Move KnitFormat2 into repofmt
26
from bzrlib.repofmt import knitrepo
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
27
from bzrlib.tests import TestCaseWithTransport
1185.31.25 by John Arbash Meinel
Renamed all of the tests from selftest/foo.py to tests/test_foo.py
28
from bzrlib.tests.HTTPTestUtil import TestCaseWithWebserver
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
29
from bzrlib.tests.test_revision import make_branches
30
from bzrlib.trace import mutter
1551.8.42 by Aaron Bentley
Ensure that fetch properly updates inventory root knit
31
from bzrlib.upgrade import Convert
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
32
from bzrlib.workingtree import WorkingTree
1185.1.41 by Robert Collins
massive patch from Alexander Belchenko - many PEP8 fixes, removes unused function uuid
33
1115 by Martin Pool
- split fetch tests into a separate file
34
1238 by Martin Pool
- remove a lot of dead code from fetch
35
def has_revision(branch, revision_id):
1534.4.41 by Robert Collins
Branch now uses BzrDir reasonably sanely.
36
    return branch.repository.has_revision(revision_id)
1534.4.5 by Robert Collins
Turn branch format.open into a factory.
37
1393 by Robert Collins
reenable remotebranch tests
38
def fetch_steps(self, br_a, br_b, writable_a):
39
    """A foreign test method for testing fetch locally and remotely."""
1534.4.41 by Robert Collins
Branch now uses BzrDir reasonably sanely.
40
     
41
    # TODO RBC 20060201 make this a repository test.
42
    repo_b = br_b.repository
43
    self.assertFalse(repo_b.has_revision(br_a.revision_history()[3]))
44
    self.assertTrue(repo_b.has_revision(br_a.revision_history()[2]))
1185.16.145 by Martin Pool
Remove all assert statements from test cases.
45
    self.assertEquals(len(br_b.revision_history()), 7)
1534.1.31 by Robert Collins
Deprecated fetch.fetch and fetch.greedy_fetch for branch.fetch, and move the Repository.fetch internals to InterRepo and InterWeaveRepo.
46
    self.assertEquals(br_b.fetch(br_a, br_a.revision_history()[2])[0], 0)
47
    # branch.fetch is not supposed to alter the revision history
1185.16.145 by Martin Pool
Remove all assert statements from test cases.
48
    self.assertEquals(len(br_b.revision_history()), 7)
1534.4.41 by Robert Collins
Branch now uses BzrDir reasonably sanely.
49
    self.assertFalse(repo_b.has_revision(br_a.revision_history()[3]))
1393 by Robert Collins
reenable remotebranch tests
50
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
51
    # fetching the next revision up in sample data copies one revision
1534.1.31 by Robert Collins
Deprecated fetch.fetch and fetch.greedy_fetch for branch.fetch, and move the Repository.fetch internals to InterRepo and InterWeaveRepo.
52
    self.assertEquals(br_b.fetch(br_a, br_a.revision_history()[3])[0], 1)
1534.4.41 by Robert Collins
Branch now uses BzrDir reasonably sanely.
53
    self.assertTrue(repo_b.has_revision(br_a.revision_history()[3]))
1185.16.145 by Martin Pool
Remove all assert statements from test cases.
54
    self.assertFalse(has_revision(br_a, br_b.revision_history()[6]))
1534.4.41 by Robert Collins
Branch now uses BzrDir reasonably sanely.
55
    self.assertTrue(br_a.repository.has_revision(br_b.revision_history()[5]))
1393 by Robert Collins
reenable remotebranch tests
56
1092.2.28 by Robert Collins
reenable test of fetching a branch with ghosts
57
    # When a non-branch ancestor is missing, it should be unlisted...
1415 by Robert Collins
remove the ancestry weave file
58
    # as its not reference from the inventory weave.
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
59
    br_b4 = self.make_branch('br_4')
1534.1.31 by Robert Collins
Deprecated fetch.fetch and fetch.greedy_fetch for branch.fetch, and move the Repository.fetch internals to InterRepo and InterWeaveRepo.
60
    count, failures = br_b4.fetch(br_b)
1092.2.28 by Robert Collins
reenable test of fetching a branch with ghosts
61
    self.assertEqual(count, 7)
62
    self.assertEqual(failures, [])
1393 by Robert Collins
reenable remotebranch tests
63
1534.1.31 by Robert Collins
Deprecated fetch.fetch and fetch.greedy_fetch for branch.fetch, and move the Repository.fetch internals to InterRepo and InterWeaveRepo.
64
    self.assertEqual(writable_a.fetch(br_b)[0], 1)
1534.4.41 by Robert Collins
Branch now uses BzrDir reasonably sanely.
65
    self.assertTrue(has_revision(br_a, br_b.revision_history()[3]))
66
    self.assertTrue(has_revision(br_a, br_b.revision_history()[4]))
1393 by Robert Collins
reenable remotebranch tests
67
        
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
68
    br_b2 = self.make_branch('br_b2')
1534.1.31 by Robert Collins
Deprecated fetch.fetch and fetch.greedy_fetch for branch.fetch, and move the Repository.fetch internals to InterRepo and InterWeaveRepo.
69
    self.assertEquals(br_b2.fetch(br_b)[0], 7)
1534.4.41 by Robert Collins
Branch now uses BzrDir reasonably sanely.
70
    self.assertTrue(has_revision(br_b2, br_b.revision_history()[4]))
71
    self.assertTrue(has_revision(br_b2, br_a.revision_history()[2]))
1185.16.145 by Martin Pool
Remove all assert statements from test cases.
72
    self.assertFalse(has_revision(br_b2, br_a.revision_history()[3]))
1393 by Robert Collins
reenable remotebranch tests
73
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
74
    br_a2 = self.make_branch('br_a2')
1534.1.31 by Robert Collins
Deprecated fetch.fetch and fetch.greedy_fetch for branch.fetch, and move the Repository.fetch internals to InterRepo and InterWeaveRepo.
75
    self.assertEquals(br_a2.fetch(br_a)[0], 9)
1534.4.41 by Robert Collins
Branch now uses BzrDir reasonably sanely.
76
    self.assertTrue(has_revision(br_a2, br_b.revision_history()[4]))
77
    self.assertTrue(has_revision(br_a2, br_a.revision_history()[3]))
78
    self.assertTrue(has_revision(br_a2, br_a.revision_history()[2]))
1393 by Robert Collins
reenable remotebranch tests
79
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
80
    br_a3 = self.make_branch('br_a3')
1534.4.41 by Robert Collins
Branch now uses BzrDir reasonably sanely.
81
    # pulling a branch with no revisions grabs nothing, regardless of 
82
    # whats in the inventory.
1534.1.31 by Robert Collins
Deprecated fetch.fetch and fetch.greedy_fetch for branch.fetch, and move the Repository.fetch internals to InterRepo and InterWeaveRepo.
83
    self.assertEquals(br_a3.fetch(br_a2)[0], 0)
1393 by Robert Collins
reenable remotebranch tests
84
    for revno in range(4):
1534.4.41 by Robert Collins
Branch now uses BzrDir reasonably sanely.
85
        self.assertFalse(
86
            br_a3.repository.has_revision(br_a.revision_history()[revno]))
1534.1.31 by Robert Collins
Deprecated fetch.fetch and fetch.greedy_fetch for branch.fetch, and move the Repository.fetch internals to InterRepo and InterWeaveRepo.
87
    self.assertEqual(br_a3.fetch(br_a2, br_a.revision_history()[2])[0], 3)
1534.4.41 by Robert Collins
Branch now uses BzrDir reasonably sanely.
88
    # pull the 3 revisions introduced by a@u-0-3
1534.1.31 by Robert Collins
Deprecated fetch.fetch and fetch.greedy_fetch for branch.fetch, and move the Repository.fetch internals to InterRepo and InterWeaveRepo.
89
    fetched = br_a3.fetch(br_a2, br_a.revision_history()[3])[0]
1534.4.41 by Robert Collins
Branch now uses BzrDir reasonably sanely.
90
    self.assertEquals(fetched, 3, "fetched %d instead of 3" % fetched)
1393 by Robert Collins
reenable remotebranch tests
91
    # InstallFailed should be raised if the branch is missing the revision
92
    # that was requested.
1534.1.31 by Robert Collins
Deprecated fetch.fetch and fetch.greedy_fetch for branch.fetch, and move the Repository.fetch internals to InterRepo and InterWeaveRepo.
93
    self.assertRaises(bzrlib.errors.InstallFailed, br_a3.fetch, br_a2, 'pizza')
1393 by Robert Collins
reenable remotebranch tests
94
    # InstallFailed should be raised if the branch is missing a revision
95
    # from its own revision history
96
    br_a2.append_revision('a-b-c')
1534.1.31 by Robert Collins
Deprecated fetch.fetch and fetch.greedy_fetch for branch.fetch, and move the Repository.fetch internals to InterRepo and InterWeaveRepo.
97
    self.assertRaises(bzrlib.errors.InstallFailed, br_a3.fetch, br_a2)
1638.1.2 by Robert Collins
Change the basis-inventory file to not have the revision-id in the file name.
98
99
    # TODO: jam 20051218 Branch should no longer allow append_revision for revisions
100
    #       which don't exist. So this test needs to be rewritten
101
    #       RBC 20060403 the way to do this is to uncommit the revision from the
102
    #           repository after the commit
103
1185.13.4 by Robert Collins
make reweave visible as a weave method, and quickly integrate into fetch
104
    #TODO: test that fetch correctly does reweaving when needed. RBC 20051008
1534.4.41 by Robert Collins
Branch now uses BzrDir reasonably sanely.
105
    # Note that this means - updating the weave when ghosts are filled in to 
106
    # add the right parents.
107
1185.13.4 by Robert Collins
make reweave visible as a weave method, and quickly integrate into fetch
108
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
109
class TestFetch(TestCaseWithTransport):
1392 by Robert Collins
reinstate testfetch test case
110
111
    def test_fetch(self):
1115 by Martin Pool
- split fetch tests into a separate file
112
        #highest indices a: 5, b: 7
1185.16.145 by Martin Pool
Remove all assert statements from test cases.
113
        br_a, br_b = make_branches(self)
1393 by Robert Collins
reenable remotebranch tests
114
        fetch_steps(self, br_a, br_b, br_a)
1404 by Robert Collins
only pull remote text weaves once per fetch operation
115
1558.4.11 by Aaron Bentley
Allow merge against self, make fetching self a noop
116
    def test_fetch_self(self):
117
        wt = self.make_branch_and_tree('br')
118
        self.assertEqual(wt.branch.fetch(wt.branch), (0, []))
119
1551.8.42 by Aaron Bentley
Ensure that fetch properly updates inventory root knit
120
    def test_fetch_root_knit(self):
1551.8.43 by Aaron Bentley
Update from reviews
121
        """Ensure that knit2.fetch() updates the root knit
1551.8.42 by Aaron Bentley
Ensure that fetch properly updates inventory root knit
122
        
1551.8.43 by Aaron Bentley
Update from reviews
123
        This tests the case where the root has a new revision, but there are no
124
        corresponding filename, parent, contents or other changes.
1551.8.42 by Aaron Bentley
Ensure that fetch properly updates inventory root knit
125
        """
1551.8.43 by Aaron Bentley
Update from reviews
126
        knit1_format = bzrdir.BzrDirMetaFormat1()
127
        knit1_format.repository_format = repository.RepositoryFormatKnit1()
128
        knit2_format = bzrdir.BzrDirMetaFormat1()
2241.1.5 by Martin Pool
Move KnitFormat2 into repofmt
129
        knit2_format.repository_format = knitrepo.RepositoryFormatKnit2()
1551.8.43 by Aaron Bentley
Update from reviews
130
        # we start with a knit1 repository because that causes the
131
        # root revision to change for each commit, even though the content,
132
        # parent, name, and other attributes are unchanged.
133
        tree = self.make_branch_and_tree('tree', knit1_format)
1551.8.42 by Aaron Bentley
Ensure that fetch properly updates inventory root knit
134
        tree.set_root_id('tree-root')
135
        tree.commit('rev1', rev_id='rev1')
136
        tree.commit('rev2', rev_id='rev2')
1551.8.43 by Aaron Bentley
Update from reviews
137
138
        # Now we convert it to a knit2 repository so that it has a root knit
139
        Convert(tree.basedir, knit2_format)
1551.8.42 by Aaron Bentley
Ensure that fetch properly updates inventory root knit
140
        tree = WorkingTree.open(tree.basedir)
1551.8.43 by Aaron Bentley
Update from reviews
141
        branch = self.make_branch('branch', format=knit2_format)
1551.8.42 by Aaron Bentley
Ensure that fetch properly updates inventory root knit
142
        branch.pull(tree.branch, stop_revision='rev1')
143
        repo = branch.repository
1551.8.43 by Aaron Bentley
Update from reviews
144
        root_knit = repo.weave_store.get_weave('tree-root',
1551.8.42 by Aaron Bentley
Ensure that fetch properly updates inventory root knit
145
                                                repo.get_transaction())
1551.8.43 by Aaron Bentley
Update from reviews
146
        # Make sure fetch retrieved only what we requested
147
        self.assertTrue('rev1' in root_knit)
148
        self.assertTrue('rev2' not in root_knit)
1551.8.42 by Aaron Bentley
Ensure that fetch properly updates inventory root knit
149
        branch.pull(tree.branch)
1551.8.43 by Aaron Bentley
Update from reviews
150
        root_knit = repo.weave_store.get_weave('tree-root',
1551.8.42 by Aaron Bentley
Ensure that fetch properly updates inventory root knit
151
                                                repo.get_transaction())
1551.8.43 by Aaron Bentley
Update from reviews
152
        # Make sure that the next revision in the root knit was retrieved,
153
        # even though the text, name, parent_id, etc., were unchanged.
154
        self.assertTrue('rev2' in root_knit)
1551.8.42 by Aaron Bentley
Ensure that fetch properly updates inventory root knit
155
1185.16.96 by mbp at sourcefrog
More merge/fetch tests
156
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
157
class TestMergeFetch(TestCaseWithTransport):
1185.16.96 by mbp at sourcefrog
More merge/fetch tests
158
159
    def test_merge_fetches_unrelated(self):
160
        """Merge brings across history from unrelated source"""
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
161
        wt1 = self.make_branch_and_tree('br1')
162
        br1 = wt1.branch
163
        wt1.commit(message='rev 1-1', rev_id='1-1')
164
        wt1.commit(message='rev 1-2', rev_id='1-2')
165
        wt2 = self.make_branch_and_tree('br2')
166
        br2 = wt2.branch
167
        wt2.commit(message='rev 2-1', rev_id='2-1')
1185.16.96 by mbp at sourcefrog
More merge/fetch tests
168
        merge(other_revision=['br1', -1], base_revision=['br1', 0],
169
              this_dir='br2')
170
        self._check_revs_present(br2)
171
1185.16.94 by mbp at sourcefrog
New test that merge fetches revisions from source
172
    def test_merge_fetches(self):
173
        """Merge brings across history from source"""
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
174
        wt1 = self.make_branch_and_tree('br1')
175
        br1 = wt1.branch
176
        wt1.commit(message='rev 1-1', rev_id='1-1')
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
177
        dir_2 = br1.bzrdir.sprout('br2')
178
        br2 = dir_2.open_branch()
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
179
        wt1.commit(message='rev 1-2', rev_id='1-2')
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
180
        dir_2.open_workingtree().commit(message='rev 2-1', rev_id='2-1')
1185.16.94 by mbp at sourcefrog
New test that merge fetches revisions from source
181
        merge(other_revision=['br1', -1], base_revision=[None, None], 
182
              this_dir='br2')
1185.16.96 by mbp at sourcefrog
More merge/fetch tests
183
        self._check_revs_present(br2)
184
185
    def _check_revs_present(self, br2):
1185.16.94 by mbp at sourcefrog
New test that merge fetches revisions from source
186
        for rev_id in '1-1', '1-2', '2-1':
1185.67.2 by Aaron Bentley
Renamed Branch.storage to Branch.repository
187
            self.assertTrue(br2.repository.has_revision(rev_id))
188
            rev = br2.repository.get_revision(rev_id)
1185.16.94 by mbp at sourcefrog
New test that merge fetches revisions from source
189
            self.assertEqual(rev.revision_id, rev_id)
1185.67.2 by Aaron Bentley
Renamed Branch.storage to Branch.repository
190
            self.assertTrue(br2.repository.get_inventory(rev_id))
1185.16.94 by mbp at sourcefrog
New test that merge fetches revisions from source
191
1185.16.96 by mbp at sourcefrog
More merge/fetch tests
192
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
193
class TestMergeFileHistory(TestCaseWithTransport):
194
1185.16.96 by mbp at sourcefrog
More merge/fetch tests
195
    def setUp(self):
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
196
        super(TestMergeFileHistory, self).setUp()
197
        wt1 = self.make_branch_and_tree('br1')
198
        br1 = wt1.branch
1185.16.96 by mbp at sourcefrog
More merge/fetch tests
199
        self.build_tree_contents([('br1/file', 'original contents\n')])
1534.4.28 by Robert Collins
first cut at merge from integration.
200
        wt1.add('file', 'this-file-id')
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
201
        wt1.commit(message='rev 1-1', rev_id='1-1')
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
202
        dir_2 = br1.bzrdir.sprout('br2')
203
        br2 = dir_2.open_branch()
204
        wt2 = dir_2.open_workingtree()
1185.16.96 by mbp at sourcefrog
More merge/fetch tests
205
        self.build_tree_contents([('br1/file', 'original from 1\n')])
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
206
        wt1.commit(message='rev 1-2', rev_id='1-2')
1185.16.96 by mbp at sourcefrog
More merge/fetch tests
207
        self.build_tree_contents([('br1/file', 'agreement\n')])
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
208
        wt1.commit(message='rev 1-3', rev_id='1-3')
1185.16.96 by mbp at sourcefrog
More merge/fetch tests
209
        self.build_tree_contents([('br2/file', 'contents in 2\n')])
1534.4.28 by Robert Collins
first cut at merge from integration.
210
        wt2.commit(message='rev 2-1', rev_id='2-1')
1185.16.96 by mbp at sourcefrog
More merge/fetch tests
211
        self.build_tree_contents([('br2/file', 'agreement\n')])
1534.4.28 by Robert Collins
first cut at merge from integration.
212
        wt2.commit(message='rev 2-2', rev_id='2-2')
1185.16.96 by mbp at sourcefrog
More merge/fetch tests
213
214
    def test_merge_fetches_file_history(self):
215
        """Merge brings across file histories"""
216
        br2 = Branch.open('br2')
217
        merge(other_revision=['br1', -1], base_revision=[None, None], 
218
              this_dir='br2')
219
        for rev_id, text in [('1-2', 'original from 1\n'),
220
                             ('1-3', 'agreement\n'),
221
                             ('2-1', 'contents in 2\n'),
222
                             ('2-2', 'agreement\n')]:
1185.65.1 by Aaron Bentley
Refactored out ControlFiles and RevisionStore from _Branch
223
            self.assertEqualDiff(
1185.67.2 by Aaron Bentley
Renamed Branch.storage to Branch.repository
224
                br2.repository.revision_tree(
1185.65.1 by Aaron Bentley
Refactored out ControlFiles and RevisionStore from _Branch
225
                    rev_id).get_file_text('this-file-id'), text)
1185.16.96 by mbp at sourcefrog
More merge/fetch tests
226
227
1404 by Robert Collins
only pull remote text weaves once per fetch operation
228
class TestHttpFetch(TestCaseWithWebserver):
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
229
    # FIXME RBC 20060124 this really isn't web specific, perhaps an
230
    # instrumented readonly transport? Can we do an instrumented
231
    # adapter and use self.get_readonly_url ?
1404 by Robert Collins
only pull remote text weaves once per fetch operation
232
233
    def test_fetch(self):
234
        #highest indices a: 5, b: 7
1185.16.145 by Martin Pool
Remove all assert statements from test cases.
235
        br_a, br_b = make_branches(self)
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
236
        br_rem_a = Branch.open(self.get_readonly_url('branch1'))
1404 by Robert Collins
only pull remote text weaves once per fetch operation
237
        fetch_steps(self, br_rem_a, br_b, br_a)
238
1540.3.15 by Martin Pool
[merge] large merge to sync with bzr.dev
239
    def _count_log_matches(self, target, logs):
240
        """Count the number of times the target file pattern was fetched in an http log"""
2004.1.22 by v.ladeuil+lp at free
Implements Range header handling for GET requests. Fix a test.
241
        get_succeeds_re = re.compile(
242
            '.*"GET .*%s HTTP/1.1" 20[06] - "-" "bzr/%s' %
243
            (     target,                    bzrlib.__version__))
1540.3.15 by Martin Pool
[merge] large merge to sync with bzr.dev
244
        c = 0
245
        for line in logs:
2004.1.22 by v.ladeuil+lp at free
Implements Range header handling for GET requests. Fix a test.
246
            if get_succeeds_re.match(line):
1540.3.15 by Martin Pool
[merge] large merge to sync with bzr.dev
247
                c += 1
248
        return c
249
1404 by Robert Collins
only pull remote text weaves once per fetch operation
250
    def test_weaves_are_retrieved_once(self):
251
        self.build_tree(("source/", "source/file", "target/"))
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
252
        wt = self.make_branch_and_tree('source')
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
253
        branch = wt.branch
254
        wt.add(["file"], ["id"])
255
        wt.commit("added file")
1404 by Robert Collins
only pull remote text weaves once per fetch operation
256
        print >>open("source/file", 'w'), "blah"
1534.4.26 by Robert Collins
Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.
257
        wt.commit("changed file")
1534.4.41 by Robert Collins
Branch now uses BzrDir reasonably sanely.
258
        target = BzrDir.create_branch_and_repo("target/")
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
259
        source = Branch.open(self.get_readonly_url("source/"))
1534.1.31 by Robert Collins
Deprecated fetch.fetch and fetch.greedy_fetch for branch.fetch, and move the Repository.fetch internals to InterRepo and InterWeaveRepo.
260
        self.assertEqual(target.fetch(source), (2, []))
1430 by Robert Collins
touchup the prefixed-store patch
261
        # this is the path to the literal file. As format changes 
262
        # occur it needs to be updated. FIXME: ask the store for the
263
        # path.
1540.3.15 by Martin Pool
[merge] large merge to sync with bzr.dev
264
        self.log("web server logs are:")
265
        http_logs = self.get_readonly_server().logs
266
        self.log('\n'.join(http_logs))
1666.1.6 by Robert Collins
Make knit the default format.
267
        # unfortunately this log entry is branch format specific. We could 
268
        # factor out the 'what files does this format use' to a method on the 
269
        # repository, which would let us to this generically. RBC 20060419
270
        self.assertEqual(1, self._count_log_matches('/ce/id.kndx', http_logs))
271
        self.assertEqual(1, self._count_log_matches('/ce/id.knit', http_logs))
272
        self.assertEqual(1, self._count_log_matches('inventory.kndx', http_logs))
1417.1.12 by Robert Collins
cache revision history during read transactions
273
        # this r-h check test will prevent regressions, but it currently already 
274
        # passes, before the patch to cache-rh is applied :[
1540.3.15 by Martin Pool
[merge] large merge to sync with bzr.dev
275
        self.assertEqual(1, self._count_log_matches('revision-history', http_logs))
1530.1.18 by Robert Collins
unbreak test_fetch
276
        # FIXME naughty poking in there.
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
277
        self.get_readonly_server().logs = []
1417.1.13 by Robert Collins
do not download remote ancestry.weave if the target revision we are stopping at is in our local store
278
        # check there is nothing more to fetch
1534.4.50 by Robert Collins
Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.
279
        source = Branch.open(self.get_readonly_url("source/"))
1534.1.31 by Robert Collins
Deprecated fetch.fetch and fetch.greedy_fetch for branch.fetch, and move the Repository.fetch internals to InterRepo and InterWeaveRepo.
280
        self.assertEqual(target.fetch(source), (0, []))
1540.3.15 by Martin Pool
[merge] large merge to sync with bzr.dev
281
        # should make just two requests
282
        http_logs = self.get_readonly_server().logs
283
        self.log("web server logs are:")
284
        self.log('\n'.join(http_logs))
1666.1.4 by Robert Collins
* 'Metadir' is now the default disk format. This improves behaviour in
285
        self.assertEqual(1, self._count_log_matches('branch-format', http_logs))
286
        self.assertEqual(1, self._count_log_matches('branch/format', http_logs))
287
        self.assertEqual(1, self._count_log_matches('repository/format', http_logs))
288
        self.assertEqual(1, self._count_log_matches('revision-history', http_logs))
289
        self.assertEqual(4, len(http_logs))