Re: [PATCH v5 2/4] diff: add option to skip resolving diff statuses
Justin Tobler <jltobler@gmail.com> writes:
Show 7 quoted lines
> By default, `diffcore_std()` resolves the statuses for queued diff file
> pairs by calling `diff_resolve_rename_copy()`. If status information is
> already manually set, invoking `diffcore_std()` may change the status
> value.
>
> Introduce the `skip_resolving_statuses` diff option that prevents
> `diffcore_std()` from resolving file pair statuses when enabled.
Show 38 quoted lines
>
> Signed-off-by: Justin Tobler <jltobler@gmail.com>
> ---
> diff.c | 2 +-
> diff.h | 8 ++++++++
> 2 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/diff.c b/diff.c
> index b5a779f997..37cc88c75b 100644
> --- a/diff.c
> +++ b/diff.c
> @@ -7081,7 +7081,7 @@ void diffcore_std(struct diff_options *options)
> diffcore_order(options->orderfile);
> if (options->rotate_to)
> diffcore_rotate(options);
> - if (!options->found_follow)
> + if (!options->found_follow && !options->skip_resolving_statuses)
> /* See try_to_follow_renames() in tree-diff.c */
> diff_resolve_rename_copy();
> diffcore_apply_filter(options);
> diff --git a/diff.h b/diff.h
> index 63afa17e84..fc791ee2cc 100644
> --- a/diff.h
> +++ b/diff.h
> @@ -353,6 +353,14 @@ struct diff_options {
> /* to support internal diff recursion by --follow hack*/
> int found_follow;
>
> + /*
> + * By default, diffcore_std() resolves the statuses for queued diff file
> + * pairs by calling diff_resolve_rename_copy(). If status information
> + * has already been manually set, this option prevents diffcore_std()
> + * from resetting statuses.
> + */
> + int skip_resolving_statuses;
> +
> /* Callback which allows tweaking the options in diff_setup_done(). */
> void (*set_default)(struct diff_options *);