Git development
 help / color / mirror / Atom feed
* [PATCH] diff-tree: --find-copies-harder
@ 2005-06-11  1:31 Junio C Hamano
  0 siblings, 0 replies; only message in thread
From: Junio C Hamano @ 2005-06-11  1:31 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: git

Normally, diff-tree does not feed unchanged filepair to diffcore
for performance reasons, so copies are detected only when the
source file of the copy happens to be modified in the same
changeset.  This adds --find-copies-harder flag to tell
diff-tree to sacrifice the performance in order to find copies
the same way as other commands in diff-* family.

Signed-off-by: Junio C Hamano <junkio@cox.net>
---

*** Linus I am submitting this one because some patches on
*** read-tree I am going to send you will need this for
*** formatting into a form that is easier to review.  Also this
*** feature came up during the recent discussion on "what to do
*** with merging rename/copy in the longer term".

 diff-tree.c |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/diff-tree.c b/diff-tree.c
--- a/diff-tree.c
+++ b/diff-tree.c
@@ -11,6 +11,7 @@ static int show_tree_entry_in_recursive 
 static int read_stdin = 0;
 static int diff_output_format = DIFF_FORMAT_HUMAN;
 static int detect_rename = 0;
+static int find_copies_harder = 0;
 static int diff_setup_opt = 0;
 static int diff_score_opt = 0;
 static const char *pickaxe = NULL;
@@ -115,7 +116,7 @@ static int compare_tree_entry(void *tree
 		show_file("+", tree2, size2, base);
 		return 1;
 	}
-	if (!memcmp(sha1, sha2, 20) && mode1 == mode2)
+	if (!find_copies_harder && !memcmp(sha1, sha2, 20) && mode1 == mode2)
 		return 0;
 
 	/*
@@ -199,7 +200,7 @@ static int interesting(void *tree, unsig
 static void show_tree(const char *prefix, void *tree, unsigned long size, const char *base)
 {
 	while (size) {
-		if (interesting(tree, size, base))
+		if (find_copies_harder || interesting(tree, size, base))
 			show_file(prefix, tree, size, base);
 		update_tree_entry(&tree, &size);
 	}
@@ -267,7 +268,7 @@ static void call_diff_setup(void)
 
 static int call_diff_flush(void)
 {
-	diffcore_std(0,
+	diffcore_std(find_copies_harder ? paths : 0,
 		     detect_rename, diff_score_opt,
 		     pickaxe, pickaxe_opts,
 		     diff_break_opt,
@@ -475,6 +476,10 @@ int main(int argc, const char **argv)
 				usage(diff_tree_usage);
 			continue;
 		}
+		if (!strcmp(arg, "--find-copies-harder")) {
+			find_copies_harder = 1;
+			continue;
+		}
 		if (!strcmp(arg, "-z")) {
 			diff_output_format = DIFF_FORMAT_MACHINE;
 			continue;
@@ -502,6 +507,8 @@ int main(int argc, const char **argv)
 		}
 		usage(diff_tree_usage);
 	}
+	if (find_copies_harder && detect_rename != DIFF_DETECT_COPY)
+		usage(diff_tree_usage);
 
 	if (argc > 0) {
 		int i;
------------


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2005-06-11  1:27 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-06-11  1:31 [PATCH] diff-tree: --find-copies-harder Junio C Hamano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox