From: Junio C Hamano <gitster@pobox.com>
To: Daniels Umanovskis <daniels@umanovskis.se>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 2/2] doc/git-branch: Document the --current option
Date: Wed, 10 Oct 2018 11:48:05 +0900 [thread overview]
Message-ID: <xmqqh8hums9m.fsf@gitster-ct.c.googlers.com> (raw)
In-Reply-To: <20181009183114.16477-2-daniels@umanovskis.se> (Daniels Umanovskis's message of "Tue, 9 Oct 2018 20:31:14 +0200")
Daniels Umanovskis <daniels@umanovskis.se> writes:
> +--current::
> + Print the name of the current branch. In detached HEAD state,
> + or if otherwise impossible to resolve the branch name, print
> + "HEAD".
Where does "if otherwise impossible to resolve" come from? In the
code in [PATCH 1/2], we see this bit
+ const char *refname = resolve_ref_unsafe("HEAD", 0, NULL, NULL);
+ char *shortname = shorten_unambiguous_ref(refname, 0);
and the output phase would become puts(shortname).
* Under what condition resolve_ref_unsafe(HEAD) fail to resolve,
and when that happens what does it return? "HEAD"? Can the
caller tell the case in which .git/HEAD is a symref that points
at refs/heads/HEAD (i.e. we are on a branch whose name is "HEAD")
and the case in which .git/HEAD fails to resolve and you get
"HEAD" back?
* Or does the function return NULL in "otherwise impossible" case?
Does shorten_unambiguous_ref() deal with refname==NULL
gracefully?
* Under what condition shorten_unambiguous_ref() fail to compute
the branch name discovered by resolve_ref_unsafe()?
Also, I do not think the implementation is correct. When you are on
the 'frotz' branch, and if you happen to have a tag whose name also
is 'frotz', then
- Your .git/HEAD points at refs/heads/frotz, and refs/heads/frotz
is what resolve_ref_unsafe() gives you.
- You have refs/heads/frotz and refs/tags/frotz in the repository.
Asking to shorten the ref refs/heads/frotz unambiguously will
*not* yield 'frotz'. It will give you something like 'heads/frotz'
to avoid getting it confused with tags/frotz
- Still "git branch --list" would show 'frotz' in such a case, and
your "--current" would definitely want to match the behaviour.
I think the correct implementation should be more like:
- Ask resolve-ref-unsafe about HEAD; if it is not a symbolic ref,
then we are on a detached HEAD. Silently exit with status 0.
- If it is a symbolic ref, see if the target of the symblic ref
(i.e. returned refname) begins with "refs/heads/". Otherwise, we
have a repository corruption. Diagnose it as an error and die().
- Otherwise, strip that leading "refs/heads/"; the remainder is the
name of the "current branch".
I already said "current" by itself is an unacceptable name for this
option, so I won't be repeating myself.
next prev parent reply other threads:[~2018-10-10 2:48 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-09 18:31 [PATCH 1/2] branch: introduce --current display option Daniels Umanovskis
2018-10-09 18:31 ` [PATCH 2/2] doc/git-branch: Document the --current option Daniels Umanovskis
2018-10-10 2:48 ` Junio C Hamano [this message]
2018-10-09 19:54 ` [PATCH 1/2] branch: introduce --current display option Stefan Beller
2018-10-09 20:21 ` Daniels Umanovskis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqh8hums9m.fsf@gitster-ct.c.googlers.com \
--to=gitster@pobox.com \
--cc=daniels@umanovskis.se \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).