Thread (11 messages) flat view 11 messages, 3 authors, 2018-08-31

Re: [PATCH 2/3] merge-recursive: add ability to turn off directory rename detection

From: Elijah Newren <hidden>
Date: 2018-08-29 23:01:03

On Wed, Aug 29, 2018 at 5:54 AM Johannes Schindelin
[off-list ref] wrote:
Hi Elijah,

On Wed, 29 Aug 2018, Elijah Newren wrote:
quoted
Signed-off-by: Elijah Newren <redacted>
---
 merge-recursive.c | 18 +++++++++++++-----
 merge-recursive.h |  1 +
 2 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/merge-recursive.c b/merge-recursive.c
index f110e1c5ec..bf3cb03d3a 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -2843,12 +2843,19 @@ static int handle_renames(struct merge_options *o,
      head_pairs = get_diffpairs(o, common, head);
      merge_pairs = get_diffpairs(o, common, merge);

-     dir_re_head = get_directory_renames(head_pairs, head);
-     dir_re_merge = get_directory_renames(merge_pairs, merge);
+     if (o->detect_directory_renames) {
+             dir_re_head = get_directory_renames(head_pairs, head);
+             dir_re_merge = get_directory_renames(merge_pairs, merge);

-     handle_directory_level_conflicts(o,
-                                      dir_re_head, head,
-                                      dir_re_merge, merge);
+             handle_directory_level_conflicts(o,
+                                              dir_re_head, head,
+                                              dir_re_merge, merge);
+     } else {
+             dir_re_head  = xmalloc(sizeof(*dir_re_head));
+             dir_re_merge = xmalloc(sizeof(*dir_re_merge));
This is not a suggestion to change anything, but a genuine question out of
curiosity: would it make sense to put the `dir_re_head` and `dir_re_merge`
structures into `struct merge_options` to avoid these extra `malloc()`s?
Or would that cause issues with the recursive nature of the recursive
merge?
That would work to avoid the extra `malloc()`s, and be inline with the
current usage of merge_options.  However, I'm not sure I like the
current usage of merge_options. That struct is supposed to be public
API, but it's got a lot of private internal-only use stuff (and
putting dir_re_head and dir_re_merge there would add more).  I'm
tempted to go the other way and eject some of the other internal-only
stuff from merge_options (or wrap it inside an opaque struct
merge_options_internal* internal field, or something like that).
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help