]> git.ipfire.org Git - thirdparty/git.git/commitdiff
reftable/error: discern locked/outdated errors
authorPatrick Steinhardt <ps@pks.im>
Mon, 25 Mar 2024 10:02:42 +0000 (11:02 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 25 Mar 2024 16:51:11 +0000 (09:51 -0700)
We currently throw two different errors into a similar-but-different
error code:

  - Errors when trying to lock the reftable stack.

  - Errors when trying to write to the reftable stack which has been
    modified concurrently.

This results in unclear error handling and user-visible error messages.

Create a new `REFTABLE_OUTDATED_ERROR` so that those error conditions
can be clearly told apart from each other. Adjust users of the old
`REFTABLE_LOCK_ERROR` to use the new error code as required.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
reftable/error.c
reftable/reftable-error.h
reftable/stack.c
reftable/stack_test.c

index 0d1766735e8ff0f1c5c057d1882728aa4292d1ee..cfb7a0fda4a24dc190892b22cffc713c3e41c2a3 100644 (file)
@@ -22,7 +22,7 @@ const char *reftable_error_str(int err)
        case REFTABLE_NOT_EXIST_ERROR:
                return "file does not exist";
        case REFTABLE_LOCK_ERROR:
-               return "data is outdated";
+               return "data is locked";
        case REFTABLE_API_ERROR:
                return "misuse of the reftable API";
        case REFTABLE_ZLIB_ERROR:
@@ -35,6 +35,8 @@ const char *reftable_error_str(int err)
                return "invalid refname";
        case REFTABLE_ENTRY_TOO_BIG_ERROR:
                return "entry too large";
+       case REFTABLE_OUTDATED_ERROR:
+               return "data concurrently modified";
        case -1:
                return "general error";
        default:
index 4c457aaaf8906384e65edfeb06057a86dcb594e4..e9b07c9f3623ec69db5447ced5474993f7b98d0f 100644 (file)
@@ -25,7 +25,7 @@ enum reftable_error {
         */
        REFTABLE_NOT_EXIST_ERROR = -4,
 
-       /* Trying to write out-of-date data. */
+       /* Trying to access locked data. */
        REFTABLE_LOCK_ERROR = -5,
 
        /* Misuse of the API:
@@ -57,6 +57,9 @@ enum reftable_error {
        /* Entry does not fit. This can happen when writing outsize reflog
           messages. */
        REFTABLE_ENTRY_TOO_BIG_ERROR = -11,
+
+       /* Trying to write out-of-date data. */
+       REFTABLE_OUTDATED_ERROR = -12,
 };
 
 /* convert the numeric error code to a string. The string should not be
index 92d9a7facb0ffcec02f4dc050c2b874d36602c55..eaa8bb9c99fe924eb6131d86405e0a19051959fc 100644 (file)
@@ -529,9 +529,9 @@ int reftable_stack_add(struct reftable_stack *st,
 {
        int err = stack_try_add(st, write, arg);
        if (err < 0) {
-               if (err == REFTABLE_LOCK_ERROR) {
+               if (err == REFTABLE_OUTDATED_ERROR) {
                        /* Ignore error return, we want to propagate
-                          REFTABLE_LOCK_ERROR.
+                          REFTABLE_OUTDATED_ERROR.
                        */
                        reftable_stack_reload(st);
                }
@@ -591,7 +591,7 @@ static int reftable_stack_init_addition(struct reftable_addition *add,
        if (err < 0)
                goto done;
        if (err > 0) {
-               err = REFTABLE_LOCK_ERROR;
+               err = REFTABLE_OUTDATED_ERROR;
                goto done;
        }
 
index 509f4866236024f5546100da7121996f1c963e08..b0c7041a4fa6b1565a87bd7859a97260c484f365 100644 (file)
@@ -232,7 +232,7 @@ static void test_reftable_stack_uptodate(void)
        EXPECT_ERR(err);
 
        err = reftable_stack_add(st2, &write_test_ref, &ref2);
-       EXPECT(err == REFTABLE_LOCK_ERROR);
+       EXPECT(err == REFTABLE_OUTDATED_ERROR);
 
        err = reftable_stack_reload(st2);
        EXPECT_ERR(err);