Re: [PATCH v2 1/2] pull --rebase: add --[no-]autostash flag
- From
Paul Tan <pyokagan@gmail.com>
- Date
- Feb 28, 2016, 12:28 UTC
- Message-ID
- <CACRoPnT6Yc_vfrYvzKctL1dDkZCzme-4emLF0MysJq4f_H2OvQ@mail.gmail.com>
- In-Reply-To
- <xmqqk2lqeyzv.fsf@gitster.mtv.corp.google.com>
Hi Junio,
On Sun, Feb 28, 2016 at 3:26 AM, Junio C Hamano <gitster@pobox.com> wrote:
Show 23 quoted lines
> Mehul Jain <mehul.jain2029@gmail.com> writes:
>> @@ -835,13 +841,10 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
>> hashclr(orig_head);
>>
>> if (opt_rebase) {
>> - int autostash = 0;
>> -
>> if (is_null_sha1(orig_head) && !is_cache_unborn())
>> die(_("Updating an unborn branch with changes added to the index."));
>>
>> - git_config_get_bool("rebase.autostash", &autostash);
>> - if (!autostash)
>> + if (!opt_autostash)
>> die_on_unclean_work_tree(prefix);
>
> I would have expected that
>
> * a global opt_autostash is initialized to -1 (unspecified);
>
> * opt_bool() would flip it to either 0 or 1 with --[no-]autostash;
>
> * existing "rebase.autostash" configuration check inside "git pull"
> code gets removed;Removing the "rebase.autostash" configuration check would bring back the problem which 53c76dc (pull: allow dirty tree when rebase.autostash enabled, 2015-07-04) fixed.
Show 19 quoted lines
> * and the code that builds "git rebase" invocation command line > will do > > if (opt_autostash < 0) > ; /* do nothing */ > else if (opt_autostash == 0) > argv_array_push(&args, "--no-autostash"); > else > argv_array_push(&args, "--autostash"); > > Then when "git pull --rebase" is run without "--[no-]autostash", the > underlying "git rebase" would be run without that option, and does its > usual thing, including reading rebase.autostash and deciding to do > "git stash". And when "git pull" is run with "--[no-]autostash", > the underlying "git rebase" would be given the same option, and > would do what it was told to do, ignoring rebase.autostash setting. > > So why does "git pull" still need to look at rebase.autostash > configuration after this change?
Ultimately, git-pull needs to be aware of whether autostash is active or not (and this means rebase.autostash needs to be looked at as well) because if autostash is disabled, git-pull needs to perform the "worktree is clean" check. And this "worktree is clean" check needs to be done *before* git-fetch and git-rebase is run.
See f9189cf (pull --rebase: exit early when the working directory is dirty, 2008-05-21).
Regards, Paul