diffcore-rename: add function for clearing dir_rename_count

As we adjust the usage of dir_rename_count we want to have a function for clearing, or partially clearing it out. Add a partial_clear_dir_rename_count() function for this purpose. Reviewed-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Elijah Newren committed Feb 27, 2021 at 00:30 UTC cd52e0050f0aa18bb35cda08f2dcbe94943df2cf
3 files changed +17 -9
diffcore-rename.c
+12
@@ -528,6 +528,18 @@ static void initialize_dir_rename_info(struct dir_rename_info *info)
528 }
529 }
530
531 +void partial_clear_dir_rename_count(struct strmap *dir_rename_count)
532 +{
533 + struct hashmap_iter iter;
534 + struct strmap_entry *entry;
535 +
536 + strmap_for_each_entry(dir_rename_count, &iter, entry) {
537 + struct strintmap *counts = entry->value;
538 + strintmap_clear(counts);
539 + }
540 + strmap_partial_clear(dir_rename_count, 1);
541 +}
542 +
543 static void cleanup_dir_rename_info(struct dir_rename_info *info)
544 {
545 if (!info->setup)
diffcore.h
+2
@@ -161,6 +161,8 @@ struct diff_filepair *diff_queue(struct diff_queue_struct *,
161 struct diff_filespec *);
162 void diff_q(struct diff_queue_struct *, struct diff_filepair *);
163
164 +void partial_clear_dir_rename_count(struct strmap *dir_rename_count);
165 +
166 void diffcore_break(struct repository *, int);
167 void diffcore_rename(struct diff_options *);
168 void diffcore_rename_extended(struct diff_options *options,
merge-ort.c
+3 -9
@@ -351,17 +351,11 @@ static void clear_or_reinit_internal_opts(struct merge_options_internal *opti,
351
352 /* Free memory used by various renames maps */
353 for (i = MERGE_SIDE1; i <= MERGE_SIDE2; ++i) {
354 - struct hashmap_iter iter;
355 - struct strmap_entry *entry;
356 -
354 strset_func(&renames->dirs_removed[i]);
355
359 - strmap_for_each_entry(&renames->dir_rename_count[i],
360 - &iter, entry) {
361 - struct strintmap *counts = entry->value;
362 - strintmap_clear(counts);
363 - }
364 - strmap_func(&renames->dir_rename_count[i], 1);
356 + partial_clear_dir_rename_count(&renames->dir_rename_count[i]);
357 + if (!reinitialize)
358 + strmap_clear(&renames->dir_rename_count[i], 1);
359
360 strmap_func(&renames->dir_renames[i], 0);
361 }