struct argv_array sent_argv = ARGV_ARRAY_INIT;
        const char *arg_cmd = "argument ";
 
-       if (argc != 2)
+       if (argc != 2 || !strcmp(argv[1], "-h"))
                usage(upload_archive_usage);
 
        if (!enter_repo(argv[1], 0))
        }
 
        /* parse all options sent by the client */
-       return write_archive(sent_argv.argc, sent_argv.argv, prefix, 0, NULL, 1);
+       return write_archive(sent_argv.argc, sent_argv.argv, prefix,
+                            the_repository, NULL, 1);
 }
 
 __attribute__((format (printf, 1, 2)))
 {
        struct child_process writer = { argv };
 
+       if (argc == 2 && !strcmp(argv[1], "-h"))
+               usage(upload_archive_usage);
+
        /*
         * Set up sideband subprocess.
         *
        writer.git_cmd = 1;
        if (start_command(&writer)) {
                int err = errno;
-               packet_write(1, "NACK unable to spawn subprocess\n");
+               packet_write_fmt(1, "NACK unable to spawn subprocess\n");
                die("upload-archive: %s", strerror(err));
        }
 
-       packet_write(1, "ACK\n");
+       packet_write_fmt(1, "ACK\n");
        packet_flush(1);
 
        while (1) {