test-dump-cache-tree.con commit t0060: add test for prefix_path when path == work tree (e5aa1fc)
   1#include "cache.h"
   2#include "tree.h"
   3#include "cache-tree.h"
   4
   5
   6static void dump_one(struct cache_tree *it, const char *pfx, const char *x)
   7{
   8        if (it->entry_count < 0)
   9                printf("%-40s %s%s (%d subtrees)\n",
  10                       "invalid", x, pfx, it->subtree_nr);
  11        else
  12                printf("%s %s%s (%d entries, %d subtrees)\n",
  13                       sha1_to_hex(it->sha1), x, pfx,
  14                       it->entry_count, it->subtree_nr);
  15}
  16
  17static int dump_cache_tree(struct cache_tree *it,
  18                           struct cache_tree *ref,
  19                           const char *pfx)
  20{
  21        int i;
  22        int errs = 0;
  23
  24        if (!it || !ref)
  25                /* missing in either */
  26                return 0;
  27
  28        if (it->entry_count < 0) {
  29                dump_one(it, pfx, "");
  30                dump_one(ref, pfx, "#(ref) ");
  31                if (it->subtree_nr != ref->subtree_nr)
  32                        errs = 1;
  33        }
  34        else {
  35                dump_one(it, pfx, "");
  36                if (hashcmp(it->sha1, ref->sha1) ||
  37                    ref->entry_count != it->entry_count ||
  38                    ref->subtree_nr != it->subtree_nr) {
  39                        dump_one(ref, pfx, "#(ref) ");
  40                        errs = 1;
  41                }
  42        }
  43
  44        for (i = 0; i < it->subtree_nr; i++) {
  45                char path[PATH_MAX];
  46                struct cache_tree_sub *down = it->down[i];
  47                struct cache_tree_sub *rdwn;
  48
  49                rdwn = cache_tree_sub(ref, down->name);
  50                sprintf(path, "%s%.*s/", pfx, down->namelen, down->name);
  51                if (dump_cache_tree(down->cache_tree, rdwn->cache_tree, path))
  52                        errs = 1;
  53        }
  54        return errs;
  55}
  56
  57int main(int ac, char **av)
  58{
  59        struct cache_tree *another = cache_tree();
  60        if (read_cache() < 0)
  61                die("unable to read index file");
  62        cache_tree_update(another,
  63                          (const struct cache_entry * const *)active_cache,
  64                          active_nr, WRITE_TREE_DRY_RUN);
  65        return dump_cache_tree(active_cache_tree, another, "");
  66}