Re: [PATCH v6 0/2] blame: make diff algorithm configurable
- From
- Phillip Wood <phillip.wood123@gmail.com>
- Date
- Nov 17, 2025, 14:13 UTC
- Message-ID
- <fd03f2a5-bf9e-453f-97d1-d5a66bc87470@gmail.com>
- In-Reply-To
- <pull.2075.v6.git.git.1763366672.gitgitgadget@gmail.com>
Hi Antonin
On 17/11/2025 08:04, Antonin Delpeuch via GitGitGadget wrote:
> Changes since v5: > > * add back /* clear out previous settings */ comments > * remove whitespace in bash output redirection
Thanks for re-rolling, the range-diff below looks good. Being able to configure the diff algorithm for "git blame" is a nice addition, thanks for working on it.
Phillip
Show 124 quoted lines
> Antonin Delpeuch (2): > xdiff: add 'minimal' to XDF_DIFF_ALGORITHM_MASK > blame: make diff algorithm configurable > > Documentation/diff-algorithm-option.adoc | 20 +++ > Documentation/diff-options.adoc | 21 +-- > Documentation/git-blame.adoc | 2 + > builtin/blame.c | 52 +++++- > diff.c | 1 - > merge-ort.c | 1 - > t/meson.build | 1 + > t/t8015-blame-diff-algorithm.sh | 203 +++++++++++++++++++++++ > xdiff/xdiff.h | 2 +- > 9 files changed, 279 insertions(+), 24 deletions(-) > create mode 100644 Documentation/diff-algorithm-option.adoc > create mode 100755 t/t8015-blame-diff-algorithm.sh > > > base-commit: 4253630c6f07a4bdcc9aa62a50e26a4d466219d1 > Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2075%2Fwetneb%2Fblame_respects_diff_algorithm-v6 > Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2075/wetneb/blame_respects_diff_algorithm-v6 > Pull-Request: https://github.com/git/git/pull/2075 > > Range-diff vs v5: > > 1: e81a5d2bd2 ! 1: 4846715436 xdiff: add 'minimal' to XDF_DIFF_ALGORITHM_MASK > @@ Commit message > > ## diff.c ## > @@ diff.c: static int set_diff_algorithm(struct diff_options *opts, > - if (value < 0) > return -1; > > -- /* clear out previous settings */ > + /* clear out previous settings */ > - DIFF_XDL_CLR(opts, NEED_MINIMAL); > opts->xdl_opts &= ~XDF_DIFF_ALGORITHM_MASK; > opts->xdl_opts |= value; > @@ diff.c: static int set_diff_algorithm(struct diff_options *opts, > > ## merge-ort.c ## > @@ merge-ort.c: int parse_merge_opt(struct merge_options *opt, const char *s) > - long value = parse_algorithm_value(arg); > if (value < 0) > return -1; > -- /* clear out previous settings */ > + /* clear out previous settings */ > - DIFF_XDL_CLR(opt, NEED_MINIMAL); > opt->xdl_opts &= ~XDF_DIFF_ALGORITHM_MASK; > opt->xdl_opts |= value; > 2: 60015bbada ! 2: c477b87cc6 blame: make diff algorithm configurable > @@ t/t8015-blame-diff-algorithm.sh (new) > + Commit_1 } > + EOF > + > -+ git blame file.c > output && > -+ sed -e "s/^[^ ]* (\([^ ]*\) [^)]*)/\1/g" output > without_varying_parts && > -+ sed -e "s/ *$//g" without_varying_parts > actual && > ++ git blame file.c >output && > ++ sed -e "s/^[^ ]* (\([^ ]*\) [^)]*)/\1/g" output >without_varying_parts && > ++ sed -e "s/ *$//g" without_varying_parts >actual && > + test_cmp expected actual > +' > + > @@ t/t8015-blame-diff-algorithm.sh (new) > + Commit_2 } > + EOF > + > -+ git blame file.c --diff-algorithm histogram > output && > -+ sed -e "s/^[^ ]* (\([^ ]*\) [^)]*)/\1/g" output > without_varying_parts && > -+ sed -e "s/ *$//g" without_varying_parts > actual && > ++ git blame file.c --diff-algorithm histogram >output && > ++ sed -e "s/^[^ ]* (\([^ ]*\) [^)]*)/\1/g" output >without_varying_parts && > ++ sed -e "s/ *$//g" without_varying_parts >actual && > + test_cmp expected actual > +' > + > @@ t/t8015-blame-diff-algorithm.sh (new) > + Commit_2 } > + EOF > + > -+ git -c diff.algorithm=histogram blame file.c > output && > ++ git -c diff.algorithm=histogram blame file.c >output && > + sed -e "s/^[^ ]* (\([^ ]*\) [^)]*)/\1/g" \ > -+ -e "s/ *$//g" output > actual && > ++ -e "s/ *$//g" output >actual && > + test_cmp expected actual > +' > + > @@ t/t8015-blame-diff-algorithm.sh (new) > + Commit_2 } > + EOF > + > -+ git -c diff.algorithm=myers blame file.c --diff-algorithm histogram > output && > ++ git -c diff.algorithm=myers blame file.c --diff-algorithm histogram >output && > + sed -e "s/^[^ ]* (\([^ ]*\) [^)]*)/\1/g" \ > -+ -e "s/ *$//g" output > actual && > ++ -e "s/ *$//g" output >actual && > + test_cmp expected actual > +' > + > @@ t/t8015-blame-diff-algorithm.sh (new) > + Commit_2 G > + EOF > + > -+ git blame file.txt --minimal > output && > -+ sed -e "s/^[^ ]* (\([^ ]*\) [^)]*)/\1/g" output > actual && > ++ git blame file.txt --minimal >output && > ++ sed -e "s/^[^ ]* (\([^ ]*\) [^)]*)/\1/g" output >actual && > + test_cmp expected actual > +' > + > @@ t/t8015-blame-diff-algorithm.sh (new) > + Commit_2 G > + EOF > + > -+ git blame file.txt --minimal --diff-algorithm myers > output && > -+ sed -e "s/^[^ ]* (\([^ ]*\) [^)]*)/\1/g" output > actual && > ++ git blame file.txt --minimal --diff-algorithm myers >output && > ++ sed -e "s/^[^ ]* (\([^ ]*\) [^)]*)/\1/g" output >actual && > + test_cmp expected actual > +' > + >