git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "René Scharfe" <l.s.r@web.de>
To: Junio C Hamano <gitster@pobox.com>
Cc: Git List <git@vger.kernel.org>
Subject: Re: [PATCH] ls-tree: fix --no-full-name
Date: Fri, 21 Jul 2023 14:41:35 +0200	[thread overview]
Message-ID: <a6326aaa-4f05-4d00-8906-2f50ea8e1e7a@web.de> (raw)
In-Reply-To: <xmqqo7k9fa5x.fsf@gitster.g>

Am 18.07.23 um 18:37 schrieb Junio C Hamano:
> René Scharfe <l.s.r@web.de> writes:
>
> I wonder if there are cases where it makes sense to allow the
> "--no-" variant to an option parsed with OPT_SET_INT() that sets '0'
> as the value?

I doubt it.

> Some random findings while reading hits from "git grep OPT_SET_INT":

Woah, so many!

>  * "git branch --list --no-all" is accepted, sets filter.kind to 0,
>    and triggers "fatal: filter_refs: invalid type".  Shouldn't we
>    detect error much earlier?

Yes.  And "git branch --no-copy" etc. are funny as well.

>  * "git bundle create --no-quiet" is accepted and sets the progress
>    variable to 0, just like "--quiet" does, which is the same issue
>    as the one fixed by your patch.

The same in pack-objects.  It's a bit trickier because of the presence
of a third state (--quiet, --progress and --all-progress).  The help
text changes of 8b95521edb (bundle: turn on --all-progress-implied by
default, 2023-03-04) state that only two states remain in git bundle
(--quiet and --all-progress), but that's not fully true because the
option --all-progress-implied is still wired up.  "git bundle
--no-all-progress-implied --progress" still gives git pack-objects a
lone --progress.

>  * "git clone (--no-ipv4|--no-ipv6)" are accepted and uses
>    TRANSPORT_FAMILY_ALL, presumably allowing both v4 and v6.
>    Shouldn't we reject these?  "fetch" and "push" share the same
>    issue.

Either that, or we could turn them into OPT_BITs and let --no-ipv6
mean "give me anything but IPv6", which currently happens to be
the same as --ipv4..

>  * "git remote add" has an OPT_SET_INT() entry whose short and long
>    forms are (0, NULL).  What is this supposed to do?  Shouldn't
>    parse-options.c:parse_options_check() notice it as an error?

It extends the help text of the previous option.  Horrible.

>  * "git stash push --no-all" is the same as "--no-include-untracked",
>    which smells iffy but probably is OK.

Hard to imagine a situation where a --no-all would be well-defined
and intuitive.

Overall I get the impression that having the negative form enabled by
default was not a good idea.  For boolean options it makes sense, for
options with arguments perhaps as well, but for OPT_SET_INT we would
have less confusion if the negated form was opt-in.

To make it easier discoverable we could let the short help include
the optional "no-" part, which would look like this:

usage: git ls-tree [<options>] <tree-ish> [<path>...]

    -d                    only show trees
    -r                    recurse into subtrees
    -t                    show trees when recursing
    -z                    terminate entries with NUL byte
    -l, --long            include object size
    --name-only           list only filenames
    --name-status         list only filenames
    --object-only         list only objects
    --[no-]full-name      use full path names
    --[no-]full-tree      list entire tree; not just current directory (implies --full-name)
    --format <format>     format to use for the output
    --[no-]abbrev[=<n>]   use <n> digits to display object names

Thoughts?

