http-push already knows how to dump usage if it is given no options, but it interprets '-h' as the URL to a remote repository: $ git http-push -h error: Cannot access URL -h/, return code 6 Dump usage instead. Humans wanting to pass the URL -h/ to curl for some reason can use 'git http-push -h/' explicitly. Scripts expecting to access an HTTP repository at URL '-h' will break, though. Also delay finding a git directory until after option parsing, so "http-push -h" can be used outside any git repository. Cc: Tay Ray Chuan <rctay89@xxxxxxxxx> Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> --- Tay Ray Chuan wrote: > just curious, I'm wondering why isn't the check for "-h" done in the > argv loop later on? I see this being done already in the builtins > diff, log, ls-remote and update-index. Good question. :) (I was making sure "git http-push -h" would work without a git directory by putting the check for -h before setup_git_directory(). But nothing in the argv loop requires a git repository, so it is better and simpler to move the setup_git_directory() call to after the loop. Thanks for the catch.) > Also, unlike grep, -h <arg> is not an option we're looking out for, so > I'm not sure if we should allow the user to mix -h with a valid set of > arguments (which is what Johnathan's patch would allow). Makes sense. http-push.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/http-push.c b/http-push.c index 00e83dc..ad1a6c9 100644 --- a/http-push.c +++ b/http-push.c @@ -1792,8 +1792,6 @@ int main(int argc, char **argv) git_extract_argv0_path(argv[0]); - setup_git_directory(); - repo = xcalloc(sizeof(*repo), 1); argv++; @@ -1827,6 +1825,8 @@ int main(int argc, char **argv) force_delete = 1; continue; } + if (!strcmp(arg, "-h")) + usage(http_push_usage); } if (!repo->url) { char *path = strstr(arg, "//"); @@ -1854,6 +1854,8 @@ int main(int argc, char **argv) if (delete_branch && nr_refspec != 1) die("You must specify only one branch name when deleting a remote branch"); + setup_git_directory(); + memset(remote_dir_exists, -1, 256); /* -- 1.6.5.2 -- 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