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

[PATCH v2 08/21] refs API: remove refs_read_ref_full() wrapper

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Oct 16, 2021, 09:39 UTC
Message-ID
<patch-v2-08.21-b2532614430-20211016T093845Z-avarab@gmail.com>
In-Reply-To
<cover-v2-00.21-00000000000-20211016T093845Z-avarab@gmail.com>

Remove the refs_read_ref_full() wrapper in favor of migrating various refs.c API users to the underlying refs_werrres_ref_unsafe() function.

A careful reading of these callers shows that the callers of this function did not care about "errno", by moving away from the refs_resolve_ref_unsafe() wrapper we can be sure that nothing relies on it anymore.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 refs.c               | 20 +++++++++-----------
 refs.h               |  2 --
 refs/files-backend.c | 36 ++++++++++++++++++++++--------------
 worktree.c           |  9 +++++----
 4 files changed, 36 insertions(+), 31 deletions(-)
diff --git a/refs.c b/refs.c
index 44ddbb14f1d..80b85d244d2 100644
--- a/refs.c
+++ b/refs.c
@@ -290,20 +290,17 @@ struct ref_filter {
 	void *cb_data;
 };
 
-int refs_read_ref_full(struct ref_store *refs, const char *refname,
-		       int resolve_flags, struct object_id *oid, int *flags)
+int read_ref_full(const char *refname, int resolve_flags, struct object_id *oid, int *flags)
 {
-	if (refs_resolve_ref_unsafe(refs, refname, resolve_flags, oid, flags))
+	int ignore_errno;
+	struct ref_store *refs = get_main_ref_store(the_repository);
+
+	if (refs_werrres_ref_unsafe(refs, refname, resolve_flags,
+				    oid, flags, &ignore_errno))
 		return 0;
 	return -1;
 }
 
