Re: [PATCH] refs.c: interpret @ as HEAD
- From
Duy Nguyen <pclouds@gmail.com>
- Date
- Apr 30, 2013, 12:31 UTC
- Message-ID
- <CACsJy8C7vcxTkzmfABSykMxeX+68rWnr-Ohfhb3oMPi=Q5Tg6g@mail.gmail.com>
- In-Reply-To
- <1367324685-22788-1-git-send-email-artagnon@gmail.com>
On Tue, Apr 30, 2013 at 7:24 PM, Ramkumar Ramachandra <artagnon@gmail.com> wrote:
Show 27 quoted lines
> The rev spec forms @{}, .., ... fill in HEAD as the missing argument
> automatically. Unfortunately, HEAD~<n> is a very common idiom and
> there is no way to make HEAD implicit here (due the shell expansion of
> ~<n>).
>
> However, there is an alternative solution to the issue: overload the
> character @ to mean HEAD. Do this at the lowest possible layer of
> abstraction: in dwim_ref(), substitute @ with HEAD just before calling
> resolve_ref_unsafe(). The program will only reach this point after
> the other specs like ~, ^ and @{} have been resolved; therefore, it is
> safe to do it here.
>
> This patch has the exact same effect as:
>
> $ git symbolic-ref @ HEAD
>
> It means that you can now do @~1, @^2, and even topic..@. However,
> since the @-parsing happens before we ever reach the symref
> resolution, @@{u} is invalid. But this is okay, since @{u} already
> has an implicit HEAD in it.
>
> Inspired-by: Felipe Contreras <felipe.contreras@gmail.com>
> Inspired-by: Michael Haggerty <mhagger@alum.mit.edu>
> Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
> ---
> I haven't included documentation/ tests because I want feedback on
> this two-liner first.You need more than that :) As Michael pointed out '@' is a perfectly valid ref name. If you do this, you need to reject '@' as invalid ref name. I guess another two lines in check_refname_format. But let's wait for more feedback first. -- Duy