write-tree: check extra arguments and die but be a bit more helpful.
[git.git] / hash-object.c
index c8c9adb..6227936 100644 (file)
@@ -29,17 +29,41 @@ int main(int argc, char **argv)
        int i;
        const char *type = "blob";
        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)
+               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;
+                       }
+                       else if (!strcmp(argv[i], "--")) {
+                               no_more_flags = 1;
+                       }
+                       else if (!strcmp(argv[i], "--help"))
+                               usage(hash_object_usage);
+                       else
                                die(hash_object_usage);
-                       type = argv[i];
                }
-               else if (!strcmp(argv[i], "-w"))
-                       write_object = 1;
-               else
-                       hash_object(argv[i], type, write_object);
+               else {
+                       const char *arg = argv[i];
+                       if (0 <= prefix_length)
+                               arg = prefix_filename(prefix, prefix_length,
+                                                     arg);
+                       hash_object(arg, type, write_object);
+                       no_more_flags = 1;
+               }
        }
        return 0;
 }