Git fork
at reftables-rust 63 lines 1.6 kB view raw
1#ifndef ARCHIVE_H 2#define ARCHIVE_H 3 4#include "pathspec.h" 5#include "string-list.h" 6 7struct repository; 8struct pretty_print_context; 9 10struct archiver_args { 11 struct repository *repo; 12 char *refname; 13 const char *prefix; 14 const char *base; 15 size_t baselen; 16 struct tree *tree; 17 const struct object_id *commit_oid; 18 const struct commit *commit; 19 const char *mtime_option; 20 timestamp_t time; 21 struct pathspec pathspec; 22 unsigned int verbose : 1; 23 unsigned int worktree_attributes : 1; 24 unsigned int convert : 1; 25 int compression_level; 26 struct string_list extra_files; 27 struct pretty_print_context *pretty_ctx; 28}; 29 30/* main api */ 31 32int write_archive(int argc, const char **argv, const char *prefix, 33 struct repository *repo, 34 const char *name_hint, int remote); 35 36const char *archive_format_from_filename(const char *filename); 37 38/* archive backend stuff */ 39 40#define ARCHIVER_WANT_COMPRESSION_LEVELS 1 41#define ARCHIVER_REMOTE 2 42#define ARCHIVER_HIGH_COMPRESSION_LEVELS 4 43struct archiver { 44 const char *name; 45 int (*write_archive)(const struct archiver *, struct archiver_args *); 46 unsigned flags; 47 char *filter_command; 48}; 49void register_archiver(struct archiver *); 50 51void init_tar_archiver(void); 52void init_zip_archiver(void); 53void init_archivers(void); 54 55typedef int (*write_archive_entry_fn_t)(struct archiver_args *args, 56 const struct object_id *oid, 57 const char *path, size_t pathlen, 58 unsigned int mode, 59 void *buffer, unsigned long size); 60 61int write_archive_entries(struct archiver_args *args, write_archive_entry_fn_t write_entry); 62 63#endif /* ARCHIVE_H */