Fix changes sometimes disappearing entirely

```git-check-assertions
run test/mechanicaldiff.bats
assert_success

git checkout HEAD~ bin
run test/mechanicaldiff.bats
assert_failure
assert_output --partial "not ok 9 keeps matching change with an extra removed line"
assert_output --partial "not ok 10 keeps matching change with an extra added line"
```
This commit is contained in:
Sven van Heugten 2026-03-06 17:01:00 +01:00
parent c55e0276a6
commit 057686a6b9
No known key found for this signature in database
GPG key ID: D612F88666F4F660
4 changed files with 74 additions and 4 deletions

View file

@ -162,6 +162,71 @@ setup() {
assert_output "$(cat "$BATS_TEST_TMPDIR/diff")"
}
@test "keeps matching change with an extra removed line" {
cat >"$BATS_TEST_TMPDIR/old" <<-'EOF'
foo
bar
baz
EOF
cat >"$BATS_TEST_TMPDIR/new" <<-'EOF'
foo_changed
baz
EOF
git diff --no-index "$BATS_TEST_TMPDIR/old" "$BATS_TEST_TMPDIR/new" \
>"$BATS_TEST_TMPDIR/diff" || true
cat >"$BATS_TEST_TMPDIR/new_kept" <<-'EOF'
foo_changed
bar
baz
EOF
git diff --no-index "$BATS_TEST_TMPDIR/old" \
"$BATS_TEST_TMPDIR/new_kept" \
>"$BATS_TEST_TMPDIR/diff_expected" || true
run mechanicaldiff foo foo_changed <"$BATS_TEST_TMPDIR/diff"
assert_failure
expected="$(sed \
-e 's/new_kept/new/g' \
-e '/^index /d' \
"$BATS_TEST_TMPDIR/diff_expected")"
output_normalized="$(printf '%s\n' "$output" | recountdiff | sed -e '/^index /d')"
assert_equal "$expected" "$output_normalized"
}
@test "keeps matching change with an extra added line" {
cat >"$BATS_TEST_TMPDIR/old" <<-'EOF'
foo
baz
EOF
cat >"$BATS_TEST_TMPDIR/new" <<-'EOF'
foo_changed
bar
baz
EOF
git diff --no-index "$BATS_TEST_TMPDIR/old" "$BATS_TEST_TMPDIR/new" \
>"$BATS_TEST_TMPDIR/diff" || true
cat >"$BATS_TEST_TMPDIR/new_kept" <<-'EOF'
foo_changed
baz
EOF
git diff --no-index "$BATS_TEST_TMPDIR/old" \
"$BATS_TEST_TMPDIR/new_kept" \
>"$BATS_TEST_TMPDIR/diff_expected" || true
run mechanicaldiff foo foo_changed <"$BATS_TEST_TMPDIR/diff"
assert_failure
expected="$(sed \
-e 's/new_kept/new/g' \
-e '/^index /d' \
"$BATS_TEST_TMPDIR/diff_expected")"
output_normalized="$(printf '%s\n' "$output" | recountdiff | sed -e '/^index /d')"
assert_equal "$expected" "$output_normalized"
}
@test "ignores leading and trailing blank lines for comparison" {
cat >"$BATS_TEST_TMPDIR/old" <<-'EOF'