X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FException.pm;h=3c2aa9b0d3d60dfd6885832a106a109f3cbdf05f;hb=9ab122aac9e6a0a75d12db0cd7c13ca52c59869b;hp=6c8d0e9a69e599a01a9664c11a0fc593aa7c010b;hpb=c6d30d5e0e80fb465dc71e0f20de176f35b4261f;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Exception.pm b/lib/DBIx/Class/Exception.pm index 6c8d0e9..3c2aa9b 100644 --- a/lib/DBIx/Class/Exception.pm +++ b/lib/DBIx/Class/Exception.pm @@ -3,9 +3,7 @@ package DBIx::Class::Exception; use strict; use warnings; -use Carp::Clan qw/^DBIx::Class|^Try::Tiny/; -use Try::Tiny; -use namespace::clean; +use DBIx::Class::Carp (); use overload '""' => sub { shift->{msg} }, @@ -19,8 +17,7 @@ DBIx::Class::Exception - Exception objects for DBIx::Class Exception objects of this class are used internally by the default error handling of L -to prevent confusing and/or redundant re-application of L's -stack trace information. +and derivatives. These objects stringify to the contained error message, and use overload fallback to give natural boolean/numeric values. @@ -39,8 +36,7 @@ This is meant for internal use by L's C code, and shouldn't be used directly elsewhere. Expects a scalar exception message. The optional argument -C<$stacktrace> tells it to use L instead of -L. +C<$stacktrace> tells it to output a full trace similar to L. DBIx::Class::Exception->throw('Foo'); try { ... } catch { DBIx::Class::Exception->throw(shift) } @@ -53,9 +49,18 @@ sub throw { # Don't re-encapsulate exception objects of any kind die $msg if ref($msg); - # use Carp::Clan's croak if we're not stack tracing + # all exceptions include a caller + $msg =~ s/\n$//; + if(!$stacktrace) { - try { croak $msg } catch { $msg = shift }; + # skip all frames that match the original caller, or any of + # the dbic-wide classdata patterns + my ($ln, $calling) = DBIx::Class::Carp::__find_caller( + '^' . caller() . '$', + 'DBIx::Class', + ); + + $msg = "${calling}${msg} ${ln}\n"; } else { $msg = Carp::longmess($msg);