]> git.ipfire.org Git - thirdparty/git.git/commitdiff
merge-ort: collect which directories are removed in dirs_removed
authorElijah Newren <newren@gmail.com>
Thu, 7 Jan 2021 21:35:51 +0000 (21:35 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 7 Jan 2021 23:30:03 +0000 (15:30 -0800)
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
merge-ort.c

index 2e6d41b0a0f43cb0b206fca26ac8da6402fa4cae..999a7c91c52de9c400d01ebc951d935846659a35 100644 (file)
@@ -480,6 +480,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,
@@ -580,6 +601,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.