| #ifndef REPACK_H |
| #define REPACK_H |
| |
| #include "list-objects-filter-options.h" |
| #include "string-list.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); |
| |
| 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 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_remove_redundant(struct existing_packs *existing, |
| const char *packdir); |
| 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); |
| |
| struct pack_geometry { |
| struct packed_git **pack; |
| uint32_t pack_nr, pack_alloc; |
| uint32_t split; |
| |
| int split_factor; |
| }; |
| |
| 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); |
| void pack_geometry_release(struct pack_geometry *geometry); |
| |
| struct tempfile; |
| |
| 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; |
| }; |
| |
| void midx_snapshot_refs(struct repository *repo, struct tempfile *f); |
| int write_midx_included_packs(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 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 */ |