]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
findmnt: improve -Q to output tree
authorKarel Zak <kzak@redhat.com>
Thu, 22 Aug 2024 10:31:41 +0000 (12:31 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 22 Aug 2024 10:31:41 +0000 (12:31 +0200)
$ findmnt -Q 'FSTYPE=="ext4"'
TARGET         SOURCE                  FSTYPE OPTIONS
/              /dev/sda4               ext4   rw,relatime
├─/var         /dev/sda3               ext4   rw,relatime
│ └─/var/cache /dev/sda5               ext4   rw,relatime
├─/mnt/virt    /dev/sdb1               ext4   rw,relatime
└─/boot        /dev/sda2               ext4   rw,relatime

Addresses: https://github.com/util-linux/util-linux/pull/3090
Signed-off-by: Karel Zak <kzak@redhat.com>
misc-utils/findmnt.c

index 05ed951bf79e895e83f86f6881cb6dd271bc3706..7bbc3a2ace096094b21d915c174d6bac9bd551ab 100644 (file)
@@ -962,8 +962,12 @@ static int create_treenode(struct libscols_table *table, struct libmnt_table *tb
 
        if ((findmnt->flags & FL_SUBMOUNTS) || match_func(fs, findmnt)) {
                bool filtered = false;
+               if (has_line(table, fs))
+                       goto leave;
                line = add_line(table, fs, parent_line, findmnt, &filtered);
-               if (!line || filtered)
+               if (filtered)
+                       line = parent_line;
+               else if (!line)
                        goto leave;
        } else
                line = parent_line;
@@ -1848,7 +1852,6 @@ int main(int argc, char *argv[])
                        break;
                case 'Q':
                        findmnt.filter = new_filter(optarg);
-                       findmnt.flags &= ~FL_TREE;
                        break;
                case 'm':               /* mtab */
                        tabtype = TABTYPE_MTAB;