]> git.ipfire.org Git - thirdparty/git.git/commitdiff
ls-tree: simplify nesting if/else logic in "show_tree()"
authorTeng Long <dyroneteng@gmail.com>
Wed, 23 Mar 2022 09:13:07 +0000 (17:13 +0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 23 Mar 2022 18:38:39 +0000 (11:38 -0700)
Use the object_type() function to determine the object type from the
"mode" passed to us by read_tree(), instead of doing so with the S_*()
macros.

Helped-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Teng Long <dyronetengb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/ls-tree.c

index ef8c414f61abe37fa8e8db1e30fd747a95768eef..d4be71bad24820cec75ca1decf763048f319b903 100644 (file)
@@ -66,20 +66,17 @@ static int show_tree(const struct object_id *oid, struct strbuf *base,
 {
        int recurse = 0;
        size_t baselen;
-       enum object_type type = OBJ_BLOB;
+       enum object_type type = object_type(mode);
 
-       if (S_ISGITLINK(mode)) {
-               type = OBJ_COMMIT;
-       } else if (S_ISDIR(mode)) {
-               if (show_recursive(base->buf, base->len, pathname)) {
-                       recurse = READ_TREE_RECURSIVE;
-                       if (!(ls_options & LS_SHOW_TREES))
-                               return recurse;
-               }
-               type = OBJ_TREE;
+       if (type == OBJ_BLOB) {
+               if (ls_options & LS_TREE_ONLY)
+                       return 0;
+       } else if (type == OBJ_TREE &&
+                  show_recursive(base->buf, base->len, pathname)) {
+               recurse = READ_TREE_RECURSIVE;
+               if (!(ls_options & LS_SHOW_TREES))
+                       return recurse;
        }
-       else if (ls_options & LS_TREE_ONLY)
-               return 0;
 
        if (!(ls_options & LS_NAME_ONLY)) {
                if (ls_options & LS_SHOW_SIZE) {