threads / patch / 41577

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

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

## tl;dr

9 messages between Mar 1, 2016 and Mar 15, 2016. Diffs are folded; open one to read it.

replies: 8people: 4as markdown or json

larsxschneider@gmail.com· Mar 1, 2016, 10:49 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>
---
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
Show changes to 3 files +81 −1

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..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
Lars Schneider· Mar 1, 2016, 10:57 UTC · re: larsxschneider@gmail.com · lore

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

On 01 Mar 2016, at 11:49, larsxschneider@gmail.com wrote:
> From: Lars Schneider <lars.schneider@autodesk.com>
oops ... this should be "larsxschneider@gmail.com"... sorry
- Lars
Show 138 quoted lines
> 
> 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
> 
Eric Sunshine· Mar 1, 2016, 19:15 UTC · re: larsxschneider@gmail.com · lore

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

On Tue, Mar 1, 2016 at 5:49 AM,  <larsxschneider@gmail.com> wrote:
Show 17 quoted lines
> 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 --git a/Documentation/git-p4.txt b/Documentation/git-p4.txt
> +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.

Sorry for not paying closer attention the first time, but this needs to be repeated for each P4 user you want to map, right? One can imagine this quickly becoming painful if you have a lot of users to map. Have you considered modeling this after git-svn where you can set an "authors" file (and name the corresponding option --authors-file)?

Luke Diamand· Mar 2, 2016, 05:06 UTC · re: Eric Sunshine · lore

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

On 1 March 2016 at 19:15, Eric Sunshine <sunshine@sunshineco.com> wrote:
Show 24 quoted lines
> On Tue, Mar 1, 2016 at 5:49 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>".
>>
>> Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
>> ---
>> diff --git a/Documentation/git-p4.txt b/Documentation/git-p4.txt
>> +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.
>
> Sorry for not paying closer attention the first time, but this needs
> to be repeated for each P4 user you want to map, right? One can
> imagine this quickly becoming painful if you have a lot of users to
> map. Have you considered modeling this after git-svn where you can set
> an "authors" file (and name the corresponding option --authors-file)?

For most authors it should just use the existing Perforce user information. This is (I assume) just for the occasional exception where Perforce has the wrong email address.

Luke
Lars Schneider· Mar 2, 2016, 09:25 UTC · re: Luke Diamand · lore

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

Show 31 quoted lines
> On 02 Mar 2016, at 06:06, Luke Diamand <luke@diamand.org> wrote:
> 
> On 1 March 2016 at 19:15, Eric Sunshine <sunshine@sunshineco.com> wrote:
>> On Tue, Mar 1, 2016 at 5:49 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>".
>>> 
>>> Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
>>> ---
>>> diff --git a/Documentation/git-p4.txt b/Documentation/git-p4.txt
>>> +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.
>> 
>> Sorry for not paying closer attention the first time, but this needs
>> to be repeated for each P4 user you want to map, right? One can
>> imagine this quickly becoming painful if you have a lot of users to
>> map. Have you considered modeling this after git-svn where you can set
>> an "authors" file (and name the corresponding option --authors-file)?
> 
> For most authors it should just use the existing Perforce user
> information. This is (I assume) just for the occasional exception
> where Perforce has the wrong email address.
I agree this is an occasional exception. I use it for users that have been deleted on the Perforce server.
@Eric: If a user wants to they could create a custom gitconfig and then use the config "include" mechanism to achieve a "authors" file kind of approach.

Cheers, Lars

Lars Schneider· Mar 13, 2016, 17:41 UTC · re: Lars Schneider · lore

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

