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