refs: refactor reference status flags

The reference flags encode information like whether or not a reference is a symbolic reference or whether it may be broken. This information is stored in a `int flags` bitfield, which is in conflict with our modern best practices; we tend to use an unsigned integer to store flags. Change the type of the field to be `unsigned`. While at it, refactor the individual flags to be part of an `enum` instead of using preprocessor defines. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed Oct 23, 2025 at 09:16 UTC eb2934d94b43388642ce4840994800310a6d3456
1 file changed +21 -20
refs.h
+21 -20
@@ -333,27 +333,28 @@ struct ref_transaction;
333 * stored in ref_iterator::flags. Other bits are for internal use
334 * only:
335 */
336 +enum reference_status {
337 + /* Reference is a symbolic reference. */
338 + REF_ISSYMREF = (1 << 0),
339
337 -/* Reference is a symbolic reference. */
338 -#define REF_ISSYMREF 0x01
340 + /* Reference is a packed reference. */
341 + REF_ISPACKED = (1 << 1),
342
340 -/* Reference is a packed reference. */
341 -#define REF_ISPACKED 0x02
342 -
343 -/*
344 - * Reference cannot be resolved to an object name: dangling symbolic
345 - * reference (directly or indirectly), corrupt reference file,
346 - * reference exists but name is bad, or symbolic reference refers to
347 - * ill-formatted reference name.
348 - */
349 -#define REF_ISBROKEN 0x04
343 + /*
344 + * Reference cannot be resolved to an object name: dangling symbolic
345 + * reference (directly or indirectly), corrupt reference file,
346 + * reference exists but name is bad, or symbolic reference refers to
347 + * ill-formatted reference name.
348 + */
349 + REF_ISBROKEN = (1 << 2),
350
351 -/*
352 - * Reference name is not well formed.
353 - *
354 - * See git-check-ref-format(1) for the definition of well formed ref names.
355 - */
356 -#define REF_BAD_NAME 0x08
351 + /*
352 + * Reference name is not well formed.
353 + *
354 + * See git-check-ref-format(1) for the definition of well formed ref names.
355 + */
356 + REF_BAD_NAME = (1 << 3),
357 +};
358
359 /* A reference passed to `for_each_ref()`-style callbacks. */
360 struct reference {
@@ -370,8 +371,8 @@ struct reference {
371 */
372 const struct object_id *oid;
373
373 - /* A bitfield of `REF_` flags. */
374 - int flags;
374 + /* A bitfield of `enum reference_status` flags. */
375 + unsigned flags;
376 };
377
378 /*