]> git.ipfire.org Git - thirdparty/git.git/commitdiff
merge-ort: add a new toplevel_dir field
authorElijah Newren <newren@gmail.com>
Tue, 19 Jan 2021 19:53:50 +0000 (19:53 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 21 Jan 2021 06:18:55 +0000 (22:18 -0800)
Due to the string-equality-iff-pointer-equality requirements placed on
merged_info.directory_name, apply_directory_rename_modifications() will
need to have access to the exact toplevel directory name string pointer
and can't just use a new empty string.  Store it in a field that we can
use.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
merge-ort.c

index ad8ecb7e448ae638d686fc97ca7ba34822f8e30e..5b3b56dc1cdf82e2119d3606624758b869b29e38 100644 (file)
@@ -168,12 +168,15 @@ struct merge_options_internal {
        struct rename_info renames;
 
        /*
-        * current_dir_name: temporary var used in collect_merge_info_callback()
+        * current_dir_name, toplevel_dir: temporary vars
         *
-        * Used to set merged_info.directory_name; see documentation for that
-        * variable and the requirements placed on that field.
+        * These are used in collect_merge_info_callback(), and will set the
+        * various merged_info.directory_name for the various paths we get;
+        * see documentation for that variable and the requirements placed on
+        * that field.
         */
        const char *current_dir_name;
+       const char *toplevel_dir;
 
        /* call_depth: recursion level counter for merging merge bases */
        int call_depth;
@@ -682,10 +685,10 @@ static int collect_merge_info(struct merge_options *opt,
        int ret;
        struct tree_desc t[3];
        struct traverse_info info;
-       const char *toplevel_dir_placeholder = "";
 
-       opt->priv->current_dir_name = toplevel_dir_placeholder;
-       setup_traverse_info(&info, toplevel_dir_placeholder);
+       opt->priv->toplevel_dir = "";
+       opt->priv->current_dir_name = opt->priv->toplevel_dir;
+       setup_traverse_info(&info, opt->priv->toplevel_dir);
        info.fn = collect_merge_info_callback;
        info.data = opt;
        info.show_all_errors = 1;