Re: [PATCH 2/2] diff: teach diff to read gitattribute diff-algorithm
- From
Eric Sunshine <sunshine@sunshineco.com>
- Date
- Feb 5, 2023, 17:50 UTC
- Message-ID
- <CAPig+cQNoX1-DN1=aFEX=MxEvoYhdu0NxPyhH++B4_1G2Dmp8w@mail.gmail.com>
- In-Reply-To
- <8e73793b0db3e84366a9c6441cc0fdc04f9614a5.1675568781.git.gitgitgadget@gmail.com>
On Sat, Feb 4, 2023 at 11:47 PM John Cai via GitGitGadget <gitgitgadget@gmail.com> wrote:
Show 18 quoted lines
> It can be useful to specify diff algorithms per file type. For example,
> one may want to use the minimal diff algorithm for .json files, another
> for .c files, etc.
>
> Teach the diff machinery to check attributes for a diff algorithm.
> Enforce precedence by favoring the command line option, then looking at
> attributes, then finally the config.
>
> To enforce precedence order, set the `xdl_opts_command_line` member
> during options pasing to indicate the diff algorithm was set via command
> line args.
>
> Signed-off-by: John Cai <johncai86@gmail.com>
> ---
> diff --git a/diff.c b/diff.c
> @@ -3652,6 +3652,27 @@ static void builtin_diff(const char *name_a,
> + if (!o->xdl_opts_command_line) {
> + static struct attr_check *check;`check` is declared static...
> + const char *one_diff_algo; > + const char *two_diff_algo; > + > + check = attr_check_alloc();
... is allocated here...
Show 12 quoted lines
> + attr_check_append(check, git_attr("diff-algorithm"));
> +
> + git_check_attr(the_repository->index, NULL, one->path, check);
> + one_diff_algo = check->items[0].value;
> + git_check_attr(the_repository->index, NULL, two->path, check);
> + two_diff_algo = check->items[0].value;
> +
> + if (!ATTR_UNSET(one_diff_algo) && !ATTR_UNSET(two_diff_algo) &&
> + !strcmp(one_diff_algo, two_diff_algo))
> + set_diff_algorithm(o, one_diff_algo);
> +
> + attr_check_free(check);... and freed here...
> + }
... so the reason for the `static` declaration is not clear. Am I missing something obvious?