From: Elijah Newren <redacted>
We are using dir_rename_counts to count the number of other directories
that files within a directory moved to. We only need this information
for directories that disappeared, though, so we can return early from
update_dir_rename_counts() for other paths.
While dirs_removed provides the relevant information for us right now,
we introduce a new info->relevant_source_dirs parameter because future
optimizations will want to change how things are called somewhat.
Signed-off-by: Elijah Newren <redacted>
---
diffcore-rename.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/diffcore-rename.c b/diffcore-rename.c
index 1e4a56adde2c..5de4497e04fa 100644
--- a/diffcore-rename.c
+++ b/diffcore-rename.c
@@ -371,6 +371,7 @@ struct dir_rename_info {
struct strintmap idx_map;
struct strmap dir_rename_guess;
struct strmap *dir_rename_count;
+ struct strset *relevant_source_dirs;
unsigned setup;
};
@@ -460,7 +461,13 @@ static void update_dir_rename_counts(struct dir_rename_info *info,
return;
while (1) {
+ /* Get old_dir, skip if its directory isn't relevant. */
dirname_munge(old_dir);
+ if (info->relevant_source_dirs &&
+ !strset_contains(info->relevant_source_dirs, old_dir))
+ break;
+
+ /* Get new_dir */
dirname_munge(new_dir);
/*@@ -540,6 +547,9 @@ static void initialize_dir_rename_info(struct dir_rename_info *info,
strintmap_init_with_options(&info->idx_map, -1, NULL, 0);
strmap_init_with_options(&info->dir_rename_guess, NULL, 0);
+ /* Setup info->relevant_source_dirs */
+ info->relevant_source_dirs = dirs_removed;
+
/*
* Loop setting up both info->idx_map, and doing setup of
* info->dir_rename_count.
--
gitgitgadget