git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 06/14] server-info: stop using `the_repository`

From
Patrick Steinhardt <ps@pks.im>
Date
Dec 17, 2024, 06:43 UTC
Message-ID
<20241217-pks-use-the-repository-conversion-v1-6-0dba48bcc239@pks.im>
In-Reply-To
<20241217-pks-use-the-repository-conversion-v1-0-0dba48bcc239@pks.im>

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>
---
 builtin/receive-pack.c       |  2 +-
 builtin/repack.c             |  2 +-
 builtin/update-server-info.c |  2 +-
 server-info.c                | 40 ++++++++++++++++++++++------------------
 server-info.h                |  4 +++-
 5 files changed, 28 insertions(+), 22 deletions(-)
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index c2e9103f112c1e37e9f030308633daf49eec1ecf..191b5eeb34e6791776f93a3a9509efa887e4e087 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -2628,7 +2628,7 @@ int cmd_receive_pack(int argc,
 			}
 		}
 		if (auto_update_server_info)
-			update_server_info(0);
+			update_server_info(the_repository, 0);
 		clear_shallow_info(&si);
 	}
 	if (use_sideband)
diff --git a/builtin/repack.c b/builtin/repack.c
index 0c6dad7df47a1665026a348921c33b2067b59976..81d13630ea41f832bd0210971c13a82a3ddc0971 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -1565,7 +1565,7 @@ int cmd_repack(int argc,
 	}
 
 	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)) {
 		unsigned flags = 0;
diff --git a/builtin/update-server-info.c b/builtin/update-server-info.c
index 6769611a025d0d69bcd3dbbd06f5fed056262911..47a3f0bdd9c3498808b86c2e31f4489926226102 100644
--- a/builtin/update-server-info.c
+++ b/builtin/update-server-info.c
@@ -27,5 +27,5 @@ int cmd_update_server_info(int argc,
 	if (argc > 0)
 		usage_with_options(update_server_info_usage, options);
 
-	return !!update_server_info(force);
+	return !!update_server_info(the_repository, force);
 }
diff --git a/server-info.c b/server-info.c
index ef2f3f4b5c7b04c46520b2fd9d4352b806658f40..31c3fdc118447d42745362935e3483c59b7e0bc2 100644
--- a/server-info.c
+++ b/server-info.c
@@ -1,4 +1,3 @@
-#define USE_THE_REPOSITORY_VARIABLE
 #define DISABLE_SIGN_COMPARE_WARNINGS
 
 #include "git-compat-util.h"
@@ -18,6 +17,7 @@
 #include "tempfile.h"
 
 struct update_info_ctx {
+	struct repository *repo;
 	FILE *cur_fp;
 	FILE *old_fp; /* becomes NULL if it differs from cur_fp */
 	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
  * 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 force)
 {
@@ -81,6 +81,7 @@ static int update_info_file(char *path,
 	struct tempfile *f = NULL;
 	int ret = -1;
 	struct update_info_ctx uic = {
+		.repo = r,
 		.cur_fp = NULL,
 		.old_fp = NULL,
 		.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)
 {
 	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)
 		return -1;
 
@@ -160,7 +161,7 @@ static int add_info_ref(const char *path, const char *referent UNUSED, const str
 		return -1;
 
 	if (o->type == OBJ_TAG) {
-		o = deref_tag(the_repository, o, path, 0);
+		o = deref_tag(uic->repo, o, path, 0);
 		if (o)
 			if (uic_printf(uic, "%s	%s^{}\n",
 				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)
 {
-	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);
 }
 
-static int update_info_refs(int force)
+static int update_info_refs(struct repository *r, int force)
 {
-	char *path = git_pathdup("info/refs");
-	int ret = update_info_file(path, generate_info_refs, force);
+	char *path = repo_git_path(r, "info/refs");
+	int ret = update_info_file(r, path, generate_info_refs, force);
 	free(path);
 	return ret;
 }
@@ -284,14 +285,14 @@ static int compare_info(const void *a_, const void *b_)
 		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;
 	int stale;
 	int i;
 	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
 		 * not available to the pullers in general.
 		 */
@@ -340,33 +341,36 @@ static int write_pack_info_file(struct update_info_ctx *uic)
 	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",
-				   repo_get_object_directory(the_repository));
+				   repo_get_object_directory(r));
 	int ret;
 
-	init_pack_info(infofile, force);
-	ret = update_info_file(infofile, write_pack_info_file, force);
+	init_pack_info(r, infofile, force);
+	ret = update_info_file(r, infofile, write_pack_info_file, force);
 	free_pack_info();
 	free(infofile);
 	return ret;
 }
 
 /* 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,
 	 * including index of available pack files and their
 	 * intended audiences.
 	 */
 	int errs = 0;
+	char *path;
 
-	errs = errs | update_info_refs(force);
-	errs = errs | update_info_packs(force);
+	errs = errs | update_info_refs(r, force);
+	errs = errs | update_info_packs(r, force);
 
 	/* 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;
 }
diff --git a/server-info.h b/server-info.h
index 13bbde2c55fafe7bf07eb38377cec2f109de3164..e634d1722bdfaaa506777b4df370d908b05005e9 100644
--- a/server-info.h
+++ b/server-info.h
@@ -1,7 +1,9 @@
 #ifndef SERVER_INFO_H
 #define SERVER_INFO_H
 
+struct repository;
+
 /* Dumb servers support */
-int update_server_info(int);
+int update_server_info(struct repository *r, int force);
 
 #endif /* SERVER_INFO_H */
-- 
2.48.0.rc0.184.g0fc57dec57.dirty
Previous: Patrick SteinhardtNext: shejialuo
Message 12 of 26 in “Stop using `the_repository` in some trivial cases”
  1. 00/14 Stop using `the_repository` in some trivial casesPatrick Steinhardt, Dec 17, 2024
  2. 01/14 progress: stop using `the_repository`Patrick Steinhardt, Dec 17, 2024
  3. Karthik NayakDec 31, 2024
  4. Toon ClaesJan 6, 2025
  5. Patrick SteinhardtJan 7, 2025
  6. 02/14 pager: stop using `the_repository`Patrick Steinhardt, Dec 17, 2024
  7. shejialuoDec 17, 2024
  8. Karthik NayakDec 31, 2024
  9. 03/14 trace: stop using `the_repository`Patrick Steinhardt, Dec 17, 2024
  10. 04/14 serve: stop using `the_repository`Patrick Steinhardt, Dec 17, 2024
  11. 05/14 send-pack: stop using `the_repository`Patrick Steinhardt, Dec 17, 2024
  12. 06/14 server-info: stop using `the_repository`Patrick Steinhardt, Dec 17, 2024
  13. shejialuoDec 17, 2024
  14. 07/14 diagnose: stop using `the_repository`Patrick Steinhardt, Dec 17, 2024
  15. 08/14 mailinfo: stop using `the_repository`Patrick Steinhardt, Dec 17, 2024
  16. 09/14 credential: stop using `the_repository`Patrick Steinhardt, Dec 17, 2024
  17. 10/14 resolve-undo: stop using `the_repository`Patrick Steinhardt, Dec 17, 2024
  18. 11/14 tmp-objdir: stop using `the_repository`Patrick Steinhardt, Dec 17, 2024
  19. 12/14 add-interactive: stop using `the_repository`Patrick Steinhardt, Dec 17, 2024
  20. 13/14 graph: stop using `the_repository`Patrick Steinhardt, Dec 17, 2024
  21. 14/14 match-trees: stop using `the_repository`Patrick Steinhardt, Dec 17, 2024
  22. shejialuoDec 17, 2024
  23. Patrick SteinhardtDec 27, 2024
  24. Karthik NayakJan 7, 2025
  25. Toon ClaesJan 7, 2025
  26. Junio C HamanoJan 7, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.