Re: [PATCH v2 09/20] merge-ort: record stage and auxiliary info for every path
From: Jonathan Tan <hidden>
Date: 2020-11-06 22:58:34
+static void setup_path_info(struct merge_options *opt, + struct string_list_item *result, + const char *current_dir_name, + int current_dir_name_len, + char *fullpath, /* we'll take over ownership */ + struct name_entry *names, + struct name_entry *merged_version, + unsigned is_null, /* boolean */ + unsigned df_conflict, /* boolean */
Booleans could be int, I think?
+ unsigned filemask,
+ unsigned dirmask,
+ int resolved /* boolean */)
+{
+ struct conflict_info *path_info;
+
+ assert(!is_null || resolved);
+ assert(!df_conflict || !resolved); /* df_conflict implies !resolved */
+ assert(resolved == (merged_version != NULL));
+
+ path_info = xcalloc(1, resolved ? sizeof(struct merged_info) :
+ sizeof(struct conflict_info));
+ path_info->merged.directory_name = current_dir_name;
+ path_info->merged.basename_offset = current_dir_name_len;
+ path_info->merged.clean = !!resolved;
+ if (resolved) {
+ path_info->merged.result.mode = merged_version->mode;
+ oidcpy(&path_info->merged.result.oid, &merged_version->oid);
+ path_info->merged.is_null = !!is_null;
+ } else {
+ int i;
+
+ for (i = 0; i < 3; i++) {
+ path_info->pathnames[i] = fullpath;
+ path_info->stages[i].mode = names[i].mode;
+ oidcpy(&path_info->stages[i].oid, &names[i].oid);
+ }
+ path_info->filemask = filemask;
+ path_info->dirmask = dirmask;
+ path_info->df_conflict = !!df_conflict;
+ }
+ strmap_put(&opt->priv->paths, fullpath, path_info);So these are placed in paths but not unmerged. I'm starting to wonder if struct merge_options_internal should be called merge_options_state or something, and each field having documentation about when they're used (or better yet, have functions like collect_merge_info() return their calculations in return values (which may be "out" parameters) instead of in this struct).
quoted hunk ↗ jump to hunk
+ result->string = fullpath; + result->util = path_info; +} + static int collect_merge_info_callback(int n, unsigned long mask, unsigned long dirmask,@@ -91,10 +136,12 @@ static int collect_merge_info_callback(int n, */ struct merge_options *opt = info->data; struct merge_options_internal *opti = opt->priv; - struct conflict_info *ci; + struct string_list_item pi; /* Path Info */ + struct conflict_info *ci; /* pi.util when there's a conflict */
Looking ahead to patch 10, this seems more like "pi.util unless we know for sure that there's no conflict".