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

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

From
Mehul Jain <mehul.jain2029@gmail.com>
Date
Mar 16, 2016, 05:00 UTC
Message-ID
<CA+DCAeRWRiY+qCZ440NbU+DMg0OQ6C1bSpYfsHEqjiOvhX69Eg@mail.gmail.com>
In-Reply-To
<CAPig+cSnp+NsBAMib4pExKCLB5ocGsHWyO7qMU0E91WqE6a5_g@mail.gmail.com>
On Wed, Mar 16, 2016 at 3:13 AM, Eric Sunshine <sunshine@sunshineco.com> wrote:
Show 16 quoted lines
>> diff --git a/Documentation/git-pull.txt b/Documentation/git-pull.txt
>> @@ -128,6 +128,15 @@ unless you have read linkgit:git-rebase[1] carefully.
>> +--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]).
>
> The last couple sentences seem reversed. It feels odd to have the bit
> about --rebase dropped dead in the middle of the description of
> --autostash and --no-autostash. I'd have expected to see --autostash
> and --no-autostash discussed together, and then, as a follow-on,
> mention them being valid only with --rebase.
So you are suggesting something like this:
--autostash::
--no-autostash::
    Before starting rebase, stash local modifications away (see
    linkgit:git-stash.txt[1]) if needed, and apply the stash when
    done. `--no-autostash` is useful to override the `rebase.autoStash`
    configuration variable (see linkgit:git-config[1]).
+
This option is only valid when "--rebase" is used.

Can be done and it make more sense to talk about the validity of the option in a seperate line.

Show 15 quoted lines
>> diff --git a/builtin/pull.c b/builtin/pull.c
>> @@ -851,12 +855,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)
>> +               if (opt_autostash == -1)
>
> In patch 1/2, this changed from 'if (autostash)' to 'if
> (config_autostash)'; it's a bit sad that patch 2/2 then has to touch
> the same code to change it yet again, this time to 'if
> (opt_autostash)'. Have you tried just keeping the original 'autostash'
> variable and modifying its value based upon config_autostash and
> opt_autostash instead? (Not saying that this would be better, but
> interested in knowing if the result is as clean or cleaner or worse.)
Yes, I tried that. Things looked something like this:

In patch 1/2 ...

-    int autostash = 0;
+    int autostash = config_autoshash;
    if (is_null_sha1(orig_head) && !is_cache_unborn())
            die(_("Updating ..."));
-    git_config_get_bool("rebase.autostash", &autostash);
    if (!autostash)
            die_on_unclean_work_tree(prefix);
...
In patch 2/2
...
    int autostash = config_autoshash;
    if (is_null_sha1(orig_head) && !is_cache_unborn())
            die(_("Updating ..."));
+    if (opt_autostash != -1)
+        autostash = opt_autostash;
    if (!autostash)
        die_on_unclean_work_tree(prefix);
...

This implementation looks much more cleaner but we are using some extra space (autostash) to do the task. If everyone is fine with this trade off then I can re-roll a new patch with this method. Comments please.

Show 15 quoted lines
>> +                       opt_autostash = config_autostash;
>> +
>> +               if (!opt_autostash)
>>                         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."));
>
> How about formatting this as a normal 'else if'?
>
>     } else if (opt_autostash != -1)

I thought of it earlier but voted against it as it may reduce the readability of the code.

Show 12 quoted lines
> On the other hand, this error case hanging off the 'rebase'
> conditional is somewhat more difficult to reason about than perhaps it
> ought to be. It might be easier to see what's going on if you get the
> error case out of the way early, and then handle the normal case. That
> is, something like this:
>
>     if (!opt_rebase && opt_autostash != -1)
>         die(_("... is only valid with --rebase"));
>
>     if (opt_rebase) {
>         ...
>     }
This is good. I'll make the changes accordingly.
Thanks for the comments.
Mehul
Previous: Eric SunshineNext: Eric Sunshine
Message 41 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.