mirror of
https://github.com/git/git.git
synced 2026-01-09 01:34:00 +00:00
Merge branch 'kh/format-patch-range-diff-notes'
"git format-patch --range-diff=... --notes=..." did not drive the underlying range-diff with correct --notes parameter, ending up comparing with different set of notes from its main patch output you would get from "git format-patch --notes=..." for a singleton patch. * kh/format-patch-range-diff-notes: format-patch: handle range-diff on notes correctly for single patches revision: add rdiff_log_arg to rev_info range-diff: rename other_arg to log_arg
This commit is contained in:
@@ -1406,13 +1406,12 @@ static void make_cover_letter(struct rev_info *rev, int use_separate_file,
|
|||||||
* can be added later if deemed desirable.
|
* can be added later if deemed desirable.
|
||||||
*/
|
*/
|
||||||
struct diff_options opts;
|
struct diff_options opts;
|
||||||
struct strvec other_arg = STRVEC_INIT;
|
|
||||||
struct range_diff_options range_diff_opts = {
|
struct range_diff_options range_diff_opts = {
|
||||||
.creation_factor = rev->creation_factor,
|
.creation_factor = rev->creation_factor,
|
||||||
.dual_color = 1,
|
.dual_color = 1,
|
||||||
.max_memory = RANGE_DIFF_MAX_MEMORY_DEFAULT,
|
.max_memory = RANGE_DIFF_MAX_MEMORY_DEFAULT,
|
||||||
.diffopt = &opts,
|
.diffopt = &opts,
|
||||||
.other_arg = &other_arg
|
.log_arg = &rev->rdiff_log_arg
|
||||||
};
|
};
|
||||||
|
|
||||||
repo_diff_setup(the_repository, &opts);
|
repo_diff_setup(the_repository, &opts);
|
||||||
@@ -1420,9 +1419,7 @@ static void make_cover_letter(struct rev_info *rev, int use_separate_file,
|
|||||||
opts.use_color = rev->diffopt.use_color;
|
opts.use_color = rev->diffopt.use_color;
|
||||||
diff_setup_done(&opts);
|
diff_setup_done(&opts);
|
||||||
fprintf_ln(rev->diffopt.file, "%s", rev->rdiff_title);
|
fprintf_ln(rev->diffopt.file, "%s", rev->rdiff_title);
|
||||||
get_notes_args(&other_arg, rev);
|
|
||||||
show_range_diff(rev->rdiff1, rev->rdiff2, &range_diff_opts);
|
show_range_diff(rev->rdiff1, rev->rdiff2, &range_diff_opts);
|
||||||
strvec_clear(&other_arg);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2334,6 +2331,7 @@ int cmd_format_patch(int argc,
|
|||||||
rev.rdiff_title = diff_title(&rdiff_title, reroll_count,
|
rev.rdiff_title = diff_title(&rdiff_title, reroll_count,
|
||||||
_("Range-diff:"),
|
_("Range-diff:"),
|
||||||
_("Range-diff against v%d:"));
|
_("Range-diff against v%d:"));
|
||||||
|
get_notes_args(&(rev.rdiff_log_arg), &rev);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -2493,6 +2491,7 @@ done:
|
|||||||
rev.diffopt.no_free = 0;
|
rev.diffopt.no_free = 0;
|
||||||
release_revisions(&rev);
|
release_revisions(&rev);
|
||||||
format_config_release(&cfg);
|
format_config_release(&cfg);
|
||||||
|
strvec_clear(&rev.rdiff_log_arg);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,13 +38,13 @@ int cmd_range_diff(int argc,
|
|||||||
struct repository *repo UNUSED)
|
struct repository *repo UNUSED)
|
||||||
{
|
{
|
||||||
struct diff_options diffopt = { NULL };
|
struct diff_options diffopt = { NULL };
|
||||||
struct strvec other_arg = STRVEC_INIT;
|
struct strvec log_arg = STRVEC_INIT;
|
||||||
struct strvec diff_merges_arg = STRVEC_INIT;
|
struct strvec diff_merges_arg = STRVEC_INIT;
|
||||||
struct range_diff_options range_diff_opts = {
|
struct range_diff_options range_diff_opts = {
|
||||||
.creation_factor = RANGE_DIFF_CREATION_FACTOR_DEFAULT,
|
.creation_factor = RANGE_DIFF_CREATION_FACTOR_DEFAULT,
|
||||||
.max_memory = RANGE_DIFF_MAX_MEMORY_DEFAULT,
|
.max_memory = RANGE_DIFF_MAX_MEMORY_DEFAULT,
|
||||||
.diffopt = &diffopt,
|
.diffopt = &diffopt,
|
||||||
.other_arg = &other_arg
|
.log_arg = &log_arg
|
||||||
};
|
};
|
||||||
int simple_color = -1, left_only = 0, right_only = 0;
|
int simple_color = -1, left_only = 0, right_only = 0;
|
||||||
struct option range_diff_options[] = {
|
struct option range_diff_options[] = {
|
||||||
@@ -53,7 +53,7 @@ int cmd_range_diff(int argc,
|
|||||||
N_("percentage by which creation is weighted")),
|
N_("percentage by which creation is weighted")),
|
||||||
OPT_BOOL(0, "no-dual-color", &simple_color,
|
OPT_BOOL(0, "no-dual-color", &simple_color,
|
||||||
N_("use simple diff colors")),
|
N_("use simple diff colors")),
|
||||||
OPT_PASSTHRU_ARGV(0, "notes", &other_arg,
|
OPT_PASSTHRU_ARGV(0, "notes", &log_arg,
|
||||||
N_("notes"), N_("passed to 'git log'"),
|
N_("notes"), N_("passed to 'git log'"),
|
||||||
PARSE_OPT_OPTARG),
|
PARSE_OPT_OPTARG),
|
||||||
OPT_PASSTHRU_ARGV(0, "diff-merges", &diff_merges_arg,
|
OPT_PASSTHRU_ARGV(0, "diff-merges", &diff_merges_arg,
|
||||||
@@ -93,7 +93,7 @@ int cmd_range_diff(int argc,
|
|||||||
/* If `--diff-merges` was specified, imply `--merges` */
|
/* If `--diff-merges` was specified, imply `--merges` */
|
||||||
if (diff_merges_arg.nr) {
|
if (diff_merges_arg.nr) {
|
||||||
range_diff_opts.include_merges = 1;
|
range_diff_opts.include_merges = 1;
|
||||||
strvec_pushv(&other_arg, diff_merges_arg.v);
|
strvec_pushv(&log_arg, diff_merges_arg.v);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < argc; i++)
|
for (i = 0; i < argc; i++)
|
||||||
@@ -125,7 +125,7 @@ int cmd_range_diff(int argc,
|
|||||||
strbuf_addf(&range1, "%s..%s", argv[0], argv[1]);
|
strbuf_addf(&range1, "%s..%s", argv[0], argv[1]);
|
||||||
strbuf_addf(&range2, "%s..%s", argv[0], argv[2]);
|
strbuf_addf(&range2, "%s..%s", argv[0], argv[2]);
|
||||||
|
|
||||||
strvec_pushv(&other_arg, argv +
|
strvec_pushv(&log_arg, argv +
|
||||||
(dash_dash < 0 ? 3 : dash_dash));
|
(dash_dash < 0 ? 3 : dash_dash));
|
||||||
} else if (dash_dash == 2 ||
|
} else if (dash_dash == 2 ||
|
||||||
(dash_dash < 0 && argc > 1 &&
|
(dash_dash < 0 && argc > 1 &&
|
||||||
@@ -145,7 +145,7 @@ int cmd_range_diff(int argc,
|
|||||||
strbuf_addstr(&range1, argv[0]);
|
strbuf_addstr(&range1, argv[0]);
|
||||||
strbuf_addstr(&range2, argv[1]);
|
strbuf_addstr(&range2, argv[1]);
|
||||||
|
|
||||||
strvec_pushv(&other_arg, argv +
|
strvec_pushv(&log_arg, argv +
|
||||||
(dash_dash < 0 ? 2 : dash_dash));
|
(dash_dash < 0 ? 2 : dash_dash));
|
||||||
} else if (dash_dash == 1 ||
|
} else if (dash_dash == 1 ||
|
||||||
(dash_dash < 0 && argc > 0 &&
|
(dash_dash < 0 && argc > 0 &&
|
||||||
@@ -176,7 +176,7 @@ int cmd_range_diff(int argc,
|
|||||||
strbuf_addf(&range1, "%s..%.*s", b, a_len, a);
|
strbuf_addf(&range1, "%s..%.*s", b, a_len, a);
|
||||||
strbuf_addf(&range2, "%.*s..%s", a_len, a, b);
|
strbuf_addf(&range2, "%.*s..%s", a_len, a, b);
|
||||||
|
|
||||||
strvec_pushv(&other_arg, argv +
|
strvec_pushv(&log_arg, argv +
|
||||||
(dash_dash < 0 ? 1 : dash_dash));
|
(dash_dash < 0 ? 1 : dash_dash));
|
||||||
} else
|
} else
|
||||||
usage_msg_opt(_("need two commit ranges"),
|
usage_msg_opt(_("need two commit ranges"),
|
||||||
@@ -188,7 +188,7 @@ int cmd_range_diff(int argc,
|
|||||||
range_diff_opts.right_only = right_only;
|
range_diff_opts.right_only = right_only;
|
||||||
res = show_range_diff(range1.buf, range2.buf, &range_diff_opts);
|
res = show_range_diff(range1.buf, range2.buf, &range_diff_opts);
|
||||||
|
|
||||||
strvec_clear(&other_arg);
|
strvec_clear(&log_arg);
|
||||||
strvec_clear(&diff_merges_arg);
|
strvec_clear(&diff_merges_arg);
|
||||||
strbuf_release(&range1);
|
strbuf_release(&range1);
|
||||||
strbuf_release(&range2);
|
strbuf_release(&range2);
|
||||||
|
|||||||
@@ -718,7 +718,8 @@ static void show_diff_of_diff(struct rev_info *opt)
|
|||||||
.creation_factor = opt->creation_factor,
|
.creation_factor = opt->creation_factor,
|
||||||
.dual_color = 1,
|
.dual_color = 1,
|
||||||
.max_memory = RANGE_DIFF_MAX_MEMORY_DEFAULT,
|
.max_memory = RANGE_DIFF_MAX_MEMORY_DEFAULT,
|
||||||
.diffopt = &opts
|
.diffopt = &opts,
|
||||||
|
.log_arg = &opt->rdiff_log_arg
|
||||||
};
|
};
|
||||||
|
|
||||||
memcpy(&dq, &diff_queued_diff, sizeof(diff_queued_diff));
|
memcpy(&dq, &diff_queued_diff, sizeof(diff_queued_diff));
|
||||||
|
|||||||
10
range-diff.c
10
range-diff.c
@@ -39,7 +39,7 @@ struct patch_util {
|
|||||||
* as struct object_id (will need to be free()d).
|
* as struct object_id (will need to be free()d).
|
||||||
*/
|
*/
|
||||||
static int read_patches(const char *range, struct string_list *list,
|
static int read_patches(const char *range, struct string_list *list,
|
||||||
const struct strvec *other_arg,
|
const struct strvec *log_arg,
|
||||||
unsigned int include_merges)
|
unsigned int include_merges)
|
||||||
{
|
{
|
||||||
struct child_process cp = CHILD_PROCESS_INIT;
|
struct child_process cp = CHILD_PROCESS_INIT;
|
||||||
@@ -69,8 +69,8 @@ static int read_patches(const char *range, struct string_list *list,
|
|||||||
if (!include_merges)
|
if (!include_merges)
|
||||||
strvec_push(&cp.args, "--no-merges");
|
strvec_push(&cp.args, "--no-merges");
|
||||||
strvec_push(&cp.args, range);
|
strvec_push(&cp.args, range);
|
||||||
if (other_arg)
|
if (log_arg)
|
||||||
strvec_pushv(&cp.args, other_arg->v);
|
strvec_pushv(&cp.args, log_arg->v);
|
||||||
cp.out = -1;
|
cp.out = -1;
|
||||||
cp.no_stdin = 1;
|
cp.no_stdin = 1;
|
||||||
cp.git_cmd = 1;
|
cp.git_cmd = 1;
|
||||||
@@ -594,9 +594,9 @@ int show_range_diff(const char *range1, const char *range2,
|
|||||||
if (range_diff_opts->left_only && range_diff_opts->right_only)
|
if (range_diff_opts->left_only && range_diff_opts->right_only)
|
||||||
res = error(_("options '%s' and '%s' cannot be used together"), "--left-only", "--right-only");
|
res = error(_("options '%s' and '%s' cannot be used together"), "--left-only", "--right-only");
|
||||||
|
|
||||||
if (!res && read_patches(range1, &branch1, range_diff_opts->other_arg, include_merges))
|
if (!res && read_patches(range1, &branch1, range_diff_opts->log_arg, include_merges))
|
||||||
res = error(_("could not parse log for '%s'"), range1);
|
res = error(_("could not parse log for '%s'"), range1);
|
||||||
if (!res && read_patches(range2, &branch2, range_diff_opts->other_arg, include_merges))
|
if (!res && read_patches(range2, &branch2, range_diff_opts->log_arg, include_merges))
|
||||||
res = error(_("could not parse log for '%s'"), range2);
|
res = error(_("could not parse log for '%s'"), range2);
|
||||||
|
|
||||||
if (!res) {
|
if (!res) {
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ struct range_diff_options {
|
|||||||
unsigned include_merges:1;
|
unsigned include_merges:1;
|
||||||
size_t max_memory;
|
size_t max_memory;
|
||||||
const struct diff_options *diffopt; /* may be NULL */
|
const struct diff_options *diffopt; /* may be NULL */
|
||||||
const struct strvec *other_arg; /* may be NULL */
|
const struct strvec *log_arg; /* may be NULL */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -334,6 +334,7 @@ struct rev_info {
|
|||||||
/* range-diff */
|
/* range-diff */
|
||||||
const char *rdiff1;
|
const char *rdiff1;
|
||||||
const char *rdiff2;
|
const char *rdiff2;
|
||||||
|
struct strvec rdiff_log_arg;
|
||||||
int creation_factor;
|
int creation_factor;
|
||||||
const char *rdiff_title;
|
const char *rdiff_title;
|
||||||
|
|
||||||
@@ -410,6 +411,7 @@ struct rev_info {
|
|||||||
.expand_tabs_in_log = -1, \
|
.expand_tabs_in_log = -1, \
|
||||||
.commit_format = CMIT_FMT_DEFAULT, \
|
.commit_format = CMIT_FMT_DEFAULT, \
|
||||||
.expand_tabs_in_log_default = 8, \
|
.expand_tabs_in_log_default = 8, \
|
||||||
|
.rdiff_log_arg = STRVEC_INIT, \
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -707,7 +707,7 @@ test_expect_success 'format-patch --range-diff does not compare notes by default
|
|||||||
! grep "note" 0000-*
|
! grep "note" 0000-*
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'format-patch --notes=custom --range-diff only compares custom notes' '
|
test_expect_success 'format-patch --notes=custom --range-diff --cover-letter only compares custom notes' '
|
||||||
test_when_finished "git notes remove topic unmodified || :" &&
|
test_when_finished "git notes remove topic unmodified || :" &&
|
||||||
git notes add -m "topic note" topic &&
|
git notes add -m "topic note" topic &&
|
||||||
git notes add -m "unmodified note" unmodified &&
|
git notes add -m "unmodified note" unmodified &&
|
||||||
@@ -721,6 +721,20 @@ test_expect_success 'format-patch --notes=custom --range-diff only compares cust
|
|||||||
! grep "## Notes ##" 0000-*
|
! grep "## Notes ##" 0000-*
|
||||||
'
|
'
|
||||||
|
|
||||||
|
# --range-diff on a single commit requires --no-cover-letter
|
||||||
|
test_expect_success 'format-patch --notes=custom --range-diff on single commit only compares custom notes' '
|
||||||
|
test_when_finished "git notes remove HEAD unmodified || :" &&
|
||||||
|
git notes add -m "topic note" HEAD &&
|
||||||
|
test_when_finished "git notes --ref=custom remove HEAD unmodified || :" &&
|
||||||
|
git notes add -m "unmodified note" unmodified &&
|
||||||
|
git notes --ref=custom add -m "topic note (custom)" HEAD &&
|
||||||
|
git notes --ref=custom add -m "unmodified note (custom)" unmodified &&
|
||||||
|
git format-patch --notes=custom --range-diff=$prev \
|
||||||
|
-1 --stdout >actual &&
|
||||||
|
test_grep "## Notes (custom) ##" actual &&
|
||||||
|
test_grep ! "## Notes ##" actual
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'format-patch --range-diff with --no-notes' '
|
test_expect_success 'format-patch --range-diff with --no-notes' '
|
||||||
test_when_finished "git notes remove topic unmodified || :" &&
|
test_when_finished "git notes remove topic unmodified || :" &&
|
||||||
git notes add -m "topic note" topic &&
|
git notes add -m "topic note" topic &&
|
||||||
|
|||||||
Reference in New Issue
Block a user