Re: [PATCH 19/23] expire_reflog(): treat the policy callback data as opaque

2014-12-08 Thread Stefan Beller
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

2014-12-04 Thread Michael Haggerty
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);
+