Hi, Ran into a nasty race today with git-p4. The changelist Files: section was showing up empty and it turned out to be a race between the p4_edit and p4_change -o, e.g. $ p4 edit $file && p4 change -o will show no files in the Files: section. I attach a patch after my .sig as a suggested fix. It simply loops over the p4_changes -o as long as we're not finding any files (and we always should since we just did a p4_edit!); sleeping for 3 secs in between to allow Perforce to catch up with itself. Thanks --Kevin >From 9b3b151f46dc30b9087010bb06defad9d06dfc72 Mon Sep 17 00:00:00 2001 From: Kevin Green <Kevin.Green@xxxxxxxxxxxxxxxxx> Date: Tue, 1 Apr 2008 18:11:32 -0400 Subject: [PATCH] git-p4: Fix race between p4_edit and p4_change While generating the changelist from 'p4 change -o' it's possible that perforce hasn't caught up from the preceding 'p4 edit $file'. This leaves us with a Files: section that is completely empty and subsequently the p4_submit fails. This fix loops over a flag for finding something in the Files: section. We just did a p4_edit so there must be something there. If nothing's found, then sleep for a short time (3 secs) and try all over again. Signed-off-by: Kevin Green <Kevin.Green@xxxxxxxxxxxxxxxxx> --- contrib/fast-import/git-p4 | 46 +++++++++++++++++++++++++------------------ 1 files changed, 27 insertions(+), 19 deletions(-) diff --git a/contrib/fast-import/git-p4 b/contrib/fast-import/git-p4 index d8de9f6..5ae71ad 100755 --- a/contrib/fast-import/git-p4 +++ b/contrib/fast-import/git-p4 @@ -510,27 +510,35 @@ class P4Submit(Command): def prepareSubmitTemplate(self): # remove lines in the Files section that show changes to files outside the depot path we're committing into - template = "" - inFilesSection = False - for line in read_pipe_lines("p4 change -o"): - if line.endswith("\r\n"): - line = line[:-2] + "\n" - if inFilesSection: - if line.startswith("\t"): - # path starts and ends with a tab - path = line[1:] - lastTab = path.rfind("\t") - if lastTab != -1: - path = path[:lastTab] - if not path.startswith(self.depotPath): - continue + notdone = True + while notdone: + template = "" + inFilesSection = False + for line in read_pipe_lines("p4 change -o"): + if line.endswith("\r\n"): + line = line[:-2] + "\n" + if inFilesSection: + if line.startswith("\t"): + # path starts and ends with a tab + path = line[1:] + lastTab = path.rfind("\t") + if lastTab != -1: + path = path[:lastTab] + if not path.startswith(self.depotPath): + continue + else: + notdone = False + else: + inFilesSection = False else: - inFilesSection = False - else: - if line.startswith("Files:"): - inFilesSection = True + if line.startswith("Files:"): + inFilesSection = True + + template += line - template += line + # Perforce hasn't caught up with itself yet, so wait a bit and try again + print "Waiting for Perforce to catch up" + time.sleep(3) return template -- 1.5.4.2 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html