diff options
Diffstat (limited to 'builtin-send-pack.c')
| -rw-r--r-- | builtin-send-pack.c | 15 | 
1 files changed, 9 insertions, 6 deletions
| diff --git a/builtin-send-pack.c b/builtin-send-pack.c index 8afb1d0bca..b0cfae83fc 100644 --- a/builtin-send-pack.c +++ b/builtin-send-pack.c @@ -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  	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  	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,  	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;  } | 
