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

[PATCH 23/23] t/helper/test-repository: celebrate independence from the_repository

From
Stefan Beller <sbeller@google.com>
Date
Dec 15, 2018, 00:09 UTC
Message-ID
<20181215000942.46033-24-sbeller@google.com>
In-Reply-To
<20181215000942.46033-1-sbeller@google.com>

dade47c06c (commit-graph: add repo arg to graph readers, 2018-07-11) brought more independence from the_repository to the commit graph, however it was not completely independent of the_repository, as the previous patches show.

To ensure we're not accessing the_repository by accident, we'd ideally assign NULL to the_repository to trigger a segfault on access.

We currently have a temporary hack in cache.h, which relies on the_hash_algo (which is a short form of the_repository->hash_algo) to be set, so we cannot do that. The next best thing is to set all fields of the_repository to 0, so any accidental access is more likely to be found.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 cache.h                    |  2 ++
 t/helper/test-repository.c | 10 ++++++++++
 2 files changed, 12 insertions(+)
diff --git a/cache.h b/cache.h
index 59c8a93046..8864d7ec15 100644
--- a/cache.h
+++ b/cache.h
@@ -1033,6 +1033,8 @@ static inline int hashcmp(const unsigned char *sha1, const unsigned char *sha2)
 	 *
 	 * This will need to be extended or ripped out when we learn about
 	 * hashes of different sizes.
+	 *
+	 * When ripping this out, see TODO in test-repository.c.
 	 */
 	if (the_hash_algo->rawsz != 20)
 		BUG("hash size not yet supported by hashcmp");
diff --git a/t/helper/test-repository.c b/t/helper/test-repository.c
index 6a84a53efb..f7f8618445 100644
--- a/t/helper/test-repository.c
+++ b/t/helper/test-repository.c
@@ -17,6 +17,11 @@ static void test_parse_commit_in_graph(const char *gitdir, const char *worktree,
 
 	setup_git_env(gitdir);
 
+	memset(the_repository, 0, sizeof(*the_repository));
+
+	/* TODO: Needed for temporary hack in hashcmp, see 183a638b7da. */
+	repo_set_hash_algo(the_repository, GIT_HASH_SHA1);
+
 	if (repo_init(&r, gitdir, worktree))
 		die("Couldn't init repo");
 
@@ -43,6 +48,11 @@ static void test_get_commit_tree_in_graph(const char *gitdir,
 
 	setup_git_env(gitdir);
 
+	memset(the_repository, 0, sizeof(*the_repository));
+
+	/* TODO: Needed for temporary hack in hashcmp, see 183a638b7da. */
+	repo_set_hash_algo(the_repository, GIT_HASH_SHA1);
+
 	if (repo_init(&r, gitdir, worktree))
 		die("Couldn't init repo");
 
-- 
2.20.0.405.gbc1bbc6f85-goog
Previous: Stefan BellerNext: Derrick Stolee
Message 24 of 26 in “sb/more-repo-in-api”
  1. 00/23 sb/more-repo-in-apiStefan Beller, Dec 15, 2018
  2. 01/23 sha1_file: allow read_object to read objects in arbitrary repositoriesStefan Beller, Dec 15, 2018
  3. 02/23 packfile: allow has_packed_and_bad to handle arbitrary repositoriesStefan Beller, Dec 15, 2018
  4. 03/23 object-store: allow read_object_file_extended to read from any repoStefan Beller, Dec 15, 2018
  5. 04/23 object-store: prepare read_object_file to deal with any repoStefan Beller, Dec 15, 2018
  6. 05/23 object-store: prepare has_{sha1, object}_file to handle any repoStefan Beller, Dec 15, 2018
  7. 06/23 object: parse_object to honor its repository argumentStefan Beller, Dec 15, 2018
  8. 07/23 commit: allow parse_commit* to handle any repoStefan Beller, Dec 15, 2018
  9. 08/23 commit-reach.c: allow paint_down_to_common to handle any repoStefan Beller, Dec 15, 2018
  10. 09/23 commit-reach.c: allow merge_bases_many to handle any repoStefan Beller, Dec 15, 2018
  11. 10/23 commit-reach.c: allow remove_redundant to handle any repoStefan Beller, Dec 15, 2018
  12. 11/23 commit-reach.c: allow get_merge_bases_many_0 to handle any repoStefan Beller, Dec 15, 2018
  13. 12/23 commit-reach: prepare get_merge_bases to handle any repoStefan Beller, Dec 15, 2018
  14. 13/23 commit-reach: prepare in_merge_bases[_many] to handle any repoStefan Beller, Dec 15, 2018
  15. 14/23 commit: prepare get_commit_buffer to handle any repoStefan Beller, Dec 15, 2018
  16. 15/23 commit: prepare repo_unuse_commit_buffer to handle any repoStefan Beller, Dec 15, 2018
  17. 16/23 commit: prepare logmsg_reencode to handle arbitrary repositoriesStefan Beller, Dec 15, 2018
  18. 17/23 pretty: prepare format_commit_message to handle arbitrary repositoriesStefan Beller, Dec 15, 2018
  19. 18/23 submodule: use submodule repos for object lookupStefan Beller, Dec 15, 2018
  20. 19/23 submodule: don't add submodule as odb for pushStefan Beller, Dec 15, 2018
  21. 20/23 commit-graph: convert remaining functions to handle any repoStefan Beller, Dec 15, 2018
  22. 21/23 commit: prepare free_commit_buffer and release_commit_memory for any repoStefan Beller, Dec 15, 2018
  23. 22/23 path.h: make REPO_GIT_PATH_FUNC repository agnosticStefan Beller, Dec 15, 2018
  24. 23/23 t/helper/test-repository: celebrate independence from the_repositoryStefan Beller, Dec 15, 2018
  25. Derrick StoleeDec 27, 2018
  26. Junio C HamanoDec 26, 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.