Hello community,

here is the log from the commit of package perl-namespace-clean for 
openSUSE:Factory checked in at 2012-02-14 11:25:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-namespace-clean (Old)
 and      /work/SRC/openSUSE:Factory/.perl-namespace-clean.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-namespace-clean", Maintainer is ""

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/perl-namespace-clean/perl-namespace-clean.changes    
    2011-11-21 12:43:53.000000000 +0100
+++ 
/work/SRC/openSUSE:Factory/.perl-namespace-clean.new/perl-namespace-clean.changes
   2012-02-14 11:25:49.000000000 +0100
@@ -1,0 +2,17 @@
+Sat Feb 11 07:00:52 UTC 2012 - co...@suse.com
+
+- updated to 0.22
+    - Simplify the >= 5.10 PP variant even more - move the hook from
+      DESTROY into DELETE
+    - Force explicit callback invocation order on 5.8 PP
+    - Replace the %^H tie approach with fieldhashes, fixes all known
+      corner cases and caveats on supported perls >= 5.8.1 (FC)
+    - Compile away the debugger fixup on perls >= 5.15.5 (FC)
+    - More robust handling of the tied %^H in pure perl mode (RT#73402)
+    - Limit the debugger workarounds to perls between 5.8.8 and 5.14,
+      extend debugger support to all perl versions (FC) (RT#69862)
+    - If possible, automatically install (but not load) the debugger
+      workaround libraries on perls between 5.8.8 and 5.14 (RT#72368)
+    - Add back dropped NAME section (RT#70259)
+
+-------------------------------------------------------------------

Old:
----
  namespace-clean-0.21.tar.gz

New:
----
  namespace-clean-0.22.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-namespace-clean.spec ++++++
--- /var/tmp/diff_new_pack.M0OZvD/_old  2012-02-14 11:25:50.000000000 +0100
+++ /var/tmp/diff_new_pack.M0OZvD/_new  2012-02-14 11:25:50.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package perl-namespace-clean
 #
-# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -16,48 +16,44 @@
 #
 
 
-
 Name:           perl-namespace-clean
-Version:        0.21
-Release:        1
-License:        GPL-1.0+ or Artistic-1.0
+Version:        0.22
+Release:        0
 %define cpan_name namespace-clean
 Summary:        Keep imports and functions out of your namespace
-Url:            http://search.cpan.org/dist/namespace-clean/
+License:        Artistic-1.0 or GPL-1.0+
 Group:          Development/Libraries/Perl
-Source:         
http://www.cpan.org/authors/id/R/RI/RIBASUSHI/namespace-clean-%{version}.tar.gz
+Url:            http://search.cpan.org/dist/namespace-clean/
+Source:         
http://www.cpan.org/authors/id/R/RI/RIBASUSHI/%{cpan_name}-%{version}.tar.gz
+# MANUAL
 Patch1:         perl-namespace-clean-use_lib.patch
 BuildArch:      noarch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  perl
 BuildRequires:  perl-macros
 BuildRequires:  perl(B::Hooks::EndOfScope) >= 0.07
-BuildRequires:  perl(constant)
-BuildRequires:  perl(Exporter)
-BuildRequires:  perl(Package::Stash) >= 0.22
-BuildRequires:  perl(Sub::Identify) >= 0.04
-BuildRequires:  perl(Sub::Name) >= 0.04
-BuildRequires:  perl(vars)
+BuildRequires:  perl(Package::Stash) >= 0.23
 BuildRequires:  perl(Test::More) >= 0.88
+#BuildRequires: perl(CleaneeBridge)
+#BuildRequires: perl(CleaneeBridgeDirect)
+#BuildRequires: perl(CleaneeBridgeExplicit)
+#BuildRequires: perl(Devel::Hide)
+#BuildRequires: perl(ExporterTest)
+#BuildRequires: perl(Hash::Util::FieldHash)
+#BuildRequires: perl(InheritanceParent)
+#BuildRequires: perl(namespace::clean)
+#BuildRequires: perl(namespace::clean::_PP_OSE)
+#BuildRequires: perl(namespace::clean::_PP_OSE_5_8)
+#BuildRequires: perl(Sub::Identify)
+#BuildRequires: perl(Sub::Name)
+#BuildRequires: perl(Tie::StdHash)
 Requires:       perl(B::Hooks::EndOfScope) >= 0.07
-Requires:       perl(Package::Stash) >= 0.22
-Requires:       perl(Sub::Identify) >= 0.04
-Requires:       perl(Sub::Name) >= 0.04
-Requires:       perl(vars)
+Requires:       perl(Package::Stash) >= 0.23
+Requires:       perl(Test::More) >= 0.88
 %{perl_requires}
 
 %description
-Keeping packages clean
-When you define a function, or import one, into a Perl package, it will
-naturally also be available as a method. This does not per se cause
-problems, but it can complicate subclassing and, for example, plugin
-classes that are included via multiple inheritance by loading them as
-base classes.
-
-The 'namespace::clean' pragma will remove all previously declared or
-imported symbols at the end of the current package's compile cycle.
-Functions called in the package itself will still be bound by their
-name, but they won't show up as methods on your class or instances.
+Keep imports and functions out of your namespace
 
 %prep
 %setup -q -n %{cpan_name}-%{version}
@@ -78,11 +74,8 @@
 %perl_process_packlist
 %perl_gen_filelist
 
-%clean
-%{?buildroot:%__rm -rf "%{buildroot}"}
-
 %files -f %{name}.files
-%defattr(644,root,root,755)
+%defattr(-,root,root,755)
 %doc Changes
 
 %changelog

++++++ namespace-clean-0.21.tar.gz -> namespace-clean-0.22.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/namespace-clean-0.21/Changes 
new/namespace-clean-0.22/Changes
--- old/namespace-clean-0.21/Changes    2011-08-03 23:46:30.000000000 +0200
+++ new/namespace-clean-0.22/Changes    2011-12-26 13:59:44.000000000 +0100
@@ -1,3 +1,21 @@
+    [0.22] (official fix of all the %^H ickyness)
+        - Simplify the >= 5.10 PP variant even more - move the hook from
+          DESTROY into DELETE
+        - Force explicit callback invocation order on 5.8 PP
+
+    [0.21_02]
+        - Replace the %^H tie approach with fieldhashes, fixes all known
+          corner cases and caveats on supported perls >= 5.8.1 (FC)
+        - Compile away the debugger fixup on perls >= 5.15.5 (FC)
+
+    [0.21_01]
+        - More robust handling of the tied %^H in pure perl mode (RT#73402)
+        - Limit the debugger workarounds to perls between 5.8.8 and 5.14,
+          extend debugger support to all perl versions (FC) (RT#69862)
+        - If possible, automatically install (but not load) the debugger
+          workaround libraries on perls between 5.8.8 and 5.14 (RT#72368)
+        - Add back dropped NAME section (RT#70259)
+
     [0.21]
         - When using the tie() fallback ensure we do not obliterate a
           foreign tie()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/namespace-clean-0.21/MANIFEST 
new/namespace-clean-0.22/MANIFEST
--- old/namespace-clean-0.21/MANIFEST   2011-08-03 23:47:46.000000000 +0200
+++ new/namespace-clean-0.22/MANIFEST   2011-12-26 13:59:53.000000000 +0100
@@ -1,5 +1,7 @@
 Changes
 lib/namespace/clean.pm
+lib/namespace/clean/_PP_OSE.pm
+lib/namespace/clean/_PP_OSE_5_8.pm
 Makefile.PL
 MANIFEST                       This list of files
 t/00-basic.t
@@ -10,7 +12,9 @@
 t/05-explicit-cleanee.t
 t/05-syntax-error.t
 t/06-other-types.t
+t/07-debugger.t
 t/08-const-sub.t
+t/09-fiddle-hinthash.t
 t/10-pure-perl.t
 t/lib/CleaneeBridge.pm
 t/lib/CleaneeBridgeDirect.pm
@@ -22,5 +26,5 @@
 t/lib/OtherTypes.pm
 t/lib/SyntaxError.pm
 t/lib/Unimport.pm
-xt/author/07-debugger.t
-META.yml                                 Module meta-data (added by MakeMaker)
+META.yml                                 Module YAML meta-data (added by 
MakeMaker)
+META.json                                Module JSON meta-data (added by 
MakeMaker)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/namespace-clean-0.21/META.json 
new/namespace-clean-0.22/META.json
--- old/namespace-clean-0.21/META.json  1970-01-01 01:00:00.000000000 +0100
+++ new/namespace-clean-0.22/META.json  2011-12-26 13:59:53.000000000 +0100
@@ -0,0 +1,50 @@
+{
+   "abstract" : "Keep imports and functions out of your namespace",
+   "author" : [
+      "Robert 'phaylon' Sedlacek <r...@474.at>, Florian Ragwitz 
<r...@debian.org>, Jesse Luehrs <d...@tozt.net>"
+   ],
+   "dynamic_config" : 1,
+   "generated_by" : "ExtUtils::MakeMaker version 6.6302, CPAN::Meta::Converter 
version 2.112621",
+   "license" : [
+      "perl_5"
+   ],
+   "meta-spec" : {
+      "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec";,
+      "version" : "2"
+   },
+   "name" : "namespace-clean",
+   "no_index" : {
+      "directory" : [
+         "t",
+         "inc"
+      ]
+   },
+   "prereqs" : {
+      "build" : {
+         "requires" : {
+            "Test::More" : "0.88"
+         }
+      },
+      "configure" : {
+         "requires" : {
+            "ExtUtils::MakeMaker" : 0
+         }
+      },
+      "runtime" : {
+         "requires" : {
+            "Package::Stash" : "0.23"
+         }
+      }
+   },
+   "release_status" : "stable",
+   "resources" : {
+      "bugtracker" : {
+         "web" : 
"http://rt.cpan.org/Public/Dist/Display.html?Name=namespace-clean";
+      },
+      "homepage" : "http://search.cpan.org/dist/namespace-clean";,
+      "repository" : {
+         "url" : "git://git.shadowcat.co.uk/p5sagit/namespace-clean.git"
+      }
+   },
+   "version" : "0.22"
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/namespace-clean-0.21/META.yml 
new/namespace-clean-0.22/META.yml
--- old/namespace-clean-0.21/META.yml   2011-08-03 23:47:46.000000000 +0200
+++ new/namespace-clean-0.22/META.yml   2011-12-26 13:59:53.000000000 +0100
@@ -1,26 +1,26 @@
---- #YAML:1.0
-name:               namespace-clean
-version:            0.21
-abstract:           Keep imports and functions out of your namespace
+---
+abstract: 'Keep imports and functions out of your namespace'
 author:
-    - Robert 'phaylon' Sedlacek <r...@474.at>, Florian Ragwitz 
<r...@debian.org>, Jesse Luehrs <d...@tozt.net>
-license:            perl
-distribution_type:  module
-configure_requires:
-    ExtUtils::MakeMaker:  0
+  - "Robert 'phaylon' Sedlacek <r...@474.at>, Florian Ragwitz 
<r...@debian.org>, Jesse Luehrs <d...@tozt.net>"
 build_requires:
-    Test::More:  0.88
+  Test::More: 0.88
+configure_requires:
+  ExtUtils::MakeMaker: 0
+dynamic_config: 1
+generated_by: 'ExtUtils::MakeMaker version 6.6302, CPAN::Meta::Converter 
version 2.112621'
+license: perl
+meta-spec:
+  url: http://module-build.sourceforge.net/META-spec-v1.4.html
+  version: 1.4
+name: namespace-clean
+no_index:
+  directory:
+    - t
+    - inc
 requires:
-    Package::Stash:  0.23
+  Package::Stash: 0.23
 resources:
-    bugtracker:  
http://rt.cpan.org/Public/Dist/Display.html?Name=namespace-clean
-    homepage:    http://search.cpan.org/dist/namespace-clean
-    repository:  git://git.shadowcat.co.uk/p5sagit/namespace-clean.git
-no_index:
-    directory:
-        - t
-        - inc
-generated_by:       ExtUtils::MakeMaker version 6.57_05
-meta-spec:
-    url:      http://module-build.sourceforge.net/META-spec-v1.4.html
-    version:  1.4
+  bugtracker: http://rt.cpan.org/Public/Dist/Display.html?Name=namespace-clean
+  homepage: http://search.cpan.org/dist/namespace-clean
+  repository: git://git.shadowcat.co.uk/p5sagit/namespace-clean.git
+version: 0.22
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/namespace-clean-0.21/Makefile.PL 
new/namespace-clean-0.22/Makefile.PL
--- old/namespace-clean-0.21/Makefile.PL        2011-08-03 23:46:29.000000000 
+0200
+++ new/namespace-clean-0.22/Makefile.PL        2011-12-21 11:02:40.000000000 
+0100
@@ -16,8 +16,16 @@
 );
 
 my %OPT_RUN_DEPS = (can_cc() ? (
-  'B::Hooks::EndOfScope' => '0.07', # when changing, also change version in 
namespace/clean.pm
-  is_smoker() ? ( 'Devel::Hide' => 0 ) : (),  # make sure we smoke the 
pure-perl version
+  'B::Hooks::EndOfScope' => '0.07', # when changing, also change $b_h_eos_req 
in namespace/clean.pm
+
+  # these pieces are needed if using the debugger on the perl range
+  ($] > 5.008_008_9 && $] < 5.013_006_1)
+    ? ( 'Sub::Name' => '0.04', 'Sub::Identify' => '0.04' ) # when changing, 
also change $sn_ver and $si_ver in namespace/clean.pm
+    : ()
+  ,
+
+  # make sure we smoke the pure-perl version
+  is_smoker() ? ( 'Devel::Hide' => 0 ) : (),
 ) : () );
 
 my %META_BITS = (
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/namespace-clean-0.21/lib/namespace/clean/_PP_OSE.pm 
new/namespace-clean-0.22/lib/namespace/clean/_PP_OSE.pm
--- old/namespace-clean-0.21/lib/namespace/clean/_PP_OSE.pm     1970-01-01 
01:00:00.000000000 +0100
+++ new/namespace-clean-0.22/lib/namespace/clean/_PP_OSE.pm     2011-12-23 
00:16:01.000000000 +0100
@@ -0,0 +1,40 @@
+package # hide from the pauses
+  namespace::clean::_PP_OSE;
+
+use warnings;
+use strict;
+
+use Tie::Hash;
+use Hash::Util::FieldHash 'fieldhash';
+
+# Here we rely on a combination of several behaviors:
+#
+# * %^H is deallocated on scope exit, so any references to it disappear
+# * A lost weakref in a fieldhash causes the corresponding key to be deleted
+# * Deletion of a key on a tied hash triggers DELETE
+#
+# Therefore the DELETE of a tied fieldhash containing a %^H reference will
+# be the hook to fire all our callbacks.
+
+fieldhash my %hh;
+{
+  package # hide from pause too
+    namespace::clean::_TieHintHashFieldHash;
+  use base 'Tie::StdHash';
+  sub DELETE {
+    my $ret = shift->SUPER::DELETE(@_);
+    $_->() for @$ret;
+    $ret;
+  }
+}
+
+sub on_scope_end (&) {
+  $^H |= 0x020000;
+
+  tie(%hh, 'namespace::clean::_TieHintHashFieldHash')
+    unless tied %hh;
+
+  push @{ $hh{\%^H} ||= [] }, shift;
+}
+
+1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/namespace-clean-0.21/lib/namespace/clean/_PP_OSE_5_8.pm 
new/namespace-clean-0.22/lib/namespace/clean/_PP_OSE_5_8.pm
--- old/namespace-clean-0.21/lib/namespace/clean/_PP_OSE_5_8.pm 1970-01-01 
01:00:00.000000000 +0100
+++ new/namespace-clean-0.22/lib/namespace/clean/_PP_OSE_5_8.pm 2011-12-23 
17:16:43.000000000 +0100
@@ -0,0 +1,26 @@
+package # hide from the pauses
+  namespace::clean::_PP_OSE_5_8;
+
+use warnings;
+use strict;
+
+# This is the original implementation, which sadly is broken
+# on perl 5.10+ withing string evals
+sub on_scope_end (&) {
+  $^H |= 0x020000;
+
+  push @{
+    $^H{'__namespace::clean__guardstack__'}
+      ||= bless ([], 'namespace::clean::_PP_SG_STACK')
+  }, shift;
+}
+
+package # hide from the pauses
+  namespace::clean::_PP_SG_STACK;
+
+use warnings;
+use strict;
+
+sub DESTROY { $_->() for @{$_[0]} }
+
+1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/namespace-clean-0.21/lib/namespace/clean.pm 
new/namespace-clean-0.22/lib/namespace/clean.pm
--- old/namespace-clean-0.21/lib/namespace/clean.pm     2011-08-03 
23:46:30.000000000 +0200
+++ new/namespace-clean-0.22/lib/namespace/clean.pm     2011-12-26 
13:56:08.000000000 +0100
@@ -1,5 +1,4 @@
 package namespace::clean;
-# ABSTRACT: Keep imports and functions out of your namespace
 
 use warnings;
 use strict;
@@ -7,89 +6,35 @@
 use vars qw( $STORAGE_VAR );
 use Package::Stash;
 
-our $VERSION = '0.21';
+our $VERSION = '0.22';
 
 $STORAGE_VAR = '__NAMESPACE_CLEAN_STORAGE';
 
+# FIXME - all of this buggery will migrate to B::H::EOS soon
 BEGIN {
-
-  use warnings;
-  use strict;
-
   # when changing also change in Makefile.PL
   my $b_h_eos_req = '0.07';
 
-  if (eval {
+  if (! $ENV{NAMESPACE_CLEAN_USE_PP} and eval {
     require B::Hooks::EndOfScope;
     B::Hooks::EndOfScope->VERSION($b_h_eos_req);
     1
   } ) {
     B::Hooks::EndOfScope->import('on_scope_end');
   }
-  else {
-    eval <<'PP' or die $@;
-
-  use Tie::Hash ();
-
-  {
-    package namespace::clean::_TieHintHash;
-
-    use warnings;
-    use strict;
-
-    use base 'Tie::ExtraHash';
+  elsif ($] < 5.009_003_1) {
+    require namespace::clean::_PP_OSE_5_8;
+    *on_scope_end = \&namespace::clean::_PP_OSE_5_8::on_scope_end;
   }
-
-  {
-    package namespace::clean::_ScopeGuard;
-
-    use warnings;
-    use strict;
-
-    sub arm { bless [ $_[1] ] }
-
-    sub DESTROY { $_[0]->[0]->() }
-  }
-
-
-  sub on_scope_end (&) {
-    $^H |= 0x020000;
-
-    if( my $stack = tied( %^H ) ) {
-      if ( (my $c = ref $stack) ne 'namespace::clean::_TieHintHash') {
-        die <<EOE;
-========================================================================
-               !!!   F A T A L   E R R O R   !!!
-
-                 foreign tie() of %^H detected
-========================================================================
-
-namespace::clean is currently operating in pure-perl fallback mode, because
-your system is lacking the necessary dependency B::Hooks::EndOfScope 
$b_h_eos_req.
-In this mode namespace::clean expects to be able to tie() the hinthash %^H,
-however it is apparently already tied by means unknown to the tie-class
-$c
-
-Since this is a no-win situation execution will abort here and now. Please
-try to find out which other module is relying on hinthash tie() ability,
-and file a bug for both the perpetrator and namespace::clean, so that the
-authors can figure out an acceptable way of moving forward.
-
-EOE
-      }
-      push @$stack, namespace::clean::_ScopeGuard->arm(shift);
-    }
-    else {
-      tie( %^H, 'namespace::clean::_TieHintHash', 
namespace::clean::_ScopeGuard->arm(shift) );
-    }
+  else {
+    require namespace::clean::_PP_OSE;
+    *on_scope_end = \&namespace::clean::_PP_OSE::on_scope_end;
   }
+}
 
-  1;
-
-PP
+=head1 NAME
 
-  }
-}
+namespace::clean - Keep imports and functions out of your namespace
 
 =head1 SYNOPSIS
 
@@ -219,27 +164,58 @@
 
 =cut
 
+# Constant to optimise away the unused code branches
+use constant FIXUP_NEEDED => $] < 5.015_005_1;
+use constant FIXUP_RENAME_SUB => $] > 5.008_008_9 && $] < 5.013_006_1;
+{
+  no strict;
+  delete ${__PACKAGE__."::"}{FIXUP_NEEDED};
+  delete ${__PACKAGE__."::"}{FIXUP_RENAME_SUB};
+}
+
+# Debugger fixup necessary before perl 5.15.5
+#
+# In perl 5.8.9-5.12, it assumes that sub_fullname($sub) can
+# always be used to find the CV again.
+# In perl 5.8.8 and 5.14, it assumes that the name of the glob
+# passed to entersub can be used to find the CV.
+# since we are deleting the glob where the subroutine was originally
+# defined, those assumptions no longer hold.
+#
+# So in 5.8.9-5.12 we need to move it elsewhere and point the
+# CV's name to the new glob.
+#
+# In 5.8.8 and 5.14 we move it elsewhere and rename the
+# original glob by assigning the new glob back to it.
 my $sub_utils_loaded;
-my $DebuggerRename = sub {
+my $DebuggerFixup = sub {
   my ($f, $sub, $cleanee_stash, $deleted_stash) = @_;
 
-  if (! defined $sub_utils_loaded ) {
-    $sub_utils_loaded = do {
-      my $sn_ver = 0.04;
-      eval { require Sub::Name; Sub::Name->VERSION($sn_ver) }
-        or die "Sub::Name $sn_ver required when running under -d or 
equivalent: $@";
-
-      my $si_ver = 0.04;
-      eval { require Sub::Identify; Sub::Identify->VERSION($si_ver) }
-        or die "Sub::Identify $si_ver required when running under -d or 
equivalent: $@";
+  if (FIXUP_RENAME_SUB) {
+    if (! defined $sub_utils_loaded ) {
+      $sub_utils_loaded = do {
+
+        # when changing version also change in Makefile.PL
+        my $sn_ver = 0.04;
+        eval { require Sub::Name; Sub::Name->VERSION($sn_ver) }
+          or die "Sub::Name $sn_ver required when running under -d or 
equivalent: $@";
+
+        # when changing version also change in Makefile.PL
+        my $si_ver = 0.04;
+        eval { require Sub::Identify; Sub::Identify->VERSION($si_ver) }
+          or die "Sub::Identify $si_ver required when running under -d or 
equivalent: $@";
 
-      1;
-    } ? 1 : 0;
-  }
+        1;
+      } ? 1 : 0;
+    }
 
-  if ( Sub::Identify::sub_fullname($sub) eq ($cleanee_stash->name . "::$f") ) {
-    my $new_fq = $deleted_stash->name . "::$f";
-    Sub::Name::subname($new_fq, $sub);
+    if ( Sub::Identify::sub_fullname($sub) eq ($cleanee_stash->name . "::$f") 
) {
+      my $new_fq = $deleted_stash->name . "::$f";
+      Sub::Name::subname($new_fq, $sub);
+      $deleted_stash->add_symbol("&$f", $sub);
+    }
+  }
+  else {
     $deleted_stash->add_symbol("&$f", $sub);
   }
 };
@@ -259,18 +235,23 @@
         my $sub = $cleanee_stash->get_symbol("&$f")
           or next SYMBOL;
 
-        if ($^P and ref(\$cleanee_stash->namespace->{$f}) eq 'GLOB') {
-            # convince the Perl debugger to work
-            # it assumes that sub_fullname($sub) can always be used to find 
the CV again
-            # since we are deleting the glob where the subroutine was 
originally
-            # defined, that assumption no longer holds, so we need to move it
-            # elsewhere and point the CV's name to the new glob.
-            $DebuggerRename->(
-              $f,
-              $sub,
-              $cleanee_stash,
-              $deleted_stash ||= 
Package::Stash->new("namespace::clean::deleted::$cleanee"),
-            );
+        my $need_debugger_fixup =
+          FIXUP_NEEDED
+            &&
+          $^P
+            &&
+          ref(my $globref = \$cleanee_stash->namespace->{$f}) eq 'GLOB'
+        ;
+
+        if (FIXUP_NEEDED && $need_debugger_fixup) {
+          # convince the Perl debugger to work
+          # see the comment on top of $DebuggerFixup
+          $DebuggerFixup->(
+            $f,
+            $sub,
+            $cleanee_stash,
+            $deleted_stash ||= 
Package::Stash->new("namespace::clean::deleted::$cleanee"),
+          );
         }
 
         my @symbols = map {
@@ -281,6 +262,13 @@
 
         $cleanee_stash->remove_glob($f);
 
+        # if this perl needs no renaming trick we need to
+        # rename the original glob after the fact
+        # (see commend of $DebuggerFixup
+        if (FIXUP_NEEDED && !FIXUP_RENAME_SUB && $need_debugger_fixup) {
+          *$globref = $deleted_stash->namespace->{$f};
+        }
+
         $cleanee_stash->add_symbol(@$_) for @symbols;
     }
 };
@@ -434,17 +422,6 @@
 Just for completeness sake, if you want to remove the symbol completely,
 use C<undef> instead.
 
-=head1 CAVEATS
-
-This module is fully functional in a pure-perl environment, where
-L<B::Hooks::EndOfScope> (with the XS dependency L<Variable::Magic>), may
-not be available. However in this case this module falls back to a
-L<tie()|perlfunc/tie> of L<%^H|perlvar/%^H>  which may or may not interfere
-with some crack you may be doing independently of namespace::clean.
-
-If you want to ensure that your codebase is protected from this unlikely
-clash, you need to explicitly depend on L<B::Hooks::EndOfScope>.
-
 =head1 SEE ALSO
 
 L<B::Hooks::EndOfScope>
@@ -473,11 +450,15 @@
 
 Peter Rabbitson <ribasu...@cpan.org>
 
+=item *
+
+Father Chrysostomos <spr...@cpan.org>
+
 =back
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2011 by Robert 'phaylon' Sedlacek.
+This software is copyright (c) 2011 by L</AUTHORS>
 
 This is free software; you can redistribute it and/or modify it under the same 
terms as the Perl 5 programming language system itself.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/namespace-clean-0.21/t/07-debugger.t 
new/namespace-clean-0.22/t/07-debugger.t
--- old/namespace-clean-0.21/t/07-debugger.t    1970-01-01 01:00:00.000000000 
+0100
+++ new/namespace-clean-0.22/t/07-debugger.t    2011-12-21 10:50:20.000000000 
+0100
@@ -0,0 +1,39 @@
+use Test::More;
+
+BEGIN {
+  # shut up the debugger
+  $ENV{PERLDB_OPTS} = 'NonStop';
+
+  # work aroud the regex + P::S::XS buggery on
+  # < 5.8.6
+  require Package::Stash;
+}
+
+BEGIN {
+
+#line 1
+#!/usr/bin/perl -d
+#line 10
+
+}
+
+{
+    package Foo;
+
+    BEGIN { *baz = sub { 42 } }
+    sub foo { 22 }
+
+    use namespace::clean;
+
+    sub bar {
+        ::is(baz(), 42);
+        ::is(foo(), 22);
+    }
+}
+
+ok( !Foo->can("foo"), "foo cleaned up" );
+ok( !Foo->can("baz"), "baz cleaned up" );
+
+Foo->bar();
+
+done_testing;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/namespace-clean-0.21/t/09-fiddle-hinthash.t 
new/namespace-clean-0.22/t/09-fiddle-hinthash.t
--- old/namespace-clean-0.21/t/09-fiddle-hinthash.t     1970-01-01 
01:00:00.000000000 +0100
+++ new/namespace-clean-0.22/t/09-fiddle-hinthash.t     2011-12-22 
12:07:06.000000000 +0100
@@ -0,0 +1,53 @@
+use strict;
+use warnings;
+
+use Test::More 0.88;
+
+{
+  package Bar;
+  use sort 'stable';
+  use namespace::clean;
+  use sort 'stable';
+  {
+    1;
+  }
+
+  Test::More::pass('no segfault');
+}
+
+{
+  package Foo;
+  BEGIN {
+    $^H{'foo'} = 'bar';
+  }
+
+  use namespace::clean;
+
+  BEGIN {
+    Test::More::is( $^H{'foo'}, 'bar', 'compiletime hinthash intact after 
n::c' );
+  }
+
+  {
+    BEGIN {
+      Test::More::is(
+        $^H{'foo'}, 'bar', 'compile-time hinthash intact in inner scope'
+      );
+    }
+    1;
+  }
+
+  BEGIN {
+    SKIP: {
+      Test::More::skip(
+        'Tied hinthash values not present in extended caller() on perls older 
than 5.10'
+       .', regardless of mode (PP or XS)',
+        1
+      ) if ($] < 5.010_000);
+      package DB;
+      Test::More::is( ( (caller(0))[10] || {} )->{foo}, 'bar', 'hinthash 
values visible in caller' );
+    }
+  }
+}
+
+
+done_testing;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/namespace-clean-0.21/t/10-pure-perl.t 
new/namespace-clean-0.22/t/10-pure-perl.t
--- old/namespace-clean-0.21/t/10-pure-perl.t   2011-07-31 05:32:06.000000000 
+0200
+++ new/namespace-clean-0.22/t/10-pure-perl.t   2011-12-22 12:20:21.000000000 
+0100
@@ -2,11 +2,15 @@
 use warnings;
 use Test::More;
 
+plan skip_all => "PP tests already executed"
+  if $ENV{NAMESPACE_CLEAN_USE_PP};
+
 eval { require B::Hooks::EndOfScope }
   or plan skip_all => "PP tests already executed";
 
-eval { require Devel::Hide }
-  or plan skip_all => "Devel::Hide required for this test in presence of 
B::Hooks::EndOfScope";
+# the PP tests will run either wih D::H (mainly on smokers)
+# or by setting the envvar (for users)
+my $has_d_h = eval { require Devel::Hide };
 
 use Config;
 use FindBin qw($Bin);
@@ -22,7 +26,12 @@
   next if $fn =~ /${this_file}$/;
 
   local $ENV{DEVEL_HIDE_VERBOSE} = 0;
-  my @cmd = ( $^X, '-MDevel::Hide=B::Hooks::EndOfScope', $fn );
+  local $ENV{NAMESPACE_CLEAN_USE_PP} = 1 unless $has_d_h;
+  my @cmd = (
+    $^X,
+    $has_d_h ? '-MDevel::Hide=B::Hooks::EndOfScope' : (),
+    $fn
+  );
 
   # this is cheating, and may even hang here and there (testing on windows 
passed fine)
   # if it does - will have to fix it somehow (really *REALLY* don't want to 
pull
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/namespace-clean-0.21/xt/author/07-debugger.t 
new/namespace-clean-0.22/xt/author/07-debugger.t
--- old/namespace-clean-0.21/xt/author/07-debugger.t    2011-07-26 
16:56:10.000000000 +0200
+++ new/namespace-clean-0.22/xt/author/07-debugger.t    1970-01-01 
01:00:00.000000000 +0100
@@ -1,39 +0,0 @@
-use Test::More;
-
-BEGIN {
-    plan skip_all => 'Only applicable on perl >= 5.8.9'
-        if $] <= 5.008008;
-
-#line 1
-#!/usr/bin/perl -d
-#line 10
-
-    push @DB::typeahead, "c", "q";
-
-    # try to shut it up at least a little bit
-    open my $out, ">", \my $out_buf;
-    $DB::OUT = $out;
-    open my $in, "<", \my $in_buf;
-    $DB::IN = $in;
-}
-
-{
-    package Foo;
-
-    BEGIN { *baz = sub { 42 } }
-    sub foo { 22 }
-
-    use namespace::clean;
-
-    sub bar {
-        ::is(baz(), 42);
-        ::is(foo(), 22);
-    }
-}
-
-ok( !Foo->can("foo"), "foo cleaned up" );
-ok( !Foo->can("baz"), "baz cleaned up" );
-
-Foo->bar();
-
-done_testing;

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to