Merge branch 'ld/p4-current-branch-fix'

"git p4" used "name-rev HEAD" when it wants to learn what branch is
checked out; it should use "symbolic-ref HEAD".

* ld/p4-current-branch-fix:
  git-p4: don't use name-rev to get current branch
  git-p4: add read_pipe_text() internal function
  git-p4: add failing test for name-rev rather than symbolic-ref
This commit is contained in:
Junio C Hamano 2017-04-19 21:37:23 -07:00
commit c2cbb30fc0
2 changed files with 45 additions and 9 deletions

View File

@ -160,17 +160,42 @@ def p4_write_pipe(c, stdin):
real_cmd = p4_build_cmd(c)
return write_pipe(real_cmd, stdin)
def read_pipe(c, ignore_error=False):
def read_pipe_full(c):
""" Read output from command. Returns a tuple
of the return status, stdout text and stderr
text.
"""
if verbose:
sys.stderr.write('Reading pipe: %s\n' % str(c))
expand = isinstance(c,basestring)
p = subprocess.Popen(c, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=expand)
(out, err) = p.communicate()
if p.returncode != 0 and not ignore_error:
die('Command failed: %s\nError: %s' % (str(c), err))
return (p.returncode, out, err)
def read_pipe(c, ignore_error=False):
""" Read output from command. Returns the output text on
success. On failure, terminates execution, unless
ignore_error is True, when it returns an empty string.
"""
(retcode, out, err) = read_pipe_full(c)
if retcode != 0:
if ignore_error:
out = ""
else:
die('Command failed: %s\nError: %s' % (str(c), err))
return out
def read_pipe_text(c):
""" Read output from a command with trailing whitespace stripped.
On error, returns None.
"""
(retcode, out, err) = read_pipe_full(c)
if retcode != 0:
return None
else:
return out.rstrip()
def p4_read_pipe(c, ignore_error=False):
real_cmd = p4_build_cmd(c)
return read_pipe(real_cmd, ignore_error)
@ -577,12 +602,7 @@ def p4Where(depotPath):
return clientPath
def currentGitBranch():
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()
return read_pipe_text(["git", "symbolic-ref", "--short", "-q", "HEAD"])
def isValidGitDir(path):
return git_dir(path) != None

View File

@ -139,6 +139,22 @@ test_expect_success 'submit with master branch name from argv' '
)
'
test_expect_success 'allow submit from branch with same revision but different name' '
test_when_finished cleanup_git &&
git p4 clone --dest="$git" //depot &&
(
cd "$git" &&
test_commit "file8" &&
git checkout -b branch1 &&
git checkout -b branch2 &&
git config git-p4.skipSubmitEdit true &&
git config git-p4.allowSubmit "branch1" &&
test_must_fail git p4 submit &&
git checkout branch1 &&
git p4 submit
)
'
#
# Basic submit tests, the five handled cases
#