[PATCH v2 05/10] object-name.c: make dependency on object_type order more obvious
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- Mar 28, 2021, 02:13 UTC
- Message-ID
- <patch-05.11-1ebcf1416b8-20210328T021238Z-avarab@gmail.com>
- In-Reply-To
- <cover-00.11-00000000000-20210328T021238Z-avarab@gmail.com>
Add an assert to make it more obvious that we were effectively hardcoding OBJ_TAG in sort_ambiguous() as "4".
I wrote this code in 5cc044e0257 (get_short_oid: sort ambiguous objects by type, then SHA-1, 2018-05-10), there was already a comment about this magic, but let's make sure that someone doing a potential reordering of "enum object_type" in the future would notice it breaking this function (and probably a bunch of other things...).
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> --- object-name.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/object-name.c b/object-name.c index 4d7f0c66cf2..b6a7328b7a7 100644 --- a/object-name.c +++ b/object-name.c @@ -408,6 +408,8 @@ static int sort_ambiguous(const void *a, const void *b, void *ctx) enum object_type b_type = oid_object_info(sort_ambiguous_repo, b, NULL); enum object_type a_type_sort; enum object_type b_type_sort; + const enum object_type tag_type_offs = OBJ_TAG - OBJ_NONE; + assert(tag_type_offs == 4); /* * Sorts by hash within the same object type, just as @@ -425,8 +427,8 @@ static int sort_ambiguous(const void *a, const void *b, void *ctx) * cleverly) do that with modulus, since the enum assigns 1 to * commit, so tag becomes 0. */ - a_type_sort = a_type % 4; - b_type_sort = b_type % 4; + a_type_sort = a_type % tag_type_offs; + b_type_sort = b_type % tag_type_offs; return a_type_sort > b_type_sort ? 1 : -1; }
-- 2.31.1.442.g6c06c9fe35c