Re: [PATCH 2/7] diff.c: take "prefix" argument in diff_opt_parse()
From: Junio C Hamano <hidden>
Date: 2016-06-15 23:07:50
Nguyễn Thái Ngọc Duy [off-list ref] 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?
quoted hunk
Signed-off-by: Nguyễn Thái Ngọc Duy <redacted> --- 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 1diff --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;