Re: [PATCH/RFC v4 4/5] checkout: implement "-" abbreviation, add docs and tests
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 17, 2009, 19:57 UTC
- Message-ID
- <7vwsct66yv.fsf@gitster.siamese.dyndns.org>
- In-Reply-To
- <1232208597-29249-5-git-send-email-trast@student.ethz.ch>
Thomas Rast <trast@student.ethz.ch> writes:
Show 8 quoted lines
> @@ -133,6 +133,10 @@ the conflicted merge in the specified paths.
> +
> When this parameter names a non-branch (but still a valid commit object),
> your HEAD becomes 'detached'.
> ++
> +As a special case, the "`@\{-N\}`" syntax for the N-th last branch
> +checks out the branch (instead of detaching). You may also specify
> +"`-`" which is synonymous with "`@\{-1\}`".I mildly disagree with this wording.
The new syntax is supposed to be a new way to name a branch, not a random non-branch committish that is special cased by "git checkout". I would further suggest that we should teach "git rev-parse --symbolic-full-name" and "git rev-parse --symbolic" about the new syntax, so that scripts can use the syntax to find out the same information.
The "-" thing deserves a mention here in the documentation. That _is_ a special case that only applies to the "git checkout" command.
Show 11 quoted lines
> diff --git a/builtin-checkout.c b/builtin-checkout.c
> index dc1de06..b0a101b 100644
> --- a/builtin-checkout.c
> +++ b/builtin-checkout.c
> @@ -679,6 +679,9 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
> arg = argv[0];
> has_dash_dash = (argc > 1) && !strcmp(argv[1], "--");
>
> + if (!strcmp(arg, "-"))
> + arg = "@{-1}";
> +This is not quite nice as it could be, but it probably is Ok. If the interpretation of @{-1} errors out, the user won't see an error message that talks about "-" but instead the user will see "@{-1}".
Also it will look somewhat inconsistent to the end user who does not know the internals for "-" claim to be a synonym for @{-1} but it really isn't. For example, "git checkout -^0" does not work as "git checkout @{-1}^0".
To avoid such confusion, we could instead make "git checkout - <ENTER>" a synonym for "git checkout @{-1} <ENTER>", without claiming to make "-" a synonym for "@{-1}". In other words, "git checkout -" can become a very narrow, focused special case that does not allow anything else, such as pathspecs, "--" separator, nor --force and other options.