Re: [PATCH] git-p4 - Add option --sha1 to submit in p4
From: Luke Diamand <hidden>
Date: 2018-05-02 14:55:43
On 2 May 2018 at 15:32, Merland Romain [off-list ref] wrote:
From 4867808cad2b759ebf31c275356e602b72c5659f Mon Sep 17 00:00:00 2001 From: Romain Merland <redacted> To: git@vger.kernel.org Cc: Junio C Hamano <redacted>, Jeff King <redacted>, Luke Diamand [off-list ref], Vinicius Kursancew [off-list ref] Date: Wed, 2 May 2018 15:02:11 +0200 Subject: [PATCH] git-p4 - Add option --sha1 to submit in p4 Add option --sha1 to command 'git-p4 submit' in order to submit in p4 a commit that is not necessarily on master. In that case, don't rebase the submitted changes.
That could be very useful, I often find the commit I want to submit is half-way down a long list of other commits. Currently I end up cherry-picking the one I want into a clean repo, but that's much more awkward than your --sha1 change. A few comments inline:
quoted hunk
Signed-off-by: Romain Merland <redacted> --- git-p4.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-)diff --git a/git-p4.py b/git-p4.py index 7bb9cadc6..d64ff79dd 100755 --- a/git-p4.py +++ b/git-p4.py@@ -1352,7 +1352,9 @@ class P4Submit(Command, P4UserMap): optparse.make_option("--update-shelve",dest="update_shelve", action="append", type="int", metavar="CHANGELIST", help="update an existing shelved changelist, implies --shelve, " - "repeat in-order for multiple shelved changelists") + "repeat in-order for multiple shelved changelists"), + optparse.make_option("--sha1", dest="sha1", metavar="SHA1", + help="submit only the specified commit, don't rebase afterwards")
Is there a better name than "sha1" ? If git ever changes its hash to something else will this still make sense? I wonder why you wouldn't rebase afterwards? Perhaps an additional option to skip the rebase?
quoted hunk
] self.description = "Submit changes from git to the perforce depot." self.usage += " [name of git branch to submit into perforce depot]"@@ -1362,6 +1364,7 @@ class P4Submit(Command, P4UserMap): self.dry_run = False self.shelve = False self.update_shelve = list() + self.sha1 = "" self.prepare_p4_only = False self.conflict_behavior = None self.isWindows = (platform.system() == "Windows")@@ -2103,9 +2106,12 @@ class P4Submit(Command, P4UserMap): else: commitish = 'HEAD' - for line in read_pipe_lines(["git", "rev-list", "--no-merges","%s..%s" % (self.origin, commitish)]): - commits.append(line.strip()) - commits.reverse() + if self.sha1 != "": + commits.append(self.sha1) + else: + for line in read_pipe_lines(["git", "rev-list", "--no-merges", "%s..%s" % (self.origin, commitish)]): + commits.append(line.strip()) + commits.reverse() if self.preserveUser or gitConfigBool("git-p4.skipUserNameCheck"): self.checkAuthorship = False@@ -2215,8 +2221,11 @@ class P4Submit(Command, P4UserMap): sync.branch = self.branch sync.run([]) - rebase = P4Rebase() - rebase.rebase() + if self.sha1 == "":
if not self.skip_rebase:
+ rebase = P4Rebase()
+ rebase.rebase()
+ else:
+ print "You will have to do 'git p4 sync' and rebase."
else:
if len(applied) == 0:
--
2.17.0
This would be better with some documentation in git-p4.txt and a test case! Regards! Luke