autobuild-discuss
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Autobuild-discuss] A few nits with autobuild


From: Julien ÉLIE
Subject: Re: [Autobuild-discuss] A few nits with autobuild
Date: Mon, 29 Aug 2011 09:29:35 +0200
User-agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.7; fr; rv:1.9.2.20) Gecko/20110804 Thunderbird/3.1.12

Hi Simon,

>>> There is an issue with the value of HTML tokens:
>>>     <h3><a name="inn-GCC 4.6.1">
>>>
>>> Spaces should be stripped, or converted to something else.  (A dash?)

Here is a patch.
(Including the ", " issue at the same time.)


--- /home/iulius/scripts/autobuild/autobuild/autobuild  2011-08-29 
08:23:40.000000000 +0200
+++ /home/iulius/scripts/autobuild/bin/autobuild        2011-08-29 
09:25:50.000000000 +0200
@@ -18,6 +18,7 @@
 # along with Autobuild.  If not, see <http://www.gnu.org/licenses/>.
 
 use strict;
+use warnings;
 use Getopt::Long;
 
 # Parse command line parameters.
@@ -43,7 +44,7 @@
            'Ignore-files=s' => \$IgnoreFiles,
            'inline-html=i'  => \$InlineHTML);
 
-# Handle --verison.
+# Handle --version.
 if ($PrintVersion) {
     print "autobuild (Autobuild) 5.3\n";
     print "Copyright (C) 2004, 2005, 2007, 2008, 2009, 2010 Simon Josefsson\n";
@@ -120,6 +121,23 @@
 my (%Hostmodes);
 my (%Modes);
 
+
+# Generate a valid XHTML token for IDs.
+sub tokenizeAnchor {
+    my $token = shift;
+
+    # In case the token is empty, return a valid one anyway.
+    return "Undefined" if not $token;
+
+    # Append "Autobuild-" at the beginning of the token if it does not
+    # start with a letter.
+    $token = "Autobuild-$token" if not $token =~ /^[A-Za-z]/;
+
+    # Replace invalid characters with a dash.
+    $token =~ s/[^A-Za-z0-9:_.-]/-/g;
+    return $token;
+}
+
 foreach $arg (@ARGV) {
     my (@files);
 
@@ -322,7 +340,7 @@
        }
        $bit = !$bit;
 
-       print "<td><a href=\"#$project\">$project</a></td>\n";
+       print "<td><a 
href=\"#".tokenizeAnchor($project)."\">$project</a></td>\n";
 
        foreach $hosttype (sort keys %{$Hosttypes{$project}}) {
            my $firstmode = 1;
@@ -331,7 +349,7 @@
                my %DoneType;
 
                if ($first) {
-                   print "<td><a href=\"#$project-$hosttype\">$hosttype</a>";
+                   print "<td><a 
href=\"#".tokenizeAnchor($project."-".$hosttype)."\">$hosttype</a>";
                } else {
                    if ($bit) {
                        print "<tr bgcolor=\"lightgrey\">\n";
@@ -340,7 +358,7 @@
                    }
                    print "<td></td>\n";
                    if ($firstmode) {
-                       print "<td><a 
href=\"#$project-$hosttype\">$hosttype</a>";
+                       print "<td><a 
href=\"#".tokenizeAnchor($project."-".$hosttype)."\">$hosttype</a>";
                    } else {
                        print "<td>";
                    }
@@ -377,9 +395,9 @@
                    } else {
                        print " from $Buildtype</td>\n";
                    }
-                   print "<td><a href=\"#$project-$Mode\">$Mode</a></td>\n";
-                   print "<td><a 
href=\"#$project-$Revision\">$Revision</a></td>\n";
-                   print "<td><a 
href=\"#$project-$Hostname\">$Hostname</a></td>\n";
+                   print "<td><a 
href=\"#".tokenizeAnchor($project."-".$Mode)."\">$Mode</a></td>\n";
+                   print "<td><a 
href=\"#".tokenizeAnchor($project."-".$Revision)."\">$Revision</a></td>\n";
+                   print "<td><a 
href=\"#".tokenizeAnchor($project."-".$Hostname)."\">$Hostname</a></td>\n";
                    print "<td>$Timestamp</td>\n";
                    print "<td><a href=\"$file\">\n";
                    if ($Status eq "ok") {
@@ -403,27 +421,41 @@
 }
 
 foreach $project (sort keys %Projects) {
+    my $count;
+
     print "<hr />\n";
-    print "<h2><a name=\"$project\">Project '$project'</a></h2>\n";
+    print "<h2><a name=\"".tokenizeAnchor($project)."\">Project 
'$project'</a></h2>\n";
     print "\n";
     print "<p>Revisions (" . keys(%{$Revisions{$project}}) . "): ";
+    $count = 0;
     foreach $revision (reverse sort { if ($a eq $b) { return 0; } else { my $i 
= 0; do { my $j = substr ($a, $i, 1); my $k = substr ($b, $i, 1); if ($j != $k) 
{ $j = substr ($a, $i); $k = substr ($b, $i); return $j <=> $k; } $i++; } while 
($i < length($a)); } } keys %{$Revisions{$project}}) {
-       print "<a href=\"#$project-$revision\">$revision</a>, ";
+       print ", " if $count;
+       print "<a 
href=\"#".tokenizeAnchor($project."-".$revision)."\">$revision</a>";
+       $count++;
     }
     print "</p>\n";
-    print "<p>Hosttypes (" . keys(%{$Hosttypes{$project}}) . "): ";
+    print "<p>Host types (" . keys(%{$Hosttypes{$project}}) . "): ";
+    $count = 0;
     foreach $hosttype (sort keys %{$Hosttypes{$project}}) {
-       print "<a href=\"#$project-$hosttype\">$hosttype</a>, \n";
+       print ", " if $count;
+       print "<a 
href=\"#".tokenizeAnchor($project."-".$hosttype)."\">$hosttype</a>\n";
+       $count++;
     }
     print "</p>\n";
     print "<p>Build hosts (" . keys(%{$Hostnames{$project}}) . "): ";
+    $count = 0;
     foreach $hostname (sort keys %{$Hostnames{$project}}) {
-       print "<a href=\"#$project-$hostname\">$hostname</a>, \n";
+       print ", " if $count;
+       print "<a 
href=\"#".tokenizeAnchor($project."-".$hostname)."\">$hostname</a>\n";
+       $count++;
     }
     print "</p>\n";
     print "<p>Modes (" . keys(%{$Modes{$project}}) . "): ";
+    $count = 0;
     foreach $mode (sort keys %{$Modes{$project}}) {
-       print "<a href=\"#$project-$mode\">$mode</a>, \n";
+       print ", " if $count;
+       print "<a href=\"#".tokenizeAnchor($project."-".$mode)."\">$mode</a>\n";
+       $count++;
     }
     print "</p>\n";
 
@@ -431,7 +463,7 @@
        my $bit = 0;
 
        print "<hr />\n";
-       print "<h3><a name=\"$project-$revision\">\n";
+       print "<h3><a name=\"".tokenizeAnchor($project."-".$revision)."\">\n";
        print "Summary for $project $revision</a></h3>\n";
        print "\n";
        print "<table border=\"0\">\n";
@@ -502,7 +534,7 @@
        my $bit = 0;
 
        print "<hr />\n";
-       print "<h3><a name=\"$project-$hosttype\">\n";
+       print "<h3><a name=\"".tokenizeAnchor($project."-".$hosttype)."\">\n";
        print "Summary for $project on $hosttype</a></h3>\n";
        print "\n";
        print "<table border=\"0\">\n";
@@ -575,7 +607,7 @@
        my $bit = 0;
 
        print "<hr />\n";
-       print "<h3><a name=\"$project-$hostname\">\n";
+       print "<h3><a name=\"".tokenizeAnchor($project."-".$hostname)."\">\n";
        print "Summary for $project built on $hostname</a></h3>\n";
        print "\n";
        print "<table border=\"0\">\n";
@@ -646,7 +678,7 @@
        my $bit = 0;
 
        print "<hr />\n";
-       print "<h3><a name=\"$project-$mode\">\n";
+       print "<h3><a name=\"".tokenizeAnchor($project."-".$mode)."\">\n";
        print "Summary for $project in mode $mode</a></h3>\n";
        print "\n";
        print "<table border=\"0\">\n";







-- 
Julien ÉLIE

« Le cercle est le plus long chemin d'un point au même point. »
  (Tom Stoppard, _Every Good Boy Deserves Favour_)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]