aboutsummaryrefslogtreecommitdiff
path: root/reftable/reader.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2024-05-30 14:15:11 -0700
committerJunio C Hamano <gitster@pobox.com>2024-05-30 14:15:11 -0700
commit23528d352ac4b4fdfd982e7f9a12f306518ca8b6 (patch)
treee6df331428d98d3a54974ac17fc9438e4d66e3d2 /reftable/reader.c
parenta60c21b7206fff1a6ab561e29ac7312c437d2592 (diff)
parentf518d91a2b6465c9951f4ee1ab316ee81894000c (diff)
downloadgit-23528d352ac4b4fdfd982e7f9a12f306518ca8b6.tar.xz
Merge branch 'ps/reftable-write-options'
The knobs to tweak how reftable files are written have been made available as configuration variables. * ps/reftable-write-options: refs/reftable: allow configuring geometric factor reftable: make the compaction factor configurable refs/reftable: allow disabling writing the object index refs/reftable: allow configuring restart interval reftable: use `uint16_t` to track restart interval refs/reftable: allow configuring block size reftable/dump: support dumping a table's block structure reftable/writer: improve error when passed an invalid block size reftable/writer: drop static variable used to initialize strbuf reftable: pass opts as constant pointer reftable: consistently refer to `reftable_write_options` as `opts`
Diffstat (limited to 'reftable/reader.c')
-rw-r--r--reftable/reader.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/reftable/reader.c b/reftable/reader.c
index 481dff10d4..f23c8523db 100644
--- a/reftable/reader.c
+++ b/reftable/reader.c
@@ -856,3 +856,66 @@ done:
reftable_reader_free(r);
return err;
}
+
+int reftable_reader_print_blocks(const char *tablename)
+{
+ struct {
+ const char *name;
+ int type;
+ } sections[] = {
+ {
+ .name = "ref",
+ .type = BLOCK_TYPE_REF,
+ },
+ {
+ .name = "obj",
+ .type = BLOCK_TYPE_OBJ,
+ },
+ {
+ .name = "log",
+ .type = BLOCK_TYPE_LOG,
+ },
+ };
+ struct reftable_block_source src = { 0 };
+ struct table_iter ti = TABLE_ITER_INIT;
+ struct reftable_reader *r = NULL;
+ size_t i;
+ int err;
+
+ err = reftable_block_source_from_file(&src, tablename);
+ if (err < 0)
+ goto done;
+
+ err = reftable_new_reader(&r, &src, tablename);
+ if (err < 0)
+ goto done;
+
+ printf("header:\n");
+ printf(" block_size: %d\n", r->block_size);
+
+ for (i = 0; i < ARRAY_SIZE(sections); i++) {
+ err = reader_start(r, &ti, sections[i].type, 0);
+ if (err < 0)
+ goto done;
+ if (err > 0)
+ continue;
+
+ printf("%s:\n", sections[i].name);
+
+ while (1) {
+ printf(" - length: %u\n", ti.br.block_len);
+ printf(" restarts: %u\n", ti.br.restart_count);
+
+ err = table_iter_next_block(&ti);
+ if (err < 0)
+ goto done;
+ if (err > 0)
+ break;
+ }
+ }
+
+done:
+ reftable_reader_free(r);
+ table_iter_close(&ti);
+ return err;
+}