147 lines
4.3 KiB
C
147 lines
4.3 KiB
C
#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 */
|