Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
git-p4: work with a detached head
author
Luke Diamand
<luke@diamand.org>
Sat, 21 Nov 2015 09:54:41 +0000
(09:54 +0000)
committer
Jeff King
<peff@peff.net>
Tue, 24 Nov 2015 20:20:15 +0000
(15:20 -0500)
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>
Signed-off-by: Jeff King <peff@peff.net>
git-p4.py
patch
|
blob
|
history
t/t9800-git-p4-basic.sh
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
cbff4b2
)
diff --git
a/git-p4.py
b/git-p4.py
index 9d55f9c1e9e33c8c0652ab1ddea2f8bbeb136c8d..0cfc8668d67e6aa8358e0db537d5eaf9b6e5c049 100755
(executable)
--- a/
git-p4.py
+++ b/
git-p4.py
@@
-544,7
+544,12
@@
def p4Where(depotPath):
return clientPath
def currentGitBranch():
return clientPath
def currentGitBranch():
- return read_pipe("git name-rev HEAD").split(" ")[1].strip()
+ retcode = system(["git", "symbolic-ref", "-q", "HEAD"], ignore_error=True)
+ if retcode != 0:
+ # on a detached head
+ return None
+ else:
+ return read_pipe(["git", "name-rev", "HEAD"]).split(" ")[1].strip()
def isValidGitDir(path):
if (os.path.exists(path + "/HEAD")
def isValidGitDir(path):
if (os.path.exists(path + "/HEAD")
@@
-1653,8
+1658,6
@@
def exportGitTags(self, gitTags):
def run(self, args):
if len(args) == 0:
self.master = currentGitBranch()
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!")
elif len(args) == 1:
self.master = args[0]
if not branchExists(self.master):
elif len(args) == 1:
self.master = args[0]
if not branchExists(self.master):
@@
-1662,9
+1665,10
@@
def run(self, args):
else:
return False
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]
[upstream, settings] = findUpstreamBranchPoint()
self.depotPath = settings['depot-paths'][0]
@@
-1732,7
+1736,12
@@
def run(self, args):
self.check()
commits = []
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()
commits.append(line.strip())
commits.reverse()
diff --git
a/t/t9800-git-p4-basic.sh
b/t/t9800-git-p4-basic.sh
index 114b19fca823d553c94c9651e21e4f1e8e8357a6..0730f18d0f83f4145c5a0dbfde784d71bdc57a1d 100755
(executable)
--- 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 &&
(
test_when_finished cleanup_git &&
git p4 clone --dest="$git" //depot &&
(