@@ -1285,6 +1285,29 @@ int fsck_error_function(struct fsck_objects_options *objects_options,
return 1;
}
+int fsck_refs_error_function(struct fsck_objects_options *objects_options UNUSED,
+ struct fsck_refs_options *refs_options,
+ const struct object_id *oid,
+ enum object_type object_type UNUSED,
+ const char *checked_ref_name,
+ enum fsck_msg_type msg_type,
+ enum fsck_msg_id msg_id UNUSED,
+ const char *message)
+{
+ static struct strbuf sb = STRBUF_INIT;
+
+ strbuf_addstr(&sb, checked_ref_name);
+ if (oid)
+ strbuf_addf(&sb, " -> (%s)", oid_to_hex(oid));
+
+ if (msg_type == FSCK_WARN) {
+ warning("%s: %s", sb.buf, message);
+ return 0;
+ }
+ error("%s: %s", sb.buf, message);
+ return 1;
+}
+
static int fsck_blobs(struct oidset *blobs_found, struct oidset *blobs_done,
enum fsck_msg_id msg_missing, enum fsck_msg_id msg_type,
struct fsck_objects_options *options,
@@ -140,6 +140,14 @@ int fsck_error_cb_print_missing_gitmodules(struct fsck_objects_options *objects_
enum fsck_msg_type msg_type,
enum fsck_msg_id msg_id,
const char *message);
+int fsck_refs_error_function(struct fsck_objects_options *objects_options,
+ struct fsck_refs_options *refs_options,
+ const struct object_id *oid,
+ enum object_type object_type,
+ const char *checked_ref_name,
+ enum fsck_msg_type msg_type,
+ enum fsck_msg_id msg_id,
+ const char *message);
struct fsck_options {
fsck_error error_func;
@@ -150,6 +158,17 @@ struct fsck_options {
struct fsck_refs_options {
struct fsck_options fsck_options;
};
+#define FSCK_REFS_OPTIONS_DEFAULT { \
+ .fsck_options = { \
+ .error_func = fsck_refs_error_function, \
+ }, \
+}
+#define FSCK_REFS_OPTIONS_STRICT { \
+ .fsck_options = { \
+ .error_func = fsck_refs_error_function, \
+ .strict = 1, \
+ }, \
+}
struct fsck_objects_options {
struct fsck_options fsck_options;
Add "FSCK_REFS_OPTIONS_DEFAULT" and "FSCK_REFS_OPTIONS_STRICT" macros to create the "fsck_refs_options" easily. Add refs-specific "error_func" callback "fsck_refs_error_function". "fsck_refs_error_function" will use the "oid" parameter. When the caller passed the oid, it will use "oid_to_hex" to get the corresponding hex value to report to the user. Mentored-by: Patrick Steinhardt <ps@pks.im> Mentored-by: Karthik Nayak <karthik.188@gmail.com> Signed-off-by: shejialuo <shejialuo@gmail.com> --- fsck.c | 23 +++++++++++++++++++++++ fsck.h | 19 +++++++++++++++++++ 2 files changed, 42 insertions(+)