NAME
SVN::Web::X - exceptions for SVN::Web
SYNOPSIS
use SVN::Web::X;
...
SVN::Web::X->throw(error => '(error message %1)',
vars => [$var_to_interpolate]);
DESCRIPTION
SVN::Web::X implements exceptions for SVN::Web. Derived from Exception::Class, It provides a simple mechanism for throwing exceptions, catching them, and ensuring that friendly, localised error messages are generated and sent to the user's browser.
USAGE IN SVN::Web ACTIONS
If an SVN::Web action that you are writing needs to stop processing and raise an error, throw an SVN::Web::X exception.
throw()
takes a hash with two mandatory keys.
error
-
A string describing the error. This string should be short, and key to a longer internationalised message.
This string may contain placeholders; %1, %2, %3, and so on. These will be replaced by the values of the variables passed in the
vars
key.By convention this string should be enclosed in parentheses,
(
and)
. This helps make them stand out in the interface, if localised versions of the error message have not yet been written. vars
-
An array reference. The first entry in the array will replace the
%1
placeholder inerror
, the second entry will replace the%2
placeholder, and so on.If there are no placeholders then pass a reference to an empty array.
EXAMPLES
A simple exception, with no placeholders.
In the action:
sub run {
...
if(! frob_repo()) {
SVN::Web::X->throw(error => '(frob failed)',
vars => []);
}
...
}
In the en.po file for the localised text.
msgid "(frob failed)"
msgstr "There was a problem trying to frob the repository. This "
"probably indicates a permissions problem."
An exception with placeholders
In the action:
sub run {
...
# $path is a repo path, $rev is a repo revision
my $root = $fs->revision_root($rev);
my $kind = $root->check_path($path);
if($kind == $SVN::Node::none) {
SVN::Web::X->throw(error => '(path %1 does not exist in rev %2)',
vars => [$path, $rev]);
}
}
In the en.po file for the localised text.
msgid "(path %1 does not exist in rev %2)"
msgstr "The path <tt>%1</tt> could not be found in the repository "
"at revision %2. This may be a typo in the path or the revision "
"number. SVN::Web should never normally generate a link like this. "
"If you followed a link from SVN::Web (rather than from an e-mail,
"or similar) please report this as a bug."
As you can see, the localised text can be much friendlier and more informative to the user than the error message.