All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.