Consolidate all constants under DBIC::_ENV_, bump n::c breakage to < 5.8.5
Peter Rabbitson [Mon, 4 Apr 2011 08:13:34 +0000 (10:13 +0200)]
lib/DBIx/Class.pm
lib/DBIx/Class/Carp.pm
t/52leaks.t
t/55namespaces_cleaned.t
t/71mysql.t
t/lib/DBICTest.pm
t/lib/DBICTest/RunMode.pm
t/storage/error.t

index e5d9d85..c7d6c9d 100644 (file)
@@ -4,20 +4,43 @@ use strict;
 use warnings;
 
 BEGIN {
+  package DBIx::Class::_ENV_;
+
   if ($] < 5.009_005) {
     require MRO::Compat;
-    *DBIx::Class::_ENV_::OLD_MRO = sub () { 1 };
+    *OLD_MRO = sub () { 1 };
   }
   else {
     require mro;
-    *DBIx::Class::_ENV_::OLD_MRO = sub () { 0 };
+    *OLD_MRO = sub () { 0 };
   }
 
   # ::Runmode would only be loaded by DBICTest, which in turn implies t/
-  *DBIx::Class::_ENV_::DBICTEST = eval { DBICTest::RunMode->is_author }
+  *DBICTEST = eval { DBICTest::RunMode->is_author }
     ? sub () { 1 }
     : sub () { 0 }
   ;
+
+  # During 5.13 dev cycle HELEMs started to leak on copy
+  *PEEPEENESS = (defined $ENV{DBICTEST_ALL_LEAKS}
+    # request for all tests would force "non-leaky" illusion and vice-versa
+    ? ! $ENV{DBICTEST_ALL_LEAKS}
+
+    # otherwise confess that this perl is busted ONLY on smokers
+    : do {
+      if (eval { DBICTest::RunMode->is_smoker }) {
+
+        # leaky 5.13.6 (fixed in blead/cefd5c7c)
+        if ($] == '5.013006') { 1 }
+
+        # not sure why this one leaks, but disable anyway - ANDK seems to make it weep
+        elsif ($] == '5.013005') { 1 }
+
+        else { 0 }
+      }
+      else { 0 }
+    }
+  ) ? sub () { 1 } : sub () { 0 };
 }
 
 use mro 'c3';
index 62170ff..5f40094 100644 (file)
@@ -3,6 +3,17 @@ package DBIx::Class::Carp;
 use strict;
 use warnings;
 
+# This is here instead of DBIx::Class because of load-order issues
+BEGIN {
+  ## 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
+  *DBIx::Class::_ENV_::BROKEN_NAMESPACE_CLEAN = ($] < 5.008005)
+    ? sub () { 1 }
+    : sub () { 0 }
+  ;
+}
+
 use Carp ();
 use namespace::clean ();
 
@@ -44,13 +55,6 @@ my $warn = sub {
   );
 };
 
