[PATCH 03/17] merge-ort: collect which directories are removed in dirs_removed
From: Elijah Newren <hidden>
Date: 2021-01-04 23:51:15
Subsystem:
the rest · Maintainer:
Linus Torvalds
Signed-off-by: Elijah Newren <redacted> --- merge-ort.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+)
diff --git a/merge-ort.c b/merge-ort.c
index 8b190b0ea5..f67ecdd171 100644
--- a/merge-ort.c
+++ b/merge-ort.c@@ -532,6 +532,27 @@ static void setup_path_info(struct merge_options *opt, result->util = mi; } +static void collect_rename_info(struct merge_options *opt, + struct name_entry *names, + const char *dirname, + const char *fullname, + unsigned filemask, + unsigned dirmask, + unsigned match_mask) +{ + struct rename_info *renames = &opt->priv->renames; + + /* Update dirs_removed, as needed */ + if (dirmask == 1 || dirmask == 3 || dirmask == 5) { + /* absent_mask = 0x07 - dirmask; sides = absent_mask/2 */ + unsigned sides = (0x07 - dirmask)/2; + if (sides & 1) + strset_add(&renames->dirs_removed[1], fullname); + if (sides & 2) + strset_add(&renames->dirs_removed[2], fullname); + } +} + static int collect_merge_info_callback(int n, unsigned long mask, unsigned long dirmask,
@@ -632,6 +653,12 @@ static int collect_merge_info_callback(int n, return mask; } + /* + * Gather additional information used in rename detection. + */ + collect_rename_info(opt, names, dirname, fullpath, + filemask, dirmask, match_mask); + /* * Record information about the path so we can resolve later in * process_entries.
--
2.29.1.106.g3ff750dc32.dirty