All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kyle Lippincott <spectral@google.com>
To: Patrick Steinhardt <ps@pks.im>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>,
	 Eric Sunshine <sunshine@sunshineco.com>
Subject: Re: [PATCH v2 00/21] builtin/config: remove global state
Date: Mon, 13 May 2024 14:57:22 -0700	[thread overview]
Message-ID: <CAO_smVijhZYjuZA+Q_1-XNLDC5AkFVf1SMwFyE3f6UCTrrmgZg@mail.gmail.com> (raw)
In-Reply-To: <cover.1715595550.git.ps@pks.im>

On Mon, May 13, 2024 at 3:22 AM Patrick Steinhardt <ps@pks.im> wrote:
>
> Hi,
>
> this is the second version of my patch series that removes global state
> from "builtin/config.c". Changes compared to v1:
>
>   - Reinstated a comment in patch 5.
>
>   - Fixed a memory leak in patch 9.
>
>   - A couple of commit message fixes.
>
> The series continues to build on top of ps/config-subcommands.
>
> Thanks!
>
> Patrick
>
> Patrick Steinhardt (21):
>   builtin/config: stop printing full usage on misuse
>   builtin/config: move legacy mode into its own function
>   builtin/config: move subcommand options into `cmd_config()`
>   builtin/config: move legacy options into `cmd_config()`
>   builtin/config: move actions into `cmd_config_actions()`
>   builtin/config: check for writeability after source is set up
>   config: make the config source const
>   builtin/config: refactor functions to have common exit paths
>   builtin/config: move location options into local variables
>   builtin/config: move display options into local variables
>   builtin/config: move type options into display options
>   builtin/config: move default value into display options
>   builtin/config: move `respect_includes_opt` into location options
>   builtin/config: convert `do_not_match` to a local variable
>   builtin/config: convert `value_pattern` to a local variable
>   builtin/config: convert `regexp` to a local variable
>   builtin/config: convert `key_regexp` to a local variable
>   builtin/config: convert `key` to a local variable
>   builtin/config: track "fixed value" option via flags only
>   builtin/config: convert flags to a local variable
>   builtin/config: pass data between callbacks via local variables
>
>  builtin/config.c  | 968 ++++++++++++++++++++++++++--------------------
>  config.c          |   4 +-
>  config.h          |   2 +-
>  t/t1300-config.sh |   9 +-
>  4 files changed, 550 insertions(+), 433 deletions(-)
>
> Range-diff against v1:

Looks good to me

