git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Commands using -h as an option don't work consistently
@ 2024-05-29 22:03 Kevin Day
  2024-05-29 22:22 ` Junio C Hamano
  0 siblings, 1 reply; 97+ messages in thread
From: Kevin Day @ 2024-05-29 22:03 UTC (permalink / raw)
  To: git

Because of a bug in parse-options.c, any command that has a '-h' option will sometimes display the usage page instead of executing. For example, ls-remote has two options:

    -t, --[no-]tags       limit to tags
    -h, --[no-]heads      limit to heads

git ls-remote --heads  #works
git ls-remote --tags  #works
git ls-remote -t  #works
git ls-remote -t -h  #works
git ls-remote -h  #shows the help page

This is because of these lines in parse-options.c:

/* lone -h asks for help */
if (internal_help && ctx->total == 1 && !strcmp(arg + 1, "h"))
goto show_usage;

This is being executed before it looks to see if there actually is a -h option. So if a program has a -h option, and that's the ONLY parameter you pass, the usage page gets displayed incorrectly. This appears to affect ls-remote, show-ref (it's not documented, but show-ref accepts -h as an alias for --heads) and grep.

I fixed this by moving the lone -h check lower down, which fixed everything. Except now lots and lots of tests are failing because many of them assume you can always pass -h to get the usage page, and now you can't for some commands. I don't think this actually breaks grep because you need to pass at least one more option other than -h to use it, but tests for it are still failing after fixing this bug because it's now showing the man page instead of the expected short usage page because it's erroring out at a different place.

The specific tests that are failing are t1502-rev-parse-parseopt.sh, t0012-help.sh and t0450-txt-doc-vs-help.sh all of which are trying to use -h on commands that have repurposed it.

The options I see:

1) Fix -h handling and add ignores and fixes where possible to the failing tests and try to not use -h as an option for anything new.

2) Change -h to -H or something, but this breaks backwards compatibility

3) Fix it so that -h works if a command uses it, and additionally make a new global option -? or --usage or something that always shows the usage page and change tests to use that, while leaving -h sometimes showing usage and sometimes executing the option to preserve as much backward compatibility as possible.



I'm happy to do the work and submit it, but this is looking more like a policy decision than just a bug now.

-- Kevin


^ permalink raw reply	[flat|nested] 97+ messages in thread
* [RFC PATCH] docs: document upcoming breaking changes
@ 2024-05-07  8:27 Patrick Steinhardt
  2024-05-07 10:38 ` Johannes Schindelin
                   ` (9 more replies)
  0 siblings, 10 replies; 97+ messages in thread
From: Patrick Steinhardt @ 2024-05-07  8:27 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano

[-- Attachment #1: Type: text/plain, Size: 5441 bytes --]

Over time, Git has grown quite a lot. With this evolution, many ideas
that were sensible at the time they were introduced are not anymore and
are thus considered to be deprecated. And while some deprecations may be
noted in manpages, most of them are actually deprecated in the "hive
mind" of the Git community, only.

Introduce a new document that lists upcoming breaking changes to address
this issue. This document serves multiple purposes:

  - It is a way to facilitate discussion around proposed deprecations.

  - It allows users to learn about deprecations and speak up in case
    they have good reasons why a certain feature should not be
    deprecated.

  - It states intent and documents where the Git project wants to go.

The document is _not_ intended to cast every single discussion into
stone. It is supposed to be a living document that may change over time
when there are good reasons for it to change.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
---

Please note that this is explicitly marked as a request for comments.
The proposed list of changes is neither exhaustive, nor do I necessarily
think that every single item on that list is a good idea. The intent is
to spark discussions, so some of the ideas on the list are controversial
by design.

Further note that this is not a "Git 3.0 is around the corner"-style
document. I do not want to propose that a breaking Git 3.0 should be
released soonish, and neither do I have the authority to decide that. I
rather want us to document deprecations such that users, developers,
hosters and distros are well aware of upcoming deprecations and can
either speak up or prepare accordingly.

Also, while a minority of the proposed deprecations does have links to
mailing list threads, the majority doesn't. If we have good discussions
to link to I'd love to add those links. I hope that some of the items
will spark discussions that I can link to in v2.

Patrick

 Documentation/UpcomingBreakingChanges.md | 65 ++++++++++++++++++++++++
 1 file changed, 65 insertions(+)
 create mode 100644 Documentation/UpcomingBreakingChanges.md

diff --git a/Documentation/UpcomingBreakingChanges.md b/Documentation/UpcomingBreakingChanges.md
new file mode 100644
index 0000000000..94d77a8af1
--- /dev/null
+++ b/Documentation/UpcomingBreakingChanges.md
@@ -0,0 +1,65 @@
+# Upcoming breaking changes
+
+The intent of this document is to track upcoming deprecations for the next major
+Git release. It is supposed to be a living document where proposed changes and
+deprecations are up for discussion.
+
+## Git 3.0
+
+### Changes
+
+  - The default initial branch name will be changed from "master" to "main".
+
+    Cf. <pull.762.git.1605221038.gitgitgadget@gmail.com>,
+    <CAMP44s3BJ3dGsLJ-6yA-Po459=+m826KD9an4+P3qOY1vkbxZg@mail.gmail.com>.
+
+  - The default hash function for new repositories will be changed from "sha1"
+    to "sha256".
+
+  - The default ref backend for new repositories will be changed from "files" to
+    "reftable".
+
+### Removals
+
+ - git-config(1) has learned to use subcommands that replace implicit actions
+   (e.g. `git config foo.bar baz`) as well as the action flags (e.g. `git config
+   --unset-all`). The actions will be removed in favor of subcommands.
+   Prerequisite for this change is that the new subcommands have been out for at
+   least for two years to give script authors time to migrate.
+
+   Cf. <ZjiL7vu5kCVwpsLd@tanuki>.
+
+ - git-http-push(1) can be used to push objects to a remote repository via
+   HTTP/DAV. Support for write support via WebDAV is not in widespread use
+   nowadays anymore and will be removed together with the command.
+
+ - The dumb HTTP protocol can be used to serve repositories via a plain HTTP
+   server like Apache. The protocol has not seen any updates recently and is
+   neither compatible with alternative hash functions nor with alternative ref
+   backends. It will thus be removed.
+
+ - git-update-server-info(1) generates data required when serving data via the
+   dumb HTTP protocol. Given the removal of that protocol, it serves no purpose
+   anymore and will be removed together with the protocol. This includes the
+   "receive.updateServerInfo" and "repack.updateServerInfo" config keys and the
+   `git repack -n` flag.
+
+ - `$GIT_DIR/branches/` and `$GIT_DIR/remotes/` can be used to specify
+   shorthands for URLs for git-fetch(1), git-pull(1) and git-push(1). This
+   concept has long been replaced by remotes and will thus be removed.
+
+ - git-annotate(1) is an alias for git-blame(1) with the `-c` flag. It will
+   be removed in favor of git-blame(1).
+
+ - "gitweb" and git-instaweb(1) can be used to browse Git repositories via an
+   HTTP server. These scripts have been unmaintained for a significant amount of
+   time and will be removed.
+
+ - git-filter-branch(1) can be used to rewrite history of a repository. It is
+   very slow, hard to use and has many gotchas. It will thus be removed in favor
+   of [git-filter-repo](https://github.com/newren/git-filter-repo).
+
+ - githooks(5) can be installed by placing them into `$GIT_DIR/hooks/`. This has
+   been a source of multiple remote code execution vulnerabilities. The feature
+   will be removed in favor of `core.hooksDirectory` and the new config-based
+   hooks.
-- 
2.45.0


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply related	[flat|nested] 97+ messages in thread

end of thread, other threads:[~2024-06-14 22:48 UTC | newest]

Thread overview: 97+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-29 22:03 Commands using -h as an option don't work consistently Kevin Day
2024-05-29 22:22 ` Junio C Hamano
2024-05-29 22:40   ` Kevin Day
  -- strict thread matches above, loose matches on Subject: below --
2024-05-07  8:27 [RFC PATCH] docs: document upcoming breaking changes Patrick Steinhardt
2024-05-07 10:38 ` Johannes Schindelin
2024-05-08 13:55   ` Patrick Steinhardt
2024-05-07 22:02 ` Junio C Hamano
2024-05-08 13:54   ` Patrick Steinhardt
2024-05-08 14:58     ` Junio C Hamano
2024-05-08 15:59     ` Dragan Simic
2024-05-10 11:36       ` Patrick Steinhardt
2024-05-10 12:43         ` Dragan Simic
2024-05-08 13:15 ` Phillip Wood
2024-05-08 13:55   ` Patrick Steinhardt
2024-05-10  2:15 ` Justin Tobler
2024-05-10  4:47   ` Junio C Hamano
2024-05-14  6:50     ` Patrick Steinhardt
2024-05-14  6:16 ` [RFC PATCH v2] " Patrick Steinhardt
2024-05-14 10:48   ` Karthik Nayak
2024-05-14 11:22     ` Patrick Steinhardt
2024-05-14 15:45       ` Junio C Hamano
2024-05-14 12:32     ` Dragan Simic
2024-05-24 12:54 ` [PATCH v3] " Patrick Steinhardt
2024-05-24 17:27   ` Junio C Hamano
2024-05-30 12:04     ` Patrick Steinhardt
2024-05-30  3:23   ` Commands using -h as an option don't work consistently Junio C Hamano
2024-06-03 18:33     ` Junio C Hamano
2024-06-03 20:05       ` [PATCH 0/3] Branches are branches and not heads Junio C Hamano
2024-06-03 20:05         ` [PATCH 1/3] refs: call branches branches Junio C Hamano
2024-06-03 21:32           ` Eric Sunshine
2024-06-03 20:05         ` [PATCH 2/3] ls-remote: introduce --branches and deprecate --heads Junio C Hamano
2024-06-03 21:30           ` Rubén Justo
2024-06-03 21:42             ` Eric Sunshine
2024-06-03 21:48               ` Junio C Hamano
2024-06-03 20:05         ` [PATCH 3/3] show-ref: " Junio C Hamano
2024-06-03 21:32         ` [PATCH 0/3] Branches are branches and not heads Rubén Justo
2024-06-04  7:56           ` Patrick Steinhardt
2024-06-04 22:01         ` [PATCH v2 " Junio C Hamano
2024-06-04 22:01           ` [PATCH v2 1/3] refs: call branches branches Junio C Hamano
2024-06-04 22:01           ` [PATCH v2 2/3] ls-remote: introduce --branches and deprecate --heads Junio C Hamano
2024-06-06  9:39             ` Patrick Steinhardt
2024-06-06 15:18               ` Junio C Hamano
2024-06-04 22:01           ` [PATCH v2 3/3] show-ref: " Junio C Hamano
2024-06-14 19:32             ` Elijah Newren
2024-06-14 21:21               ` Junio C Hamano
2024-06-14 21:34                 ` Elijah Newren
2024-06-14 21:42                   ` Elijah Newren
2024-06-14 22:46                     ` Junio C Hamano
2024-06-06  9:39           ` [PATCH v2 0/3] Branches are branches and not heads Patrick Steinhardt
2024-05-31  7:56 ` [PATCH v4 0/4] docs: document upcoming breaking changes Patrick Steinhardt
2024-05-31  7:56   ` [PATCH v4 1/4] docs: introduce document to announce " Patrick Steinhardt
2024-05-31 16:51     ` Junio C Hamano
2024-06-03  9:32       ` Patrick Steinhardt
2024-06-03 16:17         ` Junio C Hamano
2024-06-04  7:42           ` Patrick Steinhardt
2024-05-31  7:56   ` [PATCH v4 2/4] BreakingChanges: document upcoming change from "sha1" to "sha256" Patrick Steinhardt
2024-05-31 17:00     ` Junio C Hamano
2024-05-31  7:56   ` [PATCH v4 3/4] BreakingChanges: document removal of grafting Patrick Steinhardt
2024-05-31  7:56   ` [PATCH v4 4/4] BreakingChanges: document that we do not plan to deprecate git-checkout Patrick Steinhardt
2024-05-31 17:05     ` Junio C Hamano
2024-05-31 23:35       ` Todd Zullinger
2024-05-31  8:43   ` [PATCH v4 0/4] docs: document upcoming breaking changes Junio C Hamano
2024-05-31 11:15     ` Patrick Steinhardt
2024-06-03  9:28 ` [PATCH v5 " Patrick Steinhardt
2024-06-03  9:28   ` [PATCH v5 1/4] docs: introduce document to announce " Patrick Steinhardt
2024-06-03 14:08     ` Phillip Wood
2024-06-03 16:24     ` Junio C Hamano
2024-06-04  6:59       ` Patrick Steinhardt
2024-06-03  9:28   ` [PATCH v5 2/4] BreakingChanges: document upcoming change from "sha1" to "sha256" Patrick Steinhardt
2024-06-03 16:36     ` Junio C Hamano
2024-06-04  7:06       ` Patrick Steinhardt
2024-06-04 17:16         ` Junio C Hamano
2024-06-03  9:28   ` [PATCH v5 3/4] BreakingChanges: document removal of grafting Patrick Steinhardt
2024-06-03 16:42     ` Junio C Hamano
2024-06-03  9:28   ` [PATCH v5 4/4] BreakingChanges: document that we do not plan to deprecate git-checkout Patrick Steinhardt
2024-06-03 16:52     ` Junio C Hamano
2024-06-04  7:11       ` Patrick Steinhardt
2024-06-04 12:32 ` [PATCH v6 0/4] docs: document upcoming breaking changes Patrick Steinhardt
2024-06-04 12:32   ` [PATCH v6 1/4] docs: introduce document to announce " Patrick Steinhardt
2024-06-04 17:59     ` Junio C Hamano
2024-06-05  5:31       ` Patrick Steinhardt
2024-06-05 16:03         ` Junio C Hamano
2024-06-05 17:52           ` Junio C Hamano
2024-06-06  4:35             ` Patrick Steinhardt
2024-06-04 12:32   ` [PATCH v6 2/4] BreakingChanges: document upcoming change from "sha1" to "sha256" Patrick Steinhardt
2024-06-04 12:32   ` [PATCH v6 3/4] BreakingChanges: document removal of grafting Patrick Steinhardt
2024-06-04 18:00     ` Junio C Hamano
2024-06-04 12:32   ` [PATCH v6 4/4] BreakingChanges: document that we do not plan to deprecate git-checkout Patrick Steinhardt
2024-06-04 14:23   ` [PATCH v6 0/4] docs: document upcoming breaking changes Phillip Wood
2024-06-04 18:01     ` Junio C Hamano
2024-06-05  5:32       ` Patrick Steinhardt
2024-06-14  6:42 ` [PATCH v7 " Patrick Steinhardt
2024-06-14  6:42   ` [PATCH v7 1/4] docs: introduce document to announce " Patrick Steinhardt
2024-06-14 16:08     ` Junio C Hamano
2024-06-14  6:42   ` [PATCH v7 2/4] BreakingChanges: document upcoming change from "sha1" to "sha256" Patrick Steinhardt
2024-06-14  6:42   ` [PATCH v7 3/4] BreakingChanges: document removal of grafting Patrick Steinhardt
2024-06-14  6:42   ` [PATCH v7 4/4] BreakingChanges: document that we do not plan to deprecate git-checkout Patrick Steinhardt

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).