René

  parent reply	other threads:[~2023-07-21 12:41 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-18 15:44 [PATCH] ls-tree: fix --no-full-name René Scharfe
2023-07-18 16:37 ` Junio C Hamano
2023-07-18 20:49   ` Junio C Hamano
2023-07-21 12:41     ` René Scharfe
2023-07-21 12:41   ` René Scharfe [this message]
2023-07-21 14:37     ` Junio C Hamano
2023-07-21 19:29       ` René Scharfe
2023-07-21 20:09         ` Junio C Hamano
2023-07-21 20:14           ` Junio C Hamano
2023-07-24 12:29           ` René Scharfe
2023-07-24 18:51             ` Junio C Hamano
2023-07-24 20:09               ` René Scharfe
2023-07-24 20:50                 ` Junio C Hamano
2023-07-28  6:12                   ` René Scharfe
2023-07-28  9:45                     ` Phillip Wood
2023-07-29 20:40                       ` René Scharfe
2023-07-31 15:31                         ` Junio C Hamano
2023-08-04 16:40                           ` Junio C Hamano
2023-08-04 19:48                             ` Phillip Wood
2023-08-05 10:40                               ` René Scharfe
2023-07-24 12:29           ` [PATCH v2 0/5] show negatability of options in short help René Scharfe
2023-07-24 12:34             ` [PATCH v2 1/5] subtree: disallow --no-{help,quiet,debug,branch,message} René Scharfe
2023-07-24 12:36             ` [PATCH v2 2/5] t1502, docs: disallow --no-help René Scharfe
2023-07-24 12:38             ` [PATCH v2 3/5] t1502: move optionspec help output to a file René Scharfe
2023-07-24 12:39             ` [PATCH v2 4/5] t1502: test option negation René Scharfe
2023-07-24 12:40             ` [PATCH v2 5/5] parse-options: show negatability of options in short help René Scharfe
2023-08-05 14:33           ` [PATCH v3 0/8] " René Scharfe
2023-08-05 14:37             ` [PATCH v3 1/8] subtree: disallow --no-{help,quiet,debug,branch,message} René Scharfe
2023-08-05 14:37             ` [PATCH v3 2/8] t1502, docs: disallow --no-help René Scharfe
2023-08-05 14:38             ` [PATCH v3 3/8] t1502: move optionspec help output to a file René Scharfe
2023-08-05 14:39             ` [PATCH v3 4/8] t1502: test option negation René Scharfe
2023-08-05 14:40             ` [PATCH v3 5/8] parse-options: show negatability of options in short help René Scharfe
2023-08-05 14:43             ` [PATCH v3 6/8] parse-options: factor out usage_indent() and usage_padding() René Scharfe
2023-08-05 14:44             ` [PATCH v3 7/8] parse-options: no --[no-]no- René Scharfe
2023-08-05 14:52             ` [PATCH v3 8/8] parse-options: simplify usage_padding() René Scharfe
2023-08-05 23:04               ` Junio C Hamano
2023-07-21 12:41   ` [PATCH] show-branch: fix --no-sparse René Scharfe
2023-07-21 14:42     ` Junio C Hamano
2023-07-21 16:30       ` René Scharfe
2023-07-21 12:41   ` [PATCH] show-branch: disallow --no-{date,topo}-order René Scharfe
2023-07-21 12:41   ` [PATCH] reset: disallow --no-{mixed,soft,hard,merge,keep} René Scharfe
2023-07-21 12:41   ` [PATCH] pack-objects: fix --no-quiet René Scharfe
2023-07-21 12:41   ` [PATCH] pack-objects: fix --no-keep-true-parents René Scharfe
2023-07-21 17:03     ` Junio C Hamano
2023-07-21 12:42   ` [PATCH] branch: disallow --no-{all,remotes} René Scharfe
2023-07-21 12:42   ` [PATCH] am: unify definition of --keep-cr and --no-keep-cr René Scharfe
2023-07-21 13:41   ` [PATCH] describe: fix --no-exact-match René Scharfe
2023-07-21 14:10     ` Junio C Hamano
2023-07-21 17:00     ` Junio C Hamano
2023-08-08 21:27     ` Jeff King
2023-08-08 21:28       ` Jeff King
2023-08-09  1:43       ` Junio C Hamano
2023-08-09 14:09         ` Jeff King
2023-08-09 16:41           ` René Scharfe
2023-08-09 19:07             ` Junio C Hamano
2023-08-10  0:26               ` Jeff King
2023-08-10  1:00                 ` Junio C Hamano
2023-08-10 19:45                   ` René Scharfe
2023-08-10  0:41             ` Jeff King
2023-08-10 19:10               ` René Scharfe
2023-08-11 15:11                 ` Jeff King
2023-08-11 17:59                   ` René Scharfe
2023-08-11 18:24                     ` Jeff King
2023-08-12  5:11                       ` René Scharfe
2023-08-11 15:13                 ` Jeff King
2023-08-11 17:59                   ` René Scharfe

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=a6326aaa-4f05-4d00-8906-2f50ea8e1e7a@web.de \
    --to=l.s.r@web.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.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).