Skip to content

Commit

Permalink
test-dump-cache-tree: validate the cached data as well.
Browse files Browse the repository at this point in the history
While dumping the cached data, try recomputing everything from
scratch to make sure things match.

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Apr 27, 2006
1 parent 2956dd3 commit d2cb7c6
Showing 1 changed file with 45 additions and 11 deletions.
56 changes: 45 additions & 11 deletions dump-cache-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,64 @@
#include "tree.h"
#include "cache-tree.h"

static void dump_cache_tree(struct cache_tree *it, const char *pfx)

static void dump_one(struct cache_tree *it, const char *pfx, const char *x)
{
if (it->entry_count < 0)
printf("%-40s %s%s (%d subtrees)\n",
"invalid", x, pfx, it->subtree_nr);
else
printf("%s %s%s (%d entries, %d subtrees)\n",
sha1_to_hex(it->sha1), x, pfx,
it->entry_count, it->subtree_nr);
}

static int dump_cache_tree(struct cache_tree *it,
struct cache_tree *ref,
const char *pfx)
{
int i;
int errs = 0;

if (!it)
return;
if (it->entry_count < 0)
printf("%-40s %s (%d subtrees)\n", "invalid", pfx,
it->subtree_nr);
else
printf("%s %s (%d entries, %d subtrees)\n",
sha1_to_hex(it->sha1),
pfx, it->entry_count, it->subtree_nr);
if (!ref)
die("internal error");

if (it->entry_count < 0) {
dump_one(it, pfx, "");
dump_one(ref, pfx, "#(ref) ");
if (it->subtree_nr != ref->subtree_nr)
errs = 1;
}
else {
dump_one(it, pfx, "");
if (memcmp(it->sha1, ref->sha1, 20) ||
ref->entry_count != it->entry_count ||
ref->subtree_nr != it->subtree_nr) {
dump_one(ref, pfx, "#(ref) ");
errs = 1;
}
}

for (i = 0; i < it->subtree_nr; i++) {
char path[PATH_MAX];
struct cache_tree_sub *down = it->down[i];
struct cache_tree_sub *rdwn;

rdwn = cache_tree_sub(ref, down->name);
sprintf(path, "%s%.*s/", pfx, down->namelen, down->name);
dump_cache_tree(down->cache_tree, path);
if (dump_cache_tree(down->cache_tree, rdwn->cache_tree, path))
errs = 1;
}
return errs;
}

int main(int ac, char **av)
{
struct cache_tree *another = cache_tree();
if (read_cache() < 0)
die("unable to read index file");
dump_cache_tree(active_cache_tree, "");
return 0;
cache_tree_update(another, active_cache, active_nr, 0, 1);
return dump_cache_tree(active_cache_tree, another, "");
}

0 comments on commit d2cb7c6

Please sign in to comment.