]> git.ipfire.org Git - thirdparty/git.git/commitdiff
pack-objects: prevent name hash version change
authorDerrick Stolee <stolee@gmail.com>
Mon, 27 Jan 2025 19:02:34 +0000 (19:02 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 27 Jan 2025 21:21:43 +0000 (13:21 -0800)
When the --name-hash-version option is used in 'git pack-objects', it
can change from the initial assignment to when it is used based on
interactions with other arguments. Specifically, when writing or reading
bitmaps, we must force version 1 for now. This could change in the
future when the bitmap format can store a name hash version value,
indicating which was used during the writing of the packfile.

Protect the 'git pack-objects' process from getting confused by failing
with a BUG() statement if the value of the name hash version changes
between calls to pack_name_hash_fn().

Signed-off-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/pack-objects.c

index 8ae77deb92912ad61c74f14fb2edbcfa8cd430d6..fa09a35cf5a5415bfd28467eaf7ab8bf245ab9f5 100644 (file)
@@ -284,6 +284,14 @@ static void validate_name_hash_version(void)
 
 static inline uint32_t pack_name_hash_fn(const char *name)
 {
+       static int seen_version = -1;
+
+       if (seen_version < 0)
+               seen_version = name_hash_version;
+       else if (seen_version != name_hash_version)
+               BUG("name hash version changed from %d to %d mid-process",
+                   seen_version, name_hash_version);
+
        switch (name_hash_version) {
        case 1:
                return pack_name_hash(name);