1
# Copyright (C) 2005, 2007, 2010 Canonical Ltd
1
# Copyright (C) 2005-2011, 2016 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
revision as _mod_revision,
30
from bzrlib.branch import Branch
31
from bzrlib.bzrdir import BzrDir
32
from bzrlib.repofmt import knitrepo
33
from bzrlib.tests import TestCaseWithTransport
34
from bzrlib.tests.test_revision import make_branches
35
from bzrlib.trace import mutter
36
from bzrlib.upgrade import Convert
37
from bzrlib.workingtree import WorkingTree
24
from brzlib.branch import Branch
25
from brzlib.repofmt import knitrepo
26
from brzlib.tests import TestCaseWithTransport
27
from brzlib.tests.test_revision import make_branches
28
from brzlib.upgrade import Convert
29
from brzlib.workingtree import WorkingTree
39
31
# These tests are a bit old; please instead add new tests into
40
32
# per_interrepository/ so they'll run on all relevant
44
36
def has_revision(branch, revision_id):
45
37
return branch.repository.has_revision(revision_id)
40
def revision_history(branch):
43
graph = branch.repository.get_graph()
44
history = list(graph.iter_lefthand_ancestry(branch.last_revision(),
45
[_mod_revision.NULL_REVISION]))
47
52
def fetch_steps(self, br_a, br_b, writable_a):
48
53
"""A foreign test method for testing fetch locally and remotely."""
50
55
# TODO RBC 20060201 make this a repository test.
51
56
repo_b = br_b.repository
52
self.assertFalse(repo_b.has_revision(br_a.revision_history()[3]))
53
self.assertTrue(repo_b.has_revision(br_a.revision_history()[2]))
54
self.assertEquals(len(br_b.revision_history()), 7)
55
br_b.fetch(br_a, br_a.revision_history()[2])
57
self.assertFalse(repo_b.has_revision(revision_history(br_a)[3]))
58
self.assertTrue(repo_b.has_revision(revision_history(br_a)[2]))
59
self.assertEqual(len(revision_history(br_b)), 7)
60
br_b.fetch(br_a, revision_history(br_a)[2])
56
61
# branch.fetch is not supposed to alter the revision history
57
self.assertEquals(len(br_b.revision_history()), 7)
58
self.assertFalse(repo_b.has_revision(br_a.revision_history()[3]))
62
self.assertEqual(len(revision_history(br_b)), 7)
63
self.assertFalse(repo_b.has_revision(revision_history(br_a)[3]))
60
65
# fetching the next revision up in sample data copies one revision
61
br_b.fetch(br_a, br_a.revision_history()[3])
62
self.assertTrue(repo_b.has_revision(br_a.revision_history()[3]))
63
self.assertFalse(has_revision(br_a, br_b.revision_history()[6]))
64
self.assertTrue(br_a.repository.has_revision(br_b.revision_history()[5]))
66
br_b.fetch(br_a, revision_history(br_a)[3])
67
self.assertTrue(repo_b.has_revision(revision_history(br_a)[3]))
68
self.assertFalse(has_revision(br_a, revision_history(br_b)[6]))
69
self.assertTrue(br_a.repository.has_revision(revision_history(br_b)[5]))
66
71
# When a non-branch ancestor is missing, it should be unlisted...
67
72
# as its not reference from the inventory weave.
71
76
writable_a.fetch(br_b)
72
self.assertTrue(has_revision(br_a, br_b.revision_history()[3]))
73
self.assertTrue(has_revision(br_a, br_b.revision_history()[4]))
77
self.assertTrue(has_revision(br_a, revision_history(br_b)[3]))
78
self.assertTrue(has_revision(br_a, revision_history(br_b)[4]))
75
80
br_b2 = self.make_branch('br_b2')
77
self.assertTrue(has_revision(br_b2, br_b.revision_history()[4]))
78
self.assertTrue(has_revision(br_b2, br_a.revision_history()[2]))
79
self.assertFalse(has_revision(br_b2, br_a.revision_history()[3]))
82
self.assertTrue(has_revision(br_b2, revision_history(br_b)[4]))
83
self.assertTrue(has_revision(br_b2, revision_history(br_a)[2]))
84
self.assertFalse(has_revision(br_b2, revision_history(br_a)[3]))
81
86
br_a2 = self.make_branch('br_a2')
83
self.assertTrue(has_revision(br_a2, br_b.revision_history()[4]))
84
self.assertTrue(has_revision(br_a2, br_a.revision_history()[3]))
85
self.assertTrue(has_revision(br_a2, br_a.revision_history()[2]))
88
self.assertTrue(has_revision(br_a2, revision_history(br_b)[4]))
89
self.assertTrue(has_revision(br_a2, revision_history(br_a)[3]))
90
self.assertTrue(has_revision(br_a2, revision_history(br_a)[2]))
87
92
br_a3 = self.make_branch('br_a3')
88
93
# pulling a branch with no revisions grabs nothing, regardless of
91
96
for revno in range(4):
93
br_a3.repository.has_revision(br_a.revision_history()[revno]))
94
br_a3.fetch(br_a2, br_a.revision_history()[2])
98
br_a3.repository.has_revision(revision_history(br_a)[revno]))
99
br_a3.fetch(br_a2, revision_history(br_a)[2])
95
100
# pull the 3 revisions introduced by a@u-0-3
96
br_a3.fetch(br_a2, br_a.revision_history()[3])
101
br_a3.fetch(br_a2, revision_history(br_a)[3])
97
102
# NoSuchRevision should be raised if the branch is missing the revision
98
103
# that was requested.
99
104
self.assertRaises(errors.NoSuchRevision, br_a3.fetch, br_a2, 'pizza')