diff options
author | René Scharfe <rene.scharfe@lsrfire.ath.cx> | 2008-07-14 21:22:24 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-07-15 07:18:04 -0700 |
commit | 562e25abea9f1f2d443053279c009a88d81a592b (patch) | |
tree | d9c85fad9ac3f441f39a1644182b8711da63047e /archive.h | |
parent | d53fe8187c38a5a160ef2199a899d9c47ec881b9 (diff) | |
download | git-562e25abea9f1f2d443053279c009a88d81a592b.tar.gz |
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>
Diffstat (limited to 'archive.h')
-rw-r--r-- | archive.h | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -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 */ |