merge(3p/git): Merge git upstream at v2.26.2
This commit is contained in:
commit
5229c9b232
1006 changed files with 149006 additions and 60819 deletions
28
third_party/git/connected.c
vendored
28
third_party/git/connected.c
vendored
|
|
@ -5,6 +5,7 @@
|
|||
#include "connected.h"
|
||||
#include "transport.h"
|
||||
#include "packfile.h"
|
||||
#include "promisor-remote.h"
|
||||
|
||||
/*
|
||||
* If we feed all the commits we want to verify to this command
|
||||
|
|
@ -28,6 +29,7 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
|
|||
struct packed_git *new_pack = NULL;
|
||||
struct transport *transport;
|
||||
size_t base_len;
|
||||
const unsigned hexsz = the_hash_algo->hexsz;
|
||||
|
||||
if (!opt)
|
||||
opt = &defaults;
|
||||
|
|
@ -50,18 +52,28 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
|
|||
strbuf_release(&idx_file);
|
||||
}
|
||||
|
||||
if (opt->check_refs_only) {
|
||||
if (opt->check_refs_are_promisor_objects_only) {
|
||||
/*
|
||||
* For partial clones, we don't want to have to do a regular
|
||||
* connectivity check because we have to enumerate and exclude
|
||||
* all promisor objects (slow), and then the connectivity check
|
||||
* itself becomes a no-op because in a partial clone every
|
||||
* object is a promisor object. Instead, just make sure we
|
||||
* received the objects pointed to by each wanted ref.
|
||||
* received, in a promisor packfile, the objects pointed to by
|
||||
* each wanted ref.
|
||||
*/
|
||||
do {
|
||||
if (!repo_has_object_file(the_repository, &oid))
|
||||
return 1;
|
||||
struct packed_git *p;
|
||||
|
||||
for (p = get_all_packs(the_repository); p; p = p->next) {
|
||||
if (!p->pack_promisor)
|
||||
continue;
|
||||
if (find_pack_entry_one(oid.hash, p))
|
||||
goto promisor_pack_found;
|
||||
}
|
||||
return 1;
|
||||
promisor_pack_found:
|
||||
;
|
||||
} while (!fn(cb_data, &oid));
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -73,7 +85,7 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
|
|||
argv_array_push(&rev_list.args,"rev-list");
|
||||
argv_array_push(&rev_list.args, "--objects");
|
||||
argv_array_push(&rev_list.args, "--stdin");
|
||||
if (repository_format_partial_clone)
|
||||
if (has_promisor_remote())
|
||||
argv_array_push(&rev_list.args, "--exclude-promisor-objects");
|
||||
if (!opt->is_deepening_fetch) {
|
||||
argv_array_push(&rev_list.args, "--not");
|
||||
|
|
@ -99,7 +111,7 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
|
|||
|
||||
sigchain_push(SIGPIPE, SIG_IGN);
|
||||
|
||||
commit[GIT_SHA1_HEXSZ] = '\n';
|
||||
commit[hexsz] = '\n';
|
||||
do {
|
||||
/*
|
||||
* If index-pack already checked that:
|
||||
|
|
@ -112,8 +124,8 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
|
|||
if (new_pack && find_pack_entry_one(oid.hash, new_pack))
|
||||
continue;
|
||||
|
||||
memcpy(commit, oid_to_hex(&oid), GIT_SHA1_HEXSZ);
|
||||
if (write_in_full(rev_list.in, commit, GIT_SHA1_HEXSZ + 1) < 0) {
|
||||
memcpy(commit, oid_to_hex(&oid), hexsz);
|
||||
if (write_in_full(rev_list.in, commit, hexsz + 1) < 0) {
|
||||
if (errno != EPIPE && errno != EINVAL)
|
||||
error_errno(_("failed write to rev-list"));
|
||||
err = -1;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue