]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lsblk: add option --tree
authorKarel Zak <kzak@redhat.com>
Fri, 9 Jun 2017 09:33:18 +0000 (11:33 +0200)
committerKarel Zak <kzak@redhat.com>
Fri, 9 Jun 2017 09:33:18 +0000 (11:33 +0200)
Now lsblk uses --list when --sort <column> is specified. This patch
allows to specify --tree to overwrite this default behavior add to
force tree-like output. In this case tree branches are sorted by the
<column>.

$ lsblk --sort SIZE
NAME MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda2   8:2    0   200M  0 part /boot
sda1   8:1    0   200M  0 part /boot/efi
sda6   8:6    0   7.8G  0 part [SWAP]
sda5   8:5    0  35.1G  0 part /home/misc
sda4   8:4    0    50G  0 part /
sdb1   8:17   0  74.5G  0 part /home/archive
sdb    8:16   0  74.5G  0 disk
sda3   8:3    0 130.3G  0 part /home
sda    8:0    0 223.6G  0 disk

$ lsblk --sort SIZE --tree
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sdb      8:16   0  74.5G  0 disk
└─sdb1   8:17   0  74.5G  0 part /home/archive
sda      8:0    0 223.6G  0 disk
├─sda2   8:2    0   200M  0 part /boot
├─sda1   8:1    0   200M  0 part /boot/efi
├─sda6   8:6    0   7.8G  0 part [SWAP]
├─sda5   8:5    0  35.1G  0 part /home/misc
├─sda4   8:4    0    50G  0 part /
└─sda3   8:3    0 130.3G  0 part /home

Signed-off-by: Karel Zak <kzak@redhat.com>
Documentation/TODO
misc-utils/lsblk.8
misc-utils/lsblk.c

index defca5a0d907a0c6086c5ec76fe042c328e292f9..1993422c880d22c0103169c566abebbe6aea850a 100644 (file)
@@ -26,9 +26,6 @@ lscpu
 
 lsblk
 -----
-  - (!) add --tree to force tree output for operations like --sort where the
-    --list is enabled by default.
-
   - currently it does not show mountpoint for all devices in btrfs RAID. It's because
     /proc/#/mountinfo contains reference to the one device only. Maybe we can add some
     btrfs specific code to provide a better output for FS based stacks. Not sure.
index d9fc1c0c2186066824c93f890b364b51f6770af8..8485e99d78ddb849db0fbc280f103c9cd6698420 100644 (file)
@@ -129,7 +129,9 @@ This option is equivalent to
 Display version information and exit.
 .TP
 .BR \-x , " \-\-sort " \fIcolumn\fP
-Sort output lines by \fIcolumn\fP. This option enables \fB\-\-list\fR output.
+Sort output lines by \fIcolumn\fP. This option enables \fB\-\-list\fR output format by default.
+It is possible to use the option \fI\-\-tree\fP to force tree-like output and
+than the tree branches are sorted by the \fIcolumn\fP.
 .SH NOTES
 For partitions, some information (e.g. queue attributes) is inherited from the
 parent device.
index 79077af07bc50ffef8e04ad83b11484d0208ae46..1e8108290234b6b76b086f1c32b482b950d05f72 100644 (file)
@@ -1644,6 +1644,7 @@ static void __attribute__((__noreturn__)) help(FILE *out)
        fputs(_(" -I, --include <list> show only devices with specified major numbers\n"), out);
        fputs(_(" -J, --json           use JSON output format\n"), out);
        fputs(_(" -l, --list           use list format output\n"), out);
+       fputs(_(" -T, --tree           use tree format output\n"), out);
        fputs(_(" -m, --perms          output info about permissions\n"), out);
        fputs(_(" -n, --noheadings     don't print headings\n"), out);
        fputs(_(" -o, --output <list>  output columns\n"), out);
@@ -1682,6 +1683,7 @@ int main(int argc, char *argv[])
        int c, status = EXIT_FAILURE;
        char *outarg = NULL;
        size_t i;
+       int force_tree = 0;
 
        static const struct option longopts[] = {
                { "all",        no_argument,       NULL, 'a' },
@@ -1707,6 +1709,7 @@ int main(int argc, char *argv[])
                { "pairs",      no_argument,       NULL, 'P' },
                { "scsi",       no_argument,       NULL, 'S' },
                { "sort",       required_argument, NULL, 'x' },
+               { "tree",       no_argument,       NULL, 'T' },
                { "version",    no_argument,       NULL, 'V' },
                { NULL, 0, NULL, 0 },
        };
@@ -1719,7 +1722,7 @@ int main(int argc, char *argv[])
                { 'O','f' },
                { 'O','m' },
                { 'O','t' },
-               { 'P','l','r' },
+               { 'P','T', 'l','r' },
                { 0 }
        };
        int excl_st[ARRAY_SIZE(excl)] = UL_EXCL_STATUS_INIT;
@@ -1734,7 +1737,7 @@ int main(int argc, char *argv[])
        lsblk_init_debug();
 
        while((c = getopt_long(argc, argv,
-                              "abdDze:fhJlnmo:OpPiI:rstVSx:", longopts, NULL)) != -1) {
+                              "abdDze:fhJlnmo:OpPiI:rstVSTx:", longopts, NULL)) != -1) {
 
                err_exclusive_options(c, longopts, excl, excl_st);
 
@@ -1839,6 +1842,9 @@ int main(int argc, char *argv[])
                        add_uniq_column(COL_REV);
                        add_uniq_column(COL_TRANSPORT);
                        break;
+               case 'T':
+                       force_tree = 1;
+                       break;
                case 'V':
                        printf(UTIL_LINUX_VERSION);
                        return EXIT_SUCCESS;
@@ -1853,6 +1859,9 @@ int main(int argc, char *argv[])
                }
        }
 
+       if (force_tree)
+               lsblk->flags |= LSBLK_TREE;
+
        check_sysdevblock();
 
        if (!ncolumns) {