hash-object: work within subdirectory.

When -w is given, it needs to find out where the .git directory
is, so run the setup_git_directory() when we see a -w.

Signed-off-by: Junio C Hamano <junkio@cox.net>
diff --git a/hash-object.c b/hash-object.c
index c8c9adb..c3d05a8 100644
--- a/hash-object.c
+++ b/hash-object.c
@@ -29,6 +29,8 @@
 	int i;
 	const char *type = "blob";
 	int write_object = 0;
+	const char *prefix;
+	int prefix_length = -1;
 
 	for (i = 1 ; i < argc; i++) {
 		if (!strcmp(argv[i], "-t")) {
@@ -36,10 +38,20 @@
 				die(hash_object_usage);
 			type = argv[i];
 		}
-		else if (!strcmp(argv[i], "-w"))
+		else if (!strcmp(argv[i], "-w")) {
+			if (prefix_length < 0) {
+				prefix = setup_git_directory();
+				prefix_length = prefix ? strlen(prefix) : 0;
+			}
 			write_object = 1;
-		else
-			hash_object(argv[i], type, write_object);
+		}
+		else {
+			char *arg = argv[i];
+			if (0 <= prefix_length)
+				arg = prefix_filename(prefix, prefix_length,
+						      arg);
+			hash_object(arg, type, write_object);
+		}
 	}
 	return 0;
 }