git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] git-p4: map a P4 user to Git author name and email address
@ 2016-03-01 10:49 larsxschneider
  2016-03-01 10:57 ` Lars Schneider
  2016-03-01 19:15 ` Eric Sunshine
  0 siblings, 2 replies; 9+ messages in thread
From: larsxschneider @ 2016-03-01 10:49 UTC (permalink / raw)
  To: git; +Cc: sunshine, luke, tboegi, Lars Schneider, Lars Schneider

From: Lars Schneider <lars.schneider@autodesk.com>

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>
---

diff to v1:

* use '=' instead of '->' to mimic SVN user mapping format (thanks Eric)
* fix ASCII doc formatting (thanks Eric)
* fix broken && chain in test (thanks Eric)
* use more innocuous names for test users (thanks Luke and Torsten)
* make regex accept more blank characters

Cheers,
Lars


 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..9f077fd 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..bac341d 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*<(\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..e20395c
--- /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=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
--
2.5.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2016-03-15 18:37 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-01 10:49 [PATCH v2] git-p4: map a P4 user to Git author name and email address larsxschneider
2016-03-01 10:57 ` Lars Schneider
2016-03-01 19:15 ` Eric Sunshine
2016-03-02  5:06   ` Luke Diamand
2016-03-02  9:25     ` Lars Schneider
2016-03-13 17:41       ` Lars Schneider
2016-03-15  7:19         ` Luke Diamand
2016-03-15 16:52           ` Junio C Hamano
2016-03-15 18:37             ` Luke Diamand

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).