Re: What's cooking in git.git (Mar 2017, #12; Wed, 29)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]