[PATCH v2 4/4] builtins: check for startup_info->help, print and exit early
From: Nguyễn Thái Ngọc Duy <hidden>
Date: 2016-06-15 22:49:49
Subsystem:
the rest · Maintainer:
Linus Torvalds
By ensuring no access to repo is done in "git foo -h" case, the commands have better chance of really printing out help usage. Access to repo is not necessary and may terminate program if it finds something wrong. Signed-off-by: Nguyễn Thái Ngọc Duy <redacted> --- builtin/branch.c | 3 +++ builtin/checkout-index.c | 3 +++ builtin/commit.c | 6 ++++++ builtin/gc.c | 3 +++ builtin/ls-files.c | 3 +++ builtin/merge.c | 3 +++ builtin/update-index.c | 3 +++ builtin/upload-archive.c | 7 ++++--- t/t3905-help.sh | 16 ++++++++-------- 9 files changed, 36 insertions(+), 11 deletions(-)
diff --git a/builtin/branch.c b/builtin/branch.c
index 87976f0..9f152ed 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c@@ -667,6 +667,9 @@ int cmd_branch(int argc, const char **argv, const char *prefix) OPT_END(), }; + if (startup_info->help) + usage_with_options(builtin_branch_usage, options); + git_config(git_branch_config, NULL); if (branch_use_color == -1)
diff --git a/builtin/checkout-index.c b/builtin/checkout-index.c
index a7a5ee1..7f25cd7 100644
--- a/builtin/checkout-index.c
+++ b/builtin/checkout-index.c@@ -241,6 +241,9 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix) OPT_END() }; + if (startup_info->help) + usage_with_options(builtin_checkout_index_usage, builtin_checkout_index_options); + git_config(git_default_config, NULL); state.base_dir = ""; prefix_length = prefix ? strlen(prefix) : 0;
diff --git a/builtin/commit.c b/builtin/commit.c
index 66fdd22..8b086f2 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c@@ -1070,6 +1070,9 @@ int cmd_status(int argc, const char **argv, const char *prefix) OPT_END(), }; + if (startup_info->help) + usage_with_options(builtin_status_usage, builtin_status_options); + if (null_termination && status_format == STATUS_FORMAT_LONG) status_format = STATUS_FORMAT_PORCELAIN;
@@ -1255,6 +1258,9 @@ int cmd_commit(int argc, const char **argv, const char *prefix) int allow_fast_forward = 1; struct wt_status s; + if (startup_info->help) + usage_with_options(builtin_commit_usage, builtin_commit_options); + wt_status_prepare(&s); git_config(git_commit_config, &s); in_merge = file_exists(git_path("MERGE_HEAD"));
diff --git a/builtin/gc.c b/builtin/gc.c
index c304638..5a9d0da 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c@@ -189,6 +189,9 @@ int cmd_gc(int argc, const char **argv, const char *prefix) OPT_END() }; + if (startup_info->help) + usage_with_options(builtin_gc_usage, builtin_gc_options); + git_config(gc_config, NULL); if (pack_refs < 0)
diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index bb4f612..814da51 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c@@ -530,6 +530,9 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix) OPT_END() }; + if (startup_info->help) + usage_with_options(ls_files_usage, builtin_ls_files_options); + memset(&dir, 0, sizeof(dir)); prefix = cmd_prefix; if (prefix)
diff --git a/builtin/merge.c b/builtin/merge.c
index 2dba3b9..0169694 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c@@ -917,6 +917,9 @@ int cmd_merge(int argc, const char **argv, const char *prefix) const char *best_strategy = NULL, *wt_strategy = NULL; struct commit_list **remotes = &remoteheads; + if (startup_info->help) + usage_with_options(builtin_merge_usage, builtin_merge_options); + if (read_cache_unmerged()) { die_resolve_conflict("merge"); }
diff --git a/builtin/update-index.c b/builtin/update-index.c
index 3ab214d..46a53f5 100644
--- a/builtin/update-index.c
+++ b/builtin/update-index.c@@ -589,6 +589,9 @@ int cmd_update_index(int argc, const char **argv, const char *prefix) int lock_error = 0; struct lock_file *lock_file; + if (startup_info->help) + usage(update_index_usage); + git_config(git_default_config, NULL); /* We can't free this memory, it becomes part of a linked list parsed atexit() */
diff --git a/builtin/upload-archive.c b/builtin/upload-archive.c
index 73f788e..d4f4741 100644
--- a/builtin/upload-archive.c
+++ b/builtin/upload-archive.c@@ -26,9 +26,6 @@ static int run_upload_archive(int argc, const char **argv, const char *prefix) int sent_argc; int len; - if (argc != 2) - usage(upload_archive_usage); - if (strlen(argv[1]) + 1 > sizeof(buf)) die("insanely long repository name");
@@ -98,6 +95,10 @@ int cmd_upload_archive(int argc, const char **argv, const char *prefix) { pid_t writer; int fd1[2], fd2[2]; + + if (startup_info->help || argc != 2) + usage(upload_archive_usage); + /* * Set up sideband subprocess. *
diff --git a/t/t3905-help.sh b/t/t3905-help.sh
index 0dcbedf..6cab6b9 100755
--- a/t/t3905-help.sh
+++ b/t/t3905-help.sh@@ -12,13 +12,13 @@ test_help() { " } -test_help failure branch -test_help failure checkout-index -test_help failure commit -test_help failure gc -test_help failure ls-files -test_help failure merge -test_help failure update-index -test_help failure upload-archive +test_help success branch +test_help success checkout-index +test_help success commit +test_help success gc +test_help success ls-files +test_help success merge +test_help success update-index +test_help success upload-archive test_done
--
1.7.0.2.445.gcbdb3