mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
archive: centralize archive entry writing
Add the exported function write_archive_entries() to archive.c, which uses the new ability of read_tree_recursive() to pass a context pointer to its callback in order to centralize previously duplicated code. The new callback function write_archive_entry() does the work that every archiver backend needs to do: loading file contents, entering subdirectories, handling file attributes, constructing the full path of the entry. All that done, it calls the backend specific write_archive_entry_fn_t function. Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
d53fe8187c
commit
562e25abea
@@ -20,6 +20,8 @@ typedef int (*write_archive_fn_t)(struct archiver_args *);
|
||||
|
||||
typedef void *(*parse_extra_args_fn_t)(int argc, const char **argv);
|
||||
|
||||
typedef int (*write_archive_entry_fn_t)(struct archiver_args *args, const unsigned char *sha1, const char *path, size_t pathlen, unsigned int mode, void *buffer, unsigned long size);
|
||||
|
||||
struct archiver {
|
||||
const char *name;
|
||||
write_archive_fn_t write_archive;
|
||||
@@ -44,4 +46,6 @@ extern void *parse_extra_zip_args(int argc, const char **argv);
|
||||
extern void *sha1_file_to_archive(const char *path, const unsigned char *sha1, unsigned int mode, enum object_type *type, unsigned long *size, const struct commit *commit);
|
||||
extern int is_archive_path_ignored(const char *path);
|
||||
|
||||
extern int write_archive_entries(struct archiver_args *args, write_archive_entry_fn_t write_entry);
|
||||
|
||||
#endif /* ARCHIVE_H */
|
||||
|
||||
Reference in New Issue
Block a user