Merge branch 'sh/p4-multi-depot'
"git p4" when interacting with multiple depots at the same time used to incorrectly drop changes. * sh/p4-multi-depot: git-p4: reduce number of server queries for fetches git-p4: support multiple depot paths in p4 submit git-p4: failing test case for skipping changes with multiple depotsmaint
						commit
						aecb9979df
					
				
							
								
								
									
										55
									
								
								git-p4.py
								
								
								
								
							
							
						
						
									
										55
									
								
								git-p4.py
								
								
								
								
							|  | @ -822,39 +822,37 @@ def p4ChangesForPaths(depotPaths, changeRange, requestedBlockSize): | ||||||
|                 die("cannot use --changes-block-size with non-numeric revisions") |                 die("cannot use --changes-block-size with non-numeric revisions") | ||||||
|             block_size = None |             block_size = None | ||||||
|  |  | ||||||
|     # Accumulate change numbers in a dictionary to avoid duplicates |     changes = [] | ||||||
|     changes = {} |  | ||||||
|  |  | ||||||
|     for p in depotPaths: |     # Retrieve changes a block at a time, to prevent running | ||||||
|         # Retrieve changes a block at a time, to prevent running |     # into a MaxResults/MaxScanRows error from the server. | ||||||
|         # into a MaxResults/MaxScanRows error from the server. |  | ||||||
|  |  | ||||||
|         while True: |     while True: | ||||||
|             cmd = ['changes'] |         cmd = ['changes'] | ||||||
|  |  | ||||||
|             if block_size: |         if block_size: | ||||||
|                 end = min(changeEnd, changeStart + block_size) |             end = min(changeEnd, changeStart + block_size) | ||||||
|                 revisionRange = "%d,%d" % (changeStart, end) |             revisionRange = "%d,%d" % (changeStart, end) | ||||||
|             else: |         else: | ||||||
|                 revisionRange = "%s,%s" % (changeStart, changeEnd) |             revisionRange = "%s,%s" % (changeStart, changeEnd) | ||||||
|  |  | ||||||
|  |         for p in depotPaths: | ||||||
|             cmd += ["%s...@%s" % (p, revisionRange)] |             cmd += ["%s...@%s" % (p, revisionRange)] | ||||||
|  |  | ||||||
|             for line in p4_read_pipe_lines(cmd): |         # Insert changes in chronological order | ||||||
|                 changeNum = int(line.split(" ")[1]) |         for line in reversed(p4_read_pipe_lines(cmd)): | ||||||
|                 changes[changeNum] = True |             changes.append(int(line.split(" ")[1])) | ||||||
|  |  | ||||||
|             if not block_size: |         if not block_size: | ||||||
|                 break |             break | ||||||
|  |  | ||||||
|             if end >= changeEnd: |         if end >= changeEnd: | ||||||
|                 break |             break | ||||||
|  |  | ||||||
|             changeStart = end + 1 |         changeStart = end + 1 | ||||||
|  |  | ||||||
|     changelist = changes.keys() |     changes = sorted(changes) | ||||||
|     changelist.sort() |     return changes | ||||||
|     return changelist |  | ||||||
|  |  | ||||||
| def p4PathStartsWith(path, prefix): | def p4PathStartsWith(path, prefix): | ||||||
|     # This method tries to remedy a potential mixed-case issue: |     # This method tries to remedy a potential mixed-case issue: | ||||||
|  | @ -1458,6 +1456,8 @@ class P4Submit(Command, P4UserMap): | ||||||
|            Remove lines in the Files section that show changes to files |            Remove lines in the Files section that show changes to files | ||||||
|            outside the depot path we're committing into.""" |            outside the depot path we're committing into.""" | ||||||
|  |  | ||||||
|  |         [upstream, settings] = findUpstreamBranchPoint() | ||||||
|  |  | ||||||
|         template = "" |         template = "" | ||||||
|         inFilesSection = False |         inFilesSection = False | ||||||
|         for line in p4_read_pipe_lines(['change', '-o']): |         for line in p4_read_pipe_lines(['change', '-o']): | ||||||
|  | @ -1470,8 +1470,13 @@ class P4Submit(Command, P4UserMap): | ||||||
|                     lastTab = path.rfind("\t") |                     lastTab = path.rfind("\t") | ||||||
|                     if lastTab != -1: |                     if lastTab != -1: | ||||||
|                         path = path[:lastTab] |                         path = path[:lastTab] | ||||||
|                         if not p4PathStartsWith(path, self.depotPath): |                         if settings.has_key('depot-paths'): | ||||||
|                             continue |                             if not [p for p in settings['depot-paths'] | ||||||
|  |                                     if p4PathStartsWith(path, p)]: | ||||||
|  |                                 continue | ||||||
|  |                         else: | ||||||
|  |                             if not p4PathStartsWith(path, self.depotPath): | ||||||
|  |                                 continue | ||||||
|                 else: |                 else: | ||||||
|                     inFilesSection = False |                     inFilesSection = False | ||||||
|             else: |             else: | ||||||
|  |  | ||||||
|  | @ -84,7 +84,7 @@ p4_add_file() { | ||||||
| 	(cd "$cli" && | 	(cd "$cli" && | ||||||
| 		>$1 && | 		>$1 && | ||||||
| 		p4 add $1 && | 		p4 add $1 && | ||||||
| 		p4 submit -d "Added a file" $1 | 		p4 submit -d "Added file $1" $1 | ||||||
| 	) | 	) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -112,6 +112,32 @@ test_expect_success 'Syncing files' ' | ||||||
| 	) | 	) | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  | # Handling of multiple depot paths: | ||||||
|  | #    git p4 clone //depot/pathA //depot/pathB | ||||||
|  | # | ||||||
|  | test_expect_success 'Create a repo with multiple depot paths' ' | ||||||
|  | 	client_view "//depot/pathA/... //client/pathA/..." \ | ||||||
|  | 		    "//depot/pathB/... //client/pathB/..." && | ||||||
|  | 	mkdir -p "$cli/pathA" "$cli/pathB" && | ||||||
|  | 	for p in pathA pathB | ||||||
|  | 	do | ||||||
|  | 		for i in $(test_seq 1 10) | ||||||
|  | 		do | ||||||
|  | 			p4_add_file "$p/file$p$i" | ||||||
|  | 		done | ||||||
|  | 	done | ||||||
|  | ' | ||||||
|  |  | ||||||
|  | test_expect_success 'Clone repo with multiple depot paths' ' | ||||||
|  | 	( | ||||||
|  | 		cd "$git" && | ||||||
|  | 		git p4 clone --changes-block-size=4 //depot/pathA@all //depot/pathB@all \ | ||||||
|  | 			--destination=dest && | ||||||
|  | 		ls -1 dest >log && | ||||||
|  | 		test_line_count = 20 log | ||||||
|  | 	) | ||||||
|  | ' | ||||||
|  |  | ||||||
| test_expect_success 'kill p4d' ' | test_expect_success 'kill p4d' ' | ||||||
| 	kill_p4d | 	kill_p4d | ||||||
| ' | ' | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano