#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(struct write_pack_opts *opts); int write_pack_opts_is_local(struct write_pack_opts *opts); int finish_pack_objects_cmd(const struct git_hash_algo *algop, 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(struct write_pack_opts *opts, struct existing_packs *existing, struct string_list *names); int write_cruft_pack(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 */