summaryrefslogtreecommitdiff
path: root/git-p4.py
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2015-12-28 13:58:57 -0800
committerJunio C Hamano <gitster@pobox.com>2015-12-28 13:58:58 -0800
commitaecb9979df1403923d66e7fc70b0374f1765b679 (patch)
tree5ee634beb4b95fba3ce7d45b4259898d6d908464 /git-p4.py
parent71957339da64100db4114106bbba4e9c5bcf8f86 (diff)
parent1f90a64891ed83e172cbf605890044dba8315073 (diff)
downloadgit-aecb9979df1403923d66e7fc70b0374f1765b679.tar.gz
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 depots
Diffstat (limited to 'git-p4.py')
-rwxr-xr-xgit-p4.py55
1 files changed, 30 insertions, 25 deletions
diff --git a/git-p4.py b/git-p4.py
index 7a9dd6ad74..c33dece5d2 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -822,39 +822,37 @@ def p4ChangesForPaths(depotPaths, changeRange, requestedBlockSize):
die("cannot use --changes-block-size with non-numeric revisions")
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
- # into a MaxResults/MaxScanRows error from the server.
+ # Retrieve changes a block at a time, to prevent running
+ # into a MaxResults/MaxScanRows error from the server.
- while True:
- cmd = ['changes']
+ while True:
+ cmd = ['changes']
- if block_size:
- end = min(changeEnd, changeStart + block_size)
- revisionRange = "%d,%d" % (changeStart, end)
- else:
- revisionRange = "%s,%s" % (changeStart, changeEnd)
+ if block_size:
+ end = min(changeEnd, changeStart + block_size)
+ revisionRange = "%d,%d" % (changeStart, end)
+ else:
+ revisionRange = "%s,%s" % (changeStart, changeEnd)
+ for p in depotPaths:
cmd += ["%s...@%s" % (p, revisionRange)]
- for line in p4_read_pipe_lines(cmd):
- changeNum = int(line.split(" ")[1])
- changes[changeNum] = True
+ # Insert changes in chronological order
+ for line in reversed(p4_read_pipe_lines(cmd)):
+ changes.append(int(line.split(" ")[1]))
- if not block_size:
- break
+ if not block_size:
+ break
- if end >= changeEnd:
- break
+ if end >= changeEnd:
+ break
- changeStart = end + 1
+ changeStart = end + 1
- changelist = changes.keys()
- changelist.sort()
- return changelist
+ changes = sorted(changes)
+ return changes
def p4PathStartsWith(path, prefix):
# 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
outside the depot path we're committing into."""
+ [upstream, settings] = findUpstreamBranchPoint()
+
template = ""
inFilesSection = False
for line in p4_read_pipe_lines(['change', '-o']):
@@ -1470,8 +1470,13 @@ class P4Submit(Command, P4UserMap):
lastTab = path.rfind("\t")
if lastTab != -1:
path = path[:lastTab]
- if not p4PathStartsWith(path, self.depotPath):
- continue
+ if settings.has_key('depot-paths'):
+ if not [p for p in settings['depot-paths']
+ if p4PathStartsWith(path, p)]:
+ continue
+ else:
+ if not p4PathStartsWith(path, self.depotPath):
+ continue
else:
inFilesSection = False
else: