git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 02/11] repository: introduce repo_read_index_or_die

From
Stefan Beller <sbeller@google.com>
Date
May 16, 2018, 22:21 UTC
Message-ID
<20180516222118.233868-3-sbeller@google.com>
In-Reply-To
<20180516222118.233868-1-sbeller@google.com>

A common pattern with the repo_read_index function is to die if the return of repo_read_index is negative. Move this pattern into a function.

This patch replaces the calls of repo_read_index with its _or_die version, if the error message is exactly the same.

Signed-off-by: Stefan Beller <sbeller@google.com>
---
 builtin/add.c               | 3 +--
 builtin/check-ignore.c      | 7 ++++---
 builtin/clean.c             | 4 ++--
 builtin/mv.c                | 3 +--
 builtin/reset.c             | 3 +--
 builtin/rm.c                | 3 +--
 builtin/submodule--helper.c | 3 +--
 repository.c                | 6 ++++++
 repository.h                | 8 ++++++++
 9 files changed, 25 insertions(+), 15 deletions(-)
diff --git a/builtin/add.c b/builtin/add.c
index c9e2619a9ad..e4751c198c1 100644
--- a/builtin/add.c
+++ b/builtin/add.c
@@ -445,8 +445,7 @@ int cmd_add(int argc, const char **argv, const char *prefix)
 		return 0;
 	}
 
-	if (read_cache() < 0)
-		die(_("index file corrupt"));
+	repo_read_index_or_die(the_repository);
 
 	die_in_unpopulated_submodule(&the_index, prefix);
 
diff --git a/builtin/check-ignore.c b/builtin/check-ignore.c
index ec9a959e08d..2a46bf9af7f 100644
--- a/builtin/check-ignore.c
+++ b/builtin/check-ignore.c
@@ -6,6 +6,7 @@
 #include "pathspec.h"
 #include "parse-options.h"
 #include "submodule.h"
