mirror of
https://github.com/git/git
synced 2024-08-24 18:26:02 +00:00
![Johannes Schindelin](/assets/img/avatar_default.png)
There are legacy repositories out there whose older commits and tags have issues that prevent pushing them when 'receive.fsckObjects' is set. One real-life example is a commit object that has been hand-crafted to list two authors. Often, it is not possible to fix those issues without disrupting the work with said repositories, yet it is still desirable to perform checks by setting `receive.fsckObjects = true`. This commit is the first step to allow demoting specific fsck issues to mere warnings. The `fsck_set_msg_types()` function added by this commit parses a list of settings in the form: missingemail=warn,badname=warn,... Unfortunately, the FSCK_WARN/FSCK_ERROR flag is only really heeded by git fsck so far, but other call paths (e.g. git index-pack --strict) error out *always* no matter what type was specified. Therefore, we need to take extra care to set all message types to FSCK_ERROR by default in those cases. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
51 lines
1.6 KiB
C
51 lines
1.6 KiB
C
#ifndef GIT_FSCK_H
|
|
#define GIT_FSCK_H
|
|
|
|
#define FSCK_ERROR 1
|
|
#define FSCK_WARN 2
|
|
|
|
struct fsck_options;
|
|
|
|
void fsck_set_msg_type(struct fsck_options *options,
|
|
const char *msg_id, const char *msg_type);
|
|
void fsck_set_msg_types(struct fsck_options *options, const char *values);
|
|
|
|
/*
|
|
* callback function for fsck_walk
|
|
* type is the expected type of the object or OBJ_ANY
|
|
* the return value is:
|
|
* 0 everything OK
|
|
* <0 error signaled and abort
|
|
* >0 error signaled and do not abort
|
|
*/
|
|
typedef int (*fsck_walk_func)(struct object *obj, int type, void *data, struct fsck_options *options);
|
|
|
|
/* callback for fsck_object, type is FSCK_ERROR or FSCK_WARN */
|
|
typedef int (*fsck_error)(struct object *obj, int type, const char *message);
|
|
|
|
int fsck_error_function(struct object *obj, int type, const char *message);
|
|
|
|
struct fsck_options {
|
|
fsck_walk_func walk;
|
|
fsck_error error_func;
|
|
unsigned strict:1;
|
|
int *msg_type;
|
|
};
|
|
|
|
#define FSCK_OPTIONS_DEFAULT { NULL, fsck_error_function, 0, NULL }
|
|
#define FSCK_OPTIONS_STRICT { NULL, fsck_error_function, 1, NULL }
|
|
|
|
/* descend in all linked child objects
|
|
* the return value is:
|
|
* -1 error in processing the object
|
|
* <0 return value of the callback, which lead to an abort
|
|
* >0 return value of the first signaled error >0 (in the case of no other errors)
|
|
* 0 everything OK
|
|
*/
|
|
int fsck_walk(struct object *obj, void *data, struct fsck_options *options);
|
|
/* If NULL is passed for data, we assume the object is local and read it. */
|
|
int fsck_object(struct object *obj, void *data, unsigned long size,
|
|
struct fsck_options *options);
|
|
|
|
#endif
|