Hi Elijah,

On Wed, 29 Aug 2018, Elijah Newren wrote:

> Signed-off-by: Elijah Newren <new...@gmail.com>
> ---
>  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?

Ciao,
Dscho

> +             dir_rename_init(dir_re_head);
> +             dir_rename_init(dir_re_merge);
> +     }
>  
>       ri->head_renames  = get_renames(o, head_pairs,
>                                       dir_re_merge, dir_re_head, head,
> @@ -3541,6 +3548,7 @@ void init_merge_options(struct merge_options *o)
>       o->renormalize = 0;
>       o->diff_detect_rename = -1;
>       o->merge_detect_rename = -1;
> +     o->detect_directory_renames = 1;
>       merge_recursive_config(o);
>       merge_verbosity = getenv("GIT_MERGE_VERBOSITY");
>       if (merge_verbosity)
> diff --git a/merge-recursive.h b/merge-recursive.h
> index fa7bc6b683..e39ee5d78b 100644
> --- a/merge-recursive.h
> +++ b/merge-recursive.h
> @@ -18,6 +18,7 @@ struct merge_options {
>       unsigned renormalize : 1;
>       long xdl_opts;
>       int verbosity;
> +     int detect_directory_renames;
>       int diff_detect_rename;
>       int merge_detect_rename;
>       int diff_rename_limit;
> -- 
> 2.18.0.12.g97a29da30a
> 
> 

Reply via email to