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. > builtin/merge.c:1231: } else if (argc == 1 && !strcmp(argv[0], "-")) { > builtin/merge.c-1232- argv[0] = "@{-1}"; > -- > builtin/revert.c:158: if (!strcmp(argv[1], "-")) > builtin/revert.c-159- argv[1] = "@{-1}"; These should be safe to delegate down. > builtin/worktree.c:344: if (!strcmp(branch, "-")) > builtin/worktree.c-345- branch = "@{-1}"; I do not know about this one, but it smells like a branch name that wants to be used before it gets turned into 40-hex.