Merge branch 'kn/midx-wo-the-repository'
Yet another "pass the repository through the callchain" topic. * kn/midx-wo-the-repository: midx: inline the `MIDX_MIN_SIZE` definition midx: pass down `hash_algo` to functions using global variables midx: pass `repository` to `load_multi_pack_index` midx: cleanup internal usage of `the_repository` and `the_hash_algo` midx-write: pass down repository to `write_midx_file[_only]` write-midx: add repository field to `write_midx_context` midx-write: use `revs->repo` inside `read_refs_snapshot` midx-write: pass down repository to static functions packfile.c: remove unnecessary prepare_packed_git() call midx: add repository to `multi_pack_index` struct config: make `packed_git_(limit|window_size)` non-global variables config: make `delta_base_cache_limit` a non-global variable packfile: pass down repository to `for_each_packed_object` packfile: pass down repository to `has_object[_kept]_pack` packfile: pass down repository to `odb_pack_name` packfile: pass `repository` to static function in the file packfile: use `repository` from `packed_git` directly packfile: add repository to struct `packed_git`
This commit is contained in:
@ -1,5 +1,3 @@
|
||||
#define USE_THE_REPOSITORY_VARIABLE
|
||||
|
||||
#include "git-compat-util.h"
|
||||
#include "commit.h"
|
||||
#include "gettext.h"
|
||||
@ -177,12 +175,21 @@ static uint32_t bitmap_num_objects(struct bitmap_index *index)
|
||||
return index->pack->num_objects;
|
||||
}
|
||||
|
||||
static struct repository *bitmap_repo(struct bitmap_index *bitmap_git)
|
||||
{
|
||||
if (bitmap_is_midx(bitmap_git))
|
||||
return bitmap_git->midx->repo;
|
||||
return bitmap_git->pack->repo;
|
||||
}
|
||||
|
||||
static int load_bitmap_header(struct bitmap_index *index)
|
||||
{
|
||||
struct bitmap_disk_header *header = (void *)index->map;
|
||||
size_t header_size = sizeof(*header) - GIT_MAX_RAWSZ + the_hash_algo->rawsz;
|
||||
const struct git_hash_algo *hash_algo = bitmap_repo(index)->hash_algo;
|
||||
|
||||
if (index->map_size < header_size + the_hash_algo->rawsz)
|
||||
size_t header_size = sizeof(*header) - GIT_MAX_RAWSZ + hash_algo->rawsz;
|
||||
|
||||
if (index->map_size < header_size + hash_algo->rawsz)
|
||||
return error(_("corrupted bitmap index (too small)"));
|
||||
|
||||
if (memcmp(header->magic, BITMAP_IDX_SIGNATURE, sizeof(BITMAP_IDX_SIGNATURE)) != 0)
|
||||
@ -196,7 +203,7 @@ static int load_bitmap_header(struct bitmap_index *index)
|
||||
{
|
||||
uint32_t flags = ntohs(header->options);
|
||||
size_t cache_size = st_mult(bitmap_num_objects(index), sizeof(uint32_t));
|
||||
unsigned char *index_end = index->map + index->map_size - the_hash_algo->rawsz;
|
||||
unsigned char *index_end = index->map + index->map_size - hash_algo->rawsz;
|
||||
|
||||
if ((flags & BITMAP_OPT_FULL_DAG) == 0)
|
||||
BUG("unsupported options for bitmap index file "
|
||||
@ -368,8 +375,8 @@ static int load_bitmap_entries_v1(struct bitmap_index *index)
|
||||
char *midx_bitmap_filename(struct multi_pack_index *midx)
|
||||
{
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
get_midx_filename_ext(&buf, midx->object_dir, get_midx_checksum(midx),
|
||||
MIDX_EXT_BITMAP);
|
||||
get_midx_filename_ext(midx->repo->hash_algo, &buf, midx->object_dir,
|
||||
get_midx_checksum(midx), MIDX_EXT_BITMAP);
|
||||
|
||||
return strbuf_detach(&buf, NULL);
|
||||
}
|
||||
@ -408,8 +415,8 @@ static int open_midx_bitmap_1(struct bitmap_index *bitmap_git,
|
||||
|
||||
if (bitmap_git->pack || bitmap_git->midx) {
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
get_midx_filename(&buf, midx->object_dir);
|
||||
trace2_data_string("bitmap", the_repository,
|
||||
get_midx_filename(midx->repo->hash_algo, &buf, midx->object_dir);
|
||||
trace2_data_string("bitmap", bitmap_repo(bitmap_git),
|
||||
"ignoring extra midx bitmap file", buf.buf);
|
||||
close(fd);
|
||||
strbuf_release(&buf);
|
||||
@ -427,7 +434,7 @@ static int open_midx_bitmap_1(struct bitmap_index *bitmap_git,
|
||||
goto cleanup;
|
||||
|
||||
if (!hasheq(get_midx_checksum(bitmap_git->midx), bitmap_git->checksum,
|
||||
the_repository->hash_algo)) {
|
||||
bitmap_repo(bitmap_git)->hash_algo)) {
|
||||
error(_("checksum doesn't match in MIDX and bitmap"));
|
||||
goto cleanup;
|
||||
}
|
||||
@ -438,7 +445,9 @@ static int open_midx_bitmap_1(struct bitmap_index *bitmap_git,
|
||||
}
|
||||
|
||||
for (i = 0; i < bitmap_git->midx->num_packs; i++) {
|
||||
if (prepare_midx_pack(the_repository, bitmap_git->midx, i)) {
|
||||
if (prepare_midx_pack(bitmap_repo(bitmap_git),
|
||||
bitmap_git->midx,
|
||||
i)) {
|
||||
warning(_("could not open pack %s"),
|
||||
bitmap_git->midx->pack_names[i]);
|
||||
goto cleanup;
|
||||
@ -492,8 +501,9 @@ static int open_pack_bitmap_1(struct bitmap_index *bitmap_git, struct packed_git
|
||||
}
|
||||
|
||||
if (bitmap_git->pack || bitmap_git->midx) {
|
||||
trace2_data_string("bitmap", the_repository,
|
||||
"ignoring extra bitmap file", packfile->pack_name);
|
||||
trace2_data_string("bitmap", bitmap_repo(bitmap_git),
|
||||
"ignoring extra bitmap file",
|
||||
packfile->pack_name);
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
@ -518,8 +528,8 @@ static int open_pack_bitmap_1(struct bitmap_index *bitmap_git, struct packed_git
|
||||
return -1;
|
||||
}
|
||||
|
||||
trace2_data_string("bitmap", the_repository, "opened bitmap file",
|
||||
packfile->pack_name);
|
||||
trace2_data_string("bitmap", bitmap_repo(bitmap_git),
|
||||
"opened bitmap file", packfile->pack_name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -649,7 +659,7 @@ struct bitmap_index *prepare_bitmap_git(struct repository *r)
|
||||
|
||||
struct bitmap_index *prepare_midx_bitmap_git(struct multi_pack_index *midx)
|
||||
{
|
||||
struct repository *r = the_repository;
|
||||
struct repository *r = midx->repo;
|
||||
struct bitmap_index *bitmap_git = xcalloc(1, sizeof(*bitmap_git));
|
||||
|
||||
if (!open_midx_bitmap_1(bitmap_git, midx) && !load_bitmap(r, bitmap_git))
|
||||
@ -1213,6 +1223,7 @@ static struct bitmap *find_boundary_objects(struct bitmap_index *bitmap_git,
|
||||
{
|
||||
struct bitmap_boundary_cb cb;
|
||||
struct object_list *root;
|
||||
struct repository *repo;
|
||||
unsigned int i;
|
||||
unsigned int tmp_blobs, tmp_trees, tmp_tags;
|
||||
int any_missing = 0;
|
||||
@ -1222,6 +1233,8 @@ static struct bitmap *find_boundary_objects(struct bitmap_index *bitmap_git,
|
||||
cb.base = bitmap_new();
|
||||
object_array_init(&cb.boundary);
|
||||
|
||||
repo = bitmap_repo(bitmap_git);
|
||||
|
||||
revs->ignore_missing_links = 1;
|
||||
|
||||
if (bitmap_git->pseudo_merges.nr) {
|
||||
@ -1280,19 +1293,19 @@ static struct bitmap *find_boundary_objects(struct bitmap_index *bitmap_git,
|
||||
* revision walk to (a) OR in any bitmaps that are UNINTERESTING
|
||||
* between the tips and boundary, and (b) record the boundary.
|
||||
*/
|
||||
trace2_region_enter("pack-bitmap", "boundary-prepare", the_repository);
|
||||
trace2_region_enter("pack-bitmap", "boundary-prepare", repo);
|
||||
if (prepare_revision_walk(revs))
|
||||
die("revision walk setup failed");
|
||||
trace2_region_leave("pack-bitmap", "boundary-prepare", the_repository);
|
||||
trace2_region_leave("pack-bitmap", "boundary-prepare", repo);
|
||||
|
||||
trace2_region_enter("pack-bitmap", "boundary-traverse", the_repository);
|
||||
trace2_region_enter("pack-bitmap", "boundary-traverse", repo);
|
||||
revs->boundary = 1;
|
||||
traverse_commit_list_filtered(revs,
|
||||
show_boundary_commit,
|
||||
show_boundary_object,
|
||||
&cb, NULL);
|
||||
revs->boundary = 0;
|
||||
trace2_region_leave("pack-bitmap", "boundary-traverse", the_repository);
|
||||
trace2_region_leave("pack-bitmap", "boundary-traverse", repo);
|
||||
|
||||
revs->blob_objects = tmp_blobs;
|
||||
revs->tree_objects = tmp_trees;
|
||||
@ -1304,7 +1317,7 @@ static struct bitmap *find_boundary_objects(struct bitmap_index *bitmap_git,
|
||||
/*
|
||||
* Then add the boundary commit(s) as fill-in traversal tips.
|
||||
*/
|
||||
trace2_region_enter("pack-bitmap", "boundary-fill-in", the_repository);
|
||||
trace2_region_enter("pack-bitmap", "boundary-fill-in", repo);
|
||||
for (i = 0; i < cb.boundary.nr; i++) {
|
||||
struct object *obj = cb.boundary.objects[i].item;
|
||||
if (bitmap_walk_contains(bitmap_git, cb.base, &obj->oid))
|
||||
@ -1314,7 +1327,7 @@ static struct bitmap *find_boundary_objects(struct bitmap_index *bitmap_git,
|
||||
}
|
||||
if (revs->pending.nr)
|
||||
cb.base = fill_in_bitmap(bitmap_git, revs, cb.base, NULL);
|
||||
trace2_region_leave("pack-bitmap", "boundary-fill-in", the_repository);
|
||||
trace2_region_leave("pack-bitmap", "boundary-fill-in", repo);
|
||||
|
||||
cleanup:
|
||||
object_array_clear(&cb.boundary);
|
||||
@ -1718,7 +1731,8 @@ static unsigned long get_size_by_pos(struct bitmap_index *bitmap_git,
|
||||
ofs = pack_pos_to_offset(pack, pos);
|
||||
}
|
||||
|
||||
if (packed_object_info(the_repository, pack, ofs, &oi) < 0) {
|
||||
if (packed_object_info(bitmap_repo(bitmap_git), pack, ofs,
|
||||
&oi) < 0) {
|
||||
struct object_id oid;
|
||||
nth_bitmap_object_oid(bitmap_git, &oid,
|
||||
pack_pos_to_index(pack, pos));
|
||||
@ -1727,7 +1741,8 @@ static unsigned long get_size_by_pos(struct bitmap_index *bitmap_git,
|
||||
} else {
|
||||
struct eindex *eindex = &bitmap_git->ext_index;
|
||||
struct object *obj = eindex->objects[pos - bitmap_num_objects(bitmap_git)];
|
||||
if (oid_object_info_extended(the_repository, &obj->oid, &oi, 0) < 0)
|
||||
if (oid_object_info_extended(bitmap_repo(bitmap_git), &obj->oid,
|
||||
&oi, 0) < 0)
|
||||
die(_("unable to get size of %s"), oid_to_hex(&obj->oid));
|
||||
}
|
||||
|
||||
@ -1889,7 +1904,8 @@ static void filter_packed_objects_from_bitmap(struct bitmap_index *bitmap_git,
|
||||
bitmap_unset(result, i);
|
||||
|
||||
for (i = 0; i < eindex->count; ++i) {
|
||||
if (has_object_pack(&eindex->objects[i]->oid))
|
||||
if (has_object_pack(bitmap_repo(bitmap_git),
|
||||
&eindex->objects[i]->oid))
|
||||
bitmap_unset(result, objects_nr + i);
|
||||
}
|
||||
}
|
||||
@ -1907,6 +1923,7 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
|
||||
struct bitmap *haves_bitmap = NULL;
|
||||
|
||||
struct bitmap_index *bitmap_git;
|
||||
struct repository *repo;
|
||||
|
||||
/*
|
||||
* We can't do pathspec limiting with bitmaps, because we don't know
|
||||
@ -1980,18 +1997,20 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
|
||||
if (!use_boundary_traversal)
|
||||
object_array_clear(&revs->pending);
|
||||
|
||||
repo = bitmap_repo(bitmap_git);
|
||||
|
||||
if (haves) {
|
||||
if (use_boundary_traversal) {
|
||||
trace2_region_enter("pack-bitmap", "haves/boundary", the_repository);
|
||||
trace2_region_enter("pack-bitmap", "haves/boundary", repo);
|
||||
haves_bitmap = find_boundary_objects(bitmap_git, revs, haves);
|
||||
trace2_region_leave("pack-bitmap", "haves/boundary", the_repository);
|
||||
trace2_region_leave("pack-bitmap", "haves/boundary", repo);
|
||||
} else {
|
||||
trace2_region_enter("pack-bitmap", "haves/classic", the_repository);
|
||||
trace2_region_enter("pack-bitmap", "haves/classic", repo);
|
||||
revs->ignore_missing_links = 1;
|
||||
haves_bitmap = find_objects(bitmap_git, revs, haves, NULL);
|
||||
reset_revision_walk();
|
||||
revs->ignore_missing_links = 0;
|
||||
trace2_region_leave("pack-bitmap", "haves/classic", the_repository);
|
||||
trace2_region_leave("pack-bitmap", "haves/classic", repo);
|
||||
}
|
||||
|
||||
if (!haves_bitmap)
|
||||
@ -2025,17 +2044,17 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
|
||||
object_list_free(&wants);
|
||||
object_list_free(&haves);
|
||||
|
||||
trace2_data_intmax("bitmap", the_repository, "pseudo_merges_satisfied",
|
||||
trace2_data_intmax("bitmap", repo, "pseudo_merges_satisfied",
|
||||
pseudo_merges_satisfied_nr);
|
||||
trace2_data_intmax("bitmap", the_repository, "pseudo_merges_cascades",
|
||||
trace2_data_intmax("bitmap", repo, "pseudo_merges_cascades",
|
||||
pseudo_merges_cascades_nr);
|
||||
trace2_data_intmax("bitmap", the_repository, "bitmap/hits",
|
||||
trace2_data_intmax("bitmap", repo, "bitmap/hits",
|
||||
existing_bitmaps_hits_nr);
|
||||
trace2_data_intmax("bitmap", the_repository, "bitmap/misses",
|
||||
trace2_data_intmax("bitmap", repo, "bitmap/misses",
|
||||
existing_bitmaps_misses_nr);
|
||||
trace2_data_intmax("bitmap", the_repository, "bitmap/roots_with_bitmap",
|
||||
trace2_data_intmax("bitmap", repo, "bitmap/roots_with_bitmap",
|
||||
roots_with_bitmaps_nr);
|
||||
trace2_data_intmax("bitmap", the_repository, "bitmap/roots_without_bitmap",
|
||||
trace2_data_intmax("bitmap", repo, "bitmap/roots_without_bitmap",
|
||||
roots_without_bitmaps_nr);
|
||||
|
||||
return bitmap_git;
|
||||
@ -2256,7 +2275,7 @@ void reuse_partial_packfile_from_bitmap(struct bitmap_index *bitmap_git,
|
||||
struct bitmap **reuse_out,
|
||||
int multi_pack_reuse)
|
||||
{
|
||||
struct repository *r = the_repository;
|
||||
struct repository *r = bitmap_repo(bitmap_git);
|
||||
struct bitmapped_pack *packs = NULL;
|
||||
struct bitmap *result = bitmap_git->result;
|
||||
struct bitmap *reuse;
|
||||
@ -2792,7 +2811,7 @@ int rebuild_bitmap(const uint32_t *reposition,
|
||||
uint32_t *create_bitmap_mapping(struct bitmap_index *bitmap_git,
|
||||
struct packing_data *mapping)
|
||||
{
|
||||
struct repository *r = the_repository;
|
||||
struct repository *r = bitmap_repo(bitmap_git);
|
||||
uint32_t i, num_objects;
|
||||
uint32_t *reposition;
|
||||
|
||||
@ -2948,7 +2967,8 @@ static off_t get_disk_usage_for_extended(struct bitmap_index *bitmap_git)
|
||||
st_add(bitmap_num_objects(bitmap_git), i)))
|
||||
continue;
|
||||
|
||||
if (oid_object_info_extended(the_repository, &obj->oid, &oi, 0) < 0)
|
||||
if (oid_object_info_extended(bitmap_repo(bitmap_git), &obj->oid,
|
||||
&oi, 0) < 0)
|
||||
die(_("unable to get disk usage of '%s'"),
|
||||
oid_to_hex(&obj->oid));
|
||||
|
||||
|
Reference in New Issue
Block a user