[BACK]Return to cvsweb.cgi CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / cvsweb

Diff for /cvsweb/cvsweb.cgi between version 3.22 and 3.23

version 3.22, 2000/09/19 18:35:50 version 3.23, 2000/09/19 19:57:58
Line 9 
Line 9 
 #             Ken Coar         <coar@Apache.Org>  #             Ken Coar         <coar@Apache.Org>
 #             Dick Balaska     <dick@buckosoft.com>  #             Dick Balaska     <dick@buckosoft.com>
 #             Akinori MUSHA    <knu@FreeBSD.org>  #             Akinori MUSHA    <knu@FreeBSD.org>
   #             Jens-Uwe Mager   <jum@helios.de>
 #  #
 # Based on:  # Based on:
 # * Bill Fenners cvsweb.cgi revision 1.28 available from:  # * Bill Fenners cvsweb.cgi revision 1.28 available from:
Line 41 
Line 42 
 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF  # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 # SUCH DAMAGE.  # SUCH DAMAGE.
 #  #
 # $zId: cvsweb.cgi,v 1.94 2000/08/24 06:41:22 hnordstrom Exp $  # $zId: cvsweb.cgi,v 1.101 2000/09/13 22:44:05 jumager Exp $
 # $Id$  # $Id$
 #  #
 ###  ###
Line 76  use vars qw (
Line 77  use vars qw (
     $navigationHeaderColor $tableBorderColor $markupLogColor      $navigationHeaderColor $tableBorderColor $markupLogColor
     $tabstop $state $annTable $sel $curbranch @HideModules      $tabstop $state $annTable $sel $curbranch @HideModules
     $module $use_descriptions %descriptions @mytz $dwhere $moddate      $module $use_descriptions %descriptions @mytz $dwhere $moddate
     $use_moddate      $use_moddate $has_zlib $gzip_open
 );  );
   
 sub printDiffSelect($);  sub printDiffSelect($);
Line 160  $tabstop = $use_moddate = $moddate = undef;
Line 161  $tabstop = $use_moddate = $moddate = undef;
 use Time::Local;  use Time::Local;
 use IPC::Open2;  use IPC::Open2;
   
   # Check if the zlib C library interface is installed, and if yes
   # we can avoid using the extra gzip process.
   eval {
           require Compress::Zlib;
   };
   $has_zlib = !$@;
   
 $verbose = $v;  $verbose = $v;
 $checkoutMagic = "~checkout~";  $checkoutMagic = "~checkout~";
 $pathinfo = defined($ENV{PATH_INFO}) ? $ENV{PATH_INFO} : '';  $pathinfo = defined($ENV{PATH_INFO}) ? $ENV{PATH_INFO} : '';
Line 197  $nofilelinks = $is_textbased;
Line 205  $nofilelinks = $is_textbased;
 #  braindamaged MS-Internet Exploders claim that they  #  braindamaged MS-Internet Exploders claim that they
 # accept gzip .. but don't in fact and  # accept gzip .. but don't in fact and
 # display garbage then :-/  # display garbage then :-/
 # Turn off gzip if running under mod_perl. piping does  # Turn off gzip if running under mod_perl and no zlib is available,
 # not work as expected inside the server. One can probably  # piping does not work as expected inside the server.
 # achieve the same result using Apache::GZIPFilter.  
 $maycompress = (($ENV{HTTP_ACCEPT_ENCODING} =~ m`gzip`  $maycompress = (($ENV{HTTP_ACCEPT_ENCODING} =~ m`gzip`
                  || $is_mozilla3)                   || $is_mozilla3)
                 && !$is_msie                  && !$is_msie
                 && !$is_mod_perl);                  && !($is_mod_perl && !$has_zlib));
   
 # put here the variables we need in order  # put here the variables we need in order
 # to hold our state - they will be added (with  # to hold our state - they will be added (with
