t / helper / test-dump-cache-tree.con commit Merge branch 'bw/clone-recursive-quiet' into maint (277194a)
   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                       oid_to_hex(&it->oid), 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                /* invalid */
  30                dump_one(it, pfx, "");
  31                dump_one(ref, pfx, "#(ref) ");
  32        }
  33        else {
  34                dump_one(it, pfx, "");
  35                if (oidcmp(&it->oid, &ref->oid) ||
  36                    ref->entry_count != it->entry_count ||
  37                    ref->subtree_nr != it->subtree_nr) {
  38                        /* claims to be valid but is lying */
  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                xsnprintf(path, sizeof(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 cmd_main(int ac, const char **av)
  58{
  59        struct index_state istate;
  60        struct cache_tree *another = cache_tree();
  61        setup_git_directory();
  62        if (read_cache() < 0)
  63                die("unable to read index file");
  64        istate = the_index;
  65        istate.cache_tree = another;
  66        cache_tree_update(&istate, WRITE_TREE_DRY_RUN);
  67        return dump_cache_tree(active_cache_tree, another, "");
  68}