-# FIXME - see below
-BEGIN {
-  *__BROKEN_NC = ($] < 5.008003)
-    ? sub () { 1 }
-    : sub () { 0 }
-  ;
-}
 sub import {
   my (undef, $skip_pattern) = @_;
   my $into = caller;
@@ -102,7 +106,7 @@ sub import {
     ## 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 __BROKEN_NC();
+    unless DBIx::Class::_ENV_::BROKEN_NAMESPACE_CLEAN();
 }
 
 sub unimport {
index f2d23c8..6707b83 100644 (file)
@@ -35,9 +35,10 @@ if ($ENV{DBICTEST_IN_PERSISTENT_ENV}) {
 
 use lib qw(t/lib);
 use DBICTest::RunMode;
+use DBIx::Class;
 BEGIN {
   plan skip_all => "Your perl version $] appears to leak like a sieve - skipping test"
-    if DBICTest::RunMode->peepeeness;
+    if DBIx::Class::_ENV_::PEEPEENESS();
 }
 
 use Scalar::Util qw/refaddr reftype weaken/;
index 17f8750..6a3cc02 100644 (file)
@@ -40,9 +40,6 @@ my $skip_idx = { map { $_ => 1 } (
   # G::L::D is unclean, but we never inherit from it
   'DBIx::Class::Admin::Descriptive',
   'DBIx::Class::Admin::Usage',
-
-  # exempt due to the __BROKEN_NC constant
-  'DBIx::Class::Carp',
 ) };
 
 my $has_cmop = eval { require Class::MOP };
@@ -73,7 +70,7 @@ for my $mod (@modules) {
 
     for my $name (keys %all_method_like) {
 
-      next if ( DBIx::Class::Carp::__BROKEN_NC() and $name =~ /^carp(?:_unique|_once)?$/ );
+      next if ( DBIx::Class::_ENV_::BROKEN_NAMESPACE_CLEAN() and $name =~ /^carp(?:_unique|_once)?$/ );
 
       # overload is a funky thing - it is neither cleaned, and its imports are named funny
       next if $name =~ /^\(/;
@@ -114,7 +111,7 @@ for my $mod (@modules) {
       }
     }
 
-    next if DBIx::Class::Carp::__BROKEN_NC();
+    next if DBIx::Class::_ENV_::BROKEN_NAMESPACE_CLEAN();
 
     # some common import names (these should never ever be methods)
     for my $f (qw/carp carp_once carp_unique croak confess cluck try catch finally/) {
index 84bebc7..d732e1f 100644 (file)
@@ -384,7 +384,13 @@ ZEROINSEARCH: {
 
     # kill our $dbh
     $schema_autorecon->storage->_dbh(undef);
-    ok (! defined $orig_dbh, 'Parent $dbh handle is gone');
+
+    TODO: {
+      local $TODO = "Perl $] is known to leak like a sieve"
+        if DBIx::Class::_ENV_::PEEPEENESS();
+
+      ok (! defined $orig_dbh, 'Parent $dbh handle is gone');
+    }
   }
   else {
     # wait for parent to kill its $dbh
@@ -400,7 +406,13 @@ ZEROINSEARCH: {
     # try to do something dbic-esque
     $rs->create({ name => "Hardcore Forker $$" });
 
-    ok (! defined $orig_dbh, 'DBIC operation triggered reconnect - old $dbh is gone');
+
+    TODO: {
+      local $TODO = "Perl $] is known to leak like a sieve"
+        if DBIx::Class::_ENV_::PEEPEENESS();
+
+      ok (! defined $orig_dbh, 'DBIC operation triggered reconnect - old $dbh is gone');
+    }
 
     exit 0;
   }
index 46e0918..e67c02a 100644 (file)
@@ -112,7 +112,7 @@ sub _database {
 }
 
 sub __mk_disconnect_guard {
-  return if DBICTest::RunMode->peepeeness; # leaks handles, delaying DESTROY, can't work right
+  return if DBIx::Class::_ENV_::PEEPEENESS(); # leaks handles, delaying DESTROY, can't work right
 
   my $db_file = shift;
   return unless -f $db_file;
index 207203d..b773c5d 100644 (file)
@@ -110,24 +110,6 @@ EOE
   }
 }
 
-sub peepeeness {
-  return ! $ENV{DBICTEST_ALL_LEAKS} if defined $ENV{DBICTEST_ALL_LEAKS};
-
-  # don't smoke perls with known issues:
-  if (__PACKAGE__->is_smoker) {
-    if ($] == '5.013006') {
-      # leaky 5.13.6 (fixed in blead/cefd5c7c)
-      return 1;
-    }
-    elsif ($] == '5.013005') {
-      # not sure why this one leaks, but disable anyway - ANDK seems to make it weep
-      return 1;
-    }
-  }
-
-  return 0;
-}
-
 # Mimic $Module::Install::AUTHOR
 sub is_author {
 
index 002c328..b72b0fe 100644 (file)
@@ -35,7 +35,7 @@ throws_ok (
 # exception fallback:
 
 SKIP: {
-  if (DBICTest::RunMode->peepeeness) {
+  if (DBIx::Class::_ENV_::PEEPEENESS()) {
     skip "Your perl version $] appears to leak like a sieve - skipping garbage collected \$schema test", 1;
   }