Re: [PATCH 2/3] merge-recursive: add ability to turn off directory rename detection
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Aug 29, 2018, 12:54 UTC
- Message-ID
- <nycvar.QRO.7.76.6.1808291452070.71@tvgsbejvaqbjf.bet>
- In-Reply-To
- <20180829070613.11793-3-newren@gmail.com>
Hi Elijah,
On Wed, 29 Aug 2018, Elijah Newren wrote:
Show 29 quoted lines
> Signed-off-by: Elijah Newren <newren@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
Show 30 quoted lines
> + 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
>
>