From: Tomas Doran Date: Tue, 28 Apr 2009 21:56:07 +0000 (+0000) Subject: Rewrite C3 chunk of Catalyst::Upgrading to hopefully be more clear X-Git-Tag: 5.80003~11 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=5d06547d51fe24fbaeea02047325ed4ef6dc4459 Rewrite C3 chunk of Catalyst::Upgrading to hopefully be more clear --- diff --git a/Changes b/Changes index 12a750c..b76df66 100644 --- a/Changes +++ b/Changes @@ -21,6 +21,8 @@ - Fix RT#43375 by sorting results before testing them (t0m) - Fixes for uri_for_action when using Catalyst::DispatchType::Regex + tests from RT#39369 (norbi) + - Partial rewrite and reoganisation of the C3 docs in + Catalyst::Upgrading based on feedback from kiffin (t0m) 5.80002 2009-04-22 01:28:36 - Fix CATALYST_DEBUG and MYAPP_DEBUG environment variables diff --git a/lib/Catalyst/Upgrading.pod b/lib/Catalyst/Upgrading.pod index 0484990..608f426 100644 --- a/lib/Catalyst/Upgrading.pod +++ b/lib/Catalyst/Upgrading.pod @@ -27,9 +27,23 @@ perl 5.10, and comes via L for perl 5.8. This replaces L with L, forcing all components to resolve methods using C3, rather than the unpredictable dispatch order of L. -To be able to do this, however, entails that the graph of superclasses for each -class must be linearizable using the C3 algorithm. Unfortunately, when -superclasses are being used as mixins, it is easy to get this wrong. +This issue is characterised by your application failing to start due to an +error message about having a non-linear @ISA. + +The Catalyst plugin most often causing this, is +L - if you are using this plugin +and see issues, then please upgrade - and please try upgrading your plugins +if you have this issue, as it has been fixed. Note that Makefile.PL in the +distribution will warn about known incompatible components. + +This issue can, however, be found in your own application - the only solution is +to go through each base class of the class the error was reported against, until +you identify the ones in conflict, and resolve them. + +To be able to generate a linear @ISA, the list of superclasses for each +class must be resolvable using the C3 algorithm. Unfortunately, when +superclasses are being used as mixins (to add functionality used in your class), +and with multiple inheritence, it is easy to get this wrong. Most common is the case of: @@ -42,13 +56,10 @@ Most common is the case of: package GoesBang; use base qw/Component1 Component2/; -And the Catalyst plugin most often causing this, is -L - if you are using this plugin -and see issues, then please upgrade! +Any situation like this will cause your application to fail to start. -This can, however, be found in your own application - the only solution is to -go through each base class of the class the error was reported against, until -you identify the ones in conflict, and resolve them. +Please see additional documentation about this issue, and how to resolve it in +L. =head2 Components which inherit from Moose::Object before Catalyst::Component