git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Han-Wen Nienhuys via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: "Han-Wen Nienhuys" <hanwen@google.com>,
	"Jonathan Tan" <jonathantanmy@google.com>,
	"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
	"Han-Wen Nienhuys" <hanwenn@gmail.com>
Subject: [PATCH v3 0/5] refs: cleanup errno sideband ref related functions
Date: Mon, 05 Jul 2021 20:56:00 +0000	[thread overview]
Message-ID: <pull.1012.v3.git.git.1625518566.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1012.v2.git.git.1623329868.gitgitgadget@gmail.com>

v5

 * address Ævar's comment; punt on clearing errno.

Han-Wen Nienhuys (5):
  refs: remove EINVAL errno output from specification of read_raw_ref_fn
  refs/files-backend: stop setting errno from lock_ref_oid_basic
  refs: make errno output explicit for read_raw_ref_fn
  refs: add failure_errno to refs_read_raw_ref() signature
  refs: make errno output explicit for refs_resolve_ref_unsafe

 refs.c                | 52 ++++++++++++++++++++++++++-----------
 refs/debug.c          |  4 +--
 refs/files-backend.c  | 60 ++++++++++++++++++++-----------------------
 refs/packed-backend.c | 15 ++++++-----
 refs/refs-internal.h  | 34 ++++++++++++++++--------
 5 files changed, 98 insertions(+), 67 deletions(-)


base-commit: 670b81a890388c60b7032a4f5b879f2ece8c4558
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1012%2Fhanwen%2Feinval-sideband-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1012/hanwen/einval-sideband-v3
Pull-Request: https://github.com/git/git/pull/1012

