These commands need more than just git_config() before parsing commmand line arguments. Some of these activities will unconditionally look into a repository. When startup_info->help is TRUE, no repository is set up and the caller expects callees to print help usage and exit, no more. Do as expected. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> --- 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 ++++--- 8 files changed, 28 insertions(+), 3 deletions(-) diff --git a/builtin/branch.c b/builtin/branch.c index 6cf7e72..cc0053b 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -651,6 +651,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 c5ab683..bccbbef 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -1034,6 +1034,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; @@ -1208,6 +1211,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..f040171 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -191,6 +191,9 @@ int cmd_gc(int argc, const char **argv, const char *prefix) git_config(gc_config, NULL); + if (startup_info->help) + usage_with_options(builtin_gc_usage, builtin_gc_options); + if (pack_refs < 0) pack_refs = !is_bare_repository(); diff --git a/builtin/ls-files.c b/builtin/ls-files.c index b065061..5125560 100644 --- a/builtin/ls-files.c +++ b/builtin/ls-files.c @@ -518,6 +518,9 @@ int cmd_ls_files(int argc, const char **argv, const char *prefix) OPT_END() }; + if (startup_info->help) + usage_with_options(ls_files_usage, builtin_ls_files_options); + memset(&dir, 0, sizeof(dir)); if (prefix) prefix_offset = strlen(prefix); diff --git a/builtin/merge.c b/builtin/merge.c index c043066..3cced9e 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -886,6 +886,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. * -- 1.7.0.rc1.541.g2da82.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html