-int read_ref_full(const char *refname, int resolve_flags, struct object_id *oid, int *flags)
-{
-	return refs_read_ref_full(get_main_ref_store(the_repository), refname,
-				  resolve_flags, oid, flags);
-}
-
 int read_ref(const char *refname, struct object_id *oid)
 {
 	return read_ref_full(refname, RESOLVE_REF_READING, oid, NULL);
@@ -1376,9 +1373,10 @@ int refs_head_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
 {
 	struct object_id oid;
 	int flag;
+	int ignore_errno;
 
-	if (!refs_read_ref_full(refs, "HEAD", RESOLVE_REF_READING,
-				&oid, &flag))
+	if (refs_werrres_ref_unsafe(refs, "HEAD", RESOLVE_REF_READING,
+				    &oid, &flag, &ignore_errno))
 		return fn("HEAD", &oid, flag, cb_data);
 
 	return 0;
diff --git a/refs.h b/refs.h
index c8afde6bb50..3938f99c902 100644
--- a/refs.h
+++ b/refs.h
@@ -89,8 +89,6 @@ char *refs_resolve_refdup(struct ref_store *refs,
 char *resolve_refdup(const char *refname, int resolve_flags,
 		     struct object_id *oid, int *flags);
 
-int refs_read_ref_full(struct ref_store *refs, const char *refname,
-		       int resolve_flags, struct object_id *oid, int *flags);
 int read_ref_full(const char *refname, int resolve_flags,
 		  struct object_id *oid, int *flags);
 int read_ref(const char *refname, struct object_id *oid);
diff --git a/refs/files-backend.c b/refs/files-backend.c
index 16e78326381..482d04de03a 100644
--- a/refs/files-backend.c
+++ b/refs/files-backend.c
@@ -1006,6 +1006,7 @@ static struct ref_lock *lock_ref_oid_basic(struct files_ref_store *refs,
 {
 	struct strbuf ref_file = STRBUF_INIT;
 	struct ref_lock *lock;
+	int ignore_errno;
 
 	files_assert_main_repository(refs, "lock_ref_oid_basic");
 	assert(err);
@@ -1032,9 +1033,8 @@ static struct ref_lock *lock_ref_oid_basic(struct files_ref_store *refs,
 		goto error_return;
 	}
 
-	if (refs_read_ref_full(&refs->base, lock->ref_name,
-			       0,
-			       &lock->old_oid, NULL))
+	if (!refs_werrres_ref_unsafe(&refs->base, lock->ref_name, 0,
+				     &lock->old_oid, NULL, &ignore_errno))
 		oidclr(&lock->old_oid);
 	goto out;
 
@@ -1397,6 +1397,7 @@ static int files_copy_or_rename_ref(struct ref_store *ref_store,
 	struct strbuf tmp_renamed_log = STRBUF_INIT;
 	int log, ret;
 	struct strbuf err = STRBUF_INIT;
+	int ignore_errno;
 
 	files_reflog_path(refs, &sb_oldref, oldrefname);
 	files_reflog_path(refs, &sb_newref, newrefname);
@@ -1454,9 +1455,9 @@ static int files_copy_or_rename_ref(struct ref_store *ref_store,
 	 * the safety anyway; we want to delete the reference whatever
 	 * its current value.
 	 */
-	if (!copy && !refs_read_ref_full(&refs->base, newrefname,
-				RESOLVE_REF_READING | RESOLVE_REF_NO_RECURSE,
-				NULL, NULL) &&
+	if (!copy && refs_werrres_ref_unsafe(&refs->base, newrefname,
+					     RESOLVE_REF_READING | RESOLVE_REF_NO_RECURSE,
+					     NULL, NULL, &ignore_errno) &&
 	    refs_delete_ref(&refs->base, NULL, newrefname,
 			    NULL, REF_NO_DEREF)) {
 		if (errno == EISDIR) {
@@ -1868,9 +1869,12 @@ static void update_symref_reflog(struct files_ref_store *refs,
 {
 	struct strbuf err = STRBUF_INIT;
 	struct object_id new_oid;
+	int ignore_errno;
+
 	if (logmsg &&
-	    !refs_read_ref_full(&refs->base, target,
-				RESOLVE_REF_READING, &new_oid, NULL) &&
+	    refs_werrres_ref_unsafe(&refs->base, target,
+				    RESOLVE_REF_READING, &new_oid, NULL,
+				    &ignore_errno) &&
 	    files_log_ref_write(refs, refname, &lock->old_oid,
 				&new_oid, logmsg, 0, &err)) {
 		error("%s", err.buf);
@@ -2144,6 +2148,7 @@ static int files_reflog_iterator_advance(struct ref_iterator *ref_iterator)
 		(struct files_reflog_iterator *)ref_iterator;
 	struct dir_iterator *diter = iter->dir_iterator;
 	int ok;
+	int ignore_errno;
 
 	while ((ok = dir_iterator_advance(diter)) == ITER_OK) {
 		int flags;
@@ -2155,9 +2160,10 @@ static int files_reflog_iterator_advance(struct ref_iterator *ref_iterator)
 		if (ends_with(diter->basename, ".lock"))
 			continue;
 
-		if (refs_read_ref_full(iter->ref_store,
-				       diter->relative_path, 0,
-				       &iter->oid, &flags)) {
+		if (!refs_werrres_ref_unsafe(iter->ref_store,
+					     diter->relative_path, 0,
+					     &iter->oid, &flags,
+					     &ignore_errno)) {
 			error("bad ref for %s", diter->path.buf);
 			continue;
 		}
@@ -2501,9 +2507,11 @@ static int lock_ref_for_update(struct files_ref_store *refs,
 			 * the transaction, so we have to read it here
 			 * to record and possibly check old_oid:
 			 */
-			if (refs_read_ref_full(&refs->base,
-					       referent.buf, 0,
-					       &lock->old_oid, NULL)) {
+			int ignore_errno;
+			if (!refs_werrres_ref_unsafe(&refs->base,
+						     referent.buf, 0,
+						     &lock->old_oid, NULL,
+						     &ignore_errno)) {
 				if (update->flags & REF_HAVE_OLD) {
 					strbuf_addf(err, "cannot lock ref '%s': "
 						    "error reading reference",
diff --git a/worktree.c b/worktree.c
index 092a4f92ad2..cfffcdb62b3 100644
--- a/worktree.c
+++ b/worktree.c
@@ -563,16 +563,17 @@ int other_head_refs(each_ref_fn fn, void *cb_data)
 		struct worktree *wt = *p;
 		struct object_id oid;
 		int flag;
+		int ignore_errno;
 
 		if (wt->is_current)
 			continue;
 
 		strbuf_reset(&refname);
 		strbuf_worktree_ref(wt, &refname, "HEAD");
-		if (!refs_read_ref_full(get_main_ref_store(the_repository),
-					refname.buf,
-					RESOLVE_REF_READING,
-					&oid, &flag))
+		if (refs_werrres_ref_unsafe(get_main_ref_store(the_repository),
+					    refname.buf,
+					    RESOLVE_REF_READING,
+					    &oid, &flag, &ignore_errno))
 			ret = fn(refname.buf, &oid, flag, cb_data);
 		if (ret)
 			break;
-- 
2.33.1.1338.g20da966911a
Previous: Ævar Arnfjörð BjarmasonNext: Ævar Arnfjörð Bjarmason
Message 29 of 45 in “refs: stop having the API set "errno"”
  1. 00/20 refs: stop having the API set "errno"Ævar Arnfjörð Bjarmason, Oct 14, 2021
  2. 01/20 branch tests: test for errno propagating on failing readÆvar Arnfjörð Bjarmason, Oct 14, 2021
  3. Eric SunshineOct 14, 2021
  4. 02/20 refs API: add a version of refs_resolve_ref_unsafe() with "errno"Ævar Arnfjörð Bjarmason, Oct 14, 2021
  5. 03/20 refs API: make refs_read_raw_ref() not set errnoÆvar Arnfjörð Bjarmason, Oct 14, 2021
  6. 04/20 refs API: make parse_loose_ref_contents() not set errnoÆvar Arnfjörð Bjarmason, Oct 14, 2021
  7. 05/20 refs API: make refs_rename_ref_available() staticÆvar Arnfjörð Bjarmason, Oct 14, 2021
  8. 06/20 refs/files: remove "name exist?" check in lock_ref_oid_basic()Ævar Arnfjörð Bjarmason, Oct 14, 2021
  9. Junio C HamanoOct 14, 2021
  10. 07/20 refs API: remove refs_read_ref_full() wrapperÆvar Arnfjörð Bjarmason, Oct 14, 2021
  11. 08/20 refs API: make resolve_gitlink_ref() not set errnoÆvar Arnfjörð Bjarmason, Oct 14, 2021
  12. 09/20 refs API: make loose_fill_ref_dir() not set errnoÆvar Arnfjörð Bjarmason, Oct 14, 2021
  13. 10/20 refs API: make files_copy_or_rename_ref() et al not set errnoÆvar Arnfjörð Bjarmason, Oct 14, 2021
  14. 11/20 refs API: ignore errno in worktree.c's add_head_info()Ævar Arnfjörð Bjarmason, Oct 14, 2021
  15. 12/20 refs API: ignore errno in worktree.c's find_shared_symref()Ævar Arnfjörð Bjarmason, Oct 14, 2021
  16. 14/20 refs API: make refs_resolve_refdup() not set errnoÆvar Arnfjörð Bjarmason, Oct 14, 2021
  17. 13/20 refs tests: ignore ignore errno in test-ref-store helperÆvar Arnfjörð Bjarmason, Oct 14, 2021
  18. 15/20 refs API: make refs_ref_exists() not set errnoÆvar Arnfjörð Bjarmason, Oct 14, 2021
  19. 16/20 refs API: make resolve_ref_unsafe() not set errnoÆvar Arnfjörð Bjarmason, Oct 14, 2021
  20. 17/20 refs API: make expand_ref() & repo_dwim_log() not set errnoÆvar Arnfjörð Bjarmason, Oct 14, 2021
  21. 18/20 refs API: don't expose "errno" in run_transaction_hook()Ævar Arnfjörð Bjarmason, Oct 14, 2021
  22. 20/20 refs API: post-migration API renaming [2/2]Ævar Arnfjörð Bjarmason, Oct 14, 2021
  23. 19/20 refs API: post-migration API renaming [1/2]Ævar Arnfjörð Bjarmason, Oct 14, 2021
  24. 00/21 refs: stop having the API set "errno"Ævar Arnfjörð Bjarmason, Oct 16, 2021
  25. 04/21 refs API: make parse_loose_ref_contents() not set errnoÆvar Arnfjörð Bjarmason, Oct 16, 2021
  26. 06/21 reflog tests: add --updateref testsÆvar Arnfjörð Bjarmason, Oct 16, 2021
  27. 03/21 refs API: make refs_read_raw_ref() not set errnoÆvar Arnfjörð Bjarmason, Oct 16, 2021
  28. 01/21 branch tests: test for errno propagating on failing readÆvar Arnfjörð Bjarmason, Oct 16, 2021
  29. 08/21 refs API: remove refs_read_ref_full() wrapperÆvar Arnfjörð Bjarmason, Oct 16, 2021
  30. 02/21 refs API: add a version of refs_resolve_ref_unsafe() with "errno"Ævar Arnfjörð Bjarmason, Oct 16, 2021
  31. 05/21 refs API: make refs_rename_ref_available() staticÆvar Arnfjörð Bjarmason, Oct 16, 2021
  32. 07/21 refs/files: remove "name exist?" check in lock_ref_oid_basic()Ævar Arnfjörð Bjarmason, Oct 16, 2021
  33. 09/21 refs API: make resolve_gitlink_ref() not set errnoÆvar Arnfjörð Bjarmason, Oct 16, 2021
  34. 10/21 refs API: make loose_fill_ref_dir() not set errnoÆvar Arnfjörð Bjarmason, Oct 16, 2021
  35. 12/21 refs API: ignore errno in worktree.c's add_head_info()Ævar Arnfjörð Bjarmason, Oct 16, 2021
  36. 11/21 refs API: make files_copy_or_rename_ref() et al not set errnoÆvar Arnfjörð Bjarmason, Oct 16, 2021
  37. 14/21 refs tests: ignore ignore errno in test-ref-store helperÆvar Arnfjörð Bjarmason, Oct 16, 2021
  38. 17/21 refs API: make resolve_ref_unsafe() not set errnoÆvar Arnfjörð Bjarmason, Oct 16, 2021
  39. 13/21 refs API: ignore errno in worktree.c's find_shared_symref()Ævar Arnfjörð Bjarmason, Oct 16, 2021
  40. 16/21 refs API: make refs_ref_exists() not set errnoÆvar Arnfjörð Bjarmason, Oct 16, 2021
  41. 15/21 refs API: make refs_resolve_refdup() not set errnoÆvar Arnfjörð Bjarmason, Oct 16, 2021
  42. 20/21 refs API: post-migration API renaming [1/2]Ævar Arnfjörð Bjarmason, Oct 16, 2021
  43. 18/21 refs API: make expand_ref() & repo_dwim_log() not set errnoÆvar Arnfjörð Bjarmason, Oct 16, 2021
  44. 19/21 refs API: don't expose "errno" in run_transaction_hook()Ævar Arnfjörð Bjarmason, Oct 16, 2021
  45. 21/21 refs API: post-migration API renaming [2/2]Ævar Arnfjörð Bjarmason, Oct 16, 2021

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.