Re: [PATCH 5/5] refs.c: make @ a pseudo-ref alias to HEAD
- From
Felipe Contreras <felipe.contreras@gmail.com>
- Date
- May 1, 2013, 18:20 UTC
- Message-ID
- <CAMP44s3nzuecoM+h+pNknV4A68R1gZ6DZpehp3uKcJhppXo+1w@mail.gmail.com>
- In-Reply-To
- <1367425235-14998-6-git-send-email-artagnon@gmail.com>
On Wed, May 1, 2013 at 11:20 AM, Ramkumar Ramachandra <artagnon@gmail.com> wrote:
Show 52 quoted lines
> First, make sure that check_refname_format() rejects the a refname
> beginning with a '@'. Add a test to t1400 (update-ref) demonstrating
> that update-ref forbids the user from updating a ref named "@".
>
> Now, resolve_ref_unsafe() is built to resolve any refs that have a
> corresponding file inside $GITDIR. Our "@" ref is a special
> pseudo-ref and does not have a filesystem counterpart. So,
> hard-interpret "@" as "HEAD" and resolve .git/HEAD as usual. This
> means that we can drop the 'git symbolic-ref @ HEAD' line in t1508
> (at-combinations), and everything will continue working as usual.
>
> If the user does manage to create a '.git/@' unsafely (via
> symbolic-ref or otherwise), it will be ignored.
>
> In practice, this means that you will now be able to do:
>
> $ git show @~1
> $ git log @^2
>
> Advertise these features in the tests and documentation.
>
> Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
> ---
> Documentation/git-check-ref-format.txt | 2 ++
> Documentation/revisions.txt | 8 ++++++--
> refs.c | 12 ++++++++++--
> t/t1400-update-ref.sh | 3 +++
> t/t1508-at-combinations.sh | 7 ++++---
> 5 files changed, 25 insertions(+), 7 deletions(-)
>
> diff --git a/Documentation/git-check-ref-format.txt b/Documentation/git-check-ref-format.txt
> index ec1739a..3de9adc 100644
> --- a/Documentation/git-check-ref-format.txt
> +++ b/Documentation/git-check-ref-format.txt
> @@ -52,6 +52,8 @@ Git imposes the following rules on how references are named:
>
> . They cannot end with a dot `.`.
>
> +. They cannot be the single character `@`.
> +
> . They cannot contain a sequence `@{`.
>
> . They cannot contain a `\`.
> diff --git a/Documentation/revisions.txt b/Documentation/revisions.txt
> index d477b3f..9b2e653 100644
> --- a/Documentation/revisions.txt
> +++ b/Documentation/revisions.txt
> @@ -27,6 +27,10 @@ blobs contained in a commit.
> When ambiguous, a '<refname>' is disambiguated by taking the
> first match in the following rules:
>
> + . '@' is a special pseudo-ref that refers to HEAD.Does the user really cares if it's a pseudo-ref or not? Also, what does it mean that "refers" to HEAD?
> An '@' followed
> + by '\{' has no relationship to this and means something entirely
> + different (see below).If the user cares about that, the user can see that below, otherwise there's no point in mentioning that. Just like there's no point in mentioning that @{-N} means something totally different from @{N}, because the user can see that. If it didn't mean something different, this bullet point wouldn't exist.
Cheers.
-- Felipe Contreras