~bzr-pqm/bzr/bzr.dev

1185.1.18 by Robert Collins
Lalo Martins remotebranch patch
1
# Copyright (C) 2005 by 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
import bzrlib.errors
17
from bzrlib.selftest.testrevision import make_branches
18
from bzrlib.trace import mutter
19
from bzrlib.branch import Branch, find_branch
1185.1.33 by Robert Collins
for remote gets fallback from foo.gz to foo in RemoteStore.
20
import gzip
1185.1.18 by Robert Collins
Lalo Martins remotebranch patch
21
import sys
22
import os
23
24
from bzrlib.selftest.HTTPTestUtil import TestCaseWithWebserver
25
        
26
27
class TestFetch(TestCaseWithWebserver):
28
    def runTest(self):
1392 by Robert Collins
reinstate testfetch test case
29
        from bzrlib.fetch import greedy_fetch
30
        from bzrlib.selftest.testfetch import has_revision
1185.1.18 by Robert Collins
Lalo Martins remotebranch patch
31
32
        def new_branch(name):
33
            os.mkdir(name)
1185.2.19 by Lalo Martins
made tests pass again, after merge from integration
34
            return Branch.initialize(name)
1185.1.18 by Robert Collins
Lalo Martins remotebranch patch
35
            
36
        #highest indices a: 5, b: 7
37
        br_a, br_b = make_branches()
1185.1.33 by Robert Collins
for remote gets fallback from foo.gz to foo in RemoteStore.
38
        # unpack one of br_a's revision files to test .gz fallbacks
39
        to_unzip = br_a.revision_history()[-1]
40
        to_unzip_source = gzip.open(os.path.join(br_a.base, '.bzr', 
41
                                                  'revision-store',
42
                                                  to_unzip + '.gz'))
43
        content = to_unzip_source.read()
44
        to_unzip_source.close()
45
        os.unlink(os.path.join(br_a.base, '.bzr', 'revision-store',
46
                               to_unzip + '.gz'))
47
        to_unzip_output = open(os.path.join(br_a.base, '.bzr', 
48
                                             'revision-store', to_unzip), 'wb')
49
        to_unzip_output.write(content)
50
        to_unzip_output.close()
51
        
1392 by Robert Collins
reinstate testfetch test case
52
        import pdb;pdb.set_trace()
1185.2.19 by Lalo Martins
made tests pass again, after merge from integration
53
        br_rem = Branch.open(self.get_remote_url(br_a.base))
1185.1.18 by Robert Collins
Lalo Martins remotebranch patch
54
        assert not has_revision(br_b, br_rem.revision_history()[3])
55
        assert has_revision(br_b, br_rem.revision_history()[2])
56
        assert len(br_b.revision_history()) == 7
57
        assert greedy_fetch(br_b, br_rem, br_rem.revision_history()[2])[0] == 0
58
59
        # greedy_fetch is not supposed to alter the revision history
60
        assert len(br_b.revision_history()) == 7
61
        assert not has_revision(br_b, br_rem.revision_history()[3])
62
63
        assert len(br_b.revision_history()) == 7
64
        assert greedy_fetch(br_b, br_rem, br_rem.revision_history()[3])[0] == 1
65
        assert has_revision(br_b, br_a.revision_history()[3])
66
        assert not has_revision(br_rem, br_b.revision_history()[3])
67
        assert not has_revision(br_rem, br_b.revision_history()[4])
68
69
        # When a non-branch ancestor is missing, it should be a failure, not
70
        # exception
71
        br_a4 = new_branch('br_a4')
72
        count, failures = greedy_fetch(br_a4, br_rem)
73
        assert count == 6
74
        assert failures == set((br_b.revision_history()[4],
75
                                br_b.revision_history()[5])) 
76
77
        assert greedy_fetch(br_a, br_b)[0] == 4
78
        assert has_revision(br_a, br_b.revision_history()[3])
79
        assert has_revision(br_a, br_b.revision_history()[4])
80
81
        br_b2 = new_branch('br_b2')
82
        assert greedy_fetch(br_b2, br_b)[0] == 7
83
        assert has_revision(br_b2, br_b.revision_history()[4])
84
        assert has_revision(br_b2, br_a.revision_history()[2])
85
        assert not has_revision(br_b2, br_a.revision_history()[3])
86
87
        br_a2 = new_branch('br_a2')
88
        assert greedy_fetch(br_a2, br_rem)[0] == 9
89
        assert has_revision(br_a2, br_b.revision_history()[4])
90
        assert has_revision(br_a2, br_a.revision_history()[3])