X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=clone-pack.c;h=2aa522089e94f9c2e3b8887efb769f654a34ebde;hb=87a81c834bf48f8cbf8778cae78ed553f3bbd32c;hp=0337ceccc4153b19dcffdee8c03c373b972fc6a8;hpb=b43d44779bf98977b211256f936d0edda8a9625a;p=git.git diff --git a/clone-pack.c b/clone-pack.c index 0337cecc..2aa52208 100644 --- a/clone-pack.c +++ b/clone-pack.c @@ -3,7 +3,8 @@ #include "pkt-line.h" #include -static const char clone_pack_usage[] = "git-clone-pack [host:]directory [heads]*"; +static int quiet; +static const char clone_pack_usage[] = "git-clone-pack [-q] [--exec=] [:] []*"; static const char *exec = "git-upload-pack"; struct ref { @@ -12,7 +13,7 @@ struct ref { char name[0]; }; -struct ref *get_remote_refs(int fd, int nr_match, char **match) +static struct ref *get_remote_refs(int fd, int nr_match, char **match) { struct ref *ref_list = NULL, **next_ref = &ref_list; @@ -29,7 +30,7 @@ struct ref *get_remote_refs(int fd, int nr_match, char **match) if (line[len-1] == '\n') line[--len] = 0; if (len < 42 || get_sha1_hex(line, sha1)) - die("git-fetch-pack: protocol error - expected ref descriptor, got '%s¤'", line); + die("git-clone-pack: protocol error - expected ref descriptor, got '%s'", line); refname = line+41; len = len-40; if (nr_match && !path_match(refname, nr_match, match)) @@ -68,9 +69,12 @@ static int is_master(struct ref *ref) static void write_one_ref(struct ref *ref) { char *path = git_path(ref->name); - int fd = open(path, O_CREAT | O_EXCL | O_WRONLY, 0666); + int fd; char *hex; + if (safe_create_leading_directories(path)) + die("unable to create leading directory for %s", ref->name); + fd = open(path, O_CREAT | O_EXCL | O_WRONLY, 0666); if (fd < 0) die("unable to create ref %s", ref->name); hex = sha1_to_hex(ref->sha1); @@ -148,10 +152,11 @@ static int clone_pack(int fd[2], int nr_match, char **match) if (pid < 0) die("git-clone-pack: unable to fork off git-unpack-objects"); if (!pid) { - close(fd[1]); dup2(fd[0], 0); close(fd[0]); - execlp("git-unpack-objects", "git-unpack-objects", NULL); + close(fd[1]); + execlp("git-unpack-objects", "git-unpack-objects", + quiet ? "-q" : NULL, NULL); die("git-unpack-objects exec failed"); } close(fd[0]); @@ -187,7 +192,14 @@ int main(int argc, char **argv) char *arg = argv[i]; if (*arg == '-') { - /* Arguments go here */ + if (!strcmp("-q", arg)) { + quiet = 1; + continue; + } + if (!strncmp("--exec=", arg, 7)) { + exec = arg + 7; + continue; + } usage(clone_pack_usage); } dest = arg;