]> git.donarmstrong.com Git - debbugs.git/blobdiff - debian/debbugsconfig
Fix breakage caused by cdn.libravatar.org not setting Content-Type
[debbugs.git] / debian / debbugsconfig
index f65ee1044387f61f6708066b6293e15206e9ee3b..e98decc7255d402110ff6e19daa4af8bc302a57f 100755 (executable)
 #!/usr/bin/perl
+# debbugsconfig: copies debbugs configuration files from templates, and
+#                creates documentation in HTML and text
+# Copyright (C) 1999 Darren Benham
+# Copyright (C) 2000 Josip Rodin
+# Licensed under the version 2 of the GNU General Public License as
+# published by the Free Software Foundation
 
-@file_flag = stat( '/etc/debbugs/config');
-if ( !@file_flag ) 
-{
-       system( '/bin/cp', '/usr/doc/debbugs/examples/config', '/etc/debbugs/config' );
-       print( "copying config file" );
-} else { print( "skipping config file" ); }
-
-@file_flag = stat( '/etc/debbugs/text');
-if ( !@file_flag ) 
-{
-       system( '/bin/cp', '/usr/doc/debbugs/examples/text', '/etc/debbugs/text' );
-       print( "copying text file" );
-} else { print( "skipping text file" ); }
-
-@file_flag = stat( '/var/lib/debbugs/spool/nextnumber');
-if ( !@file_flag ) 
-{
-       system( '/bin/cp', '/usr/doc/debbugs/examples/nextnumber', '/var/lib/debbugs/spool/nextnumber' );
-       print( "copying next file" );
-} else { print( "skipping next file" ); }
-
-require('/etc/debbugs/config');
-require('/etc/debbugs/text');
-
-chop($dtime=`date -u '+%H:%M:%S GMT %a %d %h'`);
+use POSIX qw(strftime);
+use File::Path;
+
+if (@ARGV) {
+  print STDOUT <<EOF;
+Usage: $0
+
+debbugsconfig will copy basic debbugs configuration files from templates
+if they don't exist.
+
+It will also create BTS user documentation in HTML and text.
+
+EOF
+  exit(0);
+}
+
+$gConfigDir = "/etc/debbugs" if (!defined($gConfigDir));
+&template("config", $gConfigDir);
+require "$gConfigDir/config";
+unshift @INC, $gConfigDir;
+
+&template("text", $gConfigDir);
+require "text";
+
+&template("Maintainers", $gConfigDir);
+&template("Maintainers.override", $gConfigDir);
+&template("pseudo-packages.description", $gConfigDir);
+&template("sources", "$gConfigDir/indices");
+
+&template("nextnumber", $gSpoolDir);
+&touch("$gSpoolDir/index.archive.realtime");
+&touch("$gSpoolDir/index.db.realtime");
+print "Creating directories in $gSpoolDir:\n";
+for my $num (0 .. 99) {
+  &spooldirectory(sprintf('archive/%02d', $num));
+  &spooldirectory(sprintf('db-h/%02d', $num));
+}
+print "\n";
+
+# stuff used when testing (comment out the above)
+#unshift @INC, "../";
+#require "../scripts/config.in";
+#require "../scripts/text.in";
+#$gWebDir = "gWebDir";
+#$gDocDir = "gWebDir";
+
+my $dtime = strftime "%a, %e %b %Y %T UTC", localtime;
 $gHTMLTail =~ s/SUBSTITUTE_DTIME/$dtime/;
 
