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:
commit
c2cbb30fc0
38
git-p4.py
38
git-p4.py
@ -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
|
||||
|
@ -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
|
||||
#
|
||||
|
Loading…
Reference in New Issue
Block a user