Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Junio C Hamano committed Apr 6, 2016
2 parents 5e533f8 + 10d08a1 commit 1d851b9
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 0 deletions.
11 changes: 11 additions & 0 deletions Documentation/git-p4.txt
Expand Up @@ -551,6 +551,17 @@ git-p4.keepEmptyCommits::
A changelist that contains only excluded files will be imported
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
~~~~~~~~~~~~~~~~
git-p4.detectRenames::
Expand Down
9 changes: 9 additions & 0 deletions git-p4.py
Expand Up @@ -1160,6 +1160,15 @@ def getUserMapFromPerforceServer(self):
self.users[output["User"]] = output["FullName"] + " <" + output["Email"] + ">"
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 = ''
for (key, val) in self.users.items():
Expand Down
61 changes: 61 additions & 0 deletions t/t9828-git-p4-map-user.sh
@@ -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

0 comments on commit 1d851b9

Please sign in to comment.