mirror of
https://github.com/git-for-windows/git.git
synced 2026-04-08 03:24:24 -05:00
check_connected(): delay opening new_pack
In check_connected(), if the transport tells us we got a single packfile
that has already been verified as self-contained and connected, then we
can skip checking connectivity for any tips that are mentioned in that
pack. This goes back to c6807a40dc (clone: open a shortcut for
connectivity check, 2013-05-26).
We don't need to open that pack until we are about to start sending oids
to our child rev-list process, since that's when we check whether they
are in the self-contained pack. Let's push the opening of that pack
further down in the function. That saves us from having to clean it up
when we leave the function early (and by the time have opened the
rev-list process, we never leave the function early, since we have to
clean up the child process).
Signed-off-by: Jeff King <peff@peff.net>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
67ad42147a
commit
26b974b3a9
33
connected.c
33
connected.c
@@ -45,20 +45,6 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
|
||||
return err;
|
||||
}
|
||||
|
||||
if (transport && transport->smart_options &&
|
||||
transport->smart_options->self_contained_and_connected &&
|
||||
transport->pack_lockfiles.nr == 1 &&
|
||||
strip_suffix(transport->pack_lockfiles.items[0].string,
|
||||
".keep", &base_len)) {
|
||||
struct strbuf idx_file = STRBUF_INIT;
|
||||
strbuf_add(&idx_file, transport->pack_lockfiles.items[0].string,
|
||||
base_len);
|
||||
strbuf_addstr(&idx_file, ".idx");
|
||||
new_pack = add_packed_git(the_repository, idx_file.buf,
|
||||
idx_file.len, 1);
|
||||
strbuf_release(&idx_file);
|
||||
}
|
||||
|
||||
if (repo_has_promisor_remote(the_repository)) {
|
||||
/*
|
||||
* For partial clones, we don't want to have to do a regular
|
||||
@@ -90,7 +76,6 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
|
||||
promisor_pack_found:
|
||||
;
|
||||
} while ((oid = fn(cb_data)) != NULL);
|
||||
free(new_pack);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -127,15 +112,27 @@ no_promisor_pack_found:
|
||||
else
|
||||
rev_list.no_stderr = opt->quiet;
|
||||
|
||||
if (start_command(&rev_list)) {
|
||||
free(new_pack);
|
||||
if (start_command(&rev_list))
|
||||
return error(_("Could not run 'git rev-list'"));
|
||||
}
|
||||
|
||||
sigchain_push(SIGPIPE, SIG_IGN);
|
||||
|
||||
rev_list_in = xfdopen(rev_list.in, "w");
|
||||
|
||||
if (transport && transport->smart_options &&
|
||||
transport->smart_options->self_contained_and_connected &&
|
||||
transport->pack_lockfiles.nr == 1 &&
|
||||
strip_suffix(transport->pack_lockfiles.items[0].string,
|
||||
".keep", &base_len)) {
|
||||
struct strbuf idx_file = STRBUF_INIT;
|
||||
strbuf_add(&idx_file, transport->pack_lockfiles.items[0].string,
|
||||
base_len);
|
||||
strbuf_addstr(&idx_file, ".idx");
|
||||
new_pack = add_packed_git(the_repository, idx_file.buf,
|
||||
idx_file.len, 1);
|
||||
strbuf_release(&idx_file);
|
||||
}
|
||||
|
||||
do {
|
||||
/*
|
||||
* If index-pack already checked that:
|
||||
|
||||
Reference in New Issue
Block a user