blob: 9e81195aaeadf077beb807bf53abdafadc8a007c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# Fudge committer and author ids that git fast-import considers invalid
# Copyright 2020 Codethink Ltd
import re
import sys
from mercurial import templatefilters
def build_filter(args):
return Filter(args)
class Filter:
# What git considers valid (see parse_ident() in fast-import.c)
_valid_id_re = re.compile(rb'^[^<>]* <[^<>]+>$')
# Special characters we may need to replace
_id_special_re = re.compile(rb'[<>]')
def __init__(self, args):
pass
def commit_message_filter(self, commit_data):
for key in ['author', 'committer']:
try:
user_id = commit_data[key]
except KeyError:
continue
if self._valid_id_re.match(user_id):
continue
name = templatefilters.person(user_id)
email = templatefilters.email(user_id)
# Replace any special characters left in the name and email
name = self._id_special_re.sub(b'?', name)
email = self._id_special_re.sub(b'?', email)
commit_data[key] = b'%s <%s>' % (name, email)
sys.stderr.write(
'Replaced %s id "%s" with "%s"\n'
% (key,
user_id.decode('utf-8', errors='replace'),
commit_data[key].decode('utf-8', errors='replace')))
|