From: "D. Ben Knoble" <ben.knoble+github@gmail.com>
To: git@vger.kernel.org
Cc: "D. Ben Knoble" <ben.knoble+github@gmail.com>,
Usman Akinyemi <usmanakinyemi202@gmail.com>,
Jeff King <peff@peff.net>, Junio C Hamano <gitster@pobox.com>
Subject: [PATCH v2 0/3] permit -h/--help-all in more scenarios
Date: Sat, 2 Aug 2025 21:26:01 -0400 [thread overview]
Message-ID: <20250803012613.54086-1-ben.knoble+github@gmail.com> (raw)
In-Reply-To: <20250726165320.4039-1-ben.knoble+github@gmail.com>
Changes from v1:
- tweak refactor commit message to indicate no behavior is changed;
- use #define'd constants instead of an enum for internal flags;
- drop controversial [4/4]
QQ: Is there a better way to add --cc's to format-patch than grabbing the right
folks off threads from lore.kernel.org/git? (I could also grab them out of my
mail client.) I assume this is where using tools like b4 starts to really shine?
To be clear: I mean CC's _in addition to_ the use of
sendemail.ccCmd = perl contrib/contacts/git-contacts
to keep folks that participated in prior rounds of discussion abreast of the
next version.
--------
Original
--------
This series depends on ua/t1517-short-help-tests with some fixes, which
show up in the first patch. Merge that branch to a new topic branch:
git switch -c topic v2.50.0 # or origin/master
git merge gitster/ua/t1517-short-help-tests
then apply this series.
This series enables --help-all outside of repository contexts, and
allows -h with other arguments (without breaking existing ls-remote/grep
usage).
It consists of preparatory steps (fixes for a dependency branch;
refactoring to make an internal helper's arguments clearer) followed by
the main commits.
v1: https://lore.kernel.org/git/20250726165320.4039-1-ben.knoble+github@gmail.com/
Published-as: https://github.com/benknoble/git/tree/help-all-tweaks
D. Ben Knoble (3):
t1517: fixup for ua/t1517-short-help-tests
parse-options: refactor flags for usage_with_options_internal
builtin: also setup gently for --help-all
builtin/merge-recursive.c | 3 ++-
git.c | 2 +-
parse-options.c | 30 +++++++++++++++++++++++-------
t/t1517-outside-repo.sh | 11 +++++++----
t/t5200-update-server-info.sh | 2 +-
usage.c | 3 ++-
6 files changed, 36 insertions(+), 15 deletions(-)
Diff-intervalle contre v1 :
1: 852a4547af ! 1: 7a3e0a601d t1517: fixup for ua/t1517-short-help-tests
@@ Commit message
- drop spurious message during test
- fix known breakages that actually work
+ - fix instaweb marker for known failure
- fix new t5200 test
@@ Notes
## t/t1517-outside-repo.sh ##
@@
+ case "$cmd" in
+ archimport | cvsexportcommit | cvsimport | cvsserver | daemon | \
difftool--helper | filter-branch | fsck-objects | get-tar-commit-id | \
- http-backend | http-fetch | http-push | init-db | instaweb.sh | \
+- http-backend | http-fetch | http-push | init-db | instaweb.sh | \
++ http-backend | http-fetch | http-push | init-db | \
merge-octopus | merge-one-file | merge-resolve | mergetool | \
- mktag | p4 | p4.py | pickaxe | quiltimport | remote-ftp | remote-ftps | \
- remote-http | remote-https | replay | request-pull | send-email | \
2: 56665594a8 ! 2: db74b1eff7 parse-options: name flags passed to usage_with_options_internal
@@ Metadata
Author: D. Ben Knoble <ben.knoble+github@gmail.com>
## Commit message ##
- parse-options: name flags passed to usage_with_options_internal
+ parse-options: refactor flags for usage_with_options_internal
When reading or editing calls to usage_with_options_internal, it is
difficult to tell what trailing "0, 0", "0, 1", "1, 0" arguments mean
(NB there is never a "1, 1" case).
- Give the flags readable names to improve call-sites.
+ Give the flags readable names to improve call-sites without changing any
+ behavior.
## parse-options.c ##
@@ parse-options.c: static void free_preprocessed_options(struct option *options)
free(options);
}
-+enum usage_style {
-+ style_normal = 0,
-+ style_full = 1,
-+};
-+
-+enum usage_output {
-+ to_out = 0,
-+ to_err = 1,
-+};
++#define USAGE_NORMAL 0
++#define USAGE_FULL 1
++#define USAGE_TO_STDOUT 0
++#define USAGE_TO_STDERR 1
+
static enum parse_opt_result usage_with_options_internal(struct parse_opt_ctx_t *,
const char * const *,
const struct option *,
- int, int);
-+ enum usage_style,
-+ enum usage_output);
++ int full_usage,
++ int usage_to_stderr);
enum parse_opt_result parse_options_step(struct parse_opt_ctx_t *ctx,
const struct option *options,
@@ parse-options.c: enum parse_opt_result parse_options_step(struct parse_opt_ctx_t
if (internal_help && !strcmp(arg + 2, "help-all"))
- return usage_with_options_internal(ctx, usagestr, options, 1, 0);
-+ return usage_with_options_internal(ctx, usagestr, options, style_full, to_out);
++ return usage_with_options_internal(ctx, usagestr, options,
++ USAGE_FULL, USAGE_TO_STDOUT);
if (internal_help && !strcmp(arg + 2, "help"))
goto show_usage;
switch (parse_long_opt(ctx, arg + 2, options)) {
@@ parse-options.c: enum parse_opt_result parse_options_step(struct parse_opt_ctx_t
show_usage:
- return usage_with_options_internal(ctx, usagestr, options, 0, 0);
-+ return usage_with_options_internal(ctx, usagestr, options, style_normal, to_out);
++ return usage_with_options_internal(ctx, usagestr, options,
++ USAGE_NORMAL, USAGE_TO_STDOUT);
}
int parse_options_end(struct parse_opt_ctx_t *ctx)
-@@ parse-options.c: static const struct option *find_option_by_long_name(const struct option *opts,
- static enum parse_opt_result usage_with_options_internal(struct parse_opt_ctx_t *ctx,
- const char * const *usagestr,
- const struct option *opts,
-- int full, int err)
-+ enum usage_style help_style,
-+ enum usage_output to_where)
- {
- const struct option *all_opts = opts;
-- FILE *outfile = err ? stderr : stdout;
-+ FILE *outfile = to_where == to_err ? stderr : stdout;
- int need_newline;
-
- const char *usage_prefix = _("usage: %s");
-@@ parse-options.c: static enum parse_opt_result usage_with_options_internal(struct parse_opt_ctx_t
- if (!usagestr)
- return PARSE_OPT_HELP;
-
-- if (!err && ctx && ctx->flags & PARSE_OPT_SHELL_EVAL)
-+ if (to_where != to_err && ctx && ctx->flags & PARSE_OPT_SHELL_EVAL)
- fprintf(outfile, "cat <<\\EOF\n");
-
- while (*usagestr) {
-@@ parse-options.c: static enum parse_opt_result usage_with_options_internal(struct parse_opt_ctx_t
- fprintf(outfile, "%s\n", _(opts->help));
- continue;
- }
-- if (!full && (opts->flags & PARSE_OPT_HIDDEN))
-+ if (help_style != style_full && (opts->flags & PARSE_OPT_HIDDEN))
- continue;
-
- if (need_newline) {
-@@ parse-options.c: static enum parse_opt_result usage_with_options_internal(struct parse_opt_ctx_t
- }
- fputc('\n', outfile);
-
-- if (!err && ctx && ctx->flags & PARSE_OPT_SHELL_EVAL)
-+ if (to_where != to_err && ctx && ctx->flags & PARSE_OPT_SHELL_EVAL)
- fputs("EOF\n", outfile);
-
- return PARSE_OPT_HELP;
@@ parse-options.c: static enum parse_opt_result usage_with_options_internal(struct parse_opt_ctx_t
void NORETURN usage_with_options(const char * const *usagestr,
const struct option *opts)
{
- usage_with_options_internal(NULL, usagestr, opts, 0, 1);
-+ usage_with_options_internal(NULL, usagestr, opts, style_normal, to_err);
++ usage_with_options_internal(NULL, usagestr, opts,
++ USAGE_NORMAL, USAGE_TO_STDERR);
exit(129);
}
@@ parse-options.c: void show_usage_with_options_if_asked(int ac, const char **av,
{
if (ac == 2 && !strcmp(av[1], "-h")) {
- usage_with_options_internal(NULL, usagestr, opts, 0, 0);
-+ usage_with_options_internal(NULL, usagestr, opts, style_normal, to_out);
++ usage_with_options_internal(NULL, usagestr, opts,
++ USAGE_NORMAL, USAGE_TO_STDOUT);
exit(129);
}
}
3: 352fe87c80 ! 3: cb4113f77d builtin: also setup gently for --help-all
@@ Commit message
The exception is merge-recursive, whose help block doesn't use newer
APIs.
+ Best-viewed-with: --ignore-space-change
+
## Notes ##
Some usage.c callers, like check-ref-format, probably deserve to be
@@ parse-options.c: void show_usage_with_options_if_asked(int ac, const char **av,
const struct option *opts)
{
- if (ac == 2 && !strcmp(av[1], "-h")) {
-- usage_with_options_internal(NULL, usagestr, opts, style_normal, to_out);
+- usage_with_options_internal(NULL, usagestr, opts,
+- USAGE_NORMAL, USAGE_TO_STDOUT);
- exit(129);
+ if (ac == 2) {
+ if (!strcmp(av[1], "-h")) {
-+ usage_with_options_internal(NULL, usagestr, opts, style_normal, to_out);
++ usage_with_options_internal(NULL, usagestr, opts,
++ USAGE_NORMAL, USAGE_TO_STDOUT);
+ exit(129);
+ } else if (!strcmp(av[1], "--help-all")) {
-+ usage_with_options_internal(NULL, usagestr, opts, style_full, to_out);
++ usage_with_options_internal(NULL, usagestr, opts,
++ USAGE_FULL, USAGE_TO_STDOUT);
+ exit(129);
+ }
}
4: 3099d83cdf < -: ---------- builtins: show help on "-h"/"--help-all" with more than 2 arguments left
base-commit: e4ef0485fd78fcb05866ea78df35796b904e4a8e
prerequisite-patch-id: ffce2dd036e61c8d36485a17321f858e454db874
prerequisite-patch-id: 52539022c824997adfc1be0bed8de6b1851d2187
--
2.48.1
next prev parent reply other threads:[~2025-08-03 1:26 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-26 16:53 [PATCH 0/4] permit -h/--help-all in more scenarios D. Ben Knoble
2025-07-26 16:53 ` [PATCH 1/4] t1517: fixup for ua/t1517-short-help-tests D. Ben Knoble
2025-07-26 21:57 ` Usman Akinyemi
2025-07-28 15:35 ` Junio C Hamano
2025-07-26 16:53 ` [PATCH 2/4] parse-options: name flags passed to usage_with_options_internal D. Ben Knoble
2025-07-28 15:26 ` Junio C Hamano
2025-07-28 18:19 ` Junio C Hamano
2025-07-30 22:05 ` D. Ben Knoble
2025-07-26 16:53 ` [PATCH 3/4] builtin: also setup gently for --help-all D. Ben Knoble
2025-07-28 15:33 ` Junio C Hamano
2025-07-30 22:00 ` D. Ben Knoble
2025-07-26 16:53 ` [PATCH 4/4] builtins: show help on "-h"/"--help-all" with more than 2 arguments left D. Ben Knoble
2025-07-27 0:28 ` Junio C Hamano
2025-07-30 21:55 ` D. Ben Knoble
2025-08-02 9:23 ` Jeff King
2025-08-02 16:10 ` D. Ben Knoble
2025-08-02 16:28 ` Jeff King
2025-08-02 17:05 ` D. Ben Knoble
2025-08-03 1:26 ` D. Ben Knoble [this message]
2025-08-03 16:10 ` [PATCH v3 0/3] permit -h/--help-all in more scenarios D. Ben Knoble
2025-08-04 4:53 ` Junio C Hamano
2025-08-05 1:28 ` D. Ben Knoble
2025-08-03 16:10 ` [PATCH v3 1/3] t1517: fixup for ua/t1517-short-help-tests D. Ben Knoble
2025-08-03 16:41 ` Junio C Hamano
2025-08-03 16:43 ` D. Ben Knoble
2025-08-03 16:10 ` [PATCH v3 2/3] parse-options: refactor flags for usage_with_options_internal D. Ben Knoble
2025-08-03 16:10 ` [PATCH v3 3/3] builtin: also setup gently for --help-all D. Ben Knoble
2025-08-03 1:26 ` [PATCH v2 1/3] t1517: fixup for ua/t1517-short-help-tests D. Ben Knoble
2025-08-03 1:26 ` [PATCH v2 2/3] parse-options: refactor flags for usage_with_options_internal D. Ben Knoble
2025-08-03 1:26 ` [PATCH v2 3/3] builtin: also setup gently for --help-all D. Ben Knoble
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=20250803012613.54086-1-ben.knoble+github@gmail.com \
--to=ben.knoble+github@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
--cc=usmanakinyemi202@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).