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

[PATCH v2 09/16] refs: pass ref store when detecting dangling symrefs

From
Patrick Steinhardt <ps@pks.im>
Date
May 17, 2024, 08:18 UTC
Message-ID
<423d7b3fb65067fe381b6654e74f28da83e470bc.1715929858.git.ps@pks.im>
In-Reply-To
<cover.1715929858.git.ps@pks.im>

Both `warn_dangling_symref()` and `warn_dangling_symrefs()` derive the ref store via `the_repository`. Adapt them to instead take in the ref store as a parameter. While at it, rename the functions to have a `ref_` prefix to align them with other functions that take a ref store.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
 builtin/fetch.c  |  3 ++-
 builtin/remote.c |  3 ++-
 refs.c           | 40 ++++++++++++++++++++--------------------
 refs.h           |  7 ++++---
 4 files changed, 28 insertions(+), 25 deletions(-)
diff --git a/builtin/fetch.c b/builtin/fetch.c
index 3829d66b40..3df1c0c052 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -1412,7 +1412,8 @@ static int prune_refs(struct display_state *display_state,
 					   _("(none)"), ref->name,
 					   &ref->new_oid, &ref->old_oid,
 					   summary_width);
-			warn_dangling_symref(stderr, dangling_msg, ref->name);
+			refs_warn_dangling_symref(get_main_ref_store(the_repository),
+						  stderr, dangling_msg, ref->name);
 		}
 	}
 
diff --git a/builtin/remote.c b/builtin/remote.c
index ff70d6835a..c0b513cc95 100644
--- a/builtin/remote.c
+++ b/builtin/remote.c
@@ -1477,7 +1477,8 @@ static int prune_remote(const char *remote, int dry_run)
 			       abbrev_ref(refname, "refs/remotes/"));
 	}
 
-	warn_dangling_symrefs(stdout, dangling_msg, &refs_to_prune);
+	refs_warn_dangling_symrefs(get_main_ref_store(the_repository),
+				   stdout, dangling_msg, &refs_to_prune);
 
 	string_list_clear(&refs_to_prune, 0);
 	free_remote_ref_states(&states);
