Merge lp:~jelmer/brz/lookup-error into lp:brz

Proposed by Jelmer Vernooij
Status: Merged
Approved by: Jelmer Vernooij
Approved revision: 7615
Merge reported by: The Breezy Bot
Merged at revision: not available
Proposed branch: lp:~jelmer/brz/lookup-error
Merge into: lp:brz
Diff against target: 95 lines (+41/-5)
2 files modified
breezy/git/mapping.py (+23/-5)
breezy/git/tests/test_mapping.py (+18/-0)
To merge this branch: bzr merge lp:~jelmer/brz/lookup-error
Reviewer Review Type Date Requested Status
Jelmer Vernooij Approve
Review via email: mp+428975@code.launchpad.net

Commit message

Raise custom error for unknown encodings in Git commits.

Description of the change

Raise custom error for unknown encodings in Git commits.

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/mapping.py'
2--- breezy/git/mapping.py 2022-05-15 21:32:05 +0000
3+++ breezy/git/mapping.py 2022-08-26 09:17:46 +0000
4@@ -89,6 +89,14 @@
5 self.fields = b",".join(fields)
6
7
8+class UnknownCommitEncoding(errors.BzrError):
9+ _fmt = "Unknown commit encoding: %(encoding)s"
10+
11+ def __init__(self, encoding):
12+ errors.BzrError.__init__(self)
13+ self.encoding = encoding
14+
15+
16 def escape_file_id(file_id):
17 file_id = file_id.replace(b'_', b'__')
18 file_id = file_id.replace(b' ', b'_s')
19@@ -409,9 +417,15 @@
20 rev.git_metadata = None
21
22 def decode_using_encoding(rev, commit, encoding):
23- rev.committer = commit.committer.decode(encoding)
24- if commit.committer != commit.author:
25- rev.properties[u'author'] = commit.author.decode(encoding)
26+ try:
27+ rev.committer = commit.committer.decode(encoding)
28+ except LookupError:
29+ raise UnknownCommitEncoding(encoding)
30+ try:
31+ if commit.committer != commit.author:
32+ rev.properties[u'author'] = commit.author.decode(encoding)
33+ except LookupError:
34+ raise UnknownCommitEncoding(encoding)
35 rev.message, rev.git_metadata = self._decode_commit_message(
36 rev, commit.message, encoding)
37
38@@ -443,7 +457,8 @@
39 'utf-8', 'surrogateescape')
40 if commit.mergetag:
41 for i, tag in enumerate(commit.mergetag):
42- rev.properties[u'git-mergetag-%d' % i] = tag.as_raw_string().decode('utf-8', 'surrogateescape')
43+ rev.properties[u'git-mergetag-%d' % i] = tag.as_raw_string().decode(
44+ 'utf-8', 'surrogateescape')
45 rev.timestamp = commit.commit_time
46 rev.timezone = commit.commit_timezone
47 rev.parent_ids = None
48@@ -514,7 +529,10 @@
49 message = self._extract_hg_metadata(rev, message)
50 message = self._extract_git_svn_metadata(rev, message)
51 message, metadata = self._extract_bzr_metadata(rev, message)
52- return message.decode(encoding), metadata
53+ try:
54+ return message.decode(encoding), metadata
55+ except LookupError:
56+ raise UnknownCommitEncoding(encoding)
57
58 def _encode_commit_message(self, rev, message, encoding):
59 ret = message.encode(encoding)
60
61=== modified file 'breezy/git/tests/test_mapping.py'
62--- breezy/git/tests/test_mapping.py 2022-07-04 08:43:18 +0000
63+++ breezy/git/tests/test_mapping.py 2022-08-26 09:17:46 +0000
64@@ -38,6 +38,7 @@
65 fix_person_identifier,
66 unescape_file_id,
67 UnknownCommitExtra,
68+ UnknownCommitEncoding,
69 UnknownMercurialCommitExtra,
70 )
71
72@@ -120,6 +121,23 @@
73 self.assertEqual("180", rev.properties[u'author-timezone'])
74 self.assertEqual(b"git-v1:" + c.id, rev.revision_id)
75
76+ def test_unknown_encoding(self):
77+ c = Commit()
78+ c.tree = b"cc9462f7f8263ef5adfbeff2fb936bb36b504cba"
79+ c.message = b"Some message"
80+ c.committer = b"Committer"
81+ c.commit_time = 4
82+ c.author_time = 5
83+ c.commit_timezone = 60 * 5
84+ c.author_timezone = 60 * 3
85+ c.author = u"Authér".encode("iso8859-1")
86+ c.encoding = b"Unknown"
87+ mapping = BzrGitMappingv1()
88+ e = self.assertRaises(
89+ UnknownCommitEncoding, mapping.import_commit,
90+ c, mapping.revision_id_foreign_to_bzr)
91+ self.assertEquals(e.encoding, "Unknown")
92+
93 def test_explicit_encoding(self):
94 c = Commit()
95 c.tree = b"cc9462f7f8263ef5adfbeff2fb936bb36b504cba"

Subscribers

People subscribed via source and target branches