mhonarc-commits
[Top] [All Lists]

CVS: mharc/bin compress-files,1.5,1.6 compress-mboxes,1.5,1.6 web-archive,1...

2002-08-25 22:34:19
Update of /cvsroot/mhonarc/mharc/bin
In directory subversions:/tmp/cvs-serv2072/bin

Modified Files:
	compress-files compress-mboxes web-archive 
Log Message:
* bin/compress-files, bin/compress-mboxes:
  . BUG FIX: Added -mbox-mode to compress-files.  This is to fix a bug
    with compress-mboxes for archives that have yearly archives.
    If a mailbox is in YYYY format, a year is added to -mtime to
    determine if the file should be compressed.

* bin/web-archive:
  . NEW: Added auto-generation of all-lists index.  The index will
    contain contain the list of archives with links to the latest
    indexes and showing the last update time for each archive.

    The all-lists index file can be specified by the -alllistidx
    option or ALL_LISTS_INDEX lib/config.sh variable.  The default
    value is lists.html within the html/ archive directory.
    Equivalent options exists to set the URL to the file.

    Run web-archive program with -man option to view the manpage
    to get more information about this feature and other related
    options.

* lib/common.mrc.in.dist:
  . Several layout changes to provide a nicer appearance to archive
    pages.  Layout is now controled via stylesheet settings.
    Tags have been added with CLASS attributes to allow control
    of the visual appearance of pages without having to re-edit
    the pages.  An initial stylesheet (html/stylesheet.css.in.dist)
    has been provided with some default styles (more information
    about stylesheet below).

    Attempts have been made to keep pages usable with text-based
    browsers.  Table-aware browsers like w3m and links, handle
    the pages fine.  Lynx does not handle the tables well, but
    the pages should still be readable and usable with Lynx.

    To see an example of the layout style, you can checkout the
    mhonarc.org mailing lists at
    <http://www.mhonarc.org/archive/html/>.

    If you want to use the new layout, you must delete your local
    copy of "lib/common.mrc.in" and run "make configure".

* html/stylesheet.css.in.dist:
  . NEW: This is the main stylesheet controling the appearance
    of archive pages generated by MHArc.  Stylesheet settings are
    based upon the CSS2 specification.  The styles are supported by
    Netscape 6+, Mozilla, and Mozilla-based browsers.  Some styles
    appear to not work with IE6, however, the failures of IE6 do not
    affect the readability of pages.

* lib/mrc/_nothread.mrc.in.dist:
  . NEW: MHonArc resource file use by archives that have threads
    disabled, either by specifying -nothreads in the MHonArc-Options
    option in lib/lists.def for a list or by a list-specific resource
    file.

    NOTE: There is a feature in MHArc that has not been explicitly
	  documented that allows you to provide additional
	  MHonArc resource settings on a per-list archive basis.
	  In lib/config.sh is a variable called MHA_RC_DIR that
	  specifies the location of archive-specific resource files.
	  By default, it is "<mharc-root>/lib/mrc".  If you add a
	  file called "<list-name>.mrc", where "<list-name>" is the
	  name of the list as defined in lib/lists.def, MHArc will
	  pass that file to MHonArc when processing the HTML archive
	  for the list.

	  When creating a list-specific resource file, it is
	  recommended to create the file
	  "<mharc-root>/lib/mrc/<list-name>.mrc.in" and then run
	  "make configure".  This allows you to use lib/config.sh
	  variables (e.g. "@@HTML_URL@@") in your resource file.

    A way to reference _nothread.mrc in a resource file is to have
    the following in the ".in" template version of a list resource
    file:

      <Include>
      @@MHA_RC_DIR@@/_nothread.mrc
      </Include>

    When "make configure" is executed, the "@@MHA_RC_DIR@@" will get
    expanded to the pathname location where archive-specific resource
    files are kept.

* lib/config.sh.in.dist:
  . Added the following variables:

      # Pathname of archive lists index page.
      ALL_LISTS_FILE=$HTML_DIR/lists.html

      # Pathname of header template for archive lists index page.
      ALL_LISTS_HEADER=$HTML_DIR/.PNM.all-head

      # Pathname of header template for archive lists index page.
      ALL_LISTS_FOOTER=$HTML_DIR/.PNM.all-foot

      # Directory containing informational pages about each list archive.
      INFO_DIR=$SW_ROOT/info

      # Base URL containing informational pages about each list archive.
      INFO_URL=$ROOT_URL/info

