Merge lp:~jelmer/brz/annotated-tags into lp:brz

Proposed by Jelmer Vernooij
Status: Merged
Approved by: Jelmer Vernooij
Approved revision: no longer in the source branch.
Merge reported by: The Breezy Bot
Merged at revision: not available
Proposed branch: lp:~jelmer/brz/annotated-tags
Merge into: lp:brz
Diff against target: 127 lines (+49/-21)
4 files modified
breezy/git/branch.py (+6/-2)
breezy/git/interrepo.py (+8/-18)
breezy/git/remote.py (+3/-1)
breezy/git/tests/test_remote.py (+32/-0)
To merge this branch: bzr merge lp:~jelmer/brz/annotated-tags
Reviewer Review Type Date Requested Status
Martin Packman Approve
Review via email: mp+358536@code.launchpad.net

Commit message

Fix fetching of revisions that are referenced by annotated tags.

Description of the change

Fix fetchin of revisions that are referenced by annotated tags.

To post a comment you must log in.
Revision history for this message
Martin Packman (gz) wrote :

Thanks!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'breezy/git/branch.py'
2--- breezy/git/branch.py 2018-08-15 19:35:30 +0000
3+++ breezy/git/branch.py 2018-11-09 02:22:40 +0000
4@@ -135,10 +135,14 @@
5 pass
6 elif overwrite or not ref_name in target_repo._git.refs:
7 target_repo._git.refs[ref_name] = unpeeled or peeled
8- updates[tag_name] = self.repository.lookup_foreign_revision_id(peeled)
9+ try:
10+ updates[tag_name] = self.repository.lookup_foreign_revision_id(peeled)
11+ except KeyError:
12+ trace.warning('%s does not point to a valid object',
13+ tag_name)
14 else:
15- source_revid = self.repository.lookup_foreign_revision_id(peeled)
16 try:
17+ source_revid = self.repository.lookup_foreign_revision_id(peeled)
18 target_revid = target_repo.lookup_foreign_revision_id(
19 target_repo._git.refs[ref_name])
20 except KeyError:
21
22=== modified file 'breezy/git/interrepo.py'
23--- breezy/git/interrepo.py 2018-09-29 22:02:30 +0000
24+++ breezy/git/interrepo.py 2018-11-09 02:22:40 +0000
25@@ -399,16 +399,20 @@
26 def get_determine_wants_heads(self, wants, include_tags=False):
27 wants = set(wants)
28 def determine_wants(refs):
29- potential = set(wants)
30+ unpeel_lookup = {}
31+ for k, v in viewitems(refs):
32+ if k.endswith(ANNOTATED_TAG_SUFFIX):
33+ unpeel_lookup[v] = refs[k[:-len(ANNOTATED_TAG_SUFFIX)]]
34+ potential = set([unpeel_lookup.get(w, w) for w in wants])
35 if include_tags:
36- for k, unpeeled in viewitems(refs):
37+ for k, sha in viewitems(refs):
38 if k.endswith(ANNOTATED_TAG_SUFFIX):
39 continue
40 if not is_tag(k):
41 continue
42- if unpeeled == ZERO_SHA:
43+ if sha == ZERO_SHA:
44 continue
45- potential.add(unpeeled)
46+ potential.add(sha)
47 return list(potential - self._target_has_shas(potential))
48 return determine_wants
49
50@@ -473,20 +477,6 @@
51 potential.add(self.source.controldir.get_peeled(k) or v)
52 return list(potential - self._target_has_shas(potential))
53
54- def get_determine_wants_heads(self, wants, include_tags=False):
55- wants = set(wants)
56- def determine_wants(refs):
57- potential = set(wants)
58- if include_tags:
59- for k, unpeeled in viewitems(refs):
60- if not is_tag(k):
61- continue
62- if unpeeled == ZERO_SHA:
63- continue
64- potential.add(self.source.controldir.get_peeled(k) or unpeeled)
65- return list(potential - self._target_has_shas(potential))
66- return determine_wants
67-
68 def _warn_slow(self):
69 if not config.GlobalConfig().suppress_warning('slow_intervcs_push'):
70 trace.warning(
71
72=== modified file 'breezy/git/remote.py'
73--- breezy/git/remote.py 2018-10-14 12:46:54 +0000
74+++ breezy/git/remote.py 2018-11-09 02:22:40 +0000
75@@ -896,7 +896,9 @@
76
77 def _synchronize_history(self, destination, revision_id):
78 """See Branch._synchronize_history()."""
79- destination.generate_revision_history(self.last_revision())
80+ if revision_id is None:
81+ revision_id = self.last_revision()
82+ destination.generate_revision_history(revision_id)
83
84 def _get_parent_location(self):
85 return None
86
87=== modified file 'breezy/git/tests/test_remote.py'
88--- breezy/git/tests/test_remote.py 2018-10-06 21:01:10 +0000
89+++ breezy/git/tests/test_remote.py 2018-11-09 02:22:40 +0000
90@@ -221,6 +221,38 @@
91 {'blah': default_mapping.revision_id_foreign_to_bzr(c2)},
92 local_branch.tags.get_tag_dict())
93
94+ def test_sprout_with_annotated_tag_unreferenced(self):
95+ c1 = self.remote_real.do_commit(
96+ message=b'message',
97+ committer=b'committer <committer@example.com>',
98+ author=b'author <author@example.com>')
99+ c2 = self.remote_real.do_commit(
100+ message=b'another commit',
101+ committer=b'committer <committer@example.com>',
102+ author=b'author <author@example.com>')
103+ porcelain.tag_create(
104+ self.remote_real,
105+ tag=b"blah",
106+ author=b'author <author@example.com>',
107+ objectish=c1,
108+ tag_time=int(time.time()),
109+ tag_timezone=0,
110+ annotated=True,
111+ message=b"Annotated tag")
112+
113+ remote = ControlDir.open(self.remote_url)
114+ self.make_controldir('local', format=self._to_format)
115+ local = remote.sprout(
116+ 'local',
117+ revision_id=default_mapping.revision_id_foreign_to_bzr(c1))
118+ local_branch = local.open_branch()
119+ self.assertEqual(
120+ default_mapping.revision_id_foreign_to_bzr(c1),
121+ local_branch.last_revision())
122+ self.assertEqual(
123+ {'blah': default_mapping.revision_id_foreign_to_bzr(c1)},
124+ local_branch.tags.get_tag_dict())
125+
126
127 class FetchFromRemoteToBzrTests(FetchFromRemoteTestBase,TestCaseWithTransport):
128

Subscribers

People subscribed via source and target branches