---
name: "SVN::Web::X"
section: "3pm"
platform: "linux"
package: "libsvn-web-perl"
version: "0.63-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/SVN::Web::X"
---

# SVN::Web::X(3pm)

exceptions for SVN::Web

## 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 in `"error"`, 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.

## COPYRIGHT

Copyright 2003-2004 by Chia-liang Kao `"<clkao@clkao.org>"`.

Copyright 2005-2007 by Nik Clayton `"<nik@FreeBSD.org>"`.

Copyright 2012 by Dean Hamstead `"<dean@fragfest.com.au>"`.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

See \<http://www.perl.com/perl/misc/Artistic.html\>
