hash-object: -- and --help

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>
diff --git a/hash-object.c b/hash-object.c
index ccba11c..6227936 100644
--- a/hash-object.c
+++ b/hash-object.c
@@ -31,19 +31,30 @@
 	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];
 			}
-			write_object = 1;
+			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);
 		}
 		else {
 			const char *arg = argv[i];
@@ -51,6 +62,7 @@
 				arg = prefix_filename(prefix, prefix_length,
 						      arg);
 			hash_object(arg, type, write_object);
+			no_more_flags = 1;
 		}
 	}
 	return 0;