summaryrefslogtreecommitdiffstats
path: root/refs.c
diff options
context:
space:
mode:
authorKarthik Nayak <karthik.188@gmail.com>2024-12-16 17:44:29 +0100
committerJunio C Hamano <gitster@pobox.com>2024-12-16 18:45:33 +0100
commitadd2c4f6e225083747e86c2e2e89e80c97b28733 (patch)
treeec131901ace098eb90a904332508ba2bf9922f59 /refs.c
parentrefs/files: add count field to ref_lock (diff)
downloadgit-add2c4f6e225083747e86c2e2e89e80c97b28733.tar.xz
git-add2c4f6e225083747e86c2e2e89e80c97b28733.zip
refs: extract out refname verification in transactions
Unless the `REF_SKIP_REFNAME_VERIFICATION` flag is set for an update, the refname of the update is verified for: - Ensuring it is not a pseudoref. - Checking the refname format. These checks will also be needed in a following commit where the function to add reflog updates to the transaction is introduced. Extract the code out into a new static function. Signed-off-by: Karthik Nayak <karthik.188@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'refs.c')
-rw-r--r--refs.c37
1 files changed, 23 insertions, 14 deletions
diff --git a/refs.c b/refs.c
index f003e51c6b..9c9f4940c6 100644
--- a/refs.c
+++ b/refs.c
@@ -1196,6 +1196,28 @@ struct ref_update *ref_transaction_add_update(
return update;
}
+static int transaction_refname_valid(const char *refname,
+ const struct object_id *new_oid,
+ unsigned int flags, struct strbuf *err)
+{
+ if (flags & REF_SKIP_REFNAME_VERIFICATION)
+ return 1;
+
+ if (is_pseudo_ref(refname)) {
+ strbuf_addf(err, _("refusing to update pseudoref '%s'"),
+ refname);
+ return 0;
+ } else if ((new_oid && !is_null_oid(new_oid)) ?
+ check_refname_format(refname, REFNAME_ALLOW_ONELEVEL) :
+ !refname_is_safe(refname)) {
+ strbuf_addf(err, _("refusing to update ref with bad name '%s'"),
+ refname);
+ return 0;
+ }
+
+ return 1;
+}
+
int ref_transaction_update(struct ref_transaction *transaction,
const char *refname,
const struct object_id *new_oid,
@@ -1213,21 +1235,8 @@ int ref_transaction_update(struct ref_transaction *transaction,
return -1;
}
- if (!(flags & REF_SKIP_REFNAME_VERIFICATION) &&
- ((new_oid && !is_null_oid(new_oid)) ?
- check_refname_format(refname, REFNAME_ALLOW_ONELEVEL) :
- !refname_is_safe(refname))) {
- strbuf_addf(err, _("refusing to update ref with bad name '%s'"),
- refname);
+ if (!transaction_refname_valid(refname, new_oid, flags, err))
return -1;
- }
-
- if (!(flags & REF_SKIP_REFNAME_VERIFICATION) &&
- is_pseudo_ref(refname)) {
- strbuf_addf(err, _("refusing to update pseudoref '%s'"),
- refname);
- return -1;
- }
if (flags & ~REF_TRANSACTION_UPDATE_ALLOWED_FLAGS)
BUG("illegal flags 0x%x passed to ref_transaction_update()", flags);