Merge branch 'js/bundle-unbundle-fd-reuse-fix'
The code path used when "git fetch" fetches from a bundle file closed the same file descriptor twice, which sometimes broke things unexpectedly when the file descriptor was reused, which has been corrected. * js/bundle-unbundle-fd-reuse-fix: bundle: avoid closing file descriptor twice
This commit is contained in:
4
bundle.c
4
bundle.c
@ -607,8 +607,10 @@ int unbundle(struct repository *r, struct bundle_header *header,
|
|||||||
if (!opts)
|
if (!opts)
|
||||||
opts = &opts_fallback;
|
opts = &opts_fallback;
|
||||||
|
|
||||||
if (verify_bundle(r, header, opts->flags))
|
if (verify_bundle(r, header, opts->flags)) {
|
||||||
|
close(bundle_fd);
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
strvec_pushl(&ip.args, "index-pack", "--fix-thin", "--stdin", NULL);
|
strvec_pushl(&ip.args, "index-pack", "--fix-thin", "--stdin", NULL);
|
||||||
|
|
||||||
|
2
bundle.h
2
bundle.h
@ -62,6 +62,8 @@ struct unbundle_opts {
|
|||||||
*
|
*
|
||||||
* Before unbundling, this method will call verify_bundle() with 'flags'
|
* Before unbundling, this method will call verify_bundle() with 'flags'
|
||||||
* provided in 'opts'.
|
* provided in 'opts'.
|
||||||
|
*
|
||||||
|
* Note that the `bundle_fd` will be closed as part of the operation.
|
||||||
*/
|
*/
|
||||||
int unbundle(struct repository *r, struct bundle_header *header,
|
int unbundle(struct repository *r, struct bundle_header *header,
|
||||||
int bundle_fd, struct strvec *extra_index_pack_args,
|
int bundle_fd, struct strvec *extra_index_pack_args,
|
||||||
|
@ -207,6 +207,7 @@ static int fetch_refs_from_bundle(struct transport *transport,
|
|||||||
|
|
||||||
ret = unbundle(the_repository, &data->header, data->fd,
|
ret = unbundle(the_repository, &data->header, data->fd,
|
||||||
&extra_index_pack_args, &opts);
|
&extra_index_pack_args, &opts);
|
||||||
|
data->fd = -1; /* `unbundle()` closes the file descriptor */
|
||||||
transport->hash_algo = data->header.hash_algo;
|
transport->hash_algo = data->header.hash_algo;
|
||||||
|
|
||||||
strvec_clear(&extra_index_pack_args);
|
strvec_clear(&extra_index_pack_args);
|
||||||
|
Reference in New Issue
Block a user