[PATCH v3 7/8] pack-objects: prevent name hash version change
- From
Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Dec 20, 2024, 17:19 UTC
- Message-ID
- <18a41f2fe6f2219f16f998699394005bd57ac463.1734715194.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.1823.v3.git.1734715194.gitgitgadget@gmail.com>
From: Derrick Stolee <stolee@gmail.com>
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> --- builtin/pack-objects.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index b19c3665003..4d10baf7ac9 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -276,6 +276,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:
-- gitgitgadget