rev-tree now handles commit problems better
[git.git] / tar-tree.c
index a09cb41..d313c80 100644 (file)
@@ -1,3 +1,6 @@
+/*
+ * Copyright (c) 2005 Rene Scharfe
+ */
 #include <time.h>
 #include "cache.h"
 
@@ -212,7 +215,7 @@ static void write_extended_header(const char *headerfilename, int is_dir,
                                   const char *path, unsigned int namelen,
                                   void *content, unsigned int contentsize)
 {
-       char *p;
+       char *buffer, *p;
        unsigned int pathlen, size, linkpathlen = 0;
 
        size = pathlen = extended_header_len("path", namelen);
@@ -220,18 +223,19 @@ static void write_extended_header(const char *headerfilename, int is_dir,
                linkpathlen = extended_header_len("linkpath", contentsize);
                size += linkpathlen;
        }
-       if (size > RECORDSIZE)
-               die("tar-tree: extended header too big, wtf?");
        write_header(NULL, TYPEFLAG_EXT_HEADER, NULL, NULL, headerfilename,
                     0100600, NULL, size);
 
-       p = get_record();
+       buffer = p = malloc(size);
+       if (!buffer)
+               die("git-tar-tree: %s", strerror(errno));
        append_extended_header_prefix(&p, pathlen, "path");
        append_path(&p, is_dir, basepath, prefix, path);
        append_char(&p, '\n');
        if (flags & EXT_HEADER_LINKPATH)
                append_extended_header(&p, "linkpath", content, contentsize);
-       write_if_needed();
+       write_blocked(buffer, size);
+       free(buffer);
 }
 
 static void write_global_extended_header(const char *sha1)
@@ -269,9 +273,7 @@ static void write_header(const char *sha1, char typeflag, const char *basepath,
        }
 
        namelen = path_len(S_ISDIR(mode), basepath, prefix, path);
-       if (namelen > 500)
-               die("tar-tree: name too log of object %s\n", sha1_to_hex(sha1));
-       else if (namelen > 100)
+       if (namelen > 100)
                ext_header |= EXT_HEADER_PATH;
        if (typeflag == TYPEFLAG_LNK && size > 100)
                ext_header |= EXT_HEADER_LINKPATH;
@@ -418,10 +420,6 @@ int main(int argc, char **argv)
                usage(tar_tree_usage);
        }
 
-       sha1_file_directory = getenv(DB_ENVIRONMENT);
-       if (!sha1_file_directory)
-               sha1_file_directory = DEFAULT_DB_ENVIRONMENT;
-
        buffer = read_object_with_reference(sha1, "commit", &size, commit_sha1);
        if (buffer) {
                write_global_extended_header(commit_sha1);