[PATCHv1 2/2] git-p4: work with a detached head
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