* cgi-bin/template/NMZ.head.in.dist, html/.PNM.head.in.dist:
  . Minor change to labels for sorting search results by date.
    Newer labels should be clearer about the ordering of dates since
    previous wording can be ambiguous.


Index: compress-files
===================================================================
RCS file: /cvsroot/mhonarc/mharc/bin/compress-files,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -r1.5 -r1.6
*** compress-files	9 Jul 2002 01:30:49 -0000	1.5
--- compress-files	26 Aug 2002 05:33:23 -0000	1.6
***************
*** 35,38 ****
--- 35,42 ----
  use Getopt::Long;
  use File::Find;
+ use MHArc::Util qw( usage );
+ 
+ # Amount of seconds in a year
+ my $year_secs = 31536000;
  
  my %opt = ( );
***************
*** 40,43 ****
--- 44,48 ----
      "debug!",
      "pattern=s",
+     "mbox-mode!",
      "mtime=i",
      "n!",
***************
*** 51,55 ****
  
  my $debug = $opt{'debug'};
! my $pattern = $opt{'pattern'} || '^[^.]';
  my $compress_time = $opt{'mtime'} || 31;
  my $noact = $opt{'n'};
--- 56,61 ----
  
  my $debug = $opt{'debug'};
! my $mbox_mode = $opt{'mbox-mode'};
! my $pattern = $opt{'pattern'} || ($mbox_mode ? '^\d+(?:-\d+)?$' : '^[^.]');
  my $compress_time = $opt{'mtime'} || 31;
  my $noact = $opt{'n'};
***************
*** 69,76 ****
    print qq/$File::Find::name (/, scalar(localtime($mtime)), qq/)\n/  if $debug;
  
!   if ($time-$mtime < $compress_time) {
      print qq/Skipping "$File::Find::name"\n/  if $debug;
      return;
    }
    print qq/Compressing "$File::Find::name"\n/  if $debug;
    if ($noact) {
--- 75,88 ----
    print qq/$File::Find::name (/, scalar(localtime($mtime)), qq/)\n/  if $debug;
  
!   if ($mbox_mode && (/^\d+$/)) {
!     if ($time-$mtime < ($compress_time+$year_secs)) {
!       print qq/Skipping "$File::Find::name"\n/  if $debug;
!       return;
!     }
!   } elsif ($time-$mtime < $compress_time) {
      print qq/Skipping "$File::Find::name"\n/  if $debug;
      return;
    }
+ 
    print qq/Compressing "$File::Find::name"\n/  if $debug;
    if ($noact) {
***************
*** 108,111 ****
--- 120,125 ----
  =head1 OPTIONS
  
+ =over
+ 
  =item C<-debug>
  
***************
*** 120,123 ****
--- 134,145 ----
  Print the commands that would be executed, but do not execute them.
  
+ =item C<-mbox-mode>
+ 
+ A hack for compress mailbox files.  When this option is specified,
+ the default C<-pattern> is C<^\d+(?:-\d+)?$>.  This pattern basically
+ searches for files with names in YYYY and YYYY-MM format.  Files with
+ names in YYYY format are handled slightly different.  When checking
+ if the file can be compressed, a year is added to C<-mtime>.
+ 
  =item C<-man>
  
***************
*** 135,139 ****
  C<^[^.]>.
  
! =over
  
  =head1 SEE ALSO
--- 157,161 ----
  C<^[^.]>.
  
! =back
  
  =head1 SEE ALSO

Index: compress-mboxes
===================================================================
RCS file: /cvsroot/mhonarc/mharc/bin/compress-mboxes,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -r1.5 -r1.6
*** compress-mboxes	9 Jul 2002 01:53:38 -0000	1.5
--- compress-mboxes	26 Aug 2002 05:33:23 -0000	1.6
***************
*** 69,73 ****
    # Call compress-files
    my @cmd_args = (
!     '-pattern', '^\d+(?:-\d+)?$',
    );
    if ($noact) {
--- 69,73 ----
    # Call compress-files
    my @cmd_args = (
!     '-mbox-mode',
    );
    if ($noact) {
***************
*** 77,81 ****
      push(@cmd_args, '-debug');
    }
!   exec_prg("$Dir/compress-files", @cmd_args, $config->{'MBOX_DIR'});
  
  } # End: MAIN
--- 77,82 ----
      push(@cmd_args, '-debug');
    }
!   exec("$Dir/compress-files", @cmd_args, $config->{'MBOX_DIR'});
!   die qq/exec @_ failed: $?\n/;
  
  } # End: MAIN

