mirror of
https://github.com/git/git.git
synced 2026-01-10 01:56:42 +00:00
http: refactor subsystem to use packfile_lists
The dumb HTTP protocol directly fetches packfiles from the remote server and temporarily stores them in a list of packfiles. Those packfiles are not yet added to the repository's packfile store until we finalize the whole fetch. Refactor the code to instead use a `struct packfile_list` to store those packs. This prepares us for a subsequent change where the `->next` pointer of `struct packed_git` will go away. Note that this refactoring creates some temporary duplication of code, as we now have both `packfile_list_find_oid()` and `find_oid_pack()`. The latter function will be removed in a subsequent commit though. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
f905a855b1
commit
89219bc0cd
21
http.c
21
http.c
@@ -2413,8 +2413,9 @@ static char *fetch_pack_index(unsigned char *hash, const char *base_url)
|
||||
return tmp;
|
||||
}
|
||||
|
||||
static int fetch_and_setup_pack_index(struct packed_git **packs_head,
|
||||
unsigned char *sha1, const char *base_url)
|
||||
static int fetch_and_setup_pack_index(struct packfile_list *packs,
|
||||
unsigned char *sha1,
|
||||
const char *base_url)
|
||||
{
|
||||
struct packed_git *new_pack, *p;
|
||||
char *tmp_idx = NULL;
|
||||
@@ -2448,12 +2449,11 @@ static int fetch_and_setup_pack_index(struct packed_git **packs_head,
|
||||
if (ret)
|
||||
return -1;
|
||||
|
||||
new_pack->next = *packs_head;
|
||||
*packs_head = new_pack;
|
||||
packfile_list_prepend(packs, new_pack);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int http_get_info_packs(const char *base_url, struct packed_git **packs_head)
|
||||
int http_get_info_packs(const char *base_url, struct packfile_list *packs)
|
||||
{
|
||||
struct http_get_options options = {0};
|
||||
int ret = 0;
|
||||
@@ -2477,7 +2477,7 @@ int http_get_info_packs(const char *base_url, struct packed_git **packs_head)
|
||||
!parse_oid_hex(data, &oid, &data) &&
|
||||
skip_prefix(data, ".pack", &data) &&
|
||||
(*data == '\n' || *data == '\0')) {
|
||||
fetch_and_setup_pack_index(packs_head, oid.hash, base_url);
|
||||
fetch_and_setup_pack_index(packs, oid.hash, base_url);
|
||||
} else {
|
||||
data = strchrnul(data, '\n');
|
||||
}
|
||||
@@ -2541,14 +2541,9 @@ cleanup:
|
||||
}
|
||||
|
||||
void http_install_packfile(struct packed_git *p,
|
||||
struct packed_git **list_to_remove_from)
|
||||
struct packfile_list *list_to_remove_from)
|
||||
{
|
||||
struct packed_git **lst = list_to_remove_from;
|
||||
|
||||
while (*lst != p)
|
||||
lst = &((*lst)->next);
|
||||
*lst = (*lst)->next;
|
||||
|
||||
packfile_list_remove(list_to_remove_from, p);
|
||||
packfile_store_add_pack(the_repository->objects->packfiles, p);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user