]> git.ipfire.org Git - thirdparty/git.git/commitdiff
refs API: make resolve_ref_unsafe() not set errno
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Sat, 16 Oct 2021 09:39:23 +0000 (11:39 +0200)
committerJunio C Hamano <gitster@pobox.com>
Sat, 16 Oct 2021 18:17:04 +0000 (11:17 -0700)
Change the resolve_ref_unsafe() wrapper function to use the underlying
refs_werrres_ref_unsafe() directly.

From a reading of the callers I determined that the only one who cared
about errno was a sequencer.c caller added in e47c6cafcb5 (commit:
move print_commit_summary() to libgit, 2017-11-24), I'm migrating it
to using refs_werrres_ref_unsafe() directly.

This adds another "set errno" instance, but in this case it's OK and
idiomatic. We are setting it just before calling die_errno(). We could
have some hypothetical die_errno_var(&saved_errno, ...) here, but I
don't think it's worth it. The problem with errno is subtle action at
distance, not this sort of thing. We already use this pattern in a
couple of places in wrapper.c

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
refs.c
sequencer.c

diff --git a/refs.c b/refs.c
index 8d5a76fbf29572d5db7dfc2b2fcbb5a224969920..b563729782b16169d76402e67fdcfb8ea1f609b7 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -1785,8 +1785,10 @@ int refs_init_db(struct strbuf *err)
 const char *resolve_ref_unsafe(const char *refname, int resolve_flags,
                               struct object_id *oid, int *flags)
 {
-       return refs_resolve_ref_unsafe(get_main_ref_store(the_repository), refname,
-                                      resolve_flags, oid, flags);
+       int ignore_errno;
+
+       return refs_werrres_ref_unsafe(get_main_ref_store(the_repository), refname,
+                                      resolve_flags, oid, flags, &ignore_errno);
 }
 
 int resolve_gitlink_ref(const char *submodule, const char *refname,
index fac0b5162f6f880185f1e434c30b3d2b281a222e..1223dc2d2bf25622c35c21c7d639635dc46e530a 100644 (file)
@@ -1282,6 +1282,8 @@ void print_commit_summary(struct repository *r,
        struct pretty_print_context pctx = {0};
        struct strbuf author_ident = STRBUF_INIT;
        struct strbuf committer_ident = STRBUF_INIT;
+       struct ref_store *refs;
+       int resolve_errno;
 
        commit = lookup_commit(r, oid);
        if (!commit)
@@ -1331,9 +1333,13 @@ void print_commit_summary(struct repository *r,
        rev.diffopt.break_opt = 0;
        diff_setup_done(&rev.diffopt);
 
-       head = resolve_ref_unsafe("HEAD", 0, NULL, NULL);
-       if (!head)
+       refs = get_main_ref_store(the_repository);
+       head = refs_werrres_ref_unsafe(refs, "HEAD", 0, NULL, NULL,
+                                      &resolve_errno);
+       if (!head) {
+               errno = resolve_errno;
                die_errno(_("unable to resolve HEAD after creating commit"));
+       }
        if (!strcmp(head, "HEAD"))
                head = _("detached HEAD");
        else