X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=builtin-tar-tree.c;h=7663b9bd8e5f10ee45e34752f631d435687cf1b3;hb=fb6a9f93d39e4e5fdb83673a927f71a34e9fb7c0;hp=e97e0af985515df14b37a6f0e5cc84b2c943f8c6;hpb=217542640ed219c980fff2b3c307c4520120f20f;p=git.git diff --git a/builtin-tar-tree.c b/builtin-tar-tree.c index e97e0af9..7663b9bd 100644 --- a/builtin-tar-tree.c +++ b/builtin-tar-tree.c @@ -168,8 +168,9 @@ static int get_path_prefix(const struct strbuf *path, int maxlen) int i = path->len; if (i > maxlen) i = maxlen; - while (i > 0 && path->buf[i] != '/') + do { i--; + } while (i > 0 && path->buf[i] != '/'); return i; } @@ -271,30 +272,25 @@ static void write_global_extended_header(const unsigned char *sha1) static void traverse_tree(struct tree_desc *tree, struct strbuf *path) { int pathlen = path->len; + struct name_entry entry; - while (tree->size) { - const char *name; - const unsigned char *sha1; - unsigned mode; + while (tree_entry(tree, &entry)) { void *eltbuf; char elttype[20]; unsigned long eltsize; - sha1 = tree_entry_extract(tree, &name, &mode); - update_tree_entry(tree); - - eltbuf = read_sha1_file(sha1, elttype, &eltsize); + eltbuf = read_sha1_file(entry.sha1, elttype, &eltsize); if (!eltbuf) - die("cannot read %s", sha1_to_hex(sha1)); + die("cannot read %s", sha1_to_hex(entry.sha1)); path->len = pathlen; - strbuf_append_string(path, name); - if (S_ISDIR(mode)) + strbuf_append_string(path, entry.path); + if (S_ISDIR(entry.mode)) strbuf_append_string(path, "/"); - write_entry(sha1, path, mode, eltbuf, eltsize); + write_entry(entry.sha1, path, entry.mode, eltbuf, eltsize); - if (S_ISDIR(mode)) { + if (S_ISDIR(entry.mode)) { struct tree_desc subtree; subtree.buf = eltbuf; subtree.size = eltsize; @@ -304,7 +300,7 @@ static void traverse_tree(struct tree_desc *tree, struct strbuf *path) } } -int generate_tar(int argc, const char **argv) +static int generate_tar(int argc, const char **argv, char** envp) { unsigned char sha1[20], tree_sha1[20]; struct commit *commit; @@ -404,5 +400,5 @@ int cmd_tar_tree(int argc, const char **argv, char **envp) usage(tar_tree_usage); if (!strncmp("--remote=", argv[1], 9)) return remote_tar(argc, argv); - return generate_tar(argc, argv); + return generate_tar(argc, argv, envp); }