]> git.ipfire.org Git - thirdparty/git.git/blobdiff - archive-tar.c
Merge branch 'sg/bisect-approximately-halfway'
[thirdparty/git.git] / archive-tar.c
index 5ceec3684be910c44216d38e11f240fa4cc22ed3..a971fdc0f6326e0829225d4a2bfe87df48b82a42 100644 (file)
@@ -242,13 +242,12 @@ static void write_extended_header(struct archiver_args *args,
 static int write_tar_entry(struct archiver_args *args,
                           const struct object_id *oid,
                           const char *path, size_t pathlen,
-                          unsigned int mode)
+                          unsigned int mode,
+                          void *buffer, unsigned long size)
 {
        struct ustar_header header;
        struct strbuf ext_header = STRBUF_INIT;
-       unsigned int old_mode = mode;
-       unsigned long size, size_in_header;
-       void *buffer;
+       unsigned long size_in_header;
        int err = 0;
 
        memset(&header, 0, sizeof(header));
@@ -282,20 +281,6 @@ static int write_tar_entry(struct archiver_args *args,
        } else
                memcpy(header.name, path, pathlen);
 
-       if (S_ISREG(mode) && !args->convert &&
-           oid_object_info(args->repo, oid, &size) == OBJ_BLOB &&
-           size > big_file_threshold)
-               buffer = NULL;
-       else if (S_ISLNK(mode) || S_ISREG(mode)) {
-               enum object_type type;
-               buffer = object_file_to_archive(args, path, oid, old_mode, &type, &size);
-               if (!buffer)
-                       return error(_("cannot read %s"), oid_to_hex(oid));
-       } else {
-               buffer = NULL;
-               size = 0;
-       }
-
        if (S_ISLNK(mode)) {
                if (size > sizeof(header.linkname)) {
                        xsnprintf(header.linkname, sizeof(header.linkname),
@@ -326,7 +311,6 @@ static int write_tar_entry(struct archiver_args *args,
                else
                        err = stream_blocked(args->repo, oid);
        }
-       free(buffer);
        return err;
 }
 
@@ -390,7 +374,8 @@ static int tar_filter_config(const char *var, const char *value, void *data)
                ar = xcalloc(1, sizeof(*ar));
                ar->name = xmemdupz(name, namelen);
                ar->write_archive = write_tar_filter_archive;
-               ar->flags = ARCHIVER_WANT_COMPRESSION_LEVELS;
+               ar->flags = ARCHIVER_WANT_COMPRESSION_LEVELS |
+                           ARCHIVER_HIGH_COMPRESSION_LEVELS;
                ALLOC_GROW(tar_filters, nr_tar_filters + 1, alloc_tar_filters);
                tar_filters[nr_tar_filters++] = ar;
        }