]> git.donarmstrong.com Git - debbugs.git/blobdiff - Debbugs/Config.pm
* Start documenting the global names of variables in Debbugs::Config
[debbugs.git] / Debbugs / Config.pm
index 9451ce231b0f98562b2e20ce96a6e5cd45f54347..879db01ada97c1f9f22e30a610d9026253795ef2 100644 (file)
@@ -48,12 +48,16 @@ BEGIN {
                                 qw($gShowSeverities $gBounceFroms $gConfigDir $gSpoolDir),
                                 qw($gIncomingDir $gWebDir $gDocDir $gMaintainerFile),
                                 qw($gMaintainerFileOverride $gPseudoDescFile $gPackageSource),
+                                qw($gVersionPackagesDir $gVersionIndex $gBinarySourceMap $gSourceBinaryMap),
                                 qw(%gSeverityDisplay @gTags @gSeverityList @gStrongSeverities),
+                                qw(%gSearchEstraier),
                                ],
+                    text     => [qw($gBadEmailPrefix $gHTMLTail $gHTMLExpireNote),
+                                ],
                     config   => [qw(%config)],
                    );
      @EXPORT_OK = ();
-     Exporter::export_ok_tags(qw(globals config));
+     Exporter::export_ok_tags(qw(globals text config));
      $EXPORT_TAGS{all} = [@EXPORT_OK];
 }
 
@@ -73,7 +77,7 @@ use Safe;
 %config = ();
 read_config(exists $ENV{DEBBUGS_CONFIG_FILE}?$ENV{DEBBUGS_CONFIG_FILE}:'/etc/debbugs/config');
 
-=item email_domain
+=item email_domain $gEmailDomain
 
 The email domain of the bts
 
@@ -81,7 +85,7 @@ The email domain of the bts
 
 set_default(\%config,'email_domain','bugs.something');
 
-=item list_domain
+=item list_domain $gListDomain
 
 The list domain of the bts, defaults to the email domain
 
@@ -89,7 +93,7 @@ The list domain of the bts, defaults to the email domain
 
 set_default(\%config,'list_domain',$config{email_domain});
 
-=item web_host
+=item web_host $gWebHost
 
 The web host of the bts; defaults to the email domain
 
@@ -97,7 +101,7 @@ The web host of the bts; defaults to the email domain
 
 set_default(\%config,'web_host',$config{email_domain});
 
-=item web_host_bug_dir
+=item web_host_bug_dir $gWebHostDir
 
 The directory of the web host on which bugs are kept, defaults to C<''>
 
@@ -105,7 +109,7 @@ The directory of the web host on which bugs are kept, defaults to C<''>
 
 set_default(\%config,'web_host_bug_dir','');
 
-=item web_domain
+=item web_domain $gWebDomain
 
 Full path of the web domain where bugs are kept, defaults to the
 concatenation of L</web_host> and L</web_host_bug_dir>
@@ -114,7 +118,7 @@ concatenation of L</web_host> and L</web_host_bug_dir>
 
 set_default(\%config,'web_domain',$config{web_host}.'/'.$config{web_host_bug_dir});
 
-=item html_suffix
+=item html_suffix $gHTMLSuffix
 
 Suffix of html pages, defaults to .html
 
@@ -122,7 +126,7 @@ Suffix of html pages, defaults to .html
 
 set_default(\%config,'html_suffix','.html');
 
-=item cgi_domain
+=item cgi_domain $gCGIDomain
 
 Full path of the web domain where cgi scripts are kept. Defaults to
 the concatentation of L</web_host> and cgi.
@@ -131,7 +135,7 @@ the concatentation of L</web_host> and cgi.
 
 set_default(\%config,'cgi_domain',$config{web_domain}.($config{web_domain}=~m{/$}?'':'/').'cgi');
 
-=item mirrors
+=item mirrors @gMirrors
 
 List of mirrors [What these mirrors are used for, no one knows.]
 
@@ -140,7 +144,7 @@ List of mirrors [What these mirrors are used for, no one knows.]
 
 set_default(\%config,'mirrors',[]);
 
-=item package_pages
+=item package_pages  $gPackagePages
 
 Domain where the package pages are kept; links should work in a
 package_pages/foopackage manner. Defaults to undef, which means that
@@ -151,7 +155,7 @@ package links will not be made.
 
 set_default(\%config,'package_pages',undef);
 
-=item subscription_domain
+=item subscription_domain $gSubscriptionDomain
 
 Domain where subscriptions to package lists happen
 
@@ -169,34 +173,42 @@ set_default(\%config,'subscription_domain',undef);
 
 =over
 
-=item project
+=item project $gProject
 
 Name of the project
 
+Default: 'Something'
+
 =cut
 
 set_default(\%config,'project','Something');
 
-=item project_title
+=item project_title $gProjectTitle
 
 Name of this install of Debbugs, defaults to "L</project> Debbugs Install"
 
+Default: "$config{project} Debbugs Install"
+
 =cut
 
 set_default(\%config,'project_title',"$config{project} Debbugs Install");
 
-=item maintainer
+=item maintainer $gMaintainer
 
 Name of the maintainer of this debbugs install
 
+Default: 'Local DebBugs Owner's
+
 =cut
 
 set_default(\%config,'maintainer','Local DebBugs Owner');
 
-=item maintainer_webpage
+=item maintainer_webpage $gMaintainerWebpage
 
 Webpage of the maintainer of this install of debbugs
 
+Default: "$config{web_domain}/~owner"
+
 =cut
 
 set_default(\%config,'maintainer_webpage',"$config{web_domain}/~owner");
@@ -205,6 +217,8 @@ set_default(\%config,'maintainer_webpage',"$config{web_domain}/~owner");
 
 Email address of the maintainer of this Debbugs install
 
+Default: 'root@'.$config{email_domain}
+
 =cut
 
 set_default(\%config,'maintainer_email','root@'.$config{email_domain});
@@ -213,6 +227,10 @@ set_default(\%config,'maintainer_email','root@'.$config{email_domain});
 
 Email address where packages with an unknown maintainer will be sent
 
+Default: $config{maintainer_email}
+
+=back
+
 =cut
 
 set_default(\%config,'unknown_maintainer_email',$config{maintainer_email});
@@ -257,15 +275,68 @@ set_default(\%config,   'mirror_list',   'bug-mirror-list');
 
 =head2 Misc Options
 
+=over
+
 =cut
 
 set_default(\%config,'mailer','exim');
 set_default(\%config,'bug','bug');
 set_default(\%config,'bugs','bugs');
+
+=item remove_age
+
+Age at which bugs are archived/removed
+
+Default: 28
+
+=cut
+
 set_default(\%config,'remove_age',28);
 
+=item save_old_bugs
+
+Whether old bugs are saved or deleted
+
+Default: 1
+
+=cut
+
 set_default(\%config,'save_old_bugs',1);
 
+=item distributions
+
+List of valid distributions
+
+Default: qw(experimental unstable testing stable oldstable);
+
+=cut
+
+set_default(\%config,'distributions',[qw(experimental unstable testing stable oldstable)]);
+
+=item removal_distribution_tags
+
+Tags which specifiy distributions to check
+
+Default: @{$config{distributions}}
+
+=cut
+
+set_default(\%config,'removal_distribution_tags',
+           [@{$config{distributions}}]);
+
+=item removal_default_distribution_tags
+
+For removal/archival purposes, all bugs are assumed to have these tags
+set.
+
+Default: qw(unstable testing);
+
+=cut
+
+set_default(\%config,'removal_default_distribution_tags',
+           [qw(unstable testing)]
+          );
+
 set_default(\%config,'default_severity','normal');
 set_default(\%config,'show_severities','critical, grave, normal, minor, wishlist');
 set_default(\%config,'strong_severities',[qw(critical grave)]);
@@ -276,7 +347,9 @@ set_default(\%config,'severity_display',{critical => "Critical $config{bugs}",
                                         wishlist => "Wishlist $config{bugs}",
                                        });
 
-set_default(\%config,'tags',[qw(patch wontfix moreinfo unreproducible fixed stable)]);
+set_default(\%config,'tags',[qw(patch wontfix moreinfo unreproducible fixed),
+                            @{$config{distributions}}
+                           ]);
 
 set_default(\%config,'bounce_froms','^mailer|^da?emon|^post.*mast|^root|^wpuser|^mmdf|^smt.*|'.
            '^mrgate|^vmmail|^mail.*system|^uucp|-maiser-|^mal\@|'.
@@ -293,6 +366,67 @@ set_default(\%config,'maintainer_file_override',$config{config_dir}.'/Maintainer
 set_default(\%config,'pseduo_desc_file',$config{config_dir}.'/pseudo-packages.description');
 set_default(\%config,'package_source',$config{config_dir}.'/indices/sources');
 
+set_default(\%config,'version_packages_dir',$config{spool_dir}.'/../versions/pkg');
+
+=back
+
+
+=head2 Text Fields
+
+The following are the only text fields in general use in the scripts;
+a few additional text fields are defined in text.in, but are only used
+in db2html and a few other specialty scripts.
+
+Earlier versions of debbugs defined these values in /etc/debbugs/text,
+but now they are required to be in the configuration file. [Eventually
+the longer ones will move out into a fully fledged template system.]
+
+=cut
+
+=over
+
+=item bad_email_prefix
+
+This prefixes the text of all lines in a bad e-mail message ack.
+
+=cut
+
+set_default(\%config,'bad_email_prefix','');
+
+=item html_tail
+
+This shows up at the end of (most) html pages
+
+=cut
+
+set_default(\%config,'html_tail',<<END);
+ <ADDRESS>$config{maintainer} &lt;<A HREF=\"mailto:$config{maintainer_email}\">$config{maintainer_email}</A>&gt;.
+ Last modified:
+ <!--timestamp-->
+ SUBSTITUTE_DTIME
+ <!--timestamp-->
+ <P>
+ <A HREF=\"http://$config{web_domain}/\">Debian $config{bug} tracking system</A><BR>
+ Copyright (C) 1999 Darren O. Benham,
+ 1997,2003 nCipher Corporation Ltd,
+ 1994-97 Ian Jackson.
+ </ADDRESS>
+END
+
+
+=item html_expire_note
+
+This message explains what happens to archive/remove-able bugs
+
+=cut
+
+set_default(\%config,'html_expire_note',
+           "(Closed $config{bugs} are archived $config{remove_age} days after the last related message is received.)");
+
+=back
+
+=cut
+
 
 sub read_config{
      my ($conf_file) = @_;
@@ -317,7 +451,7 @@ sub read_config{
           # so fucked up crap in the config file doesn't sink us.
          my $cpt = new Safe or die "Unable to create safe compartment";
          # perldoc Opcode; for details
-         $cpt->permit('require');
+         $cpt->permit('require',':filesys_read','entereval','caller','pack','unpack','dofile');
          $cpt->reval(q($gMaintainerFile = 'FOOOO'));
          $cpt->reval(qq(require '$conf_file';));
          die "Error in configuration file: $@" if $@;
@@ -354,6 +488,7 @@ sub __convert_name{
      $hash_name =~ s/^([\$\%\@])g//;
      my $glob_type = $1;
      my $glob_name = 'g'.$hash_name;
+     $hash_name =~ s/(HTML|CGI)/ucfirst(lc($1))/ge;
      $hash_name =~ s/^([A-Z]+)/lc($1)/e;
      $hash_name =~ s/([A-Z]+)/'_'.lc($1)/ge;
      return $hash_name unless wantarray;
@@ -368,20 +503,26 @@ sub __convert_name{
 
 sub set_default{
      my ($config,$option,$value) = @_;
+     my $varname;
+     if ($USING_GLOBALS) {
+         # fix up the variable name
+         $varname = 'g'.join('',map {ucfirst $_} split /_/, $option);
+         # Fix stupid HTML names
+         $varname =~ s/(Html|Cgi)/uc($1)/ge;
+     }
      # update the configuration value
      if (not $USING_GLOBALS and not exists $config{$option}) {
          $config{$option} = $value;
      }
-     else {
+     elsif ($USING_GLOBALS) {{
+         no strict 'refs';
          # Need to check if a value has already been set in a global
-     }
+         if (defined *{"Debbugs::Config::${varname}"}) {
+              $config{$option} = *{"Debbugs::Config::${varname}"};
+         }
+     }}
      if ($USING_GLOBALS) {{
-         # fix up the variable name
-         my $varname = 'g'.join('',map {ucfirst $_} $option);
-         # Fix stupid HTML names
-         $varname =~ s/Html/HTML/;
          no strict 'refs';
-         my $ref = ref $config{$option} || 'SCALAR';
          *{"Debbugs::Config::${varname}"} = $config{$option};
      }}
 }
@@ -389,13 +530,14 @@ sub set_default{
 
 ### import magick
 
-# All we care about here is whether we've been called with the globals option;
-# if so, then we need to export some symbols back up; otherwise we call exporter.
+# All we care about here is whether we've been called with the globals or text option;
+# if so, then we need to export some symbols back up.
+# In any event, we call exporter.
 
 sub import {
-     if (grep $_ eq ':globals', @_) {
+     if (grep /^:(?:text|globals)$/, @_) {
          $USING_GLOBALS=1;
-         for my $variable (@{$EXPORT_TAGS{globals}}) {
+         for my $variable (map {@$_} @EXPORT_TAGS{map{(/^:(text|globals)$/?($1):())} @_}) {
               my $tmp = $variable;
               no strict 'refs';
               # Yes, I don't care if these are only used once