mirror of
https://github.com/facebook/sapling.git
synced 2024-10-13 02:07:31 +03:00
stop dying if extras is malformed
A commit's extras field should be considered user-supplied input that can take any form. Trusting it to be properly formatted is dangerous and can prevent forward progress. Instead, swallow errors due to malformed extras and carry on.
This commit is contained in:
parent
9c40cc4ed3
commit
10a129544d
@ -464,6 +464,11 @@ class GitHandler(object):
|
||||
self.export_hg_commit(ctx.node(), exporter)
|
||||
self.ui.progress('exporting', None, total=total)
|
||||
|
||||
def set_commiter_from_author(self, commit):
|
||||
commit.committer = commit.author
|
||||
commit.commit_time = commit.author_time
|
||||
commit.commit_timezone = commit.author_timezone
|
||||
|
||||
# convert this commit into git objects
|
||||
# go through the manifest, convert all blobs/trees we don't have
|
||||
# write the commit object (with metadata info)
|
||||
@ -489,25 +494,26 @@ class GitHandler(object):
|
||||
commit.author_timezone = -timezone
|
||||
|
||||
if 'committer' in extra:
|
||||
# fixup timezone
|
||||
(name, timestamp, timezone) = extra['committer'].rsplit(' ', 2)
|
||||
commit.committer = name
|
||||
commit.commit_time = timestamp
|
||||
try:
|
||||
# fixup timezone
|
||||
(name, timestamp, timezone) = extra['committer'].rsplit(' ', 2)
|
||||
commit.committer = name
|
||||
commit.commit_time = timestamp
|
||||
|
||||
# work around a timezone format change
|
||||
if int(timezone) % 60 != 0: # pragma: no cover
|
||||
timezone = parse_timezone(timezone)
|
||||
# Newer versions of Dulwich return a tuple here
|
||||
if isinstance(timezone, tuple):
|
||||
timezone, neg_utc = timezone
|
||||
commit._commit_timezone_neg_utc = neg_utc
|
||||
else:
|
||||
timezone = -int(timezone)
|
||||
commit.commit_timezone = timezone
|
||||
# work around a timezone format change
|
||||
if int(timezone) % 60 != 0: # pragma: no cover
|
||||
timezone = parse_timezone(timezone)
|
||||
# Newer versions of Dulwich return a tuple here
|
||||
if isinstance(timezone, tuple):
|
||||
timezone, neg_utc = timezone
|
||||
commit._commit_timezone_neg_utc = neg_utc
|
||||
else:
|
||||
timezone = -int(timezone)
|
||||
commit.commit_timezone = timezone
|
||||
except: # extra is essentially user-supplied, we must be careful
|
||||
self.set_commiter_from_author(commit)
|
||||
else:
|
||||
commit.committer = commit.author
|
||||
commit.commit_time = commit.author_time
|
||||
commit.commit_timezone = commit.author_timezone
|
||||
self.set_commiter_from_author(commit)
|
||||
|
||||
commit.parents = []
|
||||
for parent in self.get_git_parents(ctx):
|
||||
|
Loading…
Reference in New Issue
Block a user