summaryrefslogtreecommitdiff
path: root/git-p4.py
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2015-12-01 22:21:29 (GMT)
committerJeff King <peff@peff.net>2015-12-01 22:21:29 (GMT)
commit5b228f956a8f7ec5127adf9e9368220d7e5d9a5e (patch)
treef1d95645e32410c8402194a084483c4f8948c073 /git-p4.py
parent978b5760a11846ee7e2b928aca629a065a9d876d (diff)
parent00ad6e3182bbe68a94eaedf322918e4f266d184f (diff)
downloadgit-5b228f956a8f7ec5127adf9e9368220d7e5d9a5e.zip
git-5b228f956a8f7ec5127adf9e9368220d7e5d9a5e.tar.gz
git-5b228f956a8f7ec5127adf9e9368220d7e5d9a5e.tar.bz2
Merge branch 'ld/p4-detached-head' into maint
Make git-p4 work on a detached head. * ld/p4-detached-head: git-p4: work with a detached head git-p4: add option to system() to return subshell status git-p4: add failing test for submit from detached head
Diffstat (limited to 'git-p4.py')
-rwxr-xr-xgit-p4.py29
1 files changed, 20 insertions, 9 deletions
diff --git a/git-p4.py b/git-p4.py
index 36c5c55..4ea1553 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -190,14 +190,16 @@ def p4_has_move_command():
# assume it failed because @... was invalid changelist
return True
-def system(cmd):
+def system(cmd, ignore_error=False):
expand = isinstance(cmd,basestring)
if verbose:
sys.stderr.write("executing %s\n" % str(cmd))
retcode = subprocess.call(cmd, shell=expand)
- if retcode:
+ if retcode and not ignore_error:
raise CalledProcessError(retcode, cmd)
+ return retcode
+
def p4_system(cmd):
"""Specifically invoke p4 as the system command. """
real_cmd = p4_build_cmd(cmd)
@@ -540,7 +542,12 @@ def p4Where(depotPath):
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")
@@ -1649,8 +1656,6 @@ 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!")
elif len(args) == 1:
self.master = args[0]
if not branchExists(self.master):
@@ -1658,9 +1663,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]
@@ -1728,7 +1734,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()