svn commit: r52042 - head/en_US.ISO8859-1/htdocs/cgi
Wolfram Schneider
wosch at FreeBSD.org
Sun Jul 22 13:06:10 UTC 2018
Author: wosch
Date: Sun Jul 22 13:06:09 2018
New Revision: 52042
URL: https://svnweb.freebsd.org/changeset/doc/52042
Log:
Improve sort order of manpage releases:
- first sort by OS and release number, highest/latest version first.
- put FreeBSD releases on top
Modified:
head/en_US.ISO8859-1/htdocs/cgi/man.cgi
Modified: head/en_US.ISO8859-1/htdocs/cgi/man.cgi
==============================================================================
--- head/en_US.ISO8859-1/htdocs/cgi/man.cgi Sun Jul 22 04:32:48 2018 (r52041)
+++ head/en_US.ISO8859-1/htdocs/cgi/man.cgi Sun Jul 22 13:06:09 2018 (r52042)
@@ -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++;
- }
+ if (@a and @b) {
+ return $a[0] cmp $b[0] || (-1 * ($a[1] <=> $b[1])) || $a[2] cmp $a[2] || $a cmp $b;
+ }
- # sort by characters
- else {
+ # 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;
+ }
- # minor number and characters
- # 4.1 RELEASE <=> 4.1.1 RELEASE
- if ( $flag && ( $a1 =~ /^\d+$/ || $b1 =~ /^\d+$/ ) ) {
- return $a1 =~ /^\d+$/ ? 1 : -1;
- }
+ # rest
+ return $a cmp $b;
+}
- # characters only
- return $a1 cmp $b1 if $a1 cmp $b1;
- $flag = 0;
- }
- }
+# 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;
- # longest version string wins
- return @a <=> @b;
+ return @data;
}
foreach ( sort { &sort_versions } keys %manPathAliases ) {
@@ -1758,7 +1755,7 @@ ETX
print qq{</select>\n<select name="manpath">\n};
local ($l) = ( $manpath ? $manpath : $manPathDefault );
- foreach ( sort { &sort_versions } keys %manPath ) {
+ foreach ( &freebsd_first( sort { &sort_versions } keys %manPath) ) {
$key = $_;
print "<option"
. ( ( $key eq $l ) ? ' selected="selected" ' : ' ' )
@@ -1821,7 +1818,7 @@ sub faq {
local ( @list, @list2 );
local ($url);
- foreach ( sort { &sort_versions } keys %manPath ) {
+ foreach ( &freebsd_first (sort { &sort_versions } keys %manPath )) {
$url = &encode_url($_);
push( @list,
qq{<li><a href="$BASE?apropos=2&manpath=$url">[download]}
@@ -1829,7 +1826,7 @@ sub faq {
. qq{</li>\n} );
}
- foreach ( sort { &sort_versions } keys %manPathAliases ) {
+ foreach ( &freebsd_first (sort { &sort_versions } keys %manPathAliases )) {
push( @list2,
qq[<li>"$_" -> "$manPathAliases{$_}" -> ]
. qq{<a href="$BASE?manpath=}
More information about the svn-doc-all
mailing list