Git fork

revision: add rdiff_log_arg to rev_info

git-format-patch(1) supports Git notes by showing them beneath the
patch/commit message, similar to git-log(1). The command also supports
showing those same notes ref names in the range diff output.

Note *the same* ref names; any Git notes options or configuration
variables need to be handed off to the range-diff machinery. This works
correctly in the case when the range diff is on the cover letter. But it
does not work correctly when the output is a single patch with an
embedded range diff.

Concretely, git-format-patch(1) needs to pass `--[no-]notes` options
on to the range-diff subprocess in `range-diff.c`. This is handled in
`builtin/log.c` by the local variable `log_arg` in the case of mul-
tiple commits, but not in the single commit case where there is no
cover letter and the range diff is embedded in the patch output; the
range diff is then made in `log-tree.c`, whither `log_arg` has not
been propagated. This means that the range-diff subprocess reverts
to its default behavior, which is to act like git-log(1) w.r.t. notes.

We need to fix this. But first lay the groundwork by converting
`log_arg` to a struct member; next we can simply use that member
in `log-tree.c` without having to thread it from `builtin/log.c`.

No functional changes.

Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

authored by

Kristoffer Haugsbakk and committed by
Junio C Hamano
85bd88a7 71fd6c69

+5 -4
+3 -4
builtin/log.c
··· 1400 1400 * can be added later if deemed desirable. 1401 1401 */ 1402 1402 struct diff_options opts; 1403 - struct strvec log_arg = STRVEC_INIT; 1404 1403 struct range_diff_options range_diff_opts = { 1405 1404 .creation_factor = rev->creation_factor, 1406 1405 .dual_color = 1, 1407 1406 .max_memory = RANGE_DIFF_MAX_MEMORY_DEFAULT, 1408 1407 .diffopt = &opts, 1409 - .log_arg = &log_arg 1408 + .log_arg = &rev->rdiff_log_arg 1410 1409 }; 1411 1410 1412 1411 repo_diff_setup(the_repository, &opts); ··· 1414 1413 opts.use_color = rev->diffopt.use_color; 1415 1414 diff_setup_done(&opts); 1416 1415 fprintf_ln(rev->diffopt.file, "%s", rev->rdiff_title); 1417 - get_notes_args(&log_arg, rev); 1418 1416 show_range_diff(rev->rdiff1, rev->rdiff2, &range_diff_opts); 1419 - strvec_clear(&log_arg); 1420 1417 } 1421 1418 } 1422 1419 ··· 2328 2325 rev.rdiff_title = diff_title(&rdiff_title, reroll_count, 2329 2326 _("Range-diff:"), 2330 2327 _("Range-diff against v%d:")); 2328 + get_notes_args(&(rev.rdiff_log_arg), &rev); 2331 2329 } 2332 2330 2333 2331 /* ··· 2487 2485 rev.diffopt.no_free = 0; 2488 2486 release_revisions(&rev); 2489 2487 format_config_release(&cfg); 2488 + strvec_clear(&rev.rdiff_log_arg); 2490 2489 return 0; 2491 2490 } 2492 2491
+2
revision.h
··· 334 334 /* range-diff */ 335 335 const char *rdiff1; 336 336 const char *rdiff2; 337 + struct strvec rdiff_log_arg; 337 338 int creation_factor; 338 339 const char *rdiff_title; 339 340 ··· 410 411 .expand_tabs_in_log = -1, \ 411 412 .commit_format = CMIT_FMT_DEFAULT, \ 412 413 .expand_tabs_in_log_default = 8, \ 414 + .rdiff_log_arg = STRVEC_INIT, \ 413 415 } 414 416 415 417 /**