From f49d64abff253eb00e96802f2f72398a95fc9a14 Mon Sep 17 00:00:00 2001 From: Wolfram Schneider Date: Sun, 22 Jul 2018 13:06:09 +0000 Subject: [PATCH] Improve sort order of manpage releases: - first sort by OS and release number, highest/latest version first. - put FreeBSD releases on top --- en_US.ISO8859-1/htdocs/cgi/man.cgi | 69 ++++++++++++++---------------- 1 file changed, 33 insertions(+), 36 deletions(-) diff --git a/en_US.ISO8859-1/htdocs/cgi/man.cgi b/en_US.ISO8859-1/htdocs/cgi/man.cgi index 1334ac128b..5252326e14 100755 --- a/en_US.ISO8859-1/htdocs/cgi/man.cgi +++ b/en_US.ISO8859-1/htdocs/cgi/man.cgi @@ -859,51 +859,48 @@ while ( ( $key, $val ) = each %manPath ) { ); # -# sort by OS release number +# sort by OS release number, highest version first # # e.g.: # -# XFree86 2.1 -# XFree86 3.3 -# XFree86 3.3.6 # XFree86 4.0 +# XFree86 3.3.6 +# XFree86 3.3 +# XFree86 2.1 # ... -# XFree86 10.0 -# XFree86 10.0.1 # XFree86 11 +# XFree86 10.0.1 +# XFree86 10.0 # sub sort_versions { - my @a = ( lc($a) =~ /(\d+|\D+)/g ); - my @b = ( lc($b) =~ /(\d+|\D+)/g ); - my $flag = 0; - while ( @a and @b ) { - my $a1 = shift @a; - my $b1 = shift @b; + # FreeBSD 11.1-RELEASE ports + my @a = ( lc($a) =~ m,^(\D+)([\d\.]+)(\D*)$, ); + my @b = ( lc($b) =~ m,^(\D+)([\d\.]+)(\D*)$, ); - # sort numerically if possible - if ( $a1 =~ /^\d+$/ && $b1 =~ /^\d+$/ ) { - return $a1 <=> $b1 if $a1 <=> $b1; - $flag++; - } - - # sort by characters - else { - - # minor number and characters - # 4.1 RELEASE <=> 4.1.1 RELEASE - if ( $flag && ( $a1 =~ /^\d+$/ || $b1 =~ /^\d+$/ ) ) { - return $a1 =~ /^\d+$/ ? 1 : -1; - } - - # characters only - return $a1 cmp $b1 if $a1 cmp $b1; - $flag = 0; - } + if (@a and @b) { + return $a[0] cmp $b[0] || (-1 * ($a[1] <=> $b[1])) || $a[2] cmp $a[2] || $a cmp $b; } - # longest version string wins - return @a <=> @b; + # 2.9.1 BSD + @a = ( lc($a) =~ m,^(\d\.+)(.*)$, ); + @b = ( lc($b) =~ m,^(\d\.+)(.*)$, ); + if (@a and @b) { + return (-1 * ( $a[0] <=> $b[0])) || $a[1] <=> $b[1] || $a cmp $b; + } + + # rest + return $a cmp $b; +} + +# FreeBSD manual pages first before any other manual pages +sub freebsd_first { + my @list = @_; + my @data; + push @data, grep { /^FreeBSD/ } @list; + push @data, grep { !/^FreeBSD/ } @list; + + return @data; } foreach ( sort { &sort_versions } keys %manPathAliases ) { @@ -1758,7 +1755,7 @@ ETX print qq{\n