mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
Merge branch 'kn/refs-optim-cleanup' into kn/maintenance-is-needed
* kn/refs-optim-cleanup: t/pack-refs-tests: move the 'test_done' to callees refs: rename 'pack_refs_opts' to 'refs_optimize_opts' refs: move to using the '.optimize' functions
This commit is contained in:
20
pack-refs.c
20
pack-refs.c
@@ -14,10 +14,10 @@ int pack_refs_core(int argc,
|
||||
{
|
||||
struct ref_exclusions excludes = REF_EXCLUSIONS_INIT;
|
||||
struct string_list included_refs = STRING_LIST_INIT_NODUP;
|
||||
struct pack_refs_opts pack_refs_opts = {
|
||||
struct refs_optimize_opts optimize_opts = {
|
||||
.exclusions = &excludes,
|
||||
.includes = &included_refs,
|
||||
.flags = PACK_REFS_PRUNE,
|
||||
.flags = REFS_OPTIMIZE_PRUNE,
|
||||
};
|
||||
struct string_list option_excluded_refs = STRING_LIST_INIT_NODUP;
|
||||
struct string_list_item *item;
|
||||
@@ -26,9 +26,9 @@ int pack_refs_core(int argc,
|
||||
|
||||
struct option opts[] = {
|
||||
OPT_BOOL(0, "all", &pack_all, N_("pack everything")),
|
||||
OPT_BIT(0, "prune", &pack_refs_opts.flags, N_("prune loose refs (default)"), PACK_REFS_PRUNE),
|
||||
OPT_BIT(0, "auto", &pack_refs_opts.flags, N_("auto-pack refs as needed"), PACK_REFS_AUTO),
|
||||
OPT_STRING_LIST(0, "include", pack_refs_opts.includes, N_("pattern"),
|
||||
OPT_BIT(0, "prune", &optimize_opts.flags, N_("prune loose refs (default)"), REFS_OPTIMIZE_PRUNE),
|
||||
OPT_BIT(0, "auto", &optimize_opts.flags, N_("auto-pack refs as needed"), REFS_OPTIMIZE_AUTO),
|
||||
OPT_STRING_LIST(0, "include", optimize_opts.includes, N_("pattern"),
|
||||
N_("references to include")),
|
||||
OPT_STRING_LIST(0, "exclude", &option_excluded_refs, N_("pattern"),
|
||||
N_("references to exclude")),
|
||||
@@ -39,15 +39,15 @@ int pack_refs_core(int argc,
|
||||
usage_with_options(usage_opts, opts);
|
||||
|
||||
for_each_string_list_item(item, &option_excluded_refs)
|
||||
add_ref_exclusion(pack_refs_opts.exclusions, item->string);
|
||||
add_ref_exclusion(optimize_opts.exclusions, item->string);
|
||||
|
||||
if (pack_all)
|
||||
string_list_append(pack_refs_opts.includes, "*");
|
||||
string_list_append(optimize_opts.includes, "*");
|
||||
|
||||
if (!pack_refs_opts.includes->nr)
|
||||
string_list_append(pack_refs_opts.includes, "refs/tags/*");
|
||||
if (!optimize_opts.includes->nr)
|
||||
string_list_append(optimize_opts.includes, "refs/tags/*");
|
||||
|
||||
ret = refs_optimize(get_main_ref_store(repo), &pack_refs_opts);
|
||||
ret = refs_optimize(get_main_ref_store(repo), &optimize_opts);
|
||||
|
||||
clear_ref_exclusions(&excludes);
|
||||
string_list_clear(&included_refs, 0);
|
||||
|
||||
8
refs.c
8
refs.c
@@ -2313,13 +2313,7 @@ void base_ref_store_init(struct ref_store *refs, struct repository *repo,
|
||||
refs->gitdir = xstrdup(path);
|
||||
}
|
||||
|
||||
/* backend functions */
|
||||
int refs_pack_refs(struct ref_store *refs, struct pack_refs_opts *opts)
|
||||
{
|
||||
return refs->be->pack_refs(refs, opts);
|
||||
}
|
||||
|
||||
int refs_optimize(struct ref_store *refs, struct pack_refs_opts *opts)
|
||||
int refs_optimize(struct ref_store *refs, struct refs_optimize_opts *opts)
|
||||
{
|
||||
return refs->be->optimize(refs, opts);
|
||||
}
|
||||
|
||||
24
refs.h
24
refs.h
@@ -499,32 +499,26 @@ void refs_warn_dangling_symrefs(struct ref_store *refs, FILE *fp,
|
||||
const struct string_list *refnames);
|
||||
|
||||
/*
|
||||
* Flags for controlling behaviour of pack_refs()
|
||||
* PACK_REFS_PRUNE: Prune loose refs after packing
|
||||
* PACK_REFS_AUTO: Pack refs on a best effort basis. The heuristics and end
|
||||
* result are decided by the ref backend. Backends may ignore
|
||||
* this flag and fall back to a normal repack.
|
||||
* Flags for controlling behaviour of refs_optimize()
|
||||
* REFS_OPTIMIZE_PRUNE: Prune loose refs after packing
|
||||
* REFS_OPTIMIZE_AUTO: Pack refs on a best effort basis. The heuristics and end
|
||||
* result are decided by the ref backend. Backends may ignore
|
||||
* this flag and fall back to a normal repack.
|
||||
*/
|
||||
#define PACK_REFS_PRUNE (1 << 0)
|
||||
#define PACK_REFS_AUTO (1 << 1)
|
||||
#define REFS_OPTIMIZE_PRUNE (1 << 0)
|
||||
#define REFS_OPTIMIZE_AUTO (1 << 1)
|
||||
|
||||
struct pack_refs_opts {
|
||||
struct refs_optimize_opts {
|
||||
unsigned int flags;
|
||||
struct ref_exclusions *exclusions;
|
||||
struct string_list *includes;
|
||||
};
|
||||
|
||||
/*
|
||||
* Write a packed-refs file for the current repository.
|
||||
* flags: Combination of the above PACK_REFS_* flags.
|
||||
*/
|
||||
int refs_pack_refs(struct ref_store *refs, struct pack_refs_opts *opts);
|
||||
|
||||
/*
|
||||
* Optimize the ref store. The exact behavior is up to the backend.
|
||||
* For the files backend, this is equivalent to packing refs.
|
||||
*/
|
||||
int refs_optimize(struct ref_store *refs, struct pack_refs_opts *opts);
|
||||
int refs_optimize(struct ref_store *refs, struct refs_optimize_opts *opts);
|
||||
|
||||
/*
|
||||
* Setup reflog before using. Fill in err and return -1 on failure.
|
||||
|
||||
@@ -116,11 +116,11 @@ static int debug_transaction_abort(struct ref_store *refs,
|
||||
return res;
|
||||
}
|
||||
|
||||
static int debug_pack_refs(struct ref_store *ref_store, struct pack_refs_opts *opts)
|
||||
static int debug_optimize(struct ref_store *ref_store, struct refs_optimize_opts *opts)
|
||||
{
|
||||
struct debug_ref_store *drefs = (struct debug_ref_store *)ref_store;
|
||||
int res = drefs->refs->be->pack_refs(drefs->refs, opts);
|
||||
trace_printf_key(&trace_refs, "pack_refs: %d\n", res);
|
||||
int res = drefs->refs->be->optimize(drefs->refs, opts);
|
||||
trace_printf_key(&trace_refs, "optimize: %d\n", res);
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -430,7 +430,7 @@ struct ref_storage_be refs_be_debug = {
|
||||
.transaction_finish = debug_transaction_finish,
|
||||
.transaction_abort = debug_transaction_abort,
|
||||
|
||||
.pack_refs = debug_pack_refs,
|
||||
.optimize = debug_optimize,
|
||||
.rename_ref = debug_rename_ref,
|
||||
.copy_ref = debug_copy_ref,
|
||||
|
||||
|
||||
@@ -1355,7 +1355,7 @@ static void prune_refs(struct files_ref_store *refs, struct ref_to_prune **refs_
|
||||
*/
|
||||
static int should_pack_ref(struct files_ref_store *refs,
|
||||
const struct reference *ref,
|
||||
struct pack_refs_opts *opts)
|
||||
struct refs_optimize_opts *opts)
|
||||
{
|
||||
struct string_list_item *item;
|
||||
|
||||
@@ -1383,7 +1383,7 @@ static int should_pack_ref(struct files_ref_store *refs,
|
||||
}
|
||||
|
||||
static int should_pack_refs(struct files_ref_store *refs,
|
||||
struct pack_refs_opts *opts)
|
||||
struct refs_optimize_opts *opts)
|
||||
{
|
||||
struct ref_iterator *iter;
|
||||
size_t packed_size;
|
||||
@@ -1391,7 +1391,7 @@ static int should_pack_refs(struct files_ref_store *refs,
|
||||
size_t limit;
|
||||
int ret;
|
||||
|
||||
if (!(opts->flags & PACK_REFS_AUTO))
|
||||
if (!(opts->flags & REFS_OPTIMIZE_AUTO))
|
||||
return 1;
|
||||
|
||||
ret = packed_refs_size(refs->packed_ref_store, &packed_size);
|
||||
@@ -1444,8 +1444,8 @@ static int should_pack_refs(struct files_ref_store *refs,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int files_pack_refs(struct ref_store *ref_store,
|
||||
struct pack_refs_opts *opts)
|
||||
static int files_optimize(struct ref_store *ref_store,
|
||||
struct refs_optimize_opts *opts)
|
||||
{
|
||||
struct files_ref_store *refs =
|
||||
files_downcast(ref_store, REF_STORE_WRITE | REF_STORE_ODB,
|
||||
@@ -1488,7 +1488,7 @@ static int files_pack_refs(struct ref_store *ref_store,
|
||||
iter->ref.name, err.buf);
|
||||
|
||||
/* Schedule the loose reference for pruning if requested. */
|
||||
if ((opts->flags & PACK_REFS_PRUNE)) {
|
||||
if ((opts->flags & REFS_OPTIMIZE_PRUNE)) {
|
||||
struct ref_to_prune *n;
|
||||
FLEX_ALLOC_STR(n, name, iter->ref.name);
|
||||
oidcpy(&n->oid, iter->ref.oid);
|
||||
@@ -1512,15 +1512,6 @@ static int files_pack_refs(struct ref_store *ref_store,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int files_optimize(struct ref_store *ref_store, struct pack_refs_opts *opts)
|
||||
{
|
||||
/*
|
||||
* For the "files" backend, "optimizing" is the same as "packing".
|
||||
* So, we just call the existing worker function for packing.
|
||||
*/
|
||||
return files_pack_refs(ref_store, opts);
|
||||
}
|
||||
|
||||
/*
|
||||
* People using contrib's git-new-workdir have .git/logs/refs ->
|
||||
* /some/other/path/.git/logs/refs, and that may live on another device.
|
||||
@@ -3990,7 +3981,6 @@ struct ref_storage_be refs_be_files = {
|
||||
.transaction_finish = files_transaction_finish,
|
||||
.transaction_abort = files_transaction_abort,
|
||||
|
||||
.pack_refs = files_pack_refs,
|
||||
.optimize = files_optimize,
|
||||
.rename_ref = files_rename_ref,
|
||||
.copy_ref = files_copy_ref,
|
||||
|
||||
@@ -1773,8 +1773,8 @@ cleanup:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int packed_pack_refs(struct ref_store *ref_store UNUSED,
|
||||
struct pack_refs_opts *pack_opts UNUSED)
|
||||
static int packed_optimize(struct ref_store *ref_store UNUSED,
|
||||
struct refs_optimize_opts *opts UNUSED)
|
||||
{
|
||||
/*
|
||||
* Packed refs are already packed. It might be that loose refs
|
||||
@@ -2129,7 +2129,7 @@ struct ref_storage_be refs_be_packed = {
|
||||
.transaction_finish = packed_transaction_finish,
|
||||
.transaction_abort = packed_transaction_abort,
|
||||
|
||||
.pack_refs = packed_pack_refs,
|
||||
.optimize = packed_optimize,
|
||||
.rename_ref = NULL,
|
||||
.copy_ref = NULL,
|
||||
|
||||
|
||||
@@ -422,10 +422,8 @@ typedef int ref_transaction_commit_fn(struct ref_store *refs,
|
||||
struct ref_transaction *transaction,
|
||||
struct strbuf *err);
|
||||
|
||||
typedef int pack_refs_fn(struct ref_store *ref_store,
|
||||
struct pack_refs_opts *opts);
|
||||
typedef int optimize_fn(struct ref_store *ref_store,
|
||||
struct pack_refs_opts *opts);
|
||||
struct refs_optimize_opts *opts);
|
||||
typedef int rename_ref_fn(struct ref_store *ref_store,
|
||||
const char *oldref, const char *newref,
|
||||
const char *logmsg);
|
||||
@@ -550,7 +548,6 @@ struct ref_storage_be {
|
||||
ref_transaction_finish_fn *transaction_finish;
|
||||
ref_transaction_abort_fn *transaction_abort;
|
||||
|
||||
pack_refs_fn *pack_refs;
|
||||
optimize_fn *optimize;
|
||||
rename_ref_fn *rename_ref;
|
||||
copy_ref_fn *copy_ref;
|
||||
|
||||
@@ -1700,11 +1700,11 @@ done:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int reftable_be_pack_refs(struct ref_store *ref_store,
|
||||
struct pack_refs_opts *opts)
|
||||
static int reftable_be_optimize(struct ref_store *ref_store,
|
||||
struct refs_optimize_opts *opts)
|
||||
{
|
||||
struct reftable_ref_store *refs =
|
||||
reftable_be_downcast(ref_store, REF_STORE_WRITE | REF_STORE_ODB, "pack_refs");
|
||||
reftable_be_downcast(ref_store, REF_STORE_WRITE | REF_STORE_ODB, "optimize_refs");
|
||||
struct reftable_stack *stack;
|
||||
int ret;
|
||||
|
||||
@@ -1715,7 +1715,7 @@ static int reftable_be_pack_refs(struct ref_store *ref_store,
|
||||
if (!stack)
|
||||
stack = refs->main_backend.stack;
|
||||
|
||||
if (opts->flags & PACK_REFS_AUTO)
|
||||
if (opts->flags & REFS_OPTIMIZE_AUTO)
|
||||
ret = reftable_stack_auto_compact(stack);
|
||||
else
|
||||
ret = reftable_stack_compact_all(stack, NULL);
|
||||
@@ -1733,12 +1733,6 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int reftable_be_optimize(struct ref_store *ref_store,
|
||||
struct pack_refs_opts *opts)
|
||||
{
|
||||
return reftable_be_pack_refs(ref_store, opts);
|
||||
}
|
||||
|
||||
struct write_create_symref_arg {
|
||||
struct reftable_ref_store *refs;
|
||||
struct reftable_stack *stack;
|
||||
@@ -2761,7 +2755,6 @@ struct ref_storage_be refs_be_reftable = {
|
||||
.transaction_finish = reftable_be_transaction_finish,
|
||||
.transaction_abort = reftable_be_transaction_abort,
|
||||
|
||||
.pack_refs = reftable_be_pack_refs,
|
||||
.optimize = reftable_be_optimize,
|
||||
.rename_ref = reftable_be_rename_ref,
|
||||
.copy_ref = reftable_be_copy_ref,
|
||||
|
||||
@@ -459,5 +459,3 @@ test_expect_success 'pack-refs does not store invalid peeled tag value' '
|
||||
test_grep ! "^\^" .git/packed-refs
|
||||
)
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
@@ -18,3 +18,5 @@ export GIT_TEST_DEFAULT_REF_FORMAT
|
||||
. ./test-lib.sh
|
||||
|
||||
. "$TEST_DIRECTORY"/pack-refs-tests.sh
|
||||
|
||||
test_done
|
||||
|
||||
@@ -15,3 +15,5 @@ export GIT_TEST_DEFAULT_REF_FORMAT
|
||||
|
||||
pack_refs='refs optimize'
|
||||
. "$TEST_DIRECTORY"/pack-refs-tests.sh
|
||||
|
||||
test_done
|
||||
|
||||
Reference in New Issue
Block a user