With `refs_for_each_reflog_ent()` callers can iterate through all the reflog entries for a given reference. The callback that is being invoked for each such entry does not receive the name of the reference that we are currently iterating through. This isn't really a limiting factor, as callers can simply pass the name via the callback data. But this layout sometimes does make for a bit of an awkward calling pattern. One example: when iterating through all reflogs, and for each reflog we iterate through all refnames, we have to do some extra book keeping to track which reference name we are currently yielding reflog entries for. Change the signature of the callback function so that the reference name of the reflog gets passed through to it. Adapt callers accordingly and start using the new parameter in trivial cases. The next commit will refactor the reference migration logic to make use of this parameter so that we can simplify its logic a bit. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
76 lines
2.3 KiB
C
76 lines
2.3 KiB
C
#ifndef REFLOG_H
|
|
#define REFLOG_H
|
|
#include "refs.h"
|
|
|
|
#define REFLOG_EXPIRE_TOTAL (1 << 0)
|
|
#define REFLOG_EXPIRE_UNREACH (1 << 1)
|
|
|
|
struct reflog_expire_entry_option {
|
|
struct reflog_expire_entry_option *next;
|
|
timestamp_t expire_total;
|
|
timestamp_t expire_unreachable;
|
|
char pattern[FLEX_ARRAY];
|
|
};
|
|
|
|
struct reflog_expire_options {
|
|
struct reflog_expire_entry_option *entries, **entries_tail;
|
|
int stalefix;
|
|
int explicit_expiry;
|
|
timestamp_t default_expire_total;
|
|
timestamp_t expire_total;
|
|
timestamp_t default_expire_unreachable;
|
|
timestamp_t expire_unreachable;
|
|
int recno;
|
|
};
|
|
#define REFLOG_EXPIRE_OPTIONS_INIT(now) { \
|
|
.default_expire_total = now - 30 * 24 * 3600, \
|
|
.default_expire_unreachable = now - 90 * 24 * 3600, \
|
|
}
|
|
|
|
/*
|
|
* Parse the reflog expire configuration. This should be used with
|
|
* `repo_config()`.
|
|
*/
|
|
int reflog_expire_config(const char *var, const char *value,
|
|
const struct config_context *ctx, void *cb);
|
|
|
|
/*
|
|
* Adapt the options so that they apply to the given refname. This applies any
|
|
* per-reference reflog expiry configuration that may exist to the options.
|
|
*/
|
|
void reflog_expire_options_set_refname(struct reflog_expire_options *cb,
|
|
const char *refname);
|
|
|
|
struct expire_reflog_policy_cb {
|
|
enum {
|
|
UE_NORMAL,
|
|
UE_ALWAYS,
|
|
UE_HEAD
|
|
} unreachable_expire_kind;
|
|
struct commit_list *mark_list;
|
|
unsigned long mark_limit;
|
|
struct reflog_expire_options opts;
|
|
struct commit *tip_commit;
|
|
struct commit_list *tips;
|
|
unsigned int dry_run:1;
|
|
};
|
|
|
|
int reflog_delete(const char *rev, enum expire_reflog_flags flags,
|
|
int verbose);
|
|
void reflog_expiry_cleanup(void *cb_data);
|
|
void reflog_expiry_prepare(const char *refname, const struct object_id *oid,
|
|
void *cb_data);
|
|
int should_expire_reflog_ent(struct object_id *ooid, struct object_id *noid,
|
|
const char *email, timestamp_t timestamp, int tz,
|
|
const char *message, void *cb_data);
|
|
int count_reflog_ent(const char *refname,
|
|
struct object_id *ooid, struct object_id *noid,
|
|
const char *email, timestamp_t timestamp, int tz,
|
|
const char *message, void *cb_data);
|
|
int should_expire_reflog_ent_verbose(struct object_id *ooid,
|
|
struct object_id *noid,
|
|
const char *email,
|
|
timestamp_t timestamp, int tz,
|
|
const char *message, void *cb_data);
|
|
#endif /* REFLOG_H */
|