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

Re: [PATCH v7 2/2] pull --rebase: add --[no-]autostash flag

From
Paul Tan <pyokagan@gmail.com>
Date
Mar 11, 2016, 04:51 UTC
Message-ID
<CACRoPnRESpiNL_=rEgw7kRdKjek8Z=qVjPH=BEWsWeYn22YryQ@mail.gmail.com>
In-Reply-To
<1457497100-13045-2-git-send-email-mehul.jain2029@gmail.com>
On Wed, Mar 9, 2016 at 12:18 PM, Mehul Jain <mehul.jain2029@gmail.com> wrote:
Show 54 quoted lines
> If rebase.autoStash configuration variable is set, there is no way to
> override it for "git pull --rebase" from the command line.
>
> Teach "git pull --rebase" the --[no-]autostash command line flag which
> overrides the current value of rebase.autoStash, if set. As "git rebase"
> understands the --[no-]autostash option, it's just a matter of passing
> the option to underlying "git rebase" when "git pull --rebase" is called.
>
> Helped-by: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
> Helped-by: Junio C Hamano <gitster@pobox.com>
> Helped-by: Paul Tan <pyokagan@gmail.com>
> Helped-by: Eric Sunshine <sunshine@sunshineco.com>
> Signed-off-by: Mehul Jain <mehul.jain2029@gmail.com>
> ---
> Previous patches: $gname287709
>
> Changes:
>         - Slight change is documentation.
>
>  Documentation/git-pull.txt |  9 +++++++++
>  builtin/pull.c             | 16 ++++++++++++++--
>  t/t5520-pull.sh            | 39 +++++++++++++++++++++++++++++++++++++++
>  3 files changed, 62 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/git-pull.txt b/Documentation/git-pull.txt
> index a62a2a6..da89be6 100644
> --- a/Documentation/git-pull.txt
> +++ b/Documentation/git-pull.txt
> @@ -128,6 +128,15 @@ unless you have read linkgit:git-rebase[1] carefully.
>  --no-rebase::
>         Override earlier --rebase.
>
> +--autostash::
> +--no-autostash::
> +       Before starting rebase, stash local modifications away (see
> +       linkgit:git-stash.txt[1]) if needed, and apply the stash when
> +       done (this option is only valid when "--rebase" is used).
> ++
> +`--no-autostash` is useful to override the `rebase.autoStash`
> +configuration variable (see linkgit:git-config[1]).
> +
>  Options related to fetching
>  ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> diff --git a/builtin/pull.c b/builtin/pull.c
> index 8a318e9..a01058a 100644
> --- a/builtin/pull.c
> +++ b/builtin/pull.c
> @@ -86,6 +86,7 @@ static char *opt_commit;
>  static char *opt_edit;
>  static char *opt_ff;
>  static char *opt_verify_signatures;
> +static int opt_autostash = -1;
>  static int config_autostash = -1;
Hmm, why can't config_autostash just default to 0?
Show 19 quoted lines
>  static struct argv_array opt_strategies = ARGV_ARRAY_INIT;
>  static struct argv_array opt_strategy_opts = ARGV_ARRAY_INIT;
> @@ -150,6 +151,8 @@ static struct option pull_options[] = {
>         OPT_PASSTHRU(0, "verify-signatures", &opt_verify_signatures, NULL,
>                 N_("verify that the named commit has a valid GPG signature"),
>                 PARSE_OPT_NOARG),
> +       OPT_BOOL(0, "autostash", &opt_autostash,
> +               N_("automatically stash/stash pop before and after rebase")),
>         OPT_PASSTHRU_ARGV('s', "strategy", &opt_strategies, N_("strategy"),
>                 N_("merge strategy to use"),
>                 0),
> @@ -801,6 +804,10 @@ static int run_rebase(const unsigned char *curr_head,
>         argv_array_pushv(&args, opt_strategy_opts.argv);
>         if (opt_gpg_sign)
>                 argv_array_push(&args, opt_gpg_sign);
> +       if (opt_autostash == 1)
> +               argv_array_push(&args, "--autostash");
> +       else if (opt_autostash == 0)
> +               argv_array_push(&args, "--no-autostash");

The precise testing for specific values of -1, 0 and 1 throughout the code makes me uncomfortable. Ordinarily, I would expect a simple

    argv_array_push(&args, opt_autostash ? "--autostash" : "--no-autostash");

Stepping back a bit, the only reason why we introduced opt_autostash = -1 as a possible value is because we need to detect if --[no-]autostash is being used with git-merge. I consider that a kludge, because if git-merge supports --autostash as well (possibly in the future), then we will not need this -1 value.

So, from that point of view, a -1 value is okay as a workaround, but kludges, and hence the -1 value, should be gotten rid off as soon as possible.

Show 10 quoted lines
>
>         argv_array_push(&args, "--onto");
>         argv_array_push(&args, sha1_to_hex(merge_head));
> @@ -851,12 +858,17 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
>                 if (is_null_sha1(orig_head) && !is_cache_unborn())
>                         die(_("Updating an unborn branch with changes added to the index."));
>
> -               if (config_autostash != 1)
> +               if (opt_autostash == -1)
> +                       opt_autostash = config_autostash;

So, if config_autostash defaults to zero, we can be certain that opt_autostash will be either true or false.

> +
> +               if (opt_autostash != 1)

And then we can do if (!opt_autostash) here, instead of making readers wonder why we are testing for the value "1" specifically.

Show 11 quoted lines
>                         die_on_unclean_work_tree(prefix);
>
>                 if (get_rebase_fork_point(rebase_fork_point, repo, *refspecs))
>                         hashclr(rebase_fork_point);
> -       }
> +       } else
> +               if (opt_autostash != -1)
> +                        die(_("--[no-]autostash option is only valid with --rebase."));
>
>         if (run_fetch(repo, refspecs))
>                 return 1;

