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

Re: [PATCH] Add --no-autostash flag to git pull --rebase

From
Mehul Jain <mehul.jain2029@gmail.com>
Date
Feb 26, 2016, 17:09 UTC
Message-ID
<CA+DCAeTAAn-xA=3kHBcURzv_1eJRKd7uMZRwaPNbCZbGS2eFLw@mail.gmail.com>
In-Reply-To
<CACRoPnTKRwGmhQOrJsA2ys66RwRVcY1nu+hs_5_YMqgiSUbNiw@mail.gmail.com>
Hi,

Thank you for the suggestions. On Fri, Feb 26, 2016 at 6:17 PM, Paul Tan <pyokagan@gmail.com> wrote:

> Some grammatical/spelling nits below:
Many apologies for my English.
> I think git-pull's documentation should be updated as well to talk
> about this new command-line switch.
OK.
Show 23 quoted lines
>> diff --git a/builtin/pull.c b/builtin/pull.c
>> index 10eff03..9d1a3d0 100644
>> --- a/builtin/pull.c
>> +++ b/builtin/pull.c
>> @@ -85,6 +85,7 @@ static char *opt_squash;
>>  static char *opt_commit;
>>  static char *opt_edit;
>>  static char *opt_ff;
>> +static int opt_autostash = -1;
>>  static char *opt_verify_signatures;
>>  static struct argv_array opt_strategies = ARGV_ARRAY_INIT;
>>  static struct argv_array opt_strategy_opts = ARGV_ARRAY_INIT;
>> @@ -146,6 +147,8 @@ static struct option pull_options[] = {
>>         OPT_PASSTHRU(0, "ff-only", &opt_ff, NULL,
>>                 N_("abort if fast-forward is not possible"),
>>                 PARSE_OPT_NOARG | PARSE_OPT_NONEG),
>> +       OPT_COLOR_FLAG(0,"autostash",&opt_autostash,
>> +               N_("abort if tree is dirty")),
>
> Why OPT_COLOR_FLAG()? And --autostash is not just about aborting if
> the working tree is dirty. Why not just copy the help message from
> git-rebase? Something like:
> "automatically stash/stash pop before and after rebase"

Using OPT_COLOR_FLAG() is wrong, I agree. OPT_BOOL will be a better option. N_("automatically stash/stash pop before and after rebase") is better.

Show 21 quoted lines
>>         OPT_PASSTHRU(0, "verify-signatures", &opt_verify_signatures, NULL,
>>                 N_("verify that the named commit has a valid GPG signature"),
>>                 PARSE_OPT_NOARG),
>> @@ -835,13 +838,14 @@ 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 < 0)
>> +                       if(git_config_get_bool("rebase.autostash",&opt_autostash))
>> +                               opt_autostash = 0;
>
> I wonder if this code could be shortened if we simply just called
> git_config_get_bool() just before parse_options(). That way, we don't
> need to check for the "-1" special value.

Definitely. This way opt_autostash can be initialized with 0, thus default will be false.

Show 20 quoted lines
>>
>> +               if (!opt_autostash)
>>                         die_on_unclean_work_tree(prefix);
>
> OK.
>
>>
>>                 if (get_rebase_fork_point(rebase_fork_point, repo, *refspecs))
>> diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh
>> index c952d5e..512d3bf 100755
>> --- a/t/t5520-pull.sh
>> +++ b/t/t5520-pull.sh
>> @@ -245,6 +245,14 @@ test_expect_success '--rebase fails with multiple branches' '
>>         test modified = "$(git show HEAD:file)"
>>  '
>>
>> +test_expect_success '--rebase --no-autostash fails with dirty working directory' '
>
> Maybe add ..."and rebase.autostash set" to the test name? Describes
> the test better, and is consistent with the name of the test below.
Can be done. But which one of these will be more appropriate:
 "rebase.autostash set" or "rebase.autostash set true".
I prefer latter, as it will maintain consistence with the test name of
"--rebase --autostash", which will be
'--rebase --autostash succeeds with dirty working directory and
rebase.autostash set false.'
Show 20 quoted lines
>> +test_expect_success 'git pull -q --rebase --no-autostash' '
>> +       mkdir clonedqrbnas &&
>> +       (cd clonedqrbnas  && git init &&
>> +       git pull -q --rebase --no-autostash "../parent" >out 2>err &&
>> +       test_must_be_empty err &&
>> +       test_must_be_empty out)
>> +'
>> +
>> +test_expect_success 'git pull -v --rebase --no-autostash' '
>> +       mkdir clonedvrbnas &&
>> +       (cd clonedvrbnas && git init &&
>> +       git pull -v --rebase --no-autostash "../parent" >out 2>err &&
>> +       test -s err &&
>> +       test_must_be_empty out)
>> +'
>
> While more tests are always good, I don't think we need to test for
> "-q" and "-v" with --no-autostash, because it's already covered by the
> test for "git pull -q --rebase". Perhaps with --autostash, but even
> then I don't think we need a test for "-v".

OK then. I will only add tests for "git pull --rebase --no-autostash", "git pull --rebase --autostash" and "git pull -q --rebase --autostash" in t5521-pull-options.sh

Thanks, Mehul Jain

Previous: Paul TanNext: Paul Tan
Message 4 of 8 in “[GSoC] Microproject :- Teaching git pull --rebase the --no-autostash flag”
  1. Mehul JainFeb 26, 2016
  2. Add --no-autostash flag to git pull --rebaseMehul Jain, Feb 26, 2016
  3. Paul TanFeb 26, 2016
  4. Mehul JainFeb 26, 2016
  5. Paul TanFeb 26, 2016
  6. Mehul JainFeb 26, 2016
  7. Matthieu MoyFeb 26, 2016
  8. Philip OakleyFeb 26, 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.