Patrick Steinhardt <ps@xxxxxx> writes: >> + switch (err) { >> + case REF_TRANSACTION_ERROR_NAME_CONFLICT: >> + reason = "refname conflict"; >> + break; >> + case REF_TRANSACTION_ERROR_CREATE_EXISTS: >> + reason = "reference already exists"; >> + break; >> + case REF_TRANSACTION_ERROR_NONEXISTENT_REF: >> + reason = "reference does not exist"; >> + break; >> + case REF_TRANSACTION_ERROR_INCORRECT_OLD_VALUE: >> + reason = "incorrect old value provided"; >> + break; >> + case REF_TRANSACTION_ERROR_INVALID_NEW_VALUE: >> + reason = "invalid new value provided"; >> + break; >> + case REF_TRANSACTION_ERROR_EXPECTED_SYMREF: >> + reason = "expected symref but found regular ref"; >> + break; >> + default: >> + reason = "unkown failure"; >> + } >> + >> + strmap_put(failed_refs, refname, xstrdup(reason)); >> +} > > I'd have expected something like this for git-fetch(1), as well, so that > we don't silently swallow failed ref updates. Would it make sense to > maybe provide an array of reasons by enum so that we can reuse those > messages? Excellent. It does not have to be an array, but a helper function that takes an enum and returns a "const char *".