From: Andrew Pleeter Date: Sat, 26 Sep 2026 16:19:51 GMT Subject: Re: [PATCH v8] var: support broken-down idents, signing key, multiple args, and -z Message-ID: <20260926161951.30531-1-andrewpleeter@gmail.com> In-Reply-To: Hi Phillip, Sorry for the silence. I was replying on the GitGitGadget PR and did not realise those comments never reach the list. That is also why v6 switched to get_signing_key() without a word from me about your question. You were right to keep asking about GIT_SIGNING_KEY. I am dropping it from the series. get_signing_key() returns a string whose meaning depends on gpg.format, and the variable gives the caller no way to tell which kind it got: gpg.format=openpgp, user.signingkey unset $ git var GIT_SIGNING_KEY C O Mitter gpg.format=openpgp, user.signingkey=DEADBEEF $ git var GIT_SIGNING_KEY DEADBEEF gpg.format=ssh, user.signingkey=/path/to/key.pub $ git var GIT_SIGNING_KEY /path/to/key.pub So no, the key alone does not tell a caller whether to use gpg or ssh; they would have to read gpg.format as well. And in the default case the value is a committer ident rather than a key, because that is what get_signing_key() hands to gpg to look up. Better to drop it than ship a GIT_SIGNING_KEY that sometimes isn't one. I will revisit it when I can name a caller it serves. On the exit code, your GIT_CONFIG_NOSYSTEM example convinced me. In v9, asking for several variables omits the ones with no value and exits 0. Non-zero is reserved for real errors such as an unknown variable name, so callers can detect those from the exit code alone. A single variable still exits 1 when it has no value. The string_list conversion is split out as you suggested: 1/4 var: represent multi-valued variables with a string_list 2/4 var: add "-z" output mode 3/4 var: accept more than one variable 4/4 var: add broken-out identity variables parse_options() sits in 2/4, since "-z" is what requires it. GIT_CONFIG_GLOBAL is now documented as multi-valued, and the tests use nul_to_q instead of test_cmp over files containing NUL. One place I did not follow you: instead of a trailing delimiter for a multi-valued variable when argc > 1, each value gets its own entry: $ git var GIT_AUTHOR_IDENT GIT_CONFIG_GLOBAL GIT_AUTHOR_IDENT=A U Thor 1112912053 -0700 GIT_CONFIG_GLOBAL=/home/me/.config/git/config GIT_CONFIG_GLOBAL=/home/me/.gitconfig Same shape as "git var -l", so one parser handles both. Happy to switch if you prefer the trailing delimiter. I should have raised it last time instead of just changing it. Thanks, Andrew