Junio C Hamano <gitster@xxxxxxxxx> writes: > Matthieu Moy <Matthieu.Moy@xxxxxxxxxxxxxxx> writes: > >> Siddharth Kannan <kannan.siddharth12@xxxxxxxxx> writes: >> >>> + 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. > >> 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.