]> git.ipfire.org Git - thirdparty/git.git/commitdiff
refs/debug: trace into reflog expiry too
authorHan-Wen Nienhuys <hanwen@google.com>
Fri, 23 Apr 2021 09:10:39 +0000 (09:10 +0000)
committerJunio C Hamano <gitster@pobox.com>
Tue, 27 Apr 2021 06:59:39 +0000 (15:59 +0900)
Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
refs/debug.c

index 922e64fa6ad91bef44aa714e479c9281dce4b6c9..3b25e3aeb1ba3eb16532b4ee39b0e52799213899 100644 (file)
@@ -353,6 +353,40 @@ static int debug_delete_reflog(struct ref_store *ref_store, const char *refname)
        return res;
 }
 
+struct debug_reflog_expiry_should_prune {
+       reflog_expiry_prepare_fn *prepare;
+       reflog_expiry_should_prune_fn *should_prune;
+       reflog_expiry_cleanup_fn *cleanup;
+       void *cb_data;
+};
+
+static void debug_reflog_expiry_prepare(const char *refname,
+                                   const struct object_id *oid,
+                                   void *cb_data)
+{
+       struct debug_reflog_expiry_should_prune *prune = cb_data;
+       trace_printf_key(&trace_refs, "reflog_expire_prepare: %s\n", refname);
+       prune->prepare(refname, oid, prune->cb_data);
+}
+
+static int debug_reflog_expiry_should_prune_fn(struct object_id *ooid,
+                                              struct object_id *noid,
+                                              const char *email,
+                                              timestamp_t timestamp, int tz,
+                                              const char *message, void *cb_data) {
+       struct debug_reflog_expiry_should_prune *prune = cb_data;
+
+       int result = prune->should_prune(ooid, noid, email, timestamp, tz, message, prune->cb_data);
+       trace_printf_key(&trace_refs, "reflog_expire_should_prune: %s %ld: %d\n", message, (long int) timestamp, result);
+       return result;
+}
+
+static void debug_reflog_expiry_cleanup(void *cb_data)
+{
+       struct debug_reflog_expiry_should_prune *prune = cb_data;
+       prune->cleanup(prune->cb_data);
+}
+
 static int debug_reflog_expire(struct ref_store *ref_store, const char *refname,
                               const struct object_id *oid, unsigned int flags,
                               reflog_expiry_prepare_fn prepare_fn,
@@ -361,10 +395,17 @@ static int debug_reflog_expire(struct ref_store *ref_store, const char *refname,
                               void *policy_cb_data)
 {
        struct debug_ref_store *drefs = (struct debug_ref_store *)ref_store;
+       struct debug_reflog_expiry_should_prune prune = {
+               .prepare = prepare_fn,
+               .cleanup = cleanup_fn,
+               .should_prune = should_prune_fn,
+               .cb_data = policy_cb_data,
+       };
        int res = drefs->refs->be->reflog_expire(drefs->refs, refname, oid,
-                                                flags, prepare_fn,
-                                                should_prune_fn, cleanup_fn,
-                                                policy_cb_data);
+                                                flags, &debug_reflog_expiry_prepare,
+                                                &debug_reflog_expiry_should_prune_fn,
+                                                &debug_reflog_expiry_cleanup,
+                                                &prune);
        trace_printf_key(&trace_refs, "reflog_expire: %s: %d\n", refname, res);
        return res;
 }