hash-object: -- and --help
authorJunio C Hamano <junkio@cox.net>
Tue, 6 Dec 2005 06:29:05 +0000 (22:29 -0800)
committerJunio C Hamano <junkio@cox.net>
Tue, 6 Dec 2005 06:29:05 +0000 (22:29 -0800)
It was cumbersome to feed hash-object the file '-t' (you could
have said "./-t", though).  Teach it '--' that terminates the
option list, like everybody else.  There is no way to extract
usage string from the command either, so teach it "--help" as
well.

Signed-off-by: Junio C Hamano <junkio@cox.net>
hash-object.c

index ccba11c..6227936 100644 (file)
@@ -31,19 +31,30 @@ int main(int argc, char **argv)
        int write_object = 0;
        const char *prefix = NULL;
        int prefix_length = -1;
+       int no_more_flags = 0;
 
        for (i = 1 ; i < argc; i++) {
-               if (!strcmp(argv[i], "-t")) {
-                       if (argc <= ++i)
-                               die(hash_object_usage);
-                       type = argv[i];
-               }
-               else if (!strcmp(argv[i], "-w")) {
-                       if (prefix_length < 0) {
-                               prefix = setup_git_directory();
-                               prefix_length = prefix ? strlen(prefix) : 0;
+               if (!no_more_flags && argv[i][0] == '-') {
+                       if (!strcmp(argv[i], "-t")) {
+                               if (argc <= ++i)
+                                       die(hash_object_usage);
+                               type = argv[i];
+                       }
+                       else if (!strcmp(argv[i], "-w")) {
+                               if (prefix_length < 0) {
+                                       prefix = setup_git_directory();
+                                       prefix_length =
+                                               prefix ? strlen(prefix) : 0;
+                               }
+                               write_object = 1;
                        }
-                       write_object = 1;
+                       else if (!strcmp(argv[i], "--")) {
+                               no_more_flags = 1;
+                       }
+                       else if (!strcmp(argv[i], "--help"))
+                               usage(hash_object_usage);
+                       else
+                               die(hash_object_usage);
                }
                else {
                        const char *arg = argv[i];
@@ -51,6 +62,7 @@ int main(int argc, char **argv)
                                arg = prefix_filename(prefix, prefix_length,
                                                      arg);
                        hash_object(arg, type, write_object);
+                       no_more_flags = 1;
                }
        }
        return 0;