diff --git a/refs.c b/refs.c
index d705add3b8..48323dd28d 100644
--- a/refs.c
+++ b/refs.c
@@ -447,6 +447,7 @@ enum peel_status peel_object(const struct object_id *name, struct object_id *oid
 }
 
 struct warn_if_dangling_data {
+	struct ref_store *refs;
 	FILE *fp;
 	const char *refname;
 	const struct string_list *refnames;
@@ -463,8 +464,7 @@ static int warn_if_dangling_symref(const char *refname,
 	if (!(flags & REF_ISSYMREF))
 		return 0;
 
-	resolves_to = refs_resolve_ref_unsafe(get_main_ref_store(the_repository),
-					      refname, 0, NULL, NULL);
+	resolves_to = refs_resolve_ref_unsafe(d->refs, refname, 0, NULL, NULL);
 	if (!resolves_to
 	    || (d->refname
 		? strcmp(resolves_to, d->refname)
@@ -477,28 +477,28 @@ static int warn_if_dangling_symref(const char *refname,
 	return 0;
 }
 
-void warn_dangling_symref(FILE *fp, const char *msg_fmt, const char *refname)
+void refs_warn_dangling_symref(struct ref_store *refs, FILE *fp,
+			       const char *msg_fmt, const char *refname)
 {
-	struct warn_if_dangling_data data;
-
-	data.fp = fp;
-	data.refname = refname;
-	data.refnames = NULL;
-	data.msg_fmt = msg_fmt;
-	refs_for_each_rawref(get_main_ref_store(the_repository),
-			     warn_if_dangling_symref, &data);
+	struct warn_if_dangling_data data = {
+		.refs = refs,
+		.fp = fp,
+		.refname = refname,
+		.msg_fmt = msg_fmt,
+	};
+	refs_for_each_rawref(refs, warn_if_dangling_symref, &data);
 }
 
-void warn_dangling_symrefs(FILE *fp, const char *msg_fmt, const struct string_list *refnames)
+void refs_warn_dangling_symrefs(struct ref_store *refs, FILE *fp,
+				const char *msg_fmt, const struct string_list *refnames)
 {
-	struct warn_if_dangling_data data;
-
-	data.fp = fp;
-	data.refname = NULL;
-	data.refnames = refnames;
-	data.msg_fmt = msg_fmt;
-	refs_for_each_rawref(get_main_ref_store(the_repository),
-			     warn_if_dangling_symref, &data);
+	struct warn_if_dangling_data data = {
+		.refs = refs,
+		.fp = fp,
+		.refnames = refnames,
+		.msg_fmt = msg_fmt,
+	};
+	refs_for_each_rawref(refs, warn_if_dangling_symref, &data);
 }
 
 int refs_for_each_tag_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
diff --git a/refs.h b/refs.h
index fa1f19464e..56d9714293 100644
--- a/refs.h
+++ b/refs.h
@@ -388,9 +388,10 @@ static inline const char *has_glob_specials(const char *pattern)
 	return strpbrk(pattern, "?*[");
 }
 
-void warn_dangling_symref(FILE *fp, const char *msg_fmt, const char *refname);
-void warn_dangling_symrefs(FILE *fp, const char *msg_fmt,
-			   const struct string_list *refnames);
+void refs_warn_dangling_symref(struct ref_store *refs, FILE *fp,
+			       const char *msg_fmt, const char *refname);
+void refs_warn_dangling_symrefs(struct ref_store *refs, FILE *fp,
+				const char *msg_fmt, const struct string_list *refnames);
 
 /*
  * Flags for controlling behaviour of pack_refs()
-- 
2.45.1.190.g19fe900cfc.dirty
Previous: Patrick SteinhardtNext: Patrick Steinhardt
Message 10 of 17 in “refs: drop all references to `the_repository`”
  1. 00/16 refs: drop all references to `the_repository`Patrick Steinhardt, May 17, 2024
  2. 01/16 refs: adjust names for `init` and `init_db` callbacksPatrick Steinhardt, May 17, 2024
  3. 02/16 refs: rename `init_db` callback to avoid confusionPatrick Steinhardt, May 17, 2024
  4. 03/16 refs: implement releasing ref storagesPatrick Steinhardt, May 17, 2024
  5. 04/16 refs: track ref stores via strmapPatrick Steinhardt, May 17, 2024
  6. 05/16 refs: pass repo when retrieving submodule ref storePatrick Steinhardt, May 17, 2024
  7. 06/16 refs: refactor `resolve_gitlink_ref()` to accept a repositoryPatrick Steinhardt, May 17, 2024
  8. 07/16 refs: retrieve worktree ref stores via associated repositoryPatrick Steinhardt, May 17, 2024
  9. 08/16 refs: convert iteration over replace refs to accept ref storePatrick Steinhardt, May 17, 2024
  10. 09/16 refs: pass ref store when detecting dangling symrefsPatrick Steinhardt, May 17, 2024
  11. 10/16 refs: move object peeling into "object.c"Patrick Steinhardt, May 17, 2024
  12. 11/16 refs: pass repo when peeling objectsPatrick Steinhardt, May 17, 2024
  13. 12/16 refs: drop `git_default_branch_name()`Patrick Steinhardt, May 17, 2024
  14. 13/16 refs: remove `dwim_log()`Patrick Steinhardt, May 17, 2024
  15. 14/16 refs/files: use correct repositoryPatrick Steinhardt, May 17, 2024
  16. 15/16 refs/files: remove references to `the_hash_algo`Patrick Steinhardt, May 17, 2024
  17. 16/16 refs/packed: remove references to `the_hash_algo`Patrick Steinhardt, May 17, 2024

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.