threads / patch / 41559

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

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

## tl;dr

6 messages between Feb 28, 2016 and Feb 29, 2016. Diffs are folded; open one to read it.

replies: 5people: 4as markdown or json

larsxschneider@gmail.com· Feb 28, 2016, 10:25 UTC · lore
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>
---
 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
Show changes to 3 files +81 −0

Documentation/git-p4.txt, git-p4.py, 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
Eric Sunshine· Feb 28, 2016, 16:19 UTC · re: larsxschneider@gmail.com · lore

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

On Sun, Feb 28, 2016 at 5:25 AM,  <larsxschneider@gmail.com> 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 <email@address.com>".

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 <user@example.com>
More below...
Show 14 quoted lines
> Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
> ---
> 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.)

Show 20 quoted lines
> 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
...
Show 33 quoted lines
> +               >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
Lars Schneider· Feb 28, 2016, 17:05 UTC · re: Eric Sunshine · lore

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

On 28 Feb 2016, at 17:19, Eric Sunshine <sunshine@sunshineco.com> wrote:
Show 12 quoted lines
> On Sun, Feb 28, 2016 at 5:25 AM,  <larsxschneider@gmail.com> 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 <email@address.com>".
> 
> 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 <user@example.com>

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.

Show 20 quoted lines
> 
> More below...
> 
>> Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
>> ---
>> 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?

Show 23 quoted lines
> 
>> 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

Eric Sunshine· Feb 29, 2016, 03:53 UTC · re: Lars Schneider · lore

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

On Sun, Feb 28, 2016 at 12:05 PM, Lars Schneider <larsxschneider@gmail.com> wrote:

Show 17 quoted lines
> On 28 Feb 2016, at 17:19, Eric Sunshine <sunshine@sunshineco.com> wrote:
>> On Sun, Feb 28, 2016 at 5:25 AM,  <larsxschneider@gmail.com> wrote:
>>> +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?

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.

Luke Diamand· Feb 29, 2016, 05:12 UTC · re: larsxschneider@gmail.com · lore

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

On 28 February 2016 at 10:25,  <larsxschneider@gmail.com> wrote:
Show 5 quoted lines
> 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>".

Seems generally fine. I agree with Eric's comments about the "->" format. One comment below:

Show 8 quoted lines
> +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>" &&

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
Torsten Bögershausen· Feb 29, 2016, 05:31 UTC · re: Luke Diamand · lore

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

+       (
+               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>" &&
Show 5 quoted lines
> 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 <max@example.com> Erika Musterman <erika@example.com>

← back to recent threads