git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v3 1/2] reset: enable '-' short-hand for previous branch

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Mar 10, 2015, 19:18 UTC
Message-ID
<CAPig+cQdSHQTVwOwb9hee6On_Bv4qrh0MhiR-aRDMXqhw5L9wQ@mail.gmail.com>
In-Reply-To
<1425984728-27996-1-git-send-email-sudshekhar02@gmail.com>

On Tue, Mar 10, 2015 at 6:52 AM, Sudhanshu Shekhar <sudshekhar02@gmail.com> wrote:

Show 19 quoted lines
> 'git reset -' will reset to the previous branch. It will behave similar
> to @{-1} except when a file named '@{-1}' is present. To refer to a file
> named '-', use ./- or the -- flag.
>
> Helped-by: Junio C Hamano <gitster@pobox.com>
> Helped-by: Eric Sunshine <sunshine@sunshineco.com>
> Helped-by: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
> Signed-off-by: Sudhanshu Shekhar <sudshekhar02@gmail.com>
> ---
> diff --git a/builtin/reset.c b/builtin/reset.c
> index 4c08ddc..8abd300 100644
> --- a/builtin/reset.c
> +++ b/builtin/reset.c
> @@ -205,6 +206,10 @@ static void parse_args(struct pathspec *pathspec,
>          */
>
>         if (argv[0]) {
> +               if (!strcmp(argv[0], "-")) {
> +                       argv[0] = "@{-1}";

It's somewhat ugly to modify an element of argv[] since you don't own the array and the contract does not particularly suggest that is modifiable by you. A more serious concern is that doing so creates a tighter binding between parse_args() and its caller since parse_args() doesn't know how the caller will be disposing of argv[] when finished with it. Say, for instance, that the caller disposes of each argv[] element by invoking free(argv[n]). The literal "@{-1}" you've assigned here is not allocated on the heap, so free()ing it would be wrong.

However, some of the other commands which alias "-" to "@{-1}" also modify argv[] in this way, so we'll let it slide for the moment.

Show 14 quoted lines
> +                       substituted_minus = 1;
> +               }
>                 if (!strcmp(argv[0], "--")) {
>                         argv++; /* reset to HEAD, possibly with paths */
>                 } else if (argv[1] && !strcmp(argv[1], "--")) {
> @@ -222,15 +227,21 @@ static void parse_args(struct pathspec *pathspec,
>                          * Ok, argv[0] looks like a commit/tree; it should not
>                          * be a filename.
>                          */
> +                       if (substituted_minus)
> +                               argv[0] = "-";
>                         verify_non_filename(prefix, argv[0]);
> +                       if (substituted_minus)
> +                               argv[0] = "@{-1}";

Do you find it ugly that you have to undo and then redo your argv[] change from a few lines above? Rather than jumping through such hoops, can't you instead define a new variable which holds the appropriate value ("@{-1}"), or rework the logic to avoid such kludges altogether?

Show 11 quoted lines
>                         rev = *argv++;
>                 } else {
> +                       /* We were treating "-" as a commit and not a file */
> +                       if (substituted_minus)
> +                               argv[0] = "-";
>                         /* Otherwise we treat this as a filename */
>                         verify_filename(prefix, argv[0], 1);
>                 }
>         }
>         *rev_ret = rev;
> -

Mentioned by Matthieu: Don't sneak in unrelated changes. This change was probably unintentional, but serves as a good reminder that you should review the patch yourself before sending it. (And, if you do have a need to make cleanups, it's typically best to do so as a separate preparatory patch.)

Show 5 quoted lines
>         if (read_cache() < 0)
>                 die(_("index file corrupt"));
>
> --
> 2.3.1.279.gd534259
Previous: Matthieu MoyNext: Sudhanshu Shekhar
Message 12 of 13 in “reset: enable '-' short-hand for previous branch”
  1. 1/2 reset: enable '-' short-hand for previous branchSudhanshu Shekhar, Mar 10, 2015
  2. 2/2 Added tests for reset -Sudhanshu Shekhar, Mar 10, 2015
  3. Matthieu MoyMar 10, 2015
  4. Sudhanshu ShekharMar 10, 2015
  5. Eric SunshineMar 10, 2015
  6. Eric SunshineMar 10, 2015
  7. 1/2 reset: enable '-' short-hand for previous branchSudhanshu Shekhar, Mar 10, 2015
  8. Eric SunshineMar 13, 2015
  9. 2/2 t7102: add 'reset -' testsSudhanshu Shekhar, Mar 10, 2015
  10. Eric SunshineMar 13, 2015
  11. Matthieu MoyMar 10, 2015
  12. Eric SunshineMar 10, 2015
  13. 1/2 reset: enable '-' short-hand for previous branchSudhanshu Shekhar, Mar 10, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.