~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_fetch.py

Branch now uses BzrDir reasonably sanely.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
import sys
19
19
 
20
20
from bzrlib.branch import Branch
 
21
from bzrlib.bzrdir import BzrDir
21
22
from bzrlib.builtins import merge
22
23
import bzrlib.errors
23
24
from bzrlib.fetch import greedy_fetch
29
30
 
30
31
 
31
32
def has_revision(branch, revision_id):
32
 
    try:
33
 
        branch.repository.get_revision_xml_file(revision_id)
34
 
        return True
35
 
    except bzrlib.errors.NoSuchRevision:
36
 
        return False
37
 
 
 
33
    return branch.repository.has_revision(revision_id)
38
34
 
39
35
def fetch_steps(self, br_a, br_b, writable_a):
40
36
    """A foreign test method for testing fetch locally and remotely."""
41
37
    def new_branch(name):
42
38
        os.mkdir(name)
43
39
        return WorkingTree.create_standalone(name).branch
44
 
            
45
 
    self.assertFalse(has_revision(br_b, br_a.revision_history()[3]))
46
 
    self.assert_(has_revision(br_b, br_a.revision_history()[2]))
 
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]))
47
45
    self.assertEquals(len(br_b.revision_history()), 7)
48
46
    self.assertEquals(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
49
    self.assertEquals(len(br_b.revision_history()), 7)
52
 
    self.assertFalse(has_revision(br_b, br_a.revision_history()[3]))
 
50
    self.assertFalse(repo_b.has_revision(br_a.revision_history()[3]))
53
51
 
54
52
    self.assertEquals(len(br_b.revision_history()), 7)
55
53
    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]))
 
54
    self.assertTrue(repo_b.has_revision(br_a.revision_history()[3]))
57
55
    self.assertFalse(has_revision(br_a, br_b.revision_history()[6]))
58
 
    self.assert_(has_revision(br_a, br_b.revision_history()[5]))
 
56
    self.assertTrue(br_a.repository.has_revision(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
    self.assertTrue(has_revision(br_a, br_b.revision_history()[3]))
 
67
    self.assertTrue(has_revision(br_a, br_b.revision_history()[4]))
70
68
        
71
69
    br_b2 = new_branch('br_b2')
72
70
    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]))
 
71
    self.assertTrue(has_revision(br_b2, br_b.revision_history()[4]))
 
72
    self.assertTrue(has_revision(br_b2, br_a.revision_history()[2]))
75
73
    self.assertFalse(has_revision(br_b2, br_a.revision_history()[3]))
76
74
 
77
75
    br_a2 = new_branch('br_a2')
78
76
    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]))
 
77
    self.assertTrue(has_revision(br_a2, br_b.revision_history()[4]))
 
78
    self.assertTrue(has_revision(br_a2, br_a.revision_history()[3]))
 
79
    self.assertTrue(has_revision(br_a2, br_a.revision_history()[2]))
82
80
 
83
81
    br_a3 = new_branch('br_a3')
 
82
    # pulling a branch with no revisions grabs nothing, regardless of 
 
83
    # whats in the inventory.
84
84
    self.assertEquals(greedy_fetch(br_a3, br_a2)[0], 0)
85
85
    for revno in range(4):
86
 
        self.assertFalse(has_revision(br_a3, br_a.revision_history()[revno]))
 
86
        self.assertFalse(
 
87
            br_a3.repository.has_revision(br_a.revision_history()[revno]))
87
88
    self.assertEqual(greedy_fetch(br_a3, br_a2, br_a.revision_history()[2])[0], 3)
 
89
    # pull the 3 revisions introduced by a@u-0-3
88
90
    fetched = greedy_fetch(br_a3, br_a2, br_a.revision_history()[3])[0]
89
 
    self.assertEquals(fetched, 6, "fetched %d instead of 6" % fetched)
 
91
    self.assertEquals(fetched, 3, "fetched %d instead of 3" % fetched)
90
92
    # InstallFailed should be raised if the branch is missing the revision
91
93
    # that was requested.
92
94
    self.assertRaises(bzrlib.errors.InstallFailed, greedy_fetch, br_a3,
96
98
    br_a2.append_revision('a-b-c')
97
99
    self.assertRaises(bzrlib.errors.InstallFailed, greedy_fetch, br_a3,
98
100
                      br_a2)
99
 
 
100
 
 
101
101
    #TODO: test that fetch correctly does reweaving when needed. RBC 20051008
 
102
    # Note that this means - updating the weave when ghosts are filled in to 
 
103
    # add the right parents.
 
104
 
102
105
 
103
106
class TestFetch(TestCaseWithTransport):
104
107
 
198
201
        wt.commit("added file")
199
202
        print >>open("source/file", 'w'), "blah"
200
203
        wt.commit("changed file")
201
 
        target = Branch.create("target/")
 
204
        target = BzrDir.create_branch_and_repo("target/")
202
205
        source = Branch.open(self.get_remote_url("source/"))
203
206
        self.assertEqual(greedy_fetch(target, source), (2, []))
204
207
        # this is the path to the literal file. As format changes