Fix an "implicit function definition" warning.
[gitweb.git] / send-pack.c
index eaa6efbc0c844de78510d3c65a3bd6a83d9cdcef..33e69dbe1803a8667f383c1f0517867c873dafc4 100644 (file)
@@ -6,9 +6,9 @@
 #include "exec_cmd.h"
 
 static const char send_pack_usage[] =
-"git-send-pack [--all] [--exec=git-receive-pack] <remote> [<head>...]\n"
-"  --all and explicit <head> specification are mutually exclusive.";
-static const char *exec = "git-receive-pack";
+"git-send-pack [--all] [--force] [--receive-pack=<git-receive-pack>] [--verbose] [--thin] [<host>:]<directory> [<ref>...]\n"
+"  --all and explicit <ref> specification are mutually exclusive.";
+static const char *receivepack = "git-receive-pack";
 static int verbose;
 static int send_all;
 static int force_update;
@@ -25,6 +25,8 @@ static int pack_objects(int fd, struct ref *refs)
        if (pipe(pipe_fd) < 0)
                return error("send-pack: pipe failed");
        pid = fork();
+       if (pid < 0)
+               return error("send-pack: unable to fork git-pack-objects");
        if (!pid) {
                /*
                 * The child becomes pack-objects --revs; we feed
@@ -65,12 +67,16 @@ static int pack_objects(int fd, struct ref *refs)
                        memcpy(buf + 1, sha1_to_hex(refs->old_sha1), 40);
                        buf[0] = '^';
                        buf[41] = '\n';
-                       write(pipe_fd[1], buf, 42);
+                       if (!write_or_whine(pipe_fd[1], buf, 42,
+                                               "send-pack: send refs"))
+                               break;
                }
                if (!is_null_sha1(refs->new_sha1)) {
                        memcpy(buf, sha1_to_hex(refs->new_sha1), 40);
                        buf[40] = '\n';
-                       write(pipe_fd[1], buf, 41);
+                       if (!write_or_whine(pipe_fd[1], buf, 41,
+                                               "send-pack: send refs"))
+                               break;
                }
                refs = refs->next;
        }
@@ -373,8 +379,12 @@ int main(int argc, char **argv)
                char *arg = *argv;
 
                if (*arg == '-') {
+                       if (!strncmp(arg, "--receive-pack=", 15)) {
+                               receivepack = arg + 15;
+                               continue;
+                       }
                        if (!strncmp(arg, "--exec=", 7)) {
-                               exec = arg + 7;
+                               receivepack = arg + 7;
                                continue;
                        }
                        if (!strcmp(arg, "--all")) {
@@ -409,7 +419,7 @@ int main(int argc, char **argv)
                usage(send_pack_usage);
        verify_remote_names(nr_heads, heads);
 
-       pid = git_connect(fd, dest, exec);
+       pid = git_connect(fd, dest, receivepack);
        if (pid < 0)
                return 1;
        ret = send_pack(fd[0], fd[1], nr_heads, heads);