Skip to content

Commit 319b58c

Browse files
hanwengitster
authored andcommitted
reftable: rest of library
This will be further split up once preceding commits have passed review. Signed-off-by: Han-Wen Nienhuys <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent fbb952a commit 319b58c

File tree

16 files changed

+3530
-1
lines changed

16 files changed

+3530
-1
lines changed

Makefile

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2347,20 +2347,26 @@ XDIFF_OBJS += xdiff/xutils.o
23472347
REFTABLE_OBJS += reftable/basics.o
23482348
REFTABLE_OBJS += reftable/block.o
23492349
REFTABLE_OBJS += reftable/blocksource.o
2350-
REFTABLE_OBJS += reftable/publicbasics.o
23512350
REFTABLE_OBJS += reftable/compat.o
23522351
REFTABLE_OBJS += reftable/iter.o
2352+
REFTABLE_OBJS += reftable/merged.o
2353+
REFTABLE_OBJS += reftable/pq.o
2354+
REFTABLE_OBJS += reftable/publicbasics.o
23532355
REFTABLE_OBJS += reftable/reader.o
23542356
REFTABLE_OBJS += reftable/record.o
2357+
REFTABLE_OBJS += reftable/refname.o
23552358
REFTABLE_OBJS += reftable/reftable.o
2359+
REFTABLE_OBJS += reftable/stack.o
23562360
REFTABLE_OBJS += reftable/strbuf.o
23572361
REFTABLE_OBJS += reftable/tree.o
23582362
REFTABLE_OBJS += reftable/writer.o
23592363
REFTABLE_OBJS += reftable/zlib-compat.o
23602364

23612365
REFTABLE_TEST_OBJS += reftable/block_test.o
23622366
REFTABLE_TEST_OBJS += reftable/record_test.o
2367+
REFTABLE_TEST_OBJS += reftable/refname_test.o
23632368
REFTABLE_TEST_OBJS += reftable/reftable_test.o
2369+
REFTABLE_TEST_OBJS += reftable/stack_test.o
23642370
REFTABLE_TEST_OBJS += reftable/strbuf_test.o
23652371
REFTABLE_TEST_OBJS += reftable/test_framework.o
23662372
REFTABLE_TEST_OBJS += reftable/tree_test.o

reftable/VERSION

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
b8ec0f74c74cb6752eb2033ad8e755a9c19aad15 C: add missing header

reftable/dump.c

