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

[PATCH v2 08/15] t/helper: inline `reftable_dump_main()`

From
Patrick Steinhardt <ps@pks.im>
Date
Aug 14, 2024, 13:23 UTC
Message-ID
<ceaa296bfd48f11e636150900a4fe6243f10f1a4.1723640107.git.ps@pks.im>
In-Reply-To
<cover.1723640107.git.ps@pks.im>

The printing functionality part of `reftable/dump.c` is really only used by our "dump-reftable" test helper. It is certainly not generic logic that is useful to anybody outside of Git, and the format it generates is quite specific. Still, parts of it are used in our test suite and the output may be useful to take a peek into reftable stacks, tables and blocks. So while it does not make sense to expose this as part of the reftable library, it does make sense to keep it around.

Inline the `reftable_dump_main()` function into the "dump-reftable" test helper. This clarifies that its format is subject to change and not part of our public interface. Furthermore, this allows us to iterate on the implementation in subsequent patches.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
 Makefile                  |  1 -
 reftable/dump.c           | 86 ---------------------------------------
 reftable/reftable-tests.h |  1 -
 t/helper/test-reftable.c  | 61 ++++++++++++++++++++++++++-
 4 files changed, 60 insertions(+), 89 deletions(-)
 delete mode 100644 reftable/dump.c
diff --git a/Makefile b/Makefile
index 3863e60b66..343f19a488 100644
--- a/Makefile
+++ b/Makefile
@@ -2680,7 +2680,6 @@ REFTABLE_OBJS += reftable/tree.o
 REFTABLE_OBJS += reftable/writer.o
 
 REFTABLE_TEST_OBJS += reftable/block_test.o
-REFTABLE_TEST_OBJS += reftable/dump.o
 REFTABLE_TEST_OBJS += reftable/pq_test.o
 REFTABLE_TEST_OBJS += reftable/readwrite_test.o
 REFTABLE_TEST_OBJS += reftable/stack_test.o
diff --git a/reftable/dump.c b/reftable/dump.c
deleted file mode 100644
index 391d93de6a..0000000000
--- a/reftable/dump.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
-Copyright 2020 Google LLC
-
-Use of this source code is governed by a BSD-style
-license that can be found in the LICENSE file or at
-https://developers.google.com/open-source/licenses/bsd
-*/
-
-#include "git-compat-util.h"
-#include "hash.h"
-
-#include "reftable-blocksource.h"
-#include "reftable-error.h"
-#include "reftable-record.h"
-#include "reftable-tests.h"
-#include "reftable-writer.h"
-#include "reftable-iterator.h"
-#include "reftable-reader.h"
-#include "reftable-stack.h"
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-
-static void print_help(void)
-{
-	printf("usage: dump [-st] arg\n\n"
-	       "options: \n"
-	       "  -b dump blocks\n"
-	       "  -t dump table\n"
-	       "  -s dump stack\n"
-	       "  -6 sha256 hash format\n"
-	       "  -h this help\n"
-	       "\n");
-}
-
-int reftable_dump_main(int argc, char *const *argv)
-{
-	int err = 0;
-	int opt_dump_blocks = 0;
-	int opt_dump_table = 0;
-	int opt_dump_stack = 0;
-	uint32_t opt_hash_id = GIT_SHA1_FORMAT_ID;
-	const char *arg = NULL, *argv0 = argv[0];
-
-	for (; argc > 1; argv++, argc--)
-		if (*argv[1] != '-')
-			break;
-		else if (!strcmp("-b", argv[1]))
-			opt_dump_blocks = 1;
-		else if (!strcmp("-t", argv[1]))
-			opt_dump_table = 1;
-		else if (!strcmp("-6", argv[1]))
-			opt_hash_id = GIT_SHA256_FORMAT_ID;
-		else if (!strcmp("-s", argv[1]))
-			opt_dump_stack = 1;
-		else if (!strcmp("-?", argv[1]) || !strcmp("-h", argv[1])) {
-			print_help();
-			return 2;
-		}
-
-	if (argc != 2) {
-		fprintf(stderr, "need argument\n");
-		print_help();
-		return 2;
-	}
-
-	arg = argv[1];
-
-	if (opt_dump_blocks) {
-		err = reftable_reader_print_blocks(arg);
-	} else if (opt_dump_table) {
-		err = reftable_reader_print_file(arg);
-	} else if (opt_dump_stack) {
-		err = reftable_stack_print_directory(arg, opt_hash_id);
-	}
-
-	if (err < 0) {
-		fprintf(stderr, "%s: %s: %s\n", argv0, arg,
-			reftable_error_str(err));
-		return 1;
-	}
-	return 0;
-}
diff --git a/reftable/reftable-tests.h b/reftable/reftable-tests.h
index d5e03dcc1b..d005a8bb9e 100644
--- a/reftable/reftable-tests.h
+++ b/reftable/reftable-tests.h
@@ -16,6 +16,5 @@ int record_test_main(int argc, const char **argv);
 int readwrite_test_main(int argc, const char **argv);
 int stack_test_main(int argc, const char **argv);
 int tree_test_main(int argc, const char **argv);
-int reftable_dump_main(int argc, char *const *argv);
 
 #endif
diff --git a/t/helper/test-reftable.c b/t/helper/test-reftable.c
index 9d378427da..7f37d0cd34 100644
--- a/t/helper/test-reftable.c
+++ b/t/helper/test-reftable.c
@@ -1,4 +1,7 @@
 #include "reftable/system.h"
+#include "reftable/reftable-error.h"
+#include "reftable/reftable-reader.h"
+#include "reftable/reftable-stack.h"
 #include "reftable/reftable-tests.h"
 #include "test-tool.h"
 
@@ -13,7 +16,63 @@ int cmd__reftable(int argc, const char **argv)
 	return 0;
 }
 
+static void print_help(void)
+{
+	printf("usage: dump [-st] arg\n\n"
+	       "options: \n"
+	       "  -b dump blocks\n"
+	       "  -t dump table\n"
+	       "  -s dump stack\n"
+	       "  -6 sha256 hash format\n"
+	       "  -h this help\n"
+	       "\n");
+}
+
 int cmd__dump_reftable(int argc, const char **argv)
 {
-	return reftable_dump_main(argc, (char *const *)argv);
+	int err = 0;
+	int opt_dump_blocks = 0;
+	int opt_dump_table = 0;
+	int opt_dump_stack = 0;
+	uint32_t opt_hash_id = GIT_SHA1_FORMAT_ID;
+	const char *arg = NULL, *argv0 = argv[0];
+
+	for (; argc > 1; argv++, argc--)
+		if (*argv[1] != '-')
+			break;
+		else if (!strcmp("-b", argv[1]))
+			opt_dump_blocks = 1;
+		else if (!strcmp("-t", argv[1]))
+			opt_dump_table = 1;
+		else if (!strcmp("-6", argv[1]))
+			opt_hash_id = GIT_SHA256_FORMAT_ID;
+		else if (!strcmp("-s", argv[1]))
+			opt_dump_stack = 1;
+		else if (!strcmp("-?", argv[1]) || !strcmp("-h", argv[1])) {
+			print_help();
+			return 2;
+		}
+
+	if (argc != 2) {
+		fprintf(stderr, "need argument\n");
+		print_help();
+		return 2;
+	}
+
+	arg = argv[1];
+
+	if (opt_dump_blocks) {
+		err = reftable_reader_print_blocks(arg);
+	} else if (opt_dump_table) {
+		err = reftable_reader_print_file(arg);
+	} else if (opt_dump_stack) {
+		err = reftable_stack_print_directory(arg, opt_hash_id);
+	}
+
+	if (err < 0) {
+		fprintf(stderr, "%s: %s: %s\n", argv0, arg,
+			reftable_error_str(err));
+		return 1;
+	}
+	return 0;
 }
-- 
2.46.0.46.g406f326d27.dirty
Previous: Patrick SteinhardtNext: Patrick Steinhardt
Message 9 of 40 in “reftable: drop generic `reftable_table` interface”
  1. 00/15 reftable: drop generic `reftable_table` interfacePatrick Steinhardt, Aug 14, 2024
  2. 01/15 reftable/merged: expose functions to initialize iteratorsPatrick Steinhardt, Aug 14, 2024
  3. 02/15 reftable/merged: rename `reftable_new_merged_table()`Patrick Steinhardt, Aug 14, 2024
  4. 03/15 reftable/merged: stop using generic tables in the merged tablePatrick Steinhardt, Aug 14, 2024
  5. 04/15 reftable/stack: open-code reading refsPatrick Steinhardt, Aug 14, 2024
  6. 05/15 reftable/iter: drop double-checking logicPatrick Steinhardt, Aug 14, 2024
  7. 06/15 reftable/generic: move generic iterator code into iterator interfacePatrick Steinhardt, Aug 14, 2024
  8. 07/15 reftable/dump: drop unused `compact_stack()`Patrick Steinhardt, Aug 14, 2024
  9. 08/15 t/helper: inline `reftable_dump_main()`Patrick Steinhardt, Aug 14, 2024
  10. 09/15 t/helper: inline `reftable_reader_print_file()`Patrick Steinhardt, Aug 14, 2024
  11. 10/15 t/helper: inline `reftable_stack_print_directory()`Patrick Steinhardt, Aug 14, 2024
  12. karthik nayakAug 20, 2024
  13. Patrick SteinhardtAug 20, 2024
  14. 11/15 t/helper: inline `reftable_table_print()`Patrick Steinhardt, Aug 14, 2024
  15. 12/15 t/helper: inline printing of reftable recordsPatrick Steinhardt, Aug 14, 2024
  16. 13/15 t/helper: use `hash_to_hex_algop()` to print hashesPatrick Steinhardt, Aug 14, 2024
  17. 14/15 t/helper: refactor to not use `struct reftable_table`Patrick Steinhardt, Aug 14, 2024
  18. 15/15 reftable/generic: drop interfacePatrick Steinhardt, Aug 14, 2024
  19. Patrick SteinhardtAug 14, 2024
  20. Junio C HamanoAug 14, 2024
  21. Patrick SteinhardtAug 15, 2024
  22. karthik nayakAug 20, 2024
  23. 00/15 reftable: drop generic `reftable_table` interfacePatrick Steinhardt, Aug 22, 2024
  24. 01/15 reftable/merged: expose functions to initialize iteratorsPatrick Steinhardt, Aug 22, 2024
  25. 02/15 reftable/merged: rename `reftable_new_merged_table()`Patrick Steinhardt, Aug 22, 2024
  26. 03/15 reftable/merged: stop using generic tables in the merged tablePatrick Steinhardt, Aug 22, 2024
  27. 04/15 reftable/stack: open-code reading refsPatrick Steinhardt, Aug 22, 2024
  28. 05/15 reftable/iter: drop double-checking logicPatrick Steinhardt, Aug 22, 2024
  29. 06/15 reftable/generic: move generic iterator code into iterator interfacePatrick Steinhardt, Aug 22, 2024
  30. 07/15 reftable/dump: drop unused `compact_stack()`Patrick Steinhardt, Aug 22, 2024
  31. 08/15 t/helper: inline `reftable_dump_main()`Patrick Steinhardt, Aug 22, 2024
  32. 09/15 t/helper: inline `reftable_reader_print_file()`Patrick Steinhardt, Aug 22, 2024
  33. 10/15 t/helper: inline `reftable_stack_print_directory()`Patrick Steinhardt, Aug 22, 2024
  34. 11/15 t/helper: inline `reftable_table_print()`Patrick Steinhardt, Aug 22, 2024
  35. 12/15 t/helper: inline printing of reftable recordsPatrick Steinhardt, Aug 22, 2024
  36. 13/15 t/helper: use `hash_to_hex_algop()` to print hashesPatrick Steinhardt, Aug 22, 2024
  37. 14/15 t/helper: refactor to not use `struct reftable_table`Patrick Steinhardt, Aug 22, 2024
  38. 15/15 reftable/generic: drop interfacePatrick Steinhardt, Aug 22, 2024
  39. karthik nayakAug 22, 2024
  40. Junio C HamanoAug 22, 2024

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.