mirror of
https://github.com/git/git.git
synced 2024-11-23 18:05:29 +08:00
8a676bdc5c
The "hash-ll.h" header was introduced via d1cbe1e6d8
(hash-ll.h: split
out of hash.h to remove dependency on repository.h, 2023-04-22) to make
explicit the split between hash-related functions that rely on the
global `the_repository`, and those that don't. This split is no longer
necessary now that we we have removed the reliance on `the_repository`.
Merge "hash-ll.h" back into "hash.h". This causes some code units to not
include "repository.h" anymore, which requires us to add some forward
declarations.
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.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;
|
|
}
|