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
This commit is contained in:
commit
5b228f956a
29
git-p4.py
29
git-p4.py
@ -190,14 +190,16 @@ def p4_has_move_command():
|
|||||||
# assume it failed because @... was invalid changelist
|
# assume it failed because @... was invalid changelist
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def system(cmd):
|
def system(cmd, ignore_error=False):
|
||||||
expand = isinstance(cmd,basestring)
|
expand = isinstance(cmd,basestring)
|
||||||
if verbose:
|
if verbose:
|
||||||
sys.stderr.write("executing %s\n" % str(cmd))
|
sys.stderr.write("executing %s\n" % str(cmd))
|
||||||
retcode = subprocess.call(cmd, shell=expand)
|
retcode = subprocess.call(cmd, shell=expand)
|
||||||
if retcode:
|
if retcode and not ignore_error:
|
||||||
raise CalledProcessError(retcode, cmd)
|
raise CalledProcessError(retcode, cmd)
|
||||||
|
|
||||||
|
return retcode
|
||||||
|
|
||||||
def p4_system(cmd):
|
def p4_system(cmd):
|
||||||
"""Specifically invoke p4 as the system command. """
|
"""Specifically invoke p4 as the system command. """
|
||||||
real_cmd = p4_build_cmd(cmd)
|
real_cmd = p4_build_cmd(cmd)
|
||||||
@ -540,7 +542,12 @@ def p4Where(depotPath):
|
|||||||
return clientPath
|
return clientPath
|
||||||
|
|
||||||
def currentGitBranch():
|
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):
|
def isValidGitDir(path):
|
||||||
if (os.path.exists(path + "/HEAD")
|
if (os.path.exists(path + "/HEAD")
|
||||||
@ -1649,8 +1656,6 @@ class P4Submit(Command, P4UserMap):
|
|||||||
def run(self, args):
|
def run(self, args):
|
||||||
if len(args) == 0:
|
if len(args) == 0:
|
||||||
self.master = currentGitBranch()
|
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:
|
elif len(args) == 1:
|
||||||
self.master = args[0]
|
self.master = args[0]
|
||||||
if not branchExists(self.master):
|
if not branchExists(self.master):
|
||||||
@ -1658,9 +1663,10 @@ class P4Submit(Command, P4UserMap):
|
|||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
allowSubmit = gitConfig("git-p4.allowSubmit")
|
if self.master:
|
||||||
if len(allowSubmit) > 0 and not self.master in allowSubmit.split(","):
|
allowSubmit = gitConfig("git-p4.allowSubmit")
|
||||||
die("%s is not in git-p4.allowSubmit" % self.master)
|
if len(allowSubmit) > 0 and not self.master in allowSubmit.split(","):
|
||||||
|
die("%s is not in git-p4.allowSubmit" % self.master)
|
||||||
|
|
||||||
[upstream, settings] = findUpstreamBranchPoint()
|
[upstream, settings] = findUpstreamBranchPoint()
|
||||||
self.depotPath = settings['depot-paths'][0]
|
self.depotPath = settings['depot-paths'][0]
|
||||||
@ -1728,7 +1734,12 @@ class P4Submit(Command, P4UserMap):
|
|||||||
self.check()
|
self.check()
|
||||||
|
|
||||||
commits = []
|
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.append(line.strip())
|
||||||
commits.reverse()
|
commits.reverse()
|
||||||
|
|
||||||
|
@ -241,6 +241,22 @@ test_expect_success 'unresolvable host in P4PORT should display error' '
|
|||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'submit from detached head' '
|
||||||
|
test_when_finished cleanup_git &&
|
||||||
|
git p4 clone --dest="$git" //depot &&
|
||||||
|
(
|
||||||
|
cd "$git" &&
|
||||||
|
git checkout p4/master &&
|
||||||
|
>detached_head_test &&
|
||||||
|
git add detached_head_test &&
|
||||||
|
git commit -m "add detached_head" &&
|
||||||
|
git config git-p4.skipSubmitEdit true &&
|
||||||
|
git p4 submit &&
|
||||||
|
git p4 rebase &&
|
||||||
|
git log p4/master | grep detached_head
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'kill p4d' '
|
test_expect_success 'kill p4d' '
|
||||||
kill_p4d
|
kill_p4d
|
||||||
'
|
'
|
||||||
|
Loading…
Reference in New Issue
Block a user