refs: allow to skip creation of reflog entries
The ref backends do not have any way to disable the creation of reflog entries. This will be required for upcoming ref format migration logic so that we do not create any entries that didn't exist in the original ref database. Provide a new `REF_SKIP_CREATE_REFLOG` flag that allows the caller to disable reflog entry creation. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
6e1683ace9
commit
fbd1a693c7
6
refs.c
6
refs.c
@ -1194,6 +1194,12 @@ int ref_transaction_update(struct ref_transaction *transaction,
|
||||
{
|
||||
assert(err);
|
||||
|
||||
if ((flags & REF_FORCE_CREATE_REFLOG) &&
|
||||
(flags & REF_SKIP_CREATE_REFLOG)) {
|
||||
strbuf_addstr(err, _("refusing to force and skip creation of reflog"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!(flags & REF_SKIP_REFNAME_VERIFICATION) &&
|
||||
((new_oid && !is_null_oid(new_oid)) ?
|
||||
check_refname_format(refname, REFNAME_ALLOW_ONELEVEL) :
|
||||
|
8
refs.h
8
refs.h
@ -659,13 +659,19 @@ struct ref_transaction *ref_store_transaction_begin(struct ref_store *refs,
|
||||
*/
|
||||
#define REF_SKIP_REFNAME_VERIFICATION (1 << 11)
|
||||
|
||||
/*
|
||||
* Skip creation of a reflog entry, even if it would have otherwise been
|
||||
* created.
|
||||
*/
|
||||
#define REF_SKIP_CREATE_REFLOG (1 << 12)
|
||||
|
||||
/*
|
||||
* Bitmask of all of the flags that are allowed to be passed in to
|
||||
* ref_transaction_update() and friends:
|
||||
*/
|
||||
#define REF_TRANSACTION_UPDATE_ALLOWED_FLAGS \
|
||||
(REF_NO_DEREF | REF_FORCE_CREATE_REFLOG | REF_SKIP_OID_VERIFICATION | \
|
||||
REF_SKIP_REFNAME_VERIFICATION)
|
||||
REF_SKIP_REFNAME_VERIFICATION | REF_SKIP_CREATE_REFLOG)
|
||||
|
||||
/*
|
||||
* Add a reference update to transaction. `new_oid` is the value that
|
||||
|
@ -1750,6 +1750,9 @@ static int files_log_ref_write(struct files_ref_store *refs,
|
||||
{
|
||||
int logfd, result;
|
||||
|
||||
if (flags & REF_SKIP_CREATE_REFLOG)
|
||||
return 0;
|
||||
|
||||
if (log_all_ref_updates == LOG_REFS_UNSET)
|
||||
log_all_ref_updates = is_bare_repository() ? LOG_REFS_NONE : LOG_REFS_NORMAL;
|
||||
|
||||
@ -2251,6 +2254,7 @@ static int split_head_update(struct ref_update *update,
|
||||
struct ref_update *new_update;
|
||||
|
||||
if ((update->flags & REF_LOG_ONLY) ||
|
||||
(update->flags & REF_SKIP_CREATE_REFLOG) ||
|
||||
(update->flags & REF_IS_PRUNING) ||
|
||||
(update->flags & REF_UPDATE_VIA_HEAD))
|
||||
return 0;
|
||||
|
@ -1103,7 +1103,8 @@ static int write_transaction_table(struct reftable_writer *writer, void *cb_data
|
||||
|
||||
if (ret)
|
||||
goto done;
|
||||
} else if (u->flags & REF_HAVE_NEW &&
|
||||
} else if (!(u->flags & REF_SKIP_CREATE_REFLOG) &&
|
||||
(u->flags & REF_HAVE_NEW) &&
|
||||
(u->flags & REF_FORCE_CREATE_REFLOG ||
|
||||
should_write_log(&arg->refs->base, u->refname))) {
|
||||
struct reftable_log_record *log;
|
||||
|
@ -126,6 +126,7 @@ static struct flag_definition transaction_flags[] = {
|
||||
FLAG_DEF(REF_FORCE_CREATE_REFLOG),
|
||||
FLAG_DEF(REF_SKIP_OID_VERIFICATION),
|
||||
FLAG_DEF(REF_SKIP_REFNAME_VERIFICATION),
|
||||
FLAG_DEF(REF_SKIP_CREATE_REFLOG),
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user