Nguyễn Thái Ngọc Duy | 5fbe600 | 2018-03-24 08:44:51 +0100 | [diff] [blame] | 1 | #include "test-tool.h" |
René Scharfe | 1ecb5ff | 2013-06-09 19:39:17 +0200 | [diff] [blame] | 2 | #include "cache.h" |
Johannes Schindelin | dc76852 | 2019-05-07 13:10:20 +0200 | [diff] [blame] | 3 | #include "config.h" |
Derrick Stolee | e2df6c3 | 2021-03-30 13:10:50 +0000 | [diff] [blame] | 4 | #include "blob.h" |
| 5 | #include "commit.h" |
| 6 | #include "tree.h" |
Derrick Stolee | 2782db3 | 2021-03-30 13:10:51 +0000 | [diff] [blame] | 7 | #include "sparse-index.h" |
Derrick Stolee | e2df6c3 | 2021-03-30 13:10:50 +0000 | [diff] [blame] | 8 | |
| 9 | static void print_cache_entry(struct cache_entry *ce) |
| 10 | { |
| 11 | const char *type; |
| 12 | printf("%06o ", ce->ce_mode & 0177777); |
| 13 | |
| 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; |
| 20 | |
| 21 | printf("%s %s\t%s\n", |
| 22 | type, |
| 23 | oid_to_hex(&ce->oid), |
| 24 | ce->name); |
| 25 | } |
| 26 | |
| 27 | static void print_cache(struct index_state *istate) |
| 28 | { |
| 29 | int i; |
| 30 | for (i = 0; i < istate->cache_nr; i++) |
| 31 | print_cache_entry(istate->cache[i]); |
| 32 | } |
René Scharfe | 1ecb5ff | 2013-06-09 19:39:17 +0200 | [diff] [blame] | 33 | |
Nguyễn Thái Ngọc Duy | 5fbe600 | 2018-03-24 08:44:51 +0100 | [diff] [blame] | 34 | int cmd__read_cache(int argc, const char **argv) |
René Scharfe | 1ecb5ff | 2013-06-09 19:39:17 +0200 | [diff] [blame] | 35 | { |
Derrick Stolee | e2df6c3 | 2021-03-30 13:10:50 +0000 | [diff] [blame] | 36 | struct repository *r = the_repository; |
Jeff King | 7e6b96c | 2019-09-05 18:54:31 -0400 | [diff] [blame] | 37 | int i, cnt = 1; |
Johannes Schindelin | dc76852 | 2019-05-07 13:10:20 +0200 | [diff] [blame] | 38 | const char *name = NULL; |
Derrick Stolee | 2782db3 | 2021-03-30 13:10:51 +0000 | [diff] [blame] | 39 | int table = 0, expand = 0; |
| 40 | |
| 41 | initialize_the_repository(); |
| 42 | prepare_repo_settings(r); |
| 43 | r->settings.command_requires_full_index = 0; |
Johannes Schindelin | dc76852 | 2019-05-07 13:10:20 +0200 | [diff] [blame] | 44 | |
Derrick Stolee | e2df6c3 | 2021-03-30 13:10:50 +0000 | [diff] [blame] | 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; |
Derrick Stolee | 2782db3 | 2021-03-30 13:10:51 +0000 | [diff] [blame] | 50 | else if (!strcmp(*argv, "--expand")) |
| 51 | expand = 1; |
Johannes Schindelin | dc76852 | 2019-05-07 13:10:20 +0200 | [diff] [blame] | 52 | } |
| 53 | |
Derrick Stolee | e2df6c3 | 2021-03-30 13:10:50 +0000 | [diff] [blame] | 54 | if (argc == 1) |
| 55 | cnt = strtol(argv[0], NULL, 0); |
René Scharfe | bccb22c | 2017-04-06 22:41:41 +0200 | [diff] [blame] | 56 | setup_git_directory(); |
Johannes Schindelin | dc76852 | 2019-05-07 13:10:20 +0200 | [diff] [blame] | 57 | git_config(git_default_config, NULL); |
Derrick Stolee | e2df6c3 | 2021-03-30 13:10:50 +0000 | [diff] [blame] | 58 | |
René Scharfe | 1ecb5ff | 2013-06-09 19:39:17 +0200 | [diff] [blame] | 59 | for (i = 0; i < cnt; i++) { |
Derrick Stolee | e2df6c3 | 2021-03-30 13:10:50 +0000 | [diff] [blame] | 60 | repo_read_index(r); |
Derrick Stolee | 2782db3 | 2021-03-30 13:10:51 +0000 | [diff] [blame] | 61 | |
| 62 | if (expand) |
| 63 | ensure_full_index(r->index); |
| 64 | |
Johannes Schindelin | dc76852 | 2019-05-07 13:10:20 +0200 | [diff] [blame] | 65 | if (name) { |
| 66 | int pos; |
| 67 | |
Derrick Stolee | e2df6c3 | 2021-03-30 13:10:50 +0000 | [diff] [blame] | 68 | refresh_index(r->index, REFRESH_QUIET, |
Johannes Schindelin | dc76852 | 2019-05-07 13:10:20 +0200 | [diff] [blame] | 69 | NULL, NULL, NULL); |
Derrick Stolee | e2df6c3 | 2021-03-30 13:10:50 +0000 | [diff] [blame] | 70 | pos = index_name_pos(r->index, name, strlen(name)); |
Johannes Schindelin | dc76852 | 2019-05-07 13:10:20 +0200 | [diff] [blame] | 71 | if (pos < 0) |
| 72 | die("%s not in index", name); |
| 73 | printf("%s is%s up to date\n", name, |
Derrick Stolee | e2df6c3 | 2021-03-30 13:10:50 +0000 | [diff] [blame] | 74 | ce_uptodate(r->index->cache[pos]) ? "" : " not"); |
Johannes Schindelin | dc76852 | 2019-05-07 13:10:20 +0200 | [diff] [blame] | 75 | write_file(name, "%d\n", i); |
| 76 | } |
Derrick Stolee | e2df6c3 | 2021-03-30 13:10:50 +0000 | [diff] [blame] | 77 | if (table) |
| 78 | print_cache(r->index); |
| 79 | discard_index(r->index); |
René Scharfe | 1ecb5ff | 2013-06-09 19:39:17 +0200 | [diff] [blame] | 80 | } |
| 81 | return 0; |
| 82 | } |