-require('/etc/debbugs/html/Access.html');
-require('/etc/debbugs/html/Developer.html');
-require('/etc/debbugs/html/Reporting.html');
-require('/etc/debbugs/html/index.html');
-require('/etc/debbugs/html/server-control.html');
-require('/etc/debbugs/html/server-refcard.html');
-require('/etc/debbugs/html/server-request.html');
-
-&file( 'Access.html', 'bug-log-access.txt', $gAccessHtml );
-&file( 'Developer.html', 'bug-maint-info.txt', $gDeveloperHtml );
-&file( 'Reporting.html', 'bug-reporting.txt', $gReportingHtml );
-&file( 'index.html', '', $gIndexHtml );
-&file( 'server-control.html', 'bug-maint-mailcontrol.txt', $gControlHtml );
-&file( 'server-refcard.html', 'bug-mailserver-refcard.txt', $gRefcardHtml );
-&file( 'server-request.html', 'bug-log-mailserver.txt', $gRequestHtml );
-
-exec( '/usr/sbin/debbugs-maketxt' );
-quit(0);
-
-sub file {
-    local ($name,$txtname,$file)= @_;
-    unlink( "$gWebDir/$name" );
-    if( open( ORIG, ">$gWebDir/$name" ) ) {
-       print ORIG $file;
-               close( ORIG );
-               print "wrote $gWebDir/$name\n";
-    } else {
-       print "unable to write $gWebDir/$name\n";
-    }
+print "Creating files in $gWebDir:\n";
+require('html/index.html.in');
+&writefiles ('index', '', $gIndexHtml );
+require('html/Access.html.in');
+&writefiles ('Access', 'bug-log-access', $gAccessHtml );
+require('html/Developer.html.in');
+&writefiles ('Developer', 'bug-maint-info', $gDeveloperHtml );
+require('html/Reporting.html.in');
+&writefiles ('Reporting', 'bug-reporting', $gReportingHtml );
+require('html/server-control.html.in');
+&writefiles ('server-control', 'bug-maint-mailcontrol', $gControlHtml );
+require('html/server-refcard.html.in');
+&writefiles ('server-refcard', 'bug-mailserver-refcard', $gRefcardHtml );
+require('html/server-request.html.in');
+&writefiles ('server-request', 'bug-log-mailserver', $gRequestHtml );
+print "\n";
+
+exit(0);
+
+# -------------------------------------------------------------------------- #
+
+sub template {
+  my ($name, $destdir) = @_;
+  if (! -f "$destdir/$name") {
+  system("cp /usr/share/doc/debbugs/examples/$name $destdir/$name") == 0 ||
+       die "$!";
+  print "created $destdir/$name from template.\n";
+  }
+} 
+
+sub touch {
+  my $name = shift;
+  unless (-f $name) {
+    open TOUCH, ">> $name" or die "open $name: $!";
+    close TOUCH;
+    print "created empty $name.\n";
+  }
+}
+
+sub spooldirectory {
+  my $name = shift;
+  unless (-d "$gSpoolDir/$name") {
+    mkpath("$gSpoolDir/$name");
+    print "$name ";
+  }
+}
+
+sub writefiles {
+  local ($html, $text, $name) = @_;
+# first HTML
+  unlink("$gWebDir/$html.html");
+  open(DEST, ">$gWebDir/$html.html") || die "\n$gWebDir/$html.html: $!";
+  print DEST $name;
+  close(DEST);
+  print "$html.html ";
+# now text
+  return if ($text eq ""); # for index.html
+# This should be done with pipes instead of a temporary files, but lynx
+# doesn't read HTML from stdin :/
+  open(DEST, ">$gDocDir/$text.html") || die "\n$gDocDir/$text.html: $!";
+  $name =~ s,\nOther pages:\n.*?<hr>,,si;
+  print DEST $name;
+  close(DEST);
+  unlink("$gDocDir/$text.txt");
+  $ENV{'HOME'} = "/tmp";
+  $ENV{'TERM'} = "linux";
+  if (-x "/usr/bin/links") {
+    system ("rm -rf /tmp/.links/") == 0 || die;
+    system ("links -dump $gDocDir/$text.html > $gDocDir/$text.txt") == 0 ||
+      die "\nunable to write $gDocDir/$text.txt\n";
+    system ("rm -rf /tmp/.links/");
+  } elsif (-x "/usr/bin/lynx") {
+    system ("lynx -nolist -dump -cfg=/dev/null $gDocDir/$text.html > $gDocDir/$text.txt") == 0 ||
+      die "\nunable to write $gDocDir/$text.txt\n";
+  } else {
+    print "unable to write text versions of the HTMLs!";
+    print "if you need them, install links or lynx and run debbugsconfig again";
+    return;
+  }
+  unlink("$gDocDir/$text.html") || die "\ncan't remove temporary file $gDocDir/$text.html: $!";
+  print "$text.txt ";
 }