On Wed, Aug 29, 2018 at 5:54 AM Johannes Schindelin <Johannes.Schindelin@xxxxxx> wrote: > > Hi Elijah, > > On Wed, 29 Aug 2018, Elijah Newren wrote: > > > Signed-off-by: Elijah Newren <newren@xxxxxxxxx> > > --- > > 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).