Index: web-archive
===================================================================
RCS file: /cvsroot/mhonarc/mharc/bin/web-archive,v
retrieving revision 1.29
retrieving revision 1.30
diff -C2 -r1.29 -r1.30
*** web-archive	23 Jul 2002 05:51:46 -0000	1.29
--- web-archive	26 Aug 2002 05:33:23 -0000	1.30
***************
*** 53,59 ****
--- 53,61 ----
    my $clstatus = GetOptions(\%opt,
      'alllistsurl=s',	# Root to all lists URL.
+     'alllistsindex=s',	# Pathname to all lists index page.
      'debug|verbose',    # Show what is going on in detail.
      'editidx',		# Edit archive pages; useful to apply MHonArc resource
  		        # changes.
+     'editallidx',	# Regen all lists index.
      'editidxonly',	# Edit archive index pages only.
      'editrootidx',	# Regen top index.
***************
*** 106,109 ****
--- 108,117 ----
  				$config->{'MBOX_URL'} ||
  				"$ROOT_URL/mbox";
+   my $INFO_DIR 		= $opt{'infodir'} ||
+ 				$config->{'INFO_DIR'} ||
+ 				"$HOME/info";
+   my $INFO_URL 		= $opt{'infourl'} ||
+ 				$config->{'INFO_URL'} ||
+ 				"$ROOT_URL/info";
    my $MHA_RC   		= $opt{'mharc'} ||
  				$config->{'MHA_RC'} ||
***************
*** 150,153 ****
--- 158,162 ----
    my $editidxonly  	= $opt{'editidxonly'} || 0;
    my $editrootidx 	= $opt{'editrootidx'};
+   my $editallidx 	= $opt{'editallidx'};
    my $nosearch 		= $opt{'nosearch'} ||
  				$ENV{'WA_NOSEARCH'} || 0;
***************
*** 155,158 ****
--- 164,170 ----
  				$ENV{'WA_DEBUG'};
  
+   my $all_index         = $opt{'alllistsindex'} ||
+ 			      $config->{'ALL_LISTS_INDEX'} ||
+ 			      join('/', $HTML_DIR, 'lists.html');
    my $main_header	= $config->{'MAIN_HEADER'} ||
  			      join('/', $HTML_DIR, '.PNM.head');
***************
*** 164,188 ****
      $editidx = 0;
      $editrootidx = 0;
    }
    $editidx = 1  if $editidxonly;
    if ($editidx) {
      $editrootidx = 0;
    }
  
!   if ($debug) {
!     print "HTML_DIR=$HTML_DIR\n",
! 	  "MBOX_DIR=$MBOX_DIR\n",
! 	  "MHA_RC=$MHA_RC\n",
! 	  #"MHA_MAXSIZE=$MHA_MAXSIZE\n",
! 	  #"MHA_PAGESIZE=$MHA_PAGESIZE\n",
! 	  "MKNMZ=$MKNMZ\n",
! 	  "MKNMZRC=$MKNMZRC\n",
! 	  "MKNMZTMPLDIR=$MKNMZTMPLDIR\n",
! 	  "MTIME_AGE=$MTIME_AGE\n";
!     print "rebuild=$rebuild\n",
! 	  "editidx=$editidx\n",
! 	  "editidxonly=$editidxonly\n",
! 	  "nosearch=$nosearch\n",
! 	  "time=$time\n";
    }
  
--- 176,201 ----
      $editidx = 0;
      $editrootidx = 0;
+     $editallidx = 0;
    }
    $editidx = 1  if $editidxonly;
    if ($editidx) {
      $editrootidx = 0;
+     $editallidx = 0;
    }
  
!   my $listdef = MHArc::ListDef->new($LISTS_DEF_FILE);
!   print "Loaded lists definitions.\n"  if $debug;
! 
!   if ($editallidx) {
!     update_archive_index(
!       '-config'   => $config,
!       '-listdef'  => $listdef,
!       '-htmldir'  => $HTML_DIR,
!       '-htmlurl'  => $HTML_URL,
!       '-infodir'  => $INFO_DIR,
!       '-infourl'  => $INFO_URL,
!       '-allindex' => $all_index
!     );
!     last MAIN;
    }
  
