]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
findmnt: add --tree to allow to enable tree output for --mtab
authorKarel Zak <kzak@redhat.com>
Thu, 8 Dec 2016 13:24:41 +0000 (14:24 +0100)
committerKarel Zak <kzak@redhat.com>
Thu, 8 Dec 2016 13:24:41 +0000 (14:24 +0100)
The --mtab output is merge from kernel and utab on all modern systems
(without classic /etc/mtab). It means we have all necessary information
to generate tree output.

For the backward compatibility --mtab is the list by default, the new
option --tree allows to override the default and enable tree always
when the table contains child-parent relations.

Signed-off-by: Karel Zak <kzak@redhat.com>
bash-completion/findmnt
misc-utils/findmnt.8
misc-utils/findmnt.c

index 946c22a98c699ccca8db8ecc9cf88488f9593b50..5583fbf6c5dce7e50a8ff06d6f9286fed7d1a18f 100644 (file)
@@ -127,6 +127,7 @@ _findmnt_module()
                                --target
                                --mountpoint
                                --help
+                               --tree
                                --version"
                        COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
                        return 0
index 6fc7da59ead70e612411a68952f7d0030cfdf8e9..144c8c61387b431b0a5b5faa16f8ed4e0e762823 100644 (file)
@@ -110,7 +110,7 @@ Explicitly define the mountpoint file or directory.  See also \fB\-\-target\fP.
 .BR \-m , " \-\-mtab"
 Search in
 .IR /etc/mtab .
-The output is in the list format (see \fB\-\-list\fP).  The output may include user
+The output is in the list format by default (see \fB\-\-tree\fP).  The output may include user
 space mount options.
 .TP
 .BR \-N , " \-\-task \fItid\fP"
@@ -216,6 +216,10 @@ to specify the filesystem types on which no action should be taken.  For
 more details see
 .BR mount (8).
 .TP
+.BR " \-\-tree"
+Enable tree-like output if possible.  The options is silently ignored for
+tables where is missing child-parent relation (e.g. fstab).
+.TP
 .BR \-U , " \-\-uniq"
 Ignore filesystems with duplicate mount targets, thus effectively skipping
 over-mounted mount points.
index f2c0b27b41a8b8f5de86f4c49d269f7f77d4fc66..564c74cc3c9ed2632234b7207d64104de9fcb80b 100644 (file)
@@ -1227,6 +1227,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out)
        fputs(_(" -S, --source <string>  the device to mount (by name, maj:min, \n"
                "                          LABEL=, UUID=, PARTUUID=, PARTLABEL=)\n"), out);
        fputs(_(" -T, --target <path>    the path to the filesystem to use\n"), out);
+       fputs(_("     --tree             enable tree format output is possible\n"), out);
        fputs(_(" -M, --mountpoint <dir> the mountpoint directory\n"), out);
        fputs(_(" -t, --types <list>     limit the set of filesystems by FS types\n"), out);
        fputs(_(" -U, --uniq             ignore filesystems with duplicate target\n"), out);
@@ -1262,11 +1263,13 @@ int main(int argc, char *argv[])
        int ntabfiles = 0, tabtype = 0;
        char *outarg = NULL;
        size_t i;
+       int force_tree = 0, istree = 0;
 
        struct libscols_table *table = NULL;
 
        enum {
-                FINDMNT_OPT_VERBOSE = CHAR_MAX + 1
+                FINDMNT_OPT_VERBOSE = CHAR_MAX + 1,
+               FINDMNT_OPT_TREE
        };
 
        static const struct option longopts[] = {
@@ -1306,6 +1309,7 @@ int main(int argc, char *argv[])
            { "verify",       0, 0, 'x' },
            { "version",      0, 0, 'V' },
            { "verbose",      0, 0, FINDMNT_OPT_VERBOSE },
+           { "tree",         0, 0, FINDMNT_OPT_TREE },
            { NULL,           0, 0, 0 }
        };
 
@@ -1469,6 +1473,9 @@ int main(int argc, char *argv[])
                case FINDMNT_OPT_VERBOSE:
                        flags |= FL_VERBOSE;
                        break;
+               case FINDMNT_OPT_TREE:
+                       force_tree = 1;
+                       break;
                default:
                        usage(stderr);
                        break;
@@ -1551,7 +1558,11 @@ int main(int argc, char *argv[])
        if (tabtype == TABTYPE_MTAB && tab_is_kernel(tb))
                tabtype = TABTYPE_KERNEL;
 
-       if ((flags & FL_TREE) && (ntabfiles > 1 || !tab_is_tree(tb)))
+       istree = tab_is_tree(tb);
+       if (istree && force_tree)
+               flags |= FL_TREE;
+
+       if ((flags & FL_TREE) && (ntabfiles > 1 || !istree))
                flags &= ~FL_TREE;
 
        if (!(flags & FL_NOCACHE)) {