[csw-devel] SF.net SVN: opencsw:[566] buildfarm/bin

dmichelsen at users.sourceforge.net dmichelsen at users.sourceforge.net
Fri Sep 30 15:07:21 CEST 2011


Revision: 566
          http://opencsw.svn.sourceforge.net/opencsw/?rev=566&view=rev
Author:   dmichelsen
Date:     2011-09-30 13:07:21 +0000 (Fri, 30 Sep 2011)
Log Message:
-----------
mirrorstatus: Initial commit from Peter Bonivart

Added Paths:
-----------
    buildfarm/bin/mirrorstatus/
    buildfarm/bin/mirrorstatus/image/
    buildfarm/bin/mirrorstatus/image/AU.png
    buildfarm/bin/mirrorstatus/image/BE.png
    buildfarm/bin/mirrorstatus/image/BR.png
    buildfarm/bin/mirrorstatus/image/CA.png
    buildfarm/bin/mirrorstatus/image/CH.png
    buildfarm/bin/mirrorstatus/image/CN.png
    buildfarm/bin/mirrorstatus/image/CZ.png
    buildfarm/bin/mirrorstatus/image/DE.png
    buildfarm/bin/mirrorstatus/image/DK.png
    buildfarm/bin/mirrorstatus/image/ES.png
    buildfarm/bin/mirrorstatus/image/FI.png
    buildfarm/bin/mirrorstatus/image/FR.png
    buildfarm/bin/mirrorstatus/image/GB.png
    buildfarm/bin/mirrorstatus/image/GR.png
    buildfarm/bin/mirrorstatus/image/HU.png
    buildfarm/bin/mirrorstatus/image/IE.png
    buildfarm/bin/mirrorstatus/image/IL.png
    buildfarm/bin/mirrorstatus/image/IT.png
    buildfarm/bin/mirrorstatus/image/JP.png
    buildfarm/bin/mirrorstatus/image/LU.png
    buildfarm/bin/mirrorstatus/image/LV.png
    buildfarm/bin/mirrorstatus/image/MC.png
    buildfarm/bin/mirrorstatus/image/MX.png
    buildfarm/bin/mirrorstatus/image/NL.png
    buildfarm/bin/mirrorstatus/image/NO.png
    buildfarm/bin/mirrorstatus/image/NZ.png
    buildfarm/bin/mirrorstatus/image/PL.png
    buildfarm/bin/mirrorstatus/image/RU.png
    buildfarm/bin/mirrorstatus/image/SE.png
    buildfarm/bin/mirrorstatus/image/TW.png
    buildfarm/bin/mirrorstatus/image/US.png
    buildfarm/bin/mirrorstatus/image/flagicons.zip
    buildfarm/bin/mirrorstatus/image/source
    buildfarm/bin/mirrorstatus/mirrorstatus.pl
    buildfarm/bin/mirrorstatus/style.css

Added: buildfarm/bin/mirrorstatus/image/AU.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/AU.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/BE.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/BE.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/BR.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/BR.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/CA.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/CA.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/CH.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/CH.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/CN.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/CN.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/CZ.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/CZ.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/DE.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/DE.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/DK.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/DK.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/ES.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/ES.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/FI.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/FI.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/FR.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/FR.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/GB.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/GB.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/GR.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/GR.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/HU.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/HU.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/IE.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/IE.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/IL.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/IL.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/IT.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/IT.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/JP.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/JP.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/LU.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/LU.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/LV.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/LV.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/MC.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/MC.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/MX.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/MX.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/NL.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/NL.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/NO.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/NO.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/NZ.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/NZ.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/PL.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/PL.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/RU.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/RU.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/SE.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/SE.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/TW.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/TW.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/US.png
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/US.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/flagicons.zip
===================================================================
(Binary files differ)


Property changes on: buildfarm/bin/mirrorstatus/image/flagicons.zip
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: buildfarm/bin/mirrorstatus/image/source
===================================================================
--- buildfarm/bin/mirrorstatus/image/source	                        (rev 0)
+++ buildfarm/bin/mirrorstatus/image/source	2011-09-30 13:07:21 UTC (rev 566)
@@ -0,0 +1 @@
+for i in Australia France Italy Sweden Brazil Canada China "Czech%20Republic" Germany Luxembourg Switzerland "New%20Zealand" "United%20States%20of%20America" Belgium Denmark Finland Norway Hungary Greece Ireland Israel Japan Mexico Monaco Netherlands Poland Spain "United%20Kingdom"; do echo $i; wget -q http://www.printableworldflags.com/icon-flags/32/$i.png; done

