The content we change for "fsck.[ch]" is mainly the fsck msg part. We do not change anything about the objects. I agree with you that it would be strange if we do not expose any interfaces for user who are adventurous. Actually we may simply add an option "--refs-experimental" or simply "--refs" to allow the users check ref consistency by using "git-fsck(1)". I guess the concern that Patrick cares about is that we ONLY make refs optional here, but do not provide options for other checks. It will be strange from this perspective. > Documentation/fsck-msgids.txt | 6 ++ > Documentation/git-refs.txt | 13 +++++ > builtin/fsck.c | 17 +++--- > builtin/mktag.c | 3 +- > builtin/refs.c | 34 +++++++++++ > fsck.c | 127 +++++++++++++++++++++++++++++++++--------- > fsck.h | 76 +++++++++++++++++++------ > object-file.c | 9 ++- > refs.c | 5 ++ > refs.h | 8 +++ > refs/debug.c | 11 ++++ > refs/files-backend.c | 116 +++++++++++++++++++++++++++++++++++++- > refs/packed-backend.c | 8 +++ > refs/refs-internal.h | 6 ++ > refs/reftable-backend.c | 8 +++ > t/t0602-reffiles-fsck.sh | 92 ++++++++++++++++++++++++++++++ > 16 files changed, 480 insertions(+), 59 deletions(-)