Line 359  $defaultViewable = $allow_markup && viewable($mimetype
Line 366  $defaultViewable = $allow_markup && viewable($mimetype
 # ge get an Internal Server Error if we try to pipe the  # ge get an Internal Server Error if we try to pipe the
 # output through the nonexistent gzip ..  # output through the nonexistent gzip ..
 # any more elegant ways to prevent this are welcome!  # any more elegant ways to prevent this are welcome!
 if ($allow_compress && $maycompress) {  if ($allow_compress && $maycompress && !$has_zlib) {
     foreach (split(/:/, $ENV{PATH})) {      foreach (split(/:/, $ENV{PATH})) {
         if (-x "$_/gzip") {          if (-x "$_/gzip") {
             $GZIPBIN = "$_/gzip";              $GZIPBIN = "$_/gzip";
Line 710  elsif (-d $fullname) {
Line 717  elsif (-d $fullname) {
             foreach my $var (@stickyvars) {              foreach my $var (@stickyvars) {
                 print "<INPUT TYPE=HIDDEN NAME=\"$var\" VALUE=\"$input{$var}\">\n"                  print "<INPUT TYPE=HIDDEN NAME=\"$var\" VALUE=\"$input{$var}\">\n"
                     if (defined($input{$var})                      if (defined($input{$var})
                         && $input{$var} ne $DEFAULTVALUE{$var}                          && (!defined($DEFAULTVALUE{$var})
                               || $input{$var} ne $DEFAULTVALUE{$var})
                         && $input{$var} ne ""                          && $input{$var} ne ""
                         && $var ne "only_with_tag");                          && $var ne "only_with_tag");
             }              }
Line 772  elsif (-d $fullname) {
Line 780  elsif (-d $fullname) {
     elsif (-f $fullname . ',v') {      elsif (-f $fullname . ',v') {
         if (defined($input{'rev'}) || $doCheckout) {          if (defined($input{'rev'}) || $doCheckout) {
             &doCheckout($fullname, $input{'rev'});              &doCheckout($fullname, $input{'rev'});
               close(GZIP) if ($gzip_open);
             exit;              exit;
         }          }
         if (defined($input{'annotate'}) && $allow_annotate) {          if (defined($input{'annotate'}) && $allow_annotate) {
             &doAnnotate($input{'annotate'});              &doAnnotate($input{'annotate'});
               close(GZIP) if ($gzip_open);
             exit;              exit;
         }          }
         if (defined($input{'r1'}) && defined($input{'r2'})) {          if (defined($input{'r1'}) && defined($input{'r2'})) {
             &doDiff($fullname, $input{'r1'}, $input{'tr1'},              &doDiff($fullname, $input{'r1'}, $input{'tr1'},
                     $input{'r2'}, $input{'tr2'}, $input{'f'});                      $input{'r2'}, $input{'tr2'}, $input{'f'});
               close(GZIP) if ($gzip_open);
             exit;              exit;
         }          }
         print("going to dolog($fullname)\n") if ($verbose);          print("going to dolog($fullname)\n") if ($verbose);
Line 803  elsif (-d $fullname) {
Line 814  elsif (-d $fullname) {
         # e.g. foo.c          # e.g. foo.c
         &doDiff($fullname, $input{'r1'}, $input{'tr1'},          &doDiff($fullname, $input{'r1'}, $input{'tr1'},
                 $input{'r2'}, $input{'tr2'}, $input{'f'});                  $input{'r2'}, $input{'tr2'}, $input{'f'});
           close(GZIP) if ($gzip_open);
         exit;          exit;
     }      }
     elsif (($newname = $fullname) =~ s|/([^/]+)$|/Attic/$1| &&      elsif (($newname = $fullname) =~ s|/([^/]+)$|/Attic/$1| &&
Line 836  elsif (-d $fullname) {
Line 848  elsif (-d $fullname) {
         }          }
         &fatal("404 Not Found","$where: no such file or directory");          &fatal("404 Not Found","$where: no such file or directory");
     }      }
   
   close(GZIP) if ($gzip_open);
 ## End MAIN  ## End MAIN
   
 sub printDiffSelect($) {  sub printDiffSelect($) {
Line 1344  sub cvswebMarkup($$$) {
Line 1358  sub cvswebMarkup($$$) {
     if ($mimetype =~ /^image/) {      if ($mimetype =~ /^image/) {
         print "<IMG SRC=\"$url$barequery\"><BR>";          print "<IMG SRC=\"$url$barequery\"><BR>";
     }      }
       elsif ($mimetype =~ m%^application/pdf%) {
           print "<EMBED SRC=\"$url$barequery\" WIDTH=\"100%\"><BR>";
       }
     else {      else {
         print "<PRE>";          print "<PRE>";
         foreach (@content) {          foreach (@content) {
Line 1356  sub cvswebMarkup($$$) {
Line 1373  sub cvswebMarkup($$$) {
 sub viewable($) {  sub viewable($) {
     my ($mimetype) = @_;      my ($mimetype) = @_;
   
     $mimetype =~ m%^(text|image)/%;      $mimetype =~ m%^((text|image)/|application/pdf)% ;
 }  }
   
 ###############################  ###############################
Line 1454  sub doDiff($$$$$$) {
Line 1471  sub doDiff($$$$$$) {
         if ($human_readable) {          if ($human_readable) {
             http_header();              http_header();
             &human_readable_diff($fh, $rev2);              &human_readable_diff($fh, $rev2);
               close(GZIP) if ($gzip_open);
             exit;              exit;
         }          }
         else {          else {
Line 2123  EOF
Line 2141  EOF
         foreach (@stickyvars) {          foreach (@stickyvars) {
             print "<INPUT TYPE=HIDDEN NAME=\"$_\" VALUE=\"$input{$_}\">\n"              print "<INPUT TYPE=HIDDEN NAME=\"$_\" VALUE=\"$input{$_}\">\n"
                 if (defined($input{$_})                  if (defined($input{$_})
                     && ($input{$_} ne $DEFAULTVALUE{$_} && $input{$_} ne ""));                      && ((!defined($DEFAULTVALUE{$_})
                            || $input{$_} ne $DEFAULTVALUE{$_})
                           && $input{$_} ne ""));
         }          }
         print "<TABLE><TR>\n";          print "<TABLE><TR>\n";
         print "<TD align=right>Diffs between \n";          print "<TD align=right>Diffs between \n";
Line 2177  EOF
Line 2197  EOF
             next if ($_ eq "only_with_tag");              next if ($_ eq "only_with_tag");
             next if ($_ eq "logsort");              next if ($_ eq "logsort");
             print "<INPUT TYPE=HIDDEN NAME=\"$_\" VALUE=\"$input{$_}\">\n"              print "<INPUT TYPE=HIDDEN NAME=\"$_\" VALUE=\"$input{$_}\">\n"
                 if (defined($input{$_}) && $input{$_} ne $DEFAULTVALUE{$_}                  if (defined($input{$_})
                       && (!defined($DEFAULTVALUE{$_})
                           || $input{$_} ne $DEFAULTVALUE{$_})
                     && $input{$_} ne "");                      && $input{$_} ne "");
         }          }
         print "<TR><TD align=right>";          print "<TR><TD align=right>";
Line 2388  sub navigateHeader($$$$$) {
Line 2410  sub navigateHeader($$$$$) {
     $swhere = urlencode($filename) if ($swhere eq "");      $swhere = urlencode($filename) if ($swhere eq "");
     print "<\!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";      print "<\!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";
     print "<HTML>\n<HEAD>\n";      print "<HTML>\n<HEAD>\n";
     print '<!-- CVSweb $zRevision: 1.94 $  $Revision$ -->';      print '<!-- CVSweb $zRevision: 1.101 $  $Revision$ -->';
     print "\n<TITLE>$path$filename - $title - $rev</TITLE></HEAD>\n";      print "\n<TITLE>$path$filename - $title - $rev</TITLE></HEAD>\n";
     print  "<BODY BGCOLOR=\"$backcolor\">\n";      print  "<BODY BGCOLOR=\"$backcolor\">\n";
     print "<table width=\"100%\" border=0 cellspacing=0 cellpadding=1 bgcolor=\"$navigationHeaderColor\">";      print "<table width=\"100%\" border=0 cellspacing=0 cellpadding=1 bgcolor=\"$navigationHeaderColor\">";
Line 2689  sub http_header(;$) {
Line 2711  sub http_header(;$) {
     my $content_type = shift || "text/html";      my $content_type = shift || "text/html";
     if (defined($moddate)) {      if (defined($moddate)) {
         if ($is_mod_perl) {          if ($is_mod_perl) {
             Apache->request->header_out(Last_modified => scalar gmtime($moddate) . " GMT");              Apache->request->header_out("Last-Modified" => scalar gmtime($moddate) . " GMT");
         }          }
         else {          else {
             print "Last-Modified: " . scalar gmtime($moddate) . " GMT\r\n";              print "Last-Modified: " . scalar gmtime($moddate) . " GMT\r\n";
Line 2702  sub http_header(;$) {
Line 2724  sub http_header(;$) {
             print "Content-type: $content_type\r\n";              print "Content-type: $content_type\r\n";
     }      }
     if ($allow_compress && $maycompress) {      if ($allow_compress && $maycompress) {
         my $fh = do {local(*FH);};          if ($has_zlib || (defined($GZIPBIN) && open(GZIP, "|$GZIPBIN -1 -c"))) {
         if (defined($GZIPBIN) && open($fh, "|$GZIPBIN -1 -c")) {  
             if ($is_mod_perl) {              if ($is_mod_perl) {
                     Apache->request->content_encoding("x-gzip");                      Apache->request->content_encoding("x-gzip");
                     Apache->request->header_out(Vary => "Accept-Encoding");                      Apache->request->header_out(Vary => "Accept-Encoding");
Line 2715  sub http_header(;$) {
Line 2736  sub http_header(;$) {
                     print "\r\n"; # Close headers                      print "\r\n"; # Close headers
             }              }
             $| = 1; $| = 0; # Flush header output              $| = 1; $| = 0; # Flush header output
             select ($fh);              if ($has_zlib) {
                   tie *GZIP, __PACKAGE__, \*STDOUT;
               }
               select(GZIP);
               $gzip_open = 1;
 #           print "<!-- gzipped -->" if ($content_type eq "text/html");  #           print "<!-- gzipped -->" if ($content_type eq "text/html");
         }          }
         else {          else {
Line 2740  sub http_header(;$) {
Line 2765  sub http_header(;$) {
   
 sub html_header($) {  sub html_header($) {
     my ($title) = @_;      my ($title) = @_;
     my $version = '$zRevision: 1.94 $  $Revision$'; #'      my $version = '$zRevision: 1.101 $  $Revision$'; #'
     http_header();      http_header();
     print <<EOH;      print <<EOH;
 <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"  <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"
Line 2785  sub forbidden_module($) {
Line 2810  sub forbidden_module($) {
     }      }
   
     return 0;      return 0;
   }
   
   # implement a gzipped file handle via the Compress:Zlib compression
   # library.
   
   sub MAGIC1() { 0x1f }
   sub MAGIC2() { 0x8b }
   sub OSCODE() { 3    }
   
   sub TIEHANDLE {
           my ($class, $out) = @_;
           my ($d) = Compress::Zlib::deflateInit(-Level => Compress::Zlib::Z_BEST_COMPRESSION(),
                   -WindowBits => -Compress::Zlib::MAX_WBITS()) or return undef;
           my ($o) = {
                   handle => $out,
                   dh => $d,
                   crc => 0,
                   len => 0,
           };
           my ($header) = pack("c10", MAGIC1, MAGIC2, Compress::Zlib::Z_DEFLATED(), 0,0,0,0,0,0, OSCODE);
           print {$o->{handle}} $header;
           return bless($o, $class);
   }
   
   sub PRINT {
           my ($o) = shift;
           my ($buf) = join(defined $, ? $, : "",@_);
           my ($len) = length($buf);
           my ($compressed, $status) = $o->{dh}->deflate($buf);
           print {$o->{handle}} $compressed if defined($compressed);
           $o->{crc} = Compress::Zlib::crc32($buf, $o->{crc});
           $o->{len} += $len;
           return $len;
   }
   
   sub PRINTF {
           my ($o) = shift;
           my ($fmt) = shift;
           my ($buf) = sprintf($fmt, @_);
           my ($len) = length($buf);
           my ($compressed, $status) = $o->{dh}->deflate($buf);
           print {$o->{handle}} $compressed if defined($compressed);
           $o->{crc} = Compress::Zlib::crc32($buf, $o->{crc});
           $o->{len} += $len;
           return $len;
   }
   
   sub WRITE {
           my ($o, $buf, $len, $off) = @_;
           my ($compressed, $status) = $o->{dh}->deflate(substr($buf, 0, $len));
           print {$o->{handle}} $compressed if defined($compressed);
           $o->{crc} = Compress::Zlib::crc32(substr($buf, 0, $len), $o->{crc});
           $o->{len} += $len;
           return $len;
   }
   
   sub CLOSE {
           my ($o) = @_;
           return if !defined( $o->{dh});
           my ($buf) = $o->{dh}->flush();
           $buf .= pack("V V", $o->{crc}, $o->{len});
           print {$o->{handle}} $buf;
           undef $o->{dh};
   }
   
   sub DESTROY {
           my ($o) = @_;
           CLOSE($o);
 }  }

Legend:
Removed from v.3.22  
changed lines
  Added in v.3.23

CVSweb