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

[PATCH v3 0/6] Non-trivial designated initializer conversion

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Oct 1, 2021, 10:27 UTC
Message-ID
<cover-v3-0.6-00000000000-20211001T102056Z-avarab@gmail.com>
In-Reply-To
<cover-v2-0.5-00000000000-20210927T125715Z-avarab@gmail.com>

See http://lore.kernel.org/git/cover-0.6-00000000000-20210927T004920Z-avarab@gmail.com for the v1 & goals, and https://lore.kernel.org/git/cover-v2-0.5-00000000000-20210927T125715Z-avarab@gmail.com/ for the v2.

This v3:
 * Addresses Junio's comments about URLMATCH_CONFIG_INIT use, I'm no
   longer removing explicit assignments to NULL related to it.
 * Updates the commit message of 5/6 for the discussion ending at
   https://lore.kernel.org/git/xmqqv92lmv2b.fsf@gitster.g/
 * I've added a new 6/6 with an UNPACK_TREES_OPTIONS_INIT. It's
   related to the discussion about how unpack-trees.[ch] memory
   management happens at [1], but is really orthagonal to the points
   Elijah and I were discussing there.
   I think whatever approach we'd decide to go with (his in
   en/removing-untracked-fixes, or my WIP suggestion) the move to an
   UNPACK_TREES_OPTIONS_INIT makes sense, and would be the same either
   way.
   It does make the WIP patches I've got at[1] to solve memory leaks &
   simplify the setup in unpack-trees.[ch] much smaller, and is like
   the other *_INIT changes here, so I've included it.
1. https://lore.kernel.org/git/87fstlrumj.fsf@evledraar.gmail.com/
2. https://github.com/avar/git/compare/avar/post-sanitize-leak-test-mode-add-and-use-revisions-release...avar/post-sanitize-leak-test-mode-unpack-trees-and-dir
Ævar Arnfjörð Bjarmason (6):
  daemon.c: refactor hostinfo_init() to HOSTINFO_INIT macro
  builtin/blame.c: refactor commit_info_init() to COMMIT_INFO_INIT macro
  urlmatch.[ch]: add and use URLMATCH_CONFIG_INIT
  builtin/remote.c: add and use a REF_STATES_INIT
  builtin/remote.c: add and use SHOW_INFO_INIT
  unpack-trees.[ch]: define and use a UNPACK_TREES_OPTIONS_INIT
 archive.c                 |   3 +-
 builtin/am.c              |   6 +--
 builtin/blame.c           |  30 +++++------
 builtin/checkout.c        |   6 +--
 builtin/clone.c           |   3 +-
 builtin/commit.c          |   3 +-
 builtin/config.c          |   2 +-
 builtin/merge.c           |   3 +-
 builtin/read-tree.c       |   3 +-
 builtin/remote.c          | 111 +++++++++++++++++++-------------------
 builtin/reset.c           |   3 +-
 builtin/sparse-checkout.c |   3 +-
 builtin/stash.c           |   6 +--
 credential.c              |   2 +-
 daemon.c                  |  19 +++----
 diff-lib.c                |   3 +-
 http.c                    |   2 +-
 merge-ort.c               |   3 +-
 merge-recursive.c         |   4 +-
 reset.c                   |   2 +-
 sequencer.c               |   3 +-
 unpack-trees.h            |   1 +
 urlmatch.h                |   4 ++
 23 files changed, 103 insertions(+), 122 deletions(-)
