server-info: stop using the_repository

Stop using `the_repository` in the "server-info" subsystem by passing in
a repository when updating server info and storing the repository in the
`update_info_ctx` structure to make it accessible to other functions.

Adjust callers accordingly by using `the_repository`. While there may be
some callers that have a repository available in their context, this
trivial conversion allows for easier verification and bubbles up the use
of `the_repository` by one level.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt
2024-12-17 07:43:53 +01:00
committed by Junio C Hamano
parent 5ee907bb3f
commit c365dbb44e
5 changed files with 28 additions and 22 deletions

View File

@ -2628,7 +2628,7 @@ int cmd_receive_pack(int argc,
} }
} }
if (auto_update_server_info) if (auto_update_server_info)
update_server_info(0); update_server_info(the_repository, 0);
clear_shallow_info(&si); clear_shallow_info(&si);
} }
if (use_sideband) if (use_sideband)

View File

@ -1565,7 +1565,7 @@ int cmd_repack(int argc,
} }
if (run_update_server_info) if (run_update_server_info)
update_server_info(0); update_server_info(the_repository, 0);
if (git_env_bool(GIT_TEST_MULTI_PACK_INDEX, 0)) { if (git_env_bool(GIT_TEST_MULTI_PACK_INDEX, 0)) {
unsigned flags = 0; unsigned flags = 0;

View File

@ -27,5 +27,5 @@ int cmd_update_server_info(int argc,
if (argc > 0) if (argc > 0)
usage_with_options(update_server_info_usage, options); usage_with_options(update_server_info_usage, options);
return !!update_server_info(force); return !!update_server_info(the_repository, force);
} }

View File

@ -1,4 +1,3 @@
#define USE_THE_REPOSITORY_VARIABLE
#define DISABLE_SIGN_COMPARE_WARNINGS #define DISABLE_SIGN_COMPARE_WARNINGS
#include "git-compat-util.h" #include "git-compat-util.h"
@ -18,6 +17,7 @@
#include "tempfile.h" #include "tempfile.h"
struct update_info_ctx { struct update_info_ctx {
struct repository *repo;
FILE *cur_fp; FILE *cur_fp;
FILE *old_fp; /* becomes NULL if it differs from cur_fp */ FILE *old_fp; /* becomes NULL if it differs from cur_fp */
struct strbuf cur_sb; struct strbuf cur_sb;
@ -73,7 +73,7 @@ static int uic_printf(struct update_info_ctx *uic, const char *fmt, ...)
* it into place. The contents of the file come from "generate", which * it into place. The contents of the file come from "generate", which
* should return non-zero if it encounters an error. * should return non-zero if it encounters an error.
*/ */
static int update_info_file(char *path, static int update_info_file(struct repository *r, char *path,
int (*generate)(struct update_info_ctx *), int (*generate)(struct update_info_ctx *),
int force) int force)
{ {
@ -81,6 +81,7 @@ static int update_info_file(char *path,
struct tempfile *f = NULL; struct tempfile *f = NULL;
int ret = -1; int ret = -1;
struct update_info_ctx uic = { struct update_info_ctx uic = {
.repo = r,
.cur_fp = NULL, .cur_fp = NULL,
.old_fp = NULL, .old_fp = NULL,
.cur_sb = STRBUF_INIT, .cur_sb = STRBUF_INIT,
@ -152,7 +153,7 @@ static int add_info_ref(const char *path, const char *referent UNUSED, const str
void *cb_data) void *cb_data)
{ {
struct update_info_ctx *uic = cb_data; struct update_info_ctx *uic = cb_data;
struct object *o = parse_object(the_repository, oid); struct object *o = parse_object(uic->repo, oid);
if (!o) if (!o)
return -1; return -1;
@ -160,7 +161,7 @@ static int add_info_ref(const char *path, const char *referent UNUSED, const str
return -1; return -1;
if (o->type == OBJ_TAG) { if (o->type == OBJ_TAG) {
o = deref_tag(the_repository, o, path, 0); o = deref_tag(uic->repo, o, path, 0);
if (o) if (o)
if (uic_printf(uic, "%s %s^{}\n", if (uic_printf(uic, "%s %s^{}\n",
oid_to_hex(&o->oid), path) < 0) oid_to_hex(&o->oid), path) < 0)
@ -171,14 +172,14 @@ static int add_info_ref(const char *path, const char *referent UNUSED, const str
static int generate_info_refs(struct update_info_ctx *uic) static int generate_info_refs(struct update_info_ctx *uic)
{ {
return refs_for_each_ref(get_main_ref_store(the_repository), return refs_for_each_ref(get_main_ref_store(uic->repo),
add_info_ref, uic); add_info_ref, uic);
} }
static int update_info_refs(int force) static int update_info_refs(struct repository *r, int force)
{ {
char *path = git_pathdup("info/refs"); char *path = repo_git_path(r, "info/refs");
int ret = update_info_file(path, generate_info_refs, force); int ret = update_info_file(r, path, generate_info_refs, force);
free(path); free(path);
return ret; return ret;
} }
@ -284,14 +285,14 @@ static int compare_info(const void *a_, const void *b_)
return 1; return 1;
} }
static void init_pack_info(const char *infofile, int force) static void init_pack_info(struct repository *r, const char *infofile, int force)
{ {
struct packed_git *p; struct packed_git *p;
int stale; int stale;
int i; int i;
size_t alloc = 0; size_t alloc = 0;
for (p = get_all_packs(the_repository); p; p = p->next) { for (p = get_all_packs(r); p; p = p->next) {
/* we ignore things on alternate path since they are /* we ignore things on alternate path since they are
* not available to the pullers in general. * not available to the pullers in general.
*/ */
@ -340,33 +341,36 @@ static int write_pack_info_file(struct update_info_ctx *uic)
return 0; return 0;
} }
static int update_info_packs(int force) static int update_info_packs(struct repository *r, int force)
{ {
char *infofile = mkpathdup("%s/info/packs", char *infofile = mkpathdup("%s/info/packs",
repo_get_object_directory(the_repository)); repo_get_object_directory(r));
int ret; int ret;
init_pack_info(infofile, force); init_pack_info(r, infofile, force);
ret = update_info_file(infofile, write_pack_info_file, force); ret = update_info_file(r, infofile, write_pack_info_file, force);
free_pack_info(); free_pack_info();
free(infofile); free(infofile);
return ret; return ret;
} }
/* public */ /* public */
int update_server_info(int force) int update_server_info(struct repository *r, int force)
{ {
/* We would add more dumb-server support files later, /* We would add more dumb-server support files later,
* including index of available pack files and their * including index of available pack files and their
* intended audiences. * intended audiences.
*/ */
int errs = 0; int errs = 0;
char *path;
errs = errs | update_info_refs(force); errs = errs | update_info_refs(r, force);
errs = errs | update_info_packs(force); errs = errs | update_info_packs(r, force);
/* remove leftover rev-cache file if there is any */ /* remove leftover rev-cache file if there is any */
unlink_or_warn(git_path("info/rev-cache")); path = repo_git_path(r, "info/rev-cache");
unlink_or_warn(path);
free(path);
return errs; return errs;
} }

View File

@ -1,7 +1,9 @@
#ifndef SERVER_INFO_H #ifndef SERVER_INFO_H
#define SERVER_INFO_H #define SERVER_INFO_H
struct repository;
/* Dumb servers support */ /* Dumb servers support */
int update_server_info(int); int update_server_info(struct repository *r, int force);
#endif /* SERVER_INFO_H */ #endif /* SERVER_INFO_H */