Re: [PATCH 19/23] expire_reflog(): treat the policy callback data as opaque
On Fri, Dec 05, 2014 at 12:08:31AM +0100, Michael Haggerty wrote: Now that expire_reflog() doesn't actually look in the expire_reflog_policy_cb data structure, we can make it opaque: * Change its callers to pass it a pointer to an entire struct expire_reflog_policy_cb. * Change it to pass the pointer through as a void *. * Change the policy functions, reflog_expiry_prepare(), reflog_expiry_cleanup(), and should_expire_reflog_ent(), to accept void *cb_data arguments and cast them to struct expire_reflog_policy_cb internally. Signed-off-by: Michael Haggerty mhag...@alum.mit.edu Reviewed-by: Stefan Beller sbel...@google.com --- builtin/reflog.c | 73 1 file changed, 36 insertions(+), 37 deletions(-) diff --git a/builtin/reflog.c b/builtin/reflog.c index 01b76d0..c30936bb 100644 --- a/builtin/reflog.c +++ b/builtin/reflog.c @@ -43,7 +43,7 @@ struct expire_reflog_policy_cb { } unreachable_expire_kind; struct commit_list *mark_list; unsigned long mark_limit; - struct cmd_reflog_expire_cb *cmd; + struct cmd_reflog_expire_cb cmd; struct commit *tip_commit; struct commit_list *tips; }; @@ -309,22 +309,22 @@ static int should_expire_reflog_ent(unsigned char *osha1, unsigned char *nsha1, struct expire_reflog_policy_cb *cb = cb_data; struct commit *old, *new; - if (timestamp cb-cmd-expire_total) + if (timestamp cb-cmd.expire_total) return 1; old = new = NULL; - if (cb-cmd-stalefix + if (cb-cmd.stalefix (!keep_entry(old, osha1) || !keep_entry(new, nsha1))) return 1; - if (timestamp cb-cmd-expire_unreachable) { + if (timestamp cb-cmd.expire_unreachable) { if (cb-unreachable_expire_kind == UE_ALWAYS) return 1; if (unreachable(cb, old, osha1) || unreachable(cb, new, nsha1)) return 1; } - if (cb-cmd-recno --(cb-cmd-recno) == 0) + if (cb-cmd.recno --(cb-cmd.recno) == 0) return 1; return 0; @@ -378,9 +378,11 @@ static int push_tip_to_list(const char *refname, const unsigned char *sha1, static void reflog_expiry_prepare(const char *refname, const unsigned char *sha1, - struct expire_reflog_policy_cb *cb) + void *cb_data) { - if (!cb-cmd-expire_unreachable || !strcmp(refname, HEAD)) { + struct expire_reflog_policy_cb *cb = cb_data; + + if (!cb-cmd.expire_unreachable || !strcmp(refname, HEAD)) { cb-tip_commit = NULL; cb-unreachable_expire_kind = UE_HEAD; } else { @@ -391,7 +393,7 @@ static void reflog_expiry_prepare(const char *refname, cb-unreachable_expire_kind = UE_NORMAL; } - if (cb-cmd-expire_unreachable = cb-cmd-expire_total) + if (cb-cmd.expire_unreachable = cb-cmd.expire_total) cb-unreachable_expire_kind = UE_ALWAYS; cb-mark_list = NULL; @@ -405,13 +407,15 @@ static void reflog_expiry_prepare(const char *refname, } else { commit_list_insert(cb-tip_commit, cb-mark_list); } - cb-mark_limit = cb-cmd-expire_total; + cb-mark_limit = cb-cmd.expire_total; mark_reachable(cb); } } -static void reflog_expiry_cleanup(struct expire_reflog_policy_cb *cb) +static void reflog_expiry_cleanup(void *cb_data) { + struct expire_reflog_policy_cb *cb = cb_data; + if (cb-unreachable_expire_kind != UE_ALWAYS) { if (cb-unreachable_expire_kind == UE_HEAD) { struct commit_list *elem; @@ -427,19 +431,16 @@ static void reflog_expiry_cleanup(struct expire_reflog_policy_cb *cb) static struct lock_file reflog_lock; static int expire_reflog(const char *refname, const unsigned char *sha1, - unsigned int flags, void *cb_data) + unsigned int flags, void *policy_cb_data) { - struct cmd_reflog_expire_cb *cmd = cb_data; struct expire_reflog_cb cb; - struct expire_reflog_policy_cb policy_cb; struct ref_lock *lock; char *log_file; int status = 0; memset(cb, 0, sizeof(cb)); - memset(policy_cb, 0, sizeof(policy_cb)); cb.flags = flags; - cb.policy_cb = policy_cb; + cb.policy_cb = policy_cb_data; /* * we take the lock for the ref itself to prevent it from @@ -462,11 +463,9 @@ static int expire_reflog(const char *refname, const unsigned char *sha1, goto failure; } - policy_cb.cmd = cmd; - - reflog_expiry_prepare(refname, sha1, policy_cb); + reflog_expiry_prepare(refname, sha1, cb.policy_cb);
[PATCH 19/23] expire_reflog(): treat the policy callback data as opaque
Now that expire_reflog() doesn't actually look in the expire_reflog_policy_cb data structure, we can make it opaque: * Change its callers to pass it a pointer to an entire struct expire_reflog_policy_cb. * Change it to pass the pointer through as a void *. * Change the policy functions, reflog_expiry_prepare(), reflog_expiry_cleanup(), and should_expire_reflog_ent(), to accept void *cb_data arguments and cast them to struct expire_reflog_policy_cb internally. Signed-off-by: Michael Haggerty mhag...@alum.mit.edu --- builtin/reflog.c | 73 1 file changed, 36 insertions(+), 37 deletions(-) diff --git a/builtin/reflog.c b/builtin/reflog.c index 01b76d0..c30936bb 100644 --- a/builtin/reflog.c +++ b/builtin/reflog.c @@ -43,7 +43,7 @@ struct expire_reflog_policy_cb { } unreachable_expire_kind; struct commit_list *mark_list; unsigned long mark_limit; - struct cmd_reflog_expire_cb *cmd; + struct cmd_reflog_expire_cb cmd; struct commit *tip_commit; struct commit_list *tips; }; @@ -309,22 +309,22 @@ static int should_expire_reflog_ent(unsigned char *osha1, unsigned char *nsha1, struct expire_reflog_policy_cb *cb = cb_data; struct commit *old, *new; - if (timestamp cb-cmd-expire_total) + if (timestamp cb-cmd.expire_total) return 1; old = new = NULL; - if (cb-cmd-stalefix + if (cb-cmd.stalefix (!keep_entry(old, osha1) || !keep_entry(new, nsha1))) return 1; - if (timestamp cb-cmd-expire_unreachable) { + if (timestamp cb-cmd.expire_unreachable) { if (cb-unreachable_expire_kind == UE_ALWAYS) return 1; if (unreachable(cb, old, osha1) || unreachable(cb, new, nsha1)) return 1; } - if (cb-cmd-recno --(cb-cmd-recno) == 0) + if (cb-cmd.recno --(cb-cmd.recno) == 0) return 1; return 0; @@ -378,9 +378,11 @@ static int push_tip_to_list(const char *refname, const unsigned char *sha1, static void reflog_expiry_prepare(const char *refname, const unsigned char *sha1, - struct expire_reflog_policy_cb *cb) + void *cb_data) { - if (!cb-cmd-expire_unreachable || !strcmp(refname, HEAD)) { + struct expire_reflog_policy_cb *cb = cb_data; + + if (!cb-cmd.expire_unreachable || !strcmp(refname, HEAD)) { cb-tip_commit = NULL; cb-unreachable_expire_kind = UE_HEAD; } else { @@ -391,7 +393,7 @@ static void reflog_expiry_prepare(const char *refname, cb-unreachable_expire_kind = UE_NORMAL; } - if (cb-cmd-expire_unreachable = cb-cmd-expire_total) + if (cb-cmd.expire_unreachable = cb-cmd.expire_total) cb-unreachable_expire_kind = UE_ALWAYS; cb-mark_list = NULL; @@ -405,13 +407,15 @@ static void reflog_expiry_prepare(const char *refname, } else { commit_list_insert(cb-tip_commit, cb-mark_list); } - cb-mark_limit = cb-cmd-expire_total; + cb-mark_limit = cb-cmd.expire_total; mark_reachable(cb); } } -static void reflog_expiry_cleanup(struct expire_reflog_policy_cb *cb) +static void reflog_expiry_cleanup(void *cb_data) { + struct expire_reflog_policy_cb *cb = cb_data; + if (cb-unreachable_expire_kind != UE_ALWAYS) { if (cb-unreachable_expire_kind == UE_HEAD) { struct commit_list *elem; @@ -427,19 +431,16 @@ static void reflog_expiry_cleanup(struct expire_reflog_policy_cb *cb) static struct lock_file reflog_lock; static int expire_reflog(const char *refname, const unsigned char *sha1, -unsigned int flags, void *cb_data) +unsigned int flags, void *policy_cb_data) { - struct cmd_reflog_expire_cb *cmd = cb_data; struct expire_reflog_cb cb; - struct expire_reflog_policy_cb policy_cb; struct ref_lock *lock; char *log_file; int status = 0; memset(cb, 0, sizeof(cb)); - memset(policy_cb, 0, sizeof(policy_cb)); cb.flags = flags; - cb.policy_cb = policy_cb; + cb.policy_cb = policy_cb_data; /* * we take the lock for the ref itself to prevent it from @@ -462,11 +463,9 @@ static int expire_reflog(const char *refname, const unsigned char *sha1, goto failure; } - policy_cb.cmd = cmd; - - reflog_expiry_prepare(refname, sha1, policy_cb); + reflog_expiry_prepare(refname, sha1, cb.policy_cb); for_each_reflog_ent(refname, expire_reflog_ent, cb); - reflog_expiry_cleanup(policy_cb); +