Browse Source

midx.c: respect 'pack.writeBitmapHashcache' when writing bitmaps

In the previous commit, the bitmap writing code learned to propagate
values from an existing hash-cache extension into the bitmap that it is
writing.

Now that that functionality exists, let's expose it by teaching the 'git
multi-pack-index' builtin to respect the `pack.writeBitmapHashCache`
option so that the hash-cache may be written at all.

Two minor points worth noting here:

  - The 'git multi-pack-index write' sub-command didn't previously read
    any configuration (instead this is handled in the base command). A
    separate handler is added here to respect this write-specific
    config option.

  - I briefly considered adding a 'bitmap_flags' field to the static
    options struct, but decided against it since it would require
    plumbing through a new parameter to the write_midx_file() function.

    Instead, a new MIDX-specific flag is added, which is translated to
    the corresponding bitmap one.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Taylor Blau 3 years ago committed by Junio C Hamano
parent
commit
caca3c9f07
  1. 4
      Documentation/config/pack.txt
  2. 21
      builtin/multi-pack-index.c
  3. 6
      midx.c
  4. 1
      midx.h

4
Documentation/config/pack.txt

@ -159,6 +159,10 @@ pack.writeBitmapHashCache::
between an older, bitmapped pack and objects that have been between an older, bitmapped pack and objects that have been
pushed since the last gc). The downside is that it consumes 4 pushed since the last gc). The downside is that it consumes 4
bytes per object of disk space. Defaults to true. bytes per object of disk space. Defaults to true.
+
When writing a multi-pack reachability bitmap, no new namehashes are
computed; instead, any namehashes stored in an existing bitmap are
permuted into their appropriate location when writing a new bitmap.


pack.writeReverseIndex:: pack.writeReverseIndex::
When true, git will write a corresponding .rev file (see: When true, git will write a corresponding .rev file (see:

21
builtin/multi-pack-index.c

@ -61,6 +61,23 @@ static struct option *add_common_options(struct option *prev)
return parse_options_concat(common_opts, prev); return parse_options_concat(common_opts, prev);
} }


static int git_multi_pack_index_write_config(const char *var, const char *value,
void *cb)
{
if (!strcmp(var, "pack.writebitmaphashcache")) {
if (git_config_bool(var, value))
opts.flags |= MIDX_WRITE_BITMAP_HASH_CACHE;
else
opts.flags &= ~MIDX_WRITE_BITMAP_HASH_CACHE;
}

/*
* We should never make a fall-back call to 'git_default_config', since
* this was already called in 'cmd_multi_pack_index()'.
*/
return 0;
}

static int cmd_multi_pack_index_write(int argc, const char **argv) static int cmd_multi_pack_index_write(int argc, const char **argv)
{ {
struct option *options; struct option *options;
@ -73,6 +90,10 @@ static int cmd_multi_pack_index_write(int argc, const char **argv)
OPT_END(), OPT_END(),
}; };


opts.flags |= MIDX_WRITE_BITMAP_HASH_CACHE;

git_config(git_multi_pack_index_write_config, NULL);

options = add_common_options(builtin_multi_pack_index_write_options); options = add_common_options(builtin_multi_pack_index_write_options);


trace2_cmd_mode(argv[0]); trace2_cmd_mode(argv[0]);

6
midx.c

@ -1008,9 +1008,13 @@ static int write_midx_bitmap(char *midx_name, unsigned char *midx_hash,
struct pack_idx_entry **index; struct pack_idx_entry **index;
struct commit **commits = NULL; struct commit **commits = NULL;
uint32_t i, commits_nr; uint32_t i, commits_nr;
uint16_t options = 0;
char *bitmap_name = xstrfmt("%s-%s.bitmap", midx_name, hash_to_hex(midx_hash)); char *bitmap_name = xstrfmt("%s-%s.bitmap", midx_name, hash_to_hex(midx_hash));
int ret; int ret;


if (flags & MIDX_WRITE_BITMAP_HASH_CACHE)
options |= BITMAP_OPT_HASH_CACHE;

prepare_midx_packing_data(&pdata, ctx); prepare_midx_packing_data(&pdata, ctx);


commits = find_commits_for_midx_bitmap(&commits_nr, ctx); commits = find_commits_for_midx_bitmap(&commits_nr, ctx);
@ -1049,7 +1053,7 @@ static int write_midx_bitmap(char *midx_name, unsigned char *midx_hash,
goto cleanup; goto cleanup;


bitmap_writer_set_checksum(midx_hash); bitmap_writer_set_checksum(midx_hash);
bitmap_writer_finish(index, pdata.nr_objects, bitmap_name, 0); bitmap_writer_finish(index, pdata.nr_objects, bitmap_name, options);


cleanup: cleanup:
free(index); free(index);

1
midx.h

@ -44,6 +44,7 @@ struct multi_pack_index {
#define MIDX_PROGRESS (1 << 0) #define MIDX_PROGRESS (1 << 0)
#define MIDX_WRITE_REV_INDEX (1 << 1) #define MIDX_WRITE_REV_INDEX (1 << 1)
#define MIDX_WRITE_BITMAP (1 << 2) #define MIDX_WRITE_BITMAP (1 << 2)
#define MIDX_WRITE_BITMAP_HASH_CACHE (1 << 3)


const unsigned char *get_midx_checksum(struct multi_pack_index *m); const unsigned char *get_midx_checksum(struct multi_pack_index *m);
char *get_midx_filename(const char *object_dir); char *get_midx_filename(const char *object_dir);

Loading…
Cancel
Save