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
=== modified file 'breezy/git/errors.py'
--- breezy/git/errors.py 2019-01-13 14:16:35 +0000
+++ breezy/git/errors.py 2019-11-03 00:18:07 +0000
@@ -61,21 +61,3 @@
6161
62class GitSmartRemoteNotSupported(brz_errors.UnsupportedOperation):62class GitSmartRemoteNotSupported(brz_errors.UnsupportedOperation):
63 _fmt = "This operation is not supported by the Git smart server protocol."63 _fmt = "This operation is not supported by the Git smart server protocol."
64
65
66class UnknownCommitExtra(brz_errors.BzrError):
67 _fmt = "Unknown extra fields in %(object)r: %(fields)r."
68
69 def __init__(self, object, fields):
70 brz_errors.BzrError.__init__(self)
71 self.object = object
72 self.fields = ",".join(fields)
73
74
75class UnknownMercurialCommitExtra(brz_errors.BzrError):
76 _fmt = "Unknown mercurial extra fields in %(object)r: %(fields)r."
77
78 def __init__(self, object, fields):
79 brz_errors.BzrError.__init__(self)
80 self.object = object
81 self.fields = b",".join(fields)
8264
=== modified file 'breezy/git/fetch.py'
--- breezy/git/fetch.py 2019-06-29 15:50:22 +0000
+++ breezy/git/fetch.py 2019-11-03 00:18:07 +0000
@@ -378,13 +378,13 @@
378378
379379
380def import_git_commit(repo, mapping, head, lookup_object,380def import_git_commit(repo, mapping, head, lookup_object,
381 target_git_object_retriever, trees_cache):381 target_git_object_retriever, trees_cache, strict):
382 o = lookup_object(head)382 o = lookup_object(head)
383 # Note that this uses mapping.revision_id_foreign_to_bzr. If the parents383 # Note that this uses mapping.revision_id_foreign_to_bzr. If the parents
384 # were bzr roundtripped revisions they would be specified in the384 # were bzr roundtripped revisions they would be specified in the
385 # roundtrip data.385 # roundtrip data.
386 rev, roundtrip_revid, verifiers = mapping.import_commit(386 rev, roundtrip_revid, verifiers = mapping.import_commit(
387 o, mapping.revision_id_foreign_to_bzr)387 o, mapping.revision_id_foreign_to_bzr, strict)
388 if roundtrip_revid is not None:388 if roundtrip_revid is not None:
389 original_revid = rev.revision_id389 original_revid = rev.revision_id
390 rev.revision_id = roundtrip_revid390 rev.revision_id = roundtrip_revid
@@ -482,7 +482,7 @@
482 continue482 continue
483 if isinstance(o, Commit):483 if isinstance(o, Commit):
484 rev, roundtrip_revid, verifiers = mapping.import_commit(484 rev, roundtrip_revid, verifiers = mapping.import_commit(
485 o, mapping.revision_id_foreign_to_bzr)485 o, mapping.revision_id_foreign_to_bzr, strict=True)
486 if (repo.has_revision(rev.revision_id)486 if (repo.has_revision(rev.revision_id)
487 or (roundtrip_revid and487 or (roundtrip_revid and
488 repo.has_revision(roundtrip_revid))):488 repo.has_revision(roundtrip_revid))):
@@ -515,7 +515,8 @@
515 pb.update("fetching revisions", offset + i,515 pb.update("fetching revisions", offset + i,
516 len(revision_ids))516 len(revision_ids))
517 import_git_commit(repo, mapping, head, lookup_object,517 import_git_commit(repo, mapping, head, lookup_object,
518 target_git_object_retriever, trees_cache)518 target_git_object_retriever, trees_cache,
519 strict=True)
519 last_imported = head520 last_imported = head
520 except BaseException:521 except BaseException:
521 repo.abort_write_group()522 repo.abort_write_group()
522523
=== modified file 'breezy/git/mapping.py'
--- breezy/git/mapping.py 2019-06-29 15:50:22 +0000
+++ breezy/git/mapping.py 2019-11-03 00:18:07 +0000
@@ -46,8 +46,6 @@
46 )46 )
47from .errors import (47from .errors import (
48 NoPushSupport,48 NoPushSupport,
49 UnknownCommitExtra,
50 UnknownMercurialCommitExtra,
51 )49 )
52from .hg import (50from .hg import (
53 format_hg_metadata,51 format_hg_metadata,
@@ -73,6 +71,24 @@
73ROOT_ID = b"TREE_ROOT"71ROOT_ID = b"TREE_ROOT"
7472
7573
74class UnknownCommitExtra(errors.BzrError):
75 _fmt = "Unknown extra fields in %(object)r: %(fields)r."
76
77 def __init__(self, object, fields):
78 errors.BzrError.__init__(self)
79 self.object = object
80 self.fields = ",".join(fields)
81
82
83class UnknownMercurialCommitExtra(errors.BzrError):
84 _fmt = "Unknown mercurial extra fields in %(object)r: %(fields)r."
85
86 def __init__(self, object, fields):
87 errors.BzrError.__init__(self)
88 self.object = object
89 self.fields = b",".join(fields)
90
91
76def escape_file_id(file_id):92def escape_file_id(file_id):
77 file_id = file_id.replace(b'_', b'__')93 file_id = file_id.replace(b'_', b'__')
78 file_id = file_id.replace(b' ', b'_s')94 file_id = file_id.replace(b' ', b'_s')
@@ -370,7 +386,7 @@
370 return metadata.revision_id386 return metadata.revision_id
371 return self.revision_id_foreign_to_bzr(commit.id)387 return self.revision_id_foreign_to_bzr(commit.id)
372388
373 def import_commit(self, commit, lookup_parent_revid):389 def import_commit(self, commit, lookup_parent_revid, strict=True):
374 """Convert a git commit to a bzr revision.390 """Convert a git commit to a bzr revision.
375391
376 :return: a `breezy.revision.Revision` object, foreign revid and a392 :return: a `breezy.revision.Revision` object, foreign revid and a
@@ -444,12 +460,12 @@
444 extra_lines.append(k + b' ' + v + b'\n')460 extra_lines.append(k + b' ' + v + b'\n')
445 elif k == HG_EXTRA:461 elif k == HG_EXTRA:
446 hgk, hgv = v.split(b':', 1)462 hgk, hgv = v.split(b':', 1)
447 if hgk not in (HG_EXTRA_AMEND_SOURCE, ):463 if hgk not in (HG_EXTRA_AMEND_SOURCE, ) and strict:
448 raise UnknownMercurialCommitExtra(commit, [hgk])464 raise UnknownMercurialCommitExtra(commit, [hgk])
449 extra_lines.append(k + b' ' + v + b'\n')465 extra_lines.append(k + b' ' + v + b'\n')
450 else:466 else:
451 unknown_extra_fields.append(k)467 unknown_extra_fields.append(k)
452 if unknown_extra_fields:468 if unknown_extra_fields and strict:
453 raise UnknownCommitExtra(469 raise UnknownCommitExtra(
454 commit,470 commit,
455 [f.decode('ascii', 'replace') for f in unknown_extra_fields])471 [f.decode('ascii', 'replace') for f in unknown_extra_fields])
@@ -487,10 +503,10 @@
487 ret += self._generate_git_svn_metadata(rev, encoding)503 ret += self._generate_git_svn_metadata(rev, encoding)
488 return ret504 return ret
489505
490 def import_commit(self, commit, lookup_parent_revid):506 def import_commit(self, commit, lookup_parent_revid, strict=True):
491 rev, roundtrip_revid, verifiers = super(507 rev, roundtrip_revid, verifiers = super(
492 BzrGitMappingExperimental, self).import_commit(508 BzrGitMappingExperimental, self).import_commit(
493 commit, lookup_parent_revid)509 commit, lookup_parent_revid, strict)
494 rev.properties[u'converted_revision'] = "git %s\n" % commit.id510 rev.properties[u'converted_revision'] = "git %s\n" % commit.id
495 return rev, roundtrip_revid, verifiers511 return rev, roundtrip_revid, verifiers
496512
497513
=== modified file 'breezy/git/repository.py'
--- breezy/git/repository.py 2019-06-02 02:35:46 +0000
+++ breezy/git/repository.py 2019-11-03 00:18:07 +0000
@@ -539,7 +539,7 @@
539 except KeyError:539 except KeyError:
540 raise errors.NoSuchRevision(self, revision_id)540 raise errors.NoSuchRevision(self, revision_id)
541 revision, roundtrip_revid, verifiers = mapping.import_commit(541 revision, roundtrip_revid, verifiers = mapping.import_commit(
542 commit, self.lookup_foreign_revision_id)542 commit, self.lookup_foreign_revision_id, strict=False)
543 if revision is None:543 if revision is None:
544 raise AssertionError544 raise AssertionError
545 # FIXME: check verifiers ?545 # FIXME: check verifiers ?
546546
=== modified file 'breezy/git/tests/test_mapping.py'
--- breezy/git/tests/test_mapping.py 2019-06-02 05:34:26 +0000
+++ breezy/git/tests/test_mapping.py 2019-11-03 00:18:07 +0000
@@ -34,15 +34,13 @@
34 )34 )
3535
36from .. import tests36from .. import tests
37from ..errors import (
38 UnknownCommitExtra,
39 UnknownMercurialCommitExtra,
40 )
41from ..mapping import (37from ..mapping import (
42 BzrGitMappingv1,38 BzrGitMappingv1,
43 escape_file_id,39 escape_file_id,
44 fix_person_identifier,40 fix_person_identifier,
45 unescape_file_id,41 unescape_file_id,
42 UnknownCommitExtra,
43 UnknownMercurialCommitExtra,
46 )44 )
4745
4846
@@ -111,8 +109,8 @@
111 c.author_timezone = 60 * 3109 c.author_timezone = 60 * 3
112 c.author = b"Author"110 c.author = b"Author"
113 mapping = BzrGitMappingv1()111 mapping = BzrGitMappingv1()
114 rev, roundtrip_revid, verifiers = mapping.import_commit(c,112 rev, roundtrip_revid, verifiers = mapping.import_commit(
115 mapping.revision_id_foreign_to_bzr)113 c, mapping.revision_id_foreign_to_bzr)
116 self.assertEqual(None, roundtrip_revid)114 self.assertEqual(None, roundtrip_revid)
117 self.assertEqual({}, verifiers)115 self.assertEqual({}, verifiers)
118 self.assertEqual(u"Some message", rev.message)116 self.assertEqual(u"Some message", rev.message)
@@ -136,8 +134,8 @@
136 c.author = u"Authér".encode("iso8859-1")134 c.author = u"Authér".encode("iso8859-1")
137 c.encoding = b"iso8859-1"135 c.encoding = b"iso8859-1"
138 mapping = BzrGitMappingv1()136 mapping = BzrGitMappingv1()
139 rev, roundtrip_revid, verifiers = mapping.import_commit(c,137 rev, roundtrip_revid, verifiers = mapping.import_commit(
140 mapping.revision_id_foreign_to_bzr)138 c, mapping.revision_id_foreign_to_bzr)
141 self.assertEqual(None, roundtrip_revid)139 self.assertEqual(None, roundtrip_revid)
142 self.assertEqual({}, verifiers)140 self.assertEqual({}, verifiers)
143 self.assertEqual(u"Authér", rev.properties[u'author'])141 self.assertEqual(u"Authér", rev.properties[u'author'])
@@ -155,8 +153,8 @@
155 c.author_timezone = 60 * 3153 c.author_timezone = 60 * 3
156 c.author = u"Authér".encode("latin1")154 c.author = u"Authér".encode("latin1")
157 mapping = BzrGitMappingv1()155 mapping = BzrGitMappingv1()
158 rev, roundtrip_revid, verifiers = mapping.import_commit(c,156 rev, roundtrip_revid, verifiers = mapping.import_commit(
159 mapping.revision_id_foreign_to_bzr)157 c, mapping.revision_id_foreign_to_bzr)
160 self.assertEqual(None, roundtrip_revid)158 self.assertEqual(None, roundtrip_revid)
161 self.assertEqual({}, verifiers)159 self.assertEqual({}, verifiers)
162 self.assertEqual(u"Authér", rev.properties[u'author'])160 self.assertEqual(u"Authér", rev.properties[u'author'])
@@ -174,8 +172,8 @@
174 c.author_timezone = 60 * 3172 c.author_timezone = 60 * 3
175 c.author = u"Authér".encode("utf-8")173 c.author = u"Authér".encode("utf-8")
176 mapping = BzrGitMappingv1()174 mapping = BzrGitMappingv1()
177 rev, roundtrip_revid, verifiers = mapping.import_commit(c,175 rev, roundtrip_revid, verifiers = mapping.import_commit(
178 mapping.revision_id_foreign_to_bzr)176 c, mapping.revision_id_foreign_to_bzr)
179 self.assertEqual(None, roundtrip_revid)177 self.assertEqual(None, roundtrip_revid)
180 self.assertEqual({}, verifiers)178 self.assertEqual({}, verifiers)
181 self.assertEqual(u"Authér", rev.properties[u'author'])179 self.assertEqual(u"Authér", rev.properties[u'author'])
@@ -196,6 +194,7 @@
196 mapping = BzrGitMappingv1()194 mapping = BzrGitMappingv1()
197 self.assertRaises(UnknownCommitExtra, mapping.import_commit, c,195 self.assertRaises(UnknownCommitExtra, mapping.import_commit, c,
198 mapping.revision_id_foreign_to_bzr)196 mapping.revision_id_foreign_to_bzr)
197 mapping.import_commit(c, mapping.revision_id_foreign_to_bzr, strict=False)
199198
200 def test_mergetag(self):199 def test_mergetag(self):
201 c = Commit()200 c = Commit()
@@ -235,6 +234,8 @@
235 self.assertRaises(234 self.assertRaises(
236 UnknownMercurialCommitExtra,235 UnknownMercurialCommitExtra,
237 mapping.import_commit, c, mapping.revision_id_foreign_to_bzr)236 mapping.import_commit, c, mapping.revision_id_foreign_to_bzr)
237 mapping.import_commit(
238 c, mapping.revision_id_foreign_to_bzr, strict=False)
238 self.assertEqual(239 self.assertEqual(
239 mapping.revision_id_foreign_to_bzr(c.id),240 mapping.revision_id_foreign_to_bzr(c.id),
240 mapping.get_revision_id(c))241 mapping.get_revision_id(c))
@@ -267,7 +268,7 @@
267 commit = self.mapping.export_commit(orig_rev, b"mysha",268 commit = self.mapping.export_commit(orig_rev, b"mysha",
268 self._lookup_parent, True, b"testamentsha")269 self._lookup_parent, True, b"testamentsha")
269 rev, roundtrip_revid, verifiers = self.mapping.import_commit(270 rev, roundtrip_revid, verifiers = self.mapping.import_commit(
270 commit, self.mapping.revision_id_foreign_to_bzr)271 commit, self.mapping.revision_id_foreign_to_bzr, strict=True)
271 self.assertEqual(rev.revision_id,272 self.assertEqual(rev.revision_id,
272 self.mapping.revision_id_foreign_to_bzr(commit.id))273 self.mapping.revision_id_foreign_to_bzr(commit.id))
273 if self.mapping.roundtripping:274 if self.mapping.roundtripping:
@@ -338,7 +339,7 @@
338339
339 def assertRoundtripCommit(self, commit1):340 def assertRoundtripCommit(self, commit1):
340 rev, roundtrip_revid, verifiers = self.mapping.import_commit(341 rev, roundtrip_revid, verifiers = self.mapping.import_commit(
341 commit1, self.mapping.revision_id_foreign_to_bzr)342 commit1, self.mapping.revision_id_foreign_to_bzr, strict=True)
342 commit2 = self.mapping.export_commit(rev, "12341212121212", None,343 commit2 = self.mapping.export_commit(rev, "12341212121212", None,
343 True, None)344 True, None)
344 self.assertEqual(commit1.committer, commit2.committer)345 self.assertEqual(commit1.committer, commit2.committer)

Subscribers

People subscribed via source and target branches