Merge lp:~jelmer/brz/extra-fields 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/extra-fields
Merge into: lp:brz
Diff against target: 253 lines (+44/-44)
5 files modified
breezy/git/errors.py (+0/-18)
breezy/git/fetch.py (+5/-4)
breezy/git/mapping.py (+23/-7)
breezy/git/repository.py (+1/-1)
breezy/git/tests/test_mapping.py (+15/-14)
To merge this branch: bzr merge lp:~jelmer/brz/extra-fields
Reviewer Review Type Date Requested Status
Jelmer Vernooij Approve
Review via email: mp+374765@code.launchpad.net

Commit message

Allow unknown extras in git commits when just inspecting revisions, rather than importing.

Description of the change

Allow unknown extras in git commits when just inspecting revisions, rather than importing.

To post a comment you must log in.
Revision history for this message
Jelmer Vernooij (jelmer) :
review: Approve
Revision history for this message
The Breezy Bot (the-breezy-bot) wrote :

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'breezy/git/errors.py'
2--- breezy/git/errors.py 2019-01-13 14:16:35 +0000
3+++ breezy/git/errors.py 2019-11-03 00:18:07 +0000
4@@ -61,21 +61,3 @@
5
6 class GitSmartRemoteNotSupported(brz_errors.UnsupportedOperation):
7 _fmt = "This operation is not supported by the Git smart server protocol."
8-
9-
10-class UnknownCommitExtra(brz_errors.BzrError):
11- _fmt = "Unknown extra fields in %(object)r: %(fields)r."
12-
13- def __init__(self, object, fields):
14- brz_errors.BzrError.__init__(self)
15- self.object = object
16- self.fields = ",".join(fields)
17-
18-
19-class UnknownMercurialCommitExtra(brz_errors.BzrError):
20- _fmt = "Unknown mercurial extra fields in %(object)r: %(fields)r."
21-
22- def __init__(self, object, fields):
23- brz_errors.BzrError.__init__(self)
24- self.object = object
25- self.fields = b",".join(fields)
26
27=== modified file 'breezy/git/fetch.py'
28--- breezy/git/fetch.py 2019-06-29 15:50:22 +0000
29+++ breezy/git/fetch.py 2019-11-03 00:18:07 +0000
30@@ -378,13 +378,13 @@
31
32
33 def import_git_commit(repo, mapping, head, lookup_object,
34- target_git_object_retriever, trees_cache):
35+ target_git_object_retriever, trees_cache, strict):
36 o = lookup_object(head)
37 # Note that this uses mapping.revision_id_foreign_to_bzr. If the parents
38 # were bzr roundtripped revisions they would be specified in the
39 # roundtrip data.
40 rev, roundtrip_revid, verifiers = mapping.import_commit(
41- o, mapping.revision_id_foreign_to_bzr)
42+ o, mapping.revision_id_foreign_to_bzr, strict)
43 if roundtrip_revid is not None:
44 original_revid = rev.revision_id
45 rev.revision_id = roundtrip_revid
46@@ -482,7 +482,7 @@
47 continue
48 if isinstance(o, Commit):
49 rev, roundtrip_revid, verifiers = mapping.import_commit(
50- o, mapping.revision_id_foreign_to_bzr)
51+ o, mapping.revision_id_foreign_to_bzr, strict=True)
52 if (repo.has_revision(rev.revision_id)
53 or (roundtrip_revid and
54 repo.has_revision(roundtrip_revid))):
55@@ -515,7 +515,8 @@
56 pb.update("fetching revisions", offset + i,
57 len(revision_ids))
58 import_git_commit(repo, mapping, head, lookup_object,
59- target_git_object_retriever, trees_cache)
60+ target_git_object_retriever, trees_cache,
61+ strict=True)
62 last_imported = head
63 except BaseException:
64 repo.abort_write_group()
65
66=== modified file 'breezy/git/mapping.py'
67--- breezy/git/mapping.py 2019-06-29 15:50:22 +0000
68+++ breezy/git/mapping.py 2019-11-03 00:18:07 +0000
69@@ -46,8 +46,6 @@
70 )
71 from .errors import (
72 NoPushSupport,
73- UnknownCommitExtra,
74- UnknownMercurialCommitExtra,
75 )
76 from .hg import (
77 format_hg_metadata,
78@@ -73,6 +71,24 @@
79 ROOT_ID = b"TREE_ROOT"
80
81
82+class UnknownCommitExtra(errors.BzrError):
83+ _fmt = "Unknown extra fields in %(object)r: %(fields)r."
84+
85+ def __init__(self, object, fields):
86+ errors.BzrError.__init__(self)
87+ self.object = object
88+ self.fields = ",".join(fields)
89+
90+
91+class UnknownMercurialCommitExtra(errors.BzrError):
92+ _fmt = "Unknown mercurial extra fields in %(object)r: %(fields)r."
93+
94+ def __init__(self, object, fields):
95+ errors.BzrError.__init__(self)
96+ self.object = object
97+ self.fields = b",".join(fields)
98+
99+
100 def escape_file_id(file_id):
101 file_id = file_id.replace(b'_', b'__')
102 file_id = file_id.replace(b' ', b'_s')
103@@ -370,7 +386,7 @@
104 return metadata.revision_id
105 return self.revision_id_foreign_to_bzr(commit.id)
106
107- def import_commit(self, commit, lookup_parent_revid):
108+ def import_commit(self, commit, lookup_parent_revid, strict=True):
109 """Convert a git commit to a bzr revision.
110
111 :return: a `breezy.revision.Revision` object, foreign revid and a
112@@ -444,12 +460,12 @@
113 extra_lines.append(k + b' ' + v + b'\n')
114 elif k == HG_EXTRA:
115 hgk, hgv = v.split(b':', 1)
116- if hgk not in (HG_EXTRA_AMEND_SOURCE, ):
117+ if hgk not in (HG_EXTRA_AMEND_SOURCE, ) and strict:
118 raise UnknownMercurialCommitExtra(commit, [hgk])
119 extra_lines.append(k + b' ' + v + b'\n')
120 else:
121 unknown_extra_fields.append(k)
122- if unknown_extra_fields:
123+ if unknown_extra_fields and strict:
124 raise UnknownCommitExtra(
125 commit,
126 [f.decode('ascii', 'replace') for f in unknown_extra_fields])
127@@ -487,10 +503,10 @@
128 ret += self._generate_git_svn_metadata(rev, encoding)
129 return ret
130
131- def import_commit(self, commit, lookup_parent_revid):
132+ def import_commit(self, commit, lookup_parent_revid, strict=True):
133 rev, roundtrip_revid, verifiers = super(
134 BzrGitMappingExperimental, self).import_commit(
135- commit, lookup_parent_revid)
136+ commit, lookup_parent_revid, strict)
137 rev.properties[u'converted_revision'] = "git %s\n" % commit.id
138 return rev, roundtrip_revid, verifiers
139
140
141=== modified file 'breezy/git/repository.py'
142--- breezy/git/repository.py 2019-06-02 02:35:46 +0000
143+++ breezy/git/repository.py 2019-11-03 00:18:07 +0000
144@@ -539,7 +539,7 @@
145 except KeyError:
146 raise errors.NoSuchRevision(self, revision_id)
147 revision, roundtrip_revid, verifiers = mapping.import_commit(
148- commit, self.lookup_foreign_revision_id)
149+ commit, self.lookup_foreign_revision_id, strict=False)
150 if revision is None:
151 raise AssertionError
152 # FIXME: check verifiers ?
153
154=== modified file 'breezy/git/tests/test_mapping.py'
155--- breezy/git/tests/test_mapping.py 2019-06-02 05:34:26 +0000
156+++ breezy/git/tests/test_mapping.py 2019-11-03 00:18:07 +0000
157@@ -34,15 +34,13 @@
158 )
159
160 from .. import tests
161-from ..errors import (
162- UnknownCommitExtra,
163- UnknownMercurialCommitExtra,
164- )
165 from ..mapping import (
166 BzrGitMappingv1,
167 escape_file_id,
168 fix_person_identifier,
169 unescape_file_id,
170+ UnknownCommitExtra,
171+ UnknownMercurialCommitExtra,
172 )
173
174
175@@ -111,8 +109,8 @@
176 c.author_timezone = 60 * 3
177 c.author = b"Author"
178 mapping = BzrGitMappingv1()
179- rev, roundtrip_revid, verifiers = mapping.import_commit(c,
180- mapping.revision_id_foreign_to_bzr)
181+ rev, roundtrip_revid, verifiers = mapping.import_commit(
182+ c, mapping.revision_id_foreign_to_bzr)
183 self.assertEqual(None, roundtrip_revid)
184 self.assertEqual({}, verifiers)
185 self.assertEqual(u"Some message", rev.message)
186@@ -136,8 +134,8 @@
187 c.author = u"Authér".encode("iso8859-1")
188 c.encoding = b"iso8859-1"
189 mapping = BzrGitMappingv1()
190- rev, roundtrip_revid, verifiers = mapping.import_commit(c,
191- mapping.revision_id_foreign_to_bzr)
192+ rev, roundtrip_revid, verifiers = mapping.import_commit(
193+ c, mapping.revision_id_foreign_to_bzr)
194 self.assertEqual(None, roundtrip_revid)
195 self.assertEqual({}, verifiers)
196 self.assertEqual(u"Authér", rev.properties[u'author'])
197@@ -155,8 +153,8 @@
198 c.author_timezone = 60 * 3
199 c.author = u"Authér".encode("latin1")
200 mapping = BzrGitMappingv1()
201- rev, roundtrip_revid, verifiers = mapping.import_commit(c,
202- mapping.revision_id_foreign_to_bzr)
203+ rev, roundtrip_revid, verifiers = mapping.import_commit(
204+ c, mapping.revision_id_foreign_to_bzr)
205 self.assertEqual(None, roundtrip_revid)
206 self.assertEqual({}, verifiers)
207 self.assertEqual(u"Authér", rev.properties[u'author'])
208@@ -174,8 +172,8 @@
209 c.author_timezone = 60 * 3
210 c.author = u"Authér".encode("utf-8")
211 mapping = BzrGitMappingv1()
212- rev, roundtrip_revid, verifiers = mapping.import_commit(c,
213- mapping.revision_id_foreign_to_bzr)
214+ rev, roundtrip_revid, verifiers = mapping.import_commit(
215+ c, mapping.revision_id_foreign_to_bzr)
216 self.assertEqual(None, roundtrip_revid)
217 self.assertEqual({}, verifiers)
218 self.assertEqual(u"Authér", rev.properties[u'author'])
219@@ -196,6 +194,7 @@
220 mapping = BzrGitMappingv1()
221 self.assertRaises(UnknownCommitExtra, mapping.import_commit, c,
222 mapping.revision_id_foreign_to_bzr)
223+ mapping.import_commit(c, mapping.revision_id_foreign_to_bzr, strict=False)
224
225 def test_mergetag(self):
226 c = Commit()
227@@ -235,6 +234,8 @@
228 self.assertRaises(
229 UnknownMercurialCommitExtra,
230 mapping.import_commit, c, mapping.revision_id_foreign_to_bzr)
231+ mapping.import_commit(
232+ c, mapping.revision_id_foreign_to_bzr, strict=False)
233 self.assertEqual(
234 mapping.revision_id_foreign_to_bzr(c.id),
235 mapping.get_revision_id(c))
236@@ -267,7 +268,7 @@
237 commit = self.mapping.export_commit(orig_rev, b"mysha",
238 self._lookup_parent, True, b"testamentsha")
239 rev, roundtrip_revid, verifiers = self.mapping.import_commit(
240- commit, self.mapping.revision_id_foreign_to_bzr)
241+ commit, self.mapping.revision_id_foreign_to_bzr, strict=True)
242 self.assertEqual(rev.revision_id,
243 self.mapping.revision_id_foreign_to_bzr(commit.id))
244 if self.mapping.roundtripping:
245@@ -338,7 +339,7 @@
246
247 def assertRoundtripCommit(self, commit1):
248 rev, roundtrip_revid, verifiers = self.mapping.import_commit(
249- commit1, self.mapping.revision_id_foreign_to_bzr)
250+ commit1, self.mapping.revision_id_foreign_to_bzr, strict=True)
251 commit2 = self.mapping.export_commit(rev, "12341212121212", None,
252 True, None)
253 self.assertEqual(commit1.committer, commit2.committer)

Subscribers

People subscribed via source and target branches