X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=archive-tar.c;h=c0d95dab0d965ff0ae961d72d7eae4c021c5c05a;hb=be6042cfa59358b733b6f9ba05bcbc317998d9fe;hp=33e76576f149d89922deda1de5548be7bc42d0eb;hpb=063581e9b648b4da3b83061b06aed7ed417411e0;p=git.git diff --git a/archive-tar.c b/archive-tar.c index 33e76576f..c0d95dab0 100644 --- a/archive-tar.c +++ b/archive-tar.c @@ -17,6 +17,7 @@ static unsigned long offset; static time_t archive_time; static int tar_umask = 002; static int verbose; +static const struct commit *commit; /* writes out the whole block, but only if it is full */ static void write_if_needed(void) @@ -167,7 +168,7 @@ static void write_entry(const unsigned char *sha1, struct strbuf *path, } else { if (verbose) fprintf(stderr, "%.*s\n", path->len, path->buf); - if (S_ISDIR(mode) || S_ISDIRLNK(mode)) { + if (S_ISDIR(mode) || S_ISGITLINK(mode)) { *header.typeflag = TYPEFLAG_DIR; mode = (mode | 0777) & ~tar_umask; } else if (S_ISLNK(mode)) { @@ -280,12 +281,13 @@ static int write_tar_entry(const unsigned char *sha1, memcpy(path.buf + baselen, filename, filenamelen); path.len = baselen + filenamelen; path.buf[path.len] = '\0'; - if (S_ISDIR(mode) || S_ISDIRLNK(mode)) { + if (S_ISDIR(mode) || S_ISGITLINK(mode)) { strbuf_append_string(&path, "/"); buffer = NULL; size = 0; } else { - buffer = convert_sha1_file(path.buf, sha1, mode, &type, &size); + buffer = sha1_file_to_archive(path.buf, sha1, mode, &type, + &size, commit); if (!buffer) die("cannot read %s", sha1_to_hex(sha1)); } @@ -304,6 +306,7 @@ int write_tar_archive(struct archiver_args *args) archive_time = args->time; verbose = args->verbose; + commit = args->commit; if (args->commit_sha1) write_global_extended_header(args->commit_sha1);