Lines changed: 212 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,212 @@
1+
/*
2+
Copyright 2020 Google LLC
3+
4+
Use of this source code is governed by a BSD-style
5+
license that can be found in the LICENSE file or at
6+
https://developers.google.com/open-source/licenses/bsd
7+
*/
8+
9+
#include <stddef.h>
10+
#include <stdio.h>
11+
#include <stdlib.h>
12+
#include <unistd.h>
13+
#include <string.h>
14+
15+
#include "reftable.h"
16+
#include "reftable-tests.h"
17+
18+
static uint32_t hash_id;
19+
20+
static int dump_table(const char *tablename)
21+
{
22+
struct reftable_block_source src = { 0 };
23+
int err = reftable_block_source_from_file(&src, tablename);
24+
struct reftable_iterator it = { 0 };
25+
struct reftable_ref_record ref = { 0 };
26+
struct reftable_log_record log = { 0 };
27+
struct reftable_reader *r = NULL;
28+
29+
if (err < 0)
30+
return err;
31+
32+
err = reftable_new_reader(&r, &src, tablename);
33+
if (err < 0)
34+
return err;
35+
36+
err = reftable_reader_seek_ref(r, &it, "");
37+
if (err < 0) {
38+
return err;
39+
}
40+
41+
while (1) {
42+
err = reftable_iterator_next_ref(&it, &ref);
43+
if (err > 0) {
44+
break;
45+
}
46+
if (err < 0) {
47+
return err;
48+
}
49+
reftable_ref_record_print(&ref, hash_id);
50+
}
51+
reftable_iterator_destroy(&it);
52+
reftable_ref_record_clear(&ref);
53+
54+
err = reftable_reader_seek_log(r, &it, "");
55+
if (err < 0) {
56+
return err;
57+
}
58+
while (1) {
59+
err = reftable_iterator_next_log(&it, &log);
60+
if (err > 0) {
61+
break;
62+
}
63+
if (err < 0) {
64+
return err;
65+
}
66+
reftable_log_record_print(&log, hash_id);
67+
}
68+
reftable_iterator_destroy(&it);
69+
reftable_log_record_clear(&log);
70+
71+
reftable_reader_free(r);
72+
return 0;
73+
}
74+
75+
static int compact_stack(const char *stackdir)
76+
{
77+
struct reftable_stack *stack = NULL;
78+
struct reftable_write_options cfg = {};
79+
80+
int err = reftable_new_stack(&stack, stackdir, cfg);
81+
if (err < 0)
82+
goto done;
83+
84+
err = reftable_stack_compact_all(stack, NULL);
85+
if (err < 0)
86+
goto done;
87+
done:
88+
if (stack != NULL) {
89+
reftable_stack_destroy(stack);
90+
}
91+
return err;
92+
}
93+
94+
static int dump_stack(const char *stackdir)
95+
{
96+
struct reftable_stack *stack = NULL;
97+
struct reftable_write_options cfg = {};
98+
struct reftable_iterator it = { 0 };
99+
struct reftable_ref_record ref = { 0 };
100+
struct reftable_log_record log = { 0 };
101+
struct reftable_merged_table *merged = NULL;
102+
103+
int err = reftable_new_stack(&stack, stackdir, cfg);
104+
if (err < 0)
105+
return err;
106+
107+
merged = reftable_stack_merged_table(stack);
108+
109+
err = reftable_merged_table_seek_ref(merged, &it, "");
110+
if (err < 0) {
111+
return err;
112+
}
113+
114+
while (1) {
115+
err = reftable_iterator_next_ref(&it, &ref);
116+
if (err > 0) {
117+
break;
118+
}
119+
if (err < 0) {
120+
return err;
121+
}
122+
reftable_ref_record_print(&ref, hash_id);
123+
}
124+
reftable_iterator_destroy(&it);
125+
reftable_ref_record_clear(&ref);
126+
127+
err = reftable_merged_table_seek_log(merged, &it, "");
128+
if (err < 0) {
129+
return err;
130+
}
131+
while (1) {
132+
err = reftable_iterator_next_log(&it, &log);
133+
if (err > 0) {
134+
break;
135+
}
136+
if (err < 0) {
137+
return err;
138+
}
139+
reftable_log_record_print(&log, hash_id);
140+
}
141+
reftable_iterator_destroy(&it);
142+
reftable_log_record_clear(&log);
143+
144+
reftable_stack_destroy(stack);
145+
return 0;
146+
}
147+
148+
static void print_help(void)
149+
{
150+
printf("usage: dump [-cst] arg\n\n"
151+
"options: \n"
152+
" -c compact\n"
153+
" -t dump table\n"
154+
" -s dump stack\n"
155+
" -h this help\n"
156+
" -2 use SHA256\n"
157+
"\n");
158+
}
159+
160+
int reftable_dump_main(int argc, char *const *argv)
161+
{
162+
int err = 0;
163+
int opt;
164+
int opt_dump_table = 0;
165+
int opt_dump_stack = 0;
166+
int opt_compact = 0;
167+
const char *arg = NULL;
168+
while ((opt = getopt(argc, argv, "2chts")) != -1) {
169+
switch (opt) {
170+
case '2':
171+
hash_id = 0x73323536;
172+
break;
173+
case 't':
174+
opt_dump_table = 1;
175+
break;
176+
case 's':
177+
opt_dump_stack = 1;
178+
break;
179+
case 'c':
180+
opt_compact = 1;
181+
break;
182+
case '?':
183+
case 'h':
184+
print_help();
185+
return 2;
186+
break;
187+
}
188+
}
189+
190+
if (argv[optind] == NULL) {
191+
fprintf(stderr, "need argument\n");
192+
print_help();
193+
return 2;
194+
}
195+
196+
arg = argv[optind];
197+
198+
if (opt_dump_table) {
199+
err = dump_table(arg);
200+
} else if (opt_dump_stack) {
201+
err = dump_stack(arg);
202+
} else if (opt_compact) {
203+
err = compact_stack(arg);
204+
}
205+
206+
if (err < 0) {
207+
fprintf(stderr, "%s: %s: %s\n", argv[0], arg,
208+
reftable_error_str(err));
209+
return 1;
210+
}
211+
return 0;
212+
}

0 commit comments

Comments
 (0)