This series makes full use of exact renames; removing not only a destination
pair, but a source pair as well when an exact rename is found and copy
detection is not turned on.
Changes since v2:
* Fix a comment typo, and fix a multi-line comment that didn't need to be a
multi-line comment
Elijah Newren (2):
diffcore-rename: no point trying to find a match better than exact
diffcore-rename: filter rename_src list when possible
diffcore-rename.c | 71 ++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 61 insertions(+), 10 deletions(-)
base-commit: f0117958910fbc734457a83a9f8ecc3c62463417
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-842%2Fnewren%2Fort-perf-batch-6-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-842/newren/ort-perf-batch-6-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/842
Range-diff vs v2:
1: 770e894b4abd = 1: a59c1960f614 diffcore-rename: no point trying to find a match better than exact
2: 7ae9460d3dba ! 2: dd6595b45640 diffcore-rename: filter rename_src list when possible
@@ diffcore-rename.c: static int find_renames(struct diff_score *mx, int dst_cnt, i
+ if (detecting_copies)
+ return; /* nothing to remove */
+ if (break_idx)
-+ return; /* culling incompatbile with break detection */
++ return; /* culling incompatible with break detection */
+
+ /*
+ * Note on reasons why we cull unneeded sources but not destinations:
@@ diffcore-rename.c: static int find_renames(struct diff_score *mx, int dst_cnt, i
{
int detect_rename = options->detect_rename;
@@ diffcore-rename.c: void diffcore_rename(struct diff_options *options)
+ if (minimum_score == MAX_SCORE)
goto cleanup;
- /*
+- /*
- * Calculate how many renames are left (but all the source
- * files still remain as options for rename/copies!)
-+ * Calculate how many renames are left
- */
+- */
++ /* Calculate how many renames are left */
num_destinations = (rename_dst_nr - rename_count);
+ remove_unneeded_paths_from_src(want_copies);
num_sources = rename_src_nr;
--
gitgitgadget