+#include "repository.h"
 
 static int quiet, verbose, stdin_paths, show_non_matching, no_index;
 static const char * const check_ignore_usage[] = {
@@ -172,9 +173,9 @@ int cmd_check_ignore(int argc, const char **argv, const char *prefix)
 	if (show_non_matching && !verbose)
 		die(_("--non-matching is only valid with --verbose"));
 
-	/* read_cache() is only necessary so we can watch out for submodules. */
-	if (!no_index && read_cache() < 0)
-		die(_("index file corrupt"));
+	/* repo_read_index() is only necessary so we can watch out for submodules. */
+	if (!no_index)
+		repo_read_index_or_die(the_repository);
 
 	memset(&dir, 0, sizeof(dir));
 	setup_standard_excludes(&dir);
diff --git a/builtin/clean.c b/builtin/clean.c
index fad533a0a73..6c1c6fdd7f9 100644
--- a/builtin/clean.c
+++ b/builtin/clean.c
@@ -16,6 +16,7 @@
 #include "column.h"
 #include "color.h"
 #include "pathspec.h"
+#include "repository.h"
 
 static int force = -1; /* unset */
 static int interactive;
@@ -954,8 +955,7 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
 	if (remove_directories)
 		dir.flags |= DIR_SHOW_IGNORED_TOO | DIR_KEEP_UNTRACKED_CONTENTS;
 
-	if (read_cache() < 0)
-		die(_("index file corrupt"));
+	repo_read_index_or_die(the_repository);
 
 	if (!ignored)
 		setup_standard_excludes(&dir);
diff --git a/builtin/mv.c b/builtin/mv.c
index 7a63667d648..7f62e626dda 100644
--- a/builtin/mv.c
+++ b/builtin/mv.c
@@ -140,8 +140,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
 		usage_with_options(builtin_mv_usage, builtin_mv_options);
 
 	hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
-	if (read_cache() < 0)
-		die(_("index file corrupt"));
+	repo_read_index_or_die(the_repository);
 
 	source = internal_prefix_pathspec(prefix, argv, argc, 0);
 	modes = xcalloc(argc, sizeof(enum update_mode));
diff --git a/builtin/reset.c b/builtin/reset.c
index 7f1c3f02a30..fd514eec822 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -237,8 +237,7 @@ static void parse_args(struct pathspec *pathspec,
 	}
 	*rev_ret = rev;
 
-	if (read_cache() < 0)
-		die(_("index file corrupt"));
+	repo_read_index_or_die(the_repository);
 
 	parse_pathspec(pathspec, 0,
 		       PATHSPEC_PREFER_FULL |
diff --git a/builtin/rm.c b/builtin/rm.c
index 5b6fc7ee818..3b90191aa53 100644
--- a/builtin/rm.c
+++ b/builtin/rm.c
@@ -267,8 +267,7 @@ int cmd_rm(int argc, const char **argv, const char *prefix)
 
 	hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
 
-	if (read_cache() < 0)
-		die(_("index file corrupt"));
+	repo_read_index_or_die(the_repository);
 
 	parse_pathspec(&pathspec, 0,
 		       PATHSPEC_PREFER_CWD,
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
index c2403a915ff..7aebed9bd66 100644
--- a/builtin/submodule--helper.c
+++ b/builtin/submodule--helper.c
@@ -323,8 +323,7 @@ static int module_list_compute(int argc, const char **argv,
 	if (pathspec->nr)
 		ps_matched = xcalloc(pathspec->nr, 1);
 
-	if (read_cache() < 0)
-		die(_("index file corrupt"));
+	repo_read_index_or_die(the_repository);
 
 	for (i = 0; i < active_nr; i++) {
 		const struct cache_entry *ce = active_cache[i];
diff --git a/repository.c b/repository.c
index beff3caa9e2..ceca14ba718 100644
--- a/repository.c
+++ b/repository.c
@@ -249,3 +249,9 @@ int repo_read_index(struct repository *repo)
 
 	return read_index_from(repo->index, repo->index_file, repo->gitdir);
 }
+
+void repo_read_index_or_die(struct repository *repo)
+{
+	if (repo_read_index(repo) < 0)
+		die(_("index file corrupt"));
+}
diff --git a/repository.h b/repository.h
index f2646f0c52a..8efd8979ad3 100644
--- a/repository.h
+++ b/repository.h
@@ -118,4 +118,12 @@ extern void repo_clear(struct repository *repo);
  */
 extern int repo_read_index(struct repository *repo);
 
+/*
+ * Populates the index in the repository from its index file,
+ * allocating the struct index if needed.
+ *
+ * If the index file cannot be read, die.
+ */
+void repo_read_index_or_die(struct repository *r);
+
 #endif /* REPOSITORY_H */
-- 
2.17.0.582.gccdcbd54c44.dirty
Previous: Stefan BellerNext: Duy Nguyen
Message 20 of 38 in “grep: handle corrupt index files early”
  1. grep: handle corrupt index files earlyStefan Beller, May 15, 2018
  2. Johannes SchindelinMay 15, 2018
  3. Duy NguyenMay 15, 2018
  4. Stefan BellerMay 15, 2018
  5. Duy NguyenMay 16, 2018
  6. 00/11 Stefan Beller, May 16, 2018
  7. 01/11 grep: handle corrupt index files earlyStefan Beller, May 16, 2018
  8. 06/11 read_cache: use repo_read_index_or_die with different error messagesStefan Beller, May 16, 2018
  9. 09/11 checkout-index: switch to repo_read_indexStefan Beller, May 16, 2018
  10. 05/11 builtin/ls-files: use repo_read_index_or_dieStefan Beller, May 16, 2018
  11. 07/11 rerere: use repo_read_index_or_dieStefan Beller, May 16, 2018
  12. Thomas GummererMay 20, 2018
  13. Stefan BellerMay 21, 2018
  14. 11/11 read_cache: convert most calls to repo_read_index_or_dieStefan Beller, May 16, 2018
  15. Brandon WilliamsMay 16, 2018
  16. Duy NguyenMay 19, 2018
  17. Duy NguyenMay 19, 2018
  18. 08/11 check-attr: switch to repo_read_index_or_dieStefan Beller, May 16, 2018
  19. 10/11 test helpers: switch to repo_read_index_or_dieStefan Beller, May 16, 2018
  20. 02/11 repository: introduce repo_read_index_or_dieStefan Beller, May 16, 2018
  21. Duy NguyenMay 19, 2018
  22. Stefan BellerMay 21, 2018
  23. Brandon WilliamsMay 21, 2018
  24. Stefan BellerMay 21, 2018
  25. Duy NguyenMay 22, 2018
  26. Why do we have both x*() and *_or_die() for "do or die"?Ævar Arnfjörð Bjarmason, May 22, 2018
  27. Duy NguyenMay 22, 2018
  28. Jonathan NiederMay 22, 2018
  29. Stefan BellerMay 22, 2018
  30. Junio C HamanoMay 23, 2018
  31. 03/11 builtin/grep: use repo_read_index_or_dieStefan Beller, May 16, 2018
  32. 04/11 submodule: use repo_read_index_or_dieStefan Beller, May 16, 2018
  33. Duy NguyenMay 19, 2018
  34. Junio C HamanoMay 17, 2018
  35. Stefan BellerMay 17, 2018
  36. Junio C HamanoMay 17, 2018
  37. Brandon WilliamsMay 15, 2018
  38. Junio C HamanoMay 15, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.