All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pal-Kristian Engstad <pal_engstad@naughtydog.com>
To: Simon Hausmann <simon@lst.de>, Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: [PATCH 2/3] git-p4: improve submit dialogs
Date: Thu, 21 Jan 2010 18:05:04 -0800	[thread overview]
Message-ID: <4B5907D0.9070608@naughtydog.com> (raw)

Improve the git-p4 submit process by adding additional submit options.

* The regular commit sequence now gives the options of:
  + [y] to submit the patch as is,
  + [c] to display the Perforce commit through "less",
  + [d] to display the output of "p4 diff -du" through "less",
  + [e] to edit the message before submitting,
  + [n] to skip the patch.

* Add a --no-prompt option to submit multiple check-ins without any
  prompts. This feature is useful for when many changes needs to be
  checked in. The git commit message is assumed as the Perforce
  submit message.

* Add an --edit option to preserve the previous submission process.

Signed-off-by: Pal-Kristian Engstad <pal_engstad@naughtydog.com>
---
 contrib/fast-import/git-p4 |   75 +++++++++++++++++++++++++++++++++++--------
 1 files changed, 61 insertions(+), 14 deletions(-)

diff --git a/contrib/fast-import/git-p4 b/contrib/fast-import/git-p4
index c65ef8a..ab538b3 100755
--- a/contrib/fast-import/git-p4
+++ b/contrib/fast-import/git-p4
@@ -545,6 +545,10 @@ class P4Submit(Command):
                 optparse.make_option("--origin", dest="origin"),
                 optparse.make_option("--no-detect", dest="detectRename", action="store_false",
                                      help="Disable git's rename detection, forcing \"p4 delete\" and \"p4 add\" instead of \"p4 integrate\" and \"p4 edit\""),
+                optparse.make_option("--no-prompt", dest="prompt", action="store_false",
+                                     help="Check in every git change into the perforce database without any prompts"),
+                optparse.make_option("--edit", dest="editCommit", action="store_true",
+                                     help="Edit every commit before submitting (old procedure)")
         ]
         self.description = "Submit changes from git to the perforce depot."
         self.usage += " [name of git branch to submit into perforce depot]"
@@ -552,6 +556,8 @@ class P4Submit(Command):
         self.origin = ""
         self.detectRename = True
         self.verbose = False
+        self.editCommit = False
+        self.prompt = True
         self.isWindows = (platform.system() == "Windows")
 
     def check(self):
@@ -657,19 +663,21 @@ class P4Submit(Command):
 
         if os.system(tryPatchCmd) != 0:
             print "Unfortunately applying the change failed!"
+            print "This may be because you need to rebase your commits to the latest P4 changes."
             print "What do you want to do?"
             response = "x"
-            while response != "s" and response != "a" and response != "w":
-                response = raw_input("[s]kip this patch / [a]pply the patch forcibly "
+            while response != "s" and response != "f" and response != "a" and response != "w":
+                response = raw_input("[a]bort / [s]kip this patch / apply the patch [f]orcibly "
                                      "and with .rej files / [w]rite the patch to a file (patch.txt) ")
-            if response == "s":
-                print "Skipping! Good luck with the next patches..."
+            if response == "s" or response == "a":
+                if response == "s":
+                    print "Skipping! Next set of patches might fail..."
                 for f in editedFiles:
                     p4_system("revert \"%s\"" % f);
                 for f in filesToAdd:
                     system("rm %s" %f)
-                return
-            elif response == "a":
+                return response == "a"
+            elif response == "f":
                 os.system(applyPatchCmd)
                 if len(filesToAdd) > 0:
                     print "You may also want to call p4 add on the following files:"
@@ -729,18 +737,28 @@ class P4Submit(Command):
                 newdiff = newdiff.replace("\n", "\r\n")
             tmpFile.write(submitTemplate + separatorLine + diff + newdiff)
             tmpFile.close()
-            mtime = os.stat(fileName).st_mtime
+
             if os.environ.has_key("P4EDITOR"):
                 editor = os.environ.get("P4EDITOR")
             else:
                 editor = read_pipe("git var GIT_EDITOR")
-            system(editor + " " + fileName)
 
-            response = "y"
-            if os.stat(fileName).st_mtime <= mtime:
+            if self.editCommit:
+                response = "e"
+            elif not self.prompt:
+                response = "y"
+            else:
                 response = "x"
-                while response != "y" and response != "n":
-                    response = raw_input("Submit template unchanged. Submit anyway? [y]es, [n]o (skip this patch) ")
+                print "--- Description --------------------------------------------------------------------"
+                print logMessage
+                print "------------------------------------------------------------------------------------"
+
+                while response != "y" and response != "n" and response != "e":
+                    response = raw_input("Submit: [y]es, see P4 [c]ommit, see [d]iff, [e]dit message first, or [n]o (skip this patch) ")
+                    if response == "d":
+                        system("less " + fileName)
+                    elif response == "c":
+                        print submitTemplate
 
             if response == "y":
                 tmpFile = open(fileName, "rb")
@@ -750,14 +768,39 @@ class P4Submit(Command):
                 if self.isWindows:
                     submitTemplate = submitTemplate.replace("\r\n", "\n")
                 p4_write_pipe("submit -i", submitTemplate)
-            else:
+            elif response == "n":
                 for f in editedFiles:
                     p4_system("revert \"%s\"" % f);
                 for f in filesToAdd:
                     p4_system("revert \"%s\"" % f);
                     system("rm %s" %f)
+            elif self.editCommit or response == "e":
+                mtime = os.stat(fileName).st_mtime
+                system(editor + " " + fileName)
+
+                response = "y"
+                if os.stat(fileName).st_mtime <= mtime:
+                    response = "x"
+                    while response != "y" and response != "n":
+                        response = raw_input("Submit template unchanged. Submit anyway? [y]es, [n]o (skip this patch) ")
+
+                if response == "y":
+                    tmpFile = open(fileName, "rb")
+                    message = tmpFile.read()
+                    tmpFile.close()
+                    submitTemplate = message[:message.index(separatorLine)]
+                    if self.isWindows:
+                        submitTemplate = submitTemplate.replace("\r\n", "\n")
+                    p4_write_pipe("submit -i", submitTemplate)
+                else:
+                    for f in editedFiles:
+                        p4_system("revert \"%s\"" % f);
+                    for f in filesToAdd:
+                        p4_system("revert \"%s\"" % f);
+                        system("rm %s" %f)
 
             os.remove(fileName)
+            return True
         else:
             fileName = "submit.txt"
             file = open(fileName, "w+")
@@ -766,6 +809,7 @@ class P4Submit(Command):
             print ("Perforce submit template written as %s. "
                    + "Please review/edit and then use p4 submit -i < %s to submit directly!"
                    % (fileName, fileName))
+            return False
 
     def run(self, args):
         if len(args) == 0:
@@ -813,10 +857,13 @@ class P4Submit(Command):
             commits.append(line.strip())
         commits.reverse()
 
+        startCommits = len(commits)
+
         while len(commits) > 0:
             commit = commits[0]
             commits = commits[1:]
-            self.applyCommit(commit)
+            if not self.applyCommit(commit):
+                break
             if not self.interactive:
                 break
 
-- 
1.6.5.2.6.gc3c1e.dirty

                 reply	other threads:[~2010-01-22  2:04 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=4B5907D0.9070608@naughtydog.com \
    --to=pal_engstad@naughtydog.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.