]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lsblk: fix --inverse --list
authorKarel Zak <kzak@redhat.com>
Thu, 13 Apr 2017 09:39:22 +0000 (11:39 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 13 Apr 2017 09:39:22 +0000 (11:39 +0200)
Let's follow --inverse dependencies although --list output requested.

Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1441175
Signed-off-by: Karel Zak <kzak@redhat.com>
misc-utils/lsblk.8
misc-utils/lsblk.c

index 8eebc8de75f0ec3188bf84b475a80891c7fb2282..ee1d873d07d491a62981a91012c00307fe33939d 100644 (file)
@@ -114,7 +114,8 @@ Produce output in raw format.  All potentially unsafe characters are hex-escaped
 Output info about SCSI devices only.  All partitions, slaves and holder devices are ignored.
 .TP
 .BR \-s , " \-\-inverse"
-Print dependencies in inverse order.
+Print dependencies in inverse order. If the \fB\-\-list\fR output is requested then
+the lines are still ordered by dependencies.
 .TP
 .BR \-t , " \-\-topology"
 Output info about block-device topology.
index c30573e8b9c21e35ef6c530c623112d14eda9156..4742a4de10a9e89ada9dbfcc0d986a8b4e5683f2 100644 (file)
@@ -216,6 +216,7 @@ struct lsblk {
        unsigned int scsi:1;            /* print only device with HCTL (SCSI) */
        unsigned int paths:1;           /* print devnames with "/dev" prefix */
        unsigned int sort_hidden:1;     /* sort column not between output columns */
+       unsigned int force_tree_order:1;/* sort lines by parent->tree relation */
 };
 
 static struct lsblk *lsblk;    /* global handler */
@@ -1859,6 +1860,10 @@ int main(int argc, char *argv[])
                 * /sys is no more sorted */
                lsblk->sort_id = COL_MAJMIN;
 
+       /* For --inverse --list we still follow parent->child relation */
+       if (lsblk->inverse && !(lsblk->flags & LSBLK_TREE))
+               lsblk->force_tree_order = 1;
+
        if (lsblk->sort_id >= 0 && column_id_to_number(lsblk->sort_id) < 0) {
                /* the sort column is not between output columns -- add as hidden */
                add_column(columns, ncolumns++, lsblk->sort_id);
@@ -1923,6 +1928,8 @@ int main(int argc, char *argv[])
 
        if (lsblk->sort_col)
                scols_sort_table(lsblk->table, lsblk->sort_col);
+       if (lsblk->force_tree_order)
+               scols_sort_table_by_tree(lsblk->table);
 
        scols_print_table(lsblk->table);