***************
*** 190,196 ****
    print "MHonArc initialized.\n"  if $debug;
  
-   my $listdef = MHArc::ListDef->new($LISTS_DEF_FILE);
-   print "Loaded lists definitions.\n"  if $debug;
- 
    local(*DIR, *INDEX, *FILE);
  
--- 203,206 ----
***************
*** 313,318 ****
        );
  
!       if (-e "$MHA_RC_DIR/$listname.mrc") {
! 	push(@mhaargs, '-rcfile', "$MHA_RC_DIR/$listname.mrc");
        }
        if ($cvs) {
--- 323,328 ----
        );
  
!       if (-e "$MHA_RC_DIR/$list.mrc") {
! 	push(@mhaargs, '-rcfile', "$MHA_RC_DIR/$list.mrc");
        }
        if ($cvs) {
***************
*** 447,459 ****
        'LIST-DESC'  => $title,
      );
!     if (-e $main_header) {
!       print "Reading archive home header $main_header\n"  if $debug;
!       if (open(FILE, $main_header)) {
! 	print INDEX read_template(\*FILE, @vars);
! 	close(FILE);
!       } else {
! 	warn qq|Warning: Unable to open $main_header: $!\n|;
!       }
!     }
      print INDEX "<ul>\n";
      foreach $mon (@months) {
--- 457,461 ----
        'LIST-DESC'  => $title,
      );
!     print_template(\*INDEX, $main_header, @vars);
      print INDEX "<ul>\n";
      foreach $mon (@months) {
***************
*** 484,496 ****
      }
      print INDEX "</ul>\n";
!     if (-e $main_footer) {
!       print "Reading archive home footer $main_footer\n"  if $debug;
!       if (open(FILE, $main_footer)) {
! 	print INDEX read_template(\*FILE, @vars);
! 	close(FILE);
!       } else {
! 	warn qq|Warning: Unable to open $main_footer: $!\n|;
!       }
!     }
      close(INDEX);
      if (!rename("$indexhtml.tmp", $indexhtml)) {
--- 486,490 ----
      }
      print INDEX "</ul>\n";
!     print_template(\*INDEX, $main_footer, @vars);
      close(INDEX);
      if (!rename("$indexhtml.tmp", $indexhtml)) {
***************
*** 500,507 ****
--- 494,532 ----
    }
  
+   update_archive_index(
+     '-config'   => $config,
+     '-listdef'  => $listdef,
+     '-htmldir'  => $HTML_DIR,
+     '-htmlurl'  => $HTML_URL,
+     '-infodir'  => $INFO_DIR,
+     '-infourl'  => $INFO_URL,
+     '-allindex' => $all_index
+   );
+ 
  } # End: MAIN
  
  ############################################################################
  
+ sub entify {
+   my $str = shift;
+   $str =~ s/\&/\&amp;/;
+   $str =~ s/</\&lt;/;
+   $str =~ s/>/\&gt;/;
+   $str;
+ }
+ 
+ sub get_periods {
+   my $dir = shift;
+ 
+   local(*DIR);
+   if (!opendir(DIR, $dir)) {
+     warn qq/Warning: Unable to open "$dir": $!/;
+     return ( );
+   }
+   my @months = reverse sort grep { /^$folder_regex$/o } readdir(DIR);
+   closedir(DIR);
+   @months;
+ }
+ 
  sub read_template {
    my $fh	= shift;
***************
*** 532,535 ****
--- 557,575 ----
  }
  
+ sub print_template {
+   my $fhout = shift;
+   my $file = shift;
+   if (-e $file) {
+     print "Reading template file $file\n"  if $debug;
+     local(*FILE);
+     if (open(FILE, $file)) {
+       print $fhout read_template(\*FILE, @_);
+       close(FILE);
+     } else {
+       warn qq/Warning: Unable to open "$file": $!\n/;
+     }
+   }
+ }
+ 
  sub namazu_cleanup {
    my $dir = shift;
***************
*** 550,553 ****
--- 590,761 ----
  }
  
