diff options
Diffstat (limited to 't/helper/test-read-cache.c')
| -rw-r--r-- | t/helper/test-read-cache.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/t/helper/test-read-cache.c b/t/helper/test-read-cache.c new file mode 100644 index 0000000000..b52c174acc --- /dev/null +++ b/t/helper/test-read-cache.c @@ -0,0 +1,82 @@ +#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; +} |
