D3003: stringutil: improve check for failed mailmap line parsing
sheehan (Connor Sheehan)
phabricator at mercurial-scm.org
Sun Apr 1 01:59:07 UTC 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG0e7550b0964c: stringutil: improve check for failed mailmap line parsing (authored by sheehan, committed by ).
CHANGED PRIOR TO COMMIT
https://phab.mercurial-scm.org/D3003?vs=7479&id=7484#toc
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D3003?vs=7479&id=7484
REVISION DETAIL
https://phab.mercurial-scm.org/D3003
AFFECTED FILES
mercurial/utils/stringutil.py
CHANGE DETAILS
diff --git a/mercurial/utils/stringutil.py b/mercurial/utils/stringutil.py
--- a/mercurial/utils/stringutil.py
+++ b/mercurial/utils/stringutil.py
@@ -166,6 +166,30 @@
email = attr.ib()
name = attr.ib(default=None)
+def _ismailmaplineinvalid(names, emails):
+ '''Returns True if the parsed names and emails
+ in a mailmap entry are invalid.
+
+ >>> # No names or emails fails
+ >>> names, emails = [], []
+ >>> _ismailmaplineinvalid(names, emails)
+ True
+ >>> # Only one email fails
+ >>> emails = [b'email at email.com']
+ >>> _ismailmaplineinvalid(names, emails)
+ True
+ >>> # One email and one name passes
+ >>> names = [b'Test Name']
+ >>> _ismailmaplineinvalid(names, emails)
+ False
+ >>> # No names but two emails passes
+ >>> names = []
+ >>> emails = [b'proper at email.com', b'commit at email.com']
+ >>> _ismailmaplineinvalid(names, emails)
+ False
+ '''
+ return not emails or not names and len(emails) < 2
+
def parsemailmap(mailmapcontent):
"""Parses data in the .mailmap format
@@ -199,7 +223,7 @@
# Don't bother checking the line if it is a comment or
# is an improperly formed author field
- if line.lstrip().startswith('#') or any(c not in line for c in '<>@'):
+ if line.lstrip().startswith('#'):
continue
# names, emails hold the parsed emails and names for each line
@@ -230,6 +254,12 @@
# We have found another word in the committers name
namebuilder.append(element)
+ # Check to see if we have parsed the line into a valid form
+ # We require at least one email, and either at least one
+ # name or a second email
+ if _ismailmaplineinvalid(names, emails):
+ continue
+
mailmapkey = mailmapping(
email=emails[-1],
name=names[-1] if len(names) == 2 else None,
To: sheehan, #hg-reviewers, yuja
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list