git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 3/3] format-patch: support --output option

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Nov 4, 2020, 17:27 UTC
Message-ID
<CAPig+cQ7t1by2X0xwddyo40sQdb9BPBKmERpqKR6oMD82kUwgg@mail.gmail.com>
In-Reply-To
<20201104132907.GC3030146@coredump.intra.peff.net>
On Wed, Nov 4, 2020 at 8:29 AM Jeff King <peff@peff.net> wrote:
Show 20 quoted lines
> [...]
> The simplest solution would be to just disallow --output with
> format-patch, as nobody ever intended it to work. However, we have
> accidentally documented it (because format-patch includes diff-options).
> And it does work with "git log", which writes the whole output to the
> specified file. It's easy enough to make that work for format-patch,
> too: it's really the same as --stdout, but pointed at a specific file.
> [...]
> Signed-off-by: Jeff King <peff@peff.net>
> ---
> diff --git a/builtin/log.c b/builtin/log.c
> @@ -1942,11 +1942,18 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
> +       } else if (rev.diffopt.close_file) {
> +               /*
> +                * The diff code parsed --output; it has already opened the
> +                * file, but but we must instruct it not to close after each
> +                * diff.
> +                */
> +               rev.diffopt.close_file = 0;
>         } else {

The commit message's justification for supporting --output seems reasonable. However, my knee-jerk reaction to the implementation was that it feels overly magical and a bit too hacky. I can see the logic in it but it also leaves a bad taste when the implementation has to "undo" a side-effect of some other piece of code, which makes it feel unplanned and fragile. The question which popped into my mind immediately was "why not handle --output explicitly via builtin_format_patch_options[] along with other first-class options?". This review comment may or may not be actionable; it's just expressing surprise and a bit of nose-wrinkling I experienced.

Show 11 quoted lines
> diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh
> @@ -1919,6 +1919,39 @@ test_expect_success 'format-patch -o overrides format.outputDirectory' '
> +test_expect_success 'format-patch forbids multiple outputs' '
> +       rm -fr outfile outdir &&
> +       test_must_fail \
> +               git format-patch --stdout --output=outfile &&
> +       test_must_fail \
> +               git format-patch --stdout --output-directory=outdir &&
> +       test_must_fail \
> +               git format-patch --output=outfile --output-directory=outdir
> +'

I would have expected to see this test added in patch [1/3], and then extended by this patch with the addition of the --output case(s).

Previous: Jeff KingNext: Jeff King
Message 9 of 17 in “[Bug report] Crash when creating patch”
  1. Johannes PostlerNov 4, 2020
  2. Jeff KingNov 4, 2020
  3. 1/3 format-patch: refactor output selectionJeff King, Nov 4, 2020
  4. Eric SunshineNov 4, 2020
  5. Jeff KingNov 4, 2020
  6. 2/3 format-patch: tie file-opening logic to output_directoryJeff King, Nov 4, 2020
  7. Eric SunshineNov 4, 2020
  8. 3/3 format-patch: support --output optionJeff King, Nov 4, 2020
  9. Eric SunshineNov 4, 2020
  10. Jeff KingNov 4, 2020
  11. Eric SunshineNov 4, 2020
  12. Junio C HamanoNov 4, 2020
  13. format-patch --outputJeff King, Nov 4, 2020
  14. 1/3 format-patch: refactor output selectionJeff King, Nov 4, 2020
  15. 2/3 format-patch: tie file-opening logic to output_directoryJeff King, Nov 4, 2020
  16. 3/3 format-patch: support --output optionJeff King, Nov 4, 2020
  17. Johannes PostlerNov 5, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.