Thanks, Paul

Previous: Mehul JainNext: Mehul Jain
Message 33 of 44 in “pull --rebase: add --[no-]autostash flag”
  1. 1/2 pull --rebase: add --[no-]autostash flagMehul Jain, Feb 27, 2016
  2. 2/2 Documentation/git-pull.txt: teach 'git pull --rebase' the --[no-]autostash option.Mehul Jain, Feb 27, 2016
  3. Junio C HamanoFeb 27, 2016
  4. Mehul JainFeb 28, 2016
  5. Matthieu MoyFeb 28, 2016
  6. Paul TanFeb 28, 2016
  7. Junio C HamanoFeb 28, 2016
  8. 1/3 pull --rebase: add --[no-]autostash flagMehul Jain, Mar 3, 2016
  9. 2/3 test: add test for --[no-]autostash flagMehul Jain, Mar 3, 2016
  10. Matthieu MoyMar 3, 2016
  11. Mehul JainMar 4, 2016
  12. 3/3 Documentation/git-pull: document --[no-]autostash optionMehul Jain, Mar 3, 2016
  13. Junio C HamanoMar 3, 2016
  14. Mehul JainMar 4, 2016
  15. Matthieu MoyMar 4, 2016
  16. Paul TanMar 4, 2016
  17. Matthieu MoyMar 3, 2016
  18. Eric SunshineMar 4, 2016
  19. Matthieu MoyMar 4, 2016
  20. Mehul JainMar 4, 2016
  21. Matthieu MoyMar 4, 2016
  22. Paul TanMar 4, 2016
  23. pull --rebase: add --[no-]autostash flagMehul Jain, Mar 5, 2016
  24. Mehul JainMar 5, 2016
  25. Junio C HamanoMar 5, 2016
  26. Mehul JainMar 7, 2016
  27. pull --rebase: add --[no-]autostash flagMehul Jain, Mar 7, 2016
  28. Junio C HamanoMar 7, 2016
  29. 1/2 git-pull.c: introduce git_pull_config()Mehul Jain, Mar 8, 2016
  30. 2/2 pull --rebase: add --[no-]autostash flagMehul Jain, Mar 8, 2016
  31. 1/2 git-pull.c: introduce git_pull_config()Mehul Jain, Mar 9, 2016
  32. 2/2 pull --rebase: add --[no-]autostash flagMehul Jain, Mar 9, 2016
  33. Paul TanMar 11, 2016
  34. Mehul JainMar 11, 2016
  35. Matthieu MoyMar 11, 2016
  36. Mehul JainMar 11, 2016
  37. Mehul JainMar 12, 2016
  38. 1/2 git-pull.c: introduce git_pull_config()Mehul Jain, Mar 15, 2016
  39. 2/2 pull --rebase: add --[no-]autostash flagMehul Jain, Mar 15, 2016
  40. Eric SunshineMar 15, 2016
  41. Mehul JainMar 16, 2016
  42. Eric SunshineMar 18, 2016
  43. Mehul JainMar 17, 2016
  44. Eric SunshineMar 18, 2016

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.