None of the callbacks actually care about having a "struct object";
they're happy with just the oid and type information. So let's give
ourselves more flexibility to avoid having a "struct object" by just
passing the broken-down fields.

Note that the callback already takes a "type" field for the fsck message
type. We'll rename that to "msg_type" (and use "object_type" for the
object type) to make the distinction explicit.

Signed-off-by: Jeff King <p...@peff.net>
---
 builtin/fsck.c | 17 ++++++++++-------
 fsck.c         | 11 +++++++----
 fsck.h         |  6 ++++--
 3 files changed, 21 insertions(+), 13 deletions(-)

diff --git a/builtin/fsck.c b/builtin/fsck.c
index 59c77c1baa..8d13794b14 100644
--- a/builtin/fsck.c
+++ b/builtin/fsck.c
@@ -104,23 +104,26 @@ static int objerror(struct object *obj, const char *err)
 }
 
 static int fsck_error_func(struct fsck_options *o,
-       struct object *obj, int type, const char *message)
+                          const struct object_id *oid,
+                          enum object_type object_type,
+                          int msg_type, const char *message)
 {
-       switch (type) {
+       switch (msg_type) {
        case FSCK_WARN:
                /* TRANSLATORS: e.g. warning in tree 01bfda: <more explanation> 
*/
                fprintf_ln(stderr, _("warning in %s %s: %s"),
-                          printable_type(&obj->oid, obj->type),
-                          describe_object(&obj->oid), message);
+                          printable_type(oid, object_type),
+                          describe_object(oid), message);
                return 0;
        case FSCK_ERROR:
                /* TRANSLATORS: e.g. error in tree 01bfda: <more explanation> */
                fprintf_ln(stderr, _("error in %s %s: %s"),
-                          printable_type(&obj->oid, obj->type),
-                          describe_object(&obj->oid), message);
+                          printable_type(oid, object_type),
+                          describe_object(oid), message);
                return 1;
        default:
-               BUG("%d (FSCK_IGNORE?) should never trigger this callback", 
type);
+               BUG("%d (FSCK_IGNORE?) should never trigger this callback",
+                   msg_type);
        }
 }
 
diff --git a/fsck.c b/fsck.c
index 124c0184d4..c036ba09ab 100644
--- a/fsck.c
+++ b/fsck.c
@@ -305,7 +305,8 @@ static int report(struct fsck_options *options, struct 
object *object,
 
        va_start(ap, fmt);
        strbuf_vaddf(&sb, fmt, ap);
-       result = options->error_func(options, object, msg_type, sb.buf);
+       result = options->error_func(options, &object->oid, object->type,
+                                    msg_type, sb.buf);
        strbuf_release(&sb);
        va_end(ap);
 
@@ -983,13 +984,15 @@ int fsck_object(struct object *obj, void *data, unsigned 
long size,
 }
 
 int fsck_error_function(struct fsck_options *o,
-       struct object *obj, int msg_type, const char *message)
+                       const struct object_id *oid,
+                       enum object_type object_type,
+                       int msg_type, const char *message)
 {
        if (msg_type == FSCK_WARN) {
-               warning("object %s: %s", fsck_describe_object(o, &obj->oid), 
message);
+               warning("object %s: %s", fsck_describe_object(o, oid), message);
                return 0;
        }
-       error("object %s: %s", fsck_describe_object(o, &obj->oid), message);
+       error("object %s: %s", fsck_describe_object(o, oid), message);
        return 1;
 }
 
diff --git a/fsck.h b/fsck.h
index 4397cab20f..f81aedf12f 100644
--- a/fsck.h
+++ b/fsck.h
@@ -27,10 +27,12 @@ typedef int (*fsck_walk_func)(struct object *obj, int type, 
void *data, struct f
 
 /* callback for fsck_object, type is FSCK_ERROR or FSCK_WARN */
 typedef int (*fsck_error)(struct fsck_options *o,
-       struct object *obj, int type, const char *message);
+                         const struct object_id *oid, enum object_type 
object_type,
+                         int msg_type, const char *message);
 
 int fsck_error_function(struct fsck_options *o,
-       struct object *obj, int type, const char *message);
+                       const struct object_id *oid, enum object_type 
object_type,
+                       int msg_type, const char *message);
 
 struct fsck_options {
        fsck_walk_func walk;
-- 
2.23.0.1228.gee29b05929

Reply via email to