Range-diff vs v2:

 1:  f9b92e62b59 = 1:  e2a0e5387ab refs: remove EINVAL errno output from specification of read_raw_ref_fn
 2:  cbe09a48036 ! 2:  c594c9c5c67 refs/files-backend: stop setting errno from lock_ref_oid_basic
     @@ Commit message
      
          Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
          Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
     +    Reviewed-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
      
       ## refs/files-backend.c ##
      @@ refs/files-backend.c: static int create_reflock(const char *path, void *cb)
     @@ refs/files-backend.c: static struct ref_lock *lock_ref_oid_basic(struct files_re
      -		last_errno = errno;
      +		int last_errno = errno;
       		if (last_errno != ENOTDIR ||
     - 		    !refs_verify_refname_available(&refs->base, refname,
     - 						   extras, skip, err))
     +-		    !refs_verify_refname_available(&refs->base, refname,
     +-						   extras, skip, err))
     ++		    /* in case of D/F conflict, try to generate a better error
     ++		     * message. If that fails, fall back to strerror(ENOTDIR).
     ++		     */
     ++		    !refs_verify_refname_available(&refs->base, refname, extras,
     ++						   skip, err))
     + 			strbuf_addf(err, "unable to resolve reference '%s': %s",
     + 				    refname, strerror(last_errno));
     + 
      @@ refs/files-backend.c: static struct ref_lock *lock_ref_oid_basic(struct files_ref_store *refs,
       	if (is_null_oid(&lock->old_oid) &&
       	    refs_verify_refname_available(refs->packed_ref_store, refname,
 3:  3e2831e59c8 ! 3:  b017caf54ba refs: make errno output explicit for read_raw_ref_fn
     @@ Metadata
       ## Commit message ##
          refs: make errno output explicit for read_raw_ref_fn
      
     +    This makes it explicit how alternative ref backends should report errors in
     +    read_raw_ref_fn.
     +
          read_raw_ref_fn needs to supply a credible errno for a number of cases. These
          are primarily:
      
     @@ Commit message
      
          Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
          Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
     +    Reviewed-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
      
       ## refs.c ##
      @@ refs.c: int refs_read_raw_ref(struct ref_store *ref_store,
       		      const char *refname, struct object_id *oid,
       		      struct strbuf *referent, unsigned int *type)
       {
     -+	int result, failure;
     ++	int result;
     ++	int failure_errno;
       	if (!strcmp(refname, "FETCH_HEAD") || !strcmp(refname, "MERGE_HEAD")) {
       		return refs_read_special_head(ref_store, refname, oid, referent,
       					      type);
     @@ refs.c: int refs_read_raw_ref(struct ref_store *ref_store,
       
      -	return ref_store->be->read_raw_ref(ref_store, refname, oid, referent,
      -					   type);
     -+	failure = 0;
     ++	failure_errno = 0;
      +	result = ref_store->be->read_raw_ref(ref_store, refname, oid, referent,
     -+					     type, &failure);
     -+	errno = failure;
     ++					     type, &failure_errno);
     ++	if (failure_errno)
     ++		errno = failure_errno;
      +	return result;
       }
       
     @@ refs/files-backend.c: stat_ref:
       
       out:
      -	save_errno = errno;
     -+	if (failure_errno)
     -+		*failure_errno = errno;
     ++	*failure_errno = errno;
       	strbuf_release(&sb_path);
       	strbuf_release(&sb_contents);
      -	errno = save_errno;
     @@ refs/refs-internal.h: typedef int reflog_expire_fn(struct ref_store *ref_store,
      - * an object ID, it is broken; set REF_ISBROKEN in type, and return -1
      - * (errno should not be ENOENT) If there is another error reading the
      - * ref, set errno appropriately and return -1.
     -+ * Return 0 on success. If the ref doesn't exist, set failure_errno to ENOENT
     -+ * and return -1. If the ref exists but is neither a symbolic ref nor an object
     -+ * ID, it is broken; set REF_ISBROKEN in type, and return -1 (failure_errno
     -+ * should not be ENOENT). The files backend may return EISDIR (if the ref name
     -+ * is a directory) and ENOTDIR (if a ref prefix is not a directory). If there is
     -+ * another error reading the ref, set failure_errno appropriately and return -1.
     ++ * Return 0 on success, or -1 on failure. If the ref exists but is neither a
     ++ * symbolic ref nor an object ID, it is broken. In this case set REF_ISBROKEN in
     ++ * type, and return -1 (failure_errno should not be ENOENT)
     ++ *
     ++ * failure_errno provides errno codes that are interpreted beyond error
     ++ * reporting. The following error codes have special meaning:
     ++ *    * ENOENT: the ref doesn't exist
     ++ *    * EISDIR: ref name is a directory
     ++ *    * ENOTDIR: ref prefix is not a directory
        *
        * Backend-specific flags might be set in type as well, regardless of
        * outcome.
 4:  11b2184044d < -:  ----------- refs: make errno output explicit for refs_resolve_ref_unsafe
 6:  2b346caf1ae ! 4:  4aaa9d3bd6f refs: add failure_errno to refs_read_raw_ref() signature
     @@ Metadata
       ## Commit message ##
          refs: add failure_errno to refs_read_raw_ref() signature
      
     -    This makes the errno output of refs_read_raw_ref explicit.
     +    This lets us use the explicit errno output parameter in refs_resolve_ref_unsafe.
      
          Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
          Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
     +    Reviewed-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
      
       ## refs.c ##
      @@ refs.c: done:
     @@ refs.c: done:
      +		      struct object_id *oid, struct strbuf *referent,
      +		      unsigned int *type, int *failure_errno)
       {
     --	int result, failure;
     +-	int result;
     +-	int failure_errno;
     ++	int ignore;
      +	if (failure_errno)
      +		*failure_errno = 0;
     ++	else
     ++		failure_errno = &ignore;
     ++
       	if (!strcmp(refname, "FETCH_HEAD") || !strcmp(refname, "MERGE_HEAD")) {
       		return refs_read_special_head(ref_store, refname, oid, referent,
       					      type);
       	}
       
     --	failure = 0;
     +-	failure_errno = 0;
      -	result = ref_store->be->read_raw_ref(ref_store, refname, oid, referent,
     --					     type, &failure);
     --	errno = failure;
     +-					     type, &failure_errno);
     +-	if (failure_errno)
     +-		errno = failure_errno;
      -	return result;
      +	return ref_store->be->read_raw_ref(ref_store, refname, oid, referent,
      +					   type, failure_errno);
       }
       
     - /* This function needs to return a meaningful errno on failure */
     +-/* This function needs to return a meaningful errno on failure */
     +-const char *refs_resolve_ref_unsafe(struct ref_store *refs,
     +-				    const char *refname,
     +-				    int resolve_flags,
     +-				    struct object_id *oid, int *flags)
     ++const char *refs_resolve_ref_unsafe_with_errno(struct ref_store *refs,
     ++					       const char *refname,
     ++					       int resolve_flags,
     ++					       struct object_id *oid,
     ++					       int *flags, int *failure_errno)
     + {
     + 	static struct strbuf sb_refname = STRBUF_INIT;
     + 	struct object_id unused_oid;
     + 	int unused_flags;
     ++	int unused_errno;
     + 	int symref_count;
     + 
     + 	if (!oid)
     +@@ refs.c: const char *refs_resolve_ref_unsafe(struct ref_store *refs,
     + 		flags = &unused_flags;
     + 
     + 	*flags = 0;
     ++	if (!failure_errno)
     ++		failure_errno = &unused_errno;
     ++	*failure_errno = 0;
     + 
     + 	if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL)) {
     + 		if (!(resolve_flags & RESOLVE_REF_ALLOW_BAD_NAME) ||
      @@ refs.c: const char *refs_resolve_ref_unsafe(struct ref_store *refs,
       
       	for (symref_count = 0; symref_count < SYMREF_MAXDEPTH; symref_count++) {
     @@ refs.c: const char *refs_resolve_ref_unsafe(struct ref_store *refs,
      +				      &read_flags, &read_failure)) {
       			*flags |= read_flags;
       
     ++			*failure_errno = read_failure;
     ++
       			/* In reading mode, refs must eventually resolve */
     + 			if (resolve_flags & RESOLVE_REF_READING)
     + 				return NULL;
      @@ refs.c: const char *refs_resolve_ref_unsafe(struct ref_store *refs,
       			 * may show errors besides ENOENT if there are
       			 * similarly-named refs.
     @@ refs.c: const char *refs_resolve_ref_unsafe(struct ref_store *refs,
       				return NULL;
       
       			oidclr(oid);
     +@@ refs.c: const char *refs_resolve_ref_unsafe(struct ref_store *refs,
     + 	return NULL;
     + }
     + 
     ++const char *refs_resolve_ref_unsafe(struct ref_store *refs, const char *refname,
     ++				    int resolve_flags, struct object_id *oid,
     ++				    int *flags)
     ++{
     ++	int ignore = 0;
     ++	return refs_resolve_ref_unsafe_with_errno(refs, refname, resolve_flags,
     ++						  oid, flags, &ignore);
     ++}
     ++
     + /* backend functions */
     + int refs_init_db(struct strbuf *err)
     + {
      @@ refs.c: int refs_verify_refname_available(struct ref_store *refs,
       		if (skip && string_list_has_string(skip, dirname.buf))
       			continue;
     @@ refs/files-backend.c: stat_ref:
       		}
      
       ## refs/packed-backend.c ##
     -@@ refs/packed-backend.c: static int packed_read_raw_ref(struct ref_store *ref_store, const char *refname,
     - 
     - 	if (!rec) {
     - 		/* refname is not a packed reference. */
     --		*failure_errno = ENOENT;
     -+		if (failure_errno)
     -+			*failure_errno = ENOENT;
     - 		return -1;
     - 	}
     - 
      @@ refs/packed-backend.c: int is_packed_transaction_needed(struct ref_store *ref_store,
       	ret = 0;
       	for (i = 0; i < transaction->nr; i++) {
       		struct ref_update *update = transaction->updates[i];
     -+		int failure;
     ++		int failure_errno = 0;
       		unsigned int type;
       		struct object_id oid;
       
     @@ refs/packed-backend.c: int is_packed_transaction_needed(struct ref_store *ref_st
      -				       &oid, &referent, &type) ||
      -		    errno != ENOENT) {
      +		if (!refs_read_raw_ref(ref_store, update->refname, &oid,
     -+				       &referent, &type, &failure) ||
     -+		    failure != ENOENT) {
     ++				       &referent, &type, &failure_errno) ||
     ++		    failure_errno != ENOENT) {
       			/*
       			 * We have to actually delete that reference
       			 * -> this transaction is needed.
     @@ refs/refs-internal.h: struct ref_update {
      +		      struct object_id *oid, struct strbuf *referent,
      +		      unsigned int *type, int *failure_errno);
       
     - /* Like refs_resolve_ref_unsafe, but provide access to errno code that lead to a
     -  * failure. */
     + /*
     +  * Write an error to `err` and return a nonzero value iff the same
 5:  005ee8e6fb2 ! 5:  ed5347d7bb6 refs: use refs_resolve_ref_unsafe_with_errno() where needed
     @@ Metadata
      Author: Han-Wen Nienhuys <hanwen@google.com>
      
       ## Commit message ##
     -    refs: use refs_resolve_ref_unsafe_with_errno() where needed
     +    refs: make errno output explicit for refs_resolve_ref_unsafe
     +
     +    This introduces refs_resolve_ref_unsafe_with_errno(), which makes the API
     +    contract for the errno output explicit. The implementation still relies on
     +    the global errno variable to ensure no side effects of this refactoring.
      
          lock_ref_oid_basic() in files-backend.c is the only caller of refs_resolve_ref()
     -    that needs error information to make logic decisions.
     +    that needs error information to make logic decisions, so update that caller
      
          Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
          Reviewed-by: Jonathan Tan <jonathantanmy@google.com>
     +    Reviewed-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
      
       ## refs/files-backend.c ##
      @@ refs/files-backend.c: static struct ref_lock *lock_ref_oid_basic(struct files_ref_store *refs,
     @@ refs/files-backend.c: static struct ref_lock *lock_ref_oid_basic(struct files_re
       	if (!resolved) {
      -		int last_errno = errno;
      -		if (last_errno != ENOTDIR ||
     --		    !refs_verify_refname_available(&refs->base, refname,
     --						   extras, skip, err))
      +		if (resolve_errno != ENOTDIR ||
     -+		    !refs_verify_refname_available(&refs->base, refname, extras,
     -+						   skip, err))
     + 		    /* in case of D/F conflict, try to generate a better error
     + 		     * message. If that fails, fall back to strerror(ENOTDIR).
     + 		     */
     + 		    !refs_verify_refname_available(&refs->base, refname, extras,
     + 						   skip, err))
       			strbuf_addf(err, "unable to resolve reference '%s': %s",
      -				    refname, strerror(last_errno));
      +				    refname, strerror(resolve_errno));
       
       		goto error_return;
       	}
     +
     + ## refs/refs-internal.h ##
     +@@ refs/refs-internal.h: int refs_read_raw_ref(struct ref_store *ref_store, const char *refname,
     + 		      struct object_id *oid, struct strbuf *referent,
     + 		      unsigned int *type, int *failure_errno);
     + 
     ++/* Like refs_resolve_ref_unsafe, but provide access to errno code that lead to a
     ++ * failure. */
     ++const char *refs_resolve_ref_unsafe_with_errno(struct ref_store *refs,
     ++					       const char *refname,
     ++					       int resolve_flags,
     ++					       struct object_id *oid,
     ++					       int *flags, int *failure_errno);
     ++
     + /*
     +  * Write an error to `err` and return a nonzero value iff the same
     +  * refname appears multiple times in `refnames`. `refnames` must be
 7:  d8651621968 < -:  ----------- refs: clear errno return in refs_resolve_ref_unsafe()
 8:  2a9ebe43dea < -:  ----------- refs: explicitly propagate errno from refs_read_raw_ref

-- 
gitgitgadget

  parent reply	other threads:[~2021-07-05 20:56 UTC|newest]

Thread overview: 148+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-29 15:32 [PATCH 0/8] refs: cleanup errno sideband ref related functions Han-Wen Nienhuys via GitGitGadget
2021-04-29 15:32 ` [PATCH 1/8] refs: remove EINVAL specification from the errno sideband in read_raw_ref_fn Han-Wen Nienhuys via GitGitGadget
2021-04-30  2:38   ` Junio C Hamano
2021-05-19 12:25     ` Han-Wen Nienhuys
2021-06-03  2:19   ` Jonathan Tan
2021-06-09 11:28     ` Han-Wen Nienhuys
2021-04-29 15:32 ` [PATCH 2/8] refs/files-backend: stop setting errno from lock_ref_oid_basic Han-Wen Nienhuys via GitGitGadget
2021-04-30  3:10   ` Junio C Hamano
2021-05-19 12:29     ` Han-Wen Nienhuys
2021-06-03  2:33   ` Jonathan Tan
2021-06-10 10:02     ` Han-Wen Nienhuys
2021-04-29 15:32 ` [PATCH 3/8] refs: make errno output explicit for read_raw_ref_fn Han-Wen Nienhuys via GitGitGadget
2021-04-30  3:34   ` Junio C Hamano
2021-04-30  6:02     ` Junio C Hamano
2021-05-19 12:33       ` Han-Wen Nienhuys
2021-06-03  2:37   ` Jonathan Tan
2021-06-10 10:05     ` Han-Wen Nienhuys
2021-04-29 15:32 ` [PATCH 4/8] refs: make errno output explicit for refs_resolve_ref_unsafe Han-Wen Nienhuys via GitGitGadget
2021-06-03  2:51   ` Jonathan Tan
2021-06-10 11:27     ` Han-Wen Nienhuys
2021-04-29 15:32 ` [PATCH 5/8] refs: add failure_errno to refs_read_raw_ref() signature Han-Wen Nienhuys via GitGitGadget
2021-04-29 15:32 ` [PATCH 6/8] refs: clear errno return in refs_resolve_ref_unsafe() Han-Wen Nienhuys via GitGitGadget
2021-06-03  2:53   ` Jonathan Tan
2021-06-10 11:45     ` Han-Wen Nienhuys
2021-04-29 15:32 ` [PATCH 7/8] refs: stop setting EINVAL and ELOOP in symref resolution Han-Wen Nienhuys via GitGitGadget
2021-06-03  2:55   ` Jonathan Tan
2021-06-10 11:58     ` Han-Wen Nienhuys
2021-04-29 15:32 ` [PATCH 8/8] refs: explicitly propagate errno from refs_read_raw_ref Han-Wen Nienhuys via GitGitGadget
2021-06-03  2:13 ` [PATCH 0/8] refs: cleanup errno sideband ref related functions Jonathan Tan
2021-06-09 11:29   ` Han-Wen Nienhuys
2021-06-10 12:57 ` [PATCH v2 " Han-Wen Nienhuys via GitGitGadget
2021-06-10 12:57   ` [PATCH v2 1/8] refs: remove EINVAL errno output from specification of read_raw_ref_fn Han-Wen Nienhuys via GitGitGadget
2021-06-10 12:57   ` [PATCH v2 2/8] refs/files-backend: stop setting errno from lock_ref_oid_basic Han-Wen Nienhuys via GitGitGadget
2021-07-01 11:13     ` Ævar Arnfjörð Bjarmason
2021-07-05 14:16       ` Han-Wen Nienhuys
2021-06-10 12:57   ` [PATCH v2 3/8] refs: make errno output explicit for read_raw_ref_fn Han-Wen Nienhuys via GitGitGadget
2021-07-01 11:34     ` Ævar Arnfjörð Bjarmason
2021-07-05 14:34       ` Han-Wen Nienhuys
2021-06-10 12:57   ` [PATCH v2 4/8] refs: make errno output explicit for refs_resolve_ref_unsafe Han-Wen Nienhuys via GitGitGadget
2021-07-01 11:56     ` Ævar Arnfjörð Bjarmason
2021-06-10 12:57   ` [PATCH v2 5/8] refs: use refs_resolve_ref_unsafe_with_errno() where needed Han-Wen Nienhuys via GitGitGadget
2021-07-01 11:58     ` Ævar Arnfjörð Bjarmason
2021-06-10 12:57   ` [PATCH v2 6/8] refs: add failure_errno to refs_read_raw_ref() signature Han-Wen Nienhuys via GitGitGadget
2021-07-01 12:06     ` Ævar Arnfjörð Bjarmason
2021-06-10 12:57   ` [PATCH v2 7/8] refs: clear errno return in refs_resolve_ref_unsafe() Han-Wen Nienhuys via GitGitGadget
2021-07-01 12:19     ` Ævar Arnfjörð Bjarmason
2021-06-10 12:57   ` [PATCH v2 8/8] refs: explicitly propagate errno from refs_read_raw_ref Han-Wen Nienhuys via GitGitGadget
2021-07-01 12:26     ` Ævar Arnfjörð Bjarmason
2021-07-05 16:09       ` Han-Wen Nienhuys
2021-07-05 19:08         ` Ævar Arnfjörð Bjarmason
2021-07-05 19:39           ` Han-Wen Nienhuys
2021-06-14 10:10   ` [PATCH v2 0/8] refs: cleanup errno sideband ref related functions Han-Wen Nienhuys
2021-07-05 20:56   ` Han-Wen Nienhuys via GitGitGadget [this message]
2021-07-05 20:56     ` [PATCH v3 1/5] refs: remove EINVAL errno output from specification of read_raw_ref_fn Han-Wen Nienhuys via GitGitGadget
2021-07-05 20:56     ` [PATCH v3 2/5] refs/files-backend: stop setting errno from lock_ref_oid_basic Han-Wen Nienhuys via GitGitGadget
2021-07-05 20:56     ` [PATCH v3 3/5] refs: make errno output explicit for read_raw_ref_fn Han-Wen Nienhuys via GitGitGadget
2021-07-05 20:56     ` [PATCH v3 4/5] refs: add failure_errno to refs_read_raw_ref() signature Han-Wen Nienhuys via GitGitGadget
2021-07-06 19:28       ` Junio C Hamano
2021-07-05 20:56     ` [PATCH v3 5/5] refs: make errno output explicit for refs_resolve_ref_unsafe Han-Wen Nienhuys via GitGitGadget
2021-07-06  0:38     ` [PATCH v3 0/5] refs: cleanup errno sideband ref related functions Ævar Arnfjörð Bjarmason
2021-07-06  9:53       ` Han-Wen Nienhuys
2021-07-06 14:27         ` Ævar Arnfjörð Bjarmason
2021-07-06 18:36           ` Han-Wen Nienhuys
2021-07-06 18:55     ` [PATCH v4 0/6] " Han-Wen Nienhuys via GitGitGadget
2021-07-06 18:55       ` [PATCH v4 1/6] refs: remove EINVAL errno output from specification of read_raw_ref_fn Han-Wen Nienhuys via GitGitGadget
2021-07-06 18:55       ` [PATCH v4 2/6] refs/files-backend: stop setting errno from lock_ref_oid_basic Han-Wen Nienhuys via GitGitGadget
2021-07-06 18:55       ` [PATCH v4 3/6] refs: make errno output explicit for read_raw_ref_fn Han-Wen Nienhuys via GitGitGadget
2021-07-06 18:55       ` [PATCH v4 4/6] refs: add failure_errno to refs_read_raw_ref() signature Han-Wen Nienhuys via GitGitGadget
2021-07-06 19:39         ` Junio C Hamano
2021-07-06 18:55       ` [PATCH v4 5/6] refs: explicitly return failure_errno from parse_loose_ref_contents Han-Wen Nienhuys via GitGitGadget
2021-07-06 19:37         ` Junio C Hamano
2021-07-07  8:20           ` Han-Wen Nienhuys
2021-07-06 18:55       ` [PATCH v4 6/6] refs: make errno output explicit for refs_resolve_ref_unsafe Han-Wen Nienhuys via GitGitGadget
2021-07-07 19:07       ` [PATCH v5 0/6] refs: cleanup errno sideband ref related functions Han-Wen Nienhuys via GitGitGadget
2021-07-07 19:07         ` [PATCH v5 1/6] refs: remove EINVAL errno output from specification of read_raw_ref_fn Han-Wen Nienhuys via GitGitGadget
2021-07-07 19:07         ` [PATCH v5 2/6] refs/files-backend: stop setting errno from lock_ref_oid_basic Han-Wen Nienhuys via GitGitGadget
2021-07-11 11:38           ` Ævar Arnfjörð Bjarmason
2021-07-13  8:00             ` Han-Wen Nienhuys
2021-07-07 19:07         ` [PATCH v5 3/6] refs: make errno output explicit for read_raw_ref_fn Han-Wen Nienhuys via GitGitGadget
2021-07-11 11:52           ` Ævar Arnfjörð Bjarmason
2021-07-07 19:07         ` [PATCH v5 4/6] refs: add failure_errno to refs_read_raw_ref() signature Han-Wen Nienhuys via GitGitGadget
2021-07-11 11:59           ` Ævar Arnfjörð Bjarmason
2021-07-13  8:02             ` Han-Wen Nienhuys
2021-07-07 19:07         ` [PATCH v5 5/6] refs: explicitly return failure_errno from parse_loose_ref_contents Han-Wen Nienhuys via GitGitGadget
2021-07-11 12:41           ` Ævar Arnfjörð Bjarmason
2021-07-07 19:07         ` [PATCH v5 6/6] refs: make errno output explicit for refs_resolve_ref_unsafe Han-Wen Nienhuys via GitGitGadget
2021-07-07 20:44         ` [PATCH v5 0/6] refs: cleanup errno sideband ref related functions Junio C Hamano
2021-07-11 16:30         ` [PATCH v6? 00/17] refs API: get rid of errno setting entirely Ævar Arnfjörð Bjarmason
2021-07-11 16:30           ` [PATCH v6? 01/17] refs: remove EINVAL errno output from specification of read_raw_ref_fn Ævar Arnfjörð Bjarmason
2021-07-11 16:30           ` [PATCH v6? 02/17] refs/files-backend: stop setting errno from lock_ref_oid_basic Ævar Arnfjörð Bjarmason
2021-07-11 16:30           ` [PATCH v6? 03/17] refs: make errno output explicit for read_raw_ref_fn Ævar Arnfjörð Bjarmason
2021-07-11 16:30           ` [PATCH v6? 04/17] refs: add failure_errno to refs_read_raw_ref() signature Ævar Arnfjörð Bjarmason
2021-07-11 16:30           ` [PATCH v6? 05/17] refs: explicitly return failure_errno from parse_loose_ref_contents Ævar Arnfjörð Bjarmason
2021-07-11 16:30           ` [PATCH v6? 06/17] refs: make errno output explicit for refs_resolve_ref_unsafe Ævar Arnfjörð Bjarmason
2021-07-11 16:30           ` [PATCH v6? 07/17] refs: make errno ignoring explicit in lock_ref_oid_basic() Ævar Arnfjörð Bjarmason
2021-07-11 16:30           ` [PATCH v6? 08/17] refs file-backend.c: stop setting "EBUSY" in verify_lock() Ævar Arnfjörð Bjarmason
2021-07-13  8:08             ` Han-Wen Nienhuys
2021-07-11 16:30           ` [PATCH v6? 09/17] refs file-backend.c: deal with errno directly " Ævar Arnfjörð Bjarmason
2021-07-11 16:30           ` [PATCH v6? 10/17] refs API: remove refs_read_ref_full() wrapper Ævar Arnfjörð Bjarmason
2021-07-11 16:30           ` [PATCH v6? 11/17] refs API: make resolve_gitlink_ref() not set errno Ævar Arnfjörð Bjarmason
2021-07-11 16:30           ` [PATCH v6? 12/17] refs API: make refs_resolve_ref_unsafe() static Ævar Arnfjörð Bjarmason
2021-07-11 16:30           ` [PATCH v6? 13/17] refs API: make refs_resolve_refdup() not set errno Ævar Arnfjörð Bjarmason
2021-07-11 16:30           ` [PATCH v6? 14/17] refs API: make refs_ref_exists() " Ævar Arnfjörð Bjarmason
2021-07-11 16:30           ` [PATCH v6? 15/17] refs API: make resolve_ref_unsafe() " Ævar Arnfjörð Bjarmason
2021-07-13  8:13             ` Han-Wen Nienhuys
2021-07-14  8:32               ` Ævar Arnfjörð Bjarmason
2021-07-11 16:30           ` [PATCH v6? 16/17] refs API: make expand_ref() and repo_dwim_log() " Ævar Arnfjörð Bjarmason
2021-07-11 16:30           ` [PATCH v6? 17/17] refs API: don't leak "errno" in run_transaction_hook() Ævar Arnfjörð Bjarmason
2021-07-13  8:28           ` [PATCH v6? 00/17] refs API: get rid of errno setting entirely Han-Wen Nienhuys
2021-07-13 18:26             ` Ævar Arnfjörð Bjarmason
2021-07-14  8:38               ` Ævar Arnfjörð Bjarmason
2021-07-14  8:43                 ` Han-Wen Nienhuys
2021-07-14 11:43           ` [PATCH v7 0/6] refs: cleanup errno sideband ref related functions Ævar Arnfjörð Bjarmason
2021-07-14 11:43             ` [PATCH v7 1/6] refs: remove EINVAL errno output from specification of read_raw_ref_fn Ævar Arnfjörð Bjarmason
2021-07-14 11:43             ` [PATCH v7 2/6] refs/files-backend: stop setting errno from lock_ref_oid_basic Ævar Arnfjörð Bjarmason
2021-07-14 11:43             ` [PATCH v7 3/6] refs: make errno output explicit for read_raw_ref_fn Ævar Arnfjörð Bjarmason
2021-07-14 11:43             ` [PATCH v7 4/6] refs: add failure_errno to refs_read_raw_ref() signature Ævar Arnfjörð Bjarmason
2021-07-14 11:43             ` [PATCH v7 5/6] refs: explicitly return failure_errno from parse_loose_ref_contents Ævar Arnfjörð Bjarmason
2021-07-14 11:43             ` [PATCH v7 6/6] refs: make errno output explicit for refs_resolve_ref_unsafe Ævar Arnfjörð Bjarmason
2021-07-16 14:22             ` [PATCH v8 0/7] refs: cleanup errno sideband ref related functions Ævar Arnfjörð Bjarmason
2021-07-16 14:22               ` [PATCH v8 1/7] refs file backend: move raceproof_create_file() here Ævar Arnfjörð Bjarmason
2021-07-16 14:22               ` [PATCH v8 2/7] refs: remove EINVAL errno output from specification of read_raw_ref_fn Ævar Arnfjörð Bjarmason
2021-07-16 14:22               ` [PATCH v8 3/7] refs/files-backend: stop setting errno from lock_ref_oid_basic Ævar Arnfjörð Bjarmason
2021-07-16 14:22               ` [PATCH v8 4/7] refs: make errno output explicit for read_raw_ref_fn Ævar Arnfjörð Bjarmason
2021-07-16 14:22               ` [PATCH v8 5/7] refs: add failure_errno to refs_read_raw_ref() signature Ævar Arnfjörð Bjarmason
2021-07-16 14:22               ` [PATCH v8 6/7] refs: explicitly return failure_errno from parse_loose_ref_contents Ævar Arnfjörð Bjarmason
2021-07-16 14:22               ` [PATCH v8 7/7] refs: make errno output explicit for refs_resolve_ref_unsafe Ævar Arnfjörð Bjarmason
2021-07-20 10:33               ` [PATCH v9 0/7] refs: cleanup errno sideband ref related functions Ævar Arnfjörð Bjarmason
2021-07-20 10:33                 ` [PATCH v9 1/7] refs file backend: move raceproof_create_file() here Ævar Arnfjörð Bjarmason
2021-07-20 10:33                 ` [PATCH v9 2/7] refs: remove EINVAL errno output from specification of read_raw_ref_fn Ævar Arnfjörð Bjarmason
2021-07-20 10:33                 ` [PATCH v9 3/7] refs/files-backend: stop setting errno from lock_ref_oid_basic Ævar Arnfjörð Bjarmason
2021-07-20 10:33                 ` [PATCH v9 4/7] refs: make errno output explicit for read_raw_ref_fn Ævar Arnfjörð Bjarmason
2021-08-16 13:00                   ` Han-Wen Nienhuys
2021-07-20 10:33                 ` [PATCH v9 5/7] refs: add failure_errno to refs_read_raw_ref() signature Ævar Arnfjörð Bjarmason
2021-07-20 10:33                 ` [PATCH v9 6/7] refs: explicitly return failure_errno from parse_loose_ref_contents Ævar Arnfjörð Bjarmason
2021-08-13 20:54                   ` Jonathan Tan
2021-07-20 10:33                 ` [PATCH v9 7/7] refs: make errno output explicit for refs_resolve_ref_unsafe Ævar Arnfjörð Bjarmason
2021-07-26 23:49                 ` [PATCH v9 0/7] refs: cleanup errno sideband ref related functions Ævar Arnfjörð Bjarmason
2021-07-27  0:18                   ` Junio C Hamano
2021-08-23 11:52                 ` [PATCH v10 0/8] " Ævar Arnfjörð Bjarmason
2021-08-23 11:52                   ` [PATCH v10 1/8] refs file backend: move raceproof_create_file() here Ævar Arnfjörð Bjarmason
2021-08-23 11:52                   ` [PATCH v10 2/8] refs: remove EINVAL errno output from specification of read_raw_ref_fn Ævar Arnfjörð Bjarmason
2021-08-23 11:52                   ` [PATCH v10 3/8] refs/files-backend: stop setting errno from lock_ref_oid_basic Ævar Arnfjörð Bjarmason
2021-08-23 11:52                   ` [PATCH v10 4/8] refs: make errno output explicit for read_raw_ref_fn Ævar Arnfjörð Bjarmason
2021-08-23 11:52                   ` [PATCH v10 5/8] refs: add failure_errno to refs_read_raw_ref() signature Ævar Arnfjörð Bjarmason
2021-08-23 11:52                   ` [PATCH v10 6/8] branch tests: test for errno propagating on failing read Ævar Arnfjörð Bjarmason
2021-08-23 11:52                   ` [PATCH v10 7/8] refs: explicitly return failure_errno from parse_loose_ref_contents Ævar Arnfjörð Bjarmason
2021-08-23 11:52                   ` [PATCH v10 8/8] refs: make errno output explicit for refs_resolve_ref_unsafe Ævar Arnfjörð Bjarmason

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=pull.1012.v3.git.git.1625518566.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail.com \
    --cc=avarab@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=hanwen@google.com \
    --cc=hanwenn@gmail.com \
    --cc=jonathantanmy@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).