diff- and log- family: handle "git cmd -h" early

"git $builtin -h" bypasses the usual repository setup and calls the cmd_$builtin() function, expecting it to show the help text. Unfortunately the commands in the log- and the diff- family want to call into the revisions machinery, which by definition needs to have a repository already discovered. Strictly speaking, they may not need a repository only for parsing "-h", but it is a good discipline to future-proof codepath to ensure that setup_revisions() is called after we know that a repository is there. Handle the "git $builtin -h" special case very early in these commands to work around potential issues. Signed-off-by: Junio C Hamano <gitster@pobox.com>

Junio C Hamano committed Jun 1, 2017 at 13:38 UTC 5a88f97cff0f269f8b2069b17c9da05ee66c98bb
4 files changed +12
builtin/diff-files.c
+3
@@ -20,6 +20,9 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)
20 int result;
21 unsigned options = 0;
22
23 + if (argc == 2 && !strcmp(argv[1], "-h"))
24 + usage(diff_files_usage);
25 +
26 init_revisions(&rev, prefix);
27 gitmodules_config();
28 git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
builtin/diff-index.c
+3
@@ -17,6 +17,9 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix)
17 int i;
18 int result;
19
20 + if (argc == 2 && !strcmp(argv[1], "-h"))
21 + usage(diff_cache_usage);
22 +
23 init_revisions(&rev, prefix);
24 gitmodules_config();
25 git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
builtin/diff-tree.c
+3
@@ -105,6 +105,9 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)
105 struct setup_revision_opt s_r_opt;
106 int read_stdin = 0;
107
108 + if (argc == 2 && !strcmp(argv[1], "-h"))
109 + usage(diff_tree_usage);
110 +
111 init_revisions(opt, prefix);
112 gitmodules_config();
113 git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
builtin/rev-list.c
+3
@@ -277,6 +277,9 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
277 int use_bitmap_index = 0;
278 const char *show_progress = NULL;
279
280 + if (argc == 2 && !strcmp(argv[1], "-h"))
281 + usage(rev_list_usage);
282 +
283 git_config(git_default_config, NULL);
284 init_revisions(&revs, prefix);
285 revs.abbrev = DEFAULT_ABBREV;