builtin/reflog: introduce subcommand to list reflogs
While the git-reflog(1) command has subcommands to show reflog entries or check for reflog existence, it does not have any subcommands that would allow the user to enumerate all existing reflogs. This makes it quite hard to discover which reflogs a repository has. While this can be worked around with the "files" backend by enumerating files in the ".git/logs" directory, users of the "reftable" backend don't enjoy such a luxury. Introduce a new subcommand `git reflog list` that lists all reflogs the repository knows of to fill this gap. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
59c50a96c5
commit
d699d15c32
@ -7,11 +7,15 @@
|
||||
#include "wildmatch.h"
|
||||
#include "worktree.h"
|
||||
#include "reflog.h"
|
||||
#include "refs.h"
|
||||
#include "parse-options.h"
|
||||
|
||||
#define BUILTIN_REFLOG_SHOW_USAGE \
|
||||
N_("git reflog [show] [<log-options>] [<ref>]")
|
||||
|
||||
#define BUILTIN_REFLOG_LIST_USAGE \
|
||||
N_("git reflog list")
|
||||
|
||||
#define BUILTIN_REFLOG_EXPIRE_USAGE \
|
||||
N_("git reflog expire [--expire=<time>] [--expire-unreachable=<time>]\n" \
|
||||
" [--rewrite] [--updateref] [--stale-fix]\n" \
|
||||
@ -29,6 +33,11 @@ static const char *const reflog_show_usage[] = {
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const char *const reflog_list_usage[] = {
|
||||
BUILTIN_REFLOG_LIST_USAGE,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const char *const reflog_expire_usage[] = {
|
||||
BUILTIN_REFLOG_EXPIRE_USAGE,
|
||||
NULL
|
||||
@ -46,6 +55,7 @@ static const char *const reflog_exists_usage[] = {
|
||||
|
||||
static const char *const reflog_usage[] = {
|
||||
BUILTIN_REFLOG_SHOW_USAGE,
|
||||
BUILTIN_REFLOG_LIST_USAGE,
|
||||
BUILTIN_REFLOG_EXPIRE_USAGE,
|
||||
BUILTIN_REFLOG_DELETE_USAGE,
|
||||
BUILTIN_REFLOG_EXISTS_USAGE,
|
||||
@ -238,6 +248,29 @@ static int cmd_reflog_show(int argc, const char **argv, const char *prefix)
|
||||
return cmd_log_reflog(argc, argv, prefix);
|
||||
}
|
||||
|
||||
static int show_reflog(const char *refname, void *cb_data UNUSED)
|
||||
{
|
||||
printf("%s\n", refname);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_reflog_list(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
struct option options[] = {
|
||||
OPT_END()
|
||||
};
|
||||
struct ref_store *ref_store;
|
||||
|
||||
argc = parse_options(argc, argv, prefix, options, reflog_list_usage, 0);
|
||||
if (argc)
|
||||
return error(_("%s does not accept arguments: '%s'"),
|
||||
"list", argv[0]);
|
||||
|
||||
ref_store = get_main_ref_store(the_repository);
|
||||
|
||||
return refs_for_each_reflog(ref_store, show_reflog, NULL);
|
||||
}
|
||||
|
||||
static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
struct cmd_reflog_expire_cb cmd = { 0 };
|
||||
@ -417,6 +450,7 @@ int cmd_reflog(int argc, const char **argv, const char *prefix)
|
||||
parse_opt_subcommand_fn *fn = NULL;
|
||||
struct option options[] = {
|
||||
OPT_SUBCOMMAND("show", &fn, cmd_reflog_show),
|
||||
OPT_SUBCOMMAND("list", &fn, cmd_reflog_list),
|
||||
OPT_SUBCOMMAND("expire", &fn, cmd_reflog_expire),
|
||||
OPT_SUBCOMMAND("delete", &fn, cmd_reflog_delete),
|
||||
OPT_SUBCOMMAND("exists", &fn, cmd_reflog_exists),
|
||||
|
Reference in New Issue
Block a user