#include "test-tool.h" #include "cache.h" #include "config.h" #include "blob.h" #include "commit.h" #include "tree.h" #include "sparse-index.h" static void print_cache_entry(struct cache_entry *ce) { const char *type; printf("%06o ", ce->ce_mode & 0177777); if (S_ISSPARSEDIR(ce->ce_mode)) type = tree_type; else if (S_ISGITLINK(ce->ce_mode)) type = commit_type; else type = blob_type; printf("%s %s\t%s\n", type, oid_to_hex(&ce->oid), ce->name); } static void print_cache(struct index_state *istate) { int i; for (i = 0; i < istate->cache_nr; i++) print_cache_entry(istate->cache[i]); } int cmd__read_cache(int argc, const char **argv) { struct repository *r = the_repository; int i, cnt = 1; const char *name = NULL; int table = 0, expand = 0; initialize_the_repository(); prepare_repo_settings(r); r->settings.command_requires_full_index = 0; for (++argv, --argc; *argv && starts_with(*argv, "--"); ++argv, --argc) { if (skip_prefix(*argv, "--print-and-refresh=", &name)) continue; if (!strcmp(*argv, "--table")) table = 1; else if (!strcmp(*argv, "--expand")) expand = 1; } if (argc == 1) cnt = strtol(argv[0], NULL, 0); setup_git_directory(); git_config(git_default_config, NULL); for (i = 0; i < cnt; i++) { repo_read_index(r); if (expand) ensure_full_index(r->index); if (name) { int pos; refresh_index(r->index, REFRESH_QUIET, NULL, NULL, NULL); pos = index_name_pos(r->index, name, strlen(name)); if (pos < 0) die("%s not in index", name); printf("%s is%s up to date\n", name, ce_uptodate(r->index->cache[pos]) ? "" : " not"); write_file(name, "%d\n", i); } if (table) print_cache(r->index); discard_index(r->index); } return 0; }