test/send-email: --[no-]xmailer tests
[gitweb.git] / upload-pack.c
index a3c52f691da5e5ce95d70a9ed43cffd00f620ccd..433211a238cfee261e6e1f9e73d14df9178f004a 100644 (file)
@@ -17,7 +17,7 @@
 
 static const char upload_pack_usage[] = "git upload-pack [--strict] [--timeout=<n>] <dir>";
 
-/* bits #0..7 in revision.h, #8..10 in commit.c */
+/* Remember to update object flag allocation in object.h */
 #define THEY_HAVE      (1u << 11)
 #define OUR_REF                (1u << 12)
 #define WANTED         (1u << 13)
@@ -70,6 +70,14 @@ static ssize_t send_client_data(int fd, const char *data, ssize_t sz)
        return sz;
 }
 
+static int write_one_shallow(const struct commit_graft *graft, void *cb_data)
+{
+       FILE *fp = cb_data;
+       if (graft->nr_parent == -1)
+               fprintf(fp, "--shallow %s\n", sha1_to_hex(graft->sha1));
+       return 0;
+}
+
 static void create_pack_file(void)
 {
        struct child_process pack_objects;
@@ -81,12 +89,10 @@ static void create_pack_file(void)
        const char *argv[12];
        int i, arg = 0;
        FILE *pipe_fd;
-       const char *shallow_file = NULL;
 
        if (shallow_nr) {
-               shallow_file = setup_temporary_shallow(NULL);
                argv[arg++] = "--shallow-file";
-               argv[arg++] = shallow_file;
+               argv[arg++] = "";
        }
        argv[arg++] = "pack-objects";
        argv[arg++] = "--revs";
@@ -114,6 +120,9 @@ static void create_pack_file(void)
 
        pipe_fd = xfdopen(pack_objects.in, "w");
 
+       if (shallow_nr)
+               for_each_commit_graft(write_one_shallow, pipe_fd);
+
        for (i = 0; i < want_obj.nr; i++)
                fprintf(pipe_fd, "%s\n",
                        sha1_to_hex(want_obj.objects[i].item->sha1));
@@ -158,7 +167,9 @@ static void create_pack_file(void)
                if (!pollsize)
                        break;
 
-               ret = poll(pfd, pollsize, 1000 * keepalive);
+               ret = poll(pfd, pollsize,
+                       keepalive < 0 ? -1 : 1000 * keepalive);
+
                if (ret < 0) {
                        if (errno != EINTR) {
                                error("poll failed, resuming: %s",
@@ -791,7 +802,7 @@ int main(int argc, char **argv)
 
        packet_trace_identity("upload-pack");
        git_extract_argv0_path(argv[0]);
-       read_replace_refs = 0;
+       check_replace_refs = 0;
 
        for (i = 1; i < argc; i++) {
                char *arg = argv[i];