Justin Tobler <jltobler@xxxxxxxxx> writes: > 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. Makes sense. > > Signed-off-by: Justin Tobler <jltobler@xxxxxxxxx> > --- > 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 *);