On Fri, Sep 24 2021, Junio C Hamano wrote: > Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> writes: > >> ... the >> usage.c API, which is generally being phased out. > > That is news to me. Any reason why you think so? Perhaps better phrased as "generally going unused where we're using parse-options.c", although some quick historical trends I ran as an ad-hoc show usage() standing still since v1.6.0 in number of builtin*.c files[1], v.s. a 3x growth in usage_with_options() since then[2]. But in this case we're using an ad-hoc parser in cmd_main(), seemingly because it ends up copy/pasting a very small part of git.ci functionality over there, which is something that's been discussed as something we should move over to parse_options() sooner than later. It looks like a better approach to just use parse_options() consistently in scalar.c, as e.g. commit-graph.c, stash.c, multi-pack-index.c etc. that all implement a similar cmd/subcommand pattern do. The end-state of duplicating the "-C" and "-c" options from git.c can then easily be handled by parse-options.c, IIRC the stumbling point in migrating over git.c was some of the statefulness of other parts potentially needing incremenatl parsing (i.e. via parse_options_step() and friends). 1. $ parallel "printf "%s: " {} && git grep -l '\busage\(' {} -- 'builtin*.c' | wc -l" ::: v1.{1..9}.0 v2.{0..32}.0 v1.1.0:0 v1.2.0:0 v1.3.0:0 v1.4.0:20 v1.5.0:51 v1.7.0:35 v1.6.0:40 v1.8.0:34 v2.1.0:32 v1.9.0:33 v2.0.0:33 v2.2.0:32 v2.3.0:32 v2.4.0:32 v2.5.0:32 v2.6.0:31 v2.7.0:31 v2.9.0:29 v2.8.0:30 v2.11.0:29 v2.10.0:29 v2.12.0:29 v2.13.0:29 v2.14.0:31 v2.15.0:31 v2.16.0:31 v2.17.0:31 v2.19.0:32 v2.18.0:31 v2.22.0:31 v2.21.0:32 v2.24.0:31 v2.23.0:31 v2.20.0:32 v2.25.0:30 v2.26.0:30 v2.27.0:30 v2.32.0:29 v2.31.0:30 v2.29.0:31 v2.28.0:29 v2.30.0:31 2. $ parallel "printf "%s: " {} && git grep -l '\busage_with_options\(' {} -- 'builtin*.c' | wc -l" ::: v1.{1..9}.0 v2.{0..32}.0 v1.1.0:0 v1.2.0:0 v1.3.0:0 v1.4.0:0 v1.5.0:0 v1.6.0:19 v1.7.0:33 v1.8.0:42 v2.0.0:42 v1.9.0:42 v2.1.0:43 v2.2.0:43 v2.3.0:43 v2.4.0:43 v2.5.0:44 v2.6.0:45 v2.8.0:44 v2.10.0:45 v2.7.0:44 v2.9.0:45 v2.11.0:45 v2.12.0:45 v2.13.0:46 v2.14.0:47 v2.15.0:47 v2.16.0:47 v2.17.0:47 v2.19.0:50 v2.18.0:49 v2.20.0:52 v2.21.0:52 v2.22.0:53 v2.24.0:54 v2.23.0:54 v2.25.0:56 v2.26.0:55 v2.27.0:55 v2.28.0:55 v2.30.0:58 v2.32.0:60 v2.29.0:58 v2.31.0:58