@ -71,6 +71,7 @@ static int pack_objects(int fd, struct ref *refs)
@@ -71,6 +71,7 @@ static int pack_objects(int fd, struct ref *refs)
refs = refs->next;
}
close(po.in);
if (finish_command(&po))
return error("pack-objects died with strange error");
return 0;
@ -403,12 +404,15 @@ static int do_send_pack(int in, int out, struct remote *remote, const char *dest
@@ -403,12 +404,15 @@ static int do_send_pack(int in, int out, struct remote *remote, const char *dest
if (!remote_tail)
remote_tail = &remote_refs;
if (match_refs(local_refs, remote_refs, &remote_tail,
nr_refspec, refspec, flags))
nr_refspec, refspec, flags)) {
close(out);
return -1;
}
if (!remote_refs) {
fprintf(stderr, "No refs in common and none specified; doing nothing.\n"
"Perhaps you should specify a branch such as 'master'.\n");
close(out);
return 0;
}
@ -495,12 +499,11 @@ static int do_send_pack(int in, int out, struct remote *remote, const char *dest
@@ -495,12 +499,11 @@ static int do_send_pack(int in, int out, struct remote *remote, const char *dest
packet_flush(out);
if (new_refs && !args.dry_run) {
if (pack_objects(out, remote_refs) < 0) {
close(out);
if (pack_objects(out, remote_refs) < 0)
return -1;
}
}
close(out);
else
close(out);
if (expect_status_report)
ret = receive_status(in, remote_refs);
@ -648,7 +651,7 @@ int send_pack(struct send_pack_args *my_args,
@@ -648,7 +651,7 @@ int send_pack(struct send_pack_args *my_args,
conn = git_connect(fd, dest, args.receivepack, args.verbose ? CONNECT_VERBOSE : 0);
ret = do_send_pack(fd[0], fd[1], remote, dest, nr_heads, heads);
close(fd[0]);
close(fd[1]);
/* do_send_pack always closes fd[1] */
ret |= finish_connect(conn);
return !!ret;
}