blob: 8684cf0fefe81dbc5aa32b6c48203c12ae2c12da [file] [log] [blame]
Ramsay Jones0009d352018-10-17 23:13:26 +01001#ifndef MIDX_H
2#define MIDX_H
Derrick Stoleea3407732018-07-12 15:39:21 -04003
Derrick Stoleec4d25222018-07-12 15:39:33 -04004#include "repository.h"
5
Ramsay Jones642e5702018-09-19 01:13:36 +01006struct object_id;
7struct pack_entry;
Derrick Stolee64404a22019-04-29 09:18:55 -07008struct repository;
Ramsay Jones642e5702018-09-19 01:13:36 +01009
Derrick Stolee0465a502018-10-12 10:34:20 -070010#define GIT_TEST_MULTI_PACK_INDEX "GIT_TEST_MULTI_PACK_INDEX"
11
Derrick Stolee4d805602018-07-12 15:39:23 -040012struct multi_pack_index {
Derrick Stoleec4d25222018-07-12 15:39:33 -040013 struct multi_pack_index *next;
14
Derrick Stolee4d805602018-07-12 15:39:23 -040015 const unsigned char *data;
16 size_t data_len;
17
Taylor Blauf8940812021-03-30 11:04:26 -040018 const uint32_t *revindex_data;
19 const uint32_t *revindex_map;
20 size_t revindex_len;
21
Derrick Stolee4d805602018-07-12 15:39:23 -040022 uint32_t signature;
23 unsigned char version;
24 unsigned char hash_len;
25 unsigned char num_chunks;
26 uint32_t num_packs;
27 uint32_t num_objects;
28
Derrick Stolee2cf489a2018-08-20 16:51:55 +000029 int local;
30
Derrick Stolee32f3c542018-07-12 15:39:27 -040031 const unsigned char *chunk_pack_names;
Derrick Stoleed7cacf22018-07-12 15:39:31 -040032 const uint32_t *chunk_oid_fanout;
Derrick Stolee0d5b3a52018-07-12 15:39:30 -040033 const unsigned char *chunk_oid_lookup;
Derrick Stolee662148c2018-07-12 15:39:32 -040034 const unsigned char *chunk_object_offsets;
35 const unsigned char *chunk_large_offsets;
Derrick Stolee32f3c542018-07-12 15:39:27 -040036
Derrick Stolee32275652018-07-12 15:39:28 -040037 const char **pack_names;
Derrick Stolee3715a632018-07-12 15:39:34 -040038 struct packed_git **packs;
Derrick Stolee4d805602018-07-12 15:39:23 -040039 char object_dir[FLEX_ARRAY];
40};
41
William Bakerefbc3ae2019-10-21 18:39:58 +000042#define MIDX_PROGRESS (1 << 0)
Taylor Blau38ff7ca2021-03-30 11:04:32 -040043#define MIDX_WRITE_REV_INDEX (1 << 1)
William Bakerefbc3ae2019-10-21 18:39:58 +000044
Taylor Blauf8940812021-03-30 11:04:26 -040045char *get_midx_rev_filename(struct multi_pack_index *m);
46
Derrick Stolee2cf489a2018-08-20 16:51:55 +000047struct multi_pack_index *load_multi_pack_index(const char *object_dir, int local);
Derrick Stolee64404a22019-04-29 09:18:55 -070048int prepare_midx_pack(struct repository *r, struct multi_pack_index *m, uint32_t pack_int_id);
Derrick Stolee3715a632018-07-12 15:39:34 -040049int bsearch_midx(const struct object_id *oid, struct multi_pack_index *m, uint32_t *result);
Taylor Blau62f2c1b2021-03-30 11:04:20 -040050off_t nth_midxed_offset(struct multi_pack_index *m, uint32_t pos);
51uint32_t nth_midxed_pack_int_id(struct multi_pack_index *m, uint32_t pos);
Derrick Stolee8aac67a2018-07-12 15:39:35 -040052struct object_id *nth_midxed_object_oid(struct object_id *oid,
53 struct multi_pack_index *m,
54 uint32_t n);
Derrick Stolee64404a22019-04-29 09:18:55 -070055int fill_midx_entry(struct repository *r, const struct object_id *oid, struct pack_entry *e, struct multi_pack_index *m);
Jeff King013fd7a2019-04-05 14:06:04 -040056int midx_contains_pack(struct multi_pack_index *m, const char *idx_or_pack_name);
Derrick Stolee2cf489a2018-08-20 16:51:55 +000057int prepare_multi_pack_index_one(struct repository *r, const char *object_dir, int local);
Derrick Stolee4d805602018-07-12 15:39:23 -040058
Taylor Blau9218c6a2021-03-30 11:04:11 -040059int write_midx_file(const char *object_dir, const char *preferred_pack_name, unsigned flags);
Derrick Stolee1dcd9f22018-10-12 10:34:19 -070060void clear_midx_file(struct repository *r);
William Bakerefbc3ae2019-10-21 18:39:58 +000061int verify_midx_file(struct repository *r, const char *object_dir, unsigned flags);
62int expire_midx_packs(struct repository *r, const char *object_dir, unsigned flags);
63int midx_repack(struct repository *r, const char *object_dir, size_t batch_size, unsigned flags);
Derrick Stoleea3407732018-07-12 15:39:21 -040064
Derrick Stolee1dcd9f22018-10-12 10:34:19 -070065void close_midx(struct multi_pack_index *m);
Derrick Stoleea3407732018-07-12 15:39:21 -040066
67#endif