On 02 Mar 2016, at 10:25, Lars Schneider <larsxschneider@gmail.com> wrote:
Show 36 quoted lines
> 
>> On 02 Mar 2016, at 06:06, Luke Diamand <luke@diamand.org> wrote:
>> 
>> On 1 March 2016 at 19:15, Eric Sunshine <sunshine@sunshineco.com> wrote:
>>> On Tue, Mar 1, 2016 at 5:49 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>".
>>>> 
>>>> Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
>>>> ---
>>>> diff --git a/Documentation/git-p4.txt b/Documentation/git-p4.txt
>>>> +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.
>>> 
>>> Sorry for not paying closer attention the first time, but this needs
>>> to be repeated for each P4 user you want to map, right? One can
>>> imagine this quickly becoming painful if you have a lot of users to
>>> map. Have you considered modeling this after git-svn where you can set
>>> an "authors" file (and name the corresponding option --authors-file)?
>> 
>> For most authors it should just use the existing Perforce user
>> information. This is (I assume) just for the occasional exception
>> where Perforce has the wrong email address.
> I agree this is an occasional exception. I use it for users that have been deleted on the Perforce server.
> 
> @Eric: If a user wants to they could create a custom gitconfig and then use the config "include" mechanism to achieve a "authors" file kind of approach.
> 

Is the patch uninteresting for git-p4 as it handles only an occasional exception or did the patch get lost in the noise? :-)

Thanks, Lars

Luke Diamand· Mar 15, 2016, 07:19 UTC · re: Lars Schneider · lore

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

On 13 March 2016 at 17:41, Lars Schneider <larsxschneider@gmail.com> wrote:
Show 42 quoted lines
>
> On 02 Mar 2016, at 10:25, Lars Schneider <larsxschneider@gmail.com> wrote:
>
>>
>>> On 02 Mar 2016, at 06:06, Luke Diamand <luke@diamand.org> wrote:
>>>
>>> On 1 March 2016 at 19:15, Eric Sunshine <sunshine@sunshineco.com> wrote:
>>>> On Tue, Mar 1, 2016 at 5:49 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>".
>>>>>
>>>>> Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
>>>>> ---
>>>>> diff --git a/Documentation/git-p4.txt b/Documentation/git-p4.txt
>>>>> +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.
>>>>
>>>> Sorry for not paying closer attention the first time, but this needs
>>>> to be repeated for each P4 user you want to map, right? One can
>>>> imagine this quickly becoming painful if you have a lot of users to
>>>> map. Have you considered modeling this after git-svn where you can set
>>>> an "authors" file (and name the corresponding option --authors-file)?
>>>
>>> For most authors it should just use the existing Perforce user
>>> information. This is (I assume) just for the occasional exception
>>> where Perforce has the wrong email address.
>> I agree this is an occasional exception. I use it for users that have been deleted on the Perforce server.
>>
>> @Eric: If a user wants to they could create a custom gitconfig and then use the config "include" mechanism to achieve a "authors" file kind of approach.
>>
>
> Is the patch uninteresting for git-p4 as it handles only an occasional
> exception or did the patch get lost in the noise? :-)
I thought it was useful; I hadn't realised that it was needed for deleted users.
Luke
Junio C Hamano· Mar 15, 2016, 16:52 UTC · re: Luke Diamand · lore

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

Luke Diamand <luke@diamand.org> writes:
Show 6 quoted lines
>> Is the patch uninteresting for git-p4 as it handles only an occasional
>> exception or did the patch get lost in the noise? :-)
>
> I thought it was useful; I hadn't realised that it was needed for deleted users.
>
> Luke
So..., should I just pick it up and queue with your Reviewed-by:?
Thanks.
Luke Diamand· Mar 15, 2016, 18:37 UTC · re: Junio C Hamano · lore

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

Yes please.
On 15 March 2016 at 16:52, Junio C Hamano <gitster@pobox.com> wrote:
Show 12 quoted lines
> Luke Diamand <luke@diamand.org> writes:
>
>>> Is the patch uninteresting for git-p4 as it handles only an occasional
>>> exception or did the patch get lost in the noise? :-)
>>
>> I thought it was useful; I hadn't realised that it was needed for deleted users.
>>
>> Luke
>
> So..., should I just pick it up and queue with your Reviewed-by:?
>
> Thanks.

← back to recent threads