Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 22 Jul 2018 13:06:09 +0000 (UTC)
From:      Wolfram Schneider <wosch@FreeBSD.org>
To:        doc-committers@freebsd.org, svn-doc-all@freebsd.org, svn-doc-head@freebsd.org
Subject:   svn commit: r52042 - head/en_US.ISO8859-1/htdocs/cgi
Message-ID:  <201807221306.w6MD693K038190@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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&amp;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=}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201807221306.w6MD693K038190>