From: Phillip Wood Date: Thu, 23 Oct 2025 16:03:23 GMT Subject: Re: [PATCH] blame: make diff algorithm configurable Message-ID: <0d6019c7-5e73-4195-b5d2-b43f2cb6399d@gmail.com> In-Reply-To: Hi Antonin On 20/10/2025 15:56, Antonin Delpeuch via GitGitGadget wrote: > From: Antonin Delpeuch > > The diff algorithm used in 'git-blame(1)' can be configured using the > `--diff-algorithm` option or the `diff.algorithm` config variable. > Myers diff remains the default. I think this sounds like a reasonable thing to do, although it is technically a breaking change. > diff --git a/builtin/blame.c b/builtin/blame.c > index 2703820258..177b606e81 100644 > --- a/builtin/blame.c > +++ b/builtin/blame.c > @@ -779,6 +779,19 @@ static int git_blame_config(const char *var, const char *value, > } > } > > + if (!strcmp(var, "diff.algorithm")) { > + long diff_algorithm; > + if (!value) > + return config_error_nonbool(var); > + diff_algorithm = parse_algorithm_value(value); > + if (diff_algorithm < 0) > + return error(_("unknown value for config '%s': %s"), > + var, value); > + xdl_opts &= ~XDF_DIFF_ALGORITHM_MASK; I think this should be xdl_opts &= ~(XDF_DIFF_ALGORITHM_MASK | XDF_NEED_MINIMAL); as you have below for the option parsing. > + xdl_opts |= diff_algorithm; > + return 0; > + } > + > if (git_diff_heuristic_config(var, value, cb) < 0) > return -1; > if (userdiff_config(var, value) < 0) > @@ -824,6 +837,26 @@ static int blame_move_callback(const struct option *option, const char *arg, int > return 0; > } > > +static int blame_diff_algorithm_callback(const struct option *option, > + const char *arg, int unset) > +{ > + int *opt = option->value; > + long value = parse_algorithm_value(arg); > + > + BUG_ON_OPT_NEG(unset); > + > + if (value < 0) > + return error(_("option diff-algorithm accepts \"myers\", " > + "\"minimal\", \"patience\" and \"histogram\"")); > + > + // ignore any previous --minimal setting, following git-diff's behavior Style - oneline comments should look like /* comment */ > + *opt &= ~XDF_NEED_MINIMAL; > + *opt &= ~XDF_DIFF_ALGORITHM_MASK; > + *opt |= value; "git blame" also has a "--minimal" option which now needs to clear the diff algorithm when it sets the minimal flag. Thanks Phillip