Misc doc improvements
[git.git] / cache-tree.c
index 35740b3..a880c97 100644 (file)
@@ -110,6 +110,10 @@ void cache_tree_invalidate_path(struct cache_tree *it, const char *path)
        int namelen;
        struct cache_tree_sub *down;
 
+#if DEBUG
+       fprintf(stderr, "cache-tree invalidate <%s>\n", path);
+#endif
+
        if (!it)
                return;
        slash = strchr(path, '/');
@@ -226,7 +230,8 @@ static int update_one(struct cache_tree *it,
                      int entries,
                      const char *base,
                      int baselen,
-                     int missing_ok)
+                     int missing_ok,
+                     int dryrun)
 {
        unsigned long size, offset;
        char *buffer;
@@ -273,7 +278,8 @@ static int update_one(struct cache_tree *it,
                                    cache + i, entries - i,
                                    path,
                                    baselen + sublen + 1,
-                                   missing_ok);
+                                   missing_ok,
+                                   dryrun);
                i += subcnt - 1;
                sub->used = 1;
        }
@@ -333,16 +339,23 @@ static int update_one(struct cache_tree *it,
                offset += 20;
 
 #if DEBUG
-               fprintf(stderr, "cache-tree %o %.*s\n",
+               fprintf(stderr, "cache-tree update-one %o %.*s\n",
                        mode, entlen, path + baselen);
 #endif
        }
 
-       write_sha1_file(buffer, offset, tree_type, it->sha1);
+       if (dryrun) {
+               unsigned char hdr[200];
+               int hdrlen;
+               write_sha1_file_prepare(buffer, offset, tree_type, it->sha1,
+                                       hdr, &hdrlen);
+       }
+       else
+               write_sha1_file(buffer, offset, tree_type, it->sha1);
        free(buffer);
        it->entry_count = i;
 #if DEBUG
-       fprintf(stderr, "cache-tree (%d ent, %d subtree) %s\n",
+       fprintf(stderr, "cache-tree update-one (%d ent, %d subtree) %s\n",
                it->entry_count, it->subtree_nr,
                sha1_to_hex(it->sha1));
 #endif
@@ -352,13 +365,14 @@ static int update_one(struct cache_tree *it,
 int cache_tree_update(struct cache_tree *it,
                      struct cache_entry **cache,
                      int entries,
-                     int missing_ok)
+                     int missing_ok,
+                     int dryrun)
 {
        int i;
        i = verify_cache(cache, entries);
        if (i)
                return i;
-       i = update_one(it, cache, entries, "", 0, missing_ok);
+       i = update_one(it, cache, entries, "", 0, missing_ok, dryrun);
        if (i < 0)
                return i;
        return 0;
@@ -430,6 +444,8 @@ static struct cache_tree *read_one(const char **buffer, unsigned long *size_p)
 {
        const char *buf = *buffer;
        unsigned long size = *size_p;
+       const char *cp;
+       char *ep;
        struct cache_tree *it;
        int i, subtree_nr;
 
@@ -443,7 +459,14 @@ static struct cache_tree *read_one(const char **buffer, unsigned long *size_p)
                goto free_return;
        buf++; size--;
        it = cache_tree();
-       if (sscanf(buf, "%d %d\n", &it->entry_count, &subtree_nr) != 2)
+
+       cp = buf;
+       it->entry_count = strtol(cp, &ep, 10);
+       if (cp == ep)
+               goto free_return;
+       cp = ep;
+       subtree_nr = strtol(cp, &ep, 10);
+       if (cp == ep)
                goto free_return;
        while (size && *buf && *buf != '\n') {
                size--;