+ sub format_date {
+   my $time = shift;
+   my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($time);
+   $year += 1900;  ++$mon;
+   sprintf("%d-%02d-%02d %02d:%02d:%02d", $year,$mon,$mday,$hour,$min,$sec);
+ }
+ 
+ ##  Retrieve the last time an archive was updated.
+ #   We scan the message pages since their mtime should be set to the
+ #   date of the message.
+ #
+ sub retrieve_last_update {
+   my $archive = shift;
+ 
+   local(*DIR);
+   if (!opendir(DIR, $archive)) {
+     warn qq/Warning: Unable to open "$archive" for reading: $!\n/;
+     return undef;
+   }
+ 
+   my $latest = 0;
+   my $mtime = 0;
+   my $file;
+   foreach $file (readdir(DIR)) {
+     next  unless $file =~ /^msg\d+\.html/;
+     $mtime = (stat(join('/', $archive, $file)))[9];
+     $latest = $mtime  if ($mtime > $latest);
+   }
+   close(DIR);
+ 
+   if ($latest == 0) {
+     # No luck with message pages, so try database file
+     warn qq/Warning: Unable to determine last update from message pages /,
+ 	          qq/for "$archive"\n/;
+     if (-e join('/', $archive, '.mhonarc.db')) {
+       $latest = ((stat(_))[9]);
+     } elsif (-e join('/', $archive, 'mhonarc.db')) {
+       $latest = ((stat(_))[9]);
+     }
+   }
+   if ($latest == 0) {
+     # No luck with data, so use directory mtime
+     $latest = ((stat($archive))[9]);
+   }
+ 
+   $latest;
+ }
+ 
+ ##  Retrieve the list info URL.
+ #
+ sub get_info_url {
+   my %opts = @_;
+   my $pathname = join('/', $opts{'-dir'}, $opts{'-name'}) . '.html';
+   if (! -e $pathname) {
+     return undef;
+   }
+   join('/',  $opts{'-baseurl'}, $opts{'-name'}) . '.html';
+ }
+ 
+ ##  Generats the all-lists index.
+ #
+ sub update_archive_index {
+   print "Generating root archive index...\n"  if $debug;
+ 
+   my %opts	  = @_;
+   my $config      = $opts{'-config'};
+   my $listdef     = $opts{'-listdef'};
+   my $html_dir    = $opts{'-htmldir'};
+   my $html_url    = $opts{'-htmlurl'};
+   my $info_dir    = $opts{'-infodir'};
+   my $info_url    = $opts{'-infourl'};
+   my $index_html  = $opts{'-allindex'};
+ 
+   my $header	  = $opts{'-header'} ||
+ 			      $config->{'ALL_LISTS_HEADER'} ||
+ 			      join('/', $html_dir, '.PNM.all-head');
+   my $footer	  = $opts{'-footer'} ||
+ 			      $config->{'ALL_LISTS_FOOTER'} ||
+ 			      join('/', $html_dir, '.PNM.all-foot');
+ 
+   local(*IDX);
+   my $tmp_index   = $index_html . ".tmp";
+   if (!open(IDX, ">$tmp_index")) {
+     warn qq/Warning: Unable to create "$tmp_index": $!\n/;
+     return;
+   }
+ 
+   my %updated = ( );
+   my($list, $listname, $last_updated, $dir, $latest, $info);
+ 
+   foreach $listname (keys %$listdef) {
+     next  if $listname =~ /^\./;  # skip hidden archives
+ 
+     foreach $list ($listname, "$listname.CVS") {
+       $dir = join('/', $html_dir, $list);
+       next  unless -e $dir;
+ 
+       print "Computing last update for $list...\n"  if $debug;
+       my @months = get_periods($dir);
+       next  unless @months;
+       $latest = $months[0];
+       $last_updated = retrieve_last_update(join('/', $dir, $latest));
+       if (!defined($last_updated)) {
+ 	print "Unable to compute last update for $list.\n"  if $debug;
+ 	next;
+       }
+       $updated{$list} = [ $last_updated, $list, $listname, $dir, $latest ];
+     }
+   }
+ 
+   print_template(\*IDX, $header);
+   print IDX qq|<table class="archiveLists" cellpadding="3" cellspacing="1">\n|,
+ 	    qq|<tr class="listsHeaderRow" valign="baseline" align="left">\n|,
+ 	    qq|<th>Name</th>|,
+ 	    qq|<th>Current&nbsp;Index</th>|,
+ 	    qq|<th>Last&nbsp;Updated</th>|,
+ 	    qq|\n</tr>\n|;
+ 
+   my($time);
+   foreach $list (sort { $updated{$b}->[0] <=> $updated{$a}->[0] }
+ 		      keys(%updated)) {
+     ($time, $list, $listname, $dir, $latest) = @{$updated{$list}};
+ 
+     print "Printing listing for $list\n"  if $debug;
+     $last_updated = format_date($time);
+     $last_updated =~ s/ /\&nbsp;/g;
+     my $short_title = entify($listname);
+     my $description = entify($listdef->{$listname}{'description'}[0] ||
+ 			     $listname);
+     if ($list =~ /\.CVS$/) {
+       $short_title .= "&nbsp;(CVS)";
+       $description .= " (CVS commits)";
+     }
+     $info = get_info_url(
+ 	'-name'    => $listname,
+ 	'-dir'     => $info_dir,
+ 	'-baseurl' => $info_url
+     );
+ 
+     print IDX qq|<tr valign="baseline">\n|;
+ 
+     print IDX qq|<td>&nbsp;<span class="listName">|,
+ 	      qq|<a href="$html_url/$list/">$short_title</a></span>&nbsp;|;
+     print IDX qq|<a class="infoLink" href="$info">[info]</a>&nbsp;|
+ 		  if defined($info);
+     print IDX qq|</td>\n|;
+ 
+ 
+     print IDX qq|<td>|;
+     print IDX qq|&nbsp;<a href="$html_url/$list/$latest/index.html">[Date]</a>&nbsp;|
+ 	if (-e join('/', $dir, $latest, 'index.html'));
+     print IDX qq|&nbsp;<a href="$html_url/$list/$latest/threads.html">[Thread]</a>&nbsp;|
+ 	if (-e join('/', $dir, $latest, 'threads.html'));
+     print IDX qq|</td>\n|;
+ 
+     print IDX qq|<td>&nbsp;<tt>|, $last_updated, qq|</tt>&nbsp;</td>\n|;
+   }
+ 
+   print IDX qq|</table>\n|;
+   print_template(\*IDX, $footer);
+   close(IDX);
+ 
+   if (!rename($tmp_index, $index_html)) {
+     warn qq/Warning: Unable to rename "$tmp_index" to "$index_html": $!\n/;
+   }
+ }
+ 
+ 
  ############################################################################
  __END__
