refs: specify error for regular refs with old_target
When a reference update tries to update a symref, but the ref in question is actually a regular ref, we raise an error. However the error raised in this situation is: verifying symref target: '<ref>': reference is missing but expected <old-target> which is very generic and doesn't indicate the mismatch of types. Let's make this error more specific: cannot lock ref '<ref>': expected symref with target '<old-target>': but is a regular ref so that users have a clearer understanding. Signed-off-by: Karthik Nayak <karthik.188@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
aba381c090
commit
aa6e99f122
@ -2490,14 +2490,16 @@ static int lock_ref_for_update(struct files_ref_store *refs,
|
||||
|
||||
/*
|
||||
* Even if the ref is a regular ref, if `old_target` is set, we
|
||||
* check the referent value. Ideally `old_target` should only
|
||||
* be set for symrefs, but we're strict about its usage.
|
||||
* fail with an error.
|
||||
*/
|
||||
if (update->old_target) {
|
||||
if (ref_update_check_old_target(referent.buf, update, err)) {
|
||||
ret = TRANSACTION_GENERIC_ERROR;
|
||||
goto out;
|
||||
}
|
||||
strbuf_addf(err, _("cannot lock ref '%s': "
|
||||
"expected symref with target '%s': "
|
||||
"but is a regular ref"),
|
||||
ref_update_original_update_refname(update),
|
||||
update->old_target);
|
||||
ret = TRANSACTION_GENERIC_ERROR;
|
||||
goto out;
|
||||
} else if (check_old_oid(update, &lock->old_oid, err)) {
|
||||
ret = TRANSACTION_GENERIC_ERROR;
|
||||
goto out;
|
||||
|
Reference in New Issue
Block a user