Revision b3f01ff29f7131e959bcfdfd004744d74d5fa319 authored by Junio C Hamano on 01 March 2012, 02:14:16 UTC, committed by Junio C Hamano on 01 March 2012, 20:00:01 UTC
The plumbing "diff" commands look at the working tree files without
refreshing the index themselves for performance reasons (the calling
script is expected to do that upfront just once, before calling one or
more of them).  In the early days of git, they showed the "diff --git"
header before they actually ask the xdiff machinery to produce patches,
and ended up showing only these headers if the real contents are the same
and the difference they noticed was only because the stat info cached in
the index did not match that of the working tree. It was too late for the
implementation to take the header that it already emitted back.

But 3e97c7c (No diff -b/-w output for all-whitespace changes, 2009-11-19)
introduced necessary logic to keep the meta-information headers in a
strbuf and delay their output until the xdiff machinery noticed actual
changes. This was primarily in order to generate patches that ignore
whitespaces. When operating under "-w" mode, we wouldn't know if the
header is needed until we actually look at the resulting patch, so it was
a sensible thing to do, but we did not realize that the same reasoning
applies to stat-dirty paths.

Later, 296c6bb (diff: fix "git show -C -C" output when renaming a binary
file, 2010-05-26) generalized this machinery and added must_show_header
toggle.  This is turned on when the header must be shown even when there
is no patch to be produced, e.g. only the mode was changed, or the path
was renamed, without changing the contents.  However, when it did so, it
still kept the special case for the "-w" mode, which meant that the
plumbing would keep showing these phantom changes.

This corrects this historical inconsistency by allowing the plumbing to
omit paths that are only stat-dirty from its output in the same way as it
handles whitespace only changes under "-w" option.

