mirror of
https://github.com/git/git
synced 2024-11-05 18:59:29 +00:00
6a38e33331
This reverts commitf5bfcc823b
, which made "git log -m" imply "--patch" by default. The logic was that "-m", which makes diff generation for merges perform a diff against each parent, has no use unless I am viewing the diff, so we could save the user some typing by turning on display of the resulting diff automatically. That wasn't expected to adversely affect scripts because scripts would either be using a command like "git diff-tree" that already emits diffs by default or would be combining -m with a diff generation option such as --name-status. By saving typing for interactive use without adversely affecting scripts in the wild, it would be a pure improvement. The problem is that although diff generation options are only relevant for the displayed diff, a script author can imagine them affecting path limiting. For example, I might run git log -w --format=%H -- README hoping to list commits that edited README, excluding whitespace-only changes. In fact, a whitespace-only change is not TREESAME so the use of -w here has no effect (since we don't apply these diff generation flags to the diff_options struct rev_info::pruning used for this purpose), but the documentation suggests that it should work Suppose you specified foo as the <paths>. We shall call commits that modify foo !TREESAME, and the rest TREESAME. (In a diff filtered for foo, they look different and equal, respectively.) and a script author who has not tested whitespace-only changes wouldn't notice. Similarly, a script author could include git log -m --first-parent --format=%H -- README to filter the first-parent history for commits that modified README. The -m is a no-op but it reflects the script author's intent. For example, until1e20a407fe
(stash list: stop passing "-m" to "git log", 2021-05-21), "git stash list" did this. As a result, we can't safely change "-m" to imply "-p" without fear of breaking such scripts. Restore the previous behavior. Noticed because Rust's src/bootstrap/bootstrap.py made use of this same construct: https://github.com/rust-lang/rust/pull/87513. That script has been updated to omit the unnecessary "-m" option, but we can expect other scripts in the wild to have similar expectations. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
584 lines
16 KiB
Bash
Executable file
584 lines
16 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2006 Junio C Hamano
|
|
#
|
|
|
|
test_description='Various diff formatting options'
|
|
|
|
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=master
|
|
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
|
|
|
. ./test-lib.sh
|
|
. "$TEST_DIRECTORY"/lib-diff.sh
|
|
|
|
test_expect_success setup '
|
|
|
|
GIT_AUTHOR_DATE="2006-06-26 00:00:00 +0000" &&
|
|
GIT_COMMITTER_DATE="2006-06-26 00:00:00 +0000" &&
|
|
export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&
|
|
|
|
mkdir dir &&
|
|
mkdir dir2 &&
|
|
for i in 1 2 3; do echo $i; done >file0 &&
|
|
for i in A B; do echo $i; done >dir/sub &&
|
|
cat file0 >file2 &&
|
|
git add file0 file2 dir/sub &&
|
|
git commit -m Initial &&
|
|
|
|
git branch initial &&
|
|
git branch side &&
|
|
|
|
GIT_AUTHOR_DATE="2006-06-26 00:01:00 +0000" &&
|
|
GIT_COMMITTER_DATE="2006-06-26 00:01:00 +0000" &&
|
|
export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&
|
|
|
|
for i in 4 5 6; do echo $i; done >>file0 &&
|
|
for i in C D; do echo $i; done >>dir/sub &&
|
|
rm -f file2 &&
|
|
git update-index --remove file0 file2 dir/sub &&
|
|
git commit -m "Second${LF}${LF}This is the second commit." &&
|
|
|
|
GIT_AUTHOR_DATE="2006-06-26 00:02:00 +0000" &&
|
|
GIT_COMMITTER_DATE="2006-06-26 00:02:00 +0000" &&
|
|
export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&
|
|
|
|
for i in A B C; do echo $i; done >file1 &&
|
|
git add file1 &&
|
|
for i in E F; do echo $i; done >>dir/sub &&
|
|
git update-index dir/sub &&
|
|
git commit -m Third &&
|
|
|
|
GIT_AUTHOR_DATE="2006-06-26 00:03:00 +0000" &&
|
|
GIT_COMMITTER_DATE="2006-06-26 00:03:00 +0000" &&
|
|
export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&
|
|
|
|
git checkout side &&
|
|
for i in A B C; do echo $i; done >>file0 &&
|
|
for i in 1 2; do echo $i; done >>dir/sub &&
|
|
cat dir/sub >file3 &&
|
|
git add file3 &&
|
|
git update-index file0 dir/sub &&
|
|
git commit -m Side &&
|
|
|
|
GIT_AUTHOR_DATE="2006-06-26 00:04:00 +0000" &&
|
|
GIT_COMMITTER_DATE="2006-06-26 00:04:00 +0000" &&
|
|
export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&
|
|
|
|
git checkout master &&
|
|
git pull -s ours . side &&
|
|
|
|
GIT_AUTHOR_DATE="2006-06-26 00:05:00 +0000" &&
|
|
GIT_COMMITTER_DATE="2006-06-26 00:05:00 +0000" &&
|
|
export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&
|
|
|
|
for i in A B C; do echo $i; done >>file0 &&
|
|
for i in 1 2; do echo $i; done >>dir/sub &&
|
|
git update-index file0 dir/sub &&
|
|
|
|
mkdir dir3 &&
|
|
cp dir/sub dir3/sub &&
|
|
test-tool chmtime +1 dir3/sub &&
|
|
|
|
git config log.showroot false &&
|
|
git commit --amend &&
|
|
|
|
GIT_AUTHOR_DATE="2006-06-26 00:06:00 +0000" &&
|
|
GIT_COMMITTER_DATE="2006-06-26 00:06:00 +0000" &&
|
|
export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&
|
|
git checkout -b rearrange initial &&
|
|
for i in B A; do echo $i; done >dir/sub &&
|
|
git add dir/sub &&
|
|
git commit -m "Rearranged lines in dir/sub" &&
|
|
git checkout master &&
|
|
|
|
GIT_AUTHOR_DATE="2006-06-26 00:06:00 +0000" &&
|
|
GIT_COMMITTER_DATE="2006-06-26 00:06:00 +0000" &&
|
|
export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&
|
|
git checkout -b mode initial &&
|
|
git update-index --chmod=+x file0 &&
|
|
git commit -m "update mode" &&
|
|
git checkout -f master &&
|
|
|
|
GIT_AUTHOR_DATE="2006-06-26 00:06:00 +0000" &&
|
|
GIT_COMMITTER_DATE="2006-06-26 00:06:00 +0000" &&
|
|
export GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&
|
|
git checkout -b note initial &&
|
|
git update-index --chmod=+x file2 &&
|
|
git commit -m "update mode (file2)" &&
|
|
git notes add -m "note" &&
|
|
git checkout -f master &&
|
|
|
|
# Same merge as master, but with parents reversed. Hide it in a
|
|
# pseudo-ref to avoid impacting tests with --all.
|
|
commit=$(echo reverse |
|
|
git commit-tree -p master^2 -p master^1 master^{tree}) &&
|
|
git update-ref REVERSE $commit &&
|
|
|
|
git config diff.renames false &&
|
|
|
|
git show-branch
|
|
'
|
|
|
|
: <<\EOF
|
|
! [initial] Initial
|
|
* [master] Merge branch 'side'
|
|
! [rearrange] Rearranged lines in dir/sub
|
|
! [side] Side
|
|
----
|
|
+ [rearrange] Rearranged lines in dir/sub
|
|
- [master] Merge branch 'side'
|
|
* + [side] Side
|
|
* [master^] Third
|
|
* [master~2] Second
|
|
+*++ [initial] Initial
|
|
EOF
|
|
|
|
process_diffs () {
|
|
perl -e '
|
|
my $oid_length = length($ARGV[0]);
|
|
my $x40 = "[0-9a-f]{40}";
|
|
my $xab = "[0-9a-f]{4,16}";
|
|
my $orx = "[0-9a-f]" x $oid_length;
|
|
|
|
sub munge_oid {
|
|
my ($oid) = @_;
|
|
my $x;
|
|
|
|
return "" unless length $oid;
|
|
|
|
if ($oid =~ /^(100644|100755|120000)$/) {
|
|
return $oid;
|
|
}
|
|
|
|
if ($oid =~ /^0*$/) {
|
|
$x = "0";
|
|
} else {
|
|
$x = "f";
|
|
}
|
|
|
|
if (length($oid) == 40) {
|
|
return $x x $oid_length;
|
|
} else {
|
|
return $x x length($oid);
|
|
}
|
|
}
|
|
|
|
while (<STDIN>) {
|
|
s/($orx)/munge_oid($1)/ge;
|
|
s/From ($x40)( |\))/"From " . munge_oid($1) . $2/ge;
|
|
s/commit ($x40)($| \(from )($x40?)/"commit " . munge_oid($1) . $2 . munge_oid($3)/ge;
|
|
s/\b($x40)( |\.\.|$)/munge_oid($1) . $2/ge;
|
|
s/^($x40)($| )/munge_oid($1) . $2/e;
|
|
s/($xab)(\.\.|,| |\.\.\.|$)/munge_oid($1) . $2/ge;
|
|
print;
|
|
}
|
|
' "$ZERO_OID" <"$1"
|
|
}
|
|
|
|
V=$(git version | sed -e 's/^git version //' -e 's/\./\\./g')
|
|
while read magic cmd
|
|
do
|
|
status=success
|
|
case "$magic" in
|
|
'' | '#'*)
|
|
continue ;;
|
|
:*)
|
|
magic=${magic#:}
|
|
label="$magic-$cmd"
|
|
case "$magic" in
|
|
noellipses) ;;
|
|
failure)
|
|
status=failure
|
|
magic=
|
|
label="$cmd" ;;
|
|
*)
|
|
BUG "unknown magic $magic" ;;
|
|
esac ;;
|
|
*)
|
|
cmd="$magic $cmd" magic=
|
|
label="$cmd" ;;
|
|
esac
|
|
test=$(echo "$label" | sed -e 's|[/ ][/ ]*|_|g')
|
|
pfx=$(printf "%04d" $test_count)
|
|
expect="$TEST_DIRECTORY/t4013/diff.$test"
|
|
actual="$pfx-diff.$test"
|
|
|
|
test_expect_$status "git $cmd # magic is ${magic:-(not used)}" '
|
|
{
|
|
echo "$ git $cmd"
|
|
case "$magic" in
|
|
"")
|
|
GIT_PRINT_SHA1_ELLIPSIS=yes git $cmd ;;
|
|
noellipses)
|
|
git $cmd ;;
|
|
esac |
|
|
sed -e "s/^\\(-*\\)$V\\(-*\\)\$/\\1g-i-t--v-e-r-s-i-o-n\2/" \
|
|
-e "s/^\\(.*mixed; boundary=\"-*\\)$V\\(-*\\)\"\$/\\1g-i-t--v-e-r-s-i-o-n\2\"/"
|
|
echo "\$"
|
|
} >"$actual" &&
|
|
if test -f "$expect"
|
|
then
|
|
process_diffs "$actual" >actual &&
|
|
process_diffs "$expect" >expect &&
|
|
case $cmd in
|
|
*format-patch* | *-stat*)
|
|
test_cmp expect actual;;
|
|
*)
|
|
test_cmp expect actual;;
|
|
esac &&
|
|
rm -f "$actual" actual expect
|
|
else
|
|
# this is to help developing new tests.
|
|
cp "$actual" "$expect"
|
|
false
|
|
fi
|
|
'
|
|
done <<\EOF
|
|
diff-tree initial
|
|
diff-tree -r initial
|
|
diff-tree -r --abbrev initial
|
|
diff-tree -r --abbrev=4 initial
|
|
diff-tree --root initial
|
|
diff-tree --root --abbrev initial
|
|
:noellipses diff-tree --root --abbrev initial
|
|
diff-tree --root -r initial
|
|
diff-tree --root -r --abbrev initial
|
|
:noellipses diff-tree --root -r --abbrev initial
|
|
diff-tree --root -r --abbrev=4 initial
|
|
:noellipses diff-tree --root -r --abbrev=4 initial
|
|
diff-tree -p initial
|
|
diff-tree --root -p initial
|
|
diff-tree --root -p --abbrev=10 initial
|
|
diff-tree --root -p --full-index initial
|
|
diff-tree --root -p --full-index --abbrev=10 initial
|
|
diff-tree --patch-with-stat initial
|
|
diff-tree --root --patch-with-stat initial
|
|
diff-tree --patch-with-raw initial
|
|
diff-tree --root --patch-with-raw initial
|
|
|
|
diff-tree --pretty initial
|
|
diff-tree --pretty --root initial
|
|
diff-tree --pretty -p initial
|
|
diff-tree --pretty --stat initial
|
|
diff-tree --pretty --summary initial
|
|
diff-tree --pretty --stat --summary initial
|
|
diff-tree --pretty --root -p initial
|
|
diff-tree --pretty --root --stat initial
|
|
# improved by Timo's patch
|
|
diff-tree --pretty --root --summary initial
|
|
# improved by Timo's patch
|
|
diff-tree --pretty --root --summary -r initial
|
|
diff-tree --pretty --root --stat --summary initial
|
|
diff-tree --pretty --patch-with-stat initial
|
|
diff-tree --pretty --root --patch-with-stat initial
|
|
diff-tree --pretty --patch-with-raw initial
|
|
diff-tree --pretty --root --patch-with-raw initial
|
|
|
|
diff-tree --pretty=oneline initial
|
|
diff-tree --pretty=oneline --root initial
|
|
diff-tree --pretty=oneline -p initial
|
|
diff-tree --pretty=oneline --root -p initial
|
|
diff-tree --pretty=oneline --patch-with-stat initial
|
|
# improved by Timo's patch
|
|
diff-tree --pretty=oneline --root --patch-with-stat initial
|
|
diff-tree --pretty=oneline --patch-with-raw initial
|
|
diff-tree --pretty=oneline --root --patch-with-raw initial
|
|
|
|
diff-tree --pretty side
|
|
diff-tree --pretty -p side
|
|
diff-tree --pretty --patch-with-stat side
|
|
|
|
diff-tree initial mode
|
|
diff-tree --stat initial mode
|
|
diff-tree --summary initial mode
|
|
|
|
diff-tree master
|
|
diff-tree -m master
|
|
diff-tree -p master
|
|
diff-tree -p -m master
|
|
diff-tree -c master
|
|
diff-tree -c --abbrev master
|
|
:noellipses diff-tree -c --abbrev master
|
|
diff-tree --cc master
|
|
# stat only should show the diffstat with the first parent
|
|
diff-tree -c --stat master
|
|
diff-tree --cc --stat master
|
|
diff-tree -c --stat --summary master
|
|
diff-tree --cc --stat --summary master
|
|
# stat summary should show the diffstat and summary with the first parent
|
|
diff-tree -c --stat --summary side
|
|
diff-tree --cc --stat --summary side
|
|
diff-tree --cc --shortstat master
|
|
diff-tree --cc --summary REVERSE
|
|
# improved by Timo's patch
|
|
diff-tree --cc --patch-with-stat master
|
|
# improved by Timo's patch
|
|
diff-tree --cc --patch-with-stat --summary master
|
|
# this is correct
|
|
diff-tree --cc --patch-with-stat --summary side
|
|
|
|
log master
|
|
log -p master
|
|
log --root master
|
|
log --root -p master
|
|
log --patch-with-stat master
|
|
log --root --patch-with-stat master
|
|
log --root --patch-with-stat --summary master
|
|
# improved by Timo's patch
|
|
log --root -c --patch-with-stat --summary master
|
|
# improved by Timo's patch
|
|
log --root --cc --patch-with-stat --summary master
|
|
log --no-diff-merges -p --first-parent master
|
|
log --diff-merges=off -p --first-parent master
|
|
log --first-parent --diff-merges=off -p master
|
|
log -p --first-parent master
|
|
log -p --diff-merges=first-parent master
|
|
log --diff-merges=first-parent master
|
|
log -m -p --first-parent master
|
|
log -m -p master
|
|
log --cc -m -p master
|
|
log -c -m -p master
|
|
log -m --raw master
|
|
log -m --stat master
|
|
log -SF master
|
|
log -S F master
|
|
log -SF -p master
|
|
log -SF master --max-count=0
|
|
log -SF master --max-count=1
|
|
log -SF master --max-count=2
|
|
log -GF master
|
|
log -GF -p master
|
|
log -GF -p --pickaxe-all master
|
|
log -IA -IB -I1 -I2 -p master
|
|
log --decorate --all
|
|
log --decorate=full --all
|
|
|
|
rev-list --parents HEAD
|
|
rev-list --children HEAD
|
|
|
|
whatchanged master
|
|
:noellipses whatchanged master
|
|
whatchanged -p master
|
|
whatchanged --root master
|
|
:noellipses whatchanged --root master
|
|
whatchanged --root -p master
|
|
whatchanged --patch-with-stat master
|
|
whatchanged --root --patch-with-stat master
|
|
whatchanged --root --patch-with-stat --summary master
|
|
# improved by Timo's patch
|
|
whatchanged --root -c --patch-with-stat --summary master
|
|
# improved by Timo's patch
|
|
whatchanged --root --cc --patch-with-stat --summary master
|
|
whatchanged -SF master
|
|
:noellipses whatchanged -SF master
|
|
whatchanged -SF -p master
|
|
|
|
log --patch-with-stat master -- dir/
|
|
whatchanged --patch-with-stat master -- dir/
|
|
log --patch-with-stat --summary master -- dir/
|
|
whatchanged --patch-with-stat --summary master -- dir/
|
|
|
|
show initial
|
|
show --root initial
|
|
show side
|
|
show master
|
|
show -c master
|
|
show -m master
|
|
show --first-parent master
|
|
show --stat side
|
|
show --stat --summary side
|
|
show --patch-with-stat side
|
|
show --patch-with-raw side
|
|
:noellipses show --patch-with-raw side
|
|
show --patch-with-stat --summary side
|
|
|
|
format-patch --stdout initial..side
|
|
format-patch --stdout initial..master^
|
|
format-patch --stdout initial..master
|
|
format-patch --stdout --no-numbered initial..master
|
|
format-patch --stdout --numbered initial..master
|
|
format-patch --attach --stdout initial..side
|
|
format-patch --attach --stdout --suffix=.diff initial..side
|
|
format-patch --attach --stdout initial..master^
|
|
format-patch --attach --stdout initial..master
|
|
format-patch --inline --stdout initial..side
|
|
format-patch --inline --stdout initial..master^
|
|
format-patch --inline --stdout --numbered-files initial..master
|
|
format-patch --inline --stdout initial..master
|
|
format-patch --inline --stdout --subject-prefix=TESTCASE initial..master
|
|
config format.subjectprefix DIFFERENT_PREFIX
|
|
format-patch --inline --stdout initial..master^^
|
|
format-patch --stdout --cover-letter -n initial..master^
|
|
|
|
diff --abbrev initial..side
|
|
diff -U initial..side
|
|
diff -U1 initial..side
|
|
diff -r initial..side
|
|
diff --stat initial..side
|
|
diff -r --stat initial..side
|
|
diff initial..side
|
|
diff --patch-with-stat initial..side
|
|
diff --patch-with-raw initial..side
|
|
:noellipses diff --patch-with-raw initial..side
|
|
diff --patch-with-stat -r initial..side
|
|
diff --patch-with-raw -r initial..side
|
|
:noellipses diff --patch-with-raw -r initial..side
|
|
diff --name-status dir2 dir
|
|
diff --no-index --name-status dir2 dir
|
|
diff --no-index --name-status -- dir2 dir
|
|
diff --no-index dir dir3
|
|
diff master master^ side
|
|
# Can't use spaces...
|
|
diff --line-prefix=abc master master^ side
|
|
diff --dirstat master~1 master~2
|
|
diff --dirstat initial rearrange
|
|
diff --dirstat-by-file initial rearrange
|
|
diff --dirstat --cc master~1 master
|
|
# No-index --abbrev and --no-abbrev
|
|
diff --raw initial
|
|
:noellipses diff --raw initial
|
|
diff --raw --abbrev=4 initial
|
|
:noellipses diff --raw --abbrev=4 initial
|
|
diff --raw --no-abbrev initial
|
|
diff --no-index --raw dir2 dir
|
|
:noellipses diff --no-index --raw dir2 dir
|
|
diff --no-index --raw --abbrev=4 dir2 dir
|
|
:noellipses diff --no-index --raw --abbrev=4 dir2 dir
|
|
diff --no-index --raw --no-abbrev dir2 dir
|
|
|
|
diff-tree --pretty --root --stat --compact-summary initial
|
|
diff-tree --pretty -R --root --stat --compact-summary initial
|
|
diff-tree --pretty note
|
|
diff-tree --pretty --notes note
|
|
diff-tree --format=%N note
|
|
diff-tree --stat --compact-summary initial mode
|
|
diff-tree -R --stat --compact-summary initial mode
|
|
EOF
|
|
|
|
test_expect_success 'log -m matches pure log' '
|
|
git log master >result &&
|
|
process_diffs result >expected &&
|
|
git log -m >result &&
|
|
process_diffs result >actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_expect_success 'log --diff-merges=on matches --diff-merges=separate' '
|
|
git log -p --diff-merges=separate master >result &&
|
|
process_diffs result >expected &&
|
|
git log -p --diff-merges=on master >result &&
|
|
process_diffs result >actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_expect_success 'deny wrong log.diffMerges config' '
|
|
test_config log.diffMerges wrong-value &&
|
|
test_expect_code 128 git log
|
|
'
|
|
|
|
test_expect_success 'git config log.diffMerges first-parent' '
|
|
git log -p --diff-merges=first-parent master >result &&
|
|
process_diffs result >expected &&
|
|
test_config log.diffMerges first-parent &&
|
|
git log -p --diff-merges=on master >result &&
|
|
process_diffs result >actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_expect_success 'git config log.diffMerges first-parent vs -m' '
|
|
git log -p --diff-merges=first-parent master >result &&
|
|
process_diffs result >expected &&
|
|
test_config log.diffMerges first-parent &&
|
|
git log -p -m master >result &&
|
|
process_diffs result >actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
# -m in "git diff-index" means "match missing", that differs
|
|
# from its meaning in "git diff". Let's check it in diff-index.
|
|
# The line in the output for removed file should disappear when
|
|
# we provide -m in diff-index.
|
|
test_expect_success 'git diff-index -m' '
|
|
rm -f file1 &&
|
|
git diff-index HEAD >without-m &&
|
|
lines_count=$(wc -l <without-m) &&
|
|
git diff-index -m HEAD >with-m &&
|
|
git restore file1 &&
|
|
test_line_count = $((lines_count - 1)) with-m
|
|
'
|
|
|
|
test_expect_success 'log -S requires an argument' '
|
|
test_must_fail git log -S
|
|
'
|
|
|
|
test_expect_success 'diff --cached on unborn branch' '
|
|
echo ref: refs/heads/unborn >.git/HEAD &&
|
|
git diff --cached >result &&
|
|
process_diffs result >actual &&
|
|
process_diffs "$TEST_DIRECTORY/t4013/diff.diff_--cached" >expected &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_expect_success 'diff --cached -- file on unborn branch' '
|
|
git diff --cached -- file0 >result &&
|
|
process_diffs result >actual &&
|
|
process_diffs "$TEST_DIRECTORY/t4013/diff.diff_--cached_--_file0" >expected &&
|
|
test_cmp expected actual
|
|
'
|
|
test_expect_success 'diff --line-prefix with spaces' '
|
|
git diff --line-prefix="| | | " --cached -- file0 >result &&
|
|
process_diffs result >actual &&
|
|
process_diffs "$TEST_DIRECTORY/t4013/diff.diff_--line-prefix_--cached_--_file0" >expected &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
test_expect_success 'diff-tree --stdin with log formatting' '
|
|
cat >expect <<-\EOF &&
|
|
Side
|
|
Third
|
|
Second
|
|
EOF
|
|
git rev-list master | git diff-tree --stdin --format=%s -s >actual &&
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'diff -I<regex>: setup' '
|
|
git checkout master &&
|
|
test_seq 50 >file0 &&
|
|
git commit -m "Set up -I<regex> test file" file0 &&
|
|
test_seq 50 | sed -e "s/13/ten and three/" -e "/7\$/d" >file0 &&
|
|
echo >>file0
|
|
'
|
|
test_expect_success 'diff -I<regex>' '
|
|
git diff --ignore-blank-lines -I"ten.*e" -I"^[124-9]" >actual &&
|
|
cat >expect <<-\EOF &&
|
|
diff --git a/file0 b/file0
|
|
--- a/file0
|
|
+++ b/file0
|
|
@@ -34,7 +31,6 @@
|
|
34
|
|
35
|
|
36
|
|
-37
|
|
38
|
|
39
|
|
40
|
|
EOF
|
|
compare_diff_patch expect actual
|
|
'
|
|
|
|
test_expect_success 'diff -I<regex> --stat' '
|
|
git diff --stat --ignore-blank-lines -I"ten.*e" -I"^[124-9]" >actual &&
|
|
cat >expect <<-\EOF &&
|
|
file0 | 1 -
|
|
1 file changed, 1 deletion(-)
|
|
EOF
|
|
test_cmp expect actual
|
|
'
|
|
|
|
test_expect_success 'diff -I<regex>: detect malformed regex' '
|
|
test_expect_code 129 git diff --ignore-matching-lines="^[124-9" 2>error &&
|
|
test_i18ngrep "invalid regex given to -I: " error
|
|
'
|
|
|
|
test_done
|