Re: [PATCH 2/2 v3] sha1_name: teach get_sha1_1 "-" shorthand for "@{-1}"
From: Junio C Hamano <hidden>
Date: 2017-02-13 20:03:48
Junio C Hamano [off-list ref] writes:
Matthieu Moy [off-list ref] writes:quoted
Siddharth Kannan [off-list ref] writes:quoted
+ if (!strcmp(name, "-")) { + name = "@{-1}"; + len = 5; + }One drawback of this approach is that further error messages will be given from the "@{-1}" string that the user never typed.Right.quoted
There are at least: $ git grep -n -A1 'strcmp.*"-"' | grep -B 1 '@\{1\}' builtin/checkout.c:975: if (!strcmp(arg, "-")) builtin/checkout.c-976- arg = "@{-1}";I didn't check the surrounding context to be sure, but I think this "- to @{-1}" conversion cannot be delegated down to revision parsing that eventually wants to return a 40-hex as the result. We do want a branch _name_ sometimes when we say "@{-1}"; "checkout master" (i.e. checkout by name) and "checkout master^0" (i.e. the same commit object, but not by name) do different things.
FYI, the "@{-<number>} to branch name" translation happens in
interpret_branch_name(). I do not offhand recall if any callers
protect their calls to the function with conditionals that assume
the thing must begin with "@{" or cannot begin with "-" (the latter
of which is similar to the topic of patch 1/2 of this series), but I
suspect that teaching the function that "-" means the same as
"@{-1}" would bring us closer to where we want to go.