Re: [PATCH 2/7] diff.c: take "prefix" argument in diff_opt_parse()
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 20, 2016, 20:23 UTC
- Message-ID
- <xmqqr3hc57at.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <1453287968-26000-3-git-send-email-pclouds@gmail.com>
Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:
> This will be important later when diff_opt_parse() accepts paths as > arguments. Paths must be prefixed before access because setup code > moves cwd but does not (and cannot) update command line options.
The above sounds like a sensible thing to do (note: I didn't read the patch or remainder of the series), but makes me wonder how the existing --orderfile option works without this support. Perhaps it is not working and needs to be updated to take advantage of this change, too?
Show 77 quoted lines
>
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
> ---
> builtin/am.c | 2 +-
> diff-no-index.c | 3 ++-
> diff.c | 3 ++-
> diff.h | 2 +-
> revision.c | 2 +-
> 5 files changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/builtin/am.c b/builtin/am.c
> index 9fb42fd..f009b6c 100644
> --- a/builtin/am.c
> +++ b/builtin/am.c
> @@ -1657,7 +1657,7 @@ static int fall_back_threeway(const struct am_state *state, const char *index_pa
>
> init_revisions(&rev_info, NULL);
> rev_info.diffopt.output_format = DIFF_FORMAT_NAME_STATUS;
> - diff_opt_parse(&rev_info.diffopt, &diff_filter_str, 1);
> + diff_opt_parse(&rev_info.diffopt, &diff_filter_str, 1, rev_info.prefix);
> add_pending_sha1(&rev_info, "HEAD", our_tree, 0);
> diff_setup_done(&rev_info.diffopt);
> run_diff_index(&rev_info, 1);
> diff --git a/diff-no-index.c b/diff-no-index.c
> index 491e842..03daadb 100644
> --- a/diff-no-index.c
> +++ b/diff-no-index.c
> @@ -252,7 +252,8 @@ void diff_no_index(struct rev_info *revs,
> else if (!strcmp(argv[i], "--"))
> i++;
> else {
> - j = diff_opt_parse(&revs->diffopt, argv + i, argc - i);
> + j = diff_opt_parse(&revs->diffopt, argv + i, argc - i,
> + revs->prefix);
> if (j <= 0)
> die("invalid diff option/value: %s", argv[i]);
> i += j;
> diff --git a/diff.c b/diff.c
> index 80eb0c2..8d38fe8 100644
> --- a/diff.c
> +++ b/diff.c
> @@ -3693,7 +3693,8 @@ static int parse_ws_error_highlight(struct diff_options *opt, const char *arg)
> return 1;
> }
>
> -int diff_opt_parse(struct diff_options *options, const char **av, int ac)
> +int diff_opt_parse(struct diff_options *options,
> + const char **av, int ac, const char *prefix)
> {
> const char *arg = av[0];
> const char *optarg;
> diff --git a/diff.h b/diff.h
> index f61ee54..76b5536 100644
> --- a/diff.h
> +++ b/diff.h
> @@ -268,7 +268,7 @@ extern int parse_long_opt(const char *opt, const char **argv,
> extern int git_diff_basic_config(const char *var, const char *value, void *cb);
> extern int git_diff_ui_config(const char *var, const char *value, void *cb);
> extern void diff_setup(struct diff_options *);
> -extern int diff_opt_parse(struct diff_options *, const char **, int);
> +extern int diff_opt_parse(struct diff_options *, const char **, int, const char *);
> extern void diff_setup_done(struct diff_options *);
>
> #define DIFF_DETECT_RENAME 1
> diff --git a/revision.c b/revision.c
> index 0a282f5..14daefb 100644
> --- a/revision.c
> +++ b/revision.c
> @@ -2049,7 +2049,7 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
> } else if (!strcmp(arg, "--ignore-missing")) {
> revs->ignore_missing = 1;
> } else {
> - int opts = diff_opt_parse(&revs->diffopt, argv, argc);
> + int opts = diff_opt_parse(&revs->diffopt, argv, argc, revs->prefix);
> if (!opts)
> unkv[(*unkc)++] = arg;
> return opts;