Bug: diff.external --no-ext-diff suppresses --color-moved
From: <hidden>
Date: 2024-06-22 10:01:17
Hello,
I configured "diff.extern" but use aliases for "diff --no-ext-diff". This combination suppresses --color-moved (as well as the corresponding config "diff.colorMoved").
What did you do before the bug happened? (Steps to reproduce your issue)
1. Prepare ~/.gitconfig:
[diff]
#external = echo
2. In some repository, create a moved-lines diff between index and working
directory.
For example, commit this file (the next 9 lines verbatim):
line 1 first one
line 2 second two
line 3 third three
line 4 fourth four
line 5 fifth five
line 6 sixth six
line 7 seventh seven
line 8 eighth eight
line 9 ninth nine
Then, edit it (moving lines exactly) to:
line 4 fourth four
line 5 fifth five
line 6 sixth six
line 7 seventh seven
line 8 eighth eight
line 9 ninth nine
line 1 first one
line 2 second two
line 3 third three
In this state, the command 'git diff --color-moved' should highlight
changes as line moves with default colors purple/cyan.
3. In ~/.gitconfig, uncomment 'external'.
4. In the same repository, trigger the bug by running:
git diff --no-ext-diff --color-moved
What did you expect to happen? (Expected behavior)
The diff should be recognized as moving lines and colorized accordingly. By
default in purple/cyan.
The diff should NOT be colorized red/green.
What happened instead? (Actual behavior)
The diff is colorized in red/green.
What's different between what you expected and what actually happened?
The colorization is expected to indicate moved lines.
The actual colorization indicates deletion/insertion, as if '--color-moved' is
ignored.
Anything else you want to add:
- I assume this bug is up to date with the 'next' branch, because the command
git log v2.45.2..origin/next | grep "no-ext"
finds no match in the repository from github.
- Works the same in the older v2.25.1
- Works the same with 'diff.colorMoved' instead of --color-moved
- Works the same for other values of 'diff.external'
- Works the same when setting custom colors for 'color.diff.oldMoved' etc.
- Works not the same when using --no-ext-diff alone. Only when using
diff.external as well.
[System Info]
git version:
git version 2.45.2
cpu: x86_64
no commit associated with this build
sizeof-long: 8
sizeof-size_t: 8
shell-path: /bin/sh
uname: Linux 5.15.0-107-generic #117~20.04.1-Ubuntu SMP Tue Apr 30 00:00:00 2024 x86_64
compiler info: gnuc: 9.4
libc info: glibc: 2.31
$SHELL (typically, interactive shell): /bin/bash
[Enabled Hooks] (none)