Skip to content

Commit

Permalink
pack-objects: prevent name hash version change
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
derrickstolee authored and gitster committed Jan 27, 2025
1 parent 7f98707 commit b4cf684
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions builtin/pack-objects.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit b4cf684

Please sign in to comment.