[PATCH v1] git-p4: map a P4 user to Git author name and email address
From: <hidden>
Date: 2016-06-15 23:08:31
Subsystem:
documentation, the rest · Maintainers:
Jonathan Corbet, Linus Torvalds
From: Lars Schneider <redacted> 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 [off-list ref]". Signed-off-by: Lars Schneider <redacted> --- Documentation/git-p4.txt | 11 +++++++++ git-p4.py | 9 +++++++ t/t9828-git-p4-map-user.sh | 61 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100755 t/t9828-git-p4-map-user.sh
diff --git a/Documentation/git-p4.txt b/Documentation/git-p4.txt
index 738cfde..b453e79 100644
--- a/Documentation/git-p4.txt
+++ b/Documentation/git-p4.txt@@ -553,6 +553,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::
diff --git a/git-p4.py b/git-p4.py
index c33dece..97e4334 100755
--- a/git-p4.py
+++ b/git-p4.py@@ -1160,6 +1160,15 @@ class P4UserMap: self.users[output["User"]] = output["FullName"] + " <" + output["Email"] + ">" self.emails[output["Email"]] = output["User"] + mapUserConfigRegex = re.compile(r"^(\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():
diff --git a/t/t9828-git-p4-map-user.sh b/t/t9828-git-p4-map-user.sh
new file mode 100755
index 0000000..daf2567
--- /dev/null
+++ b/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=mo + >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 Mustermann <max@muster.com>" && + git config --add git-p4.mapUser "mo -> Moritz Untreu <moritz@untreu.com>" && + git p4 clone --use-client-spec --destination="$git" //depot@all && + cat >expect <<-\EOF && + no <no@client> + Moritz Untreu <moritz@untreu.com> + Max Mustermann <max@muster.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
--
2.5.1