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>

Patrick Steinhardt committed Dec 17, 2024 at 07:43 UTC c365dbb44ec81fc60e9b7666a4384f8649d80b2a
5 files changed +28 -22
builtin/receive-pack.c
+1 -1
@@ -2628,7 +2628,7 @@ int cmd_receive_pack(int argc,
2628 }
2629 }
2630 if (auto_update_server_info)
2631 - update_server_info(0);
2631 + update_server_info(the_repository, 0);
2632 clear_shallow_info(&si);
2633 }
2634 if (use_sideband)
builtin/repack.c
+1 -1
@@ -1565,7 +1565,7 @@ int cmd_repack(int argc,
1565 }
1566
1567 if (run_update_server_info)
1568 - update_server_info(0);
1568 + update_server_info(the_repository, 0);
1569
1570 if (git_env_bool(GIT_TEST_MULTI_PACK_INDEX, 0)) {
1571 unsigned flags = 0;
builtin/update-server-info.c
+1 -1
@@ -27,5 +27,5 @@ int cmd_update_server_info(int argc,
27 if (argc > 0)
28 usage_with_options(update_server_info_usage, options);
29
30 - return !!update_server_info(force);
30 + return !!update_server_info(the_repository, force);
31 }
server-info.c
+22 -18
@@ -1,4 +1,3 @@
1 -#define USE_THE_REPOSITORY_VARIABLE
1 #define DISABLE_SIGN_COMPARE_WARNINGS
2
3 #include "git-compat-util.h"
@@ -18,6 +17,7 @@
17 #include "tempfile.h"
18
19 struct update_info_ctx {
20 + struct repository *repo;
21 FILE *cur_fp;
22 FILE *old_fp; /* becomes NULL if it differs from cur_fp */
23 struct strbuf cur_sb;
@@ -73,7 +73,7 @@ static int uic_printf(struct update_info_ctx *uic, const char *fmt, ...)
73 * it into place. The contents of the file come from "generate", which
74 * should return non-zero if it encounters an error.
75 */
76 -static int update_info_file(char *path,
76 +static int update_info_file(struct repository *r, char *path,
77 int (*generate)(struct update_info_ctx *),
78 int force)
79 {
@@ -81,6 +81,7 @@ static int update_info_file(char *path,
81 struct tempfile *f = NULL;
82 int ret = -1;
83 struct update_info_ctx uic = {
84 + .repo = r,
85 .cur_fp = NULL,
86 .old_fp = NULL,
87 .cur_sb = STRBUF_INIT,
@@ -152,7 +153,7 @@ static int add_info_ref(const char *path, const char *referent UNUSED, const str
153 void *cb_data)
154 {
155 struct update_info_ctx *uic = cb_data;
155 - struct object *o = parse_object(the_repository, oid);
156 + struct object *o = parse_object(uic->repo, oid);
157 if (!o)
158 return -1;
159
@@ -160,7 +161,7 @@ static int add_info_ref(const char *path, const char *referent UNUSED, const str
161 return -1;
162
163 if (o->type == OBJ_TAG) {
163 - o = deref_tag(the_repository, o, path, 0);
164 + o = deref_tag(uic->repo, o, path, 0);
165 if (o)
166 if (uic_printf(uic, "%s %s^{}\n",
167 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
172
173 static int generate_info_refs(struct update_info_ctx *uic)
174 {
174 - return refs_for_each_ref(get_main_ref_store(the_repository),
175 + return refs_for_each_ref(get_main_ref_store(uic->repo),
176 add_info_ref, uic);
177 }
178
178 -static int update_info_refs(int force)
179 +static int update_info_refs(struct repository *r, int force)
180 {
180 - char *path = git_pathdup("info/refs");
181 - int ret = update_info_file(path, generate_info_refs, force);
181 + char *path = repo_git_path(r, "info/refs");
182 + int ret = update_info_file(r, path, generate_info_refs, force);
183 free(path);
184 return ret;
185 }
@@ -284,14 +285,14 @@ static int compare_info(const void *a_, const void *b_)
285 return 1;
286 }
287
287 -static void init_pack_info(const char *infofile, int force)
288 +static void init_pack_info(struct repository *r, const char *infofile, int force)
289 {
290 struct packed_git *p;
291 int stale;
292 int i;
293 size_t alloc = 0;
294
294 - for (p = get_all_packs(the_repository); p; p = p->next) {
295 + for (p = get_all_packs(r); p; p = p->next) {
296 /* we ignore things on alternate path since they are
297 * not available to the pullers in general.
298 */
@@ -340,33 +341,36 @@ static int write_pack_info_file(struct update_info_ctx *uic)
341 return 0;
342 }
343
343 -static int update_info_packs(int force)
344 +static int update_info_packs(struct repository *r, int force)
345 {
346 char *infofile = mkpathdup("%s/info/packs",
346 - repo_get_object_directory(the_repository));
347 + repo_get_object_directory(r));
348 int ret;
349
349 - init_pack_info(infofile, force);
350 - ret = update_info_file(infofile, write_pack_info_file, force);
350 + init_pack_info(r, infofile, force);
351 + ret = update_info_file(r, infofile, write_pack_info_file, force);
352 free_pack_info();
353 free(infofile);
354 return ret;
355 }
356
357 /* public */
357 -int update_server_info(int force)
358 +int update_server_info(struct repository *r, int force)
359 {
360 /* We would add more dumb-server support files later,
361 * including index of available pack files and their
362 * intended audiences.
363 */
364 int errs = 0;
365 + char *path;
366
365 - errs = errs | update_info_refs(force);
366 - errs = errs | update_info_packs(force);
367 + errs = errs | update_info_refs(r, force);
368 + errs = errs | update_info_packs(r, force);
369
370 /* remove leftover rev-cache file if there is any */
369 - unlink_or_warn(git_path("info/rev-cache"));
371 + path = repo_git_path(r, "info/rev-cache");
372 + unlink_or_warn(path);
373 + free(path);
374
375 return errs;
376 }
server-info.h
+3 -1
@@ -1,7 +1,9 @@
1 #ifndef SERVER_INFO_H
2 #define SERVER_INFO_H
3
4 +struct repository;
5 +
6 /* Dumb servers support */
5 -int update_server_info(int);
7 +int update_server_info(struct repository *r, int force);
8
9 #endif /* SERVER_INFO_H */