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

6 messages from 2016-02-28 to 2016-02-29. Participants: larsxschneider@gmail.com, Eric Sunshine, Lars Schneider, Luke Diamand, Torsten Bögershausen.
Thread: https://gitlist.dev/t/41559

## larsxschneider@gmail.com, 2016-02-28 10:25

Subject: [PATCH v1] git-p4: map a P4 user to Git author name and email address
Message-ID: <1456655125-17829-1-git-send-email-larsxschneider@gmail.com>
URL: https://gitlist.dev/e/1456655125-17829-1-git-send-email-larsxschneider%40gmail.com

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

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, 2016-02-28 16:19

Subject: Re: [PATCH v1] git-p4: map a P4 user to Git author name and email address
Message-ID: <CAPig+cTCZ_diLH+tge6bis6gjq0Qvk05zD7zqf1PBJxNTJu9bw@mail.gmail.com>
URL: https://gitlist.dev/e/CAPig%2BcTCZ_diLH%2Btge6bis6gjq0Qvk05zD7zqf1PBJxNTJu9bw%40mail.gmail.com
In-Reply-To: <1456655125-17829-1-git-send-email-larsxschneider@gmail.com>

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

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

> 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 <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, 2016-02-28 17:05

Subject: Re: [PATCH v1] git-p4: map a P4 user to Git author name and email address
Message-ID: <F97BFD52-C258-4B8C-A380-6F0240FDE7F8@gmail.com>
URL: https://gitlist.dev/e/F97BFD52-C258-4B8C-A380-6F0240FDE7F8%40gmail.com
In-Reply-To: <CAPig+cTCZ_diLH+tge6bis6gjq0Qvk05zD7zqf1PBJxNTJu9bw@mail.gmail.com>

```

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


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


> 
>> 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, 2016-02-29 03:53

Subject: Re: [PATCH v1] git-p4: map a P4 user to Git author name and email address
Message-ID: <CAPig+cQEzsJT+06bam2o+B1YTOrviHVtzE2LWsrF_bVCWy7+Bw@mail.gmail.com>
URL: https://gitlist.dev/e/CAPig%2BcQEzsJT%2B06bam2o%2BB1YTOrviHVtzE2LWsrF_bVCWy7%2BBw%40mail.gmail.com
In-Reply-To: <F97BFD52-C258-4B8C-A380-6F0240FDE7F8@gmail.com>

```
On Sun, Feb 28, 2016 at 12:05 PM, Lars Schneider
<larsxschneider@gmail.com> wrote:
> 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, 2016-02-29 05:12

Subject: Re: [PATCH v1] git-p4: map a P4 user to Git author name and email address
Message-ID: <CAE5ih7-oPE1RYrO78TAnkNSi03qtcUK_iiLywoyRC_FAgdwTAg@mail.gmail.com>
URL: https://gitlist.dev/e/CAE5ih7-oPE1RYrO78TAnkNSi03qtcUK_iiLywoyRC_FAgdwTAg%40mail.gmail.com
In-Reply-To: <1456655125-17829-1-git-send-email-larsxschneider@gmail.com>

```
On 28 February 2016 at 10:25,  <larsxschneider@gmail.com> wrote:
> 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:

> +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, 2016-02-29 05:31

Subject: Re: [PATCH v1] git-p4: map a P4 user to Git author name and email address
Message-ID: <56D3D797.2040401@web.de>
URL: https://gitlist.dev/e/56D3D797.2040401%40web.de
In-Reply-To: <CAE5ih7-oPE1RYrO78TAnkNSi03qtcUK_iiLywoyRC_FAgdwTAg@mail.gmail.com>

```

+       (
+               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.
>
>
A better name could be
Max Musterman <max@example.com>
Erika Musterman <erika@example.com>

```
