Merge branch 'ls/p4-map-user'

"git p4" now allows P4 author names to be mapped to Git author
names.

* ls/p4-map-user:
  git-p4: map a P4 user to Git author name and email address
This commit is contained in:
Junio C Hamano
2016-04-06 11:39:05 -07:00
3 changed files with 81 additions and 0 deletions

View File

@ -551,6 +551,17 @@ git-p4.keepEmptyCommits::
A changelist that contains only excluded files will be imported A changelist that contains only excluded files will be imported
as an empty commit if this boolean option is set to true. as an empty commit if this boolean option is set to true.
git-p4.mapUser::
Map a P4 user to a name and email address in Git. Use a string
with the following format to create a mapping:
+
-------------
git config --add git-p4.mapUser "p4user = First Last <mail@address.com>"
-------------
+
A mapping will override any user information from P4. Mappings for
multiple P4 user can be defined.
Submit variables Submit variables
~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
git-p4.detectRenames:: git-p4.detectRenames::

View File

@ -1160,6 +1160,15 @@ class P4UserMap:
self.users[output["User"]] = output["FullName"] + " <" + output["Email"] + ">" self.users[output["User"]] = output["FullName"] + " <" + output["Email"] + ">"
self.emails[output["Email"]] = output["User"] self.emails[output["Email"]] = output["User"]
mapUserConfigRegex = re.compile(r"^\s*(\S+)\s*=\s*(.+)\s*<(\S+)>\s*$", re.VERBOSE)
for mapUserConfig in gitConfigList("git-p4.mapUser"):
mapUser = mapUserConfigRegex.findall(mapUserConfig)
if mapUser and len(mapUser[0]) == 3:
user = mapUser[0][0]
fullname = mapUser[0][1]
email = mapUser[0][2]
self.users[user] = fullname + " <" + email + ">"
self.emails[email] = user
s = '' s = ''
for (key, val) in self.users.items(): for (key, val) in self.users.items():

61
t/t9828-git-p4-map-user.sh Executable file
View File

@ -0,0 +1,61 @@
#!/bin/sh
test_description='Clone repositories and map users'
. ./lib-git-p4.sh
test_expect_success 'start p4d' '
start_p4d
'
test_expect_success 'Create a repo with different users' '
client_view "//depot/... //client/..." &&
(
cd "$cli" &&
>author.txt &&
p4 add author.txt &&
p4 submit -d "Add file author\\n" &&
P4USER=mmax &&
>max.txt &&
p4 add max.txt &&
p4 submit -d "Add file max" &&
P4USER=eri &&
>moritz.txt &&
p4 add moritz.txt &&
p4 submit -d "Add file moritz" &&
P4USER=no &&
>nobody.txt &&
p4 add nobody.txt &&
p4 submit -d "Add file nobody"
)
'
test_expect_success 'Clone repo root path with all history' '
client_view "//depot/... //client/..." &&
test_when_finished cleanup_git &&
(
cd "$git" &&
git init . &&
git config --add git-p4.mapUser "mmax = Max Musterman <max@example.com> " &&
git config --add git-p4.mapUser " eri=Erika Musterman <erika@example.com>" &&
git p4 clone --use-client-spec --destination="$git" //depot@all &&
cat >expect <<-\EOF &&
no <no@client>
Erika Musterman <erika@example.com>
Max Musterman <max@example.com>
Dr. author <author@example.com>
EOF
git log --format="%an <%ae>" >actual &&
test_cmp expect actual
)
'
test_expect_success 'kill p4d' '
kill_p4d
'
test_done