Re: [PATCH v2 2/2] notes: add notes.merge option to select default strategy

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Aug 1, 2015 at 7:46 PM, Eric Sunshine <sunshine@xxxxxxxxxxxxxx> wrote:
> On Fri, Jul 31, 2015 at 7:12 PM, Jacob Keller <jacob.e.keller@xxxxxxxxx> wrote:
>> Teach git-notes about a new configuration option "notes.merge" for
>> selecting the default notes merge strategy. Document the option in
>> config.txt and git-notes.txt
>>
>> Add tests for the configuration option. Ensure that command line
>> --strategy option overrides the configured value. Ensure that -s can't
>> be passed with --commit or --abort. Ensure that --abort and --commit
>> can't be used together.
>>
>> Signed-off-by: Jacob Keller <jacob.keller@xxxxxxxxx>
>> Cc: Johan Herland <johan@xxxxxxxxxxx>
>> Cc: Michael Haggerty <mhagger@xxxxxxxxxxxx>
>> Cc: Eric Sunshine <sunshine@xxxxxxxxxxxxxx>
>
> Thanks, this looks better than the previous round. A few comments below...
>
>> diff --git a/Documentation/git-notes.txt b/Documentation/git-notes.txt
>> index 674682b34b83..d8944f5aec60 100644
>> --- a/Documentation/git-notes.txt
>> +++ b/Documentation/git-notes.txt
>> @@ -101,13 +101,13 @@ merge::
>>         any) into the current notes ref (called "local").
>>  +
>>  If conflicts arise and a strategy for automatically resolving
>> -conflicting notes (see the -s/--strategy option) is not given,
>> -the "manual" resolver is used. This resolver checks out the
>> -conflicting notes in a special worktree (`.git/NOTES_MERGE_WORKTREE`),
>> -and instructs the user to manually resolve the conflicts there.
>> -When done, the user can either finalize the merge with
>> -'git notes merge --commit', or abort the merge with
>> -'git notes merge --abort'.
>> +conflicting notes (see the -s/--strategy option or notes.merge
>> +config option) is not given, the "manual" resolver is used.
>> +This resolver checks out the conflicting notes in a special
>> +worktree (`.git/NOTES_MERGE_WORKTREE`), and instructs the user
>> +to manually resolve the conflicts there. When done, the user
>> +can either finalize the merge with 'git notes merge --commit',
>> +or abort the merge with 'git notes merge --abort'.
>
> When you re-wrap the text like this, it's difficult to spot your one
> little change in all the diff noise. For the sake of review, it's
> often better to minimize the change, even if it leaves the text more
> jagged than you'd like.
>

Even if it leaves it incredibly jagged? That is one of the downsides
with diff of flowed text like this :(

>>  remove::
>>         Remove the notes for given objects (defaults to HEAD). When
>> @@ -181,10 +181,10 @@ OPTIONS
>>  -s <strategy>::
>>  --strategy=<strategy>::
>>         When merging notes, resolve notes conflicts using the given
>> -       strategy. The following strategies are recognized: "manual"
>> -       (default), "ours", "theirs", "union" and "cat_sort_uniq".
>> -       See the "NOTES MERGE STRATEGIES" section below for more
>> -       information on each notes merge strategy.
>> +       strategy. Overrides "notes.merge". The following strategies are
>> +       recognized: `manual`, `ours`, `theirs`, `union` and
>> +       `cat_sort_uniq`. See the `NOTES MERGE STRATEGIES` section below
>> +       for more information on each notes merge strategy.
>
> Ditto.
>
>>  --commit::
>>         Finalize an in-progress 'git notes merge'. Use this option
>> diff --git a/builtin/notes.c b/builtin/notes.c
>> index 88fdafb32bc0..728980bc79bf 100644
>> --- a/builtin/notes.c
>> +++ b/builtin/notes.c
>> @@ -741,6 +743,25 @@ static int merge_commit(struct notes_merge_options *o)
>>         return ret;
>>  }
>>
>> +static int parse_notes_strategy(const char *arg, enum notes_merge_strategy *strategy)
>> +{
>> +       if (!strcmp(arg, "manual"))
>> +               *strategy = NOTES_MERGE_RESOLVE_MANUAL;
>> +       else if (!strcmp(arg, "ours"))
>> +               *strategy = NOTES_MERGE_RESOLVE_OURS;
>> +       else if (!strcmp(arg, "theirs"))
>> +               *strategy = NOTES_MERGE_RESOLVE_THEIRS;
>> +       else if (!strcmp(arg, "union"))
>> +               *strategy = NOTES_MERGE_RESOLVE_UNION;
>> +       else if (!strcmp(arg, "cat_sort_uniq"))
>> +               *strategy = NOTES_MERGE_RESOLVE_CAT_SORT_UNIQ;
>> +       else {
>> +               return 1;
>
> In this codebase, it's customary to return 0 on success and -1 on error
>

Fair enough.

>> +       }
>
> Style: drop unnecessary braces
>
>> +
>> +       return 0;
>> +}
>> +
>>  static int merge(int argc, const char **argv, const char *prefix)
>>  {
>>         struct strbuf remote_ref = STRBUF_INIT, msg = STRBUF_INIT;
>> @@ -950,6 +961,18 @@ static int get_ref(int argc, const char **argv, const char *prefix)
>>         return 0;
>>  }
>>
>> +static int git_notes_config(const char *var, const char *value, void *cb)
>> +{
>> +       if (!strcmp(var, "notes.merge")) {
>> +               if (!value)
>> +                       return config_error_nonbool(var);
>> +               if (parse_notes_strategy(value, &merge_strategy))
>> +                       return error("Unknown notes merge strategy: %s", value);
>
> For the non-error case, don't you want to 'return 0' here to indicate
> that you handled the config variable rather than letting it fall
> through to git_default_config() below?
>

Makes sense, I can fix that.

Regards,
Jake

>> +       }
>> +
>> +       return git_default_config(var, value, cb);
>> +}
>> +
>>  int cmd_notes(int argc, const char **argv, const char *prefix)
>>  {
>>         int result;
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]