1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-06-01 19:26:10 +02:00

git-p4: map a P4 user to Git author name and email address

Map a P4 user to a specific name and email address in Git with the
"git-p4.mapUser" config. The config value must be a string adhering
to the format "p4user = First Lastname <email@address.com>".

Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
Reviewed-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Lars Schneider 2016-03-01 11:49:56 +01:00 committed by Junio C Hamano
parent 594730e980
commit 10d08a149d
3 changed files with 81 additions and 0 deletions

View File

@ -553,6 +553,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 @@ def getUserMapFromPerforceServer(self):
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