Junio C Hamano <gitster@xxxxxxxxx> writes: > * mg/name-rev-debug (2017-03-29) 3 commits > - name-rev: provide debug output > - name-rev: favor describing with tags and use committer date to tiebreak > - name-rev: refactor logic to see if a new candidate is a better name > (this branch uses mg/describe-debug-l10n.) > > "git describe --debug --contains" did not add any meaningful > information, even though without "--contains" it did. > > Waiting for jc/p4-current-branch-fix to settle. > This replaces jc/name-rev. Regarding this "p4 fix", which is this one: > * jc/p4-current-branch-fix (2017-03-27) 2 commits > - DONTMERGE git-p4: "name-rev HEAD" is not a way to find the current branch > - git-p4: add failing test for name-rev rather than symbolic-ref > > "git p4" used "name-rev HEAD" when it wants to learn what branch is > checked out; it should use "symbolic-ref HEAD". > > The tip one (i.e. real fix) needs to be redone by somebody > competent with Python and git-p4 codebase. does anybody want to volunteer rewriting the "DONTMERGE" one, which is shown below, in a better way? Two things that I find disturbing are * there is another "git symbolic-ref HEAD" invocation immediately before the context we see in the patch, which feels redundant; * the [11:] is to strip the leading "refs/heads/"; there should be a more Pythoninc way (which may even be used in existing code in git-p4.py) to do so. If I hear from nobody in a few days, I'll have to merge the crappy one below to 'next' to allow Michael's "name-rev" updates to move forward. Thanks. -- >8 -- From: Junio C Hamano <gitster@xxxxxxxxx> Date: Thu, 16 Mar 2017 22:56:22 -0700 Subject: [PATCH] git-p4: "name-rev HEAD" is not a way to find the current branch This function seems to want to learn which branch we are on, and running "name-rev HEAD" is *NEVER* the right way to do so. If you are on branch B which happens to point at the same commit as branch A, "name-rev HEAD" can say either A or B (and it is likely it would say A simply because it sorts earlier, and the logic seems to favor the one that was discovered earlier when all else being equal). If you are on branch B which happens to be pointed by an annotated tag T, "name-rev HEAD" will say T, not B. Use "symbolic-ref HEAD" instead. Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> --- git-p4.py | 2 +- t/t9807-git-p4-submit.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/git-p4.py b/git-p4.py index 0cfc8668d6..6a448a573b 100755 --- a/git-p4.py +++ b/git-p4.py @@ -549,7 +549,7 @@ def currentGitBranch(): # on a detached head return None else: - return read_pipe(["git", "name-rev", "HEAD"]).split(" ")[1].strip() + return read_pipe(["git", "symbolic-ref", "HEAD"]).strip()[11:] def isValidGitDir(path): if (os.path.exists(path + "/HEAD") diff --git a/t/t9807-git-p4-submit.sh b/t/t9807-git-p4-submit.sh index 4e625fad07..643258500b 100755 --- a/t/t9807-git-p4-submit.sh +++ b/t/t9807-git-p4-submit.sh @@ -139,7 +139,7 @@ test_expect_success 'submit with master branch name from argv' ' ) ' -test_expect_failure 'allow submit from branch with same revision but different name' ' +test_expect_success 'allow submit from branch with same revision but different name' ' test_when_finished cleanup_git && git p4 clone --dest="$git" //depot && ( -- 2.12.2-510-ge1104a5ee5