diff options
author | Junio C Hamano <gitster@pobox.com> | 2010-08-18 12:47:18 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-08-18 12:47:18 -0700 |
commit | bd3a97a27a97485b130802d497214be312b737f9 (patch) | |
tree | 803a7822503dc81a00e54724f3dbe9f5963dec13 /tree-diff.c | |
parent | 6b5005c88b3a0c360249deb8ca8b92201abaa824 (diff) | |
parent | 65113121a50cd765033d51204213c817832c59cf (diff) | |
download | git-bd3a97a27a97485b130802d497214be312b737f9.tar.gz |
Merge branch 'jc/maint-follow-rename-fix'
* jc/maint-follow-rename-fix:
log: test for regression introduced in v1.7.2-rc0~103^2~2
diff --follow: do call diffcore_std() as necessary
diff --follow: do not waste cycles while recursing
Diffstat (limited to 'tree-diff.c')
-rw-r--r-- | tree-diff.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/tree-diff.c b/tree-diff.c index 1fb3e94614..cd659c6fe4 100644 --- a/tree-diff.c +++ b/tree-diff.c @@ -359,6 +359,7 @@ static void try_to_follow_renames(struct tree_desc *t1, struct tree_desc *t2, co diff_tree_release_paths(&diff_opts); /* Go through the new set of filepairing, and see if we find a more interesting one */ + opt->found_follow = 0; for (i = 0; i < q->nr; i++) { struct diff_filepair *p = q->queue[i]; @@ -376,6 +377,16 @@ static void try_to_follow_renames(struct tree_desc *t1, struct tree_desc *t2, co diff_tree_release_paths(opt); opt->paths[0] = xstrdup(p->one->path); diff_tree_setup_paths(opt->paths, opt); + + /* + * The caller expects us to return a set of vanilla + * filepairs to let a later call to diffcore_std() + * it makes to sort the renames out (among other + * things), but we already have found renames + * ourselves; signal diffcore_std() not to muck with + * rename information. + */ + opt->found_follow = 1; break; } } @@ -412,7 +423,7 @@ int diff_tree_sha1(const unsigned char *old, const unsigned char *new, const cha init_tree_desc(&t1, tree1, size1); init_tree_desc(&t2, tree2, size2); retval = diff_tree(&t1, &t2, base, opt); - if (DIFF_OPT_TST(opt, FOLLOW_RENAMES) && diff_might_be_rename()) { + if (!*base && DIFF_OPT_TST(opt, FOLLOW_RENAMES) && diff_might_be_rename()) { init_tree_desc(&t1, tree1, size1); init_tree_desc(&t2, tree2, size2); try_to_follow_renames(&t1, &t2, base, opt); |