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

Diff for /cvsweb/cvsweb.cgi between version 4.27 and 4.33

version 4.27, 2019/11/26 12:09:02 version 4.33, 2019/11/29 16:27:33
Line 56  use filetest qw(access);
Line 56  use filetest qw(access);
 use vars qw (  use vars qw (
   $VERSION $CheckoutMagic $MimeTypes $DEBUG    $VERSION $CheckoutMagic $MimeTypes $DEBUG
   $config $allow_version_select    $config $allow_version_select
   @CVSrepositories @CVSROOT %CVSROOT %CVSROOTdescr    @CVSrepositories @CVSROOT %CVSROOT %CVSROOTdescr %DEFAULTVALUE %MTYPES
   %DEFAULTVALUE %ICONS %MTYPES  
   %DIFF_COMMANDS @DIFFTYPES %DIFFTYPES @LOGSORTKEYS %LOGSORTKEYS    %DIFF_COMMANDS @DIFFTYPES %DIFFTYPES @LOGSORTKEYS %LOGSORTKEYS
   %alltags %fileinfo %tags @branchnames %nameprinted    %alltags %fileinfo %tags @branchnames %nameprinted
   %symrev %revsym @allrevisions %date %author @revdisplayorder    %symrev %revsym @allrevisions %date %author @revdisplayorder
Line 67  use vars qw (
Line 66  use vars qw (
   $is_links $is_lynx $is_w3m $is_msie $is_mozilla3 $is_textbased    $is_links $is_lynx $is_w3m $is_msie $is_mozilla3 $is_textbased
   %input $query $barequery $sortby $bydate $byrev $byauthor    %input $query $barequery $sortby $bydate $byrev $byauthor
   $bylog $byfile $defaultDiffType $logsort $cvstree $cvsroot    $bylog $byfile $defaultDiffType $logsort $cvstree $cvsroot
   $charset $output_filter    $charset $output_filter %CMD $allow_compress $backicon $diricon $fileicon
   @command_path %CMD $allow_compress $backicon $diricon $fileicon    $fullname $logo $defaulttitle $address $binfileicon $iconsdir
   $fullname $logo $defaulttitle $address $binfileicon    $shortLogLen $show_author
   $long_intro $short_instruction $shortLogLen $show_author  
   $tablepadding $hr_breakable $showfunc $hr_ignwhite $hr_ignkeysubst    $tablepadding $hr_breakable $showfunc $hr_ignwhite $hr_ignkeysubst
   $inputTextSize $mime_types $allow_annotate $allow_markup $allow_mailtos    $inputTextSize $mime_types $allow_annotate $allow_markup $allow_mailtos
   $allow_log_extra $allow_dir_extra $allow_source_extra    $allow_log_extra $allow_dir_extra $allow_source_extra
Line 79  use vars qw (
Line 77  use vars qw (
   $tabstop $state $annTable $sel @ForbiddenFiles    $tabstop $state $annTable $sel @ForbiddenFiles
   $use_descriptions %descriptions $dwhere    $use_descriptions %descriptions $dwhere
   $use_moddate $gzip_open $file_list_len    $use_moddate $gzip_open $file_list_len
   $allow_tar @tar_options @gzip_options @cvs_options    $allow_tar @tar_options @cvs_options
   @annotate_options @rcsdiff_options    @annotate_options @rcsdiff_options
   $HTML_DOCTYPE $HTML_META $cssurl $CSS    $HTML_DOCTYPE $HTML_META $cssurl $CSS
 );  );
Line 129  EOM
Line 127  EOM
   $MimeTypes = undef if $@;    $MimeTypes = undef if $@;
   
   $CheckoutMagic = '~checkout~';    $CheckoutMagic = '~checkout~';
     $CMD{$_} = "/usr/bin/$_" for (qw(cvs rcsdiff rlog));
     $CMD{tar} = "/bin/tar";
 }  }
   
 # -----------------------------------------------------------------------------  # -----------------------------------------------------------------------------
Line 189  sub checkout_to_temp($$$);
Line 189  sub checkout_to_temp($$$);
 # (think mod_perl)...  # (think mod_perl)...
 delete(@ENV{qw(PATH IFS CDPATH ENV BASH_ENV)});  delete(@ENV{qw(PATH IFS CDPATH ENV BASH_ENV)});
   
   # Helps to achieve read only access to the repositories
   # with cvs >= 1.12.1 and doesn't hurt other versions.
   $ENV{CVSREADONLYFS} = 1;
   
 # Location of the configuration file inside the web server chroot:  # Location of the configuration file inside the web server chroot:
 $config = '/conf/cvsweb/cvsweb.conf';  $config = '/conf/cvsweb/cvsweb.conf';
   
 ######## Configuration parameters #########  ######## Configuration parameters #########
   
 @CVSrepositories = @CVSROOT = %CVSROOT = %DEFAULTVALUE = %ICONS =  @CVSrepositories = @CVSROOT = %CVSROOT = %DEFAULTVALUE =
   %MTYPES = %tags = %alltags = %fileinfo = %DIFF_COMMANDS = ();    %MTYPES = %tags = %alltags = %fileinfo = %DIFF_COMMANDS = ();
   
 $logo = $defaulttitle =  $logo = $defaulttitle =
   $address = $long_intro = $short_instruction = $shortLogLen = $show_author =    $address = $shortLogLen = $show_author =
   $tablepadding = $hr_breakable = $showfunc = $hr_ignwhite =    $tablepadding = $hr_breakable = $showfunc = $hr_ignwhite =
   $hr_ignkeysubst = $inputTextSize = $mime_types = $allow_annotate =    $hr_ignkeysubst = $inputTextSize = $mime_types = $allow_annotate =
   $allow_markup = $allow_compress = $edit_option_form =    $allow_markup = $allow_compress = $edit_option_form =
Line 567  if ($input{cvsroot} && $CVSROOT{$input{cvsroot}}) {
Line 571  if ($input{cvsroot} && $CVSROOT{$input{cvsroot}}) {
   
 $cvsroot = $CVSROOT{$cvstree};  $cvsroot = $CVSROOT{$cvstree};
   
 # create icons out of description  if ($iconsdir) {
 foreach my $k (keys %ICONS) {    $backicon = '<img src="' . $iconsdir . '/back.gif" alt="[BACK]"' .
   my ($itxt, $ipath, $iwidth, $iheight) = @{$ICONS{$k}};      ' border="0" width="20" height="22"/>';
   no strict 'refs';    $diricon = '<img src="' . $iconsdir . '/dir.gif" alt="[DIR]"' .
   if ($ipath) {      ' border="0" width="20" height="22"/>';
     ${"${k}icon"} =    $fileicon = '<img src="' . $iconsdir . '/text.gif" alt="[TXT]"' .
       sprintf('<img src="%s" alt="%s" border="0" width="%d" height="%d" />',      ' border="0" width="20" height="22"/>';
               htmlquote($ipath), htmlquote($itxt), $iwidth, $iheight);    $binfileicon = '<img src="' . $iconsdir . '/binary.gif" alt="[BIN]"' .
   } else {      ' border="0" width="20" height="22"/>';
     ${"${k}icon"} = $itxt;  } else {
   }    $backicon = 'back';
     $diricon = 'dir';
     $fileicon = 'file';
     $binfileicon = 'binfile';
 }  }
   
 my $config_cvstree = "$config-$cvstree";  my $config_cvstree = "$config-$cvstree";
Line 644  if ($input{tarball}) {
Line 651  if ($input{tarball}) {
           'You cannot download the top level directory.');            'You cannot download the top level directory.');
   }    }
   
   my $istar = $ext eq '.tar.gz' || $ext eq '.tgz';    unless ($ext eq '.tar.gz' || $ext eq '.tgz') {
   if ($istar) {      fatal('404 Not Found', 'Unsupported archive type.');
     fatal('500 Internal Error', 'tar command not found.') unless $CMD{tar};  
     fatal('500 Internal Error', 'gzip command not found.') unless $CMD{gzip};  
   } else {  
     fatal('500 Internal Error', 'Unsupported archive type.');  
   }    }
   
   my $tmpexportdir;    my $tmpexportdir;
Line 681  if ($input{tarball}) {
Line 684  if ($input{tarball}) {
       ('500 Internal Error',        ('500 Internal Error',
        'Export failure (exit status %s), output: <pre>%s</pre>',         'Export failure (exit status %s), output: <pre>%s</pre>',
        $errcode, $err || $export_err);         $errcode, $err || $export_err);
   
   } else {    } else {
   
     $| = 1;    # Essential to get the buffering right.      $| = 1;    # Essential to get the buffering right.
     local (*TAR_OUT);      local (*TAR_OUT);
       my ($h, $err) = startproc($CMD{tar}, @tar_options, '-czf', '-',
     my (@cmd, $ctype);        $basedir, '>pipe', \*TAR_OUT);
     if ($istar) {  
       my @tar = ($CMD{tar}, @tar_options, '-cf', '-', $basedir);  
       my @gzip = ($CMD{gzip}, @gzip_options, '-c');  
       push(@cmd, \@tar, '|', \@gzip);  
       $ctype = 'application/x-gzip';  
     }  
     push(@cmd, '>pipe', \*TAR_OUT);  
   
     my ($h, $err) = startproc(@cmd);  
     if ($h) {      if ($h) {
       print "Content-Type: $ctype\r\n\r\n";        print "Content-Type: application/x-gzip\r\n\r\n";
       local $/ = undef;        local $/ = undef;
       print <TAR_OUT>;        print <TAR_OUT>;
       $h->finish();        $h->finish();
Line 732  if (-d $fullname) {
Line 724  if (-d $fullname) {
   
   if ($where eq '/') {    if ($where eq '/') {
     html_header($defaulttitle);      html_header($defaulttitle);
     $long_intro =~ s/!!CVSROOTdescr!!/$CVSROOTdescr{$cvstree}/g;  
     print $long_intro;  
   } else {    } else {
     html_header($where);      html_header($where);
     my $html = (-f catfile($fullname, 'README.cvs.html,v') ||      my $html = (-f catfile($fullname, 'README.cvs.html,v') ||
Line 770  if (-d $fullname) {
Line 760  if (-d $fullname) {
       }        }
       $h->finish();        $h->finish();
     }      }
     print $short_instruction;  
   }    }
   
   if ($use_descriptions &&    if ($use_descriptions &&
Line 1094  EOF
Line 1083  EOF
   
   if ($allow_tar && $filesfound) {    if ($allow_tar && $filesfound) {
     my ($basefile) = ($where =~ m,(?:.*/)?([^/]+),);      my ($basefile) = ($where =~ m,(?:.*/)?([^/]+),);
     my $havetar = $CMD{tar} && $CMD{gzip};      if (defined($basefile) && $basefile ne '') {
     if (defined($basefile) && $basefile ne '' && $havetar) {  
       my $q = ($query ? "$query;" : '?') . 'tarball=1';        my $q = ($query ? "$query;" : '?') . 'tarball=1';
       print "<hr />\n",        print "<hr />\n",
         '<div style="text-align: center">Download this directory in ';          '<div style="text-align: center">Download this directory in ';
Line 1572  sub safeglob($)
Line 1560  sub safeglob($)
   
   
 #  #
 # Searches @command_path for the given executable file.  
 #  
 sub search_path($)  
 {  
   my ($command) = @_;  
   for my $d (@command_path) {  
     my $cmd = catfile($d, $command);  
     return $cmd if (-x $cmd && !-d _);  
   }  
   return '';  
 }  
   
   
 #  
 # Gets the MIME type for the given file name.  # Gets the MIME type for the given file name.
 #  #
 sub getMimeType($;$)  sub getMimeType($;$)
Line 2424  sub getDirLogs($$@)
Line 2398  sub getDirLogs($$@)
   
   if ($linesread == 0) {    if ($linesread == 0) {
     fatal('500 Internal Error',      fatal('500 Internal Error',
           'Failed to spawn GNU rlog on <em>"%s"</em>.<br /><br />Did you set the <b><code>@command_path</code></b> in your configuration file correctly? (Currently: "<code>%s</code>")',            'Failed to spawn rlog on <em>"%s"</em>',
           htmlquote(join(', ', @files)), join(':', @command_path));            htmlquote(join(', ', @files)));
   }    }
   
   return @unreadable;    return @unreadable;
 }  }
   

Legend:
Removed from v.4.27  
changed lines
  Added in v.4.33

CVSweb