git/builtin
brian m. carlson cdaf12f762 parse-options: exit 0 on -h
The standard philosophy for Unix software when a help option (such as
--help) is specified is that the software should exit 0, printing the
help output to standard output, since the standard output is for
user-requested output and the program performed the requested task
successfully.  If the user specifies an incorrect option, then the help
output should be printed to standard error (since the user has made a
mistake) and it should exit unsuccessfully.

Most of our commands currently exit 129 on receiving the -h option to
print the short help, which does not line up with the standard
philosophy above.  Let's change that to exit 0 instead.

This requires changes to a variety of tests which previously wanted the
129 exit code, so update them.  Note that because git diff does its own
option parsing, it still exits with 129, so update some of the tests to
expect either exit status.

Some commands also now pass with -h but not --help-all, so handle those
cases differently for those commands.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-07-07 17:48:57 -07:00
..
add.c odb: split `struct odb_transaction` into separate header 2026-05-15 04:44:39 +09:00
am.c hook: mark non-parallelizable hooks 2026-04-10 07:58:53 -07:00
annotate.c
apply.c
archive.c connect: use "service" enum for "name" argument 2026-05-19 15:05:46 +09:00
backfill.c path-walk: add pl_sparse_trees to control tree pruning 2026-05-24 18:41:06 +09:00
bisect.c Merge branch 'rs/strbuf-add-oid-hex' 2026-06-09 10:04:50 +09:00
blame.c parse-options: exit 0 on -h 2026-07-07 17:48:57 -07:00
branch.c object-name: turn INTERPRET_BRANCH_* constants into enum values 2026-03-18 12:52:29 -07:00
bugreport.c
bundle.c
cat-file.c Merge branch 'js/objects-larger-than-4gb-on-windows-more' 2026-06-21 16:41:38 -07:00
check-attr.c setup: stop using `the_repository` in `setup_work_tree()` 2026-05-19 19:36:24 +09:00
check-ignore.c
check-mailmap.c mailmap: stop using the_repository 2026-02-20 08:13:58 -08:00
check-ref-format.c setup: stop using `the_repository` in `setup_git_directory_gently()` 2026-05-19 19:36:24 +09:00
checkout--worker.c
checkout-index.c setup: stop using `the_repository` in `prefix_path()` 2026-05-19 19:36:24 +09:00
checkout.c Merge branch 'ds/restore-sparse-index' 2026-06-07 23:58:24 +09:00
clean.c
clone.c setup: stop using `the_repository` in `init_db()` 2026-05-19 19:36:25 +09:00
column.c
commit-graph.c
commit-tree.c
commit.c sequencer: teach autostash apply to take optional conflict marker labels 2026-04-29 21:46:03 +09:00
config.c config: improve diagnostic for "set" with missing value 2026-06-03 08:39:54 +09:00
count-objects.c
credential-cache--daemon.c
credential-cache.c
credential-store.c
credential.c
describe.c Merge branch 'td/describe-tag-iteration' 2026-06-17 11:10:11 -07:00
diagnose.c
diff-files.c
diff-index.c setup: stop using `the_repository` in `setup_work_tree()` 2026-05-19 19:36:24 +09:00
diff-pairs.c
diff-tree.c
diff.c setup: stop using `the_repository` in `setup_git_directory_gently()` 2026-05-19 19:36:24 +09:00
difftool.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
fast-export.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
fast-import.c Merge branch 'js/objects-larger-than-4gb-on-windows-more' 2026-06-21 16:41:38 -07:00
fetch-pack.c connect: use "service" enum for "name" argument 2026-05-19 15:05:46 +09:00
fetch.c Merge branch 'ua/push-remote-group' 2026-06-09 10:04:50 +09:00
fmt-merge-msg.c
for-each-ref.c
for-each-repo.c for-each-repo: simplify passing of parameters 2026-03-03 10:20:00 -08:00
fsck.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
fsmonitor--daemon.c fsmonitor: convert shown khash to strset in do_handle_client 2026-04-15 08:44:34 -07:00
gc.c odb/source-loose: wire up `count_objects()` callback 2026-06-01 18:47:18 +09:00
get-tar-commit-id.c
grep.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
hash-object.c setup: stop using `the_repository` in `setup_git_directory()` 2026-05-19 19:36:25 +09:00
help.c setup: stop using `the_repository` in `setup_git_directory_gently()` 2026-05-19 19:36:24 +09:00
history.c Merge branch 'kh/free-commit-list' 2026-06-07 23:58:24 +09:00
hook.c hook: allow hook.jobs=-1 to use all available CPU cores 2026-04-10 07:58:55 -07:00
index-pack.c Merge branch 'js/objects-larger-than-4gb-on-windows-more' 2026-06-21 16:41:38 -07:00
init-db.c setup: stop using `the_repository` in `init_db()` 2026-05-19 19:36:25 +09:00
interpret-trailers.c Merge branch 'kh/doc-interpret-trailers-1' 2026-03-27 11:00:02 -07:00
last-modified.c
log.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
ls-files.c Merge branch 'js/objects-larger-than-4gb-on-windows-more' 2026-06-21 16:41:38 -07:00
ls-remote.c
ls-tree.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
mailinfo.c
mailsplit.c
merge-base.c commit-reach: early exit paint_down_to_common for single merge-base 2026-05-12 09:33:43 +09:00
merge-file.c setup: stop using `the_repository` in `setup_git_directory()` 2026-05-19 19:36:25 +09:00
merge-index.c
merge-ours.c
merge-recursive.c
merge-tree.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
merge.c Merge branch 'kk/merge-octopus-optim' 2026-05-27 14:15:44 +09:00
mktag.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
mktree.c builtin/mktree: remove USE_THE_REPOSITORY_VARIABLE 2026-03-12 10:03:23 -07:00
multi-pack-index.c midx: support custom `--base` for incremental MIDX writes 2026-05-20 11:31:13 +09:00
mv.c Merge branch 'ob/more-repo-config-values' 2026-06-15 07:42:00 -07:00
name-rev.c Merge branch 'kh/name-rev-custom-format' 2026-05-19 09:57:44 +09:00
notes.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
pack-objects.c Merge branch 'js/objects-larger-than-4gb-on-windows-more' 2026-06-21 16:41:38 -07:00
pack-redundant.c pack-redundant: fix memory leak when open_pack_index() fails 2026-02-21 21:26:53 -08:00
pack-refs.c
patch-id.c
prune-packed.c
prune.c
pull.c fetch: add --negotiation-include option for negotiation 2026-05-20 11:33:24 +09:00
push.c push: support pushing to a remote group 2026-05-04 10:11:17 +09:00
range-diff.c
read-tree.c setup: stop using `the_repository` in `setup_work_tree()` 2026-05-19 19:36:24 +09:00
rebase.c use strvec_pushv() to add another strvec 2026-03-24 12:26:58 -07:00
receive-pack.c Merge branch 'ar/receive-pack-worktree-env' 2026-06-07 23:58:24 +09:00
reflog.c
refs.c fsck: store repository in fsck options 2026-03-23 08:33:10 -07:00
remote-ext.c
remote-fd.c
remote.c odb: rename `odb_has_object()` flags 2026-03-31 20:43:14 -07:00
repack.c repack: allow `--write-midx=incremental` without `--geometric` 2026-05-20 11:31:14 +09:00
replace.c hex: add and use strbuf_add_oid_hex() 2026-05-14 15:59:25 +09:00
replay.c replay: allow to specify a ref with option --ref 2026-04-01 21:34:25 -07:00
repo.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
rerere.c
reset.c setup: stop using `the_repository` in `setup_work_tree()` 2026-05-19 19:36:24 +09:00
rev-list.c rev-list: use reduce_heads() for --maximal-only 2026-04-06 12:02:30 -07:00
rev-parse.c Merge branch 'jr/bisect-custom-terms-in-output' 2026-05-31 10:00:37 +09:00
revert.c
rm.c setup: stop using `the_repository` in `setup_work_tree()` 2026-05-19 19:36:24 +09:00
send-pack.c connect: use "service" enum for "name" argument 2026-05-19 15:05:46 +09:00
shortlog.c parse-options: exit 0 on -h 2026-07-07 17:48:57 -07:00
show-branch.c
show-index.c
show-ref.c odb: rename `odb_has_object()` flags 2026-03-31 20:43:14 -07:00
sparse-checkout.c Merge branch 'ob/more-repo-config-values' 2026-06-15 07:42:00 -07:00
stash.c Merge branch 'aj/stash-patch-optimize-temporary-index' 2026-06-07 23:58:25 +09:00
stripspace.c setup: stop using `the_repository` in `setup_git_directory_gently()` 2026-05-19 19:36:24 +09:00
submodule--helper.c setup: stop using `the_repository` in `setup_work_tree()` 2026-05-19 19:36:24 +09:00
symbolic-ref.c
tag.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
unpack-file.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
unpack-objects.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
update-index.c parse-options: exit 0 on -h 2026-07-07 17:48:57 -07:00
update-ref.c update-ref: handle rejections while adding updates 2026-05-05 16:34:08 +09:00
update-server-info.c
upload-archive.c setup: stop using `the_repository` in `enter_repo()` 2026-05-19 19:36:24 +09:00
upload-pack.c setup: stop using `the_repository` in `enter_repo()` 2026-05-19 19:36:24 +09:00
url-parse.c builtin: create url-parse command 2026-05-06 09:48:28 +09:00
var.c
verify-commit.c
verify-pack.c
verify-tag.c
worktree.c hook: mark non-parallelizable hooks 2026-04-10 07:58:53 -07:00
write-tree.c