mirror of
https://github.com/git/git
synced 2024-10-02 14:45:21 +00:00
diff: factor out --follow pathspec check
In --follow mode, we require exactly one pathspec. We check this condition in two places: - in diff_setup_done(), we complain if --follow is used with an inapropriate pathspec - in git-log's revision "tweak" function, we enable log.follow only if the pathspec allows it The duplication isn't a big deal right now, since the logic is so simple. But in preparation for it becoming more complex, let's pull it into a shared function. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
8e32caaa78
commit
9eac5954e8
|
@ -856,7 +856,7 @@ static void log_setup_revisions_tweak(struct rev_info *rev,
|
||||||
struct setup_revision_opt *opt)
|
struct setup_revision_opt *opt)
|
||||||
{
|
{
|
||||||
if (rev->diffopt.flags.default_follow_renames &&
|
if (rev->diffopt.flags.default_follow_renames &&
|
||||||
rev->prune_data.nr == 1)
|
diff_check_follow_pathspec(&rev->prune_data, 0))
|
||||||
rev->diffopt.flags.follow_renames = 1;
|
rev->diffopt.flags.follow_renames = 1;
|
||||||
|
|
||||||
if (rev->first_parent_only)
|
if (rev->first_parent_only)
|
||||||
|
|
14
diff.c
14
diff.c
|
@ -4721,6 +4721,16 @@ unsigned diff_filter_bit(char status)
|
||||||
return filter_bit[(int) status];
|
return filter_bit[(int) status];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int diff_check_follow_pathspec(struct pathspec *ps, int die_on_error)
|
||||||
|
{
|
||||||
|
if (ps->nr != 1) {
|
||||||
|
if (die_on_error)
|
||||||
|
die(_("--follow requires exactly one pathspec"));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
void diff_setup_done(struct diff_options *options)
|
void diff_setup_done(struct diff_options *options)
|
||||||
{
|
{
|
||||||
unsigned check_mask = DIFF_FORMAT_NAME |
|
unsigned check_mask = DIFF_FORMAT_NAME |
|
||||||
|
@ -4828,8 +4838,8 @@ void diff_setup_done(struct diff_options *options)
|
||||||
|
|
||||||
options->diff_path_counter = 0;
|
options->diff_path_counter = 0;
|
||||||
|
|
||||||
if (options->flags.follow_renames && options->pathspec.nr != 1)
|
if (options->flags.follow_renames)
|
||||||
die(_("--follow requires exactly one pathspec"));
|
diff_check_follow_pathspec(&options->pathspec, 1);
|
||||||
|
|
||||||
if (!options->use_color || external_diff())
|
if (!options->use_color || external_diff())
|
||||||
options->color_moved = 0;
|
options->color_moved = 0;
|
||||||
|
|
7
diff.h
7
diff.h
|
@ -542,6 +542,13 @@ void repo_diff_setup(struct repository *, struct diff_options *);
|
||||||
struct option *add_diff_options(const struct option *, struct diff_options *);
|
struct option *add_diff_options(const struct option *, struct diff_options *);
|
||||||
int diff_opt_parse(struct diff_options *, const char **, int, const char *);
|
int diff_opt_parse(struct diff_options *, const char **, int, const char *);
|
||||||
void diff_setup_done(struct diff_options *);
|
void diff_setup_done(struct diff_options *);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns true if the pathspec can work with --follow mode. If die_on_error is
|
||||||
|
* set, die() with a specific error message rather than returning false.
|
||||||
|
*/
|
||||||
|
int diff_check_follow_pathspec(struct pathspec *ps, int die_on_error);
|
||||||
|
|
||||||
int git_config_rename(const char *var, const char *value);
|
int git_config_rename(const char *var, const char *value);
|
||||||
|
|
||||||
#define DIFF_DETECT_RENAME 1
|
#define DIFF_DETECT_RENAME 1
|
||||||
|
|
Loading…
Reference in a new issue