X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FCarp.pm;h=fbd37e5b45c4d16b750157d4c53182ddd65a6100;hb=08a8d8f1b8a69ea29bcceb9f399214943a34905c;hp=e0a1e92cf00857700568f3c904cad1c1ef4a6b51;hpb=cc414f09f43faf9424895d7f6b470fbe2ef2b0ce;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Carp.pm b/lib/DBIx/Class/Carp.pm index e0a1e92..fbd37e5 100644 --- a/lib/DBIx/Class/Carp.pm +++ b/lib/DBIx/Class/Carp.pm @@ -4,20 +4,9 @@ package # hide from pause use strict; use warnings; -# This is here instead of DBIx::Class because of load-order issues -BEGIN { - # something is tripping up V::M on 5.8.1, leading to segfaults. - # A similar test in n::c itself is disabled on 5.8.1 for the same - # reason. There isn't much motivation to try to find why it happens - *DBIx::Class::_ENV_::BROKEN_NAMESPACE_CLEAN = ($] < 5.008005) - ? sub () { 1 } - : sub () { 0 } - ; -} - +# load Carp early to prevent tickling of the ::Internal stash being +# interpreted as "Carp is already loaded" by some braindead loader use Carp (); -use namespace::clean (); - $Carp::Internal{ (__PACKAGE__) }++; sub __find_caller { @@ -32,7 +21,7 @@ sub __find_caller { my $fr_num = 1; # skip us and the calling carp* my (@f, $origin); - while (@f = caller($fr_num++)) { + while (@f = CORE::caller($fr_num++)) { next if ( $f[3] eq '(eval)' or $f[3] =~ /::__ANON__$/ ); @@ -44,9 +33,9 @@ sub __find_caller { and ############################# # Need a way to parameterize this for Carp::Skip - $1 !~ /^(?: DBIx::Class::Storage::BlockRunner | Context::Preserve | Try::Tiny | Class::Accessor::Grouped | Class::C3::Componentised | Module::Runtime )$/x + $1 !~ /^(?: DBIx::Class::Storage::BlockRunner | Context::Preserve | Try::Tiny | Class::Accessor::Grouped | Class::C3::Componentised | Module::Runtime | Sub::Uplevel )$/x and - $2 !~ /^(?: throw_exception | carp | carp_unique | carp_once | dbh_do | txn_do | with_deferred_fk_checks)$/x + $2 !~ /^(?: throw_exception | carp | carp_unique | carp_once | dbh_do | txn_do | with_deferred_fk_checks | __delicate_rollback | dbic_internal_try )$/x ############################# ) ? $f[3] : undef; @@ -65,11 +54,15 @@ sub __find_caller { ? "at $f[1] line $f[2]" : Carp::longmess() ; - $origin ||= '{UNKNOWN}'; return ( $site, - $origin =~ /::/ ? "$origin(): " : "$origin: ", # cargo-cult from Carp::Clan + ( + # cargo-cult from Carp::Clan + ! defined $origin ? '' + : $origin =~ /::/ ? "$origin(): " + : "$origin: " + ), ); }; @@ -130,13 +123,6 @@ sub import { $msg, ); }; - - # cleanup after ourselves - namespace::clean->import(-cleanee => $into, qw/carp carp_once carp_unique/) - ## FIXME FIXME FIXME - something is tripping up V::M on 5.8.1, leading - # to segfaults. When n::c/B::H::EndOfScope is rewritten in terms of tie() - # see if this starts working - unless DBIx::Class::_ENV_::BROKEN_NAMESPACE_CLEAN; } sub unimport { @@ -145,6 +131,8 @@ sub unimport { 1; +__END__ + =head1 NAME DBIx::Class::Carp - Provides advanced Carp::Clan-like warning functions for DBIx::Class internals @@ -197,4 +185,15 @@ same ruleset as L). Like L but warns only once for the life of the perl interpreter (regardless of callsite). +=head1 FURTHER QUESTIONS? + +Check the list of L. + +=head1 COPYRIGHT AND LICENSE + +This module is free software L +by the L. You can +redistribute it and/or modify it under the same terms as the +L. + =cut