Range-diff against v2:
1:  3130693b416 = 1:  8f3f3f97fcb daemon.c: refactor hostinfo_init() to HOSTINFO_INIT macro
2:  65c5295c1ac = 2:  ced1d581f15 builtin/blame.c: refactor commit_info_init() to COMMIT_INFO_INIT macro
3:  3783788b553 ! 3:  266948e604c urlmatch.[ch]: add and use URLMATCH_CONFIG_INIT
    @@ Commit message
         urlmatch.[ch]: add and use URLMATCH_CONFIG_INIT
     
         Change the initialization pattern of "struct urlmatch_config" to use
    -    an *_INIT macro and designated initializers.
    +    an *_INIT macro and designated initializers. Right now there's no
    +    other "struct" member of "struct urlmatch_config" which would require
    +    its own *_INIT, but it's good practice not to assume that. Let's also
    +    change this to a designated initializer while we're at it.
     
         Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
     
    @@ builtin/config.c: static int get_urlmatch(const char *var, const char *url)
      	struct string_list values = STRING_LIST_INIT_DUP;
      
      	config.collect_fn = urlmatch_collect_fn;
    --	config.cascade_fn = NULL;
    - 	config.cb = &values;
    - 
    - 	if (!url_normalize(url, &config.url))
     
      ## credential.c ##
     @@ credential.c: static int match_partial_url(const char *url, void *cb)
    @@ credential.c: static int match_partial_url(const char *url, void *cb)
      	struct strbuf url = STRBUF_INIT;
      
      	if (!c->host)
    -@@ credential.c: static void credential_apply_config(struct credential *c)
    - 		return;
    - 
    - 	config.section = "credential";
    --	config.key = NULL;
    - 	config.collect_fn = credential_config_callback;
    --	config.cascade_fn = NULL;
    - 	config.select_fn = select_all;
    - 	config.fallback_match_fn = match_partial_url;
    - 	config.cb = c;
     
      ## http.c ##
     @@ http.c: void http_init(struct remote *remote, const char *url, int proactive_auth)
    @@ http.c: void http_init(struct remote *remote, const char *url, int proactive_aut
     +	struct urlmatch_config config = URLMATCH_CONFIG_INIT;
      
      	config.section = "http";
    --	config.key = NULL;
    - 	config.collect_fn = http_options;
    - 	config.cascade_fn = git_default_config;
    --	config.cb = NULL;
    - 
    - 	http_is_verbose = 0;
    - 	normalized_url = url_normalize(url, &config.url);
    + 	config.key = NULL;
     
      ## urlmatch.h ##
     @@ urlmatch.h: struct urlmatch_config {
4:  13ef9566903 ! 4:  41fcb0a45e5 builtin/remote.c: add and use a REF_STATES_INIT
    @@ Commit message
         initialize it in those three places, skip the memset(), and pass those
         structs down appropriately.
     
    +    This would be a behavior change if we had codepaths that relied say on
    +    implicitly having had "new_refs" initialized to STRING_LIST_INIT_NODUP
    +    with the memset(), but only set the "strdup_strings" on some other
    +    struct, but then called string_list_append() on "new_refs". There
    +    isn't any such codepath, all of the late assignments to
    +    "strdup_strings" assigned to those structs that we'd use for those
    +    codepaths.
    +
    +    So just initializing them all up-front makes for easier to understand
    +    code, i.e. in the pre-image it looked as though we had that tricky
    +    edge case, but we didn't.
    +
         Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
     
      ## builtin/remote.c ##
5:  b78a9ec0846 = 5:  25fec54877b builtin/remote.c: add and use SHOW_INFO_INIT
-:  ----------- > 6:  18358f5d57a unpack-trees.[ch]: define and use a UNPACK_TREES_OPTIONS_INIT
-- 
2.33.0.1375.gbbd823cc90f
Previous: Ævar Arnfjörð BjarmasonNext: Ævar Arnfjörð Bjarmason
Message 20 of 33 in “Non-trivial designated initializer conversion”
  1. 0/6 Non-trivial designated initializer conversionÆvar Arnfjörð Bjarmason, Sep 27, 2021
  2. 1/6 daemon.c: refactor hostinfo_init() to HOSTINFO_INIT macroÆvar Arnfjörð Bjarmason, Sep 27, 2021
  3. 2/6 builtin/blame.c: refactor commit_info_init() to COMMIT_INFO_INIT macroÆvar Arnfjörð Bjarmason, Sep 27, 2021
  4. 3/6 shortlog: use designated initializer for "struct shortlog"Ævar Arnfjörð Bjarmason, Sep 27, 2021
  5. Phillip WoodSep 27, 2021
  6. Ævar Arnfjörð BjarmasonSep 27, 2021
  7. 4/6 urlmatch.[ch]: add and use URLMATCH_CONFIG_INITÆvar Arnfjörð Bjarmason, Sep 27, 2021
  8. 5/6 builtin/remote.c: add and use a REF_STATES_INITÆvar Arnfjörð Bjarmason, Sep 27, 2021
  9. 6/6 builtin/remote.c: add and use SHOW_INFO_INITÆvar Arnfjörð Bjarmason, Sep 27, 2021
  10. 0/5 Non-trivial designated initializer conversionÆvar Arnfjörð Bjarmason, Sep 27, 2021
  11. 1/5 daemon.c: refactor hostinfo_init() to HOSTINFO_INIT macroÆvar Arnfjörð Bjarmason, Sep 27, 2021
  12. 2/5 builtin/blame.c: refactor commit_info_init() to COMMIT_INFO_INIT macroÆvar Arnfjörð Bjarmason, Sep 27, 2021
  13. 3/5 urlmatch.[ch]: add and use URLMATCH_CONFIG_INITÆvar Arnfjörð Bjarmason, Sep 27, 2021
  14. Junio C HamanoSep 27, 2021
  15. 4/5 builtin/remote.c: add and use a REF_STATES_INITÆvar Arnfjörð Bjarmason, Sep 27, 2021
  16. Junio C HamanoSep 27, 2021
  17. Ævar Arnfjörð BjarmasonSep 27, 2021
  18. Junio C HamanoSep 27, 2021
  19. 5/5 builtin/remote.c: add and use SHOW_INFO_INITÆvar Arnfjörð Bjarmason, Sep 27, 2021
  20. 0/6 Non-trivial designated initializer conversionÆvar Arnfjörð Bjarmason, Oct 1, 2021
  21. 1/6 daemon.c: refactor hostinfo_init() to HOSTINFO_INIT macroÆvar Arnfjörð Bjarmason, Oct 1, 2021
  22. 2/6 builtin/blame.c: refactor commit_info_init() to COMMIT_INFO_INIT macroÆvar Arnfjörð Bjarmason, Oct 1, 2021
  23. 3/6 urlmatch.[ch]: add and use URLMATCH_CONFIG_INITÆvar Arnfjörð Bjarmason, Oct 1, 2021
  24. 4/6 builtin/remote.c: add and use a REF_STATES_INITÆvar Arnfjörð Bjarmason, Oct 1, 2021
  25. 5/6 builtin/remote.c: add and use SHOW_INFO_INITÆvar Arnfjörð Bjarmason, Oct 1, 2021
  26. 6/6 unpack-trees.[ch]: define and use a UNPACK_TREES_OPTIONS_INITÆvar Arnfjörð Bjarmason, Oct 1, 2021
  27. Junio C HamanoOct 1, 2021
  28. 0/5 Non-trivial designated initializer conversionÆvar Arnfjörð Bjarmason, Oct 2, 2021
  29. 2/5 builtin/blame.c: refactor commit_info_init() to COMMIT_INFO_INIT macroÆvar Arnfjörð Bjarmason, Oct 2, 2021
  30. 1/5 daemon.c: refactor hostinfo_init() to HOSTINFO_INIT macroÆvar Arnfjörð Bjarmason, Oct 2, 2021
  31. 4/5 builtin/remote.c: add and use a REF_STATES_INITÆvar Arnfjörð Bjarmason, Oct 2, 2021
  32. 5/5 builtin/remote.c: add and use SHOW_INFO_INITÆvar Arnfjörð Bjarmason, Oct 2, 2021
  33. 3/5 urlmatch.[ch]: add and use URLMATCH_CONFIG_INITÆvar Arnfjörð Bjarmason, Oct 2, 2021

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

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