From: Kevin Green <Kevin.T.Green@morganstanley.com>
To: Simon Hausmann <simon@lst.de>, git@vger.kernel.org
Subject: [PATCH] git-p4: Fix race between p4_edit and p4_change
Date: Tue, 1 Apr 2008 18:28:56 -0400 [thread overview]
Message-ID: <20080401222856.GA22542@morganstanley.com> (raw)
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@morganstanley.com>
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@morganstanley.com>
---
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
next reply other threads:[~2008-04-01 22:39 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-01 22:28 Kevin Green [this message]
2008-04-03 18:32 ` [PATCH] git-p4: Fix race between p4_edit and p4_change Simon Hausmann
2008-04-03 18:45 ` Kevin Green
2008-04-03 19:51 ` [PATCH] git-p4: Work around " Kevin Green
2008-04-11 16:27 ` Kevin Green
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080401222856.GA22542@morganstanley.com \
--to=kevin.t.green@morganstanley.com \
--cc=git@vger.kernel.org \
--cc=simon@lst.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).