struct ref_transaction *transaction;
struct strbuf err = STRBUF_INIT;
- transaction = ref_store_transaction_begin(refs, 0, &err);
+ transaction = ref_store_transaction_begin(refs, &err);
if (!transaction ||
ref_transaction_delete(transaction, refname, old_oid,
flags, msg, &err) ||
}
struct ref_transaction *ref_store_transaction_begin(struct ref_store *refs,
- unsigned int flags,
struct strbuf *err)
{
struct ref_transaction *tr;
CALLOC_ARRAY(tr, 1);
tr->ref_store = refs;
- tr->flags = flags;
return tr;
}
struct ref_transaction *ref_transaction_begin(struct strbuf *err)
{
- return ref_store_transaction_begin(get_main_ref_store(the_repository), 0, err);
+ return ref_store_transaction_begin(get_main_ref_store(the_repository), err);
}
void ref_transaction_free(struct ref_transaction *transaction)
struct strbuf err = STRBUF_INIT;
int ret = 0;
- t = ref_store_transaction_begin(refs, 0, &err);
+ t = ref_store_transaction_begin(refs, &err);
if (!t ||
ref_transaction_update(t, refname, new_oid, old_oid, flags, msg,
&err) ||
const char *hook;
int ret = 0, i;
- if (transaction->flags & REF_TRANSACTION_SKIP_HOOK)
- return 0;
-
hook = find_hook("reference-transaction");
if (!hook)
return ret;
* struct strbuf err = STRBUF_INIT;
* int ret = 0;
*
- * transaction = ref_store_transaction_begin(refs, 0, &err);
+ * transaction = ref_store_transaction_begin(refs, &err);
* if (!transaction ||
* ref_transaction_update(...) ||
* ref_transaction_create(...) ||
UPDATE_REFS_QUIET_ON_ERR
};
-/*
- * Skip executing the reference-transaction hook.
- */
-#define REF_TRANSACTION_SKIP_HOOK (1 << 0)
-
/*
* Begin a reference transaction. The reference transaction must
* be freed by calling ref_transaction_free().
*/
struct ref_transaction *ref_store_transaction_begin(struct ref_store *refs,
- unsigned int flags,
struct strbuf *err);
struct ref_transaction *ref_transaction_begin(struct strbuf *err);
if (check_refname_format(r->name, 0))
return;
- transaction = ref_store_transaction_begin(&refs->base,
- REF_TRANSACTION_SKIP_HOOK, &err);
+ transaction = ref_store_transaction_begin(&refs->base, &err);
if (!transaction)
goto cleanup;
ref_transaction_add_update(
struct strbuf err = STRBUF_INIT;
struct ref_transaction *transaction;
- transaction = ref_store_transaction_begin(refs->packed_ref_store,
- REF_TRANSACTION_SKIP_HOOK, &err);
+ transaction = ref_store_transaction_begin(refs->packed_ref_store, &err);
if (!transaction)
return -1;
{
struct files_ref_store *refs =
files_downcast(ref_store, REF_STORE_WRITE, "delete_refs");
- struct ref_transaction *transaction = NULL;
struct strbuf err = STRBUF_INIT;
int i, result = 0;
if (packed_refs_lock(refs->packed_ref_store, 0, &err))
goto error;
- transaction = ref_store_transaction_begin(refs->packed_ref_store,
- REF_TRANSACTION_SKIP_HOOK, &err);
- if (!transaction)
- goto error;
-
- result = packed_refs_delete_refs(refs->packed_ref_store,
- transaction, msg, refnames, flags);
- if (result)
+ if (refs_delete_refs(refs->packed_ref_store, msg, refnames, flags)) {
+ packed_refs_unlock(refs->packed_ref_store);
goto error;
+ }
packed_refs_unlock(refs->packed_ref_store);
result |= error(_("could not remove reference %s"), refname);
}
- ref_transaction_free(transaction);
strbuf_release(&err);
return result;
else
error(_("could not delete references: %s"), err.buf);
- ref_transaction_free(transaction);
strbuf_release(&err);
return -1;
}
*/
if (!packed_transaction) {
packed_transaction = ref_store_transaction_begin(
- refs->packed_ref_store,
- REF_TRANSACTION_SKIP_HOOK, err);
+ refs->packed_ref_store, err);
if (!packed_transaction) {
ret = TRANSACTION_GENERIC_ERROR;
goto cleanup;
&affected_refnames))
BUG("initial ref transaction called with existing refs");
- packed_transaction = ref_store_transaction_begin(refs->packed_ref_store,
- REF_TRANSACTION_SKIP_HOOK, err);
+ packed_transaction = ref_store_transaction_begin(refs->packed_ref_store, err);
if (!packed_transaction) {
ret = TRANSACTION_GENERIC_ERROR;
goto cleanup;
static int packed_delete_refs(struct ref_store *ref_store, const char *msg,
struct string_list *refnames, unsigned int flags)
{
+ struct packed_ref_store *refs =
+ packed_downcast(ref_store, REF_STORE_WRITE, "delete_refs");
struct strbuf err = STRBUF_INIT;
struct ref_transaction *transaction;
+ struct string_list_item *item;
int ret;
+ (void)refs; /* We need the check above, but don't use the variable */
+
if (!refnames->nr)
return 0;
* updates into a single transaction.
*/
- transaction = ref_store_transaction_begin(ref_store, 0, &err);
+ transaction = ref_store_transaction_begin(ref_store, &err);
if (!transaction)
return -1;
- ret = packed_refs_delete_refs(ref_store, transaction,
- msg, refnames, flags);
-
- ref_transaction_free(transaction);
- return ret;
-}
-
-int packed_refs_delete_refs(struct ref_store *ref_store,
- struct ref_transaction *transaction,
- const char *msg,
- struct string_list *refnames,
- unsigned int flags)
-{
- struct strbuf err = STRBUF_INIT;
- struct string_list_item *item;
- int ret;
-
- /* Assert that the ref store refers to a packed backend. */
- packed_downcast(ref_store, REF_STORE_WRITE, "delete_refs");
-
for_each_string_list_item(item, refnames) {
if (ref_transaction_delete(transaction, item->string, NULL,
flags, msg, &err)) {
error(_("could not delete references: %s"), err.buf);
}
+ ref_transaction_free(transaction);
strbuf_release(&err);
return ret;
}
struct repository;
struct ref_transaction;
-struct string_list;
/*
* Support for storing references in a `packed-refs` file.
void packed_refs_unlock(struct ref_store *ref_store);
int packed_refs_is_locked(struct ref_store *ref_store);
-int packed_refs_delete_refs(struct ref_store *ref_store,
- struct ref_transaction *transaction,
- const char *msg,
- struct string_list *refnames,
- unsigned int flags);
-
/*
* Return true if `transaction` really needs to be carried out against
* the specified packed_ref_store, or false if it can be skipped
size_t nr;
enum ref_transaction_state state;
void *backend_data;
- unsigned int flags;
};
/*
strbuf_addf(&ref_name, "refs/rewritten/%.*s", len, name);
strbuf_addf(&msg, "rebase (label) '%.*s'", len, name);
- transaction = ref_store_transaction_begin(refs, 0, &err);
+ transaction = ref_store_transaction_begin(refs, &err);
if (!transaction) {
error("%s", err.buf);
ret = -1;
test_cmp expect target-repo.git/actual
'
-test_expect_success 'hook does not get called on packing refs' '
- # Pack references first such that we are in a known state.
- git pack-refs --all &&
-
- test_hook reference-transaction <<-\EOF &&
- echo "$@" >>actual
- cat >>actual
- EOF
- rm -f actual &&
-
- git update-ref refs/heads/unpacked-ref $POST_OID &&
- git pack-refs --all &&
-
- # We only expect a single hook invocation, which is the call to
- # git-update-ref(1).
- cat >expect <<-EOF &&
- prepared
- $ZERO_OID $POST_OID refs/heads/unpacked-ref
- committed
- $ZERO_OID $POST_OID refs/heads/unpacked-ref
- EOF
-
- test_cmp expect actual
-'
-
-test_expect_success 'deleting packed ref calls hook once' '
- # Create a reference and pack it.
- git update-ref refs/heads/to-be-deleted $POST_OID &&
- git pack-refs --all &&
-
- test_hook reference-transaction <<-\EOF &&
- echo "$@" >>actual
- cat >>actual
- EOF
- rm -f actual &&
-
- git update-ref -d refs/heads/to-be-deleted $POST_OID &&
-
- # We only expect a single hook invocation, which is the logical
- # deletion.
- cat >expect <<-EOF &&
- prepared
- $POST_OID $ZERO_OID refs/heads/to-be-deleted
- committed
- $POST_OID $ZERO_OID refs/heads/to-be-deleted
- EOF
-
- test_cmp expect actual
-'
-
test_done