| #ifndef REPACK_H | |
| #define REPACK_H | |
| #include "list-objects-filter-options.h" | |
| #include "string-list.h" | |
| #include "oidset.h" | |
| struct pack_objects_args { | |
| char *window; | |
| char *window_memory; | |
| char *depth; | |
| char *threads; | |
| unsigned long max_pack_size; | |
| int no_reuse_delta; | |
| int no_reuse_object; | |
| int quiet; | |
| int local; | |
| int name_hash_version; | |
| int path_walk; | |
| int delta_base_offset; | |
| int pack_kept_objects; | |
| struct list_objects_filter_options filter_options; | |
| }; | |
| #define PACK_OBJECTS_ARGS_INIT { \ | |
| .delta_base_offset = 1, \ | |
| .pack_kept_objects = -1, \ | |
| } | |
| struct child_process; | |
| void prepare_pack_objects(struct child_process *cmd, | |
| const struct pack_objects_args *args, | |
| const char *out); | |
| void pack_objects_args_release(struct pack_objects_args *args); | |
| void repack_remove_redundant_pack(struct repository *repo, const char *dir_name, | |
| const char *base_name, | |
| bool wrote_incremental_midx); | |
| struct write_pack_opts { | |
| struct pack_objects_args *po_args; | |
| const char *destination; | |
| const char *packdir; | |
| const char *packtmp; | |
| }; | |
| const char *write_pack_opts_pack_prefix(const struct write_pack_opts *opts); | |
| bool write_pack_opts_is_local(const struct write_pack_opts *opts); | |
| int finish_pack_objects_cmd(const struct git_hash_algo *algop, | |
| const struct write_pack_opts *opts, | |
| struct child_process *cmd, | |
| struct string_list *names); | |
| struct repository; | |
| struct packed_git; | |
| struct existing_packs { | |
| struct repository *repo; | |
| struct odb_source *source; | |
| struct string_list kept_packs; | |
| struct string_list non_kept_packs; | |
| struct string_list cruft_packs; | |
| struct string_list midx_packs; | |
| }; | |
| #define EXISTING_PACKS_INIT { \ | |
| .kept_packs = STRING_LIST_INIT_DUP, \ | |
| .non_kept_packs = STRING_LIST_INIT_DUP, \ | |
| .cruft_packs = STRING_LIST_INIT_DUP, \ | |
| } | |
| /* | |
| * Adds all packs hex strings (pack-$HASH) to either packs->non_kept | |
| * or packs->kept based on whether each pack has a corresponding | |
| * .keep file or not. Packs without a .keep file are not to be kept | |
| * if we are going to pack everything into one file. | |
| */ | |
| void existing_packs_collect(struct existing_packs *existing, | |
| const struct string_list *extra_keep); | |
| int existing_packs_has_non_kept(const struct existing_packs *existing); | |
| int existing_pack_is_marked_for_deletion(struct string_list_item *item); | |
| void existing_packs_retain_cruft(struct existing_packs *existing, | |
| struct packed_git *cruft); | |
| void existing_packs_mark_for_deletion(struct existing_packs *existing, | |
| struct string_list *names); | |
| void existing_packs_retain_midx_packs(struct existing_packs *existing); | |
| void existing_packs_remove_redundant(struct existing_packs *existing, | |
| const char *packdir, | |
| bool wrote_incremental_midx); | |
| void existing_packs_release(struct existing_packs *existing); | |
| struct generated_pack; | |
| struct generated_pack *generated_pack_populate(const char *name, | |
| const char *packtmp); | |
| int generated_pack_has_ext(const struct generated_pack *pack, const char *ext); | |
| void generated_pack_install(struct generated_pack *pack, const char *name, | |
| const char *packdir, const char *packtmp); | |
| void repack_promisor_objects(struct repository *repo, | |
| const struct pack_objects_args *args, | |
| struct string_list *names, const char *packtmp, | |
| const struct oidset *to_drop); | |
| struct pack_geometry { | |
| struct packed_git **pack; | |
| uint32_t pack_nr, pack_alloc; | |
| uint32_t split; | |
| struct packed_git **promisor_pack; | |
| uint32_t promisor_pack_nr, promisor_pack_alloc; | |
| uint32_t promisor_split; | |
| uint32_t midx_layer_threshold; | |
| bool midx_layer_threshold_set; | |
| bool midx_tip_rewritten; | |
| int split_factor; | |
| }; | |
| void pack_geometry_repack_promisors(struct repository *repo, | |
| const struct pack_objects_args *args, | |
| const struct pack_geometry *geometry, | |
| struct string_list *names, | |
| const char *packtmp); | |
| void pack_geometry_init(struct pack_geometry *geometry, | |
| struct existing_packs *existing, | |
| const struct pack_objects_args *args); | |
| void pack_geometry_split(struct pack_geometry *geometry); | |
| struct packed_git *pack_geometry_preferred_pack(struct pack_geometry *geometry); | |
| void pack_geometry_remove_redundant(struct pack_geometry *geometry, | |
| struct string_list *names, | |
| struct existing_packs *existing, | |
| const char *packdir, | |
| bool wrote_incremental_midx); | |
| void pack_geometry_release(struct pack_geometry *geometry); | |
| struct tempfile; | |
| enum repack_write_midx_mode { | |
| REPACK_WRITE_MIDX_NONE, | |
| REPACK_WRITE_MIDX_DEFAULT, | |
| REPACK_WRITE_MIDX_INCREMENTAL, | |
| }; | |
| struct repack_write_midx_opts { | |
| struct existing_packs *existing; | |
| struct pack_geometry *geometry; | |
| struct string_list *names; | |
| const char *refs_snapshot; | |
| const char *packdir; | |
| int show_progress; | |
| int write_bitmaps; | |
| int midx_must_contain_cruft; | |
| int midx_split_factor; | |
| int midx_new_layer_threshold; | |
| enum repack_write_midx_mode mode; | |
| }; | |
| void midx_snapshot_refs(struct repository *repo, struct tempfile *f); | |
| int repack_write_midx(struct repack_write_midx_opts *opts); | |
| int write_filtered_pack(const struct write_pack_opts *opts, | |
| struct existing_packs *existing, | |
| struct string_list *names); | |
| int enumerate_promisor_blobs(struct repository *repo, | |
| const struct list_objects_filter_options *filter, | |
| struct oidset *to_drop); | |
| int write_cruft_pack(const struct write_pack_opts *opts, | |
| const char *cruft_expiration, | |
| unsigned long combine_cruft_below_size, | |
| struct string_list *names, | |
| struct existing_packs *existing); | |
| #endif /* REPACK_H */ |