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

Re: [PATCH v3 4/5] format-patch: teach --no-base

From
René Scharfe <l.s.r@web.de>
Date
Dec 4, 2019, 10:36 UTC
Message-ID
<3d355c0c-805a-a55d-eb4e-e4918585e30c@web.de>
In-Reply-To
<6cba51ca247423c76bda498152c162900aba1b59.1575445583.git.liu.denton@gmail.com>
Am 04.12.19 um 08:47 schrieb Denton Liu:
> If `format.useAutoBase = true`, there was no way to override this from
> the command-line. Teach format-patch the `--no-base` option which
> overrides `format.useAutoBase`.
Show 40 quoted lines
> diff --git a/builtin/log.c b/builtin/log.c
> index 9c44682f61..645d6db7cc 100644
> --- a/builtin/log.c
> +++ b/builtin/log.c
> @@ -1388,6 +1388,23 @@ static int from_callback(const struct option *opt, const char *arg, int unset)
>  	return 0;
>  }
>
> +static int base_callback(const struct option *opt, const char *arg, int unset)
> +{
> +	char **base_commit = opt->value;
> +
> +	free(*base_commit);
> +
> +	if (unset) {
> +		base_auto = 0;
> +		*base_commit = NULL;
> +	} else if (arg) {
> +		*base_commit = xstrdup(arg);
> +	} else {
> +		BUG("arg is NULL");
> +	}
> +	return 0;
> +}
> +
>  struct base_tree_info {
>  	struct object_id base_commit;
>  	int nr_patch_id, alloc_patch_id;
> @@ -1676,8 +1693,9 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
>  			    PARSE_OPT_OPTARG, thread_callback },
>  		OPT_STRING(0, "signature", &signature, N_("signature"),
>  			    N_("add a signature")),
> -		OPT_STRING(0, "base", &base_commit, N_("base-commit"),
> -			   N_("add prerequisite tree info to the patch series")),
> +		{ OPTION_CALLBACK, 0, "base", &base_commit, N_("base-commit"),
> +			   N_("add prerequisite tree info to the patch series"),
> +			   0, base_callback },
>  		OPT_FILENAME(0, "signature-file", &signature_file,
>  				N_("add a signature from a file")),
>  		OPT__QUIET(&quiet, N_("don't print the patch filenames")),

Clearing the global variable base_auto feels unclean to me, as does the introduction of a callback for that purpose. Why not set base_commit after reading the config and before parsing command line options to reflect base_auto? That would achieve the intended precedence in a simpler way, something like this:

diff --git a/builtin/log.c b/builtin/log.c
index a26f223ab4..af1b0d0209 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -1714,6 +1714,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
 		rev.mime_boundary = default_attach;
 		rev.no_inline = 1;
 	}
+	if (base_auto)
+		base_commit = "auto";

 	/*
 	 * Parse the arguments before setup_revisions(), or something
@@ -1973,7 +1975,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
 	}

 	memset(&bases, 0, sizeof(bases));
-	if (base_commit || base_auto) {
+	if (base_commit) {
 		struct commit *base = get_base_commit(base_commit, list, nr);
 		reset_revision_walk();
 		clear_object_flags(UNINTERESTING);
Previous: Denton LiuNext: Junio C Hamano
Message 24 of 33 in “Bug with "git rebase" when format.useAutoBase is set”
  1. Christian BiesingerNov 26, 2019
  2. 0/5 rebase: fix breakage with `format.useAutoBase`Denton Liu, Nov 27, 2019
  3. 1/5 t3400: demonstrate failure with format.useAutoBaseDenton Liu, Nov 27, 2019
  4. Eric SunshineNov 27, 2019
  5. Junio C HamanoNov 30, 2019
  6. 2/5 format-patch: fix indentationDenton Liu, Nov 27, 2019
  7. 3/5 t4014: use `test_config`Denton Liu, Nov 27, 2019
  8. 4/5 format-patch: teach --no-baseDenton Liu, Nov 27, 2019
  9. 5/5 rebase: fix `format.useAutoBase` breakageDenton Liu, Nov 27, 2019
  10. Eric SunshineNov 27, 2019
  11. Christian BiesingerNov 27, 2019
  12. 0/5 rebase: fix breakage with `format.useAutoBase`Denton Liu, Nov 27, 2019
  13. 1/5 t3400: demonstrate failure with format.useAutoBaseDenton Liu, Nov 27, 2019
  14. 2/5 format-patch: fix indentationDenton Liu, Nov 27, 2019
  15. 3/5 t4014: use test_config()Denton Liu, Nov 27, 2019
  16. 4/5 format-patch: teach --no-baseDenton Liu, Nov 27, 2019
  17. Denton LiuNov 27, 2019
  18. 5/5 rebase: fix format.useAutoBase breakageDenton Liu, Nov 27, 2019
  19. Christian BiesingerDec 4, 2019
  20. 0/5 rebase: fix breakage with `format.useAutoBase`Denton Liu, Dec 4, 2019
  21. 1/5 t3400: demonstrate failure with format.useAutoBaseDenton Liu, Dec 4, 2019
  22. 2/5 format-patch: fix indentationDenton Liu, Dec 4, 2019
  23. 4/5 format-patch: teach --no-baseDenton Liu, Dec 4, 2019
  24. René ScharfeDec 4, 2019
  25. Junio C HamanoDec 4, 2019
  26. 3/5 t4014: use test_config()Denton Liu, Dec 4, 2019
  27. 5/5 rebase: fix format.useAutoBase breakageDenton Liu, Dec 4, 2019
  28. 0/5 rebase: fix breakage with `format.useAutoBase`Denton Liu, Dec 4, 2019
  29. 1/5 t3400: demonstrate failure with format.useAutoBaseDenton Liu, Dec 4, 2019
  30. 2/5 format-patch: fix indentationDenton Liu, Dec 4, 2019
  31. 3/5 t4014: use test_config()Denton Liu, Dec 4, 2019
  32. 4/5 format-patch: teach --no-baseDenton Liu, Dec 4, 2019
  33. 5/5 rebase: fix format.useAutoBase breakageDenton Liu, Dec 4, 2019

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.