[RFC/PATCH 4/4] inexact rename detection eye candy
flat view
STALE3778d
From: Jeff King <hidden>
Date: 2016-06-15 22:50:36
Subsystem:
the rest · Maintainer:
Linus Torvalds
During a merge, we might spend many seconds doing inexact rename detection. It's nice to let the user know that something is actually happening. Signed-off-by: Jeff King <redacted> --- This feels wrong because it's in such a deep library function. At the very least we probably need some way to turn it off, so callers can pass along any --quiet or --no-progress indicators. Though I think it should perhaps be off entirely for any revision traversals (since the progress will be per-commit, so it will be in the middle of log output). And then on for diff (unless --quiet is given), and on for merge. I made it update progress for each of the rename_src * rename_dst similarity estimates. We could just as easily count rename_dst items we look at, but hey, it's eye candy, and obviously bigger numbers are better. diffcore-rename.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/diffcore-rename.c b/diffcore-rename.c
index 1d3d5cd..136a86f 100644
--- a/diffcore-rename.c
+++ b/diffcore-rename.c@@ -5,6 +5,7 @@ #include "diff.h" #include "diffcore.h" #include "hash.h" +#include "progress.h" /* Table of rename/copy destinations */
@@ -449,6 +450,7 @@ void diffcore_rename(struct diff_options *options) struct diff_score *mx; int i, j, rename_count; int num_create, num_src, dst_cnt; + struct progress *progress; if (!minimum_score) minimum_score = DEFAULT_RENAME_SCORE;
@@ -528,6 +530,10 @@ void diffcore_rename(struct diff_options *options) goto cleanup; } + progress = start_progress_delay( + "Performing inexact rename detection", + rename_dst_nr * rename_src_nr, 50, 1); + mx = xcalloc(num_create * NUM_CANDIDATE_PER_DST, sizeof(*mx)); for (dst_cnt = i = 0; i < rename_dst_nr; i++) { struct diff_filespec *two = rename_dst[i].two;
@@ -555,9 +561,11 @@ void diffcore_rename(struct diff_options *options) */ diff_free_filespec_blob(one); diff_free_filespec_blob(two); + display_progress(progress, i*rename_src_nr + j); } dst_cnt++; } + stop_progress(&progress); /* cost matrix sorted by most to least similar pair */ qsort(mx, dst_cnt * NUM_CANDIDATE_PER_DST, sizeof(*mx), score_compare);
--
1.7.4.1.26.g5e991