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

[PATCH 6/7] reftable: add test for length of disambiguating prefix

From
Han-Wen Nienhuys via GitGitGadget <gitgitgadget@gmail.com>
Date
Jan 12, 2022, 18:07 UTC
Message-ID
<a5dfa04888493801037daa8fc27f4e9c6a5fd346.1642010868.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.1185.git.git.1642010868.gitgitgadget@gmail.com>
From: Han-Wen Nienhuys <hanwen@google.com>

The ID => ref map is trimming object IDs to a disambiguating prefix. Check that we are computing their length correctly.

Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
---
 reftable/readwrite_test.c | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)
diff --git a/reftable/readwrite_test.c b/reftable/readwrite_test.c
index b4371b75724..5f45cee39d6 100644
--- a/reftable/readwrite_test.c
+++ b/reftable/readwrite_test.c
@@ -638,6 +638,43 @@ static void test_write_object_id_min_length(void)
 	strbuf_release(&buf);
 }
 
+static void test_write_object_id_length(void)
+{
+	struct reftable_write_options opts = {
+		.block_size = 75,
+	};
+	struct strbuf buf = STRBUF_INIT;
+	struct reftable_writer *w =
+		reftable_new_writer(&strbuf_add_void, &buf, &opts);
+	uint8_t hash[GIT_SHA1_RAWSZ] = {42};
+	struct reftable_ref_record ref = {
+		.update_index = 1,
+		.value_type = REFTABLE_REF_VAL1,
+		.value.val1 = hash,
+	};
+	int err;
+	int i;
+
+	reftable_writer_set_limits(w, 1, 1);
+
+	/* Write the same hash in many refs. If there is only 1 hash, the
+	 * disambiguating prefix is length 0 */
+	for (i = 0; i < 256; i++) {
+		char name[256];
+		snprintf(name, sizeof(name), "ref%05d", i);
+		ref.refname = name;
+		ref.value.val1[15] = i;
+		err = reftable_writer_add_ref(w, &ref);
+		EXPECT_ERR(err);
+	}
+
+	err = reftable_writer_close(w);
+	EXPECT_ERR(err);
+	EXPECT(writer_stats(w)->object_id_len == 16);
+	reftable_writer_free(w);
+	strbuf_release(&buf);
+}
+
 static void test_write_empty_key(void)
 {
 	struct reftable_write_options opts = { 0 };
@@ -743,6 +780,7 @@ int readwrite_test_main(int argc, const char *argv[])
 	RUN_TEST(test_write_empty_key);
 	RUN_TEST(test_write_empty_table);
 	RUN_TEST(test_log_overflow);
+	RUN_TEST(test_write_object_id_length);
 	RUN_TEST(test_write_object_id_min_length);
 	return 0;
 }
-- 
gitgitgadget
Previous: Han-Wen Nienhuys via GitGitGadgetNext: Han-Wen Nienhuys via GitGitGadget
Message 10 of 33 in “reftable: avoid reading and writing empty keys”
  1. 0/7 reftable: avoid reading and writing empty keysHan-Wen Nienhuys via GitGitGadget, Jan 12, 2022
  2. 1/7 Documentation: object_id_len goes up to 31Han-Wen Nienhuys via GitGitGadget, Jan 12, 2022
  3. 2/7 reftable: reject 0 object_id_lenHan-Wen Nienhuys via GitGitGadget, Jan 12, 2022
  4. 3/7 reftable: add a test that verifies that writing empty keys failsHan-Wen Nienhuys via GitGitGadget, Jan 12, 2022
  5. 4/7 reftable: avoid writing empty keys at the block layerHan-Wen Nienhuys via GitGitGadget, Jan 12, 2022
  6. Junio C HamanoJan 14, 2022
  7. Han-Wen NienhuysJan 17, 2022
  8. Junio C HamanoJan 17, 2022
  9. 5/7 reftable: ensure that obj_id_len is >= 2 on writingHan-Wen Nienhuys via GitGitGadget, Jan 12, 2022
  10. 6/7 reftable: add test for length of disambiguating prefixHan-Wen Nienhuys via GitGitGadget, Jan 12, 2022
  11. 7/7 reftable: rename writer_stats to reftable_writer_statsHan-Wen Nienhuys via GitGitGadget, Jan 12, 2022
  12. 0/7 reftable: avoid reading and writing empty keysHan-Wen Nienhuys via GitGitGadget, Feb 17, 2022
  13. 1/7 Documentation: object_id_len goes up to 31Han-Wen Nienhuys via GitGitGadget, Feb 17, 2022
  14. 2/7 reftable: reject 0 object_id_lenHan-Wen Nienhuys via GitGitGadget, Feb 17, 2022
  15. Junio C HamanoFeb 18, 2022
  16. 3/7 reftable: add a test that verifies that writing empty keys failsHan-Wen Nienhuys via GitGitGadget, Feb 17, 2022
  17. 4/7 reftable: avoid writing empty keys at the block layerHan-Wen Nienhuys via GitGitGadget, Feb 17, 2022
  18. Junio C HamanoFeb 17, 2022
  19. Han-Wen NienhuysFeb 21, 2022
  20. 5/7 reftable: ensure that obj_id_len is >= 2 on writingHan-Wen Nienhuys via GitGitGadget, Feb 17, 2022
  21. Junio C HamanoFeb 18, 2022
  22. 6/7 reftable: add test for length of disambiguating prefixHan-Wen Nienhuys via GitGitGadget, Feb 17, 2022
  23. 7/7 reftable: rename writer_stats to reftable_writer_statsHan-Wen Nienhuys via GitGitGadget, Feb 17, 2022
  24. Junio C HamanoFeb 18, 2022
  25. 0/7 reftable: avoid reading and writing empty keysHan-Wen Nienhuys via GitGitGadget, Feb 21, 2022
  26. 2/7 reftable: reject 0 object_id_lenHan-Wen Nienhuys via GitGitGadget, Feb 21, 2022
  27. 1/7 Documentation: object_id_len goes up to 31Han-Wen Nienhuys via GitGitGadget, Feb 21, 2022
  28. 4/7 reftable: avoid writing empty keys at the block layerHan-Wen Nienhuys via GitGitGadget, Feb 21, 2022
  29. 3/7 reftable: add a test that verifies that writing empty keys failsHan-Wen Nienhuys via GitGitGadget, Feb 21, 2022
  30. 5/7 reftable: ensure that obj_id_len is >= 2 on writingHan-Wen Nienhuys via GitGitGadget, Feb 21, 2022
  31. 6/7 reftable: add test for length of disambiguating prefixHan-Wen Nienhuys via GitGitGadget, Feb 21, 2022
  32. 7/7 reftable: rename writer_stats to reftable_writer_statsHan-Wen Nienhuys via GitGitGadget, Feb 21, 2022
  33. Junio C HamanoFeb 23, 2022

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.