git-p4: map a P4 user to Git author name and email address
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> Reviewed-by: Luke Diamand <luke@diamand.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									594730e980
								
							
						
					
					
						commit
						10d08a149d
					
				|  | @ -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:: | ||||
|  |  | |||
|  | @ -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(): | ||||
|  |  | |||
|  | @ -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 | ||||
		Loading…
	
		Reference in New Issue
	
	 Lars Schneider
						Lars Schneider