***************
*** 583,590 ****
  =over
  
  =item C<-alllistsurl> I<url>
  
  URL to page containing list of all mailing lists archived.
! If not specified, defaults to value of C<-htmlurl>.
  
  =item C<-editidx>
--- 791,805 ----
  =over
  
+ =item C<-alllistidx> I<pathname>
+ 
+ Pathname of file to generate the all lists index.
+ If not specified, the value of the C<ALL_LISTS_INDEX> variable in
+ C<config.sh> is used, else it defaults to "C<I<-htmldir>/lists.html>".
+ 
  =item C<-alllistsurl> I<url>
  
  URL to page containing list of all mailing lists archived.
! If not specified, the value of the C<ALL_LISTS_URL> variable in
! C<config.sh> is used, else it defaults to C<-htmlurl>.
  
  =item C<-editidx>
***************
*** 619,622 ****
--- 834,854 ----
  If not specified, defaults to C<I<rooturl>/html>.
  
+ =item C<-infodir> I<pathname>
+ 
+ Pathname of directory containing informational pages for each list
+ archive.  Information for a list archive can be provided by creating a
+ file called "C<I<list-name>.html>".  Once created, a link to the file
+ (based on the value of the C<-infourl> option) will be generated in
+ the all-lists index to it.
+ 
+ If this option is not specified, the value of the C<INFO_DIR> variable
+ in C<config.sh> is used, else it defaults to "C<I<-home>/info>".
+ 
+ =item C<-infourl> I<url>
+ 
+ Base URL containing informational pages for each list archive.
+ If not specified, the value of the C<INFO_URL> variable in
+ C<config.sh> is used, else it defaults to "C<I<-rooturl>/info>".
+ 
  =item C<-listsdef> I<pathname>
  
***************
*** 708,711 ****
--- 940,947 ----
  
  =head1 ENVIRONMENT
+ 
+ Environment variable usage is deprecated.
+ 
+ The following environment variables are recognized:
  
  =over

---------------------------------------------------------------------
To sign-off this list, send email to majordomo(_at_)mhonarc(_dot_)org with the
message text UNSUBSCRIBE MHONARC-DEV