summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Bugzilla.pm17
-rw-r--r--Bugzilla/Error.pm18
2 files changed, 30 insertions, 5 deletions
diff --git a/Bugzilla.pm b/Bugzilla.pm
index 1c2a6a4b0..e87639608 100644
--- a/Bugzilla.pm
+++ b/Bugzilla.pm
@@ -111,6 +111,16 @@ sub dbh {
return $_dbh;
}
+my $_batch;
+sub batch {
+ my $class = shift;
+ my $newval = shift;
+ if ($newval) {
+ $_batch = $newval;
+ }
+ return $_batch || 0;
+}
+
sub dbwritesallowed {
my $class = shift;
@@ -282,6 +292,13 @@ Essentially, causes calls to C<Bugzilla->user> to return C<undef>. This has the
effect of logging out a user for the current request only; cookies and
database sessions are left intact.
+=item C<batch>
+
+Set to true, by calling Bugzilla->batch(1), to indicate that Bugzilla is
+being called in a non-interactive manner and errors should be passed to
+die() rather than being sent to a browser and finished with an exit().
+Bugzilla->batch will return the current state of this flag.
+
=item C<dbh>
The current database handle. See L<DBI>.
diff --git a/Bugzilla/Error.pm b/Bugzilla/Error.pm
index 25527f599..00a2675eb 100644
--- a/Bugzilla/Error.pm
+++ b/Bugzilla/Error.pm
@@ -69,12 +69,17 @@ sub _throw_error {
close ERRORLOGFID;
}
- print Bugzilla->cgi->header();
-
my $template = Bugzilla->template;
- $template->process($name, $vars)
- || ThrowTemplateError($template->error());
-
+ if (Bugzilla->batch) {
+ my $message;
+ $template->process($name, $vars, \$message)
+ || ThrowTemplateError($template->error());
+ die("$message");
+ } else {
+ print Bugzilla->cgi->header();
+ $template->process($name, $vars)
+ || ThrowTemplateError($template->error());
+ }
exit;
}
@@ -90,6 +95,9 @@ sub ThrowTemplateError {
my ($template_err) = @_;
my $vars = {};
+ if (Bugzilla->batch) {
+ die("error: template error: $template_err");
+ }
$vars->{'template_error_msg'} = $template_err;
$vars->{'error'} = "template_error";