Since 7146e66f086 (tree-walk: finally switch over tree descriptors to contain a pre-parsed entry, 2014-02-06) the "mode" is validated such that we'll never reach the "else" clause here. Good for us that fsck_tree() has its own FSCK_MSG_BAD_FILEMODE check which we can use, added way back in 64071805eda (git-fsck-cache: be stricter about "tree" objects, 2005-07-27). Except it really doesn't due to a regression in 7146e66f086. A follow-up commit will address that, but for now we can simply rewrite this code like the rest of the s/entry.mode/entry.object_type/g changes I'm making. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> --- fsck.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/fsck.c b/fsck.c index e3030f3b358..7c74c49d329 100644 --- a/fsck.c +++ b/fsck.c @@ -396,28 +396,25 @@ static int fsck_walk_tree(struct tree *tree, void *data, struct fsck_options *op struct object *obj; int result; - if (S_ISGITLINK(entry.mode)) + switch (entry.object_type) { + case OBJ_COMMIT: continue; - - if (S_ISDIR(entry.mode)) { + case OBJ_TREE: obj = (struct object *)lookup_tree(the_repository, &entry.oid); if (name && obj) fsck_put_object_name(options, &entry.oid, "%s%s/", name, entry.path); - result = options->walk(obj, OBJ_TREE, data, options); - } - else if (S_ISREG(entry.mode) || S_ISLNK(entry.mode)) { + break; + case OBJ_BLOB: obj = (struct object *)lookup_blob(the_repository, &entry.oid); if (name && obj) fsck_put_object_name(options, &entry.oid, "%s%s", name, entry.path); - result = options->walk(obj, OBJ_BLOB, data, options); - } - else { - result = error("in tree %s: entry %s has bad mode %.6o", - fsck_describe_object(options, &tree->object.oid), - entry.path, entry.mode); + break; + default: + BUG("unreachable"); } + result = options->walk(obj, entry.object_type, data, options); if (result < 0) return result; if (!res) -- 2.31.0.rc0.126.g04f22c5b82