[PATCH v1] git-p4: map a P4 user to Git author name and email address

Subsystems: documentation, the rest

STALE3742d

6 messages, 4 authors, 2016-06-15 · open the first message on its own page

[PATCH v1] git-p4: map a P4 user to Git author name and email address

From: <hidden>
Date: 2016-06-15 23:08:31

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

Re: [PATCH v1] git-p4: map a P4 user to Git author name and email address

From: Eric Sunshine <hidden>
Date: 2016-06-15 23:08:32

On Sun, Feb 28, 2016 at 5:25 AM,  [off-list ref] wrote:
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]".
With the caveat that I'm not a Perforce user, is this arrow "->"
thingy common in the Perforce world, or was it invented with this
patch? If it was invented here, then would it make sense to instead
use a more established format, such as the "authors" mapping file from
git-svn?

    p4user = Joe User [off-list ref]

More below...
quoted hunk
Signed-off-by: Lars Schneider <redacted>
---
diff --git a/Documentation/git-p4.txt b/Documentation/git-p4.txt
@@ -553,6 +553,17 @@ git-p4.keepEmptyCommits::
+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.
Does this format correctly with Asciidoc, or does the pargraph need to
be left-justified? (I haven't tested it myself.)
quoted hunk
diff --git a/t/t9828-git-p4-map-user.sh 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"
Broken &&-chain.
+               P4USER=mmax
Ditto.
+               >max.txt &&
+               p4 add max.txt &&
+               p4 submit -d "Add file max"
Ditto.
+               P4USER=mo
Ditto.
+               >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 [off-list ref]"  &&
+               git config --add git-p4.mapUser "mo -> Moritz Untreu [off-list ref]" &&
+               git p4 clone --use-client-spec --destination="$git" //depot@all &&
+               cat >expect <<-\EOF &&
+                       no <no@client>
+                       Moritz Untreu [off-list ref]
+                       Max Mustermann [off-list ref]
+                       Dr. author [off-list ref]
+               EOF
+               git log --format="%an <%ae>" >actual &&
+               test_cmp expect actual
+       )
+'
+
+test_expect_success 'kill p4d' '
+       kill_p4d
+'
+
+test_done
--
2.5.1

Re: [PATCH v1] git-p4: map a P4 user to Git author name and email address

From: Lars Schneider <hidden>
Date: 2016-06-15 23:08:32

On 28 Feb 2016, at 17:19, Eric Sunshine [off-list ref] wrote:
On Sun, Feb 28, 2016 at 5:25 AM,  [off-list ref] wrote:
quoted
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]".
With the caveat that I'm not a Perforce user, is this arrow "->"
thingy common in the Perforce world, or was it invented with this
patch? If it was invented here, then would it make sense to instead
use a more established format, such as the "authors" mapping file from
git-svn?

   p4user = Joe User [off-list ref]
I invented "the arrow" here :-)
I didn't know about the SVN format and I agree it makes sense to reuse
an established format. I will fix this in a reroll.

More below...
quoted
Signed-off-by: Lars Schneider <redacted>
---
diff --git a/Documentation/git-p4.txt b/Documentation/git-p4.txt
@@ -553,6 +553,17 @@ git-p4.keepEmptyCommits::
+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.
Does this format correctly with Asciidoc, or does the pargraph need to
be left-justified? (I haven't tested it myself.)
I am not exactly sure what you mean. The last paragraph is already left
justified, no? Do you know a good tutorial for Asciidoc? How can I/should
I check these things?

quoted
diff --git a/t/t9828-git-p4-map-user.sh 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"
Broken &&-chain.
Oh. You're right. Will fix!

Thanks for the review,
Lars

Re: [PATCH v1] git-p4: map a P4 user to Git author name and email address

From: Eric Sunshine <hidden>
Date: 2016-06-15 23:08:32

On Sun, Feb 28, 2016 at 12:05 PM, Lars Schneider
[off-list ref] wrote:
On 28 Feb 2016, at 17:19, Eric Sunshine [off-list ref] wrote:
quoted
On Sun, Feb 28, 2016 at 5:25 AM,  [off-list ref] wrote:
quoted
+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 [off-list ref]"
+-------------
++
+       A mapping will override any user information from P4. Mappings for
+       multiple P4 user can be defined.
Does this format correctly with Asciidoc, or does the pargraph need to
be left-justified? (I haven't tested it myself.)
I am not exactly sure what you mean. The last paragraph is already left
justified, no?
Sorry, I meant "does it need to be flush against the left margin (that
is column 0)?" Just picking a file at random, (say
Documentation/blame-options.txt), you see quickly that while the first
paragraph of an entry is indented, subsequent paragraphs belonging to
that entry are not.
Do you know a good tutorial for Asciidoc? How can I/should
I check these things?
I haven't looked at tutorial; I've merely consult the Asciidoc
documentation when needed. Assuming you have the Asciidoc toolchain
installed, the easiest way to check if it formats correctly is to run
"make html" and then look at the built Documentation/git-p4.html in a
browser.

Re: [PATCH v1] git-p4: map a P4 user to Git author name and email address

From: Luke Diamand <hidden>
Date: 2016-06-15 23:08:32

On 28 February 2016 at 10:25,  [off-list ref] wrote:
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]".
Seems generally fine. I agree with Eric's comments about the "->"
format. One comment below:
+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 [off-list ref]"  &&
+               git config --add git-p4.mapUser "mo -> Moritz Untreu [off-list ref]" &&
Probably better to use more innocuous names. I'm not sure who these
people are, but they might not appreciate being recorded forver in a
git-p4 test script.

Luke

Re: [PATCH v1] git-p4: map a P4 user to Git author name and email address

From: Torsten Bögershausen <hidden>
Date: 2016-06-15 23:08:32

+       (
+               cd "$git" &&
+               git init . &&
+               git config --add git-p4.mapUser "mmax -> Max Mustermann [off-list ref]"  &&
+               git config --add git-p4.mapUser "mo -> Moritz Untreu [off-list ref]" &&
Probably better to use more innocuous names. I'm not sure who these
people are, but they might not appreciate being recorded forver in a
git-p4 test script.
A better name could be
Max Musterman [off-list ref]
Erika Musterman [off-list ref]
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help