mirror of
https://github.com/git/git.git
synced 2024-10-18 14:38:11 +02:00
fcf341890e
We're about to introduce new configs that will allow users to have more control over how exactly reftables are written. To verify that these configs are effective we will need to take a peak into the actual blocks written by the reftable backend. Introduce a new mode to the dumping logic that prints out the block structure. This logic can be invoked via `test-tool dump-reftables -b`. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
112 lines
2.4 KiB
C
112 lines
2.4 KiB
C
/*
|
|
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-ll.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 int compact_stack(const char *stackdir)
|
|
{
|
|
struct reftable_stack *stack = NULL;
|
|
struct reftable_write_options opts = { 0 };
|
|
|
|
int err = reftable_new_stack(&stack, stackdir, &opts);
|
|
if (err < 0)
|
|
goto done;
|
|
|
|
err = reftable_stack_compact_all(stack, NULL);
|
|
if (err < 0)
|
|
goto done;
|
|
done:
|
|
if (stack) {
|
|
reftable_stack_destroy(stack);
|
|
}
|
|
return err;
|
|
}
|
|
|
|
static void print_help(void)
|
|
{
|
|
printf("usage: dump [-cst] arg\n\n"
|
|
"options: \n"
|
|
" -c compact\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;
|
|
int opt_compact = 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("-c", argv[1]))
|
|
opt_compact = 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);
|
|
} else if (opt_compact) {
|
|
err = compact_stack(arg);
|
|
}
|
|
|
|
if (err < 0) {
|
|
fprintf(stderr, "%s: %s: %s\n", argv0, arg,
|
|
reftable_error_str(err));
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|