From: Kevin Green <Kevin.T.Green@morganstanley.com>
To: Simon Hausmann <simon@lst.de>, git@vger.kernel.org
Subject: [PATCH] git-p4: Work around race between p4_edit and p4_change
Date: Thu, 3 Apr 2008 15:51:35 -0400 [thread overview]
Message-ID: <20080403195135.GI22542@morganstanley.com> (raw)
In-Reply-To: <20080403184537.GH22542@morganstanley.com>
On 04/03/08 14:45:38, Kevin Green wrote:
> On 04/03/08 14:32:32, Simon Hausmann wrote:
> >
> > Last but not least we could of course also generate the entire Files: section
> > ourselves, using 'p4 change -o' just to get the rest of the template right.
> >
> > I almost prefer the last approach, since we know the base depot path and the
> > relative paths of all edited/added files.
> >
> > What do you think?
> >
>
> Thank you... That's the right approach. Stop as soon as we get to the Files:
> section and then just add in the depot + filepath string for each change...
>
And here's the patch that does what we just described...
--Kevin
>From dff9c9a00e3aaf41023ff11ecc75902a87b4c16b Mon Sep 17 00:00:00 2001
From: Kevin Green <Kevin.Green@morganstanley.com>
Date: Thu, 3 Apr 2008 15:47:07 -0400
Subject: [PATCH] git-p4: Work around race between p4_edit and p4_change
There exists a race in p4, such that p4_edit immediately followed by a
p4_change will not show the new edits in the changelist template.
Instead of removing files not in our concerned depot from the Files: section
we instead use p4_change as a template only up to the Files: section and then
file in the files explicitly ourselves, since we know the full list of files
and they current state, e.g. add, delete, edit.
Signed-off-by: Kevin Green <Kevin.Green@morganstanley.com>
---
contrib/fast-import/git-p4 | 30 ++++++++++++++----------------
1 files changed, 14 insertions(+), 16 deletions(-)
diff --git a/contrib/fast-import/git-p4 b/contrib/fast-import/git-p4
index d8de9f6..7760764 100755
--- a/contrib/fast-import/git-p4
+++ b/contrib/fast-import/git-p4
@@ -511,29 +511,20 @@ 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
- else:
- inFilesSection = False
- else:
- if line.startswith("Files:"):
- inFilesSection = True
+ if line.startswith("Files:"):
+ template += line
+ break
template += line
return template
+ def addToFilesSection(self, path, type):
+ return "\t" + self.depotPath + "/" + path + "\t# " + type + "\n"
+
def applyCommit(self, id):
print "Applying %s" % (read_pipe("git log --max-count=1 --pretty=oneline %s" % id))
diffOpts = ("", "-M")[self.detectRename]
@@ -609,11 +600,19 @@ class P4Submit(Command):
system(applyPatchCmd)
+ template = self.prepareSubmitTemplate()
+
for f in filesToAdd:
system("p4 add \"%s\"" % f)
+ template += self.addToFilesSection(f,"add")
+
for f in filesToDelete:
system("p4 revert \"%s\"" % f)
system("p4 delete \"%s\"" % f)
+ template += self.addToFilesSection(f,"delete")
+
+ for f in editedFiles:
+ template += self.addToFilesSection(f,"edit")
# Set/clear executable bits
for f in filesToChangeExecBit.keys():
@@ -623,7 +622,6 @@ class P4Submit(Command):
logMessage = extractLogMessageFromGitCommit(id)
logMessage = logMessage.strip()
- template = self.prepareSubmitTemplate()
if self.interactive:
submitTemplate = self.prepareLogMessage(template, logMessage)
--
1.5.4.2
next prev parent reply other threads:[~2008-04-03 19:59 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-01 22:28 [PATCH] git-p4: Fix race between p4_edit and p4_change Kevin Green
2008-04-03 18:32 ` Simon Hausmann
2008-04-03 18:45 ` Kevin Green
2008-04-03 19:51 ` Kevin Green [this message]
2008-04-11 16:27 ` [PATCH] git-p4: Work around " 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=20080403195135.GI22542@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).