=item B<--daemon, -D>
Start up the daemon on the configured local port to serve bugs which
-have been previously retried
+have been previously retrieved.
=item B<--search, -S>
Cause the running daemon to show the pkgreport.cgi page corresponding
-to the search by invoking sensible-browser and an appropriate url
+to the search by invoking sensible-browser and an appropriate url.
=item B<--show, -s>
Cause the running daemon to show the bugreport.cgi page corresponding
-to the bug by invoking sensible-browser and an appropriate url
+to the bug by invoking sensible-browser and an appropriate url.
-=item B<--port,-p>
+=item B<--port, -p>
The port that the daemon is running on (or will be running on.)
=item B<--bug-site>
-Hostname for a site which is running a debbugs install
+Hostname for a site which is running a debbugs install.
Defaults to bugs.debian.org
=item B<--bug-mirror>
=item B<--debug, -d>
-Debug verbosity. (Default 0)
+Debug verbosity.
=item B<--help, -h>
=head1 EXAMPLES
+=over
+
+=item Update the local mirror
+
+ local-debbugs --mirror
+
+=item Start up the local-debbugs daemon
+
+ local-debbugs --daemon
+
+=item Search for bugs with severity serious
+
+ local-debbugs --search severity:serious
+
+=back
=cut
use IO::File;
use File::Path;
-
my %options = (debug => 0,
help => 0,
man => 0,
quiet => 0,
detach => 1,
cgi_bin => '/var/lib/debbugs/www/cgi',
- css => '/var/lib/debbugs/www/bugs.css',
+ css => '/var/lib/debbugs/www/css/bugs.css',
bug_site => 'bugs.debian.org',
bug_mirror => 'bugs-mirror.debian.org',
);
if (1 != grep {exists $options{$_}} qw(daemon show search mirror stop)) {
push @USAGE_ERRORS,"You must pass one (and only one) of --daemon --show --search or --mirror";
}
-$options{verbose} = $options{verbose} - $options{quiet};
pod2usage(join("\n",@USAGE_ERRORS)) if @USAGE_ERRORS;
-
# munge in local configuration
local_config(\%options);
not defined $pid) {
print STDERR "Unable to determine if daemon is running: $!\n";
exit 1;
- }
+ }
+ my $conf = IO::File->new($options{mirror_location}.'/debbugs_config_local','w') or
+ die "Unable to open $options{mirror_location}/debbugs_config_local for writing: $!";
+ print {$conf} <<"EOF";
+\$gConfigDir = "$options{mirror_location}";
+\$gSpoolDir = "$options{mirror_location}";
+\$gWebHost = 'localhost:$options{port}';
+\$gPackageSource = '';
+\$gPseudoDescFile = '';
+\$gPseudoMaintFile = '';
+\$gProject = 'Local Debbugs';
+1;
+EOF
+ close $conf;
+ $ENV{DEBBUGS_CONFIG_FILE} = $options{mirror_location}.'/debbugs_config_local';
# ok, now lets daemonize
# XXX make sure that all paths have been turned into absolute
package local_debbugs::server;
use IO::File;
use HTTP::Server::Simple;
- use base qw(HTTP::Server::Simple::CGI);
+ use base qw(HTTP::Server::Simple::CGI HTTP::Server::Simple::CGI::Environment);
+ use Cwd qw(getcwd);
sub net_server {
return 'Net::Server::Fork';
redirect($cgi,$base_uri."/cgi-bin/pkgreport.cgi?pkg=$1");
}
elsif ($path =~ m{^/?cgi(?:-bin)?/((?:(?:bug|pkg)report|version)\.cgi)}) {
- # dispatch to pkgreport.cgi
+ # dispatch to pkgreport.cgi
+ $ENV{DEBBUGS_CONFIG_FILE} = $options{mirror_location}.'/debbugs_config_local';
+ $ENV{PERL5LIB} = "/home/don/projects/debbugs/debbugs";
+
print "HTTP/1.1 200 OK\n";
exec("$options{cgi_bin}/$1") or
die "Unable to execute $options{cgi_bin}/$1";
my $pid = checkpid($options{mirror_location}.'/local-debbugs.pid');
if (not defined $pid or $pid == 0) {
print STDERR "Unable to open pidfile or daemon not running: $!\n";
- print STDERR qq(Mr. T: "I pity da fool who tries to show a bug without a running daemon"\n);
+ print STDERR qq(Mr. T: "I pity da fool who tries to search for bugs without a running daemon"\n);
print STDERR "Hint: try the --daemon option first\n";
exit 1;
}
);
my ($output,$error) = ('','');
my $h = IPC::Run::start(['rsync',@{$param{options}}],
- \undef,\$output,\$error);
+ \undef,$param{log},$param{log});
while ($h->pump) {
- print {$param{log}} $output,$error;
#print {$param{debug}} $error if defined $param{debug};
}
$h->finish();