remote-hg: add compat for hg-git author fixes
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Jeff King <peff@peff.net>
This commit is contained in:
parent
422ab5beb2
commit
9490bd04fe
@ -17,6 +17,7 @@ import os
|
|||||||
import json
|
import json
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import urllib
|
||||||
|
|
||||||
#
|
#
|
||||||
# If you want to switch to hg-git compatibility mode:
|
# If you want to switch to hg-git compatibility mode:
|
||||||
@ -35,6 +36,7 @@ import subprocess
|
|||||||
|
|
||||||
NAME_RE = re.compile('^([^<>]+)')
|
NAME_RE = re.compile('^([^<>]+)')
|
||||||
AUTHOR_RE = re.compile('^([^<>]+?)? ?<([^<>]+)>$')
|
AUTHOR_RE = re.compile('^([^<>]+?)? ?<([^<>]+)>$')
|
||||||
|
AUTHOR_HG_RE = re.compile('^(.*?) ?<(.+?)(?:>(.+)?)?$')
|
||||||
RAW_AUTHOR_RE = re.compile('^(\w+) (?:(.+)? )?<(.+)> (\d+) ([+-]\d+)')
|
RAW_AUTHOR_RE = re.compile('^(\w+) (?:(.+)? )?<(.+)> (\d+) ([+-]\d+)')
|
||||||
|
|
||||||
def die(msg, *args):
|
def die(msg, *args):
|
||||||
@ -152,12 +154,20 @@ class Parser:
|
|||||||
return sys.stdin.read(size)
|
return sys.stdin.read(size)
|
||||||
|
|
||||||
def get_author(self):
|
def get_author(self):
|
||||||
|
global bad_mail
|
||||||
|
|
||||||
|
ex = None
|
||||||
m = RAW_AUTHOR_RE.match(self.line)
|
m = RAW_AUTHOR_RE.match(self.line)
|
||||||
if not m:
|
if not m:
|
||||||
return None
|
return None
|
||||||
_, name, email, date, tz = m.groups()
|
_, name, email, date, tz = m.groups()
|
||||||
|
if name and 'ext:' in name:
|
||||||
|
m = re.match('^(.+?) ext:\((.+)\)$', name)
|
||||||
|
if m:
|
||||||
|
name = m.group(1)
|
||||||
|
ex = urllib.unquote(m.group(2))
|
||||||
|
|
||||||
if email != 'unknown':
|
if email != bad_mail:
|
||||||
if name:
|
if name:
|
||||||
user = '%s <%s>' % (name, email)
|
user = '%s <%s>' % (name, email)
|
||||||
else:
|
else:
|
||||||
@ -165,6 +175,9 @@ class Parser:
|
|||||||
else:
|
else:
|
||||||
user = name
|
user = name
|
||||||
|
|
||||||
|
if ex:
|
||||||
|
user += ex
|
||||||
|
|
||||||
tz = int(tz)
|
tz = int(tz)
|
||||||
tz = ((tz / 100) * 3600) + ((tz % 100) * 60)
|
tz = ((tz / 100) * 3600) + ((tz % 100) * 60)
|
||||||
return (user, int(date), -tz)
|
return (user, int(date), -tz)
|
||||||
@ -194,9 +207,9 @@ def get_filechanges(repo, ctx, parent):
|
|||||||
|
|
||||||
return added | modified, removed
|
return added | modified, removed
|
||||||
|
|
||||||
def fixup_user(user):
|
def fixup_user_git(user):
|
||||||
user = user.replace('"', '')
|
|
||||||
name = mail = None
|
name = mail = None
|
||||||
|
user = user.replace('"', '')
|
||||||
m = AUTHOR_RE.match(user)
|
m = AUTHOR_RE.match(user)
|
||||||
if m:
|
if m:
|
||||||
name = m.group(1)
|
name = m.group(1)
|
||||||
@ -205,11 +218,41 @@ def fixup_user(user):
|
|||||||
m = NAME_RE.match(user)
|
m = NAME_RE.match(user)
|
||||||
if m:
|
if m:
|
||||||
name = m.group(1).strip()
|
name = m.group(1).strip()
|
||||||
|
return (name, mail)
|
||||||
|
|
||||||
|
def fixup_user_hg(user):
|
||||||
|
def sanitize(name):
|
||||||
|
# stole this from hg-git
|
||||||
|
return re.sub('[<>\n]', '?', name.lstrip('< ').rstrip('> '))
|
||||||
|
|
||||||
|
m = AUTHOR_HG_RE.match(user)
|
||||||
|
if m:
|
||||||
|
name = sanitize(m.group(1))
|
||||||
|
mail = sanitize(m.group(2))
|
||||||
|
ex = m.group(3)
|
||||||
|
if ex:
|
||||||
|
name += ' ext:(' + urllib.quote(ex) + ')'
|
||||||
|
else:
|
||||||
|
name = sanitize(user)
|
||||||
|
if '@' in user:
|
||||||
|
mail = name
|
||||||
|
else:
|
||||||
|
mail = None
|
||||||
|
|
||||||
|
return (name, mail)
|
||||||
|
|
||||||
|
def fixup_user(user):
|
||||||
|
global mode, bad_mail
|
||||||
|
|
||||||
|
if mode == 'git':
|
||||||
|
name, mail = fixup_user_git(user)
|
||||||
|
else:
|
||||||
|
name, mail = fixup_user_hg(user)
|
||||||
|
|
||||||
if not name:
|
if not name:
|
||||||
name = 'Unknown'
|
name = bad_name
|
||||||
if not mail:
|
if not mail:
|
||||||
mail = 'unknown'
|
mail = bad_mail
|
||||||
|
|
||||||
return '%s <%s>' % (name, mail)
|
return '%s <%s>' % (name, mail)
|
||||||
|
|
||||||
@ -660,7 +703,7 @@ def do_export(parser):
|
|||||||
def main(args):
|
def main(args):
|
||||||
global prefix, dirname, branches, bmarks
|
global prefix, dirname, branches, bmarks
|
||||||
global marks, blob_marks, parsed_refs
|
global marks, blob_marks, parsed_refs
|
||||||
global peer, mode
|
global peer, mode, bad_mail, bad_name
|
||||||
|
|
||||||
alias = args[1]
|
alias = args[1]
|
||||||
url = args[2]
|
url = args[2]
|
||||||
@ -676,8 +719,12 @@ def main(args):
|
|||||||
|
|
||||||
if hg_git_compat:
|
if hg_git_compat:
|
||||||
mode = 'hg'
|
mode = 'hg'
|
||||||
|
bad_mail = 'none@none'
|
||||||
|
bad_name = ''
|
||||||
else:
|
else:
|
||||||
mode = 'git'
|
mode = 'git'
|
||||||
|
bad_mail = 'unknown'
|
||||||
|
bad_name = 'Unknown'
|
||||||
|
|
||||||
if alias[4:] == url:
|
if alias[4:] == url:
|
||||||
is_tmp = True
|
is_tmp = True
|
||||||
|
Loading…
Reference in New Issue
Block a user