diff options
author | Junio C Hamano <gitster@pobox.com> | 2010-08-13 12:17:45 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-08-13 12:17:45 -0700 |
commit | 44c48a909ae3d49afcaedb2b2cd042d1e329ee93 (patch) | |
tree | 3aefdac22c9d9e52d1f59176169ed03f764920e0 /diff.h | |
parent | 39f75d26e235798681394e46625716c187a4ee3e (diff) | |
download | git-44c48a909ae3d49afcaedb2b2cd042d1e329ee93.tar.gz |
diff --follow: do call diffcore_std() as necessary
Usually, diff frontends populate the output queue with filepairs without
any rename information and call diffcore_std() to sort the renames out.
When --follow is in effect, however, diff-tree family of frontend has a
hack that looks like this:
diff-tree frontend
-> diff_tree_sha1()
. populate diff_queued_diff
. if --follow is in effect and there is only one change that
creates the target path, then
-> try_to_follow_renames()
-> diff_tree_sha1() with no pathspec but with -C
-> diffcore_std() to find renames
. if rename is found, tweak diff_queued_diff and put a
single filepair that records the found rename there
-> diffcore_std()
. tweak elements on diff_queued_diff by
- rename detection
- path ordering
- pickaxe filtering
We need to skip parts of the second call to diffcore_std() that is related
to rename detection, and do so only when try_to_follow_renames() did find
a rename. Earlier 1da6175 (Make diffcore_std only can run once before a
diff_flush, 2010-05-06) tried to deal with this issue incorrectly; it
unconditionally disabled any second call to diffcore_std().
This hopefully fixes the breakage.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'diff.h')
-rw-r--r-- | diff.h | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -126,6 +126,9 @@ struct diff_options { /* this is set by diffcore for DIFF_FORMAT_PATCH */ int found_changes; + /* to support internal diff recursion by --follow hack*/ + int found_follow; + FILE *file; int close_file; |