git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCHv1 2/2] git-p4: work with a detached head

From
Luke Diamand <luke@diamand.org>
Date
Sep 5, 2015, 14:02 UTC
Message-ID
<1441461738-25066-3-git-send-email-luke@diamand.org>
In-Reply-To
<1441461738-25066-1-git-send-email-luke@diamand.org>

When submitting, git-p4 finds the current branch in order to know if it is allowed to submit (configuration "git-p4.allowSubmit").

On a detached head, detecting the branch would fail, and git-p4 would report a cryptic error.

This change teaches git-p4 to recognise a detached head and submit successfully.

Signed-off-by: Luke Diamand <luke@diamand.org>
---
 git-p4.py               | 18 ++++++++++++------
 t/t9800-git-p4-basic.sh |  2 +-
 2 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/git-p4.py b/git-p4.py
index 2677c89..a22ae01 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -1651,8 +1651,8 @@ class P4Submit(Command, P4UserMap):
     def run(self, args):
         if len(args) == 0:
             self.master = currentGitBranch()
-            if len(self.master) == 0 or not gitBranchExists("refs/heads/%s" % self.master):
-                die("Detecting current git branch failed!")
+            if self.master == "undefined":
+                self.master = None
         elif len(args) == 1:
             self.master = args[0]
             if not branchExists(self.master):
@@ -1660,9 +1660,10 @@ class P4Submit(Command, P4UserMap):
         else:
             return False
 
-        allowSubmit = gitConfig("git-p4.allowSubmit")
-        if len(allowSubmit) > 0 and not self.master in allowSubmit.split(","):
-            die("%s is not in git-p4.allowSubmit" % self.master)
+        if self.master:
+            allowSubmit = gitConfig("git-p4.allowSubmit")
+            if len(allowSubmit) > 0 and not self.master in allowSubmit.split(","):
+                die("%s is not in git-p4.allowSubmit" % self.master)
 
         [upstream, settings] = findUpstreamBranchPoint()
         self.depotPath = settings['depot-paths'][0]
@@ -1730,7 +1731,12 @@ class P4Submit(Command, P4UserMap):
         self.check()
 
         commits = []
-        for line in read_pipe_lines(["git", "rev-list", "--no-merges", "%s..%s" % (self.origin, self.master)]):
+        if self.master:
+            commitish = self.master
+        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()
 
diff --git a/t/t9800-git-p4-basic.sh b/t/t9800-git-p4-basic.sh
index 114b19f..0730f18 100755
--- a/t/t9800-git-p4-basic.sh
+++ b/t/t9800-git-p4-basic.sh
@@ -241,7 +241,7 @@ test_expect_success 'unresolvable host in P4PORT should display error' '
 	)
 '
 
-test_expect_failure 'submit from detached head' '
+test_expect_success 'submit from detached head' '
 	test_when_finished cleanup_git &&
 	git p4 clone --dest="$git" //depot &&
 	(
-- 
2.6.0.rc0.133.ga438a11.dirty
Previous: Luke DiamandNext: Junio C Hamano
Message 3 of 12 in “[PATCHv1 0/2] git-p4: work on a detached head”
  1. Luke DiamandSep 5, 2015
  2. 1/2 git-p4: add failing test for submit from detached headLuke Diamand, Sep 5, 2015
  3. 2/2 git-p4: work with a detached headLuke Diamand, Sep 5, 2015
  4. Junio C HamanoSep 9, 2015
  5. Luke DiamandSep 10, 2015
  6. Junio C HamanoSep 10, 2015
  7. Junio C HamanoOct 28, 2015
  8. Luke DiamandOct 28, 2015
  9. Lars SchneiderSep 9, 2015
  10. Jacob KellerSep 10, 2015
  11. Jacob KellerSep 10, 2015
  12. Luke DiamandSep 10, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.