>  1:  0ba7628126 =  1:  0ba7628126 builtin/config: stop printing full usage on misuse
>  2:  663e1f74f8 =  2:  663e1f74f8 builtin/config: move legacy mode into its own function
>  3:  1239c151d0 =  3:  1239c151d0 builtin/config: move subcommand options into `cmd_config()`
>  4:  82964510c5 =  4:  82964510c5 builtin/config: move legacy options into `cmd_config()`
>  5:  2e308393ed !  5:  0a6ecae2cc builtin/config: move actions into `cmd_config_actions()`
>     @@ builtin/config.c: static int cmd_config_actions(int argc, const char **argv, con
>         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);
>
>  6:  edfd7caa39 =  6:  7ab99a27c1 builtin/config: check for writeability after source is set up
>  7:  bfba68aa1e =  7:  1460d3a36c config: make the config source const
>  8:  6bff0410e9 =  8:  018ed0226b builtin/config: refactor functions to have common exit paths
>  9:  a96c122280 !  9:  b5d43b6f85 builtin/config: move location options into local variables
>     @@ builtin/config.c: static char *default_user_config(void)
>      -          given_config_source.file = git_global_config();
>      -          if (!given_config_source.file)
>      +  if (opts->use_global_config) {
>     -+          opts->source.file = xstrdup_or_null(git_global_config());
>     ++          opts->source.file = git_global_config();
>      +          if (!opts->source.file)
>                         /*
>                          * It is unknown if HOME/.gitconfig exists, so
> 10:  06c1e08fc4 = 10:  d66e14af30 builtin/config: move display options into local variables
> 11:  9610897662 = 11:  63436c3416 builtin/config: move type options into display options
> 12:  eb79462861 = 12:  106b8ac8a2 builtin/config: move default value into display options
> 13:  b9ebfbd667 = 13:  8a6b555b58 builtin/config: move `respect_includes_opt` into location options
> 14:  2b40b784fe ! 14:  0dd22bf51a builtin/config: convert `do_not_match` to a local variable
>     @@ Commit message
>          builtin/config: convert `do_not_match` to a local variable
>
>          The `do_not_match` variable is used by the `format_config()` callback as
>     -    an indicator whteher or not the passed regular expression is negated. It
>     +    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.
>
> 15:  71d1b7a51b = 15:  b656951f0c builtin/config: convert `value_pattern` to a local variable
> 16:  c3b340f119 = 16:  b56a07bda0 builtin/config: convert `regexp` to a local variable
> 17:  835cc0acfb = 17:  323cb05120 builtin/config: convert `key_regexp` to a local variable
> 18:  2aee7ec5d8 ! 18:  e972e63be8 builtin/config: convert `key` to a local variable
>     @@ Commit message
>          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 si
>     +      - 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.
>
>     -    Both of these cases don't 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.
>     +    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.
>
> 19:  625216a774 ! 19:  d83c3d085e builtin/config: track "fixed value" option via flags only
>     @@ Commit message
>          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 require callsites anyway, except for `collect_config()`.
>     +    the required callsites anyway, except for `collect_config()`.
>
>          Signed-off-by: Patrick Steinhardt <ps@pks.im>
>
> 20:  05254d512b = 20:  294bcd96a4 builtin/config: convert flags to a local variable
> 21:  3a5f059789 = 21:  0496b958e2 builtin/config: pass data between callbacks via local variables
> --
> 2.45.GIT
>

  parent reply	other threads:[~2024-05-13 21:57 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-10 11:24 [PATCH 00/21] builtin/config: remove global state Patrick Steinhardt
2024-05-10 11:24 ` [PATCH 01/21] builtin/config: stop printing full usage on misuse Patrick Steinhardt
2024-05-10 11:24 ` [PATCH 02/21] builtin/config: move legacy mode into its own function Patrick Steinhardt
2024-05-10 11:24 ` [PATCH 03/21] builtin/config: move subcommand options into `cmd_config()` Patrick Steinhardt
2024-05-10 11:24 ` [PATCH 04/21] builtin/config: move legacy " Patrick Steinhardt
2024-05-10 11:24 ` [PATCH 05/21] builtin/config: move actions into `cmd_config_actions()` Patrick Steinhardt
2024-05-10 20:42   ` Kyle Lippincott
2024-05-13 10:20     ` Patrick Steinhardt
2024-05-10 11:24 ` [PATCH 06/21] builtin/config: check for writeability after source is set up Patrick Steinhardt
2024-05-10 20:46   ` Kyle Lippincott
2024-05-13 10:21     ` Patrick Steinhardt
2024-05-10 11:24 ` [PATCH 07/21] config: make the config source const Patrick Steinhardt
2024-05-10 11:25 ` [PATCH 08/21] builtin/config: refactor functions to have common exit paths Patrick Steinhardt
2024-05-10 11:25 ` [PATCH 09/21] builtin/config: move location options into local variables Patrick Steinhardt
2024-05-10 11:34   ` Patrick Steinhardt
2024-05-10 11:25 ` [PATCH 10/21] builtin/config: move display " Patrick Steinhardt
2024-05-10 11:25 ` [PATCH 11/21] builtin/config: move type options into display options Patrick Steinhardt
2024-05-10 11:25 ` [PATCH 12/21] builtin/config: move default value " Patrick Steinhardt
2024-05-10 11:25 ` [PATCH 13/21] builtin/config: move `respect_includes_opt` into location options Patrick Steinhardt
2024-05-10 11:25 ` [PATCH 14/21] builtin/config: convert `do_not_match` to a local variable Patrick Steinhardt
2024-05-11 16:42   ` Eric Sunshine
2024-05-10 11:25 ` [PATCH 15/21] builtin/config: convert `value_pattern` " Patrick Steinhardt
2024-05-10 11:25 ` [PATCH 16/21] builtin/config: convert `regexp` " Patrick Steinhardt
2024-05-10 11:25 ` [PATCH 17/21] builtin/config: convert `key_regexp` " Patrick Steinhardt
2024-05-10 11:25 ` [PATCH 18/21] builtin/config: convert `key` " Patrick Steinhardt
2024-05-10 11:25 ` [PATCH 19/21] builtin/config: track "fixed value" option via flags only Patrick Steinhardt
2024-05-11 16:52   ` Eric Sunshine
2024-05-10 11:26 ` [PATCH 20/21] builtin/config: convert flags to a local variable Patrick Steinhardt
2024-05-10 11:26 ` [PATCH 21/21] builtin/config: pass data between callbacks via local variables Patrick Steinhardt
2024-05-10 17:40 ` [PATCH 00/21] builtin/config: remove global state Junio C Hamano
2024-05-10 23:08 ` Kyle Lippincott
2024-05-13 10:21 ` [PATCH v2 " Patrick Steinhardt
2024-05-13 10:22   ` [PATCH v2 01/21] builtin/config: stop printing full usage on misuse Patrick Steinhardt
2024-05-13 10:22   ` [PATCH v2 02/21] builtin/config: move legacy mode into its own function Patrick Steinhardt
2024-05-13 10:22   ` [PATCH v2 03/21] builtin/config: move subcommand options into `cmd_config()` Patrick Steinhardt
2024-05-13 10:22   ` [PATCH v2 04/21] builtin/config: move legacy " Patrick Steinhardt
2024-05-13 10:22   ` [PATCH v2 05/21] builtin/config: move actions into `cmd_config_actions()` Patrick Steinhardt
2024-05-13 10:22   ` [PATCH v2 06/21] builtin/config: check for writeability after source is set up Patrick Steinhardt
2024-05-14 21:45     ` Taylor Blau
2024-05-15  5:58       ` Patrick Steinhardt
2024-05-13 10:22   ` [PATCH v2 07/21] config: make the config source const Patrick Steinhardt
2024-05-13 10:22   ` [PATCH v2 08/21] builtin/config: refactor functions to have common exit paths Patrick Steinhardt
2024-05-13 10:22   ` [PATCH v2 09/21] builtin/config: move location options into local variables Patrick Steinhardt
2024-05-13 10:22   ` [PATCH v2 10/21] builtin/config: move display " Patrick Steinhardt
2024-05-13 10:22   ` [PATCH v2 11/21] builtin/config: move type options into display options Patrick Steinhardt
2024-05-13 10:23   ` [PATCH v2 12/21] builtin/config: move default value " Patrick Steinhardt
2024-05-13 10:23   ` [PATCH v2 13/21] builtin/config: move `respect_includes_opt` into location options Patrick Steinhardt
2024-05-13 10:23   ` [PATCH v2 14/21] builtin/config: convert `do_not_match` to a local variable Patrick Steinhardt
2024-05-13 10:23   ` [PATCH v2 15/21] builtin/config: convert `value_pattern` " Patrick Steinhardt
2024-05-13 10:23   ` [PATCH v2 16/21] builtin/config: convert `regexp` " Patrick Steinhardt
2024-05-13 10:23   ` [PATCH v2 17/21] builtin/config: convert `key_regexp` " Patrick Steinhardt
2024-05-13 10:23   ` [PATCH v2 18/21] builtin/config: convert `key` " Patrick Steinhardt
2024-05-13 10:23   ` [PATCH v2 19/21] builtin/config: track "fixed value" option via flags only Patrick Steinhardt
2024-05-13 10:23   ` [PATCH v2 20/21] builtin/config: convert flags to a local variable Patrick Steinhardt
2024-05-13 10:23   ` [PATCH v2 21/21] builtin/config: pass data between callbacks via local variables Patrick Steinhardt
2024-05-13 21:57   ` Kyle Lippincott [this message]
2024-05-14 14:48   ` [PATCH v2 00/21] builtin/config: remove global state Junio C Hamano
2024-05-14 14:52     ` Patrick Steinhardt
2024-05-15  5:53       ` Patrick Steinhardt
2024-05-15  6:41 ` [PATCH v3 " Patrick Steinhardt
2024-05-15  6:41   ` [PATCH v3 01/21] builtin/config: stop printing full usage on misuse Patrick Steinhardt
2024-05-15  6:41   ` [PATCH v3 02/21] builtin/config: move legacy mode into its own function Patrick Steinhardt
2024-05-15  6:41   ` [PATCH v3 03/21] builtin/config: move subcommand options into `cmd_config()` Patrick Steinhardt
2024-05-15  6:41   ` [PATCH v3 04/21] builtin/config: move legacy " Patrick Steinhardt
2024-05-15  6:41   ` [PATCH v3 05/21] builtin/config: move actions into `cmd_config_actions()` Patrick Steinhardt
2024-05-15  6:42   ` [PATCH v3 06/21] builtin/config: check for writeability after source is set up Patrick Steinhardt
2024-05-15  6:42   ` [PATCH v3 07/21] config: make the config source const Patrick Steinhardt
2024-05-15  6:42   ` [PATCH v3 08/21] builtin/config: refactor functions to have common exit paths Patrick Steinhardt
2024-05-15  6:42   ` [PATCH v3 09/21] builtin/config: move location options into local variables Patrick Steinhardt
2024-05-15  6:42   ` [PATCH v3 10/21] builtin/config: move display " Patrick Steinhardt
2024-05-15  6:42   ` [PATCH v3 11/21] builtin/config: move type options into display options Patrick Steinhardt
2024-05-15  6:42   ` [PATCH v3 12/21] builtin/config: move default value " Patrick Steinhardt
2024-05-15  6:42   ` [PATCH v3 13/21] builtin/config: move `respect_includes_opt` into location options Patrick Steinhardt
2024-05-15  6:42   ` [PATCH v3 14/21] builtin/config: convert `do_not_match` to a local variable Patrick Steinhardt
2024-05-15  6:42   ` [PATCH v3 15/21] builtin/config: convert `value_pattern` " Patrick Steinhardt
2024-05-15  6:42   ` [PATCH v3 16/21] builtin/config: convert `regexp` " Patrick Steinhardt
2024-05-15  6:42   ` [PATCH v3 17/21] builtin/config: convert `key_regexp` " Patrick Steinhardt
2024-05-15  6:42   ` [PATCH v3 18/21] builtin/config: convert `key` " Patrick Steinhardt
2024-05-15  6:43   ` [PATCH v3 19/21] builtin/config: track "fixed value" option via flags only Patrick Steinhardt
2024-05-15  6:43   ` [PATCH v3 20/21] builtin/config: convert flags to a local variable Patrick Steinhardt
2024-05-15  6:43   ` [PATCH v3 21/21] builtin/config: pass data between callbacks via local variables Patrick Steinhardt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAO_smVijhZYjuZA+Q_1-XNLDC5AkFVf1SMwFyE3f6UCTrrmgZg@mail.gmail.com \
    --to=spectral@google.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=ps@pks.im \
    --cc=sunshine@sunshineco.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.