Document git-ls-tree --fullname
[gitweb.git] / builtin-tar-tree.c
index 2d5e06fb692968829df00e7166eaaeb9d5902119..7663b9bd8e5f10ee45e34752f631d435687cf1b3 100644 (file)
@@ -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;