From patchwork Mon May 13 10:22:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663257 Received: from wfout3-smtp.messagingengine.com (wfout3-smtp.messagingengine.com [64.147.123.146]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1CFDB146D76 for ; Mon, 13 May 2024 10:22:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.146 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595729; cv=none; b=C0MPyi3JUWpj+AGOaO3AHYUhO7Ek4w/NP/JGqWYjWlNn6vXj+jz5iTmfiIgt/rRfOaj6caSHmTlp0QlmIk+sKWD8H3xOUbw6MjQRtMsi6n818TLlJRi3JnC8rvVG64Wgbs6A6cUjbTMWvtfNydmgzm82OxiJfYOCxy4mZAUIWZc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595729; c=relaxed/simple; bh=tiy3CYyWMnHEtVtKrk2U8dgDGw4+ZjNM10dbjZEkVLQ=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=kXzI3Rh+C+vA4Zc8T1C8IZNRYDFDZ51JRGb3ZtXmKV4qBe3vnGdrjL3D9iLsGluCFvfCm0VtkfN6dIY/yPIKFzd0JC+WWxfhGJMWpXAL9PKERVGI43jSrjLCJS2PiEV0QvzkzRVB5Fp0Wy18igUPOzDrFyW5G880j7I2UGL04dw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=ccuRLSUH; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=FT0wwnRG; arc=none smtp.client-ip=64.147.123.146 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="ccuRLSUH"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="FT0wwnRG" Received: from compute7.internal (compute7.nyi.internal [10.202.2.48]) by mailfout.west.internal (Postfix) with ESMTP id 12C781C0012E; Mon, 13 May 2024 06:22:07 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Mon, 13 May 2024 06:22:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595726; x=1715682126; bh=e3FKSpqPOH qCV79Zh0pWZVLfOVj/ZgesYWhGkcUuHQo=; b=ccuRLSUHyykB/GlAr7Z0XS3ntN io0+8re61ub0qobEFzFZn5Yeff+ILqMhkCB+L9YbZQ05ayIC7PD3pFDYw8KG3DG9 SzKiZf+TRohtPMlgj2MmE9kHhavdl+QT3O+S9eNYT77JDxYq0yQ41ChPpwCqvtqw Bx7aa7wMHQjZ1qSOf2OkHP66Acnckpdada3qePVAwA20kddJ1PeZiTYhxI/85KyU WBKyaKLa0KLLvi4X123IqwSl8fB97ZeWUPTfEFRrW0j80VRqBukzy5GmEIvGTLnz gsEEEeeaf9rT2ZAHwP70Ok2sMo1+HXXzuDoNbvS/EciS9z+A6g1PD6Y/qIrg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595726; x=1715682126; bh=e3FKSpqPOHqCV79Zh0pWZVLfOVj/ ZgesYWhGkcUuHQo=; b=FT0wwnRGCaa3mjbES91b4wzTacCqBuCUELUd/ptXko9b Wm4MPi/ohVPp6v7WJ1APJA7NRKg9w5tdyM9PlOh/f71u8dQgFdtR+BayWOSBvvwV ANrkYHAMM6dclEQ+4KQEDHrLsUy0155k9PVKHMG4Ib+j9TB7aVtKGFFOGVpLA5/7 3KeelzQhHWMsR5DFcVH3wa4iGOWbRrCDSKA410JY8UePY4YuTPxivuLNRVZpOy3s 4YGznZHFSRadmoN4UxRRXe+mhsGh2qNmdgJMDEExu1hGXw2sSfSWLyau/JXrIupM hAguD/3wHjw+v3AKF8LBv8Ot78utokJH4F45X2/Xyg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:22:05 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id 0f3f0ccd (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:21:47 +0000 (UTC) Date: Mon, 13 May 2024 12:22:03 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 01/21] builtin/config: stop printing full usage on misuse Message-ID: <0ba76281267b324dd7fe8094132dbce11e9f2182.1715595550.git.ps@pks.im> References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: When invoking git-config(1) with a wrong set of arguments we end up calling `usage_builtin_config()` after printing an error message that says what was wrong. As that function ends up printing the full list of options, which is quite long, the actual error message will be buried by a wall of text. This makes it really hard to figure out what exactly caused the error. Furthermore, now that we have recently introduced subcommands, the usage information may actually be misleading as we unconditionally print options of the subcommand-less mode. Fix both of these issues by just not printing the options at all anymore. Instead, we call `usage()` that makes us report in a single line what has gone wrong. This should be way more discoverable for our users and addresses the inconsistency. Furthermore, this change allow us to inline the options into the respective functions that use them to parse the command line. Signed-off-by: Patrick Steinhardt --- builtin/config.c | 28 +++++++++++----------------- t/t1300-config.sh | 3 ++- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index 80aa9d8a66..3a71d3253f 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -125,8 +125,6 @@ static const char *comment_arg; { OPTION_CALLBACK, (s), (l), (v), NULL, (h), PARSE_OPT_NOARG | \ PARSE_OPT_NONEG, option_parse_type, (i) } -static NORETURN void usage_builtin_config(void); - static int option_parse_type(const struct option *opt, const char *arg, int unset) { @@ -171,7 +169,7 @@ static int option_parse_type(const struct option *opt, const char *arg, * --type=int'. */ error(_("only one type at a time")); - usage_builtin_config(); + exit(129); } *to_type = new_type; @@ -187,7 +185,7 @@ static void check_argc(int argc, int min, int max) else error(_("wrong number of arguments, should be from %d to %d"), min, max); - usage_builtin_config(); + exit(129); } static void show_config_origin(const struct key_value_info *kvi, @@ -672,7 +670,7 @@ static void handle_config_location(const char *prefix) use_worktree_config + !!given_config_source.file + !!given_config_source.blob > 1) { error(_("only one config file at a time")); - usage_builtin_config(); + exit(129); } if (!startup_info->have_repository) { @@ -802,11 +800,6 @@ static struct option builtin_config_options[] = { OPT_END(), }; -static NORETURN void usage_builtin_config(void) -{ - usage_with_options(builtin_config_usage, builtin_config_options); -} - static int cmd_config_list(int argc, const char **argv, const char *prefix) { struct option opts[] = { @@ -1110,7 +1103,7 @@ int cmd_config(int argc, const char **argv, const char *prefix) if ((actions & (ACTION_GET_COLOR|ACTION_GET_COLORBOOL)) && type) { error(_("--get-color and variable type are incoherent")); - usage_builtin_config(); + exit(129); } if (actions == 0) @@ -1119,30 +1112,31 @@ int cmd_config(int argc, const char **argv, const char *prefix) case 2: actions = ACTION_SET; break; case 3: actions = ACTION_SET_ALL; break; default: - usage_builtin_config(); + error(_("no action specified")); + exit(129); } if (omit_values && !(actions == ACTION_LIST || actions == ACTION_GET_REGEXP)) { error(_("--name-only is only applicable to --list or --get-regexp")); - usage_builtin_config(); + exit(129); } if (show_origin && !(actions & (ACTION_GET|ACTION_GET_ALL|ACTION_GET_REGEXP|ACTION_LIST))) { error(_("--show-origin is only applicable to --get, --get-all, " "--get-regexp, and --list")); - usage_builtin_config(); + exit(129); } if (default_value && !(actions & ACTION_GET)) { error(_("--default is only applicable to --get")); - usage_builtin_config(); + exit(129); } if (comment_arg && !(actions & (ACTION_ADD|ACTION_SET|ACTION_SET_ALL|ACTION_REPLACE_ALL))) { error(_("--comment is only applicable to add/set/replace operations")); - usage_builtin_config(); + exit(129); } /* check usage of --fixed-value */ @@ -1175,7 +1169,7 @@ int cmd_config(int argc, const char **argv, const char *prefix) if (!allowed_usage) { error(_("--fixed-value only applies with 'value-pattern'")); - usage_builtin_config(); + exit(129); } flags |= CONFIG_FLAGS_FIXED_VALUE; diff --git a/t/t1300-config.sh b/t/t1300-config.sh index f3c4d28e06..d90a69b29f 100755 --- a/t/t1300-config.sh +++ b/t/t1300-config.sh @@ -596,7 +596,8 @@ test_expect_success 'get bool variable with empty value' ' test_expect_success 'no arguments, but no crash' ' test_must_fail git config >output 2>&1 && - test_grep usage output + echo "error: no action specified" >expect && + test_cmp expect output ' cat > .git/config << EOF From patchwork Mon May 13 10:22:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663258 Received: from wfhigh6-smtp.messagingengine.com (wfhigh6-smtp.messagingengine.com [64.147.123.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0E4AA146D76 for ; Mon, 13 May 2024 10:22:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595734; cv=none; b=KsBu3a6UUUoghf7dJnBnaXDamMZHROhzsVsR21UZX0SgzZFMTAVhm7RylUkT63xrgWzLZOlYLQNCP+226K97DIVzE5VJftleh0SLGRXqsehXEzFikOSOpJMAd5GT6B69pPhOvst6TrKjhOkLYrGfqh164S/18TJkIHOMjq8PjPk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595734; c=relaxed/simple; bh=xWJOfc864Bk7vru1mAPK8FXw8+h9n45qB4ToOyJz/A4=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=rtOYPkd5du6hyyh0J4QNO3G41htj8MvlINwotsKcc86LiUTOXIYTZ3WwR4yqjMKX1b8RivcolMrPbrOyRox5by+qLCwNIRRZVmji843jaRBYmMrZmHez2AFGTOc+1fd6ZqO2SYbVkI16oH7mXDAfxjVdJmdMO5GQBLRdtQwRG9Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=LO3h1cRn; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=KkaPkKBK; arc=none smtp.client-ip=64.147.123.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="LO3h1cRn"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="KkaPkKBK" Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailfhigh.west.internal (Postfix) with ESMTP id 1834B1800076; Mon, 13 May 2024 06:22:12 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Mon, 13 May 2024 06:22:12 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595731; x=1715682131; bh=1q8INptvvm EodmPr7DQ/PNMt/0rC/CZE0a1/eh86yfk=; b=LO3h1cRnIZ2ZxEB0MPn4v0jt34 NW2DNz8Rg0gtfbGMnPlg34OhY+vtkvxezPLQwdSbhsqamb801Gpnuy9YUCy/u/lK mddpl0K705FTVM4qKl/qB2mTq65TefeYdETTf4qN0C/2hVog05vIKUfUxuGATrWP GWO59OnSPo2dAu7tU4Pm0ZaD026DCC0nUHAypidMDnT6EWqeFHPn4fy/wRUiMelg gBvmCuRhJ+Y8y53dlS0yEiTSWsY4KhmWUN5Mccx1oYO6KTfvofWvoP8gC4h0fLin NDrgF9WmVzN/7VB6TF2JX7Qn2vZOSTB79WB9dMuDbmTXdR56yjxaa+HPK11g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595731; x=1715682131; bh=1q8INptvvmEodmPr7DQ/PNMt/0rC /CZE0a1/eh86yfk=; b=KkaPkKBKy7L4Xa7BNTd5a6jn7m4FOkg5mpNIlPfiG4sd 7a1YLsSy36he9cy2jRs43aqsToK//Nggfkpcad6SLjwNVazZAOtjG7W+sJofa2lc bGuPMA8PDNistcBwLFhk2dHC8sIUWpCdH9YGnJowbkoZzKFAMq9Yb4U0zq+krS21 AtSd9Oeit0byiPCV9xfIoFbeQgZhZEaXaGB042cNvl0DVVEERqIdNVoOKU/9oRuo B91pyVXiLjnkvY96qo8op2culcz2eaYYQwrnNsJEFd7o5EON2SPhdOpS4BrthDKQ /2vXXzijrOjSiou958kgOsJQ9KwHkds50yl7tpI0wA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:22:10 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id 58c8a9ae (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:21:52 +0000 (UTC) Date: Mon, 13 May 2024 12:22:08 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 02/21] builtin/config: move legacy mode into its own function Message-ID: <663e1f74f82b8c1acdd0c35ad87736c071eafb33.1715595550.git.ps@pks.im> References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: In `cmd_config()` we first try to parse the provided arguments as subcommands and, if this is successful, call the respective functions of that subcommand. Otherwise we continue with the "legacy" mode that uses implicit actions and/or flags. Disentangle this by moving the legacy mode into its own function. This allows us to move the options into the respective functions and clearly separates concerns. Signed-off-by: Patrick Steinhardt --- builtin/config.c | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index 3a71d3253f..f6c7e7a082 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -1069,31 +1069,13 @@ static struct option builtin_subcommand_options[] = { OPT_END(), }; -int cmd_config(int argc, const char **argv, const char *prefix) +static int cmd_config_actions(int argc, const char **argv, const char *prefix) { char *value = NULL, *comment = NULL; int flags = 0; int ret = 0; struct key_value_info default_kvi = KVI_INIT; - given_config_source.file = xstrdup_or_null(getenv(CONFIG_ENVIRONMENT)); - - /* - * This is somewhat hacky: we first parse the command line while - * keeping all args intact in order to determine whether a subcommand - * has been specified. If so, we re-parse it a second time, but this - * time we drop KEEP_ARGV0. This is so that we don't munge the command - * line in case no subcommand was given, which would otherwise confuse - * us when parsing the legacy-style modes that don't use subcommands. - */ - argc = parse_options(argc, argv, prefix, builtin_subcommand_options, builtin_config_usage, - PARSE_OPT_SUBCOMMAND_OPTIONAL|PARSE_OPT_KEEP_ARGV0|PARSE_OPT_KEEP_UNKNOWN_OPT); - if (subcommand) { - argc = parse_options(argc, argv, prefix, builtin_subcommand_options, builtin_config_usage, - PARSE_OPT_SUBCOMMAND_OPTIONAL|PARSE_OPT_KEEP_UNKNOWN_OPT); - return subcommand(argc, argv, prefix); - } - argc = parse_options(argc, argv, prefix, builtin_config_options, builtin_config_usage, PARSE_OPT_STOP_AT_NON_OPTION); @@ -1306,3 +1288,26 @@ int cmd_config(int argc, const char **argv, const char *prefix) free(value); return ret; } + +int cmd_config(int argc, const char **argv, const char *prefix) +{ + given_config_source.file = xstrdup_or_null(getenv(CONFIG_ENVIRONMENT)); + + /* + * This is somewhat hacky: we first parse the command line while + * keeping all args intact in order to determine whether a subcommand + * has been specified. If so, we re-parse it a second time, but this + * time we drop KEEP_ARGV0. This is so that we don't munge the command + * line in case no subcommand was given, which would otherwise confuse + * us when parsing the legacy-style modes that don't use subcommands. + */ + argc = parse_options(argc, argv, prefix, builtin_subcommand_options, builtin_config_usage, + PARSE_OPT_SUBCOMMAND_OPTIONAL|PARSE_OPT_KEEP_ARGV0|PARSE_OPT_KEEP_UNKNOWN_OPT); + if (subcommand) { + argc = parse_options(argc, argv, prefix, builtin_subcommand_options, builtin_config_usage, + PARSE_OPT_SUBCOMMAND_OPTIONAL|PARSE_OPT_KEEP_UNKNOWN_OPT); + return subcommand(argc, argv, prefix); + } + + return cmd_config_actions(argc, argv, prefix); +} From patchwork Mon May 13 10:22:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663259 Received: from wfhigh6-smtp.messagingengine.com (wfhigh6-smtp.messagingengine.com [64.147.123.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0BAE014A0A5 for ; Mon, 13 May 2024 10:22:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595739; cv=none; b=FZIKKt0IY9NQB6tvEeY9htLE1iSJBB9jdsVO3skQhsD0sFLGq00IPQ8uzuZJVjMRnY3gdQHff2V1QifTuQdZhXvqLxiNukkn4mec0MPlq4b/5aPfZ56HcdKxfQjvPXSm5/HAhcVodYgOlfZ9GazgCNDNE7X5gWEbnvIUD/RKe9M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595739; c=relaxed/simple; bh=0uc9Dl2Fhc+gXsh6eXDbLK3J2kdivZRjnqlT1uJroF8=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=KEj8rBkW2soo41raq8XmzJg92xjmOTBR597eS/uKxHiwFMfWDFrhkvYz5VB0k5ZzPzVDtV9A3oc7UUF/yHKQrbyttOSP4jHjcgMs63ZZGVWuqDi51FyawJcf536mOWHV69bIBtKlZbZoHQG7j/NPzS85QkMo8o0L0rmQ7Rxltn8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=r3EzAKub; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=baYKrs/2; arc=none smtp.client-ip=64.147.123.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="r3EzAKub"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="baYKrs/2" Received: from compute7.internal (compute7.nyi.internal [10.202.2.48]) by mailfhigh.west.internal (Postfix) with ESMTP id 15EBC180012E; Mon, 13 May 2024 06:22:17 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Mon, 13 May 2024 06:22:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595736; x=1715682136; bh=PL0eWXUMXG Cgr9fZvoz2FcczpORjOYge/LsL130dPbc=; b=r3EzAKubPNHYIMcrtcD9qbfq4e VS8cN4A0WbHZvDvY5bkOyhA7Cwxi2wtMp/C+29p3KLBCJg3o+Aw8qaJsNKHqrb05 CoOh6xtuc0q8oKWe1Vi0To8WqU6125t41623emUtT6tEweMiYQUXHg8szHxKs2Om PvVOfxSFYVJEDnAjpSxBt9J0Mc7gDnLCexp7mRgXNANHwDZ7jXpYH9MO2JaDBa8c ZVTGpXxmpuhWAJKb91Wh/WfW9xfBEUk03epK5/DEYcrjxGyT8ZuNEYS6xlagFck0 Yiy69+LVT8qjhG91pUF4lXO2loKrc1EE1/gxL8EN7xoXlkF+WAicvula3C2g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595736; x=1715682136; bh=PL0eWXUMXGCgr9fZvoz2FcczpORj OYge/LsL130dPbc=; b=baYKrs/2v3r7K+jnw36l1cs0aJ5WfBzpTCtUtrC8+Z3v iSG6nIT8f/bQOcvi9krcSi0CrFOXT4WeTHPLZvezjEuiUfYw6fbXMxyb5LARMVqo w1jO9WMkxbjhvHMFyCuIrxMiZPLGfrFRmnOLMqCHiuJPa9EYEQ7D3PDKO9IwfOHG 3a8y6HqcJFGo1sn/Bok+eMQ7kyP6TIyudl468HWl3QuW1n/48imuClZwer/G7Htq 3g9LlxXcbytcB9x7iBNdqY06GtVc55+Efb5V/xnD+ROoxjsmOiquwspxYFAZ3+EU 5G/2UbKeDVqFARkBKEY/Xr7V+WWePf3gaO3x3AA2iw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgepudenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:22:15 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id 0621c4eb (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:21:56 +0000 (UTC) Date: Mon, 13 May 2024 12:22:13 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 03/21] builtin/config: move subcommand options into `cmd_config()` Message-ID: <1239c151d08448f5782cdd12c5cf10fd5d2719d4.1715595550.git.ps@pks.im> References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Move the subcommand options as well as the `subcommand` variable into `cmd_config()`. This reduces our reliance on global state. Signed-off-by: Patrick Steinhardt --- builtin/config.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index f6c7e7a082..58c8b0abda 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -75,7 +75,6 @@ static char delim = '='; static char key_delim = ' '; static char term = '\n'; -static parse_opt_subcommand_fn *subcommand; static int use_global_config, use_system_config, use_local_config; static int use_worktree_config; static struct git_config_source given_config_source; @@ -1058,17 +1057,6 @@ static int cmd_config_edit(int argc, const char **argv, const char *prefix) return show_editor(); } -static struct option builtin_subcommand_options[] = { - OPT_SUBCOMMAND("list", &subcommand, cmd_config_list), - OPT_SUBCOMMAND("get", &subcommand, cmd_config_get), - OPT_SUBCOMMAND("set", &subcommand, cmd_config_set), - OPT_SUBCOMMAND("unset", &subcommand, cmd_config_unset), - OPT_SUBCOMMAND("rename-section", &subcommand, cmd_config_rename_section), - OPT_SUBCOMMAND("remove-section", &subcommand, cmd_config_remove_section), - OPT_SUBCOMMAND("edit", &subcommand, cmd_config_edit), - OPT_END(), -}; - static int cmd_config_actions(int argc, const char **argv, const char *prefix) { char *value = NULL, *comment = NULL; @@ -1291,6 +1279,18 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) int cmd_config(int argc, const char **argv, const char *prefix) { + parse_opt_subcommand_fn *subcommand = NULL; + struct option subcommand_opts[] = { + OPT_SUBCOMMAND("list", &subcommand, cmd_config_list), + OPT_SUBCOMMAND("get", &subcommand, cmd_config_get), + OPT_SUBCOMMAND("set", &subcommand, cmd_config_set), + OPT_SUBCOMMAND("unset", &subcommand, cmd_config_unset), + OPT_SUBCOMMAND("rename-section", &subcommand, cmd_config_rename_section), + OPT_SUBCOMMAND("remove-section", &subcommand, cmd_config_remove_section), + OPT_SUBCOMMAND("edit", &subcommand, cmd_config_edit), + OPT_END(), + }; + given_config_source.file = xstrdup_or_null(getenv(CONFIG_ENVIRONMENT)); /* @@ -1301,10 +1301,10 @@ int cmd_config(int argc, const char **argv, const char *prefix) * line in case no subcommand was given, which would otherwise confuse * us when parsing the legacy-style modes that don't use subcommands. */ - argc = parse_options(argc, argv, prefix, builtin_subcommand_options, builtin_config_usage, + argc = parse_options(argc, argv, prefix, subcommand_opts, builtin_config_usage, PARSE_OPT_SUBCOMMAND_OPTIONAL|PARSE_OPT_KEEP_ARGV0|PARSE_OPT_KEEP_UNKNOWN_OPT); if (subcommand) { - argc = parse_options(argc, argv, prefix, builtin_subcommand_options, builtin_config_usage, + argc = parse_options(argc, argv, prefix, subcommand_opts, builtin_config_usage, PARSE_OPT_SUBCOMMAND_OPTIONAL|PARSE_OPT_KEEP_UNKNOWN_OPT); return subcommand(argc, argv, prefix); } From patchwork Mon May 13 10:22:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663260 Received: from wfout3-smtp.messagingengine.com (wfout3-smtp.messagingengine.com [64.147.123.146]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 04EEB31A67 for ; Mon, 13 May 2024 10:22:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.146 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595744; cv=none; b=smZMN6ukc3+L5k5Cl9d8phMfgZNikMT3B/t6meNW15OAtYG5cmt2HyIH+wa99CoQ7bIHa4D6VqhmsmVjbkOcCUXZLzGeh+/vVqaBMi4zA5P+zcqTznD5f6FDbbiMs/Ty45sXSO+rc1xuPQs+dOZCTje/7YCm9z57JAzUBDeYbGc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595744; c=relaxed/simple; bh=gnAU20Jso+2U+GPcCmxMvM5LvjhM5edFgru5bPRkg78=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=ZxTyPzYBGJOCuF0mf656R9dSpa2RA+77OK1VsPuff0mBXme3/oik3y3RMzVASWHlVDpXd6CfypYah54JSQXXL+xgbCzIYt0MNqjAPMWO5OxWU/Pnb5Iop1vle/bxxyTd6GLBx21tp7l0UrDfqJd6JwRA3cErGo5uVYu3JcY26Lo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=vNbKrl14; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=Ea8vqcLg; arc=none smtp.client-ip=64.147.123.146 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="vNbKrl14"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="Ea8vqcLg" Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailfout.west.internal (Postfix) with ESMTP id 229B31C00127; Mon, 13 May 2024 06:22:22 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Mon, 13 May 2024 06:22:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595741; x=1715682141; bh=Wn/d7H0gBF 2MOrPFiB1la/BsyGbeImQCk5d50ql9KRk=; b=vNbKrl146E0TYrhx31p5Q8fpUC HjWv3GNIFQizmCo7wamh9Vce5OO0HGemSDZTO/VkHnOsO76JvLWKCXjtkRyIrNjt 5lwA9ZaM/d7G0yLCP3ZvTwnBM4IpptGY7IOPjz28MKGgqk89Rz4uW/L2HtLV4NfE w3pP/m3Zt752qIQTyAR38TmlE7FaU123P5vJQICmqmMIqlHjifJNBFTvhuPd85ta JoBcXoPbojMcGo73hB+ZQ+Ku2y8aaRry3xITikRv0ydxPa6JgQoaJH1yyMheARnv A1WOTWamjop15vX6agmGWg9aLSkH823e2IcdG23ZOeI6IL9IKqOppTS94nuA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595741; x=1715682141; bh=Wn/d7H0gBF2MOrPFiB1la/BsyGbe ImQCk5d50ql9KRk=; b=Ea8vqcLgD4KG1RvjuD3oOX+2m2O02aITfjNeRM+TJvok DV4guZjHZ13Uq8x98RUq227uuvHFDfSpDl/V9eA836AMWF1HcswuzdtgnNlbhkZ7 rZcEBDxSpcR/LwNJ6b8PSA+/R7izWrSXDQpKEC7f1XDjTuVI3LUu7Js6N2kjZaAh dcJAU5azaPdMZGLNHxmb/mXvjEyrjNJq53kadCNBHebPg6PrGILECOgxX+n6Bxy9 b/VKIlNdw4hD28A/J/wv5eicq1mmZefK4UWZZiO3olq/r7S9sgXQNqJZIIHkg7As c7Vo0TAYmbgaiTJ9pj9ZN/RGAFKCRoe/EClR3PuJlQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgepudenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:22:20 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id c7108464 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:22:01 +0000 (UTC) Date: Mon, 13 May 2024 12:22:18 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 04/21] builtin/config: move legacy options into `cmd_config()` Message-ID: <82964510c557a398e2713744ec75bba3ba5edb25.1715595550.git.ps@pks.im> References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Move the legacy options as well some of the variables it references into `cmd_config_action()`. This reduces our reliance on global state. Signed-off-by: Patrick Steinhardt --- builtin/config.c | 60 ++++++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index 58c8b0abda..e9956574fe 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -78,7 +78,7 @@ static char term = '\n'; static int use_global_config, use_system_config, use_local_config; static int use_worktree_config; static struct git_config_source given_config_source; -static int actions, type; +static int type; static char *default_value; static int end_nul; static int respect_includes_opt = -1; @@ -86,7 +86,6 @@ static struct config_options config_options; static int show_origin; static int show_scope; static int fixed_value; -static const char *comment_arg; #define ACTION_GET (1<<0) #define ACTION_GET_ALL (1<<1) @@ -772,33 +771,6 @@ static void handle_nul(void) { OPT_BOOL(0, "show-origin", &show_origin, N_("show origin of config (file, standard input, blob, command line)")), \ OPT_BOOL(0, "show-scope", &show_scope, N_("show scope of config (worktree, local, global, system, command)")) -static struct option builtin_config_options[] = { - CONFIG_LOCATION_OPTIONS, - OPT_GROUP(N_("Action")), - OPT_CMDMODE(0, "get", &actions, N_("get value: name []"), ACTION_GET), - OPT_CMDMODE(0, "get-all", &actions, N_("get all values: key []"), ACTION_GET_ALL), - OPT_CMDMODE(0, "get-regexp", &actions, N_("get values for regexp: name-regex []"), ACTION_GET_REGEXP), - OPT_CMDMODE(0, "get-urlmatch", &actions, N_("get value specific for the URL: section[.var] URL"), ACTION_GET_URLMATCH), - OPT_CMDMODE(0, "replace-all", &actions, N_("replace all matching variables: name value []"), ACTION_REPLACE_ALL), - OPT_CMDMODE(0, "add", &actions, N_("add a new variable: name value"), ACTION_ADD), - OPT_CMDMODE(0, "unset", &actions, N_("remove a variable: name []"), ACTION_UNSET), - OPT_CMDMODE(0, "unset-all", &actions, N_("remove all matches: name []"), ACTION_UNSET_ALL), - OPT_CMDMODE(0, "rename-section", &actions, N_("rename section: old-name new-name"), ACTION_RENAME_SECTION), - OPT_CMDMODE(0, "remove-section", &actions, N_("remove a section: name"), ACTION_REMOVE_SECTION), - OPT_CMDMODE('l', "list", &actions, N_("list all"), ACTION_LIST), - OPT_CMDMODE('e', "edit", &actions, N_("open an editor"), ACTION_EDIT), - OPT_CMDMODE(0, "get-color", &actions, N_("find the color configured: slot []"), ACTION_GET_COLOR), - OPT_CMDMODE(0, "get-colorbool", &actions, N_("find the color setting: slot []"), ACTION_GET_COLORBOOL), - CONFIG_TYPE_OPTIONS, - CONFIG_DISPLAY_OPTIONS, - OPT_GROUP(N_("Other")), - OPT_STRING(0, "default", &default_value, N_("value"), N_("with --get, use default value when missing entry")), - OPT_STRING(0, "comment", &comment_arg, N_("value"), N_("human-readable comment string (# will be prepended as needed)")), - OPT_BOOL(0, "fixed-value", &fixed_value, N_("use string equality when comparing values to 'value-pattern'")), - OPT_BOOL(0, "includes", &respect_includes_opt, N_("respect include directives on lookup")), - OPT_END(), -}; - static int cmd_config_list(int argc, const char **argv, const char *prefix) { struct option opts[] = { @@ -1059,12 +1031,40 @@ static int cmd_config_edit(int argc, const char **argv, const char *prefix) static int cmd_config_actions(int argc, const char **argv, const char *prefix) { + const char *comment_arg = NULL; + int actions = 0; + struct option opts[] = { + CONFIG_LOCATION_OPTIONS, + OPT_GROUP(N_("Action")), + OPT_CMDMODE(0, "get", &actions, N_("get value: name []"), ACTION_GET), + OPT_CMDMODE(0, "get-all", &actions, N_("get all values: key []"), ACTION_GET_ALL), + OPT_CMDMODE(0, "get-regexp", &actions, N_("get values for regexp: name-regex []"), ACTION_GET_REGEXP), + OPT_CMDMODE(0, "get-urlmatch", &actions, N_("get value specific for the URL: section[.var] URL"), ACTION_GET_URLMATCH), + OPT_CMDMODE(0, "replace-all", &actions, N_("replace all matching variables: name value []"), ACTION_REPLACE_ALL), + OPT_CMDMODE(0, "add", &actions, N_("add a new variable: name value"), ACTION_ADD), + OPT_CMDMODE(0, "unset", &actions, N_("remove a variable: name []"), ACTION_UNSET), + OPT_CMDMODE(0, "unset-all", &actions, N_("remove all matches: name []"), ACTION_UNSET_ALL), + OPT_CMDMODE(0, "rename-section", &actions, N_("rename section: old-name new-name"), ACTION_RENAME_SECTION), + OPT_CMDMODE(0, "remove-section", &actions, N_("remove a section: name"), ACTION_REMOVE_SECTION), + OPT_CMDMODE('l', "list", &actions, N_("list all"), ACTION_LIST), + OPT_CMDMODE('e', "edit", &actions, N_("open an editor"), ACTION_EDIT), + OPT_CMDMODE(0, "get-color", &actions, N_("find the color configured: slot []"), ACTION_GET_COLOR), + OPT_CMDMODE(0, "get-colorbool", &actions, N_("find the color setting: slot []"), ACTION_GET_COLORBOOL), + CONFIG_TYPE_OPTIONS, + CONFIG_DISPLAY_OPTIONS, + OPT_GROUP(N_("Other")), + OPT_STRING(0, "default", &default_value, N_("value"), N_("with --get, use default value when missing entry")), + OPT_STRING(0, "comment", &comment_arg, N_("value"), N_("human-readable comment string (# will be prepended as needed)")), + OPT_BOOL(0, "fixed-value", &fixed_value, N_("use string equality when comparing values to 'value-pattern'")), + OPT_BOOL(0, "includes", &respect_includes_opt, N_("respect include directives on lookup")), + OPT_END(), + }; char *value = NULL, *comment = NULL; int flags = 0; int ret = 0; struct key_value_info default_kvi = KVI_INIT; - argc = parse_options(argc, argv, prefix, builtin_config_options, + argc = parse_options(argc, argv, prefix, opts, builtin_config_usage, PARSE_OPT_STOP_AT_NON_OPTION); From patchwork Mon May 13 10:22:23 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663261 Received: from wfhigh6-smtp.messagingengine.com (wfhigh6-smtp.messagingengine.com [64.147.123.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 650FC31A67 for ; Mon, 13 May 2024 10:22:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595749; cv=none; b=nlessVY8tyc8SQ1gpHzIx8tRJW2AsExasQHWpyQsV99VjhMuBTF4QODaAFOcmxH3Zt4ZKCU1IWZH7chWyZ/g/4XFU/UYW34at51MsQMgNuejxmGSSMoEhM9iU8eSVkD9sP5pTN21CXUHbIrrdLmt7wEYDeO2XkeQeJrjLhH6X5k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595749; c=relaxed/simple; bh=mT6zu9eLLZyXuOIlhl5hDQS0ALUMAlR8ESLr+C5z9EM=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=pIw1ROcU8SomOPXH/RF2bMi+PUmJHqMu6S1yA+IBkV1y+zfJ4X2NXzmG9c38ssNP/tc5HRbWR0B9xlM4siEMIvUCssBYEQPTMiXms5Qg1G7D1ef5xGo7FSzXC585+txed2WQuPu6aSKcEfI9cREpI6Zb/AzUc0RWAThtLllBfYY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=AZmZBgSA; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=LIwcGXIf; arc=none smtp.client-ip=64.147.123.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="AZmZBgSA"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="LIwcGXIf" Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailfhigh.west.internal (Postfix) with ESMTP id 3111E180012A; Mon, 13 May 2024 06:22:27 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Mon, 13 May 2024 06:22:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595746; x=1715682146; bh=4l+p2hD2Ou KLPkyu/cwI44fKsEEqTpE2N+9MJLku4es=; b=AZmZBgSA/zNoCPMapbg97fJd/I x5mYTRlkUprB9LNr6ip9YtWD5/PyyPCYVpZttO5FnVc9Ms7J5UUqGOoTZSxg7k35 3pqU/m024seqj4LHz8CEvn9ScYtuGgwC58nSgb5QzYYLqtocbNenombX1GrqmuEO IFKYAQ6PwUdcjehOTCWtMENM5xrqsS0JEQ1KWnaVgm9kou6JJ/wDb/SgvBMi6vJE zckeG2iTGR6MucAz/0bIcKWpTQN3Zfxoj92JRuHs/QDwzFI6H53nLMXdxi1Yr9iG yA8RdUbDDV/hjDDVjjesKEwuSDYGKmxzcCEZk4pBuJIJhbIiMNURk4YgxPWQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595746; x=1715682146; bh=4l+p2hD2OuKLPkyu/cwI44fKsEEq TpE2N+9MJLku4es=; b=LIwcGXIfgmUaywIrgKo8SitdRmB7PqmltlTmdAMDPslj N1jYh+t0UdCWXDsWiRgns0qXbSEPIFK3X05LP55IXpt36Sjh52Am1tXC4G1qh0Oq gA3+L7GnM7iU7Vj/hF9t0BV76rqdms1lukbxOz1lT4x+DZrLMPyOlFP/TgQQUlnk ndQ+ym2sMChcqvzbzTNKCSzUUFcq/9eE00Cj3O87vHGkqp0ALgB+qly86i2n80+7 xKNm/LzJXx8KywRWHumRasv9NKy7D6KtrL+rEE3NeP8KHTD8SwWYNgVDpm0SGmaa LnFlpRKrtwWFW0KsZYT2aldlXHMqSVLozfI92iWWsA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgepvdenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:22:25 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id 2a658b85 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:22:06 +0000 (UTC) Date: Mon, 13 May 2024 12:22:23 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 05/21] builtin/config: move actions into `cmd_config_actions()` Message-ID: <0a6ecae2ccc55789bce3f9c42900b3f41c1cb06a.1715595550.git.ps@pks.im> References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: We only use actions in the legacy mode. Convert them to an enum and move them into `cmd_config_actions()` to clearly demonstrate that they are not used anywhere else. Signed-off-by: Patrick Steinhardt --- builtin/config.c | 48 +++++++++++++++++++++++------------------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index e9956574fe..0842e4f198 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -87,30 +87,6 @@ static int show_origin; static int show_scope; static int fixed_value; -#define ACTION_GET (1<<0) -#define ACTION_GET_ALL (1<<1) -#define ACTION_GET_REGEXP (1<<2) -#define ACTION_REPLACE_ALL (1<<3) -#define ACTION_ADD (1<<4) -#define ACTION_UNSET (1<<5) -#define ACTION_UNSET_ALL (1<<6) -#define ACTION_RENAME_SECTION (1<<7) -#define ACTION_REMOVE_SECTION (1<<8) -#define ACTION_LIST (1<<9) -#define ACTION_EDIT (1<<10) -#define ACTION_SET (1<<11) -#define ACTION_SET_ALL (1<<12) -#define ACTION_GET_COLOR (1<<13) -#define ACTION_GET_COLORBOOL (1<<14) -#define ACTION_GET_URLMATCH (1<<15) - -/* - * The actions "ACTION_LIST | ACTION_GET_*" which may produce more than - * one line of output and which should therefore be paged. - */ -#define PAGING_ACTIONS (ACTION_LIST | ACTION_GET_ALL | \ - ACTION_GET_REGEXP | ACTION_GET_URLMATCH) - #define TYPE_BOOL 1 #define TYPE_INT 2 #define TYPE_BOOL_OR_INT 3 @@ -1031,6 +1007,24 @@ static int cmd_config_edit(int argc, const char **argv, const char *prefix) static int cmd_config_actions(int argc, const char **argv, const char *prefix) { + enum { + ACTION_GET = (1<<0), + ACTION_GET_ALL = (1<<1), + ACTION_GET_REGEXP = (1<<2), + ACTION_REPLACE_ALL = (1<<3), + ACTION_ADD = (1<<4), + ACTION_UNSET = (1<<5), + ACTION_UNSET_ALL = (1<<6), + ACTION_RENAME_SECTION = (1<<7), + ACTION_REMOVE_SECTION = (1<<8), + ACTION_LIST = (1<<9), + ACTION_EDIT = (1<<10), + ACTION_SET = (1<<11), + ACTION_SET_ALL = (1<<12), + ACTION_GET_COLOR = (1<<13), + ACTION_GET_COLORBOOL = (1<<14), + ACTION_GET_URLMATCH = (1<<15), + }; const char *comment_arg = NULL; int actions = 0; struct option opts[] = { @@ -1147,7 +1141,11 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) comment = git_config_prepare_comment_string(comment_arg); - if (actions & PAGING_ACTIONS) + /* + * The following actions may produce more than one line of output and + * should therefore be paged. + */ + if (actions & (ACTION_LIST | ACTION_GET_ALL | ACTION_GET_REGEXP | ACTION_GET_URLMATCH)) setup_auto_pager("config", 1); if (actions == ACTION_LIST) { From patchwork Mon May 13 10:22:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663262 Received: from wfhigh6-smtp.messagingengine.com (wfhigh6-smtp.messagingengine.com [64.147.123.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2500F31A67 for ; Mon, 13 May 2024 10:22:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595754; cv=none; b=ZHMJp8wbFedRuGHOlXmWCBYCPOSg/C34OUzgNyM2fwdb2inigRzxVgWkx31x366nM91tDW2345Gim8oaVQQzgIlquiPuppAJGmivAQKkyq7TPnA+UKEmGRt/jRBnMrRnhMJcXJ3Q/Ckoawd5by3Dbi/G/wW05gt/DKcMfPIyJCc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595754; c=relaxed/simple; bh=i29iRBgL2LTrt5uzgeMDZJ7WFiZED+XrIH2axjZ2GTQ=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=ClWWEMiWFACyXwsnBjHmMzugoKZHUZXJp15uT9R2i26cpgtRUbwht6Sij9lL4qGnTHPUYmvUtNuV724OP9DI4Uj9CRD5KDWEUFCOTk8LXZwtl/0BZJ9Qgn+neeMVJzPd7Y3TJrKeZiL7L1HAE99adOdEpHUDO0FBmdKmp4eRQOk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=uP36Y5Om; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=Y/pkpKZl; arc=none smtp.client-ip=64.147.123.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="uP36Y5Om"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="Y/pkpKZl" Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailfhigh.west.internal (Postfix) with ESMTP id 4CF23180012E; Mon, 13 May 2024 06:22:32 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute6.internal (MEProxy); Mon, 13 May 2024 06:22:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595751; x=1715682151; bh=tJphtNqawJ 863crK1scVIM/jvmWpUMz/5NtFEQPSzZU=; b=uP36Y5OmuSj6Ljr4URbp1qObP6 IO4Ac5i6v5Cw1HK/3ru0QI0YvY/inVD/RZ9my93bEMkXW9MKZ4LDfibtBxVfuN4S IYdAEXu5LERwEdqWk4JgVda5bsUNcjA0pU7VYlWNQzlQMXfXYG766I75qEouMDDE tVS0Z5u/0PQzD8mBS2j+XzE3Cla1sHvN/envqLQG9EWtXsETdzXLRoM3NlKjfYn/ cEvyH7XpKf94c0PtUev/NQlk+2O10R5lveJX2Z/8A5zcGRbPHasfP7u7/8gfMgoQ k1nlr8O2+3fsZAmFg5SgdZ4k+DLcD2jkKPhzgPTuxcFZZR48C612jJMymbGA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595751; x=1715682151; bh=tJphtNqawJ863crK1scVIM/jvmWp UMz/5NtFEQPSzZU=; b=Y/pkpKZlspiwGHWl4navVN0us9ps8cfvNeYg1pvWmIKG vc4qcNdf283r1xP/6kTmU/0XHvaYrtAt6hJC9HfWXMPse73tVAwLiB96Nbx1NK6m XxqFTdmAqaZz9VuS33/67AaB0woTqwYVss97v7WjAZKDWTox3xZPwzAf/l91GXS6 nJgqGOODN3+1ONGr5oYu///JSepl1RLeXK1l272Qcyr95cx/2U8eS3PqSeOu8fga Ll8B16BD7KHDjRDKJdGAyWdDIq/+Yly2b4GfK/7H3nwandZA2JWFST9p2cLLDIU7 3nWwqpWTkUkzlIzCnPinf7uxyoNCCIDufOGJ3E3qIA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:22:30 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id fea539cd (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:22:11 +0000 (UTC) Date: Mon, 13 May 2024 12:22:28 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 06/21] builtin/config: check for writeability after source is set up Message-ID: <7ab99a27c16718ad4dff1f7862e80c52b48c3812.1715595550.git.ps@pks.im> References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: The `check_write()` function verifies that we do not try to write to a config source that cannot be written to, like for example stdin. But while the new subcommands do call this function, they do so before calling `handle_config_location()`. Consequently, we only end up checking the default config location for writeability, not the location that was actually specified by the caller of git-config(1). Fix this by calling `check_write()` after `handle_config_location()`. We will further clarify the relationship between those two functions in a subsequent commit where we remove the global state that both implicitly rely on. Signed-off-by: Patrick Steinhardt --- builtin/config.c | 10 +++++----- t/t1300-config.sh | 6 ++++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index 0842e4f198..9866d1a055 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -843,7 +843,6 @@ static int cmd_config_set(int argc, const char **argv, const char *prefix) argc = parse_options(argc, argv, prefix, opts, builtin_config_set_usage, PARSE_OPT_STOP_AT_NON_OPTION); - check_write(); check_argc(argc, 2, 2); if ((flags & CONFIG_FLAGS_FIXED_VALUE) && !value_pattern) @@ -856,6 +855,7 @@ static int cmd_config_set(int argc, const char **argv, const char *prefix) comment = git_config_prepare_comment_string(comment_arg); handle_config_location(prefix); + check_write(); value = normalize_value(argv[0], argv[1], &default_kvi); @@ -891,13 +891,13 @@ static int cmd_config_unset(int argc, const char **argv, const char *prefix) argc = parse_options(argc, argv, prefix, opts, builtin_config_unset_usage, PARSE_OPT_STOP_AT_NON_OPTION); - check_write(); check_argc(argc, 1, 1); if ((flags & CONFIG_FLAGS_FIXED_VALUE) && !value_pattern) die(_("--fixed-value only applies with 'value-pattern'")); handle_config_location(prefix); + check_write(); if ((flags & CONFIG_FLAGS_MULTI_REPLACE) || value_pattern) return git_config_set_multivar_in_file_gently(given_config_source.file, @@ -918,10 +918,10 @@ static int cmd_config_rename_section(int argc, const char **argv, const char *pr argc = parse_options(argc, argv, prefix, opts, builtin_config_rename_section_usage, PARSE_OPT_STOP_AT_NON_OPTION); - check_write(); check_argc(argc, 2, 2); handle_config_location(prefix); + check_write(); ret = git_config_rename_section_in_file(given_config_source.file, argv[0], argv[1]); @@ -943,10 +943,10 @@ static int cmd_config_remove_section(int argc, const char **argv, const char *pr argc = parse_options(argc, argv, prefix, opts, builtin_config_remove_section_usage, PARSE_OPT_STOP_AT_NON_OPTION); - check_write(); check_argc(argc, 1, 1); handle_config_location(prefix); + check_write(); ret = git_config_rename_section_in_file(given_config_source.file, argv[0], NULL); @@ -997,10 +997,10 @@ static int cmd_config_edit(int argc, const char **argv, const char *prefix) }; argc = parse_options(argc, argv, prefix, opts, builtin_config_edit_usage, 0); - check_write(); check_argc(argc, 0, 0); handle_config_location(prefix); + check_write(); return show_editor(); } diff --git a/t/t1300-config.sh b/t/t1300-config.sh index d90a69b29f..9de2d95f06 100755 --- a/t/t1300-config.sh +++ b/t/t1300-config.sh @@ -2835,6 +2835,12 @@ test_expect_success 'specifying multiple modes causes failure' ' test_cmp expect err ' +test_expect_success 'writing to stdin is rejected' ' + echo "fatal: writing to stdin is not supported" >expect && + test_must_fail git config ${mode_set} --file - foo.bar baz 2>err && + test_cmp expect err +' + done test_done From patchwork Mon May 13 10:22:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663263 Received: from wfhigh6-smtp.messagingengine.com (wfhigh6-smtp.messagingengine.com [64.147.123.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 527AA31A67 for ; Mon, 13 May 2024 10:22:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595758; cv=none; b=Hj041SGaU2MqHc8YDcoD4YHjOLVUN4k2qfTTRrgb5BZT3Qx6xq49l39coAyWFxkQ4lTGeiB4wGhDICaiu5ZtX/96ezVTYJzVLuLlgCDtqRxVhRYHkaNe44aE8RtlcNtW2TcTKsHhhzPrhvvkTy9yDPEo4d3XaNFM1mHroAzd9r8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595758; c=relaxed/simple; bh=uW9/R5SUpEwnyUlye8cGQSNrEv5y3fr9NU78UkQjUnU=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=OwbUJE0w/iqo1syHVsWPQ1WA4kkWRKrSgjf4gJCVFPaupI4Alre1bIGSXq4WJqI6fe+FdfG6m/diMjcTsE0FyHl+ciE3yMquP+kHCILfqVT5usOoPec1noCOXmixiS3cH5BzQQV4fwthPOgJCLSEEeEfGbBAa+SwktcVfsW+jHw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=khc2iuTx; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=HvjYvuQ3; arc=none smtp.client-ip=64.147.123.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="khc2iuTx"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="HvjYvuQ3" Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailfhigh.west.internal (Postfix) with ESMTP id 5D05C180013A; Mon, 13 May 2024 06:22:36 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute2.internal (MEProxy); Mon, 13 May 2024 06:22:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595756; x=1715682156; bh=QQSaLB+heb 1sdAXjS9cid2TeLDMrMtK2752O0f6Bu1A=; b=khc2iuTxDPY12T594eVXKKRZ1T xlKgkpfxXnPQfq2/r4zVdWh4wEBfHUtyF3ihrCEoZ+ZvAxSP/n2vK0ULglbK8ose o8VXO9SC/W5yUPxpS6ZkROhrekyiyJ+Yn3Ho7rYjn0WFQH7ovX4B6SvgGlbMVTqE ofFeEp8UW6BFrX5WuoFV0XnVdP4XaG/6VnoWtbelD47/foPYuAKc42zbckOE06RN pXC+8zFNz7E+ng0AUT48pVykq6ilDdBgyRpixWkoVFBKLJn9lz+Wfl9agxnSSkGl axbkMEHEqlmGQQ3iDCfLPEjcWqiHwowBdJj0ptKeLWUGrpbo0kqV2P3DcEDA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595756; x=1715682156; bh=QQSaLB+heb1sdAXjS9cid2TeLDMr MtK2752O0f6Bu1A=; b=HvjYvuQ3hp1OIpXhpvn4C9dFT3ed3DbhG/Vl3Jtj4+42 qaCsybMuZdVWKRb4qaf5r3Fn5Le1ritHWlGabSj0vbfSWXpQqE403EQ2jofcl4Kj UB/mMNWUljBWIN1puYsiZgRfjxxfdRRw3Ilta533Ukx6jH9JLQL+pPLOKNxNq1DX mjGd7yFBuo5NEXUQqdyX3DtZfzNZfz0n/0NsS3W0cHFLAFrBoUrJGg5MXqldRPzB 9Ps4HJU2sTPT8KumYsf2fu4Cd3TfCaE27nuRU4+vCGeAfRMSDZgVaQCLC/EjIgDO PlJD1Zanfnny/T2dnPvvCh6bQ/xlwo92AGhHXOSo+A== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgepudenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:22:34 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id 05d7606d (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:22:16 +0000 (UTC) Date: Mon, 13 May 2024 12:22:32 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 07/21] config: make the config source const Message-ID: <1460d3a36c4f5357310164114e23ba32f3098802.1715595550.git.ps@pks.im> References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: The `struct git_config_source` passed to `config_with_options()` is never modified. Let's mark it as `const` to clarify. Signed-off-by: Patrick Steinhardt --- config.c | 4 ++-- config.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config.c b/config.c index 13cf9eeb16..bc0c005039 100644 --- a/config.c +++ b/config.c @@ -125,7 +125,7 @@ struct config_include_data { config_fn_t fn; void *data; const struct config_options *opts; - struct git_config_source *config_source; + const struct git_config_source *config_source; struct repository *repo; /* @@ -2105,7 +2105,7 @@ static int do_git_config_sequence(const struct config_options *opts, } int config_with_options(config_fn_t fn, void *data, - struct git_config_source *config_source, + const struct git_config_source *config_source, struct repository *repo, const struct config_options *opts) { diff --git a/config.h b/config.h index db8b608064..e66c84520b 100644 --- a/config.h +++ b/config.h @@ -232,7 +232,7 @@ void git_config(config_fn_t fn, void *); * sets `opts.respect_includes` to `1` by default. */ int config_with_options(config_fn_t fn, void *, - struct git_config_source *config_source, + const struct git_config_source *config_source, struct repository *repo, const struct config_options *opts); From patchwork Mon May 13 10:22:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663264 Received: from wfhigh6-smtp.messagingengine.com (wfhigh6-smtp.messagingengine.com [64.147.123.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4B7DC31A67 for ; Mon, 13 May 2024 10:22:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595764; cv=none; b=TNtg6jR45mbtqILtrOVE52yQ7BcoVilT7SEeYVbpVjBDDhvjWYxc2Jg/ztCxBBnr8Pr5LUDp7ZG5Mn97Nn6M23OAmdJQyMONNaK7XoergYEQ2zcZOmv+XsnQYXGGdx/L2QkQc5vheiq7UizK+4sOkfh0Twy7rGQWd1t3SWWdcu4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595764; c=relaxed/simple; bh=n8fi+yKilsyZM1S8Mc77p8NQun/SApqhfRI1QgdRzUg=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=PgMnRsRyF3UqN/+PIjBbSR4wso+fhhP0IUgSPhjlM0jBS0SYgPhLCQc6Zk1s2ffp7MozXoHI8to6yRi+i72AUUXNl2/5PTboIBONeWd3REIEPiOgs/JqjhPSKuI26eFkIed7BK1R0jyzkiAFa4NAegqka142POHpclWzATKnH+w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=L89uLP0l; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=QKocp6++; arc=none smtp.client-ip=64.147.123.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="L89uLP0l"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="QKocp6++" Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailfhigh.west.internal (Postfix) with ESMTP id 5E724180010F; Mon, 13 May 2024 06:22:42 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute6.internal (MEProxy); Mon, 13 May 2024 06:22:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595762; x=1715682162; bh=WezW4VwHlZ k7s2qpTKfLp4hrqOD/aBN27jaBHSoG9sw=; b=L89uLP0lb+Nv5I32I2fwhNg62w VR7tRwti/imYRUgZ17XQpnu0EICjElRHqAmyB9zGabAY8gJySt8tw6fPB1/53Wpp Rcm4QhipVA+81hT+3UhlEgcUneAZFtQ3fzPvyJmtudqSwmxkUAu6GOg9cUDpbFBt j9PNSXuAWdvVW/fKoKBSP7ixeErZ4ksCf5zhGguyobmiO8g+3Yd414SM2PnQuQz6 A/SzmL8INOcDmW4ZytZvp33ARQuRe/cWxGRCzNcGXokK0XggdSH4R1GV0TRlUzhY +SNW6I/cV/vACcNoDy85E7yT07XcGVLak56GIXNgxec63T0TemOzf5S4JesA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595762; x=1715682162; bh=WezW4VwHlZk7s2qpTKfLp4hrqOD/ aBN27jaBHSoG9sw=; b=QKocp6++1FJRN2Oy8YlKL6SRIkEMKZWOV0hB+OV4vD1M 3sg+pAtgQfh2AH7IrZJqgWp0/sjZ3YScnwgAGHZZ2SBlWnvRoo1vEZ0tyWoqVjWU 29BJ1nmWTqOvpfs+qNr70pDpQ7X2nBb7mtkVx0vWqvcGqI/We1TOolqEoFf7XaTR XEmt9/8mMJ5w5azdq1MfSJlZv8KRxJALxW1wxdmEd5HkhXXS9r2Qhr8Fzhh2BlSp 7FpdsfkXxqq1uRrYUDI3MW0R4ZWrkCinEqlvlniOMWWRUDWq1epdJM6KzF7286TZ 1Fo71x57/JIvBNK7+HiStkfnWoojGNu9Aj2RsTKI6w== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgepudenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:22:40 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id abb1698d (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:22:22 +0000 (UTC) Date: Mon, 13 May 2024 12:22:38 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 08/21] builtin/config: refactor functions to have common exit paths Message-ID: <018ed0226ba670616c44db20a35d456188cf0604.1715595550.git.ps@pks.im> References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Refactor functions to have a single exit path. This will make it easier in subsequent commits to add common cleanup code. Signed-off-by: Patrick Steinhardt --- builtin/config.c | 64 ++++++++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 26 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index 9866d1a055..155564b832 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -798,6 +798,7 @@ static int cmd_config_get(int argc, const char **argv, const char *prefix) OPT_STRING(0, "default", &default_value, N_("value"), N_("use default value when missing entry")), OPT_END(), }; + int ret; argc = parse_options(argc, argv, prefix, opts, builtin_config_get_usage, PARSE_OPT_STOP_AT_NON_OPTION); @@ -816,8 +817,11 @@ static int cmd_config_get(int argc, const char **argv, const char *prefix) setup_auto_pager("config", 1); if (url) - return get_urlmatch(argv[0], url); - return get_value(argv[0], value_pattern, flags); + ret = get_urlmatch(argv[0], url); + else + ret = get_value(argv[0], value_pattern, flags); + + return ret; } static int cmd_config_set(int argc, const char **argv, const char *prefix) @@ -888,6 +892,7 @@ static int cmd_config_unset(int argc, const char **argv, const char *prefix) OPT_BIT(0, "fixed-value", &flags, N_("use string equality when comparing values to value pattern"), CONFIG_FLAGS_FIXED_VALUE), OPT_END(), }; + int ret; argc = parse_options(argc, argv, prefix, opts, builtin_config_unset_usage, PARSE_OPT_STOP_AT_NON_OPTION); @@ -900,12 +905,14 @@ static int cmd_config_unset(int argc, const char **argv, const char *prefix) check_write(); if ((flags & CONFIG_FLAGS_MULTI_REPLACE) || value_pattern) - return git_config_set_multivar_in_file_gently(given_config_source.file, - argv[0], NULL, value_pattern, - NULL, flags); + ret = git_config_set_multivar_in_file_gently(given_config_source.file, + argv[0], NULL, value_pattern, + NULL, flags); else - return git_config_set_in_file_gently(given_config_source.file, argv[0], - NULL, NULL); + ret = git_config_set_in_file_gently(given_config_source.file, argv[0], + NULL, NULL); + + return ret; } static int cmd_config_rename_section(int argc, const char **argv, const char *prefix) @@ -926,11 +933,13 @@ static int cmd_config_rename_section(int argc, const char **argv, const char *pr ret = git_config_rename_section_in_file(given_config_source.file, argv[0], argv[1]); if (ret < 0) - return ret; + goto out; else if (!ret) die(_("no such section: %s"), argv[0]); + ret = 0; - return 0; +out: + return ret; } static int cmd_config_remove_section(int argc, const char **argv, const char *prefix) @@ -951,11 +960,13 @@ static int cmd_config_remove_section(int argc, const char **argv, const char *pr ret = git_config_rename_section_in_file(given_config_source.file, argv[0], NULL); if (ret < 0) - return ret; + goto out; else if (!ret) die(_("no such section: %s"), argv[0]); + ret = 0; - return 0; +out: + return ret; } static int show_editor(void) @@ -1199,41 +1210,41 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) } else if (actions == ACTION_GET) { check_argc(argc, 1, 2); - return get_value(argv[0], argv[1], flags); + ret = get_value(argv[0], argv[1], flags); } else if (actions == ACTION_GET_ALL) { do_all = 1; check_argc(argc, 1, 2); - return get_value(argv[0], argv[1], flags); + ret = get_value(argv[0], argv[1], flags); } else if (actions == ACTION_GET_REGEXP) { show_keys = 1; use_key_regexp = 1; do_all = 1; check_argc(argc, 1, 2); - return get_value(argv[0], argv[1], flags); + ret = get_value(argv[0], argv[1], flags); } else if (actions == ACTION_GET_URLMATCH) { check_argc(argc, 2, 2); - return get_urlmatch(argv[0], argv[1]); + ret = get_urlmatch(argv[0], argv[1]); } else if (actions == ACTION_UNSET) { check_write(); check_argc(argc, 1, 2); if (argc == 2) - return git_config_set_multivar_in_file_gently(given_config_source.file, - argv[0], NULL, argv[1], - NULL, flags); + ret = git_config_set_multivar_in_file_gently(given_config_source.file, + argv[0], NULL, argv[1], + NULL, flags); else - return git_config_set_in_file_gently(given_config_source.file, - argv[0], NULL, NULL); + ret = git_config_set_in_file_gently(given_config_source.file, + argv[0], NULL, NULL); } else if (actions == ACTION_UNSET_ALL) { check_write(); check_argc(argc, 1, 2); - return git_config_set_multivar_in_file_gently(given_config_source.file, - argv[0], NULL, argv[1], - NULL, flags | CONFIG_FLAGS_MULTI_REPLACE); + ret = git_config_set_multivar_in_file_gently(given_config_source.file, + argv[0], NULL, argv[1], + NULL, flags | CONFIG_FLAGS_MULTI_REPLACE); } else if (actions == ACTION_RENAME_SECTION) { check_write(); @@ -1241,7 +1252,7 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) ret = git_config_rename_section_in_file(given_config_source.file, argv[0], argv[1]); if (ret < 0) - return ret; + goto out; else if (!ret) die(_("no such section: %s"), argv[0]); else @@ -1253,7 +1264,7 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) ret = git_config_rename_section_in_file(given_config_source.file, argv[0], NULL); if (ret < 0) - return ret; + goto out; else if (!ret) die(_("no such section: %s"), argv[0]); else @@ -1267,9 +1278,10 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) check_argc(argc, 1, 2); if (argc == 2) color_stdout_is_tty = git_config_bool("command line", argv[1]); - return get_colorbool(argv[0], argc == 2); + ret = get_colorbool(argv[0], argc == 2); } +out: free(comment); free(value); return ret; From patchwork Mon May 13 10:22:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663265 Received: from wfout3-smtp.messagingengine.com (wfout3-smtp.messagingengine.com [64.147.123.146]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 37BA514A097 for ; Mon, 13 May 2024 10:22:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.146 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595770; cv=none; b=UroJIORPHst1C351OJncSFn/TCZ9sVEoLcGVWbricXy/mpCmZsWk460o2Y7OcANcFv4MUuM7sPAPMmGiJ/2Tce40Zh7Zx1Sra8Rx+b58Lo+47wIE5eeWVLyr9NiCwT+kpdXykBP8alYPdIimJ90y7QMkjX33IvEQtMeZae9uDXs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595770; c=relaxed/simple; bh=GmiogVNobWWnq7D3tv122e6B3pvV9b0Yq7jaFxMEzR8=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=KXKUyjXDq8tg2Wc+8XRlC13uyDOYmsc3MGy5Lua6PPFFdV83gCXZ1naaJYkMBS4jfWjSzlvOYJWWDWsQZ5YG0HzTtVyG9cS3sX3qr9+1CPPqN3u+i9vIw9Xq093U9ELRwuzrf9gDHosbsDGw89cR8H9ECuw5/CKqx0j99QhN7Vo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=ZC4GNLp2; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=L+Lp25IU; arc=none smtp.client-ip=64.147.123.146 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="ZC4GNLp2"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="L+Lp25IU" Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailfout.west.internal (Postfix) with ESMTP id 66EBE1C000F2; Mon, 13 May 2024 06:22:47 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute5.internal (MEProxy); Mon, 13 May 2024 06:22:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595767; x=1715682167; bh=Z+tvmaDW57 zUI651ik8ZCX+RPXzjQQIdOxp1AtG2tJE=; b=ZC4GNLp2KagdFvWT4q1KPuiNlq w5Cyr93pdeAqSz4m+2bw2eMLGWOzCcs8SrYwdae0nP6yPi1u0qbY9CRPu80n+UXc KlwCIqqPycWMp7yTH1/HzgKkYDzqgJQTgPKmfuqrhHtqiQZKiDtwXeLplYd2367N 9ubucXlTQHCj5F7eZqFa/Kjqz/PfugzD0Y/1Bffo97fufdCzrJCbS9JbTl65vdzh gwOndNI93Itui8ksVqhne8dE0mjVamcHEue7o1HAQxkjqDPHRQO1KoazYhsN4bW0 1oUkcKRD3AuAqpZ8M1ndFNEfSIJYRifdXzo7ehxVOA8wtuSI09uUbwAbq6yA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595767; x=1715682167; bh=Z+tvmaDW57zUI651ik8ZCX+RPXzj QQIdOxp1AtG2tJE=; b=L+Lp25IUKHytoRpHRaAlGIy+Qrm6Is2L7ZkInwG6iX6u XKu9Gy9oKrDH19kHKVHic1jsrJGqp4sXW/6+PzsumIey/CgN977DmDUmos1TOl6a 05qsbv6e/Rr4pNTMGhlKNyzUCjMgxV+r8VPkkGQXPAFLYRtuCnSElr4UraLBGYSU /WdbdZ6wMnwF0GTXBnzNpCg8Je15/ccUgppGPTJnplIwTKqtB9/YX8clJ5hqEw8o jG5KdcMGmKYRzM1IMpmG6oTVzGjwIEU6woIr23sfUlh7M0andZrGQEM7mhSPGaPO 6UvS7q2ouZTQaqVGkTN/zgtGuRPFxCdghyHafL5Kaw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:22:45 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id b08a646e (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:22:27 +0000 (UTC) Date: Mon, 13 May 2024 12:22:43 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 09/21] builtin/config: move location options into local variables Message-ID: References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: The location options are tracked via a set of global variables. Move them into a self-contained structure so that we can easily parse all relevant options and hand them over to the various functions that require them. Signed-off-by: Patrick Steinhardt --- builtin/config.c | 311 ++++++++++++++++++++++++++--------------------- 1 file changed, 174 insertions(+), 137 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index 155564b832..c309497e23 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -62,6 +62,25 @@ static const char *const builtin_config_edit_usage[] = { NULL }; +#define CONFIG_LOCATION_OPTIONS(opts) \ + OPT_GROUP(N_("Config file location")), \ + OPT_BOOL(0, "global", &opts.use_global_config, N_("use global config file")), \ + OPT_BOOL(0, "system", &opts.use_system_config, N_("use system config file")), \ + OPT_BOOL(0, "local", &opts.use_local_config, N_("use repository config file")), \ + OPT_BOOL(0, "worktree", &opts.use_worktree_config, N_("use per-worktree config file")), \ + OPT_STRING('f', "file", &opts.source.file, N_("file"), N_("use given config file")), \ + OPT_STRING(0, "blob", &opts.source.blob, N_("blob-id"), N_("read config from given blob object")) + +struct config_location_options { + struct git_config_source source; + struct config_options options; + int use_global_config; + int use_system_config; + int use_local_config; + int use_worktree_config; +}; +#define CONFIG_LOCATION_OPTIONS_INIT {0} + static char *key; static regex_t *key_regexp; static const char *value_pattern; @@ -75,14 +94,10 @@ static char delim = '='; static char key_delim = ' '; static char term = '\n'; -static int use_global_config, use_system_config, use_local_config; -static int use_worktree_config; -static struct git_config_source given_config_source; static int type; static char *default_value; static int end_nul; static int respect_includes_opt = -1; -static struct config_options config_options; static int show_origin; static int show_scope; static int fixed_value; @@ -298,7 +313,8 @@ static int collect_config(const char *key_, const char *value_, return format_config(&values->items[values->nr++], key_, value_, kvi); } -static int get_value(const char *key_, const char *regex_, unsigned flags) +static int get_value(const struct config_location_options *opts, + const char *key_, const char *regex_, unsigned flags) { int ret = CONFIG_GENERIC_ERROR; struct strbuf_list values = {NULL}; @@ -353,8 +369,8 @@ static int get_value(const char *key_, const char *regex_, unsigned flags) } config_with_options(collect_config, &values, - &given_config_source, the_repository, - &config_options); + &opts->source, the_repository, + &opts->options); if (!values.nr && default_value) { struct key_value_info kvi = KVI_INIT; @@ -464,14 +480,15 @@ static int git_get_color_config(const char *var, const char *value, return 0; } -static void get_color(const char *var, const char *def_color) +static void get_color(const struct config_location_options *opts, + const char *var, const char *def_color) { get_color_slot = var; get_color_found = 0; parsed_color[0] = '\0'; config_with_options(git_get_color_config, NULL, - &given_config_source, the_repository, - &config_options); + &opts->source, the_repository, + &opts->options); if (!get_color_found && def_color) { if (color_parse(def_color, parsed_color) < 0) @@ -497,15 +514,16 @@ static int git_get_colorbool_config(const char *var, const char *value, return 0; } -static int get_colorbool(const char *var, int print) +static int get_colorbool(const struct config_location_options *opts, + const char *var, int print) { get_colorbool_slot = var; get_colorbool_found = -1; get_diff_color_found = -1; get_color_ui_found = -1; config_with_options(git_get_colorbool_config, NULL, - &given_config_source, the_repository, - &config_options); + &opts->source, the_repository, + &opts->options); if (get_colorbool_found < 0) { if (!strcmp(get_colorbool_slot, "color.diff")) @@ -527,15 +545,15 @@ static int get_colorbool(const char *var, int print) return get_colorbool_found ? 0 : 1; } -static void check_write(void) +static void check_write(const struct git_config_source *source) { - if (!given_config_source.file && !startup_info->have_repository) + if (!source->file && !startup_info->have_repository) die(_("not in a git directory")); - if (given_config_source.use_stdin) + if (source->use_stdin) die(_("writing to stdin is not supported")); - if (given_config_source.blob) + if (source->blob) die(_("writing config blobs is not supported")); } @@ -572,7 +590,8 @@ static int urlmatch_collect_fn(const char *var, const char *value, return 0; } -static int get_urlmatch(const char *var, const char *url) +static int get_urlmatch(const struct config_location_options *opts, + const char *var, const char *url) { int ret; char *section_tail; @@ -599,8 +618,8 @@ static int get_urlmatch(const char *var, const char *url) } config_with_options(urlmatch_config_entry, &config, - &given_config_source, the_repository, - &config_options); + &opts->source, the_repository, + &opts->options); ret = !values.nr; @@ -638,34 +657,40 @@ static char *default_user_config(void) return strbuf_detach(&buf, NULL); } -static void handle_config_location(const char *prefix) +static void location_options_init(struct config_location_options *opts, + const char *prefix) { - if (use_global_config + use_system_config + use_local_config + - use_worktree_config + - !!given_config_source.file + !!given_config_source.blob > 1) { + if (!opts->source.file) + opts->source.file = xstrdup_or_null(getenv(CONFIG_ENVIRONMENT)); + else + opts->source.file = xstrdup(opts->source.file); + + if (opts->use_global_config + opts->use_system_config + + opts->use_local_config + opts->use_worktree_config + + !!opts->source.file + !!opts->source.blob > 1) { error(_("only one config file at a time")); exit(129); } if (!startup_info->have_repository) { - if (use_local_config) + if (opts->use_local_config) die(_("--local can only be used inside a git repository")); - if (given_config_source.blob) + if (opts->source.blob) die(_("--blob can only be used inside a git repository")); - if (use_worktree_config) + if (opts->use_worktree_config) die(_("--worktree can only be used inside a git repository")); } - if (given_config_source.file && - !strcmp(given_config_source.file, "-")) { - given_config_source.file = NULL; - given_config_source.use_stdin = 1; - given_config_source.scope = CONFIG_SCOPE_COMMAND; + if (opts->source.file && + !strcmp(opts->source.file, "-")) { + opts->source.file = NULL; + opts->source.use_stdin = 1; + opts->source.scope = CONFIG_SCOPE_COMMAND; } - if (use_global_config) { - given_config_source.file = git_global_config(); - if (!given_config_source.file) + if (opts->use_global_config) { + opts->source.file = git_global_config(); + if (!opts->source.file) /* * It is unknown if HOME/.gitconfig exists, so * we do not know if we should write to XDG @@ -673,17 +698,17 @@ static void handle_config_location(const char *prefix) * is set and points at a sane location. */ die(_("$HOME not set")); - given_config_source.scope = CONFIG_SCOPE_GLOBAL; - } else if (use_system_config) { - given_config_source.file = git_system_config(); - given_config_source.scope = CONFIG_SCOPE_SYSTEM; - } else if (use_local_config) { - given_config_source.file = git_pathdup("config"); - given_config_source.scope = CONFIG_SCOPE_LOCAL; - } else if (use_worktree_config) { + opts->source.scope = CONFIG_SCOPE_GLOBAL; + } else if (opts->use_system_config) { + opts->source.file = xstrdup_or_null(git_system_config()); + opts->source.scope = CONFIG_SCOPE_SYSTEM; + } else if (opts->use_local_config) { + opts->source.file = xstrdup_or_null(git_pathdup("config")); + opts->source.scope = CONFIG_SCOPE_LOCAL; + } else if (opts->use_worktree_config) { struct worktree **worktrees = get_worktrees(); if (the_repository->repository_format_worktree_config) - given_config_source.file = git_pathdup("config.worktree"); + opts->source.file = git_pathdup("config.worktree"); else if (worktrees[0] && worktrees[1]) die(_("--worktree cannot be used with multiple " "working trees unless the config\n" @@ -691,28 +716,33 @@ static void handle_config_location(const char *prefix) "Please read \"CONFIGURATION FILE\"\n" "section in \"git help worktree\" for details")); else - given_config_source.file = git_pathdup("config"); - given_config_source.scope = CONFIG_SCOPE_LOCAL; + opts->source.file = git_pathdup("config"); + opts->source.scope = CONFIG_SCOPE_LOCAL; free_worktrees(worktrees); - } else if (given_config_source.file) { - if (!is_absolute_path(given_config_source.file) && prefix) - given_config_source.file = - prefix_filename(prefix, given_config_source.file); - given_config_source.scope = CONFIG_SCOPE_COMMAND; - } else if (given_config_source.blob) { - given_config_source.scope = CONFIG_SCOPE_COMMAND; + } else if (opts->source.file) { + if (!is_absolute_path(opts->source.file) && prefix) + opts->source.file = + prefix_filename(prefix, opts->source.file); + opts->source.scope = CONFIG_SCOPE_COMMAND; + } else if (opts->source.blob) { + opts->source.scope = CONFIG_SCOPE_COMMAND; } if (respect_includes_opt == -1) - config_options.respect_includes = !given_config_source.file; + opts->options.respect_includes = !opts->source.file; else - config_options.respect_includes = respect_includes_opt; + opts->options.respect_includes = respect_includes_opt; if (startup_info->have_repository) { - config_options.commondir = get_git_common_dir(); - config_options.git_dir = get_git_dir(); + opts->options.commondir = get_git_common_dir(); + opts->options.git_dir = get_git_dir(); } } +static void location_options_release(struct config_location_options *opts) +{ + free((char *) opts->source.file); +} + static void handle_nul(void) { if (end_nul) { term = '\0'; @@ -721,15 +751,6 @@ static void handle_nul(void) { } } -#define CONFIG_LOCATION_OPTIONS \ - OPT_GROUP(N_("Config file location")), \ - OPT_BOOL(0, "global", &use_global_config, N_("use global config file")), \ - OPT_BOOL(0, "system", &use_system_config, N_("use system config file")), \ - OPT_BOOL(0, "local", &use_local_config, N_("use repository config file")), \ - OPT_BOOL(0, "worktree", &use_worktree_config, N_("use per-worktree config file")), \ - OPT_STRING('f', "file", &given_config_source.file, N_("file"), N_("use given config file")), \ - OPT_STRING(0, "blob", &given_config_source.blob, N_("blob-id"), N_("read config from given blob object")) - #define CONFIG_TYPE_OPTIONS \ OPT_GROUP(N_("Type")), \ OPT_CALLBACK('t', "type", &type, N_("type"), N_("value is given this type"), option_parse_type), \ @@ -749,8 +770,9 @@ static void handle_nul(void) { static int cmd_config_list(int argc, const char **argv, const char *prefix) { + struct config_location_options location_opts = CONFIG_LOCATION_OPTIONS_INIT; struct option opts[] = { - CONFIG_LOCATION_OPTIONS, + CONFIG_LOCATION_OPTIONS(location_opts), CONFIG_DISPLAY_OPTIONS, OPT_GROUP(N_("Other")), OPT_BOOL(0, "includes", &respect_includes_opt, N_("respect include directives on lookup")), @@ -760,30 +782,32 @@ static int cmd_config_list(int argc, const char **argv, const char *prefix) argc = parse_options(argc, argv, prefix, opts, builtin_config_list_usage, 0); check_argc(argc, 0, 0); - handle_config_location(prefix); + location_options_init(&location_opts, prefix); handle_nul(); setup_auto_pager("config", 1); if (config_with_options(show_all_config, NULL, - &given_config_source, the_repository, - &config_options) < 0) { - if (given_config_source.file) + &location_opts.source, the_repository, + &location_opts.options) < 0) { + if (location_opts.source.file) die_errno(_("unable to read config file '%s'"), - given_config_source.file); + location_opts.source.file); else die(_("error processing config file(s)")); } + location_options_release(&location_opts); return 0; } static int cmd_config_get(int argc, const char **argv, const char *prefix) { + struct config_location_options location_opts = CONFIG_LOCATION_OPTIONS_INIT; const char *value_pattern = NULL, *url = NULL; int flags = 0; struct option opts[] = { - CONFIG_LOCATION_OPTIONS, + CONFIG_LOCATION_OPTIONS(location_opts), CONFIG_TYPE_OPTIONS, OPT_GROUP(N_("Filter options")), OPT_BOOL(0, "all", &do_all, N_("return all values for multi-valued config options")), @@ -811,26 +835,28 @@ static int cmd_config_get(int argc, const char **argv, const char *prefix) if (url && (do_all || use_key_regexp || value_pattern)) die(_("--url= cannot be used with --all, --regexp or --value")); - handle_config_location(prefix); + location_options_init(&location_opts, prefix); handle_nul(); setup_auto_pager("config", 1); if (url) - ret = get_urlmatch(argv[0], url); + ret = get_urlmatch(&location_opts, argv[0], url); else - ret = get_value(argv[0], value_pattern, flags); + ret = get_value(&location_opts, argv[0], value_pattern, flags); + location_options_release(&location_opts); return ret; } static int cmd_config_set(int argc, const char **argv, const char *prefix) { + struct config_location_options location_opts = CONFIG_LOCATION_OPTIONS_INIT; const char *value_pattern = NULL, *comment_arg = NULL; char *comment = NULL; int flags = 0, append = 0; struct option opts[] = { - CONFIG_LOCATION_OPTIONS, + CONFIG_LOCATION_OPTIONS(location_opts), CONFIG_TYPE_OPTIONS, OPT_GROUP(N_("Filter")), OPT_BIT(0, "all", &flags, N_("replace multi-valued config option with new value"), CONFIG_FLAGS_MULTI_REPLACE), @@ -858,23 +884,24 @@ static int cmd_config_set(int argc, const char **argv, const char *prefix) comment = git_config_prepare_comment_string(comment_arg); - handle_config_location(prefix); - check_write(); + location_options_init(&location_opts, prefix); + check_write(&location_opts.source); value = normalize_value(argv[0], argv[1], &default_kvi); if ((flags & CONFIG_FLAGS_MULTI_REPLACE) || value_pattern) { - ret = git_config_set_multivar_in_file_gently(given_config_source.file, + ret = git_config_set_multivar_in_file_gently(location_opts.source.file, argv[0], value, value_pattern, comment, flags); } else { - ret = git_config_set_in_file_gently(given_config_source.file, + ret = git_config_set_in_file_gently(location_opts.source.file, argv[0], comment, value); if (ret == CONFIG_NOTHING_SET) error(_("cannot overwrite multiple values with a single value\n" " Use a regexp, --add or --replace-all to change %s."), argv[0]); } + location_options_release(&location_opts); free(comment); free(value); return ret; @@ -882,10 +909,11 @@ static int cmd_config_set(int argc, const char **argv, const char *prefix) static int cmd_config_unset(int argc, const char **argv, const char *prefix) { + struct config_location_options location_opts = CONFIG_LOCATION_OPTIONS_INIT; const char *value_pattern = NULL; int flags = 0; struct option opts[] = { - CONFIG_LOCATION_OPTIONS, + CONFIG_LOCATION_OPTIONS(location_opts), OPT_GROUP(N_("Filter")), OPT_BIT(0, "all", &flags, N_("replace multi-valued config option with new value"), CONFIG_FLAGS_MULTI_REPLACE), OPT_STRING(0, "value", &value_pattern, N_("pattern"), N_("show config with values matching the pattern")), @@ -901,24 +929,26 @@ static int cmd_config_unset(int argc, const char **argv, const char *prefix) if ((flags & CONFIG_FLAGS_FIXED_VALUE) && !value_pattern) die(_("--fixed-value only applies with 'value-pattern'")); - handle_config_location(prefix); - check_write(); + location_options_init(&location_opts, prefix); + check_write(&location_opts.source); if ((flags & CONFIG_FLAGS_MULTI_REPLACE) || value_pattern) - ret = git_config_set_multivar_in_file_gently(given_config_source.file, + ret = git_config_set_multivar_in_file_gently(location_opts.source.file, argv[0], NULL, value_pattern, NULL, flags); else - ret = git_config_set_in_file_gently(given_config_source.file, argv[0], + ret = git_config_set_in_file_gently(location_opts.source.file, argv[0], NULL, NULL); + location_options_release(&location_opts); return ret; } static int cmd_config_rename_section(int argc, const char **argv, const char *prefix) { + struct config_location_options location_opts = CONFIG_LOCATION_OPTIONS_INIT; struct option opts[] = { - CONFIG_LOCATION_OPTIONS, + CONFIG_LOCATION_OPTIONS(location_opts), OPT_END(), }; int ret; @@ -927,10 +957,10 @@ static int cmd_config_rename_section(int argc, const char **argv, const char *pr PARSE_OPT_STOP_AT_NON_OPTION); check_argc(argc, 2, 2); - handle_config_location(prefix); - check_write(); + location_options_init(&location_opts, prefix); + check_write(&location_opts.source); - ret = git_config_rename_section_in_file(given_config_source.file, + ret = git_config_rename_section_in_file(location_opts.source.file, argv[0], argv[1]); if (ret < 0) goto out; @@ -939,13 +969,15 @@ static int cmd_config_rename_section(int argc, const char **argv, const char *pr ret = 0; out: + location_options_release(&location_opts); return ret; } static int cmd_config_remove_section(int argc, const char **argv, const char *prefix) { + struct config_location_options location_opts = CONFIG_LOCATION_OPTIONS_INIT; struct option opts[] = { - CONFIG_LOCATION_OPTIONS, + CONFIG_LOCATION_OPTIONS(location_opts), OPT_END(), }; int ret; @@ -954,10 +986,10 @@ static int cmd_config_remove_section(int argc, const char **argv, const char *pr PARSE_OPT_STOP_AT_NON_OPTION); check_argc(argc, 1, 1); - handle_config_location(prefix); - check_write(); + location_options_init(&location_opts, prefix); + check_write(&location_opts.source); - ret = git_config_rename_section_in_file(given_config_source.file, + ret = git_config_rename_section_in_file(location_opts.source.file, argv[0], NULL); if (ret < 0) goto out; @@ -966,24 +998,25 @@ static int cmd_config_remove_section(int argc, const char **argv, const char *pr ret = 0; out: + location_options_release(&location_opts); return ret; } -static int show_editor(void) +static int show_editor(struct config_location_options *opts) { char *config_file; - if (!given_config_source.file && !startup_info->have_repository) + if (!opts->source.file && !startup_info->have_repository) die(_("not in a git directory")); - if (given_config_source.use_stdin) + if (opts->source.use_stdin) die(_("editing stdin is not supported")); - if (given_config_source.blob) + if (opts->source.blob) die(_("editing blobs is not supported")); git_config(git_default_config, NULL); - config_file = given_config_source.file ? - xstrdup(given_config_source.file) : + config_file = opts->source.file ? + xstrdup(opts->source.file) : git_pathdup("config"); - if (use_global_config) { + if (opts->use_global_config) { int fd = open(config_file, O_CREAT | O_EXCL | O_WRONLY, 0666); if (fd >= 0) { char *content = default_user_config(); @@ -1002,18 +1035,22 @@ static int show_editor(void) static int cmd_config_edit(int argc, const char **argv, const char *prefix) { + struct config_location_options location_opts = CONFIG_LOCATION_OPTIONS_INIT; struct option opts[] = { - CONFIG_LOCATION_OPTIONS, + CONFIG_LOCATION_OPTIONS(location_opts), OPT_END(), }; + int ret; argc = parse_options(argc, argv, prefix, opts, builtin_config_edit_usage, 0); check_argc(argc, 0, 0); - handle_config_location(prefix); - check_write(); + location_options_init(&location_opts, prefix); + check_write(&location_opts.source); - return show_editor(); + ret = show_editor(&location_opts); + location_options_release(&location_opts); + return ret; } static int cmd_config_actions(int argc, const char **argv, const char *prefix) @@ -1036,10 +1073,11 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) ACTION_GET_COLORBOOL = (1<<14), ACTION_GET_URLMATCH = (1<<15), }; + struct config_location_options location_opts = CONFIG_LOCATION_OPTIONS_INIT; const char *comment_arg = NULL; int actions = 0; struct option opts[] = { - CONFIG_LOCATION_OPTIONS, + CONFIG_LOCATION_OPTIONS(location_opts), OPT_GROUP(N_("Action")), OPT_CMDMODE(0, "get", &actions, N_("get value: name []"), ACTION_GET), OPT_CMDMODE(0, "get-all", &actions, N_("get all values: key []"), ACTION_GET_ALL), @@ -1073,7 +1111,7 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) builtin_config_usage, PARSE_OPT_STOP_AT_NON_OPTION); - handle_config_location(prefix); + location_options_init(&location_opts, prefix); handle_nul(); if ((actions & (ACTION_GET_COLOR|ACTION_GET_COLORBOOL)) && type) { @@ -1162,94 +1200,94 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) if (actions == ACTION_LIST) { check_argc(argc, 0, 0); if (config_with_options(show_all_config, NULL, - &given_config_source, the_repository, - &config_options) < 0) { - if (given_config_source.file) + &location_opts.source, the_repository, + &location_opts.options) < 0) { + if (location_opts.source.file) die_errno(_("unable to read config file '%s'"), - given_config_source.file); + location_opts.source.file); else die(_("error processing config file(s)")); } } else if (actions == ACTION_EDIT) { - ret = show_editor(); + ret = show_editor(&location_opts); } else if (actions == ACTION_SET) { - check_write(); + check_write(&location_opts.source); check_argc(argc, 2, 2); value = normalize_value(argv[0], argv[1], &default_kvi); - ret = git_config_set_in_file_gently(given_config_source.file, argv[0], comment, value); + ret = git_config_set_in_file_gently(location_opts.source.file, argv[0], comment, value); if (ret == CONFIG_NOTHING_SET) error(_("cannot overwrite multiple values with a single value\n" " Use a regexp, --add or --replace-all to change %s."), argv[0]); } else if (actions == ACTION_SET_ALL) { - check_write(); + check_write(&location_opts.source); check_argc(argc, 2, 3); value = normalize_value(argv[0], argv[1], &default_kvi); - ret = git_config_set_multivar_in_file_gently(given_config_source.file, + ret = git_config_set_multivar_in_file_gently(location_opts.source.file, argv[0], value, argv[2], comment, flags); } else if (actions == ACTION_ADD) { - check_write(); + check_write(&location_opts.source); check_argc(argc, 2, 2); value = normalize_value(argv[0], argv[1], &default_kvi); - ret = git_config_set_multivar_in_file_gently(given_config_source.file, + ret = git_config_set_multivar_in_file_gently(location_opts.source.file, argv[0], value, CONFIG_REGEX_NONE, comment, flags); } else if (actions == ACTION_REPLACE_ALL) { - check_write(); + check_write(&location_opts.source); check_argc(argc, 2, 3); value = normalize_value(argv[0], argv[1], &default_kvi); - ret = git_config_set_multivar_in_file_gently(given_config_source.file, + ret = git_config_set_multivar_in_file_gently(location_opts.source.file, argv[0], value, argv[2], comment, flags | CONFIG_FLAGS_MULTI_REPLACE); } else if (actions == ACTION_GET) { check_argc(argc, 1, 2); - ret = get_value(argv[0], argv[1], flags); + ret = get_value(&location_opts, argv[0], argv[1], flags); } else if (actions == ACTION_GET_ALL) { do_all = 1; check_argc(argc, 1, 2); - ret = get_value(argv[0], argv[1], flags); + ret = get_value(&location_opts, argv[0], argv[1], flags); } else if (actions == ACTION_GET_REGEXP) { show_keys = 1; use_key_regexp = 1; do_all = 1; check_argc(argc, 1, 2); - ret = get_value(argv[0], argv[1], flags); + ret = get_value(&location_opts, argv[0], argv[1], flags); } else if (actions == ACTION_GET_URLMATCH) { check_argc(argc, 2, 2); - ret = get_urlmatch(argv[0], argv[1]); + ret = get_urlmatch(&location_opts, argv[0], argv[1]); } else if (actions == ACTION_UNSET) { - check_write(); + check_write(&location_opts.source); check_argc(argc, 1, 2); if (argc == 2) - ret = git_config_set_multivar_in_file_gently(given_config_source.file, + ret = git_config_set_multivar_in_file_gently(location_opts.source.file, argv[0], NULL, argv[1], NULL, flags); else - ret = git_config_set_in_file_gently(given_config_source.file, + ret = git_config_set_in_file_gently(location_opts.source.file, argv[0], NULL, NULL); } else if (actions == ACTION_UNSET_ALL) { - check_write(); + check_write(&location_opts.source); check_argc(argc, 1, 2); - ret = git_config_set_multivar_in_file_gently(given_config_source.file, + ret = git_config_set_multivar_in_file_gently(location_opts.source.file, argv[0], NULL, argv[1], NULL, flags | CONFIG_FLAGS_MULTI_REPLACE); } else if (actions == ACTION_RENAME_SECTION) { - check_write(); + check_write(&location_opts.source); check_argc(argc, 2, 2); - ret = git_config_rename_section_in_file(given_config_source.file, + ret = git_config_rename_section_in_file(location_opts.source.file, argv[0], argv[1]); if (ret < 0) goto out; @@ -1259,9 +1297,9 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) ret = 0; } else if (actions == ACTION_REMOVE_SECTION) { - check_write(); + check_write(&location_opts.source); check_argc(argc, 1, 1); - ret = git_config_rename_section_in_file(given_config_source.file, + ret = git_config_rename_section_in_file(location_opts.source.file, argv[0], NULL); if (ret < 0) goto out; @@ -1272,16 +1310,17 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) } else if (actions == ACTION_GET_COLOR) { check_argc(argc, 1, 2); - get_color(argv[0], argv[1]); + get_color(&location_opts, argv[0], argv[1]); } else if (actions == ACTION_GET_COLORBOOL) { check_argc(argc, 1, 2); if (argc == 2) color_stdout_is_tty = git_config_bool("command line", argv[1]); - ret = get_colorbool(argv[0], argc == 2); + ret = get_colorbool(&location_opts, argv[0], argc == 2); } out: + location_options_release(&location_opts); free(comment); free(value); return ret; @@ -1301,8 +1340,6 @@ int cmd_config(int argc, const char **argv, const char *prefix) OPT_END(), }; - given_config_source.file = xstrdup_or_null(getenv(CONFIG_ENVIRONMENT)); - /* * This is somewhat hacky: we first parse the command line while * keeping all args intact in order to determine whether a subcommand From patchwork Mon May 13 10:22:49 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663266 Received: from wfout3-smtp.messagingengine.com (wfout3-smtp.messagingengine.com [64.147.123.146]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4A84414A097 for ; Mon, 13 May 2024 10:22:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.146 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595776; cv=none; b=Q4/rnQDjzi//baEJny8n0PtCM6Au7/YU3I94HlLoiNS4pVU9qYnlINEOTbRidXpM/0huEzWCEXJMUZALbZw6Ewsp9FFGM5CYh85drFudlyysKCVsNGI6pqCPOxijX9igo2ZpJMqEOQyjHnEhXZzomYfDfgF13P6092sAEmmbKTc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595776; c=relaxed/simple; bh=0Y0olY73uw+h+g60v07DeJbsRiK0DhvevSF4Z+zlrK0=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=OFYfM93B71STTiEgHE566IheLLL2yW/A/9bbN17Z0bsRBEv5vy8oG3BAP7HoSM0oFQ+aZBB4h/VnE5Qo6dwmYZbvf29+eaPuAx6+53cPPa2/SHXn1iVvGilDvyaHFWi7bprfsRKqsz8CuB1mCSDdElGLTZWQ5eIgVRJQWj3ztg8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=bxwz6bK7; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=O69mHQ7w; arc=none smtp.client-ip=64.147.123.146 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="bxwz6bK7"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="O69mHQ7w" Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailfout.west.internal (Postfix) with ESMTP id 6A6181C0009A; Mon, 13 May 2024 06:22:53 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Mon, 13 May 2024 06:22:53 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595773; x=1715682173; bh=qM3lgkDQ+H UVnXpul4lK0qpNm5LUlyI2bgdZ5H5r0yg=; b=bxwz6bK79Qa6f6e56Yc7p8vOBI DlCRJ0eSC6q/V13RcUtWOysWXDduhBiz2Xgv0cWcka2SXT7uU5wuzAeZBHukGRkL CSk2pnzq0jT69Zxo0GgrnufkObZbBO+yYdhUE2siD5C3qVlds3vySh6OYf9dam6A RCM/0xqm3WhZg98CxQ3noyYoDN7x3yFeQkH3s73R10Tl/srmBMZTOEBr8QjffhiT rwvS3I+JTMrXMOVKXxYdJSP1nKkROefFxarcrbNXjsAv1NFQ4h2s4s+pxa4uLG2x B0HJiDfFfDE5eLegWuBQKpyw4z8GXljgxSC+7BDZVBWFg3lTWdjyL2OlI4kg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595773; x=1715682173; bh=qM3lgkDQ+HUVnXpul4lK0qpNm5LU lyI2bgdZ5H5r0yg=; b=O69mHQ7wvMSf2kchpeZQRHBB/byvDmYZ5zC7sDmrxtE4 fr+seMCry8SiSrm8mmYpxGeo+e0gLggS32D3i4y26yFbBr0KUm3xdeTWHKW5o9Xi WPvHesGXqVyIuHaFKCDyGtirTCG7XGum+As4cIfXOjaerH4pydJDrYwXXRdooWXo 50Nr5XkLDbd76iKIZH8JHodhPyShI/TBX5lKxk8InSZrSK4JHVe/WcC314Bony06 ybzTqO4ZHRLbGFd1GcaI0gplxN4N5YZaOUE08WMXzhix8xADX9ufm84GIKCHRGuA m4pSbPrPNkjqEpDjstxN0MO6rYw5/N+0GEPkUEN//g== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgepfeenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:22:51 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id 4a33adbf (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:22:32 +0000 (UTC) Date: Mon, 13 May 2024 12:22:49 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 10/21] builtin/config: move display options into local variables Message-ID: References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: The display options are tracked via a set of global variables. Move them into a self-contained structure so that we can easily parse all relevant options and hand them over to the various functions that require them. Signed-off-by: Patrick Steinhardt --- builtin/config.c | 171 ++++++++++++++++++++++++++++------------------- 1 file changed, 101 insertions(+), 70 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index c309497e23..24ad8e7476 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -81,25 +81,42 @@ struct config_location_options { }; #define CONFIG_LOCATION_OPTIONS_INIT {0} +#define CONFIG_DISPLAY_OPTIONS(opts) \ + OPT_GROUP(N_("Display options")), \ + OPT_BOOL('z', "null", &opts.end_nul, N_("terminate values with NUL byte")), \ + OPT_BOOL(0, "name-only", &opts.omit_values, N_("show variable names only")), \ + OPT_BOOL(0, "show-origin", &opts.show_origin, N_("show origin of config (file, standard input, blob, command line)")), \ + OPT_BOOL(0, "show-scope", &opts.show_scope, N_("show scope of config (worktree, local, global, system, command)")), \ + OPT_BOOL(0, "show-names", &opts.show_keys, N_("show config keys in addition to their values")) + +struct config_display_options { + int end_nul; + int omit_values; + int show_origin; + int show_scope; + int show_keys; + /* Populated via `display_options_init()`. */ + int term; + int delim; + int key_delim; +}; +#define CONFIG_DISPLAY_OPTIONS_INIT { \ + .term = '\n', \ + .delim = '=', \ + .key_delim = ' ', \ +} + static char *key; static regex_t *key_regexp; static const char *value_pattern; static regex_t *regexp; -static int show_keys; -static int omit_values; static int use_key_regexp; static int do_all; static int do_not_match; -static char delim = '='; -static char key_delim = ' '; -static char term = '\n'; static int type; static char *default_value; -static int end_nul; static int respect_includes_opt = -1; -static int show_origin; -static int show_scope; static int fixed_value; #define TYPE_BOOL 1 @@ -177,24 +194,26 @@ static void check_argc(int argc, int min, int max) exit(129); } -static void show_config_origin(const struct key_value_info *kvi, +static void show_config_origin(const struct config_display_options *opts, + const struct key_value_info *kvi, struct strbuf *buf) { - const char term = end_nul ? '\0' : '\t'; + const char term = opts->end_nul ? '\0' : '\t'; strbuf_addstr(buf, config_origin_type_name(kvi->origin_type)); strbuf_addch(buf, ':'); - if (end_nul) + if (opts->end_nul) strbuf_addstr(buf, kvi->filename ? kvi->filename : ""); else quote_c_style(kvi->filename ? kvi->filename : "", buf, NULL, 0); strbuf_addch(buf, term); } -static void show_config_scope(const struct key_value_info *kvi, +static void show_config_scope(const struct config_display_options *opts, + const struct key_value_info *kvi, struct strbuf *buf) { - const char term = end_nul ? '\0' : '\t'; + const char term = opts->end_nul ? '\0' : '\t'; const char *scope = config_scope_name(kvi->scope); strbuf_addstr(buf, N_(scope)); @@ -203,24 +222,25 @@ static void show_config_scope(const struct key_value_info *kvi, static int show_all_config(const char *key_, const char *value_, const struct config_context *ctx, - void *cb UNUSED) + void *cb) { + const struct config_display_options *opts = cb; const struct key_value_info *kvi = ctx->kvi; - if (show_origin || show_scope) { + if (opts->show_origin || opts->show_scope) { struct strbuf buf = STRBUF_INIT; - if (show_scope) - show_config_scope(kvi, &buf); - if (show_origin) - show_config_origin(kvi, &buf); + if (opts->show_scope) + show_config_scope(opts, kvi, &buf); + if (opts->show_origin) + show_config_origin(opts, kvi, &buf); /* Use fwrite as "buf" can contain \0's if "end_null" is set. */ fwrite(buf.buf, 1, buf.len, stdout); strbuf_release(&buf); } - if (!omit_values && value_) - printf("%s%c%s%c", key_, delim, value_, term); + if (!opts->omit_values && value_) + printf("%s%c%s%c", key_, opts->delim, value_, opts->term); else - printf("%s%c", key_, term); + printf("%s%c", key_, opts->term); return 0; } @@ -230,18 +250,19 @@ struct strbuf_list { int alloc; }; -static int format_config(struct strbuf *buf, const char *key_, +static int format_config(const struct config_display_options *opts, + struct strbuf *buf, const char *key_, const char *value_, const struct key_value_info *kvi) { - if (show_scope) - show_config_scope(kvi, buf); - if (show_origin) - show_config_origin(kvi, buf); - if (show_keys) + if (opts->show_scope) + show_config_scope(opts, kvi, buf); + if (opts->show_origin) + show_config_origin(opts, kvi, buf); + if (opts->show_keys) strbuf_addstr(buf, key_); - if (!omit_values) { - if (show_keys) - strbuf_addch(buf, key_delim); + if (!opts->omit_values) { + if (opts->show_keys) + strbuf_addch(buf, opts->key_delim); if (type == TYPE_INT) strbuf_addf(buf, "%"PRId64, @@ -283,18 +304,24 @@ static int format_config(struct strbuf *buf, const char *key_, strbuf_addstr(buf, value_); } else { /* Just show the key name; back out delimiter */ - if (show_keys) + if (opts->show_keys) strbuf_setlen(buf, buf->len - 1); } } - strbuf_addch(buf, term); + strbuf_addch(buf, opts->term); return 0; } +struct collect_config_data { + const struct config_display_options *display_opts; + struct strbuf_list *values; +}; + static int collect_config(const char *key_, const char *value_, const struct config_context *ctx, void *cb) { - struct strbuf_list *values = cb; + struct collect_config_data *data = cb; + struct strbuf_list *values = data->values; const struct key_value_info *kvi = ctx->kvi; if (!use_key_regexp && strcmp(key_, key)) @@ -310,14 +337,20 @@ static int collect_config(const char *key_, const char *value_, ALLOC_GROW(values->items, values->nr + 1, values->alloc); strbuf_init(&values->items[values->nr], 0); - return format_config(&values->items[values->nr++], key_, value_, kvi); + return format_config(data->display_opts, &values->items[values->nr++], + key_, value_, kvi); } static int get_value(const struct config_location_options *opts, + const struct config_display_options *display_opts, const char *key_, const char *regex_, unsigned flags) { int ret = CONFIG_GENERIC_ERROR; struct strbuf_list values = {NULL}; + struct collect_config_data data = { + .display_opts = display_opts, + .values = &values, + }; int i; if (use_key_regexp) { @@ -368,7 +401,7 @@ static int get_value(const struct config_location_options *opts, } } - config_with_options(collect_config, &values, + config_with_options(collect_config, &data, &opts->source, the_repository, &opts->options); @@ -380,7 +413,7 @@ static int get_value(const struct config_location_options *opts, ALLOC_GROW(values.items, values.nr + 1, values.alloc); item = &values.items[values.nr++]; strbuf_init(item, 0); - if (format_config(item, key_, default_value, &kvi) < 0) + if (format_config(display_opts, item, key_, default_value, &kvi) < 0) die(_("failed to format default config value: %s"), default_value); } @@ -591,10 +624,12 @@ static int urlmatch_collect_fn(const char *var, const char *value, } static int get_urlmatch(const struct config_location_options *opts, + const struct config_display_options *_display_opts, const char *var, const char *url) { int ret; char *section_tail; + struct config_display_options display_opts = *_display_opts; struct string_list_item *item; struct urlmatch_config config = URLMATCH_CONFIG_INIT; struct string_list values = STRING_LIST_INIT_DUP; @@ -611,10 +646,10 @@ static int get_urlmatch(const struct config_location_options *opts, if (section_tail) { *section_tail = '\0'; config.key = section_tail + 1; - show_keys = 0; + display_opts.show_keys = 0; } else { config.key = NULL; - show_keys = 1; + display_opts.show_keys = 1; } config_with_options(urlmatch_config_entry, &config, @@ -627,7 +662,7 @@ static int get_urlmatch(const struct config_location_options *opts, struct urlmatch_current_candidate_value *matched = item->util; struct strbuf buf = STRBUF_INIT; - format_config(&buf, item->string, + format_config(&display_opts, &buf, item->string, matched->value_is_null ? NULL : matched->value.buf, &matched->kvi); fwrite(buf.buf, 1, buf.len, stdout); @@ -743,11 +778,12 @@ static void location_options_release(struct config_location_options *opts) free((char *) opts->source.file); } -static void handle_nul(void) { - if (end_nul) { - term = '\0'; - delim = '\n'; - key_delim = '\n'; +static void display_options_init(struct config_display_options *opts) +{ + if (opts->end_nul) { + opts->term = '\0'; + opts->delim = '\n'; + opts->key_delim = '\n'; } } @@ -761,19 +797,13 @@ static void handle_nul(void) { OPT_CALLBACK_VALUE(0, "path", &type, N_("value is a path (file or directory name)"), TYPE_PATH), \ OPT_CALLBACK_VALUE(0, "expiry-date", &type, N_("value is an expiry date"), TYPE_EXPIRY_DATE) -#define CONFIG_DISPLAY_OPTIONS \ - OPT_GROUP(N_("Display options")), \ - OPT_BOOL('z', "null", &end_nul, N_("terminate values with NUL byte")), \ - OPT_BOOL(0, "name-only", &omit_values, N_("show variable names only")), \ - OPT_BOOL(0, "show-origin", &show_origin, N_("show origin of config (file, standard input, blob, command line)")), \ - OPT_BOOL(0, "show-scope", &show_scope, N_("show scope of config (worktree, local, global, system, command)")) - static int cmd_config_list(int argc, const char **argv, const char *prefix) { struct config_location_options location_opts = CONFIG_LOCATION_OPTIONS_INIT; + struct config_display_options display_opts = CONFIG_DISPLAY_OPTIONS_INIT; struct option opts[] = { CONFIG_LOCATION_OPTIONS(location_opts), - CONFIG_DISPLAY_OPTIONS, + CONFIG_DISPLAY_OPTIONS(display_opts), OPT_GROUP(N_("Other")), OPT_BOOL(0, "includes", &respect_includes_opt, N_("respect include directives on lookup")), OPT_END(), @@ -783,11 +813,11 @@ static int cmd_config_list(int argc, const char **argv, const char *prefix) check_argc(argc, 0, 0); location_options_init(&location_opts, prefix); - handle_nul(); + display_options_init(&display_opts); setup_auto_pager("config", 1); - if (config_with_options(show_all_config, NULL, + if (config_with_options(show_all_config, &display_opts, &location_opts.source, the_repository, &location_opts.options) < 0) { if (location_opts.source.file) @@ -804,6 +834,7 @@ static int cmd_config_list(int argc, const char **argv, const char *prefix) static int cmd_config_get(int argc, const char **argv, const char *prefix) { struct config_location_options location_opts = CONFIG_LOCATION_OPTIONS_INIT; + struct config_display_options display_opts = CONFIG_DISPLAY_OPTIONS_INIT; const char *value_pattern = NULL, *url = NULL; int flags = 0; struct option opts[] = { @@ -815,8 +846,7 @@ static int cmd_config_get(int argc, const char **argv, const char *prefix) OPT_STRING(0, "value", &value_pattern, N_("pattern"), N_("show config with values matching the pattern")), OPT_BIT(0, "fixed-value", &flags, N_("use string equality when comparing values to value pattern"), CONFIG_FLAGS_FIXED_VALUE), OPT_STRING(0, "url", &url, N_("URL"), N_("show config matching the given URL")), - CONFIG_DISPLAY_OPTIONS, - OPT_BOOL(0, "show-names", &show_keys, N_("show config keys in addition to their values")), + CONFIG_DISPLAY_OPTIONS(display_opts), OPT_GROUP(N_("Other")), OPT_BOOL(0, "includes", &respect_includes_opt, N_("respect include directives on lookup")), OPT_STRING(0, "default", &default_value, N_("value"), N_("use default value when missing entry")), @@ -836,14 +866,14 @@ static int cmd_config_get(int argc, const char **argv, const char *prefix) die(_("--url= cannot be used with --all, --regexp or --value")); location_options_init(&location_opts, prefix); - handle_nul(); + display_options_init(&display_opts); setup_auto_pager("config", 1); if (url) - ret = get_urlmatch(&location_opts, argv[0], url); + ret = get_urlmatch(&location_opts, &display_opts, argv[0], url); else - ret = get_value(&location_opts, argv[0], value_pattern, flags); + ret = get_value(&location_opts, &display_opts, argv[0], value_pattern, flags); location_options_release(&location_opts); return ret; @@ -1074,6 +1104,7 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) ACTION_GET_URLMATCH = (1<<15), }; struct config_location_options location_opts = CONFIG_LOCATION_OPTIONS_INIT; + struct config_display_options display_opts = CONFIG_DISPLAY_OPTIONS_INIT; const char *comment_arg = NULL; int actions = 0; struct option opts[] = { @@ -1094,7 +1125,7 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) OPT_CMDMODE(0, "get-color", &actions, N_("find the color configured: slot []"), ACTION_GET_COLOR), OPT_CMDMODE(0, "get-colorbool", &actions, N_("find the color setting: slot []"), ACTION_GET_COLORBOOL), CONFIG_TYPE_OPTIONS, - CONFIG_DISPLAY_OPTIONS, + CONFIG_DISPLAY_OPTIONS(display_opts), OPT_GROUP(N_("Other")), OPT_STRING(0, "default", &default_value, N_("value"), N_("with --get, use default value when missing entry")), OPT_STRING(0, "comment", &comment_arg, N_("value"), N_("human-readable comment string (# will be prepended as needed)")), @@ -1112,7 +1143,7 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) PARSE_OPT_STOP_AT_NON_OPTION); location_options_init(&location_opts, prefix); - handle_nul(); + display_options_init(&display_opts); if ((actions & (ACTION_GET_COLOR|ACTION_GET_COLORBOOL)) && type) { error(_("--get-color and variable type are incoherent")); @@ -1128,13 +1159,13 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) error(_("no action specified")); exit(129); } - if (omit_values && + if (display_opts.omit_values && !(actions == ACTION_LIST || actions == ACTION_GET_REGEXP)) { error(_("--name-only is only applicable to --list or --get-regexp")); exit(129); } - if (show_origin && !(actions & + if (display_opts.show_origin && !(actions & (ACTION_GET|ACTION_GET_ALL|ACTION_GET_REGEXP|ACTION_LIST))) { error(_("--show-origin is only applicable to --get, --get-all, " "--get-regexp, and --list")); @@ -1199,7 +1230,7 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) if (actions == ACTION_LIST) { check_argc(argc, 0, 0); - if (config_with_options(show_all_config, NULL, + if (config_with_options(show_all_config, &display_opts, &location_opts.source, the_repository, &location_opts.options) < 0) { if (location_opts.source.file) @@ -1248,23 +1279,23 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) } else if (actions == ACTION_GET) { check_argc(argc, 1, 2); - ret = get_value(&location_opts, argv[0], argv[1], flags); + ret = get_value(&location_opts, &display_opts, argv[0], argv[1], flags); } else if (actions == ACTION_GET_ALL) { do_all = 1; check_argc(argc, 1, 2); - ret = get_value(&location_opts, argv[0], argv[1], flags); + ret = get_value(&location_opts, &display_opts, argv[0], argv[1], flags); } else if (actions == ACTION_GET_REGEXP) { - show_keys = 1; + display_opts.show_keys = 1; use_key_regexp = 1; do_all = 1; check_argc(argc, 1, 2); - ret = get_value(&location_opts, argv[0], argv[1], flags); + ret = get_value(&location_opts, &display_opts, argv[0], argv[1], flags); } else if (actions == ACTION_GET_URLMATCH) { check_argc(argc, 2, 2); - ret = get_urlmatch(&location_opts, argv[0], argv[1]); + ret = get_urlmatch(&location_opts, &display_opts, argv[0], argv[1]); } else if (actions == ACTION_UNSET) { check_write(&location_opts.source); From patchwork Mon May 13 10:22:54 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663267 Received: from wfout3-smtp.messagingengine.com (wfout3-smtp.messagingengine.com [64.147.123.146]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3CEDC14A4CA for ; Mon, 13 May 2024 10:22:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.146 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595780; cv=none; b=saBwhetbaRrGl7eCdkO+K7OKr203Fbl07DV991vD5cHEskoOB//OGO7jbSKXXQC4EGHZqgg2lDySbjbhSNVBrjLR6ocHM/8MTbXazXHFmetOBV0EQW8LmvB0m28ejVtVl4q+2uS31WzOjWA185uTZVwo21PcwpyWrdspfkmV2e4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595780; c=relaxed/simple; bh=8dH4/LJdgeUQg5AZ4zu69//iNp/m78ZjPSua3VU1O2E=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=obgY2DYGU0iPMvyHJLyEYgQfS4A2f8o5kpCZhQkLaSb+DeVBi0athDgc65+RUx+T3uZPbPLP3Lsve/212Gffst8g/R5NZOf4sqvxHTJs4HiBJP22NB25ko+Jl+gAStDpHBMs1SWGd6RIJWGN+H9NILCP7cFhEwjjIq1OtTwsn10= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=O7cAugtP; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=dod9ojQz; arc=none smtp.client-ip=64.147.123.146 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="O7cAugtP"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="dod9ojQz" Received: from compute7.internal (compute7.nyi.internal [10.202.2.48]) by mailfout.west.internal (Postfix) with ESMTP id 7F2001C000E9; Mon, 13 May 2024 06:22:58 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Mon, 13 May 2024 06:22:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595778; x=1715682178; bh=yyIm7/COQn knrxI728aNrPJ95up8bik/H9b8prU42dk=; b=O7cAugtPc9ZLqEKH14B42uTMuJ ZPfxlOWP8MKEgBSC30oCfen/l+Lk4Ay8rUpD9cA8RawX+7kPAV9hNanNmNR8VdVf x5JcpYvUQa2GiXQOL5WTi7bm0/vBd7wfOlX/K+CKvHnY14CbMRhTQspa+mcTH29G D8Oh6z1+kujdEqoClExVxM/upiVbEf2gQDhhz8+y//+4NWHEqQ4pCR8zR3vqjz1x t+9v5HaHQ0n0DaPCCuAwySKtDEjZxjaNVD94wBLpAOBWj/muVIg0TTJrscuMYmzv gRgIR0gduTlQ92DITnfN4EyGQZFNOfprfNdjVDqpIEVvfJWV1+Nf8hTb1gBg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595778; x=1715682178; bh=yyIm7/COQnknrxI728aNrPJ95up8 bik/H9b8prU42dk=; b=dod9ojQzeWNOG8efAKqueTg3H+dILPspJb5wJlgiEAcB 0C1xlzSZq/a+8ybqudOyO0BBIs7uXdiFGNMoPufPOV7Z4HbgeW64TfXWz8NetTXN iwXJFTwagCHGpl6gF7WFmd9k94XEGo5ZxJkx2/wkEr0/DzPnEWWMM4UeK6bsUNsn 8zpJiEQVilCfCyC04Foy+ESM9QJHmJvLNrZMhzNES4AfWnbhK9CtPSJTkTHMLcTi jRcPajR7eKR9NS6YL91yINfX+zm41pLh27/fO/mEyTHr9VWHFKMgM2EpUK7zxsT3 1aiYoNNopCoCAgklIiOlw5j1HpcrPU/Yqb5afjpeJA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgepvdenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:22:56 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id 76baeddd (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:22:38 +0000 (UTC) Date: Mon, 13 May 2024 12:22:54 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 11/21] builtin/config: move type options into display options Message-ID: <63436c34165ee6744cfa15aea5c53adab361d07c.1715595550.git.ps@pks.im> References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: The type options are tracked via a global variable. Move it into the display options instead. Signed-off-by: Patrick Steinhardt --- builtin/config.c | 60 +++++++++++++++++++++++------------------------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index 24ad8e7476..6d2597f7c2 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -81,13 +81,24 @@ struct config_location_options { }; #define CONFIG_LOCATION_OPTIONS_INIT {0} +#define CONFIG_TYPE_OPTIONS(type) \ + OPT_GROUP(N_("Type")), \ + OPT_CALLBACK('t', "type", &type, N_("type"), N_("value is given this type"), option_parse_type), \ + OPT_CALLBACK_VALUE(0, "bool", &type, N_("value is \"true\" or \"false\""), TYPE_BOOL), \ + OPT_CALLBACK_VALUE(0, "int", &type, N_("value is decimal number"), TYPE_INT), \ + OPT_CALLBACK_VALUE(0, "bool-or-int", &type, N_("value is --bool or --int"), TYPE_BOOL_OR_INT), \ + OPT_CALLBACK_VALUE(0, "bool-or-str", &type, N_("value is --bool or string"), TYPE_BOOL_OR_STR), \ + OPT_CALLBACK_VALUE(0, "path", &type, N_("value is a path (file or directory name)"), TYPE_PATH), \ + OPT_CALLBACK_VALUE(0, "expiry-date", &type, N_("value is an expiry date"), TYPE_EXPIRY_DATE) + #define CONFIG_DISPLAY_OPTIONS(opts) \ OPT_GROUP(N_("Display options")), \ OPT_BOOL('z', "null", &opts.end_nul, N_("terminate values with NUL byte")), \ OPT_BOOL(0, "name-only", &opts.omit_values, N_("show variable names only")), \ OPT_BOOL(0, "show-origin", &opts.show_origin, N_("show origin of config (file, standard input, blob, command line)")), \ OPT_BOOL(0, "show-scope", &opts.show_scope, N_("show scope of config (worktree, local, global, system, command)")), \ - OPT_BOOL(0, "show-names", &opts.show_keys, N_("show config keys in addition to their values")) + OPT_BOOL(0, "show-names", &opts.show_keys, N_("show config keys in addition to their values")), \ + CONFIG_TYPE_OPTIONS(opts.type) struct config_display_options { int end_nul; @@ -95,6 +106,7 @@ struct config_display_options { int show_origin; int show_scope; int show_keys; + int type; /* Populated via `display_options_init()`. */ int term; int delim; @@ -113,8 +125,6 @@ static regex_t *regexp; static int use_key_regexp; static int do_all; static int do_not_match; - -static int type; static char *default_value; static int respect_includes_opt = -1; static int fixed_value; @@ -264,13 +274,13 @@ static int format_config(const struct config_display_options *opts, if (opts->show_keys) strbuf_addch(buf, opts->key_delim); - if (type == TYPE_INT) + if (opts->type == TYPE_INT) strbuf_addf(buf, "%"PRId64, git_config_int64(key_, value_ ? value_ : "", kvi)); - else if (type == TYPE_BOOL) + else if (opts->type == TYPE_BOOL) strbuf_addstr(buf, git_config_bool(key_, value_) ? "true" : "false"); - else if (type == TYPE_BOOL_OR_INT) { + else if (opts->type == TYPE_BOOL_OR_INT) { int is_bool, v; v = git_config_bool_or_int(key_, value_, kvi, &is_bool); @@ -278,24 +288,24 @@ static int format_config(const struct config_display_options *opts, strbuf_addstr(buf, v ? "true" : "false"); else strbuf_addf(buf, "%d", v); - } else if (type == TYPE_BOOL_OR_STR) { + } else if (opts->type == TYPE_BOOL_OR_STR) { int v = git_parse_maybe_bool(value_); if (v < 0) strbuf_addstr(buf, value_); else strbuf_addstr(buf, v ? "true" : "false"); - } else if (type == TYPE_PATH) { + } else if (opts->type == TYPE_PATH) { const char *v; if (git_config_pathname(&v, key_, value_) < 0) return -1; strbuf_addstr(buf, v); free((char *)v); - } else if (type == TYPE_EXPIRY_DATE) { + } else if (opts->type == TYPE_EXPIRY_DATE) { timestamp_t t; if (git_config_expiry_date(&t, key_, value_) < 0) return -1; strbuf_addf(buf, "%"PRItime, t); - } else if (type == TYPE_COLOR) { + } else if (opts->type == TYPE_COLOR) { char v[COLOR_MAXLEN]; if (git_config_color(v, key_, value_) < 0) return -1; @@ -443,7 +453,7 @@ static int get_value(const struct config_location_options *opts, } static char *normalize_value(const char *key, const char *value, - struct key_value_info *kvi) + int type, struct key_value_info *kvi) { if (!value) return NULL; @@ -787,16 +797,6 @@ static void display_options_init(struct config_display_options *opts) } } -#define CONFIG_TYPE_OPTIONS \ - OPT_GROUP(N_("Type")), \ - OPT_CALLBACK('t', "type", &type, N_("type"), N_("value is given this type"), option_parse_type), \ - OPT_CALLBACK_VALUE(0, "bool", &type, N_("value is \"true\" or \"false\""), TYPE_BOOL), \ - OPT_CALLBACK_VALUE(0, "int", &type, N_("value is decimal number"), TYPE_INT), \ - OPT_CALLBACK_VALUE(0, "bool-or-int", &type, N_("value is --bool or --int"), TYPE_BOOL_OR_INT), \ - OPT_CALLBACK_VALUE(0, "bool-or-str", &type, N_("value is --bool or string"), TYPE_BOOL_OR_STR), \ - OPT_CALLBACK_VALUE(0, "path", &type, N_("value is a path (file or directory name)"), TYPE_PATH), \ - OPT_CALLBACK_VALUE(0, "expiry-date", &type, N_("value is an expiry date"), TYPE_EXPIRY_DATE) - static int cmd_config_list(int argc, const char **argv, const char *prefix) { struct config_location_options location_opts = CONFIG_LOCATION_OPTIONS_INIT; @@ -839,7 +839,6 @@ static int cmd_config_get(int argc, const char **argv, const char *prefix) int flags = 0; struct option opts[] = { CONFIG_LOCATION_OPTIONS(location_opts), - CONFIG_TYPE_OPTIONS, OPT_GROUP(N_("Filter options")), OPT_BOOL(0, "all", &do_all, N_("return all values for multi-valued config options")), OPT_BOOL(0, "regexp", &use_key_regexp, N_("interpret the name as a regular expression")), @@ -884,10 +883,10 @@ static int cmd_config_set(int argc, const char **argv, const char *prefix) struct config_location_options location_opts = CONFIG_LOCATION_OPTIONS_INIT; const char *value_pattern = NULL, *comment_arg = NULL; char *comment = NULL; - int flags = 0, append = 0; + int flags = 0, append = 0, type = 0; struct option opts[] = { CONFIG_LOCATION_OPTIONS(location_opts), - CONFIG_TYPE_OPTIONS, + CONFIG_TYPE_OPTIONS(type), OPT_GROUP(N_("Filter")), OPT_BIT(0, "all", &flags, N_("replace multi-valued config option with new value"), CONFIG_FLAGS_MULTI_REPLACE), OPT_STRING(0, "value", &value_pattern, N_("pattern"), N_("show config with values matching the pattern")), @@ -917,7 +916,7 @@ static int cmd_config_set(int argc, const char **argv, const char *prefix) location_options_init(&location_opts, prefix); check_write(&location_opts.source); - value = normalize_value(argv[0], argv[1], &default_kvi); + value = normalize_value(argv[0], argv[1], type, &default_kvi); if ((flags & CONFIG_FLAGS_MULTI_REPLACE) || value_pattern) { ret = git_config_set_multivar_in_file_gently(location_opts.source.file, @@ -1124,7 +1123,6 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) OPT_CMDMODE('e', "edit", &actions, N_("open an editor"), ACTION_EDIT), OPT_CMDMODE(0, "get-color", &actions, N_("find the color configured: slot []"), ACTION_GET_COLOR), OPT_CMDMODE(0, "get-colorbool", &actions, N_("find the color setting: slot []"), ACTION_GET_COLORBOOL), - CONFIG_TYPE_OPTIONS, CONFIG_DISPLAY_OPTIONS(display_opts), OPT_GROUP(N_("Other")), OPT_STRING(0, "default", &default_value, N_("value"), N_("with --get, use default value when missing entry")), @@ -1145,7 +1143,7 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) location_options_init(&location_opts, prefix); display_options_init(&display_opts); - if ((actions & (ACTION_GET_COLOR|ACTION_GET_COLORBOOL)) && type) { + if ((actions & (ACTION_GET_COLOR|ACTION_GET_COLORBOOL)) && display_opts.type) { error(_("--get-color and variable type are incoherent")); exit(129); } @@ -1246,7 +1244,7 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) else if (actions == ACTION_SET) { check_write(&location_opts.source); check_argc(argc, 2, 2); - value = normalize_value(argv[0], argv[1], &default_kvi); + value = normalize_value(argv[0], argv[1], display_opts.type, &default_kvi); ret = git_config_set_in_file_gently(location_opts.source.file, argv[0], comment, value); if (ret == CONFIG_NOTHING_SET) error(_("cannot overwrite multiple values with a single value\n" @@ -1255,7 +1253,7 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) else if (actions == ACTION_SET_ALL) { check_write(&location_opts.source); check_argc(argc, 2, 3); - value = normalize_value(argv[0], argv[1], &default_kvi); + value = normalize_value(argv[0], argv[1], display_opts.type, &default_kvi); ret = git_config_set_multivar_in_file_gently(location_opts.source.file, argv[0], value, argv[2], comment, flags); @@ -1263,7 +1261,7 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) else if (actions == ACTION_ADD) { check_write(&location_opts.source); check_argc(argc, 2, 2); - value = normalize_value(argv[0], argv[1], &default_kvi); + value = normalize_value(argv[0], argv[1], display_opts.type, &default_kvi); ret = git_config_set_multivar_in_file_gently(location_opts.source.file, argv[0], value, CONFIG_REGEX_NONE, @@ -1272,7 +1270,7 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) else if (actions == ACTION_REPLACE_ALL) { check_write(&location_opts.source); check_argc(argc, 2, 3); - value = normalize_value(argv[0], argv[1], &default_kvi); + value = normalize_value(argv[0], argv[1], display_opts.type, &default_kvi); ret = git_config_set_multivar_in_file_gently(location_opts.source.file, argv[0], value, argv[2], comment, flags | CONFIG_FLAGS_MULTI_REPLACE); From patchwork Mon May 13 10:23:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663268 Received: from wfhigh6-smtp.messagingengine.com (wfhigh6-smtp.messagingengine.com [64.147.123.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5653714A4CA for ; Mon, 13 May 2024 10:23:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595786; cv=none; b=AAtb0/JnI+kEV7M3RpPkhImSE1rwXLL1gWxPfk+hxv/wYAmG9rjYxu37ycDnJ9ZvziOkcJB3LOQKbo0C6oTlKj/LhMTiw4vOb1FnjcMvbQvaMZELMBpcNllB8IU6Cx/YWmE6B710NARmWXSN1/IuwLTjwtUNmZPZNuxJxxR7Axg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595786; c=relaxed/simple; bh=MFyrIycwOXqNV82J+PHEup9SQdk+PRWuMwDfPtUbXEw=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=F5w8clVYynXw4Oh4lKUIliVgfa+pqV6ROYCWCs/YaPx5WdlgP+vECbekCv3R9opyuruVTVFLrDf0HklL4PtJorh9qAdfK2xIsElCvK8w13lBYjjjqtmwAW4GdJQRO/+RMcEhW/SG1AKBTVeUwJqRIPziDh55vCxQa/HRDcCuLOY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=M7qtFTE7; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=SK+N01h1; arc=none smtp.client-ip=64.147.123.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="M7qtFTE7"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="SK+N01h1" Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailfhigh.west.internal (Postfix) with ESMTP id 8C35C1800121; Mon, 13 May 2024 06:23:04 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Mon, 13 May 2024 06:23:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595784; x=1715682184; bh=E9mwK4Le6p kd1Y8vRnoFc8nNE/Ro6u5YOMD75K2fVH0=; b=M7qtFTE7uMrkK0LTCOqoiAcku6 d17bWhGAo62EVMcLNdutzQDu5NgJ0/SP1U949yza4Y8oGB0gZvZv2uOQmNMoMepI aLr4dPvrwhKVBQ9MKDSlNFJtokU2MqE7T+m/XBE7Q+0Zeu3B7Z2bHQthd/wVKKOy bTUMDBiNp5qzb2e/SICi2ERNQ/1oOL7cMEo9ijg/kV4eanPdjHNBe2fBv1Dgs2Bk VMpE58t9exPRMKa/sbyd4CG4snIoQjZlYB8KLFuFwd/Ga2q1moiMYrfuDu07TdUZ qvzmWtX8Yz8gYP0N/QGo+IWworHNnU+EEd8XH0UyuadylWjDMXh1zS7uBR8A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595784; x=1715682184; bh=E9mwK4Le6pkd1Y8vRnoFc8nNE/Ro 6u5YOMD75K2fVH0=; b=SK+N01h1x0hgBv6OwRBOGaBGKKzrU/cf67S8aODeBNgh H6SiHxpI8JD1u6QhUHgQlCIzWB2O9fwoscEsH4CxV3zScQGjsfeS3+hitWCHMtQP PskzLntOnFEowQQboohymXUHM6bxozN6ScsN4jK9vT2/mJJh/UaXG+f6UovdbIEH x7BwqqOlDZN1hXMawAI0HNmN8qj6VzQxX6Swcbn37AWR3pAz9Sh/WNDlAm0WnqoZ HFs+ZFQwexXQx3M0b92e/oFsnA0HU8gpyOMrE7x9rbEjM8NotIa7nSvg8XAS7EEL exnhfETa/Tw8mcdjTuo1Az74xqPPx1kLwh1+0IKhew== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgepgeenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:23:03 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id da5514e1 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:22:43 +0000 (UTC) Date: Mon, 13 May 2024 12:23:00 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 12/21] builtin/config: move default value into display options Message-ID: <106b8ac8a2292b9852c6fda23a796787b6e72ca4.1715595550.git.ps@pks.im> References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: The default value is tracked via a global variable. Move it into the display options instead. Signed-off-by: Patrick Steinhardt --- builtin/config.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index 6d2597f7c2..dcccb89037 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -107,6 +107,7 @@ struct config_display_options { int show_scope; int show_keys; int type; + char *default_value; /* Populated via `display_options_init()`. */ int term; int delim; @@ -125,7 +126,6 @@ static regex_t *regexp; static int use_key_regexp; static int do_all; static int do_not_match; -static char *default_value; static int respect_includes_opt = -1; static int fixed_value; @@ -415,7 +415,7 @@ static int get_value(const struct config_location_options *opts, &opts->source, the_repository, &opts->options); - if (!values.nr && default_value) { + if (!values.nr && display_opts->default_value) { struct key_value_info kvi = KVI_INIT; struct strbuf *item; @@ -423,9 +423,10 @@ static int get_value(const struct config_location_options *opts, ALLOC_GROW(values.items, values.nr + 1, values.alloc); item = &values.items[values.nr++]; strbuf_init(item, 0); - if (format_config(display_opts, item, key_, default_value, &kvi) < 0) + if (format_config(display_opts, item, key_, + display_opts->default_value, &kvi) < 0) die(_("failed to format default config value: %s"), - default_value); + display_opts->default_value); } ret = !values.nr; @@ -848,7 +849,8 @@ static int cmd_config_get(int argc, const char **argv, const char *prefix) CONFIG_DISPLAY_OPTIONS(display_opts), OPT_GROUP(N_("Other")), OPT_BOOL(0, "includes", &respect_includes_opt, N_("respect include directives on lookup")), - OPT_STRING(0, "default", &default_value, N_("value"), N_("use default value when missing entry")), + OPT_STRING(0, "default", &display_opts.default_value, + N_("value"), N_("use default value when missing entry")), OPT_END(), }; int ret; @@ -859,7 +861,7 @@ static int cmd_config_get(int argc, const char **argv, const char *prefix) if ((flags & CONFIG_FLAGS_FIXED_VALUE) && !value_pattern) die(_("--fixed-value only applies with 'value-pattern'")); - if (default_value && (do_all || url)) + if (display_opts.default_value && (do_all || url)) die(_("--default= cannot be used with --all or --url=")); if (url && (do_all || use_key_regexp || value_pattern)) die(_("--url= cannot be used with --all, --regexp or --value")); @@ -1125,7 +1127,8 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) OPT_CMDMODE(0, "get-colorbool", &actions, N_("find the color setting: slot []"), ACTION_GET_COLORBOOL), CONFIG_DISPLAY_OPTIONS(display_opts), OPT_GROUP(N_("Other")), - OPT_STRING(0, "default", &default_value, N_("value"), N_("with --get, use default value when missing entry")), + OPT_STRING(0, "default", &display_opts.default_value, + N_("value"), N_("with --get, use default value when missing entry")), OPT_STRING(0, "comment", &comment_arg, N_("value"), N_("human-readable comment string (# will be prepended as needed)")), OPT_BOOL(0, "fixed-value", &fixed_value, N_("use string equality when comparing values to 'value-pattern'")), OPT_BOOL(0, "includes", &respect_includes_opt, N_("respect include directives on lookup")), @@ -1170,7 +1173,7 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) exit(129); } - if (default_value && !(actions & ACTION_GET)) { + if (display_opts.default_value && !(actions & ACTION_GET)) { error(_("--default is only applicable to --get")); exit(129); } From patchwork Mon May 13 10:23:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663269 Received: from wfout3-smtp.messagingengine.com (wfout3-smtp.messagingengine.com [64.147.123.146]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7547C14A0B3 for ; Mon, 13 May 2024 10:23:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.146 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595791; cv=none; b=IdGRqgJa5qxUPoTjSRQcEKjfE6mAdlUtaPwITe3JygoevzfUrNi3ex116jo/AiB3KaOksekjpLJFkSXeALuxd5LozcikTlj5xU+VvCsIgcrrDgxgtC6lLZ3PnE5klZQESKaQJHSBfDPbFFFGRdGxXHn2iFkmlP/9mY/VonCRjQI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595791; c=relaxed/simple; bh=wKFiycv++UqKM/uMcRbrn9g55w9IPeMzxhQIisrFL98=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=OL0FBhGqPaIiIxF/IqnipuwmHa/Yh72f6Qk8Z2NLySAqt7rnn3ObRnfAnXeVi5uTsjcd2ZDf6s+h+dPMgLY7+LAKhoRRCSmfCQE2DgJMoFg8PlqN6snaruDBPBDk+LAJCEzyy6D+JyqXi+DrChtsSy1UQJUvlCTCDqNoT5q453g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=N4wECiY6; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=lBATKGm+; arc=none smtp.client-ip=64.147.123.146 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="N4wECiY6"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="lBATKGm+" Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailfout.west.internal (Postfix) with ESMTP id 816DF1C000F2; Mon, 13 May 2024 06:23:09 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute6.internal (MEProxy); Mon, 13 May 2024 06:23:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595789; x=1715682189; bh=dI48/ibUBF a3LKZ8yvFIJi5AZcLU7Qk4IOTEvqCst4A=; b=N4wECiY6o5GfbSJK1Eix3QNcEv 4+x78FJRjgb11q/pfyVCSqOYNPAH1q9lKYx3qvpIJ5d1mNQGbHmDA4U/nW0V1yrd g2TauvatcKRRtPWxqr8tP6voPyGWq/7WG0dDR4n/t0SG8GLoFivOuO4bNVqPiZA5 Wj4/jmF5Csqye9KlN38Loi4gcEkLumb4PDWLTYIvuLwsHSsHyBAy4CnqaG57SHG1 TVR6whAiJqlAgP8YWhTTFfmQrKQB+ivCM/xnUkEgw4oDPYXhSj8qsZkiypSIecrT ZrFePhyvs3PUMlV676ir/e41hQ00w/tTiEBXZF9zlpkF8vKeIsEo41fiBOlg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595789; x=1715682189; bh=dI48/ibUBFa3LKZ8yvFIJi5AZcLU 7Qk4IOTEvqCst4A=; b=lBATKGm+t0s7pmfBxtCoxu23s6rVtImHHFGWw4c6DVDY 5tIzyzmCESz3o6bbUIV5ubCxnawZBfqiSk82vV38ofrxO9DoD3MjbVKJJ51gl4UY iYAyNSiofY53IHIew+FRvxJfJb+fRlQt96H30dQfJvIWwCtn9lOeDzcJE1NybR/F Fgd+v5FzGZD/Da4yQTyIA1b7lhYHoN8yuY4XBt3cYVBHQqAkQGrBdYyUBGPFwnAQ V4vEqCijW+C/NZVD1JCkZwmmDez6SzlO6AS3bFDIla0dZo6iJExlaoISS6ai7Ajv TeLEsK6faVICrDLh0vV4lRfULOO2RXmI4YEPzNhi8Q== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgepvdenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:23:08 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id ec6955b3 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:22:49 +0000 (UTC) Date: Mon, 13 May 2024 12:23:05 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 13/21] builtin/config: move `respect_includes_opt` into location options Message-ID: <8a6b555b58ef4db5d7fe7e427fb4d6403f228095.1715595550.git.ps@pks.im> References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: The variable tracking whether or not we want to honor includes is tracked via a global variable. Move it into the location options instead. Signed-off-by: Patrick Steinhardt --- builtin/config.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index dcccb89037..3424d602f2 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -78,8 +78,11 @@ struct config_location_options { int use_system_config; int use_local_config; int use_worktree_config; + int respect_includes_opt; }; -#define CONFIG_LOCATION_OPTIONS_INIT {0} +#define CONFIG_LOCATION_OPTIONS_INIT { \ + .respect_includes_opt = -1, \ +} #define CONFIG_TYPE_OPTIONS(type) \ OPT_GROUP(N_("Type")), \ @@ -126,7 +129,6 @@ static regex_t *regexp; static int use_key_regexp; static int do_all; static int do_not_match; -static int respect_includes_opt = -1; static int fixed_value; #define TYPE_BOOL 1 @@ -774,10 +776,10 @@ static void location_options_init(struct config_location_options *opts, opts->source.scope = CONFIG_SCOPE_COMMAND; } - if (respect_includes_opt == -1) + if (opts->respect_includes_opt == -1) opts->options.respect_includes = !opts->source.file; else - opts->options.respect_includes = respect_includes_opt; + opts->options.respect_includes = opts->respect_includes_opt; if (startup_info->have_repository) { opts->options.commondir = get_git_common_dir(); opts->options.git_dir = get_git_dir(); @@ -806,7 +808,8 @@ static int cmd_config_list(int argc, const char **argv, const char *prefix) CONFIG_LOCATION_OPTIONS(location_opts), CONFIG_DISPLAY_OPTIONS(display_opts), OPT_GROUP(N_("Other")), - OPT_BOOL(0, "includes", &respect_includes_opt, N_("respect include directives on lookup")), + OPT_BOOL(0, "includes", &location_opts.respect_includes_opt, + N_("respect include directives on lookup")), OPT_END(), }; @@ -848,7 +851,8 @@ static int cmd_config_get(int argc, const char **argv, const char *prefix) OPT_STRING(0, "url", &url, N_("URL"), N_("show config matching the given URL")), CONFIG_DISPLAY_OPTIONS(display_opts), OPT_GROUP(N_("Other")), - OPT_BOOL(0, "includes", &respect_includes_opt, N_("respect include directives on lookup")), + OPT_BOOL(0, "includes", &location_opts.respect_includes_opt, + N_("respect include directives on lookup")), OPT_STRING(0, "default", &display_opts.default_value, N_("value"), N_("use default value when missing entry")), OPT_END(), @@ -1131,7 +1135,8 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) N_("value"), N_("with --get, use default value when missing entry")), OPT_STRING(0, "comment", &comment_arg, N_("value"), N_("human-readable comment string (# will be prepended as needed)")), OPT_BOOL(0, "fixed-value", &fixed_value, N_("use string equality when comparing values to 'value-pattern'")), - OPT_BOOL(0, "includes", &respect_includes_opt, N_("respect include directives on lookup")), + OPT_BOOL(0, "includes", &location_opts.respect_includes_opt, + N_("respect include directives on lookup")), OPT_END(), }; char *value = NULL, *comment = NULL; From patchwork Mon May 13 10:23:10 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663270 Received: from wfout3-smtp.messagingengine.com (wfout3-smtp.messagingengine.com [64.147.123.146]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 54F5F146D76 for ; Mon, 13 May 2024 10:23:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.146 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595796; cv=none; b=maNn8Dlr+IwTtbp+D1oSYrc6kcR1KgtfaoM0lO5cOCx8FCWQgdkuwc7Mye7gPOFbCO8LAAZol4LkLJ59u9RxEgnjL9GkwTkiWkxKFVnavO/UwginbwKnPrgPVuNSWOiHdWlGl/HKJBzn8514+fkL6hAdnw0885qdO5g9rbgEd8w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595796; c=relaxed/simple; bh=R4fB6rnmK8nEaqOCs9pdnVKnJIx6eAoIYT+5xCS2cfg=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=PbPGqD6mleXOjKRZ7NwCUjol4PJBPWBUe9fuBbM+9gjKJog3Ld3Of5POuuBJax+jkKY6gGfxGAWKNTHXmJKRyY5YCJWJExahowmJ6+keCEIn7umY/6SPPIutM2bEaNXQj1OI58rSRCXgqr4VH3AMaR7WqhcV4wft2k5IjNapQiw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=tjNyBr4o; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=hiuBV7V0; arc=none smtp.client-ip=64.147.123.146 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="tjNyBr4o"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="hiuBV7V0" Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailfout.west.internal (Postfix) with ESMTP id 8B3A51C00143; Mon, 13 May 2024 06:23:14 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute1.internal (MEProxy); Mon, 13 May 2024 06:23:14 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595794; x=1715682194; bh=NGeJi3MsXF Ih44XipEkCZywtnFykP48Rr2BrF3f0kTM=; b=tjNyBr4oaaLh5F1BKtde6XRCIm BmmnMgdZ0iAROIGBCqpZj7cYFveZfxFUIxqUxAC8erWqOH5S6IzwneBmcXHZBnsr RzmXblwY5A7qS52cex9N3mS3L0959ugUZVEWOMakPWqln0ykymWtv2iUS3Wv+dj6 F6jdx/Vgz6qv1SBoQ2G9U4uty7Fo63eL3voPHenyFtQsozgL82aq0RcWAlobrKeZ x+ldXaRaguKsq1FHmqhbyjXMRfkmL8p0+eN77Lsy245z1kM+Zb7jsAl4D/Io7sr+ QV3DsE/QlCsJtMpzNJX+Z+Pi1MC3QCji+HxjXnTuZH5zGJw6vKfoc0iZYMIQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595794; x=1715682194; bh=NGeJi3MsXFIh44XipEkCZywtnFyk P48Rr2BrF3f0kTM=; b=hiuBV7V0LKB6Dum050pjB/VldW4ig7TMzwUV/bFe7NP7 rBnvvzJqjb8EWzLpeY56djIkeKCCF0xLVKb3+nESi6IjDXfgDO/q2DE/aboWslBS jK6mnDfWsE8T3CgcL7xw7GcvrA7ymrimnff/wstvX5wDCELcs8qIZJnXu7ZiymPC 7DErdDbOmWZ6i6EFFKarptGm1EK00B0eEqIWykbMSuSdFz7nG2PpugSkRX2pUCzb PFqwYgOZTLvt77Bzc10l4Bz3GkBPKOAZQOnHqS3LRTfI+NrnrGlMhldYxC4YRM7M H/NWULSgjTFSTHvZfh655JYdKlMRiJU/CPPCsjtgzg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:23:13 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id 86d79767 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:22:54 +0000 (UTC) Date: Mon, 13 May 2024 12:23:10 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 14/21] builtin/config: convert `do_not_match` to a local variable Message-ID: <0dd22bf51a4e16161b3704295b8026b8e32a835b.1715595550.git.ps@pks.im> References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: The `do_not_match` variable is used by the `format_config()` callback as an indicator whether or not the passed regular expression is negated. It is only ever set up by its only caller, `collect_config()` and can thus easily be moved into the `collect_config_data` structure. Do so to remove our reliance on global state. Signed-off-by: Patrick Steinhardt --- builtin/config.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index 3424d602f2..16d92ab176 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -128,7 +128,6 @@ static const char *value_pattern; static regex_t *regexp; static int use_key_regexp; static int do_all; -static int do_not_match; static int fixed_value; #define TYPE_BOOL 1 @@ -327,6 +326,7 @@ static int format_config(const struct config_display_options *opts, struct collect_config_data { const struct config_display_options *display_opts; struct strbuf_list *values; + int do_not_match; }; static int collect_config(const char *key_, const char *value_, @@ -343,7 +343,7 @@ static int collect_config(const char *key_, const char *value_, if (fixed_value && strcmp(value_pattern, (value_?value_:""))) return 0; if (regexp != NULL && - (do_not_match ^ !!regexec(regexp, (value_?value_:""), 0, NULL, 0))) + (data->do_not_match ^ !!regexec(regexp, (value_?value_:""), 0, NULL, 0))) return 0; ALLOC_GROW(values->items, values->nr + 1, values->alloc); @@ -400,7 +400,7 @@ static int get_value(const struct config_location_options *opts, value_pattern = regex_; else if (regex_) { if (regex_[0] == '!') { - do_not_match = 1; + data.do_not_match = 1; regex_++; } From patchwork Mon May 13 10:23:15 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663271 Received: from wfhigh6-smtp.messagingengine.com (wfhigh6-smtp.messagingengine.com [64.147.123.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 43B12146D76 for ; Mon, 13 May 2024 10:23:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595801; cv=none; b=ZTjI5pJoXwN/a45LKQF/oLrYE33f1zPTvVlo3tOepdLIPFtgs5zTCnqfviJNrdWLtD2pJzQtx9g1ZZakAyLtFlEZPcCV99q8XBX9jBxpsYC4UvlmiOOGIARODqNIXThDiBb2xnUyTSdhhgI71IHEalYLYMb4fh5CReowHGP8ng0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595801; c=relaxed/simple; bh=FwWnck4Fe7vbzNybcIjshHM2d2kaUn/5j3dZAATy9EQ=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=CVwQRhsxAtX5L8C+f/3xDffaYJmHYLL5Yx/52/+8n++fVKv2ldYUsUIfNiVBByf41Q3b1q9pb1QM0IcxMxOptM0tvgvT8WqCG4/s+Qzez2nZVQbTbmC7KBw8CObhrJYTthKJMPvwr9SR9gedOWYrRR8YXOOLjdBsZmg4a3y1cis= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=oSST+2aY; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=OPzs4LB2; arc=none smtp.client-ip=64.147.123.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="oSST+2aY"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="OPzs4LB2" Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailfhigh.west.internal (Postfix) with ESMTP id 90C151800105; Mon, 13 May 2024 06:23:19 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Mon, 13 May 2024 06:23:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595799; x=1715682199; bh=UO2dj4aUGU 8J1avARLpaFfR5DNvIAtaUr+SHqxd7Cs8=; b=oSST+2aYhLGr1dMy9qzCyTvflt Wy4lQixEnzN3+Yg6RyKGjesbL9G0s6uT1Dn/QAc4Z9c2vYL592vhjtcLFRVMEivw edDGe9q0Ayusy2y4kT4ghuP9SlkJijBpnE8hUWruVm+Taf3bPqOD+IS3Xj7eFnYJ Ov1PfG8nPaiDf4pIR/364B54pWypbHjKnFG6Q/jNG4TGbxgZhkKaRwq2YlIrxm+A zY7LopMlJXPCfTeNmDUVWiv1caVT3xq5tcg4LwndPYaZs6MCYk0F44IoJ1GtuFHv TtJ5+lYePuzTEY8xRAiyvHo9PexxhXXj8lz4LcuftLpt6u9ly96q2con/SnA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595799; x=1715682199; bh=UO2dj4aUGU8J1avARLpaFfR5DNvI AtaUr+SHqxd7Cs8=; b=OPzs4LB24EU/yT/krosPo7KXWUXe5rmFtGd8XFShMrXe rtyFr42tHjLdfRm3T0hBpMhyIkAb3MIWUeFJi68EMo3vzWLaAsREMXevFbguJv85 9XtuWQ/IlmomAu8PNzj3XUFLp66z+DkdZMBUVkro8TnG+ol3w0znrb5B1f7laGen TlC7qDw4N7YJuhNYFc2Vdo8Rr3OVOjSh7QEmbpw/6RymsyGL/o22X512t9apVyoE VNnl6w2z787NhYI5cLASzeQ1PYOcAJrvfhlD8nUmJjXzmUxvEr/oktwhprRMTPwV UeEYaB+36tMsp6iCfCKY9AdOonGMRUDGnxAdl1OBZQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgepheenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:23:18 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id 21511ac7 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:22:59 +0000 (UTC) Date: Mon, 13 May 2024 12:23:15 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 15/21] builtin/config: convert `value_pattern` to a local variable Message-ID: References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: The `value_pattern` variable is used by the `format_config()` callback when `CONFIG_FLAGS_FIXED_VALUE` is used. It is only ever set up by its only caller, `collect_config()` and can thus easily be moved into the `collect_config_data` structure. Do so to remove our reliance on global state. Signed-off-by: Patrick Steinhardt --- builtin/config.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index 16d92ab176..a17e274ece 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -124,7 +124,6 @@ struct config_display_options { static char *key; static regex_t *key_regexp; -static const char *value_pattern; static regex_t *regexp; static int use_key_regexp; static int do_all; @@ -326,6 +325,7 @@ static int format_config(const struct config_display_options *opts, struct collect_config_data { const struct config_display_options *display_opts; struct strbuf_list *values; + const char *value_pattern; int do_not_match; }; @@ -340,7 +340,7 @@ static int collect_config(const char *key_, const char *value_, return 0; if (use_key_regexp && regexec(key_regexp, key_, 0, NULL, 0)) return 0; - if (fixed_value && strcmp(value_pattern, (value_?value_:""))) + if (fixed_value && strcmp(data->value_pattern, (value_?value_:""))) return 0; if (regexp != NULL && (data->do_not_match ^ !!regexec(regexp, (value_?value_:""), 0, NULL, 0))) @@ -397,7 +397,7 @@ static int get_value(const struct config_location_options *opts, } if (regex_ && (flags & CONFIG_FLAGS_FIXED_VALUE)) - value_pattern = regex_; + data.value_pattern = regex_; else if (regex_) { if (regex_[0] == '!') { data.do_not_match = 1; From patchwork Mon May 13 10:23:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663272 Received: from wfhigh6-smtp.messagingengine.com (wfhigh6-smtp.messagingengine.com [64.147.123.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4544F146D76 for ; Mon, 13 May 2024 10:23:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595806; cv=none; b=oq68SQP+EzcfW8CZ7eRpl8ZPyfEmNNWbmoJppMMf+7eA8DeuzKc6w9EEf4Gb58UhoUgM+WYisjE11pcNelgZNsC988QoyERyhiNs9J2cuCDCrjwqQ0UbGGcr2+jFRVtRxX5Bprl/puePM5fAncsgBxzgwulhB1LXXmnmkd+xpgY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595806; c=relaxed/simple; bh=ctAyA9tsAXCcSNCEOaQf83JWUgXOijoj53K3UmWY3mY=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=Uaq1oOtqM/FBfrS7WHRjqYM9cqx6Zt8DQHgPTuBlJZxUmPXtXjTZtyEvVSO8eI0uEUV5lD7cgQLmQd3bwXKE7YqcsN6mx+S6SIzmXkmMNJywsm4PqW9XQP0XbJEOlyA3w0XGoLyDcNIQY/POvXQe6UWAEzQTt9GJDfCMvrI6vb8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=POkGRJHs; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=Q1erpRQZ; arc=none smtp.client-ip=64.147.123.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="POkGRJHs"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="Q1erpRQZ" Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailfhigh.west.internal (Postfix) with ESMTP id 933B31800103; Mon, 13 May 2024 06:23:24 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute6.internal (MEProxy); Mon, 13 May 2024 06:23:24 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595804; x=1715682204; bh=C6bFk9ENLL roUqHc9D4tejsxeOcr6tdqhusZeUl4+KI=; b=POkGRJHsaCsMXHpGMxdtd+TOBK kddlegA+QUOKYP51HOlNHSJmmb0oj+LbRiee+i2dcHa2KVCeqeKXNi+vJ2AnX7eG cHjKTa8BRTc7QhHHaot2xdbAjVi3Al6yQ5yD9tnWx6cqD6NWVSlzc8P7DDTNYCbp gO0m0OosVt0wgS+a3eBYnd0vjngb8g1H2z4hu8VB+DfJG4bg7rCv/5FlxfU+dTRP hYCTQ9nXKKE5Rkg/xMpzDBU+m0cRqCe8bQwSaYRM3iWVakzjgULpDGk7GWzdSn+B Wd8D+CTEvatQeTJzSciL00Mg5jRR2OS4h3RMOixRDIXGa0IRCpOvH2rK5jvg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595804; x=1715682204; bh=C6bFk9ENLLroUqHc9D4tejsxeOcr 6tdqhusZeUl4+KI=; b=Q1erpRQZA5z2G5ccYmVRkecDO3W3BlCfNi2/d1G/MgJq OvaC/BRm1O9yQv/Qf9158h72v6kZe7OSwDa3C9U/cTEuApdMtnAfmq/Wwk7XwE4M cjpiULES2AT8OpMSVAlFznrY+qHU8jP4eNKa3dtM3kU764XXDbUFPlDshwP71xOk qDmEBNTPz+M1H4YntLXySGWAytaFWQ3qcQSw11uIbJFlkozIOsEx/HTdB5Z/gkBe PSRD7oHlNb9SjyqGphrMjt6Jn59w4n7KaXserUilCoXU1kypDlaP406D2Fl5PTNW MvErdDY0fBPBdKIhUNFvDfp3767UBk+qgi3JFp/H1g== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgepfeenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:23:23 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id 36018e40 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:23:04 +0000 (UTC) Date: Mon, 13 May 2024 12:23:20 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 16/21] builtin/config: convert `regexp` to a local variable Message-ID: References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: The `regexp` variable is used by the `format_config()` callback when `CONFIG_FLAGS_FIXED_VALUE` is not set. It is only ever set up by its only caller, `collect_config()` and can thus easily be moved into the `collect_config_data` structure. Do so to remove our reliance on global state. Signed-off-by: Patrick Steinhardt --- builtin/config.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index a17e274ece..1909de22fc 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -124,7 +124,6 @@ struct config_display_options { static char *key; static regex_t *key_regexp; -static regex_t *regexp; static int use_key_regexp; static int do_all; static int fixed_value; @@ -326,6 +325,7 @@ struct collect_config_data { const struct config_display_options *display_opts; struct strbuf_list *values; const char *value_pattern; + regex_t *regexp; int do_not_match; }; @@ -342,8 +342,8 @@ static int collect_config(const char *key_, const char *value_, return 0; if (fixed_value && strcmp(data->value_pattern, (value_?value_:""))) return 0; - if (regexp != NULL && - (data->do_not_match ^ !!regexec(regexp, (value_?value_:""), 0, NULL, 0))) + if (data->regexp && + (data->do_not_match ^ !!regexec(data->regexp, (value_?value_:""), 0, NULL, 0))) return 0; ALLOC_GROW(values->items, values->nr + 1, values->alloc); @@ -404,10 +404,10 @@ static int get_value(const struct config_location_options *opts, regex_++; } - regexp = (regex_t*)xmalloc(sizeof(regex_t)); - if (regcomp(regexp, regex_, REG_EXTENDED)) { + data.regexp = (regex_t*)xmalloc(sizeof(regex_t)); + if (regcomp(data.regexp, regex_, REG_EXTENDED)) { error(_("invalid pattern: %s"), regex_); - FREE_AND_NULL(regexp); + FREE_AND_NULL(data.regexp); ret = CONFIG_INVALID_PATTERN; goto free_strings; } @@ -447,9 +447,9 @@ static int get_value(const struct config_location_options *opts, regfree(key_regexp); free(key_regexp); } - if (regexp) { - regfree(regexp); - free(regexp); + if (data.regexp) { + regfree(data.regexp); + free(data.regexp); } return ret; From patchwork Mon May 13 10:23:25 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663273 Received: from wfhigh6-smtp.messagingengine.com (wfhigh6-smtp.messagingengine.com [64.147.123.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A853C146D76 for ; Mon, 13 May 2024 10:23:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595813; cv=none; b=LlWIjvEb12cBw4h2FWvrYxtlJY9aTWnlb1GC+g6HVOcbfQDqaoFEL8bGj16Qht6yzY1xryftImLM1tTwt/oR7tEWed+S0nA7rFgU0eisV6CRme4wAdatDisl1SDCbQT4JoJHLSsYY3aMPh97kEh+wqOD9SN/+18pgdP+YxLj7c4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595813; c=relaxed/simple; bh=hzgHBq1lGVSSVeXTLpuQ3gxY6Zh2fsi0IGBHgkZwWgY=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=EEBbg0P+GhwzM/KBCfW/WqiY15rcIVCzsOjUDS5TTOa03kYrgSU5UgDCCDbSklKOzzRveeKLgjsSvaA8g+TV8tg7DdhWa7qUHf6+Fu2U4ELHCMjS/XiWZMUFBWBL5Uhrz4SMbI7tUcUNNbBAy45liCSd8w3F5dVmOTyXYRYTMvw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=I7GiUZdq; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=WXfp/ToT; arc=none smtp.client-ip=64.147.123.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="I7GiUZdq"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="WXfp/ToT" Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailfhigh.west.internal (Postfix) with ESMTP id CD5AE1800076; Mon, 13 May 2024 06:23:30 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute5.internal (MEProxy); Mon, 13 May 2024 06:23:31 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595809; x=1715682209; bh=egk5idBIGj BYPeIEuY2aOraKBh1dCHvVf6eqwf3v6SM=; b=I7GiUZdqVXYkhd6w/g2e6jFXep Qq/Rk1uOOtnxtkJ8Ka04OxNFt1xlaBnFiKzBPtO6v2BMU3cfRmeM/Ed0S+iAr7B7 N7124PghGfmi6LayTk6q9wlpGIfME8AJhni7z8SgIO2rPTxnbtXOrNqqeXbzXZWG /YO9ZdHoLM/q8LqeO8lIgyckVFJmzSK+eYObCYgK3pjBbknvgYMYRzAHbszgLo/y 3S6swMuxmk9gdM+YiMrLtG+A+p00nrDB+g+oNxv2sN65jk9Yr4T0dWBm32TtybWW GrXzA7cjzR98sYBdBX5PCkSUfrdLTyS4gpOuqFDCiMR7ZOS3lVvLPcIVoOpA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595809; x=1715682209; bh=egk5idBIGjBYPeIEuY2aOraKBh1d CHvVf6eqwf3v6SM=; b=WXfp/ToTcgWPbVOXvw8p6S530hoUEaMPf7QnrOZvVSRG /jGueZQ19AZwTKltNdY9oKdmGD1gfFOGKnp5WqxdiaeXNafS4lLvph3M+vNUIH/t 2Ub6VshVjRWhC73Vl2ZOE1mbdW2vPKAJtnnNbhOHknyV+6pns72xa+nRjQlxJ9kk m/j8oiQglhGKU5EBvWHiIERqjF5f/c0vHuBokGuYRLdJAMdEYQqCBkQoZ56+o0ww sgjtjsK2zhDG/MH6Al2RrZgyWTlf6NSZkgt7tGoQ/AV4PZVstfOG6gYdkYYeuGb2 +NTJJLq6FSSyDiH2/MC89p54/Ckol1S4ValMwzDs6g== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgepudenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:23:28 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id e0ace114 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:23:09 +0000 (UTC) Date: Mon, 13 May 2024 12:23:25 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 17/21] builtin/config: convert `key_regexp` to a local variable Message-ID: <323cb051205fdde86eb3e996d0a9fc089780eaee.1715595550.git.ps@pks.im> References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: The `key_regexp` variable is used by the `format_config()` callback when `use_key_regexp` is set. It is only ever set up by its only caller, `collect_config()` and can thus easily be moved into the `collect_config_data` structure. Do so to remove our reliance on global state. Signed-off-by: Patrick Steinhardt --- builtin/config.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index 1909de22fc..8fc9ee20a3 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -123,7 +123,6 @@ struct config_display_options { } static char *key; -static regex_t *key_regexp; static int use_key_regexp; static int do_all; static int fixed_value; @@ -326,6 +325,7 @@ struct collect_config_data { struct strbuf_list *values; const char *value_pattern; regex_t *regexp; + regex_t *key_regexp; int do_not_match; }; @@ -338,7 +338,7 @@ static int collect_config(const char *key_, const char *value_, if (!use_key_regexp && strcmp(key_, key)) return 0; - if (use_key_regexp && regexec(key_regexp, key_, 0, NULL, 0)) + if (use_key_regexp && regexec(data->key_regexp, key_, 0, NULL, 0)) return 0; if (fixed_value && strcmp(data->value_pattern, (value_?value_:""))) return 0; @@ -382,10 +382,10 @@ static int get_value(const struct config_location_options *opts, for (tl = key; *tl && *tl != '.'; tl++) *tl = tolower(*tl); - key_regexp = (regex_t*)xmalloc(sizeof(regex_t)); - if (regcomp(key_regexp, key, REG_EXTENDED)) { + data.key_regexp = (regex_t*)xmalloc(sizeof(regex_t)); + if (regcomp(data.key_regexp, key, REG_EXTENDED)) { error(_("invalid key pattern: %s"), key_); - FREE_AND_NULL(key_regexp); + FREE_AND_NULL(data.key_regexp); ret = CONFIG_INVALID_PATTERN; goto free_strings; } @@ -443,9 +443,9 @@ static int get_value(const struct config_location_options *opts, free_strings: free(key); - if (key_regexp) { - regfree(key_regexp); - free(key_regexp); + if (data.key_regexp) { + regfree(data.key_regexp); + free(data.key_regexp); } if (data.regexp) { regfree(data.regexp); From patchwork Mon May 13 10:23:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663274 Received: from wfhigh6-smtp.messagingengine.com (wfhigh6-smtp.messagingengine.com [64.147.123.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 87796146D76 for ; Mon, 13 May 2024 10:23:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595817; cv=none; b=PMmoEBkGtTy6UQ93N/csI0K0xdUldkP6FYttmOuQ78v6g9C9FFDxVPbrU9GdF/gS/hKx9xsju/ZAzV8cgkbfn4o0Ab2wGsEpe6tfX+XE3otTd7elgyJ/l2eKA0qAgnnACgKKr5972r+5i1BxLzLCf1Az3+rOLczhIscUxA/0NRs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595817; c=relaxed/simple; bh=IGT8JW0SG+wTKk4SOhkG+UoZ5bU0q8U5jUVLNkxfclQ=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=Rrwn4WlKL1Ed2AnN1iYFUYSkvaV+wWifsyXizwMws6oKarcSkGUm7q7nGKwDcmFWIQY7VzZYMgs9MhjIKCtIgxcnPHZ4rBXp5KJCsKcQ2kL+sxugCrFbbCIMzyoDjRsfEJKDHc9lxf4Ky85zjpjAvAm+ZJ9nm/cTn66hOxlJfHk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=S4U+cehp; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=ffkK4HNg; arc=none smtp.client-ip=64.147.123.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="S4U+cehp"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="ffkK4HNg" Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailfhigh.west.internal (Postfix) with ESMTP id CD53F18000DF; Mon, 13 May 2024 06:23:34 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute6.internal (MEProxy); Mon, 13 May 2024 06:23:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595814; x=1715682214; bh=JoB+Lr/5Zv nAgXdVU3sny1hXbmlG3uyValbBqZpfqdY=; b=S4U+cehpn/cnTHrir5BmHXfoKx DHcN1tfNoZ0Smu2E/Qo5DywhbwZVFnES17OoDH1ldHu8CbpKQnmd4G46QeXh9KeD /fAX5XIPc6zE14FNc+Yli7PrLmraFvN0R2QlEncRHocVkOXdDyoS31ENBLGsRIZG WNoj3Dv1FQUA08q4hz7Jzocu/lANNrdLuCZHiFqMKIyyQkLVMwSmGkpr5QBNYGr/ SaEVInqVnYTiYBlvygxfxGQ7NDUnA/4eXqsiGQC8KLAY2DlrR9FIUw+/wwIOQ/KD fXH83vbGQAGRosRrrX2Gz2V3oN6lD30jjK1ng3eDHX3OQmHtCFHb7sM5UCHw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595814; x=1715682214; bh=JoB+Lr/5ZvnAgXdVU3sny1hXbmlG 3uyValbBqZpfqdY=; b=ffkK4HNgMqSlCvBc4lfbBWj+LsHNV51YsgA2u2pW1Ubk qKT5/hw38skA9ogk6pMSl3EIDTfSwYILpZaaMW61ko0soyEtNlrlISfmlGeIbIxa nqeMNxsKx//6qMD1udDSe0tE2A9u7DisPgaMesK6Q5iHnsCE5dwX7WJ5oDMDmbvr 6rELlVskDYVzG+kbzKcMQ5KA0CSCMbhm3R5mOToSnrpkt8dJf6xYDLXyj58ffMZC MPBkMNW2gXVgyxLcko4/HfaOS5g//hBhNSsIfWAkfFo3EbLVeDlZJfpRBL7Wui/S 8mVcn/ZNhSUPBbiVd3ZiYKEeNL7JMkGxU/KTYxyA2w== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgepgeenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:23:33 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id 8538f0ea (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:23:14 +0000 (UTC) Date: Mon, 13 May 2024 12:23:30 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 18/21] builtin/config: convert `key` to a local variable Message-ID: References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: The `key` variable is used by the `get_value()` function for two purposes: - It is used to store the result of `git_config_parse_key()`, which is then passed on to `collect_config()`. - It is used as a store to convert the provided key to an all-lowercase key when `use_key_regexp` is set. Neither of these cases warrant a global variable at all. In the former case we can pass the key via `struct collect_config_data`. And in the latter case we really only want to have it as a temporary local variable such that we can free associated memory. Refactor the code accordingly to reduce our reliance on global state. Signed-off-by: Patrick Steinhardt --- builtin/config.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index 8fc9ee20a3..5737574b25 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -122,7 +122,6 @@ struct config_display_options { .key_delim = ' ', \ } -static char *key; static int use_key_regexp; static int do_all; static int fixed_value; @@ -324,6 +323,7 @@ struct collect_config_data { const struct config_display_options *display_opts; struct strbuf_list *values; const char *value_pattern; + const char *key; regex_t *regexp; regex_t *key_regexp; int do_not_match; @@ -336,7 +336,7 @@ static int collect_config(const char *key_, const char *value_, struct strbuf_list *values = data->values; const struct key_value_info *kvi = ctx->kvi; - if (!use_key_regexp && strcmp(key_, key)) + if (!use_key_regexp && strcmp(key_, data->key)) return 0; if (use_key_regexp && regexec(data->key_regexp, key_, 0, NULL, 0)) return 0; @@ -363,6 +363,7 @@ static int get_value(const struct config_location_options *opts, .display_opts = display_opts, .values = &values, }; + char *key = NULL; int i; if (use_key_regexp) { @@ -394,6 +395,8 @@ static int get_value(const struct config_location_options *opts, ret = CONFIG_INVALID_KEY; goto free_strings; } + + data.key = key; } if (regex_ && (flags & CONFIG_FLAGS_FIXED_VALUE)) From patchwork Mon May 13 10:23:35 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663275 Received: from wfhigh6-smtp.messagingengine.com (wfhigh6-smtp.messagingengine.com [64.147.123.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 86187146D76 for ; Mon, 13 May 2024 10:23:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595821; cv=none; b=SewbSBzvKpwbrALm1eahdL1QU55qp71GiieZuIezWMCuZ1PJJIF2QiXH13mbBZ41PPtyYC3uv0uFuAh+ZlUaRvBAM3SxidxqWUZ4K6OpTJ9GsFSh7U3WSCwKwVbD/tiRQaQY5VrSJE906RludAZlDIALz1+mMJv522BolT1QYxI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595821; c=relaxed/simple; bh=bGcMrfwK8s/C4aGlR3rRRJSQWsUvLfds1ertT+RI7j0=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=SKPVu17VYIUrQXrmtQEJDbj1Ri4P4K/2rUW90prwW6ph+SHd2lTVPkpxr20D8j5XUSFHWY7H0CRJ7tY5z+8pqO9fWfv39xMKKn5pL3k9mvLPFtxEE4c7/IU5BQ8H4M7di2jkTeVE6Mz6c4zoq/pqmZZ3SXq/bLdWO9QKkl9tWUA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=bCzgofBk; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=fsDq3Mkr; arc=none smtp.client-ip=64.147.123.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="bCzgofBk"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="fsDq3Mkr" Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailfhigh.west.internal (Postfix) with ESMTP id D5FDE1800103; Mon, 13 May 2024 06:23:39 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute3.internal (MEProxy); Mon, 13 May 2024 06:23:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595819; x=1715682219; bh=apshIu4FQp 37RyQaUCdjw07Ew4lfnJKZ/xhBaaRANZY=; b=bCzgofBk4TuXTQ6ZKDi7OhYDY5 bMwxGKRFbRRaoah5yBw8gxqJfR58cve4YNqZ45Q8PFv+Gs/2wS/3ibwWGD9wD8Qv ZCA5pRlnjjsl3WaBrKjbUUO1X/OP+elmXw+DpZLoHmiLiTFOHT8Ah8AkYWlxPRY0 j9BqHCyt+D+PGV8O/wDBhcUu0ehFDc1LS9EqZXz3sIksJozc8DayefIttX0AUPvR Mv77QJpwX7tqkm2GMKgjwkGs2eZR4P4zd7iStH76ED75zJRJUH9cQ2dWbF6117mc d4z7ig4czqfOYd8IMdsUXvTEcq7thZQu2Vl3QrMzEa7Qz6f1DW66ZHjznHEQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595819; x=1715682219; bh=apshIu4FQp37RyQaUCdjw07Ew4lf nJKZ/xhBaaRANZY=; b=fsDq3MkrzmYdhG1EDr1A8juHX4aC4FRK5kJd5NKmlXAf o2ay50oSigpid92my4Jgp0SO3xNOTJu1N86YQBufNiChbCmtfHnE0ltc9Tr8yP8Y 4o0ci0MG+FsOXM4xWtt+gGKQcgQdmz81s+gmVnik0UbDSJwSnvIQHWASIigYVx2U z9mKVQzXPnn8yjUqoMRYBuNhdF250gWPi6jC+nCHSY7ASY7THWXmAGqjT6D+iR0U JujButAkGldQLFJWoNt6hQPIXCeN4Hbk/Z++kU0slhgDaWx/z3N4gaf8jsWp8krG GagMWODce3O2jZUT5unzmNdRmubzIkR6CnO8DLaYFA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:23:38 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id ede6ed2d (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:23:19 +0000 (UTC) Date: Mon, 13 May 2024 12:23:35 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 19/21] builtin/config: track "fixed value" option via flags only Message-ID: References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: We track the "fixed value" option via two separate bits: once via the global variable `fixed_value`, and once via the CONFIG_FLAGS_FIXED_VALUE bit in `flags`. This is confusing and may easily lead to issues when one is not aware that this is tracked via two separate mechanisms. Refactor the code to use the flag exclusively. We already pass it to all the required callsites anyway, except for `collect_config()`. Signed-off-by: Patrick Steinhardt --- builtin/config.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index 5737574b25..2ca23a35d2 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -124,7 +124,6 @@ struct config_display_options { static int use_key_regexp; static int do_all; -static int fixed_value; #define TYPE_BOOL 1 #define TYPE_INT 2 @@ -327,6 +326,7 @@ struct collect_config_data { regex_t *regexp; regex_t *key_regexp; int do_not_match; + unsigned flags; }; static int collect_config(const char *key_, const char *value_, @@ -340,7 +340,8 @@ static int collect_config(const char *key_, const char *value_, return 0; if (use_key_regexp && regexec(data->key_regexp, key_, 0, NULL, 0)) return 0; - if (fixed_value && strcmp(data->value_pattern, (value_?value_:""))) + if ((data->flags & CONFIG_FLAGS_FIXED_VALUE) && + strcmp(data->value_pattern, (value_?value_:""))) return 0; if (data->regexp && (data->do_not_match ^ !!regexec(data->regexp, (value_?value_:""), 0, NULL, 0))) @@ -362,6 +363,7 @@ static int get_value(const struct config_location_options *opts, struct collect_config_data data = { .display_opts = display_opts, .values = &values, + .flags = flags, }; char *key = NULL; int i; @@ -1115,6 +1117,7 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) struct config_display_options display_opts = CONFIG_DISPLAY_OPTIONS_INIT; const char *comment_arg = NULL; int actions = 0; + unsigned flags = 0; struct option opts[] = { CONFIG_LOCATION_OPTIONS(location_opts), OPT_GROUP(N_("Action")), @@ -1137,13 +1140,12 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) OPT_STRING(0, "default", &display_opts.default_value, N_("value"), N_("with --get, use default value when missing entry")), OPT_STRING(0, "comment", &comment_arg, N_("value"), N_("human-readable comment string (# will be prepended as needed)")), - OPT_BOOL(0, "fixed-value", &fixed_value, N_("use string equality when comparing values to 'value-pattern'")), + OPT_BIT(0, "fixed-value", &flags, N_("use string equality when comparing values to value pattern"), CONFIG_FLAGS_FIXED_VALUE), OPT_BOOL(0, "includes", &location_opts.respect_includes_opt, N_("respect include directives on lookup")), OPT_END(), }; char *value = NULL, *comment = NULL; - int flags = 0; int ret = 0; struct key_value_info default_kvi = KVI_INIT; @@ -1193,7 +1195,7 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) } /* check usage of --fixed-value */ - if (fixed_value) { + if (flags & CONFIG_FLAGS_FIXED_VALUE) { int allowed_usage = 0; switch (actions) { @@ -1224,8 +1226,6 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) error(_("--fixed-value only applies with 'value-pattern'")); exit(129); } - - flags |= CONFIG_FLAGS_FIXED_VALUE; } comment = git_config_prepare_comment_string(comment_arg); From patchwork Mon May 13 10:23:40 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663276 Received: from wfout3-smtp.messagingengine.com (wfout3-smtp.messagingengine.com [64.147.123.146]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9465114C588 for ; Mon, 13 May 2024 10:23:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.146 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595827; cv=none; b=Ln+kgKRdIZ+lyER/GRS6LDZipe9VgUSqrceGUatVs86RlWqqEzZPJKdEt4zsIx8sBeQgRydJRoTHyZnC1bWY8SJpQU9dKDonaAxZ2rMrja8viD2pc4xjllwWUJfgSXkjwkYqa5I5ooeBxBsliGUZdYaXBr075SI76fCLzaUG1xI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595827; c=relaxed/simple; bh=nsIBHI3VrhrVls4sBT6lfQiJr7GZe2GYOvOJo9IOJRM=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=tQWCLvQCWAHe8I7PrMRfxi1h7RvcBkSFi/t3NzfXcoQdNvnSYtKdWFcCzWYTW8955YCZhAXzHTG+5e7hJ/3ZLUFlEQZTWJ5vh2inbA9TFq7djRydkMMcrMUF5ssa6DyCbVSIU/rBoCnwuVwUPQC3dLcYwBzXuAz5NbJc82NzDZ4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=dlFuCGE0; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=TVAp6nbz; arc=none smtp.client-ip=64.147.123.146 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="dlFuCGE0"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="TVAp6nbz" Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailfout.west.internal (Postfix) with ESMTP id E29791C000E9; Mon, 13 May 2024 06:23:44 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Mon, 13 May 2024 06:23:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595824; x=1715682224; bh=CoKr9B+tfN 7alSnQuVPW0COjLhKGVInyuSu+7G4om0A=; b=dlFuCGE0eficxcC/SMmbDgRPa0 JyAr45T6UZh6Id2+ceYbNTC4dHfAEplbGFGuLpCC3li6TsbzK6VOTIx8j2vBj5gK P9iymYzI3CJGR0IZvca1DeLKL61aZ/iU5TiK+NAPfWgw0HnvVAj6q+mcL7d9Vn20 Bv2wHfKmRrP6fBrsTmaVO4uhYBnXoadyhLN9JYIuYSyA0tlUUt/HAvmOjr1YKTj2 7/OsZUOd034SS+3As3PmDMYQJj2qmBVGuGaktS7hjHIReJ7P0QKL0uF7FzwFhPFD DzT8SUxLXw8gd12kn6jsRky2JeXee8+A2G7OQ7RnJUfXh+NjcXdDsk2jrROg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595824; x=1715682224; bh=CoKr9B+tfN7alSnQuVPW0COjLhKG VInyuSu+7G4om0A=; b=TVAp6nbzWQMoaSKjqpVyE56L13Hkj2GPHnRZXe7me3x/ yH0mp6HRhU3EXCR5o8mrCfBEe76buk1J1cOvHRabH7R7JINx1xauGIz1wlP37VCV eUsOJDVjPWWQt2I2vcm1YK9KNG2WiIJsKEFxAhOhgGzXkcitNmXjfGxHkgg9b352 jV2q5NOiPxoX4HHzFYIcG7melBMDbBouZhFJsnquWXMffwxoLrqvyw2uSdJqnEYz MdbmIdVkZjIxuucMOVTj4z8d9qb+xsfBmNVacbh3MsJ9MjY8dG3r3EjeAtl4LQ49 TkjGUWzxtwh1vJ1v1MVkOWIi2MRvMmkrV6Irsg3MJw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:23:43 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id 891f46fa (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:23:24 +0000 (UTC) Date: Mon, 13 May 2024 12:23:40 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 20/21] builtin/config: convert flags to a local variable Message-ID: <294bcd96a4ec1d27e58a5faf22255eb60d303fc6.1715595550.git.ps@pks.im> References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Both the `do_all` and `use_key_regexp` bits essentially act like flags to `get_value()`. Let's convert them to actual flags so that we can get rid of the last two remaining global variables that track options. Signed-off-by: Patrick Steinhardt --- builtin/config.c | 48 +++++++++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index 2ca23a35d2..2ab7d24b62 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -122,9 +122,6 @@ struct config_display_options { .key_delim = ' ', \ } -static int use_key_regexp; -static int do_all; - #define TYPE_BOOL 1 #define TYPE_INT 2 #define TYPE_BOOL_OR_INT 3 @@ -318,6 +315,9 @@ static int format_config(const struct config_display_options *opts, return 0; } +#define GET_VALUE_ALL (1 << 0) +#define GET_VALUE_KEY_REGEXP (1 << 1) + struct collect_config_data { const struct config_display_options *display_opts; struct strbuf_list *values; @@ -326,6 +326,7 @@ struct collect_config_data { regex_t *regexp; regex_t *key_regexp; int do_not_match; + unsigned get_value_flags; unsigned flags; }; @@ -336,9 +337,11 @@ static int collect_config(const char *key_, const char *value_, struct strbuf_list *values = data->values; const struct key_value_info *kvi = ctx->kvi; - if (!use_key_regexp && strcmp(key_, data->key)) + if (!(data->get_value_flags & GET_VALUE_KEY_REGEXP) && + strcmp(key_, data->key)) return 0; - if (use_key_regexp && regexec(data->key_regexp, key_, 0, NULL, 0)) + if ((data->get_value_flags & GET_VALUE_KEY_REGEXP) && + regexec(data->key_regexp, key_, 0, NULL, 0)) return 0; if ((data->flags & CONFIG_FLAGS_FIXED_VALUE) && strcmp(data->value_pattern, (value_?value_:""))) @@ -356,19 +359,21 @@ static int collect_config(const char *key_, const char *value_, static int get_value(const struct config_location_options *opts, const struct config_display_options *display_opts, - const char *key_, const char *regex_, unsigned flags) + const char *key_, const char *regex_, + unsigned get_value_flags, unsigned flags) { int ret = CONFIG_GENERIC_ERROR; struct strbuf_list values = {NULL}; struct collect_config_data data = { .display_opts = display_opts, .values = &values, + .get_value_flags = get_value_flags, .flags = flags, }; char *key = NULL; int i; - if (use_key_regexp) { + if (get_value_flags & GET_VALUE_KEY_REGEXP) { char *tl; /* @@ -440,7 +445,7 @@ static int get_value(const struct config_location_options *opts, for (i = 0; i < values.nr; i++) { struct strbuf *buf = values.items + i; - if (do_all || i == values.nr - 1) + if ((get_value_flags & GET_VALUE_ALL) || i == values.nr - 1) fwrite(buf->buf, 1, buf->len, stdout); strbuf_release(buf); } @@ -846,11 +851,12 @@ static int cmd_config_get(int argc, const char **argv, const char *prefix) struct config_display_options display_opts = CONFIG_DISPLAY_OPTIONS_INIT; const char *value_pattern = NULL, *url = NULL; int flags = 0; + unsigned get_value_flags = 0; struct option opts[] = { CONFIG_LOCATION_OPTIONS(location_opts), OPT_GROUP(N_("Filter options")), - OPT_BOOL(0, "all", &do_all, N_("return all values for multi-valued config options")), - OPT_BOOL(0, "regexp", &use_key_regexp, N_("interpret the name as a regular expression")), + OPT_BIT(0, "all", &get_value_flags, N_("return all values for multi-valued config options"), GET_VALUE_ALL), + OPT_BIT(0, "regexp", &get_value_flags, N_("interpret the name as a regular expression"), GET_VALUE_KEY_REGEXP), OPT_STRING(0, "value", &value_pattern, N_("pattern"), N_("show config with values matching the pattern")), OPT_BIT(0, "fixed-value", &flags, N_("use string equality when comparing values to value pattern"), CONFIG_FLAGS_FIXED_VALUE), OPT_STRING(0, "url", &url, N_("URL"), N_("show config matching the given URL")), @@ -870,9 +876,12 @@ static int cmd_config_get(int argc, const char **argv, const char *prefix) if ((flags & CONFIG_FLAGS_FIXED_VALUE) && !value_pattern) die(_("--fixed-value only applies with 'value-pattern'")); - if (display_opts.default_value && (do_all || url)) + if (display_opts.default_value && + ((get_value_flags & GET_VALUE_ALL) || url)) die(_("--default= cannot be used with --all or --url=")); - if (url && (do_all || use_key_regexp || value_pattern)) + if (url && ((get_value_flags & GET_VALUE_ALL) || + (get_value_flags & GET_VALUE_KEY_REGEXP) || + value_pattern)) die(_("--url= cannot be used with --all, --regexp or --value")); location_options_init(&location_opts, prefix); @@ -883,7 +892,8 @@ static int cmd_config_get(int argc, const char **argv, const char *prefix) if (url) ret = get_urlmatch(&location_opts, &display_opts, argv[0], url); else - ret = get_value(&location_opts, &display_opts, argv[0], value_pattern, flags); + ret = get_value(&location_opts, &display_opts, argv[0], value_pattern, + get_value_flags, flags); location_options_release(&location_opts); return ret; @@ -1288,19 +1298,19 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix) } else if (actions == ACTION_GET) { check_argc(argc, 1, 2); - ret = get_value(&location_opts, &display_opts, argv[0], argv[1], flags); + ret = get_value(&location_opts, &display_opts, argv[0], argv[1], + 0, flags); } else if (actions == ACTION_GET_ALL) { - do_all = 1; check_argc(argc, 1, 2); - ret = get_value(&location_opts, &display_opts, argv[0], argv[1], flags); + ret = get_value(&location_opts, &display_opts, argv[0], argv[1], + GET_VALUE_ALL, flags); } else if (actions == ACTION_GET_REGEXP) { display_opts.show_keys = 1; - use_key_regexp = 1; - do_all = 1; check_argc(argc, 1, 2); - ret = get_value(&location_opts, &display_opts, argv[0], argv[1], flags); + ret = get_value(&location_opts, &display_opts, argv[0], argv[1], + GET_VALUE_ALL|GET_VALUE_KEY_REGEXP, flags); } else if (actions == ACTION_GET_URLMATCH) { check_argc(argc, 2, 2); From patchwork Mon May 13 10:23:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13663277 Received: from wfout3-smtp.messagingengine.com (wfout3-smtp.messagingengine.com [64.147.123.146]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8C51714C5A4 for ; Mon, 13 May 2024 10:23:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.146 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595832; cv=none; b=hxqgVUu0yB6dtAB0VFACnEAgEHPnY3PyudU5sIfkOvzBPpOUrpSZsUM11G9z7a4hJHBgMACGjj0uAzIoY7CVZf34zWIvlJ+d7ddOVJBU0Q3/F3YwR2Jhn7FKLr4O2HcQonYHt9kg4mzSzkPuAlOwr+JScofcHYMlc3zylSgj36E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715595832; c=relaxed/simple; bh=LakW0QPJ72Y9w+9TXhiZmRaiwz3ZMgeJ1dxmYM6mCR4=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=ndU0gHo0ubriIfFFa/0RuO1KY/EbUEX4wqTxNwfSTu3EGobbKyn71FkwoAdLDsQYLcqdVd5h1wq+EXRVTM3w7D7acdd49+DOH0Qd+lB2duFwRz69vpqh8z9xzTKT01obR2/Fq+YQfgG9o6QKWjrAEEom9Pq702K69w+9L57vdjs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=jMaS8k/H; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=Y5kcipnq; arc=none smtp.client-ip=64.147.123.146 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="jMaS8k/H"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="Y5kcipnq" Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailfout.west.internal (Postfix) with ESMTP id DCD111C000E9; Mon, 13 May 2024 06:23:49 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Mon, 13 May 2024 06:23:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1715595829; x=1715682229; bh=PN+5w1nSra jxn1EU0stqW8VQU2ibPlKXE7+0ayd3Rb0=; b=jMaS8k/H0CBXHLitZs3l6GDqiU yrycFBXTmrgMxlElBRMpwRUwd12l7rQLduHBjwmMi8X2/HkyOm/5iO+WZOp7cEh6 hx3apKqFfJ/Am7R7z3shjk5+XOypJ6IH1jaoUZBFFJOS7LtNSGtagUwAY5mCliSP LnSjoli+Uyv3hOOU9ysUUA3TDQa2A74uFA3YYeuAwKK/n0sgBAs+EZPI3cGjmMFc nWD+OdfGM7EODzywT/Y7ekQu+BiGe1TgKaGya9NFga9djJ6oS/AcRs1M5SSnudek CfuLX7CeIT0w/PqwsHprIqB90yKh4fBoa8lHKUCVWevo6qQqyo8fQNyZwx2Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1715595829; x=1715682229; bh=PN+5w1nSrajxn1EU0stqW8VQU2ib PlKXE7+0ayd3Rb0=; b=Y5kcipnqNzxUs7zdd3c7SUm9Rhg+XPGgeLjgQln9a6n6 aj558KX86nw9Vec/UrD6jV0gTqmNSN1cVVfDkFYS/BFoTibtG4HKGPDsR7hJqy9o aqi3LHZ37FI0c9NDP5ofHMN7RnElNhM/6205ysJ9s4w0SjukZrhR4+vUAOL+JUgL ZMCrzpdC0/wBJZzNSXZGvzYjBbVrNQW5vb/ddak2bpZPOlIhDNLZn5kw1Y0cLAb4 7U04byf+q0poV/vMhBo0+hm+PBMGcGUnrnIC4guyWaN9dwPL7t9Y2sU2++x/MvcL CEM47EK6Ww1JsdKa/t9h2cjqvqTyhQBWhR/uAumHWA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdeggedgvdejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 13 May 2024 06:23:48 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id a12007ab (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Mon, 13 May 2024 10:23:29 +0000 (UTC) Date: Mon, 13 May 2024 12:23:45 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Junio C Hamano , Kyle Lippincott , Eric Sunshine Subject: [PATCH v2 21/21] builtin/config: pass data between callbacks via local variables Message-ID: <0496b958e24a4d0191821d3f6c8c0d2028f36452.1715595550.git.ps@pks.im> References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: We use several global variables to pass data between callers and callbacks in `get_color()` and `get_colorbool()`. Convert those to use callback data structures instead. Signed-off-by: Patrick Steinhardt --- builtin/config.c | 90 ++++++++++++++++++++++++++++-------------------- 1 file changed, 52 insertions(+), 38 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index 2ab7d24b62..945a1fd82d 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -517,21 +517,24 @@ static char *normalize_value(const char *key, const char *value, BUG("cannot normalize type %d", type); } -static int get_color_found; -static const char *get_color_slot; -static const char *get_colorbool_slot; -static char parsed_color[COLOR_MAXLEN]; +struct get_color_config_data { + int get_color_found; + const char *get_color_slot; + char parsed_color[COLOR_MAXLEN]; +}; static int git_get_color_config(const char *var, const char *value, const struct config_context *ctx UNUSED, - void *cb UNUSED) + void *cb) { - if (!strcmp(var, get_color_slot)) { + struct get_color_config_data *data = cb; + + if (!strcmp(var, data->get_color_slot)) { if (!value) config_error_nonbool(var); - if (color_parse(value, parsed_color) < 0) + if (color_parse(value, data->parsed_color) < 0) return -1; - get_color_found = 1; + data->get_color_found = 1; } return 0; } @@ -539,66 +542,77 @@ static int git_get_color_config(const char *var, const char *value, static void get_color(const struct config_location_options *opts, const char *var, const char *def_color) { - get_color_slot = var; - get_color_found = 0; - parsed_color[0] = '\0'; - config_with_options(git_get_color_config, NULL, + struct get_color_config_data data = { + .get_color_slot = var, + .parsed_color[0] = '\0', + }; + + config_with_options(git_get_color_config, &data, &opts->source, the_repository, &opts->options); - if (!get_color_found && def_color) { - if (color_parse(def_color, parsed_color) < 0) + if (!data.get_color_found && def_color) { + if (color_parse(def_color, data.parsed_color) < 0) die(_("unable to parse default color value")); } - fputs(parsed_color, stdout); + fputs(data.parsed_color, stdout); } -static int get_colorbool_found; -static int get_diff_color_found; -static int get_color_ui_found; +struct get_colorbool_config_data { + int get_colorbool_found; + int get_diff_color_found; + int get_color_ui_found; + const char *get_colorbool_slot; +}; + static int git_get_colorbool_config(const char *var, const char *value, const struct config_context *ctx UNUSED, - void *data UNUSED) + void *cb) { - if (!strcmp(var, get_colorbool_slot)) - get_colorbool_found = git_config_colorbool(var, value); + struct get_colorbool_config_data *data = cb; + + if (!strcmp(var, data->get_colorbool_slot)) + data->get_colorbool_found = git_config_colorbool(var, value); else if (!strcmp(var, "diff.color")) - get_diff_color_found = git_config_colorbool(var, value); + data->get_diff_color_found = git_config_colorbool(var, value); else if (!strcmp(var, "color.ui")) - get_color_ui_found = git_config_colorbool(var, value); + data->get_color_ui_found = git_config_colorbool(var, value); return 0; } static int get_colorbool(const struct config_location_options *opts, const char *var, int print) { - get_colorbool_slot = var; - get_colorbool_found = -1; - get_diff_color_found = -1; - get_color_ui_found = -1; - config_with_options(git_get_colorbool_config, NULL, + struct get_colorbool_config_data data = { + .get_colorbool_slot = var, + .get_colorbool_found = -1, + .get_diff_color_found = -1, + .get_color_ui_found = -1, + }; + + config_with_options(git_get_colorbool_config, &data, &opts->source, the_repository, &opts->options); - if (get_colorbool_found < 0) { - if (!strcmp(get_colorbool_slot, "color.diff")) - get_colorbool_found = get_diff_color_found; - if (get_colorbool_found < 0) - get_colorbool_found = get_color_ui_found; + if (data.get_colorbool_found < 0) { + if (!strcmp(data.get_colorbool_slot, "color.diff")) + data.get_colorbool_found = data.get_diff_color_found; + if (data.get_colorbool_found < 0) + data.get_colorbool_found = data.get_color_ui_found; } - if (get_colorbool_found < 0) + if (data.get_colorbool_found < 0) /* default value if none found in config */ - get_colorbool_found = GIT_COLOR_AUTO; + data.get_colorbool_found = GIT_COLOR_AUTO; - get_colorbool_found = want_color(get_colorbool_found); + data.get_colorbool_found = want_color(data.get_colorbool_found); if (print) { - printf("%s\n", get_colorbool_found ? "true" : "false"); + printf("%s\n", data.get_colorbool_found ? "true" : "false"); return 0; } else - return get_colorbool_found ? 0 : 1; + return data.get_colorbool_found ? 0 : 1; } static void check_write(const struct git_config_source *source)