reflog_expire: convert to struct object_id
Adjust the callback functions to take struct object_id * instead of unsigned char *, and modify related static functions accordingly. Introduce a temporary object_id instance into files_reflog_expire and copy the SHA-1 value passed in. This is necessary because the sha1 parameter can come indirectly from get_sha1. Without the temporary, it would require much more refactoring to be able to convert this function. Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
9e31eafe7e
commit
4322478a49
@ -186,13 +186,13 @@ static int commit_is_complete(struct commit *commit)
|
||||
return !is_incomplete;
|
||||
}
|
||||
|
||||
static int keep_entry(struct commit **it, unsigned char *sha1)
|
||||
static int keep_entry(struct commit **it, struct object_id *oid)
|
||||
{
|
||||
struct commit *commit;
|
||||
|
||||
if (is_null_sha1(sha1))
|
||||
if (is_null_oid(oid))
|
||||
return 1;
|
||||
commit = lookup_commit_reference_gently(sha1, 1);
|
||||
commit = lookup_commit_reference_gently(oid->hash, 1);
|
||||
if (!commit)
|
||||
return 0;
|
||||
|
||||
@ -251,17 +251,17 @@ static void mark_reachable(struct expire_reflog_policy_cb *cb)
|
||||
cb->mark_list = leftover;
|
||||
}
|
||||
|
||||
static int unreachable(struct expire_reflog_policy_cb *cb, struct commit *commit, unsigned char *sha1)
|
||||
static int unreachable(struct expire_reflog_policy_cb *cb, struct commit *commit, struct object_id *oid)
|
||||
{
|
||||
/*
|
||||
* We may or may not have the commit yet - if not, look it
|
||||
* up using the supplied sha1.
|
||||
*/
|
||||
if (!commit) {
|
||||
if (is_null_sha1(sha1))
|
||||
if (is_null_oid(oid))
|
||||
return 0;
|
||||
|
||||
commit = lookup_commit_reference_gently(sha1, 1);
|
||||
commit = lookup_commit_reference_gently(oid->hash, 1);
|
||||
|
||||
/* Not a commit -- keep it */
|
||||
if (!commit)
|
||||
@ -283,7 +283,7 @@ static int unreachable(struct expire_reflog_policy_cb *cb, struct commit *commit
|
||||
/*
|
||||
* Return true iff the specified reflog entry should be expired.
|
||||
*/
|
||||
static int should_expire_reflog_ent(unsigned char *osha1, unsigned char *nsha1,
|
||||
static int should_expire_reflog_ent(struct object_id *ooid, struct object_id *noid,
|
||||
const char *email, unsigned long timestamp, int tz,
|
||||
const char *message, void *cb_data)
|
||||
{
|
||||
@ -295,13 +295,13 @@ static int should_expire_reflog_ent(unsigned char *osha1, unsigned char *nsha1,
|
||||
|
||||
old = new = NULL;
|
||||
if (cb->cmd.stalefix &&
|
||||
(!keep_entry(&old, osha1) || !keep_entry(&new, nsha1)))
|
||||
(!keep_entry(&old, ooid) || !keep_entry(&new, noid)))
|
||||
return 1;
|
||||
|
||||
if (timestamp < cb->cmd.expire_unreachable) {
|
||||
if (cb->unreachable_expire_kind == UE_ALWAYS)
|
||||
return 1;
|
||||
if (unreachable(cb, old, osha1) || unreachable(cb, new, nsha1))
|
||||
if (unreachable(cb, old, ooid) || unreachable(cb, new, noid))
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -326,7 +326,7 @@ static int push_tip_to_list(const char *refname, const struct object_id *oid,
|
||||
}
|
||||
|
||||
static void reflog_expiry_prepare(const char *refname,
|
||||
const unsigned char *sha1,
|
||||
const struct object_id *oid,
|
||||
void *cb_data)
|
||||
{
|
||||
struct expire_reflog_policy_cb *cb = cb_data;
|
||||
@ -335,7 +335,7 @@ static void reflog_expiry_prepare(const char *refname,
|
||||
cb->tip_commit = NULL;
|
||||
cb->unreachable_expire_kind = UE_HEAD;
|
||||
} else {
|
||||
cb->tip_commit = lookup_commit_reference_gently(sha1, 1);
|
||||
cb->tip_commit = lookup_commit_reference_gently(oid->hash, 1);
|
||||
if (!cb->tip_commit)
|
||||
cb->unreachable_expire_kind = UE_ALWAYS;
|
||||
else
|
||||
|
6
refs.h
6
refs.h
@ -611,10 +611,10 @@ enum expire_reflog_flags {
|
||||
* unlocked again.
|
||||
*/
|
||||
typedef void reflog_expiry_prepare_fn(const char *refname,
|
||||
const unsigned char *sha1,
|
||||
const struct object_id *oid,
|
||||
void *cb_data);
|
||||
typedef int reflog_expiry_should_prune_fn(unsigned char *osha1,
|
||||
unsigned char *nsha1,
|
||||
typedef int reflog_expiry_should_prune_fn(struct object_id *ooid,
|
||||
struct object_id *noid,
|
||||
const char *email,
|
||||
unsigned long timestamp, int tz,
|
||||
const char *message, void *cb_data);
|
||||
|
@ -3207,7 +3207,7 @@ static int expire_reflog_ent(struct object_id *ooid, struct object_id *noid,
|
||||
if (cb->flags & EXPIRE_REFLOGS_REWRITE)
|
||||
ooid = &cb->last_kept_oid;
|
||||
|
||||
if ((*cb->should_prune_fn)(ooid->hash, noid->hash, email, timestamp, tz,
|
||||
if ((*cb->should_prune_fn)(ooid, noid, email, timestamp, tz,
|
||||
message, policy_cb)) {
|
||||
if (!cb->newlog)
|
||||
printf("would prune %s", message);
|
||||
@ -3244,6 +3244,7 @@ static int files_reflog_expire(struct ref_store *ref_store,
|
||||
int status = 0;
|
||||
int type;
|
||||
struct strbuf err = STRBUF_INIT;
|
||||
struct object_id oid;
|
||||
|
||||
memset(&cb, 0, sizeof(cb));
|
||||
cb.flags = flags;
|
||||
@ -3293,7 +3294,9 @@ static int files_reflog_expire(struct ref_store *ref_store,
|
||||
}
|
||||
}
|
||||
|
||||
(*prepare_fn)(refname, sha1, cb.policy_cb);
|
||||
hashcpy(oid.hash, sha1);
|
||||
|
||||
(*prepare_fn)(refname, &oid, cb.policy_cb);
|
||||
refs_for_each_reflog_ent(ref_store, refname, expire_reflog_ent, &cb);
|
||||
(*cleanup_fn)(cb.policy_cb);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user