Last active
March 21, 2018 13:45
-
-
Save robinsmidsrod/cd7618893e963120b532adaf0c69b1f0 to your computer and use it in GitHub Desktop.
Changes to iPXE util/niclist.pl to avoid given/when warning and allow reverse sort on columns
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/src/util/niclist.pl b/src/util/niclist.pl | |
index 0600c823..2668a1c0 100755 | |
--- a/src/util/niclist.pl | |
+++ b/src/util/niclist.pl | |
@@ -19,7 +19,7 @@ use Getopt::Long qw(GetOptions); | |
GetOptions( | |
'help' => \( my $help = 0 ), | |
'format=s' => \( my $format = 'text' ), | |
- 'sort=s' => \( my $sort = 'bus,ipxe_driver,ipxe_name' ), | |
+ 'sort=s' => \( my $sort = 'bus-,ipxe_driver,ipxe_name' ), | |
'columns=s' => \( my $columns = 'bus,vendor_id,device_id,' | |
. 'vendor_name,device_name,ipxe_driver,' | |
. 'ipxe_name,ipxe_description,file,legacy_api' | |
@@ -47,26 +47,26 @@ Output formats: | |
Column names (default order): | |
bus, vendor_id, device_id, vendor_name, device_name, | |
ipxe_driver, ipxe_name, ipxe_description, file, legacy_api | |
+ | |
+Default sort order (minus at the end means reverse sort): | |
+ bus-, ipxe_driver, ipxe_name | |
EOM | |
# Only load runtime requirements if actually in use | |
-given($format) { | |
- when( /csv/ ) { | |
- eval { require Text::CSV; }; | |
- die("Please install Text::CSV CPAN module to use this feature.\n") | |
- if $@; | |
- } | |
- when( /json/ ) { | |
- eval { require JSON; }; | |
- die("Please install JSON CPAN module to use this feature.\n") | |
- if $@; | |
- } | |
- when( /html/ ) { | |
- eval { require HTML::Entities; }; | |
- die("Please install HTML::Entities CPAN module to use this feature.\n") | |
- if $@; | |
- } | |
- default { } | |
+if ( $format =~ /csv/ ) { | |
+ eval { require Text::CSV; }; | |
+ die("Please install Text::CSV CPAN module to use this feature.\n") | |
+ if $@; | |
+} | |
+if ( $format =~ /json/ ) { | |
+ eval { require JSON; }; | |
+ die("Please install JSON CPAN module to use this feature.\n") | |
+ if $@; | |
+} | |
+if ( $format =~ /html/ ) { | |
+ eval { require HTML::Entities; }; | |
+ die("Please install HTML::Entities CPAN module to use this feature.\n") | |
+ if $@; | |
} | |
# Scan source dir and build NIC list | |
@@ -339,8 +339,16 @@ sub sort_ipxe_nic_list { | |
my @sorted_list = @{ $ipxe_nic_list }; | |
while(@sort_column_names) { | |
my $column_name = pop @sort_column_names; | |
- @sorted_list = sort { ( $a->{$column_name} || "" ) cmp ( $b->{$column_name} || "" ) } | |
- @sorted_list; | |
+ my $reverse = substr($column_name, -1) eq '-' ? 1 : 0; # use reverse order if last character is minus | |
+ $column_name = substr($column_name, 0, -1) if $reverse; # chop of the minus | |
+ if ( $reverse ) { | |
+ @sorted_list = sort { ( $b->{$column_name} || "" ) cmp ( $a->{$column_name} || "" ) } | |
+ @sorted_list; | |
+ } | |
+ else { | |
+ @sorted_list = sort { ( $a->{$column_name} || "" ) cmp ( $b->{$column_name} || "" ) } | |
+ @sorted_list; | |
+ } | |
} | |
return \@sorted_list; | |
} | |
@@ -359,7 +367,7 @@ sub parse_columns_param { | |
sub is_valid_column { | |
my ($name) = @_; | |
my $valid_column_map = { | |
- map { $_ => 1 } | |
+ map { $_ => 1, $_ . "-" => 1 } # also supports keyword with a - suffix | |
qw( | |
bus file legacy_api | |
ipxe_driver ipxe_name ipxe_description |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment