summaryrefslogtreecommitdiff
path: root/merge-ort.c
diff options
context:
space:
mode:
authorElijah Newren <newren@gmail.com>2021-07-16 05:22:32 (GMT)
committerJunio C Hamano <gitster@pobox.com>2021-07-20 21:47:39 (GMT)
commit528fc51b6d899e080a877f9420efcca86c98b35e (patch)
tree123e14ef8a85b3ac2e56b97637cc044eafae9236 /merge-ort.c
parent785bf2088e54ed8a450edb5c7371286ff6405605 (diff)
downloadgit-528fc51b6d899e080a877f9420efcca86c98b35e.zip
git-528fc51b6d899e080a877f9420efcca86c98b35e.tar.gz
git-528fc51b6d899e080a877f9420efcca86c98b35e.tar.bz2
merge-ort: add some more explanations in collect_merge_info_callback()
The previous patch possibly raises some questions about whether additional cases in collect_merge_info_callback() can be handled early. Add some explanations in the form of comments to help explain these better. While we're at it, add a few comments to denote what a few boolean '0' or '1' values stand for. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'merge-ort.c')
-rw-r--r--merge-ort.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/merge-ort.c b/merge-ort.c
index 5704326..37aaac3 100644
--- a/merge-ort.c
+++ b/merge-ort.c
@@ -1018,8 +1018,8 @@ static int collect_merge_info_callback(int n,
if (side1_matches_mbase && side2_matches_mbase) {
/* mbase, side1, & side2 all match; use mbase as resolution */
setup_path_info(opt, &pi, dirname, info->pathlen, fullpath,
- names, names+0, mbase_null, 0,
- filemask, dirmask, 1);
+ names, names+0, mbase_null, 0 /* df_conflict */,
+ filemask, dirmask, 1 /* resolved */);
return mask;
}
@@ -1061,14 +1061,24 @@ static int collect_merge_info_callback(int n,
}
/*
- * Gather additional information used in rename detection.
+ * Sometimes we can tell that a source path need not be included in
+ * rename detection -- namely, whenever either
+ * side1_matches_mbase && side2_null
+ * or
+ * side2_matches_mbase && side1_null
+ * However, we call collect_rename_info() even in those cases,
+ * because exact renames are cheap and would let us remove both a
+ * source and destination path. We'll cull the unneeded sources
+ * later.
*/
collect_rename_info(opt, names, dirname, fullpath,
filemask, dirmask, match_mask);
/*
- * Record information about the path so we can resolve later in
- * process_entries.
+ * None of the special cases above matched, so we have a
+ * provisional conflict. (Rename detection might allow us to
+ * unconflict some more cases, but that comes later so all we can
+ * do now is record the different non-null file hashes.)
*/
setup_path_info(opt, &pi, dirname, info->pathlen, fullpath,
names, NULL, 0, df_conflict, filemask, dirmask, 0);