diff --git a/Makefile b/Makefile
index 9573190f1d7..4d3f8ece74f 100644
--- a/Makefile
+++ b/Makefile
@@ -739,6 +739,8 @@ TEST_BUILTINS_OBJS += test-prio-queue.o
TEST_BUILTINS_OBJS += test-proc-receive.o
TEST_BUILTINS_OBJS += test-progress.o
TEST_BUILTINS_OBJS += test-reach.o
+TEST_BUILTINS_OBJS += test-read-cache-again.o
+TEST_BUILTINS_OBJS += test-read-cache-perf.o
TEST_BUILTINS_OBJS += test-read-cache.o
TEST_BUILTINS_OBJS += test-read-graph.o
TEST_BUILTINS_OBJS += test-read-midx.o
diff --git a/t/helper/test-read-cache-again.c b/t/helper/test-read-cache-again.c
new file mode 100644
index 00000000000..707db036cb1
--- /dev/null
+++ b/t/helper/test-read-cache-again.c
@@ -0,0 +1,31 @@
+#include "test-tool.h"
+#include "cache.h"
+
+int cmd__read_cache_again(int argc, const char **argv)
+{
+ struct repository *r = the_repository;
+ int i, cnt;
+ const char *name;
+
+ if (argc != 2)
+ die("usage: test-tool read-cache-again <count> <file>");
+
+ cnt = strtol(argv[0], NULL, 0);
+ name = argv[2];
+
+ setup_git_directory();
+ for (i = 0; i < cnt; i++) {
+ int pos;
+ repo_read_index(r);
+ 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", cnt);
+ discard_index(r->index);
+ }
+ return 0;
+}diff --git a/t/helper/test-read-cache-perf.c b/t/helper/test-read-cache-perf.c
new file mode 100644
index 00000000000..90176c010a1
--- /dev/null
+++ b/t/helper/test-read-cache-perf.c
@@ -0,0 +1,21 @@
+#include "test-tool.h"
+#include "cache.h"
+
+int cmd__read_cache_perf(int argc, const char **argv)
+{
+ struct repository *r = the_repository;
+ int i, cnt = 1;
+
+ if (argc == 2)
+ cnt = strtol(argv[1], NULL, 0);
+ else
+ die("usage: test-tool read-cache-perf [<count>]");
+
+ setup_git_directory();
+ for (i = 0; i < cnt; i++) {
+ repo_read_index(r);
+ discard_index(r->index);
+ }
+
+ return 0;
+}diff --git a/t/helper/test-read-cache.c b/t/helper/test-read-cache.c
index b52c174acc7..616894072d1 100644
--- a/t/helper/test-read-cache.c
+++ b/t/helper/test-read-cache.c
@@ -5,6 +5,12 @@
#include "commit.h"
#include "tree.h"
#include "sparse-index.h"
+#include "parse-options.h"
+
+static const char *read_cache_usage[] = {
+ "test-tool read-cache [<options>...]",
+ NULL
+};
static void print_cache_entry(struct cache_entry *ce)
{@@ -34,49 +40,33 @@ static void print_cache(struct index_state *istate)
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;
+ struct option options[] = {
+ OPT_BOOL(0, "table", &table,
+ "print a dump of the cache"),
+ OPT_BOOL(0, "expand", &expand,
+ "call ensure_full_index()"),
+ OPT_END()
+ };
+
+ argc = parse_options(argc, argv, "test-tools", options, read_cache_usage, 0);
+ if (argc)
+ usage_msg_opt("Too many arguments.", read_cache_usage, options);
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);
+ repo_read_index(r);
- for (i = 0; i < cnt; i++) {
- repo_read_index(r);
-
- if (expand)
- ensure_full_index(r->index);
+ if (expand)
+ ensure_full_index(r->index);
- if (name) {
- int pos;
+ if (table)
+ print_cache(r->index);
+ discard_index(r->index);
- 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;
}diff --git a/t/helper/test-tool.c b/t/helper/test-tool.c
index 3ce5585e53a..fb537c158e9 100644
--- a/t/helper/test-tool.c
+++ b/t/helper/test-tool.c
@@ -57,6 +57,8 @@ static struct test_cmd cmds[] = {
{ "progress", cmd__progress },
{ "reach", cmd__reach },
{ "read-cache", cmd__read_cache },
+ { "read-cache-again", cmd__read_cache_again },
+ { "read-cache-perf", cmd__read_cache_perf },
{ "read-graph", cmd__read_graph },
{ "read-midx", cmd__read_midx },
{ "ref-store", cmd__ref_store },diff --git a/t/helper/test-tool.h b/t/helper/test-tool.h
index 9f0f5228508..e5616e6f7a7 100644
--- a/t/helper/test-tool.h
+++ b/t/helper/test-tool.h
@@ -46,6 +46,8 @@ int cmd__proc_receive(int argc, const char **argv);
int cmd__progress(int argc, const char **argv);
int cmd__reach(int argc, const char **argv);
int cmd__read_cache(int argc, const char **argv);
+int cmd__read_cache_again(int argc, const char **argv);
+int cmd__read_cache_perf(int argc, const char **argv);
int cmd__read_graph(int argc, const char **argv);
int cmd__read_midx(int argc, const char **argv);
int cmd__ref_store(int argc, const char **argv);
diff --git a/t/perf/p0002-read-cache.sh b/t/perf/p0002-read-cache.sh
index cdd105a5945..d0ba5173fb1 100755
--- a/t/perf/p0002-read-cache.sh
+++ b/t/perf/p0002-read-cache.sh
@@ -8,7 +8,7 @@ test_perf_default_repo
count=1000
test_perf "read_cache/discard_cache $count times" "
- test-tool read-cache $count
+ test-tool read-cache-perf $count
"
test_done
diff --git a/t/t7519-status-fsmonitor.sh b/t/t7519-status-fsmonitor.sh
index deea88d4431..7de5fcb1bd7 100755
--- a/t/t7519-status-fsmonitor.sh
+++ b/t/t7519-status-fsmonitor.sh
@@ -360,7 +360,7 @@ test_expect_success UNTRACKED_CACHE 'ignore .git changes when invalidating UNTR'
test_expect_success 'discard_index() also discards fsmonitor info' '
test_config core.fsmonitor "$TEST_DIRECTORY/t7519/fsmonitor-all" &&
test_might_fail git update-index --refresh &&
- test-tool read-cache --print-and-refresh=tracked 2 >actual &&
+ test-tool read-cache-again 2 tracked >actual &&
printf "tracked is%s up to date\n" "" " not" >expect &&
test_cmp expect actual
'
--
2.33.0.663.gbaff4edb973