The change in the behaviour can be seen in the updated test.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 5597e84
History
File Mode Size
Documentation
block-sha1
builtin
compat
contrib
git-gui
git_remote_helpers
gitk-git
gitweb
perl
ppc
t
templates
vcs-svn
xdiff
.gitattributes -rw-r--r-- 105 bytes
.gitignore -rw-r--r-- 3.0 KB
.mailmap -rw-r--r-- 2.7 KB
COPYING -rw-r--r-- 18.3 KB
GIT-VERSION-GEN -rwxr-xr-x 756 bytes
INSTALL -rw-r--r-- 7.4 KB
Makefile -rw-r--r-- 66.8 KB
README -rw-r--r-- 2.4 KB
RelNotes l--------- 32 bytes
abspath.c -rw-r--r-- 2.9 KB
aclocal.m4 -rw-r--r-- 1.4 KB
advice.c -rw-r--r-- 1.4 KB
advice.h -rw-r--r-- 432 bytes
alias.c -rw-r--r-- 1.7 KB
alloc.c -rw-r--r-- 1.7 KB
archive-tar.c -rw-r--r-- 6.3 KB
archive-zip.c -rw-r--r-- 7.3 KB
archive.c -rw-r--r-- 10.2 KB
archive.h -rw-r--r-- 927 bytes
attr.c -rw-r--r-- 17.3 KB
attr.h -rw-r--r-- 972 bytes
base85.c -rw-r--r-- 2.8 KB
bisect.c -rw-r--r-- 23.9 KB
bisect.h -rw-r--r-- 820 bytes
blob.c -rw-r--r-- 565 bytes
blob.h -rw-r--r-- 664 bytes
branch.c -rw-r--r-- 5.4 KB
branch.h -rw-r--r-- 1.0 KB
builtin.h -rw-r--r-- 8.6 KB
bundle.c -rw-r--r-- 10.2 KB
bundle.h -rw-r--r-- 627 bytes
cache-tree.c -rw-r--r-- 15.7 KB
cache-tree.h -rw-r--r-- 1.4 KB
cache.h -rw-r--r-- 38.9 KB
check-builtins.sh -rwxr-xr-x 588 bytes
check-racy.c -rw-r--r-- 538 bytes
check_bindir -rwxr-xr-x 369 bytes
color.c -rw-r--r-- 4.1 KB
color.h -rw-r--r-- 2.2 KB
combine-diff.c -rw-r--r-- 27.9 KB
command-list.txt -rw-r--r-- 7.7 KB
commit.c -rw-r--r-- 19.5 KB
commit.h -rw-r--r-- 5.2 KB
config.c -rw-r--r-- 32.8 KB
config.mak.in -rw-r--r-- 1.7 KB
configure.ac -rw-r--r-- 27.2 KB
connect.c -rw-r--r-- 14.1 KB
convert.c -rw-r--r-- 18.5 KB
copy.c -rw-r--r-- 1.6 KB
csum-file.c -rw-r--r-- 2.5 KB
csum-file.h -rw-r--r-- 761 bytes
ctype.c -rw-r--r-- 873 bytes
daemon.c -rw-r--r-- 26.3 KB
date.c -rw-r--r-- 22.6 KB
decorate.c -rw-r--r-- 1.8 KB
decorate.h -rw-r--r-- 400 bytes
delta.h -rw-r--r-- 3.4 KB
diff-delta.c -rw-r--r-- 15.5 KB
diff-lib.c -rw-r--r-- 14.3 KB
diff-no-index.c -rw-r--r-- 6.0 KB
diff.c -rw-r--r-- 116.6 KB
diff.h -rw-r--r-- 10.3 KB
diffcore-break.c -rw-r--r-- 8.7 KB
diffcore-delta.c -rw-r--r-- 5.4 KB
diffcore-order.c -rw-r--r-- 2.2 KB
diffcore-pickaxe.c -rw-r--r-- 6.8 KB
diffcore-rename.c -rw-r--r-- 16.9 KB
diffcore.h -rw-r--r-- 4.3 KB
dir.c -rw-r--r-- 25.0 KB
dir.h -rw-r--r-- 2.9 KB
editor.c -rw-r--r-- 1.1 KB
entry.c -rw-r--r-- 6.0 KB
environment.c -rw-r--r-- 5.3 KB
exec_cmd.c -rw-r--r-- 3.3 KB
exec_cmd.h -rw-r--r-- 487 bytes
fast-import.c -rw-r--r-- 75.4 KB
fetch-pack.h -rw-r--r-- 479 bytes
fixup-builtins -rwxr-xr-x 432 bytes
fsck.c -rw-r--r-- 9.7 KB
fsck.h -rw-r--r-- 1.0 KB
generate-cmdlist.sh -rwxr-xr-x 443 bytes
git-add--interactive.perl -rwxr-xr-x 34.8 KB
git-am.sh -rwxr-xr-x 19.1 KB
git-archimport.perl -rwxr-xr-x 36.0 KB
git-bisect.sh -rwxr-xr-x 9.8 KB
git-compat-util.h -rw-r--r-- 12.9 KB
git-cvsexportcommit.perl -rwxr-xr-x 12.4 KB
git-cvsimport.perl -rwxr-xr-x 28.5 KB
git-cvsserver.perl -rwxr-xr-x 118.0 KB
git-difftool--helper.sh -rwxr-xr-x 1.7 KB
git-difftool.perl -rwxr-xr-x 2.6 KB
git-filter-branch.sh -rwxr-xr-x 12.0 KB
git-instaweb.sh -rwxr-xr-x 17.4 KB
git-lost-found.sh -rwxr-xr-x 554 bytes
git-merge-octopus.sh -rwxr-xr-x 2.2 KB
git-merge-one-file.sh -rwxr-xr-x 3.7 KB
git-merge-resolve.sh -rwxr-xr-x 944 bytes
git-mergetool--lib.sh -rw-r--r-- 9.0 KB
git-mergetool.sh -rwxr-xr-x 6.1 KB
git-parse-remote.sh -rw-r--r-- 1.9 KB
git-pull.sh -rwxr-xr-x 8.1 KB
git-quiltimport.sh -rwxr-xr-x 3.3 KB
git-rebase--interactive.sh -rwxr-xr-x 25.4 KB
git-rebase.sh -rwxr-xr-x 14.8 KB
git-relink.perl -rwxr-xr-x 4.0 KB
git-remote-testgit.py -rw-r--r-- 5.1 KB
git-repack.sh -rwxr-xr-x 4.5 KB
git-request-pull.sh -rwxr-xr-x 1.6 KB
git-send-email.perl -rwxr-xr-x 38.7 KB
git-sh-setup.sh -rw-r--r-- 4.0 KB
git-stash.sh -rwxr-xr-x 10.2 KB
git-submodule.sh -rwxr-xr-x 17.8 KB
git-svn.perl -rwxr-xr-x 172.9 KB
git-web--browse.sh -rwxr-xr-x 4.1 KB
git.c -rw-r--r-- 15.7 KB
git.spec.in -rw-r--r-- 10.7 KB
graph.c -rw-r--r-- 35.0 KB
graph.h -rw-r--r-- 3.6 KB
grep.c -rw-r--r-- 23.8 KB
grep.h -rw-r--r-- 2.7 KB
hash.c -rw-r--r-- 2.5 KB
hash.h -rw-r--r-- 1.1 KB
help.c -rw-r--r-- 8.4 KB
help.h -rw-r--r-- 906 bytes
hex.c -rw-r--r-- 2.1 KB
http-backend.c -rw-r--r-- 13.3 KB
http-fetch.c -rw-r--r-- 2.3 KB
http-push.c -rw-r--r-- 54.2 KB
http-walker.c -rw-r--r-- 13.9 KB
http.c -rw-r--r-- 32.6 KB
http.h -rw-r--r-- 5.1 KB
ident.c -rw-r--r-- 6.1 KB
imap-send.c -rw-r--r-- 35.2 KB
levenshtein.c -rw-r--r-- 2.5 KB
levenshtein.h -rw-r--r-- 203 bytes
list-objects.c -rw-r--r-- 4.6 KB
list-objects.h -rw-r--r-- 422 bytes
ll-merge.c -rw-r--r-- 10.1 KB
ll-merge.h -rw-r--r-- 567 bytes
lockfile.c -rw-r--r-- 6.3 KB
log-tree.c -rw-r--r-- 17.1 KB
log-tree.h -rw-r--r-- 867 bytes
mailmap.c -rw-r--r-- 6.5 KB
mailmap.h -rw-r--r-- 263 bytes
match-trees.c -rw-r--r-- 8.7 KB
merge-file.c -rw-r--r-- 2.6 KB
merge-recursive.c -rw-r--r-- 42.8 KB
merge-recursive.h -rw-r--r-- 1.6 KB
name-hash.c -rw-r--r-- 2.5 KB
notes-cache.c -rw-r--r-- 2.1 KB
notes-cache.h -rw-r--r-- 500 bytes
notes.c -rw-r--r-- 33.3 KB
notes.h -rw-r--r-- 10.0 KB
object.c -rw-r--r-- 5.8 KB
object.h -rw-r--r-- 2.6 KB
pack-check.c -rw-r--r-- 4.6 KB
pack-refs.c -rw-r--r-- 3.4 KB
pack-refs.h -rw-r--r-- 465 bytes
pack-revindex.c -rw-r--r-- 4.0 KB
pack-revindex.h -rw-r--r-- 223 bytes
pack-write.c -rw-r--r-- 8.0 KB
pack.h -rw-r--r-- 2.3 KB
pager.c -rw-r--r-- 2.2 KB
parse-options.c -rw-r--r-- 16.7 KB
parse-options.h -rw-r--r-- 7.4 KB
patch-delta.c -rw-r--r-- 2.1 KB
patch-ids.c -rw-r--r-- 2.5 KB
patch-ids.h -rw-r--r-- 490 bytes
path.c -rw-r--r-- 17.5 KB
pkt-line.c -rw-r--r-- 3.3 KB
pkt-line.h -rw-r--r-- 589 bytes
preload-index.c -rw-r--r-- 2.3 KB
pretty.c -rw-r--r-- 30.5 KB
progress.c -rw-r--r-- 6.5 KB
progress.h -rw-r--r-- 504 bytes
quote.c -rw-r--r-- 10.9 KB
quote.h -rw-r--r-- 2.7 KB
reachable.c -rw-r--r-- 5.6 KB
reachable.h -rw-r--r-- 127 bytes
read-cache.c -rw-r--r-- 44.3 KB
reflog-walk.c -rw-r--r-- 7.7 KB
reflog-walk.h -rw-r--r-- 664 bytes
refs.c -rw-r--r-- 46.4 KB
refs.h -rw-r--r-- 4.7 KB
remote-curl.c -rw-r--r-- 19.5 KB
remote.c -rw-r--r-- 41.1 KB
remote.h -rw-r--r-- 4.2 KB
replace_object.c -rw-r--r-- 2.6 KB
rerere.c -rw-r--r-- 14.6 KB
rerere.h -rw-r--r-- 505 bytes
resolve-undo.c -rw-r--r-- 3.9 KB
resolve-undo.h -rw-r--r-- 546 bytes
revision.c -rw-r--r-- 57.5 KB
revision.h -rw-r--r-- 4.6 KB
run-command.c -rw-r--r-- 13.3 KB
run-command.h -rw-r--r-- 2.8 KB
send-pack.h -rw-r--r-- 389 bytes
server-info.c -rw-r--r-- 5.1 KB
setup.c -rw-r--r-- 15.8 KB
sha1-lookup.c -rw-r--r-- 7.8 KB
sha1-lookup.h -rw-r--r-- 403 bytes
sha1_file.c -rw-r--r-- 63.9 KB
sha1_name.c -rw-r--r-- 26.5 KB
shallow.c -rw-r--r-- 2.3 KB
shell.c -rw-r--r-- 5.0 KB
shortlog.h -rw-r--r-- 463 bytes
show-index.c -rw-r--r-- 2.2 KB
sideband.c -rw-r--r-- 3.4 KB
sideband.h -rw-r--r-- 326 bytes
sigchain.c -rw-r--r-- 969 bytes
sigchain.h -rw-r--r-- 215 bytes
strbuf.c -rw-r--r-- 8.1 KB
strbuf.h -rw-r--r-- 5.0 KB
string-list.c -rw-r--r-- 4.4 KB
string-list.h -rw-r--r-- 2.1 KB
submodule.c -rw-r--r-- 12.5 KB
submodule.h -rw-r--r-- 757 bytes
symlinks.c -rw-r--r-- 7.9 KB
tag.c -rw-r--r-- 3.0 KB
tag.h -rw-r--r-- 443 bytes
tar.h -rw-r--r-- 644 bytes
test-chmtime.c -rw-r--r-- 2.6 KB
test-ctype.c -rw-r--r-- 1.4 KB
test-date.c -rw-r--r-- 1.4 KB
test-delta.c -rw-r--r-- 1.8 KB
test-dump-cache-tree.c -rw-r--r-- 1.5 KB
test-genrandom.c -rw-r--r-- 722 bytes
test-index-version.c -rw-r--r-- 264 bytes
test-line-buffer.c -rw-r--r-- 906 bytes
test-match-trees.c -rw-r--r-- 588 bytes
test-obj-pool.c -rw-r--r-- 2.5 KB
test-parse-options.c -rw-r--r-- 3.0 KB
test-path-utils.c -rw-r--r-- 872 bytes
test-run-command.c -rw-r--r-- 774 bytes
test-sha1.c -rw-r--r-- 816 bytes
test-sha1.sh -rwxr-xr-x 1.9 KB
test-sigchain.c -rw-r--r-- 344 bytes
test-string-pool.c -rw-r--r-- 654 bytes
test-svn-fe.c -rw-r--r-- 296 bytes
test-treap.c -rw-r--r-- 1.5 KB
thread-utils.c -rw-r--r-- 1.2 KB
thread-utils.h -rw-r--r-- 160 bytes
trace.c -rw-r--r-- 3.6 KB
transport-helper.c -rw-r--r-- 20.3 KB
transport.c -rw-r--r-- 29.4 KB
transport.h -rw-r--r-- 5.5 KB
tree-diff.c -rw-r--r-- 12.4 KB
tree-walk.c -rw-r--r-- 10.2 KB
tree-walk.h -rw-r--r-- 1.8 KB
tree.c -rw-r--r-- 7.0 KB
tree.h -rw-r--r-- 883 bytes
unimplemented.sh -rw-r--r-- 100 bytes
unpack-trees.c -rw-r--r-- 40.3 KB
unpack-trees.h -rw-r--r-- 2.2 KB
upload-pack.c -rw-r--r-- 17.4 KB
url.c -rw-r--r-- 2.6 KB
url.h -rw-r--r-- 301 bytes
usage.c -rw-r--r-- 2.4 KB
userdiff.c -rw-r--r-- 8.0 KB
userdiff.h -rw-r--r-- 566 bytes
utf8.c -rw-r--r-- 12.8 KB
utf8.h -rw-r--r-- 537 bytes
walker.c -rw-r--r-- 7.2 KB
walker.h -rw-r--r-- 1.1 KB
wrap-for-bin.sh -rw-r--r-- 610 bytes
wrapper.c -rw-r--r-- 7.3 KB
write_or_die.c -rw-r--r-- 2.0 KB
ws.c -rw-r--r-- 9.1 KB
wt-status.c -rw-r--r-- 23.5 KB
wt-status.h -rw-r--r-- 1.5 KB
xdiff-interface.c -rw-r--r-- 8.2 KB
xdiff-interface.h -rw-r--r-- 1.1 KB

README

back to top