Sync with 2.31.2
[alt-git.git] / t / helper / test-read-cache.c
blobb52c174acc7a1f1c8e4c9a3d5a888323c9db0fad
1 #include "test-tool.h"
2 #include "cache.h"
3 #include "config.h"
4 #include "blob.h"
5 #include "commit.h"
6 #include "tree.h"
7 #include "sparse-index.h"
9 static void print_cache_entry(struct cache_entry *ce)
11 const char *type;
12 printf("%06o ", ce->ce_mode & 0177777);
14 if (S_ISSPARSEDIR(ce->ce_mode))
15 type = tree_type;
16 else if (S_ISGITLINK(ce->ce_mode))
17 type = commit_type;
18 else
19 type = blob_type;
21 printf("%s %s\t%s\n",
22 type,
23 oid_to_hex(&ce->oid),
24 ce->name);
27 static void print_cache(struct index_state *istate)
29 int i;
30 for (i = 0; i < istate->cache_nr; i++)
31 print_cache_entry(istate->cache[i]);
34 int cmd__read_cache(int argc, const char **argv)
36 struct repository *r = the_repository;
37 int i, cnt = 1;
38 const char *name = NULL;
39 int table = 0, expand = 0;
41 initialize_the_repository();
42 prepare_repo_settings(r);
43 r->settings.command_requires_full_index = 0;
45 for (++argv, --argc; *argv && starts_with(*argv, "--"); ++argv, --argc) {
46 if (skip_prefix(*argv, "--print-and-refresh=", &name))
47 continue;
48 if (!strcmp(*argv, "--table"))
49 table = 1;
50 else if (!strcmp(*argv, "--expand"))
51 expand = 1;
54 if (argc == 1)
55 cnt = strtol(argv[0], NULL, 0);
56 setup_git_directory();
57 git_config(git_default_config, NULL);
59 for (i = 0; i < cnt; i++) {
60 repo_read_index(r);
62 if (expand)
63 ensure_full_index(r->index);
65 if (name) {
66 int pos;
68 refresh_index(r->index, REFRESH_QUIET,
69 NULL, NULL, NULL);
70 pos = index_name_pos(r->index, name, strlen(name));
71 if (pos < 0)
72 die("%s not in index", name);
73 printf("%s is%s up to date\n", name,
74 ce_uptodate(r->index->cache[pos]) ? "" : " not");
75 write_file(name, "%d\n", i);
77 if (table)
78 print_cache(r->index);
79 discard_index(r->index);
81 return 0;