Added: buildfarm/bin/mirrorstatus/mirrorstatus.pl
===================================================================
--- buildfarm/bin/mirrorstatus/mirrorstatus.pl	                        (rev 0)
+++ buildfarm/bin/mirrorstatus/mirrorstatus.pl	2011-09-30 13:07:21 UTC (rev 566)
@@ -0,0 +1,207 @@
+#!/opt/csw/bin/perl
+
+# status.pl - produce web page with mirror status
+#             based on James Lee's mirror status page
+# 2011-03-06 Peter Bonivart, OpenCSW
+
+# Requirements: CSWperl, CSWpm-geo-ip-pureperl
+
+# TODO: shorten very long url's
+
+use warnings;
+use strict;
+use Geo::IP::PurePerl;
+
+my $hash          = "md5";
+my $min_size      = 100000;
+my $image_dir     = "./image";
+my $mirror_dir    = "./mirror";
+my $page          = "./mirrorstatus.html";
+my @dist          = qw(testing);
+my @osrel         = qw(5.9 5.10);
+my @osarch        = qw(sparc i386);
+my @mirror;
+my $master_mirror = 'http://mirror.opencsw.org/opencsw';
+my $master_hash   = '';
+my @mirror_http   = qw(http://mirror.opencsw.org/opencsw
+                http://mirrors.ibiblio.org/pub/mirrors/opencsw
+                http://ftp.math.purdue.edu/mirrors/opencsw.org
+                http://ftp.ussg.iu.edu/csw
+                http://mirrors.usc.edu/pub/csw
+                http://mirrors.dotsrc.org/opencsw
+                http://csw.informatik.uni-erlangen.de/csw
+                http://ftp.uni-erlangen.de/pub/mirrors/csw
+                http://csw.informatik.uni-erlangen.de/csw
+                http://www.grangefields.co.uk/mirrors/csw
+                http://ftp.ntua.gr/pub/vendors/sun/opencsw
+                http://csw.ch.bme.hu
+                http://ftp.heanet.ie/pub/opencsw
+                http://ftp.esat.net/mirrors/opencsw.org/csw
+                http://ftp.df.lth.se/pub/csw
+                http://ftp.sunet.se/pub/vendor/sun/OpenCSW
+                http://mirror.switch.ch/ftp/mirror/opencsw
+                http://mirror.va.com.au/opencsw
+                http://ftp.cs.pu.edu.tw/pub/Sun/opencsw);
+
+my @mirror_ftp   = qw(ftp://ftp.ibiblio.org/pub/mirrors/opencsw
+                ftp://ftp.ussg.iu.edu/pub/csw
+                ftp://mirrors.usc.edu/pub/csw
+                ftp://mirrors.dotsrc.org/opencsw
+                ftp://ftp.uni-erlangen.de/pub/mirrors/csw
+                ftp://ftp.ntua.gr/pub/vendors/sun/opencsw
+                ftp://ftp.heanet.ie/pub/opencsw
+                ftp://ftp.esat.net/mirrors/opencsw.org/csw
+                ftp://ftp.uninett.no/sun/csw
+                ftp://ftp.ru/pub/csw
+                ftp://ftp.corbina.net/pub/Solaris/csw
+                ftp://ftp.df.lth.se/pub/csw
+                ftp://ftp.sunet.se/pub/vendor/sun/OpenCSW
+                ftp://mirror.switch.ch/mirror/opencsw
+                ftp://ftp.cs.pu.edu.tw/pub/Sun/opencsw);
+my @mirror_unofficial = qw(ftp://ftp.igh.cnrs.fr/pub/OpenCSW
+                ftp://ftp.rediris.es/mirror/openCSW
+                http://ftp.igh.cnrs.fr/pub/OpenCSW
+                http://ftp.dk.debian.org/opencsw
+                http://ftp.rediris.es/mirror/openCSW
+                http://ftp.cc.uoc.gr/mirrors/opencsw
+                http://ftp.fernuni-hagen.de/ftp-dir/pub/mirrors/www.opencsw.org
+                http://ftp2.ie.freebsd.org/mirrors/opencsw.org/csw
+                http://mirrors.cat.pdx.edu/opencsw
+                http://sun-wais.oit.unc.edu/pub/packages/solaris/opencsw
+                http://opencsw.solaris-fr.org);
+my @mirror_ipv6   = qw(http://ftp6.uni-erlangen.de/pub/mirrors/csw
+                ftp://ftp6.uni-erlangen.de/pub/mirrors/csw);
+my @mirror_broken = qw(http://mirror.pacific.net.au/opencsw
+                http://planetmirror.com/pub/csw
+                ftp://ftp.planetmirror.com/pub/csw
+                ftp://ftp.math.purdue.edu/mirrors/opencsw.org
+                http://csw.fx.lv
+                ftp://csw.fx.lv/csw
+                http://stoofo.math.uni.lodz.pl/csw
+                ftp://mirror.pacific.net.au/solaris/opencsw);
+
+my $mirrorfile;
+
+my %mirror_url;
+my %mirror_hash;
+my %mirror_time;
+my %mirror_country;
+my %mirror_countryname;
+
+# Which mirrors will we check
+push(@mirror, at mirror_http);
+push(@mirror, at mirror_ftp);
+push(@mirror, at mirror_broken);
+push(@mirror, at mirror_unofficial);
+
+print "hash:$hash\n";
+print "dist:" . join(" ", at dist) . "\n";
+print "osrel:" . join(" ", at osrel) . "\n";
+print "osarch:" . join(" ", at osarch) . "\n";
+print "mirror:" . join(" ", at mirror) . "\n";
+
+my $gi = Geo::IP::PurePerl->new(GEOIP_STANDARD);
+
+foreach my $mirror (@mirror) {
+  print "=> $mirror\n";
+  $mirror_url{$mirror} = $mirror;
+  # Sanitize url into filename
+  ($mirrorfile) = ($mirror =~ /:\/\/(.*)/);
+  $mirrorfile =~ s/\/$//;
+  $mirrorfile =~ s/\//_/g;
+  # Get location of mirror
+  my ($host) = ($mirrorfile =~ /_/) ? ($mirrorfile =~ /(.*?)_/) : $mirrorfile;
+  my $tmp1 = $gi->country_code_by_name($host);
+  my $tmp2 = $gi->country_name_by_name($host);
+  $mirror_country{$mirror} = (defined $tmp1 ? $tmp1 : "N/A");
+  $mirror_countryname{$mirror} = (defined $tmp2 ? $tmp2 : "N/A");
+  if (defined $tmp1) {
+    print "  => Country: $mirror_countryname{$mirror}\n";
+  } else {
+    print "  => Host does not resolve (skipping)\n";
+  }
+  foreach my $dist (@dist) {
+    foreach my $osrel (@osrel) {
+      foreach my $osarch (@osarch) {
+        (-d "$mirror_dir/$mirrorfile") || mkdir("$mirror_dir/$mirrorfile");
+        system("curl -s -4 --create-dirs --ftp-create-dirs -m 20 -R -o $mirror_dir/$mirrorfile/catalog.$dist.$osarch.$osrel $mirror/$dist/$osarch/$osrel/catalog.gz") if ($mirror_country{$mirror} ne "N/A");
+      }
+    }
+  }
+  # Produce hashes
+  my @catalogs = glob("$mirror_dir/$mirrorfile/catalog.*");
+  if (scalar(@catalogs)) {
+    chomp($mirror_hash{$mirror} = `cat $mirror_dir/$mirrorfile/catalog.* | digest -a $hash`);
+  } else {
+    $mirror_time{$mirror} = "0";
+    $mirror_hash{$mirror} = "Error: zero retrieved catalogs";
+  }
+  # Which catalog is the newest
+  if ($mirror_hash{$mirror} eq "d41d8cd98f00b204e9800998ecf8427e") {
+    # Catalogs are all empty
+    $mirror_time{$mirror} = "0";
+    $mirror_hash{$mirror} = "Error: empty/no catalogs";
+  } else {
+    my $latest = 0;
+    foreach (glob("$mirror_dir/$mirrorfile/catalog.*")) {
+      if ((stat($_))[7] < $min_size) {
+        $mirror_time{$mirror} = "0";
+        $mirror_hash{$mirror} = "Error: missing or corrupt catalogs";
+        last;
+      } else {
+        my $time = (stat($_))[9];
+        $latest = $time if ($time > $latest);
+        # Set master hash if this is master mirror
+        $master_hash = $mirror_hash{$mirror} if ($mirror eq $master_mirror);
+      }
+    }
+    $mirror_time{$mirror} = $latest;
+  }
+  print "  => Hash:    $mirror_hash{$mirror}\n";
+  print "  => Updated: " . gmtime($mirror_time{$mirror}) . "\n";
+}
+
+# Create html page
+open(HTML,">$page");
+print HTML "<HTML>\n";
+print HTML "  <HEAD>\n";
+print HTML "    <TITLE>OpenCSW Mirror Status</TITLE>\n";
+print HTML "    <META NAME='keywords' CONTENT='CSW Solaris packages OpenCSW'>\n";
+print HTML "    <LINK TYPE='text/css' HREF='style.css' REL='stylesheet'>\n";
+print HTML "  </HEAD>\n";
+print HTML "  <BODY ALIGN='center'>\n";
+print HTML "    <H1>OpenCSW Mirror Status</H1>\n";
+my @t = gmtime();
+print HTML sprintf("    Last check: %04d-%02d-%02d %02d:%02d:%02d<BR>\n",$t[5]+1900,$t[4]+1,$t[3],$t[2],$t[1],$t[0]);
+print HTML "    <BR>\n";
+print HTML "    <TABLE CLASS='grid' ALIGN='center'>\n";
+print HTML "      <TR>\n";
+print HTML "        <TH>Country</TH><TH>Mirror URL Root</TH><TH>Updated (GMT)</TH><TH>Hash</TH>\n";
+print HTML "      </TR>\n";
+foreach (sort { $mirror_time{$b} <=> $mirror_time{$a} } keys %mirror_time) {
+  print HTML "      <TR>\n";
+  # Country
+  print HTML "        <TD ALIGN='center'>" . ($mirror_country{$_} eq "N/A" ? "N/A" : "<IMAGE SRC='$image_dir/$mirror_country{$_}.png' ALT='$mirror_country{$_}' TITLE='$mirror_countryname{$_}'") . "</TD>\n";
+  # Mirror URL
+  print HTML "        <TD><A HREF='$mirror_url{$_}'>$mirror_url{$_}</A></TD>\n";
+  # Updated
+  my @t = gmtime($mirror_time{$_});
+  print HTML "        <TD ALIGN='center'" . ((time() - $mirror_time{$_}) > 604800 ? " BGCOLOR='#FE2E2E'>" : ">") . sprintf("%04d-%02d-%02d %02d:%02d:%02d",$t[5]+1900,$t[4]+1,$t[3],$t[2],$t[1],$t[0]) . "</TD>\n";
+  # Hash
+  print HTML "        <TD ALIGN='center'";
+  print HTML " BGCOLOR='#FE2E2E'" if ($mirror_hash{$_} =~ /Error/);
+  print HTML " BGCOLOR='#00FF00'" if ($master_hash && $mirror_hash{$_} eq $master_hash);
+  print HTML ">$mirror_hash{$_}</TD>\n";
+  print HTML "      </TR>\n";
+}
+print HTML "    </TABLE>\n";
+print HTML "    <BR>\n";
+print HTML "    {" . join(",", at dist) . "}/{" . join(",", at osarch) . "}/{" . join(",", at osrel) . "}<BR>\n";
+print HTML "    <BR>\n";
+print HTML "    <A HREF='http://www.opencsw.org/get-it/mirrors'>OpenCSW Mirror List</a><BR>\n";
+print HTML "    <BR>\n";
+print HTML "  </BODY>\n";
+print HTML "</HTML>\n";
+close HTML;
+
+exit 0;


Property changes on: buildfarm/bin/mirrorstatus/mirrorstatus.pl
___________________________________________________________________
Added: svn:executable
   + *

Added: buildfarm/bin/mirrorstatus/style.css
===================================================================
--- buildfarm/bin/mirrorstatus/style.css	                        (rev 0)
+++ buildfarm/bin/mirrorstatus/style.css	2011-09-30 13:07:21 UTC (rev 566)
@@ -0,0 +1,66 @@
+body {
+  background-color: #ddeeff;
+  font-family: verdana, arial, Helvetica, sanf-serif;
+  font-size: 14px;
+  margin: 0px;
+}
+
+a {
+  text-decoration: none;
+}
+
+.copyright {
+  font-family: Verdana, Arial, Helvetica, sans-serif;
+  font-size: 9px;
+  font-weight: normal;
+  color: #FFFFFF;
+}
+
+#navlist {
+  margin-left: 0px;
+  padding-left: 16px;
+  background-color: #444;
+}
+
+#navlist li {
+  padding-left: 4px;
+  display: inline;
+  list-style-type: none;
+}
+
+#navlist a {
+  padding: 3px 14px;
+}
+#navlist a:link, #navlist a:visited {
+  color: #fff;
+  text-decoration: none;
+  background-color: #036;
+}
+#navlist a:hover {
+  color: #fff;
+  background-color: #369;
+}
+
+
+#trail {
+  padding-left: 20px;
+}
+#main {
+  padding-left: 20px;
+  padding-right: 20px;
+  padding-bottom: 20px;
+}
+
+.error{color:#cc0000;font-weight:bold}
+.success{color:#00cc00;font-weight:bold}
+
+
+table.grid {
+  background-color: #ffffff;
+  border-collapse: collapse;
+}
+table.grid th, table.grid td {
+  padding: 4px;
+  border: 1px solid #000000;
+  font-size: 14px;
+}

This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the devel mailing list