From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Utku <ugultopu@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: How to get the branch HEAD points to using a plumbing command?
Date: Tue, 05 Jan 2021 16:24:56 +0100 [thread overview]
Message-ID: <8735zfs8xj.fsf@evledraar.gmail.com> (raw)
In-Reply-To: <132D030A-AAD3-4EFC-9858-7EA39503A746@gmail.com>
On Tue, Jan 05 2021, Utku wrote:
> If HEAD points to a branch, then `cat .git/HEAD` returns (at least on my Git version):
>
> ref: refs/heads/2.x
>
> So, to understand which branch HEAD points to, I can:
>
> - Read file contents of `.git/HEAD`.
> - Try to match the contents with the regular expression `^ref: refs\/heads\/(.*)$`. If the capturing group is not empty, then HEAD points to the branch indicated by the capturing group. Otherwise, HEAD does not point to a branch.
>
> To do this using only plumbing commands, I came up with:
>
> - Run `git show-ref --head --heads`.
> - Parse the output first by newlines, then by spaces and test if the commit hash of HEAD is present in other lines. If it is, then extract the branch name and return it. If not, return empty string.
>
> My question is, is there a "better" (more idiomatic, less "expensive", etc.) way of doing it using only one plumbing command? This solution is OK but it is more work than just matching one line with a regular expression. The reason I want to do this using only plumbing commands is because I think that plumbing command interface would be more stable than the format (organization, structure) of files under the `.git/` directory across Git versions. Please correct me if I'm wrong in this idea as well.
You'll want to use git-rev-parse for this, e.g.:
$ git rev-parse --symbolic-full-name HEAD
refs/heads/master
next prev parent reply other threads:[~2021-01-05 15:25 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-05 15:09 How to get the branch HEAD points to using a plumbing command? Utku
2021-01-05 15:24 ` Ævar Arnfjörð Bjarmason [this message]
2021-01-05 20:01 ` Jeff King
2021-01-05 22:55 ` Junio C Hamano
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=8735zfs8xj.fsf@evledraar.gmail.com \
--to=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=ugultopu@gmail.com \
/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).