now better support for legacy psgi (Catalyst::Engine::PSGI) running with plackup...
[catagits/Catalyst-Runtime.git] / lib / Catalyst.pm
index 03b0765..083c0af 100644 (file)
@@ -866,6 +866,9 @@ sub component {
             return $c->_filter_component( $comp, @args ) if $comp;
         }
 
+        return
+            if $c->config->{disable_component_resolution_regex_fallback};
+
         # This is here so $c->comp( '::M::' ) works
         my $query = ref $name ? $name : qr{$name}i;
 
@@ -1249,7 +1252,7 @@ EOF
 A hook to attach modifiers to. This method does not do anything except set the
 C<setup_finished> accessor.
 
-Applying method modifiers to the C<setup> method doesn't work, because of quirky thingsdone for plugin setup.
+Applying method modifiers to the C<setup> method doesn't work, because of quirky things done for plugin setup.
 
 Example:
 
@@ -1692,8 +1695,8 @@ sub execute {
                 $error = qq/Caught exception in $class->$name "$error"/;
             }
             $c->error($error);
-            $c->state(0);
         }
+        $c->state(0);
     }
     return $c->state;
 }
@@ -2410,7 +2413,12 @@ Starts the engine.
 
 =cut
 
-sub run { my $c = shift; return $c->engine->run( $c, $c->_finalized_psgi_app, @_ ) }
+sub run {
+  my $app = shift;
+  $app->engine_loader->needs_psgi_engine_compat_hack ?
+    $app->engine->run($app, @_) :
+      $app->engine->run( $app, $app->_finalized_psgi_app, @_ );
+}
 
 =head2 $c->set_action( $action, $code, $namespace, $attrs )
 
@@ -2657,6 +2665,18 @@ sub _setup_psgi_app {
         # .psgi files generated by the old Engine::PSGI do. Those return an app
         # coderef calling into MyApp->run, which doesn't work anymore, so we're
         # just ignoring it and use the wrapped legacy psgi app
+
+        $app->engine(undef);
+        $app->setup_engine;
+
+        # ^^ We need to do this because even though we are discarded $psgi_app, the
+        # fact that it was loaded above means that Catalyst Engine now has the
+        # wrong value (PSGI), which persists due to the singleton nature of all
+        # this stuff.  This solution is probably a lame hack but did work for all
+        # the cases we know about.  Hopefully we can pull out this crap soon
+        # Please note that if the fact that the psgi file was loaded started to set
+        # values in areas outside Engine this hack will probably fail.
+
         warn <<"EOW";
 Found a legacy Catalyst::Engine::PSGI .psgi file at ${psgi_file}.
 
@@ -2869,7 +2889,7 @@ the plugin name does not begin with C<Catalyst::Plugin::>.
         my $class = ref $proto || $proto;
 
         Class::MOP::load_class( $plugin );
-        $class->log->warn( "$plugin inherits from 'Catalyst::Component' - this is decated and will not work in 5.81" )
+        $class->log->warn( "$plugin inherits from 'Catalyst::Component' - this is deprecated and will not work in 5.81" )
             if $plugin->isa( 'Catalyst::Component' );
         $proto->_plugins->{$plugin} = 1;
         unless ($instant) {