Code

add context pointer to read_tree_recursive()
[git.git] / archive-zip.c
index 18c0f8710c6150e3b0211d311a70bf4b34608370..0d24f3fe379417c43f3a48ba7cffc606c90aa9ad 100644 (file)
@@ -152,9 +152,9 @@ static char *construct_path(const char *base, int baselen,
        return path;
 }
 
-static int write_zip_entry(const unsigned char *sha1,
-                           const char *base, int baselen,
-                           const char *filename, unsigned mode, int stage)
+static int write_zip_entry(const unsigned char *sha1, const char *base,
+               int baselen, const char *filename, unsigned mode, int stage,
+               void *context)
 {
        struct zip_local_header header;
        struct zip_dir_header dirent;
@@ -176,6 +176,8 @@ static int write_zip_entry(const unsigned char *sha1,
        crc = crc32(0, NULL, 0);
 
        path = construct_path(base, baselen, filename, S_ISDIR(mode), &pathlen);
+       if (is_archive_path_ignored(path + base_len))
+               return 0;
        if (verbose)
                fprintf(stderr, "%s\n", path);
        if (pathlen > 0xffff) {
@@ -330,11 +332,12 @@ int write_zip_archive(struct archiver_args *args)
 
                while (baselen > 0 && base[baselen - 1] == '/')
                        base[--baselen] = '\0';
-               write_zip_entry(args->tree->object.sha1, "", 0, base, 040777, 0);
+               write_zip_entry(args->tree->object.sha1, "", 0, base, 040777,
+                               0, NULL);
                free(base);
        }
        read_tree_recursive(args->tree, args->base, plen, 0,
-                           args->pathspec, write_zip_entry);
+                           args->pathspec, write_zip_entry, NULL);
        write_zip_trailer(args->commit_sha1);
 
        free(zip_dir);