Merge 'trunk' into 'param_filtering'
Tomas Doran [Tue, 1 Dec 2009 01:08:22 +0000 (01:08 +0000)]
r10824@t0mlaptop (orig r10823):  autarch | 2009-07-07 21:58:31 +0100
Deleted the old Restarter and associated code.

Also removed the dep on File::Modified
r10831@t0mlaptop (orig r10830):  t0m | 2009-07-08 21:11:57 +0100
U R DOIN IT WRONG.
r10836@t0mlaptop (orig r10835):  t0m | 2009-07-08 23:12:29 +0100
More ->config fixes + Changelog
r10852@t0mlaptop (orig r10851):  t0m | 2009-07-11 13:51:07 +0100
Less lies in the deprecated block comment in Dispatcher.pm as it's throwing people off
r10862@t0mlaptop (orig r10861):  groditi | 2009-07-11 23:07:47 +0100
private_path method for actions that returns a string suitable for use in forward and unit tests for the rest of catalyst::Action
r10865@t0mlaptop (orig r10864):  t0m | 2009-07-12 01:56:51 +0100
Fix test
r10866@t0mlaptop (orig r10865):  t0m | 2009-07-12 01:57:19 +0100
Refactor to remove warning
r10885@t0mlaptop (orig r10884):  t0m | 2009-07-14 21:25:03 +0100
Fix Makefile.PL to actually do the right thing on Lepoard (alledgedly), and encourage someone to contribute to maintaining our protection against Apple :)
r10892@t0mlaptop (orig r10891):  dandv | 2009-07-16 02:12:59 +0100
Fixed POD links to get and request
r10893@t0mlaptop (orig r10892):  dandv | 2009-07-16 06:24:10 +0100
Could not have made a more insignificant patch
r10898@t0mlaptop (orig r10897):  t0m | 2009-07-16 22:05:25 +0100
Special move for CX::Component::Traits. No tests, please don't look.
r10899@t0mlaptop (orig r10898):  t0m | 2009-07-16 22:12:49 +0100
Remove 10897, this hack kinda works, but then leads to more issues. Gonna branch
r10900@t0mlaptop (orig r10899):  t0m | 2009-07-16 22:24:11 +0100
Write that down
r10915@t0mlaptop (orig r10914):  dandv | 2009-07-17 06:18:22 +0100
Hyperlinked POD entry for Catalysy::Request->args
r10941@t0mlaptop (orig r10940):  jester | 2009-07-22 13:46:29 +0100
Changed link from C::Base to C::Controller; fixed my alias
r10962@t0mlaptop (orig r10961):  hobbs | 2009-07-23 05:46:43 +0100
Depend on Module::Pluggable 3.9 to resolve a bug with inner packages in tests.

r10963@t0mlaptop (orig r10962):  hobbs | 2009-07-23 10:32:08 +0100
Test and Changelog entry for r10961.

r10981@t0mlaptop (orig r10980):  t0m | 2009-07-25 22:05:19 +0100
Remove dead and unused method
r10985@t0mlaptop (orig r10984):  autarch | 2009-07-26 03:14:23 +0100
fix spelling of attributes in the test name
r10986@t0mlaptop (orig r10985):  dandv | 2009-07-26 08:13:19 +0100
Fixed a bunch of POD hyperlinks in Catalyst.pm and minor punctuation in Catalyst::Action
r10994@t0mlaptop (orig r10993):  kmx | 2009-07-28 16:26:44 +0100
C::Engine::FastCGI (_fix_env) - Microsoft IIS on Windows 2008 R2 has version string "IIS/7.5" that was not supported; this patch makes test condition more general, accepting versions from IIS/6.0 to IIS/9.9 (should be enough for a while)
r10995@t0mlaptop (orig r10994):  hobbs | 2009-07-29 01:33:25 +0100
Rewrite the POD for $c->uri_for().

Reintroduce some bits of information that were lost in 5.7->5.8, and remove
a misleading statement about $c->action. Recommend the use of uri_for_action
with a private action path.

r10996@t0mlaptop (orig r10995):  hobbs | 2009-07-29 01:59:19 +0100
Update Changes and add me to Contributors
r10997@t0mlaptop (orig r10996):  hobbs | 2009-07-29 02:06:09 +0100
Add konobi to contributors
r10998@t0mlaptop (orig r10997):  hobbs | 2009-07-29 02:35:11 +0100
Changes entry for r10993
r11009@t0mlaptop (orig r11008):  t0m | 2009-07-30 15:31:26 +0100
Add to TODO so I don't have to grep backlog later when I have tuits
r11013@t0mlaptop (orig r11012):  t0m | 2009-07-31 02:46:00 +0100
Large TODO update
r11019@t0mlaptop (orig r11018):  t0m | 2009-08-01 01:39:39 +0100
Merge branch pass_component_names:

svn merge -r  10899:10927  http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Runtime/5.80/branches/pass_component_names
r11021@t0mlaptop (orig r11020):  t0m | 2009-08-01 03:00:23 +0100
Aww, crap, fail. merge 10927:HEAD from pass_component_names
r11024@t0mlaptop (orig r11023):  caelum | 2009-08-01 20:04:08 +0100
allow uri_for($controller_instance)
r11035@t0mlaptop (orig r11034):  t0m | 2009-08-05 20:39:01 +0100
Require perl 5.8.6
r11038@t0mlaptop (orig r11037):  hobbs | 2009-08-06 10:57:02 +0100
Add a method to the stats object to get the request start time.

r11048@t0mlaptop (orig r11047):  t0m | 2009-08-07 01:15:04 +0100
Fix the perl version required there also
r11049@t0mlaptop (orig r11048):  t0m | 2009-08-07 01:24:17 +0100
Blow up if we're in author mode and don't have the right M::I extensions
r11050@t0mlaptop (orig r11049):  t0m | 2009-08-07 01:57:21 +0100
Bump MX::MA dep for anon class tests
r11058@t0mlaptop (orig r11057):  gbjk | 2009-08-07 17:45:03 +0100
DispatchType::Chained fix for default args attribute to handle Args(0) vs Args() at depth.

r11059@t0mlaptop (orig r11058):  gbjk | 2009-08-07 18:17:15 +0100
DispatchType::Chained fix failing test of Args(0) vs Args(0) on surface

r11062@t0mlaptop (orig r11061):  gbjk | 2009-08-07 22:17:22 +0100
Engine::HTTP - Fix paths for HTTP requests with scheme and domain in URI.

r11064@t0mlaptop (orig r11063):  groditi | 2009-08-08 22:54:04 +0100
make debug output prettier with large widths
r11065@t0mlaptop (orig r11064):  groditi | 2009-08-08 22:54:46 +0100
oops debug output got leaked in
r11069@t0mlaptop (orig r11068):  t0m | 2009-08-09 13:36:20 +0100
Fix RT#48555
r11070@t0mlaptop (orig r11069):  t0m | 2009-08-09 13:36:55 +0100
Updates changelog
r11071@t0mlaptop (orig r11070):  t0m | 2009-08-09 15:22:21 +0100
Rewrite fixes for RT#48555
r11123@t0mlaptop (orig r11122):  t0m | 2009-08-11 22:49:37 +0100
Unfuck Catalyst::View::JSON
r11125@t0mlaptop (orig r11124):  t0m | 2009-08-11 23:32:47 +0100
Apply patch from RT#48623 to fix headers in Engine::HTTP
r11127@t0mlaptop (orig r11126):  rjbs | 2009-08-12 00:33:18 +0100
svn merge -r 11123:11125 branches/locate_components/ trunk/
r11128@t0mlaptop (orig r11127):  rjbs | 2009-08-12 00:34:12 +0100
add changelog entry for merged locate_components branch
r11130@t0mlaptop (orig r11129):  t0m | 2009-08-12 01:15:51 +0100
Tiny change to make the error make more sense
r11132@t0mlaptop (orig r11131):  t0m | 2009-08-12 02:09:09 +0100
Split test out into a more proper app, so that the test no longer relies on the metaclass initialization hacking occurring in ->setup_component, as I want to move it
r11133@t0mlaptop (orig r11132):  t0m | 2009-08-12 02:11:07 +0100
Blow up rather than failing to call ->can if everything is totally screwed
r11134@t0mlaptop (orig r11133):  rafl | 2009-08-12 03:54:52 +0100
Fix POD refering to CGI::Cookie. We're using CGI::Simple::Cookie.

Courtesy of Forrest Cahoon.
r11135@t0mlaptop (orig r11134):  t0m | 2009-08-12 12:03:06 +0100
Make the code much clearer about what is going on, and remove the horrible map and grep which I hated.
r11140@t0mlaptop (orig r11139):  rafl | 2009-08-16 10:19:58 +0100
Do at least one (possibly empty) write when reading the response body from a filehandle.
r11145@t0mlaptop (orig r11144):  jshirley | 2009-08-17 22:33:17 +0100
Adding and documented X-Forwarded-Port
r11146@t0mlaptop (orig r11145):  t0m | 2009-08-17 23:08:19 +0100
Capitalisation fixes in Changelog
r11147@t0mlaptop (orig r11146):  t0m | 2009-08-17 23:11:34 +0100
Add _component_name stuff to Changes
r11148@t0mlaptop (orig r11147):  jshirley | 2009-08-17 23:13:05 +0100
Conflict resolution
r11149@t0mlaptop (orig r11148):  hobbs | 2009-08-17 23:24:46 +0100
Changelog for r11037

r11150@t0mlaptop (orig r11149):  t0m | 2009-08-18 00:14:38 +0100
Switch to catalyst_component_name
r11154@t0mlaptop (orig r11153):  ferz | 2009-08-18 07:55:14 +0100
Test case using Exception::Class

r11155@t0mlaptop (orig r11154):  ferz | 2009-08-18 12:19:40 +0100
drop POD comments.

r11166@t0mlaptop (orig r11165):  t0m | 2009-08-19 20:03:01 +0100
Move test to make more sense in my idea of the naming scheme - t/dead_ is for tests which check the app pukes, which this shouldn't
r11167@t0mlaptop (orig r11166):  t0m | 2009-08-19 20:04:59 +0100
Fail commit was fail. Back out the part I didn't want
r11168@t0mlaptop (orig r11167):  t0m | 2009-08-19 20:10:06 +0100
Remove r11058 - the commit message is lies, it does not fix the TODO test
r11169@t0mlaptop (orig r11168):  t0m | 2009-08-19 21:21:44 +0100
Back out r11057 which breaks one of the chained tests, whilst not fixing the bug in question
r11170@t0mlaptop (orig r11169):  t0m | 2009-08-19 21:29:16 +0100
Clean up test app for the exception test, as we don't want to depend on Test::Class thanks
r11171@t0mlaptop (orig r11170):  rafl | 2009-08-19 21:45:45 +0100
Changelog Engine::finalize_body changes.
r11181@t0mlaptop (orig r11180):  gbjk | 2009-08-21 14:07:54 +0100
Changelog update for previous Catalyst::Engine::HTTP fix.

r11182@t0mlaptop (orig r11181):  rafl | 2009-08-21 16:51:26 +0100
Now we don't have the broken restarter engine anymore, we conflict with old Catalyst::Devel versions, that don't have the new restarter yet.
r11183@t0mlaptop (orig r11182):  rafl | 2009-08-21 17:12:57 +0100
Conflict with the latest mason view, which blows up because of the new component_name constructor arg.
r11184@t0mlaptop (orig r11183):  rafl | 2009-08-21 17:13:05 +0100
Version 5.80008.
r11190@t0mlaptop (orig r11189):  t0m | 2009-08-21 20:54:58 +0100
Fix and tests for big issue in 5.80008
r11191@t0mlaptop (orig r11190):  rafl | 2009-08-21 21:28:30 +0100
Version 5.80009.
r11193@t0mlaptop (orig r11192):  rafl | 2009-08-21 21:55:25 +0100
DOH! do more than one read, if necessary.
r11194@t0mlaptop (orig r11193):  rafl | 2009-08-21 22:22:36 +0100
Do what we want instead of exiting a sub via last.
r11195@t0mlaptop (orig r11194):  rafl | 2009-08-21 22:22:45 +0100
Add test for sending the body from a filehandle with more data than the default chunksize of 64k.
r11196@t0mlaptop (orig r11195):  rafl | 2009-08-21 22:31:38 +0100
Changelogging.
r11197@t0mlaptop (orig r11196):  rafl | 2009-08-21 22:41:05 +0100
Version 5.80010.
r11215@t0mlaptop (orig r11214):  rafl | 2009-08-22 20:56:53 +0100
Remove leftovers of the restarter engine.

The removed code caused test failures, which weren't apparent due to installed
copies still being available in everyone's @INC.
r11218@t0mlaptop (orig r11217):  rafl | 2009-08-23 12:46:42 +0100
Changelogging.
r11219@t0mlaptop (orig r11218):  rafl | 2009-08-23 12:55:48 +0100
Version 5.80011.
r11221@t0mlaptop (orig r11220):  rafl | 2009-08-23 19:42:17 +0100
Failing test for component loading
r11233@t0mlaptop (orig r11232):  t0m | 2009-08-24 13:51:03 +0100
Test fixes for if CATALYST_DEBUG is set to 1.
r11239@t0mlaptop (orig r11238):  t0m | 2009-08-25 12:25:54 +0100
0003-Remove-diag-message.patch (marcus)
r11240@t0mlaptop (orig r11239):  t0m | 2009-08-25 12:26:15 +0100
Fix duplicate components
r11252@t0mlaptop (orig r11251):  frew | 2009-08-26 20:00:01 +0100
Look!  I'm famous!  (See Catalyst-Devel)
r11254@t0mlaptop (orig r11253):  dandv | 2009-08-27 01:56:26 +0100
POD addition: $c->req->body returns a string or a File::Temp object
r11278@t0mlaptop (orig r11277):  t0m | 2009-09-01 02:07:23 +0100
Nuke skipped test which will never pass
r11279@t0mlaptop (orig r11278):  t0m | 2009-09-01 02:07:47 +0100
Author tests
r11280@t0mlaptop (orig r11279):  t0m | 2009-09-01 02:09:29 +0100
t/author in MANFEST
r11281@t0mlaptop (orig r11280):  t0m | 2009-09-01 02:10:46 +0100
Stop remote tests breaking everything, and force authors to run some remote tests.
r11282@t0mlaptop (orig r11281):  t0m | 2009-09-01 02:11:33 +0100
Stop calling class data methods on instances + commented out warning
r11283@t0mlaptop (orig r11282):  t0m | 2009-09-01 02:11:45 +0100
Changelog
r11300@t0mlaptop (orig r11292):  t0m | 2009-09-01 15:11:05 +0100
Bump versions back to 5.8.4
r11301@t0mlaptop (orig r11293):  t0m | 2009-09-01 15:32:46 +0100
Changes tweaks
r11307@t0mlaptop (orig r11299):  t0m | 2009-09-02 03:03:58 +0100
Changelogging
r11361@t0mlaptop (orig r11331):  t0m | 2009-09-07 15:45:01 +0100
Fix hash key name back to what it used to be for compat, keeping renamed accessor where it was. Tests for this breakage to follow
r11363@t0mlaptop (orig r11333):  t0m | 2009-09-07 21:19:40 +0100
Test for r11331 + fix to only report each action name once from get_action_methods
r11364@t0mlaptop (orig r11334):  t0m | 2009-09-07 21:21:52 +0100
I'm an idiot, that totally doesn't work. remove.
r11365@t0mlaptop (orig r11335):  t0m | 2009-09-07 21:25:53 +0100
AGH. Too tired to be doing this, fucked it up again
r11366@t0mlaptop (orig r11336):  t0m | 2009-09-07 21:33:31 +0100
Fix duplicate results from get_action_methods. Q. Why didn't I just do that first time round? A: Am idiot.
r11369@t0mlaptop (orig r11339):  marcus | 2009-09-09 18:05:32 +0100
un-TODO passing TODO tests
r11370@t0mlaptop (orig r11340):  marcus | 2009-09-09 18:08:03 +0100
Prepare for release
r11374@t0mlaptop (orig r11344):  groditi | 2009-09-09 22:06:59 +0100
add myself to contributors
r11375@t0mlaptop (orig r11345):  t0m | 2009-09-10 01:13:56 +0100
Fix warnings in upcoming moose
r11377@t0mlaptop (orig r11347):  t0m | 2009-09-10 02:14:13 +0100
 r11046@t0mlaptop (orig r11045):  yousef | 2009-08-07 00:07:07 +0100
 Moved action methods from t/lib/TestApp.pm to t/lib/Test/Controller/Root.pm. Uncommented the if statement in lib/Catalyst/Controller.pm that checks for actions in the appclass.

r11378@t0mlaptop (orig r11348):  t0m | 2009-09-10 02:20:55 +0100
Eat the merge mark, svk hates me.
r11379@t0mlaptop (orig r11349):  t0m | 2009-09-10 03:13:04 +0100
Blargh. Merge branch deprecate_appclass_actions manually, with svn merge http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Runtime/5.80/trunk http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Runtime/5.80/branches/deprecate_appclass_actions . after I forgot -l on svk push, but ctrl-C after the first rev meant svk had already committed a merge mark and re-merging did nothing, and removing it didn't do the right thing. Fail cake..
r11380@t0mlaptop (orig r11350):  hobbs | 2009-09-10 08:20:31 +0100
Rework the C<< $c->go >> documentation a little, hopefully it's more clear.

r11382@t0mlaptop (orig r11352):  autarch | 2009-09-11 03:48:29 +0100
Preserve immutable_options when temporarily making a class mutable

r11383@t0mlaptop (orig r11353):  t0m | 2009-09-11 09:18:09 +0100
Work with old and new Moose
r11393@t0mlaptop (orig r11363):  autarch | 2009-09-14 19:37:25 +0100
The warning about a class having mutable ancestors has been removed (and was never in a non-dev Moose release)

r11396@t0mlaptop (orig r11366):  t0m | 2009-09-15 21:48:19 +0100
Remove what is now lies from Changes. Bump all the deps which need to be bumped to not crap warnings everywhere
r11399@t0mlaptop (orig r11369):  t0m | 2009-09-16 18:14:29 +0100
Changelog
r11400@t0mlaptop (orig r11370):  t0m | 2009-09-16 18:15:52 +0100
Now we depend on latest Moose we are certain to have immutable options
r11401@t0mlaptop (orig r11371):  t0m | 2009-09-17 09:52:34 +0100
-short is dead, RT#49771
r11402@t0mlaptop (orig r11372):  t0m | 2009-09-17 09:52:52 +0100
Add note about actions in appclass being deprecated
r11403@t0mlaptop (orig r11373):  t0m | 2009-09-17 09:54:45 +0100
Add note about ::[MVC]:: warnings
r11404@t0mlaptop (orig r11374):  t0m | 2009-09-17 09:58:15 +0100
Re-space current release changelog to align with the rest. Move -short changelog to the right place.
r11405@t0mlaptop (orig r11375):  rafl | 2009-09-17 10:33:28 +0100
Version 5.80013.
r11407@t0mlaptop (orig r11377):  t0m | 2009-09-17 14:32:16 +0100
Well, that got forgotten, oops
r11426@t0mlaptop (orig r11396):  rafl | 2009-09-20 15:01:45 +0100
Fix a syntax error in the ContextClosure pod.
r11427@t0mlaptop (orig r11397):  rafl | 2009-09-20 15:01:51 +0100
Use clean instead of autoclean in the ContextClosure synopsis until we've fixed the issues with that and MXMA.
r11428@t0mlaptop (orig r11398):  gbjk | 2009-09-21 15:05:17 +0100
- Fix go / visit expecting captures and arguments in reverse order.

r11429@t0mlaptop (orig r11399):  mateu | 2009-09-21 19:57:14 +0100
Update $c->forward and $c->state documentation to address scalar context.
r11430@t0mlaptop (orig r11400):  t0m | 2009-09-23 15:48:06 +0100
Dep bump
r11452@t0mlaptop (orig r11422):  t0m | 2009-09-25 13:03:50 +0100
Remove warnings for using Catalyst::Dispatcher->dispatch_types
r11459@t0mlaptop (orig r11429):  t0m | 2009-09-27 13:27:41 +0100
Optional test not optional for authors
r11460@t0mlaptop (orig r11430):  t0m | 2009-09-27 13:33:05 +0100
Make r11422 not break stuff - idiot :(
r11487@t0mlaptop (orig r11457):  t0m | 2009-10-05 22:59:47 +0100
 r11483@t0mlaptop (orig r11453):  abraxxa | 2009-10-05 12:57:34 +0100
 Improved the suggested fix warning when component resolution uses regex fallback for fully qualified component names.
 Added disable_component_resolution_regex_fallback config option to switch off regex fallback for component resolution.

r11488@t0mlaptop (orig r11458):  t0m | 2009-10-05 22:59:52 +0100
 r11486@t0mlaptop (orig r11456):  t0m | 2009-10-05 22:59:01 +0100
 Tidy up changelog/attribution

r11503@t0mlaptop (orig r11468):  ilmari | 2009-10-06 16:30:41 +0100
Set ->request on the response object i Catalyst::Test::local_request--This line, and those below, will be ignored--

M    t/unit_load_catalyst_test.t
M    lib/Catalyst/Test.pm
M    Changes

r11519@t0mlaptop (orig r11484):  phaylon | 2009-10-07 18:21:47 +0100
added stub config section (incl TODO) to Cat.pm for things like 'current_view'
r11548@t0mlaptop (orig r11513):  caelum | 2009-10-12 17:18:22 +0100
fix uninitialized warning in ACL
r11549@t0mlaptop (orig r11514):  caelum | 2009-10-12 17:22:08 +0100
better fix for uninitialized warning
r11550@t0mlaptop (orig r11515):  t0m | 2009-10-12 18:10:32 +0100
Less cargo cult madness
r11554@t0mlaptop (orig r11519):  caelum | 2009-10-13 15:37:02 +0100
more correct fix for uninitialized warning from ACL
r11556@t0mlaptop (orig r11521):  dhoss | 2009-10-14 01:14:42 +0100
Snow Leopard uses COPYFILE_DISABLE
r11557@t0mlaptop (orig r11522):  dhoss | 2009-10-14 01:20:06 +0100
fixed regex for next mac codename/version, will have to actually figure out what the 10.7 codename is when it arrives
r11558@t0mlaptop (orig r11523):  dhoss | 2009-10-14 01:23:45 +0100
Attempted to make the error message more obvious
r11561@t0mlaptop (orig r11526):  dhoss | 2009-10-14 01:50:26 +0100
fixed error message for mac osx 10.7
r11568@t0mlaptop (orig r11533):  hobbs | 2009-10-15 03:32:28 +0100
Give people a pointer to chase if they're looking for info on $c->req->user

r11574@t0mlaptop (orig r11539):  t0m | 2009-10-15 22:19:26 +0100
Add docs I promised for  r11484
r11622@t0mlaptop (orig r11587):  jshirley | 2009-10-16 21:06:19 +0100
The longawaited nginx patch to support non-root apps, and some pod
r11623@t0mlaptop (orig r11588):  jshirley | 2009-10-16 21:07:29 +0100
Changes for nginx patches
r11624@t0mlaptop (orig r11589):  jshirley | 2009-10-16 21:08:55 +0100
My favorite color is clear and I like to eat rocks
r11670@t0mlaptop (orig r11635):  t0m | 2009-10-19 18:02:59 +0100
Remove warnings from duplicate action declerations
r11675@t0mlaptop (orig r11640):  poisonbit | 2009-10-20 21:12:46 +0100
Example added to #Actions_in_your_application_class

r11676@t0mlaptop (orig r11641):  poisonbit | 2009-10-20 21:32:41 +0100
Formating (a lost space and line break)

r11677@t0mlaptop (orig r11642):  poisonbit | 2009-10-20 21:34:45 +0100
More regresion from 11640, correcting parentheses and endpoint.

r11678@t0mlaptop (orig r11643):  poisonbit | 2009-10-20 22:08:47 +0100
Change in actions inside roles.
http://bobtfish.livejournal.com/264317.html

r11679@t0mlaptop (orig r11644):  poisonbit | 2009-10-20 23:16:03 +0100
Fixes to pass podchecker OK

r11714@t0mlaptop (orig r11679):  rafl | 2009-10-28 23:54:56 +0000
Enable Catalyst::Utils::home() to find home within Dist::Zilla built dists.

Courtesy of nperez.
r11716@t0mlaptop (orig r11681):  t0m | 2009-10-29 00:43:07 +0000
Make URI a link to make it super obvious
r11796@t0mlaptop (orig r11761):  t0m | 2009-11-05 00:11:15 +0000
Need newer LWP for tests to pass as suggested on list by Jose Luis Martinez
r11811@t0mlaptop (orig r11776):  altreus | 2009-11-06 17:09:51 +0000
Add doc for no-args call to ->uri_for
r11813@t0mlaptop (orig r11778):  dhoss | 2009-11-06 17:13:27 +0000
fixed options passed to devel server so that author tests pass
r11814@t0mlaptop (orig r11779):  altreus | 2009-11-06 17:14:49 +0000
Amend doc to not mention using undef in ->uri_for
r11816@t0mlaptop (orig r11781):  t0m | 2009-11-07 16:50:59 +0000
Back out change from -port to -l - svn merge -r 11778:11777
r11823@t0mlaptop (orig r11788):  rafl | 2009-11-09 22:21:19 +0000
Make request->body fail when used as a writer.
r11824@t0mlaptop (orig r11789):  t0m | 2009-11-10 19:51:33 +0000
Fix changelog, me--
r11825@t0mlaptop (orig r11790):  t0m | 2009-11-10 19:56:09 +0000
Warn on case_sensitive being set, remove documentation
r11827@t0mlaptop (orig r11792):  t0m | 2009-11-10 21:36:06 +0000
Return 1, only currently works by chance
r11828@t0mlaptop (orig r11793):  t0m | 2009-11-10 21:37:26 +0000
Also retarded
r11829@t0mlaptop (orig r11794):  t0m | 2009-11-10 21:41:27 +0000
And lets not change behaviour with the log flush change..
r11836@t0mlaptop (orig r11801):  t0m | 2009-11-12 01:12:05 +0000
Bring the changelog up to date.
r11839@t0mlaptop (orig r11804):  t0m | 2009-11-12 01:44:46 +0000
 r11462@t0mlaptop (orig r11432):  rafl | 2009-09-27 16:06:26 +0100
 More aggregated tests.
 r11463@t0mlaptop (orig r11433):  rafl | 2009-09-27 16:06:36 +0100
 Fix a couple of aggregation warnings.
 r11464@t0mlaptop (orig r11434):  rafl | 2009-09-27 16:06:51 +0100
 More aggregation.
 r11465@t0mlaptop (orig r11435):  rafl | 2009-09-27 16:28:04 +0100
 Make things run again with aggregation disabled.
 r11838@t0mlaptop (orig r11803):  t0m | 2009-11-12 01:39:56 +0000
 Patch up changes to tests into new location. This merges parts of the following commits which were missed by svk:

 -r11456:11457 http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Runtime/5.80/trunk
 -r11467:11468 http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Runtime/5.80/trunk

r11841@t0mlaptop (orig r11806):  bricas | 2009-11-12 17:58:02 +0000
remove duplicate changelog entry
r11847@t0mlaptop (orig r11812):  t0m | 2009-11-12 23:57:15 +0000
 r11668@t0mlaptop (orig r11633):  t0m | 2009-10-19 17:53:27 +0100
 Branch for uri encoding things in uri_for in some way that means you can round trip path parts like '24/7', but without totally breaking backward compatibility this time hopefully.

 r11669@t0mlaptop (orig r11634):  t0m | 2009-10-19 17:54:08 +0100
 Well, this fixes my current issue, and doesn't seem to break any tests.. This likely means that the tests are still shit
 r11769@t0mlaptop (orig r11734):  t0m | 2009-11-04 19:17:33 +0000
 Needed for authors to run optional http test
 r11833@t0mlaptop (orig r11798):  t0m | 2009-11-12 00:22:06 +0000
 Tests, fix args as well as captureargs and be less violent - only encode /
 r11840@t0mlaptop (orig r11805):  rafl | 2009-11-12 16:08:57 +0000
 trailing whitespace
 r11843@t0mlaptop (orig r11808):  t0m | 2009-11-12 23:41:17 +0000
 Tidy up a bit
 r11845@t0mlaptop (orig r11810):  t0m | 2009-11-12 23:46:28 +0000
 Changelog
 r11846@t0mlaptop (orig r11811):  t0m | 2009-11-12 23:56:36 +0000
 Don't fail the live tests by only looking for http://localhost/etc..

r11858@t0mlaptop (orig r11823):  t0m | 2009-11-14 17:26:04 +0000
Pod patch
r11860@t0mlaptop (orig r11825):  t0m | 2009-11-14 17:30:26 +0000
Pod fixes re RT#51489
r11914@t0mlaptop (orig r11879):  rafl | 2009-11-17 23:00:32 +0000
Merge branch 'exception_interface'

* exception_interface:
  Use MooseX::Role::WithOverloading.
  Add Exception::Interface and Exception::Basic. Make ::Base, ::Go and ::Detach use them.
  Create branch exception_interface
r11953@t0mlaptop (orig r11918):  t0m | 2009-11-19 21:58:59 +0000
Add Pod for all the new exception classes
r11954@t0mlaptop (orig r11919):  t0m | 2009-11-19 22:00:27 +0000
Rename http server test as it is not optional for authors
r11978@t0mlaptop (orig r11943):  rafl | 2009-11-20 06:22:44 +0000
Fix a doc typo.

Also trim some trailing whitespace.
r11979@t0mlaptop (orig r11944):  rafl | 2009-11-20 06:22:51 +0000
Remove some docs for Exception::Go and ::Detach.

Users really shouldn't care.
r11980@t0mlaptop (orig r11945):  rafl | 2009-11-20 07:05:08 +0000
Depend on MX::Role::WithOverloading 0.03 to make sure things work out on 5.8.8 and older.
r11986@t0mlaptop (orig r11951):  rafl | 2009-11-21 01:30:07 +0000
Remove duplicate changelog entry.
r11987@t0mlaptop (orig r11952):  rafl | 2009-11-21 01:43:12 +0000
Improve Exception::Interface docs.
r11988@t0mlaptop (orig r11953):  rafl | 2009-11-21 01:43:28 +0000
More changelogging.
r11989@t0mlaptop (orig r11954):  rafl | 2009-11-21 01:43:57 +0000
Refer to the right ticket in Changes.
r11990@t0mlaptop (orig r11955):  rafl | 2009-11-21 02:31:02 +0000
Version 5.80014.
r11996@t0mlaptop (orig r11961):  zby | 2009-11-21 13:03:43 +0000
warning for plugins inheriting from Catayst::Component
r11998@t0mlaptop (orig r11963):  t0m | 2009-11-22 12:57:30 +0000
Chop out that crap, not needed
r11999@t0mlaptop (orig r11964):  t0m | 2009-11-22 13:01:09 +0000
Do not be @ISA Controller, that's hideous dumb and now warns
r12000@t0mlaptop (orig r11965):  t0m | 2009-11-22 13:01:48 +0000
Do not use NEXT, like it says in the comments
r12001@t0mlaptop (orig r11966):  t0m | 2009-11-22 13:04:50 +0000
Fix unicode issues in CGI and FastCGI engines
r12002@t0mlaptop (orig r11967):  t0m | 2009-11-22 13:08:47 +0000
Changelog, adjust warning text, bump versions for a dev release. The 'we do get Class::C3::Adopt::NEXT warnings test is now broken, no idea why, will look later.
r12003@t0mlaptop (orig r11968):  t0m | 2009-11-22 19:42:30 +0000
Different phrasing for different versions
r12004@t0mlaptop (orig r11969):  t0m | 2009-11-22 19:53:00 +0000
Whoops, fix typo
r12005@t0mlaptop (orig r11970):  t0m | 2009-11-22 19:58:31 +0000
It actually wants 'true', make that more explicit
r12006@t0mlaptop (orig r11971):  t0m | 2009-11-22 19:59:04 +0000
release 5.80014_01
r12008@t0mlaptop (orig r11973):  t0m | 2009-11-22 20:08:28 +0000
Notabs is author only
r12009@t0mlaptop (orig r11974):  t0m | 2009-11-22 20:11:17 +0000
Pod tests are also author only
r12010@t0mlaptop (orig r11975):  t0m | 2009-11-22 20:13:06 +0000
Changelog
r12013@t0mlaptop (orig r11978):  t0m | 2009-11-23 21:25:19 +0000
Don't do bytes::length, just use length, tests to demonstrate the issue
r12014@t0mlaptop (orig r11979):  t0m | 2009-11-23 21:45:55 +0000
Nasty hack for fastcgi, fixes gitalist
r12021@t0mlaptop (orig r11986):  t0m | 2009-11-23 22:57:40 +0000
Have a new conflict statement
r12035@t0mlaptop (orig r12000):  t0m | 2009-11-24 09:50:07 +0000
Trivial Pod fixes
r12055@t0mlaptop (orig r12020):  t0m | 2009-11-26 01:07:08 +0000
Remove test spraff
r12057@t0mlaptop (orig r12022):  t0m | 2009-11-26 01:21:22 +0000
Back out 11979 until I work out why IPC::Run is getting hold of the FCGI file handle
r12070@t0mlaptop (orig r12035):  t0m | 2009-11-26 21:29:32 +0000
Fix test on bleadperl RT#52100
r12095@t0mlaptop (orig r12060):  gshank | 2009-11-27 22:43:11 +0000
testcase for Chained bug - dispatches to wrong action

r12108@t0mlaptop (orig r12073):  rafl | 2009-11-29 16:43:17 +0000
Depend on a recent leakchecker to stop everything from crapping over itself if PadWalker is too old.
r12110@t0mlaptop (orig r12075):  t0m | 2009-11-29 17:16:40 +0000
 r11583@nc10 (orig r10642):  dhoss | 2009-06-24 22:18:13 +0100
 created better scripts branch

 r11584@nc10 (orig r10643):  dhoss | 2009-06-24 22:21:03 +0100
 initial script commit

 r11585@nc10 (orig r10644):  dhoss | 2009-06-24 23:56:42 +0100
 initial ScriptRunner checkin

 r11588@nc10 (orig r10647):  dhoss | 2009-06-25 01:54:12 +0100
 added a test application to get the new scripts working
 created Catalyst::ScriptRunner, Catalyst::Script::*
 got Catalyst::Script::FastCGI running
 wrote a test for Catalyst::Script::FastCGI, but it fails for some reason

 r11590@nc10 (orig r10649):  dhoss | 2009-06-25 02:10:57 +0100
 added dev_server test, poked Catalyst::Script::Create

 r11591@nc10 (orig r10650):  dhoss | 2009-06-25 02:21:18 +0100
 fixed test server, blech

 r11592@nc10 (orig r10651):  dhoss | 2009-06-25 02:28:41 +0100
 pulled crap out of testapp_server

 r11593@nc10 (orig r10652):  dhoss | 2009-06-25 02:41:39 +0100
 fixed server start

 r11594@nc10 (orig r10653):  dhoss | 2009-06-25 03:03:00 +0100
 fixed Server and testapp_server.pl. Test still wonky

 r11595@nc10 (orig r10654):  dhoss | 2009-06-25 03:15:18 +0100
 poked at t/start_dev_server.t
 corrected Server to start with HTTP not CGI

 r11597@nc10 (orig r10656):  dhoss | 2009-06-25 03:30:41 +0100
 updated testapp_cgi.pl
 updated CGI

 r11598@nc10 (orig r10657):  dhoss | 2009-06-25 04:11:14 +0100
 added more to Test, added testapp_test, and worked on start_fcgi

 r11604@nc10 (orig r10663):  dhoss | 2009-06-25 11:37:12 +0100
 updated Makefil.PL

 r11624@nc10 (orig r10683):  dhoss | 2009-06-26 20:46:17 +0100
 updated so that if their class doesn't load, we use ours.

 r11650@nc10 (orig r10709):  dhoss | 2009-06-28 21:33:41 +0100
 added name to contributors list

 r11660@nc10 (orig r10719):  t0m | 2009-06-29 00:12:11 +0100
 Kind of, sort of make the server work, except it doesn't
 r11685@nc10 (orig r10744):  dhoss | 2009-06-30 19:28:47 +0100
 fixed Server

 r11726@nc10 (orig r10785):  dhoss | 2009-07-04 01:41:40 +0100
 help option now has a short option

 r11727@nc10 (orig r10786):  dhoss | 2009-07-04 01:44:15 +0100
 fork now has a short option

 r11728@nc10 (orig r10787):  dhoss | 2009-07-04 01:45:19 +0100
 listen now has a short option

 r11729@nc10 (orig r10788):  dhoss | 2009-07-04 01:49:39 +0100
 doez haz pidfile short opt

 r11730@nc10 (orig r10789):  dhoss | 2009-07-04 01:51:12 +0100
 doez haz keepalive short opt

 r11731@nc10 (orig r10790):  dhoss | 2009-07-04 01:51:35 +0100
 changed pf => pid

 r11732@nc10 (orig r10791):  dhoss | 2009-07-04 01:53:16 +0100
 background now has a short opshun

 r11733@nc10 (orig r10792):  dhoss | 2009-07-04 01:54:29 +0100
 restart has short option

 r11734@nc10 (orig r10793):  dhoss | 2009-07-04 01:56:16 +0100
 restart_delay HAZ OPSHUN

 r11735@nc10 (orig r10794):  dhoss | 2009-07-04 01:57:11 +0100
 restart regex has a short option

 r11736@nc10 (orig r10795):  dhoss | 2009-07-04 01:58:02 +0100
 follow_symlinks has short option

 r11737@nc10 (orig r10796):  dhoss | 2009-07-04 03:01:44 +0100
 Updated testapp_server
 broke Script::Server, why?!

 r11738@nc10 (orig r10797):  dhoss | 2009-07-04 03:57:13 +0100
 added namespace::autoclean to all the helper classes
 removed a redundant use Catalyst::Engine::HTTP

 r11739@nc10 (orig r10798):  dhoss | 2009-07-04 04:25:25 +0100
 added warn to setup. sigh. doesn't appear it's getting called, unless
 i'm way off.

 r11740@nc10 (orig r10799):  dhoss | 2009-07-04 04:27:41 +0100
 untarded!

 r11741@nc10 (orig r10800):  dhoss | 2009-07-04 04:28:15 +0100
 really untarded

 r11778@nc10 (orig r10837):  dhoss | 2009-07-11 00:27:12 +0100
 removed except meta stuff since we're using autoclean

 r11779@nc10 (orig r10838):  dhoss | 2009-07-11 01:06:53 +0100
 fixed Catalyst::Script::Server so app doesn't have to be a cmd line opt

 r11780@nc10 (orig r10839):  dhoss | 2009-07-11 01:14:43 +0100
 removed all required => 0

 r11781@nc10 (orig r10840):  dhoss | 2009-07-11 01:18:23 +0100
 removed "broken" commetn

 r11782@nc10 (orig r10841):  dhoss | 2009-07-11 01:19:41 +0100
 removed debug warn

 r11783@nc10 (orig r10842):  dhoss | 2009-07-11 01:31:58 +0100
 removed default => 0s

 r11784@nc10 (orig r10843):  dhoss | 2009-07-11 01:34:54 +0100
 added debug option

 r11785@nc10 (orig r10844):  dhoss | 2009-07-11 02:50:11 +0100
 fasterized

 r11786@nc10 (orig r10845):  dhoss | 2009-07-11 03:21:41 +0100
 added restarter code

 r11787@nc10 (orig r10846):  dhoss | 2009-07-11 03:24:02 +0100
 fixed follow_symlinks option in restarter code

 r11788@nc10 (orig r10847):  dhoss | 2009-07-11 03:33:44 +0100
 cleaned up sub runner

 r11793@nc10 (orig r10852):  t0m | 2009-07-11 19:10:02 +0100
 Strip trailing spaces
 r11801@nc10 (orig r10860):  autarch | 2009-07-11 20:32:11 +0100
 Get the restarter running
 r11809@nc10 (orig r10868):  t0m | 2009-07-12 18:15:09 +0100
 Too slow
 r11810@nc10 (orig r10869):  t0m | 2009-07-12 18:27:36 +0100
 And unfuck so the app name is passed properly
 r11831@nc10 (orig r10890):  dhoss | 2009-07-15 22:41:11 +0100
 -d and --debug work for me

 r11834@nc10 (orig r10893):  dhoss | 2009-07-16 10:25:47 +0100
 added Deploy prototype

 r11843@nc10 (orig r10902):  dhoss | 2009-07-17 01:52:56 +0100
 untarded and added documentation

 r11844@nc10 (orig r10903):  dhoss | 2009-07-17 01:53:38 +0100
 don't need  -except => [ qw(meta) ] with autoclean

 r11845@nc10 (orig r10904):  dhoss | 2009-07-17 02:00:54 +0100
 added documentation, surely needs refining

 r11846@nc10 (orig r10905):  dhoss | 2009-07-17 02:01:25 +0100
 removed -except => qw[meta]

 r11847@nc10 (orig r10906):  dhoss | 2009-07-17 02:04:12 +0100
 cleaned up

 r11848@nc10 (orig r10907):  dhoss | 2009-07-17 02:12:07 +0100
 added documentation

 r11849@nc10 (orig r10908):  dhoss | 2009-07-17 02:13:28 +0100
 fasterized

 r11850@nc10 (orig r10909):  dhoss | 2009-07-17 02:15:04 +0100
 added MX::Types::Moose

 r11851@nc10 (orig r10910):  dhoss | 2009-07-17 02:24:44 +0100
 added MX::Types::Moose, cleaned up moar

 r11852@nc10 (orig r10911):  dhoss | 2009-07-17 02:43:29 +0100
 created proof of working app

 r11853@nc10 (orig r10912):  dhoss | 2009-07-17 02:44:07 +0100
 removed proof of working tests

 r11966@nc10 (orig r11025):  dhoss | 2009-08-04 01:00:57 +0100
 removed MooseX::Command::* stuff for now

 r11967@nc10 (orig r11026):  dhoss | 2009-08-04 01:01:43 +0100
 removed MooseX::App::CMD* stuff from ScriptRunner

 r11968@nc10 (orig r11027):  dhoss | 2009-08-04 01:22:27 +0100
 split helper into app generation helper and component generation helper (initial split, at least)

 r11976@nc10 (orig r11035):  dhoss | 2009-08-05 21:07:12 +0100
 had this stuff in the wrong branch, blech

 r12162@nc10 (orig r11221):  dhoss | 2009-08-23 21:32:34 +0100
 added command directory structure for MooseX::App::Cmd

 r12236@nc10 (orig r11295):  t0m | 2009-09-02 01:48:38 +0100
  r11288@t0mlaptop:  t0m | 2009-09-02 00:26:10 +0100
  Remove unused TestApp

 r12237@nc10 (orig r11296):  t0m | 2009-09-02 01:48:43 +0100
  r11289@t0mlaptop:  t0m | 2009-09-02 00:33:55 +0100
  Remove DBIC deploy script, this should not be in core runtime

 r12238@nc10 (orig r11297):  t0m | 2009-09-02 01:48:47 +0100
  r11290@t0mlaptop:  t0m | 2009-09-02 01:09:31 +0100
  Remove empty directories

 r12239@nc10 (orig r11298):  t0m | 2009-09-02 01:48:54 +0100
  r11291@t0mlaptop:  t0m | 2009-09-02 01:14:00 +0100
  Factor stuff out into a script role, clean up all the script code

 r12254@nc10 (orig r11313):  t0m | 2009-09-05 16:16:00 +0100
  r11320@tomas-dorans-macbook-pro:  t0m | 2009-09-05 12:38:54 +0100
  Fix passing correct key, re-add getopt trait as this is needed, my bad

 r12255@nc10 (orig r11314):  t0m | 2009-09-05 16:16:04 +0100
  r11321@tomas-dorans-macbook-pro:  t0m | 2009-09-05 12:42:20 +0100
  Make ScriptRunner include the lib path.

 r12256@nc10 (orig r11315):  t0m | 2009-09-05 16:16:08 +0100
  r11322@tomas-dorans-macbook-pro:  t0m | 2009-09-05 12:47:39 +0100
  Fix FastCGI script

 r12257@nc10 (orig r11316):  t0m | 2009-09-05 16:16:13 +0100
  r11323@tomas-dorans-macbook-pro:  t0m | 2009-09-05 12:48:58 +0100
  Fix CGI script

 r12258@nc10 (orig r11317):  t0m | 2009-09-05 16:16:15 +0100
  r11324@tomas-dorans-macbook-pro:  t0m | 2009-09-05 12:56:01 +0100
  Add a short TODO list to complete before this branch is merged

 r12259@nc10 (orig r11318):  t0m | 2009-09-05 16:16:20 +0100
  r11325@tomas-dorans-macbook-pro:  t0m | 2009-09-05 12:57:21 +0100
  Default run methods not required, can be provided by the role

 r12260@nc10 (orig r11319):  t0m | 2009-09-05 16:16:25 +0100
  r11326@tomas-dorans-macbook-pro:  t0m | 2009-09-05 13:00:17 +0100
  Documentation dinks

 r12261@nc10 (orig r11320):  t0m | 2009-09-05 16:16:30 +0100
  r11327@tomas-dorans-macbook-pro:  t0m | 2009-09-05 13:01:00 +0100
  Gawd, that is out of date

 r12262@nc10 (orig r11321):  t0m | 2009-09-05 16:16:33 +0100
  r11328@tomas-dorans-macbook-pro:  t0m | 2009-09-05 13:06:34 +0100
  More POD

 r12263@nc10 (orig r11322):  t0m | 2009-09-05 16:16:37 +0100
  r11329@tomas-dorans-macbook-pro:  t0m | 2009-09-05 13:08:41 +0100
  We need to depend on MX::Types, and ::StashChange not needed any more

 r12264@nc10 (orig r11323):  t0m | 2009-09-05 16:16:41 +0100
  r11330@tomas-dorans-macbook-pro:  t0m | 2009-09-05 13:09:11 +0100
  We also need autoclean

 r12265@nc10 (orig r11324):  t0m | 2009-09-05 16:16:48 +0100
  r11331@tomas-dorans-macbook-pro:  t0m | 2009-09-05 13:43:25 +0100
  Basic tests for ScriptRunner, more needed

 r12320@nc10 (orig r11379):  t0m | 2009-09-17 22:47:22 +0100
 Skeleton testapp for testing the args thrown to the run method by scripts
 r12321@nc10 (orig r11380):  t0m | 2009-09-17 23:10:46 +0100
 Meh, that shows what I mean. This can be done waaaay more elegantly by abstracting the testing logic..
 r12377@nc10 (orig r11436):  zts | 2009-09-27 20:12:39 +0100
 Further tests for Server script option parsing.
 Also, first pass at abstracting the test logic.  Currently very ugly.

 r12402@nc10 (orig r11461):  t0m | 2009-10-05 23:17:11 +0100
 And start the app correctly(ish) under the restarter - really not sure args are perserved correctly?
 r12908@nc10 (orig r11777):  dhoss | 2009-11-06 17:12:25 +0000
 fixed dev server options so that test now passes
 r12911@nc10 (orig r11780):  dhoss | 2009-11-06 17:25:35 +0000
 unfucked test server options and made test pass f'real this time
 r13011@nc10 (orig r11880):  t0m | 2009-11-18 00:51:29 +0000
 Beat somewhat into shape by comparing the old and new docs. Need to write basic tests for the other scripts.
 r13052@nc10 (orig r11921):  t0m | 2009-11-19 22:23:58 +0000
 Move to aggregate
 r13053@nc10 (orig r11922):  t0m | 2009-11-19 23:32:24 +0000
 Unified help display, at the cost of having lost the info about what you fucked up. Neither of these are particularly helpful, but this is at least uniform
 r13054@nc10 (orig r11923):  t0m | 2009-11-19 23:48:42 +0000
 Cleanup and some moar tests
 r13055@nc10 (orig r11924):  t0m | 2009-11-20 00:00:02 +0000
 More tests for help, proving it's still bork
 r13056@nc10 (orig r11925):  t0m | 2009-11-20 00:13:53 +0000
 Basic tests for fcgi script
 r13057@nc10 (orig r11926):  t0m | 2009-11-20 00:44:35 +0000
 Fix script_test.pl
 r13058@nc10 (orig r11927):  t0m | 2009-11-20 00:45:13 +0000
 Pass Pod coverage
 r13059@nc10 (orig r11928):  t0m | 2009-11-20 01:00:24 +0000
 Nested TAP and Test::Aggregate don't play nice together. It was cute, but screw it, sorry zts
 r13060@nc10 (orig r11929):  t0m | 2009-11-20 01:01:47 +0000
 Fugly test for myapp_test.pl. If someone fancies rewriting the IO redirection to be less gross then I loveyoulongtime
 r13061@nc10 (orig r11930):  t0m | 2009-11-20 01:07:04 +0000
 Update todo on this branch
 r13123@nc10 (orig r11992):  t0m | 2009-11-23 23:40:57 +0000
 Fix duplicate short options issue
 r13124@nc10 (orig r11993):  t0m | 2009-11-23 23:43:32 +0000
 Chomp trailing space
 r13125@nc10 (orig r11994):  t0m | 2009-11-23 23:49:10 +0000
 And do that in a way which actually works
 r13126@nc10 (orig r11995):  t0m | 2009-11-23 23:56:49 +0000
 Fix test
 r13127@nc10 (orig r11996):  t0m | 2009-11-24 00:15:45 +0000
 Add tests for the create script and fix the bugs that this shows up
 r13146@nc10 (orig r12015):  t0m | 2009-11-25 22:32:11 +0000
 Fix warnings from ScriptRunner
 r13147@nc10 (orig r12016):  t0m | 2009-11-25 22:51:28 +0000
 Fix big bug in test
 r13148@nc10 (orig r12017):  t0m | 2009-11-26 00:25:01 +0000
 Get useful help about which option you fucked up back
 r13149@nc10 (orig r12018):  t0m | 2009-11-26 00:35:31 +0000
 Remove most of the horrible
 r13150@nc10 (orig r12019):  t0m | 2009-11-26 01:02:52 +0000
 Tidy up help and TODO tests
 r13161@nc10 (orig r12030):  t0m | 2009-11-26 01:53:20 +0000
 Fix up docs
 r13162@nc10 (orig r12031):  t0m | 2009-11-26 02:23:00 +0000
 Factor restarter arg assembly out into it's own routine for ease of testing. Use $self->ARGV instead of $ARGV
 r13165@nc10 (orig r12034):  t0m | 2009-11-26 21:02:57 +0000
 Fix typo, bricas++, add simple test for restarter arguments
 r13175@nc10 (orig r12044):  t0m | 2009-11-26 23:40:27 +0000
 Pass app name into constructor
 r13185@nc10 (orig r12054):  t0m | 2009-11-27 02:08:33 +0000
 Bump version in runtime branch
 r13192@nc10 (orig r12061):  t0m | 2009-11-28 12:38:12 +0000
 Adding the files you need for the tests you've committed helps them pass, idiot :)
 r13194@nc10 (orig r12063):  rafl | 2009-11-29 14:00:12 +0000
 Depend on a new CMOP because we rely on its new load_class error messages.
 r13195@nc10 (orig r12064):  rafl | 2009-11-29 14:00:19 +0000
 Make follow_symlinks more consistent with the other restarter args.
 r13196@nc10 (orig r12065):  rafl | 2009-11-29 14:00:25 +0000
 Properly validate restart regexen.
 r13197@nc10 (orig r12066):  rafl | 2009-11-29 14:00:31 +0000
 Tidy up some attr definitions.
 r13198@nc10 (orig r12067):  rafl | 2009-11-29 14:00:38 +0000
 Port numbers need to be > 0.
 r13199@nc10 (orig r12068):  rafl | 2009-11-29 14:00:43 +0000
 Remove useless lexical.
 r13200@nc10 (orig r12069):  rafl | 2009-11-29 14:00:51 +0000
 Less trailing whitespace.
 r13201@nc10 (orig r12070):  rafl | 2009-11-29 15:33:48 +0000
 This is not a release.
 r13202@nc10 (orig r12071):  rafl | 2009-11-29 15:33:55 +0000
 Tidy things up a little and fix pod usage.

r12121@t0mlaptop (orig r12086):  t0m | 2009-11-30 22:59:15 +0000
Require new M::I
r12126@t0mlaptop (orig r12091):  t0m | 2009-12-01 00:09:19 +0000
 r12113@t0mlaptop (orig r12078):  t0m | 2009-11-30 18:25:57 +0000
 Branch for path_info fixes. This may be short lived, but worth doing..

 r12114@t0mlaptop (orig r12079):  t0m | 2009-11-30 18:26:34 +0000
 Commit miyagawa's fix for PATH_INFO decoding. I think that this also implies changes / fixes in the fcgi _fix_env stuff
 r12116@t0mlaptop (orig r12081):  t0m | 2009-11-30 20:44:16 +0000
 And yea, these test cases now pass
 r12118@t0mlaptop (orig r12083):  t0m | 2009-11-30 21:02:14 +0000
 I think the nginx hackery can just die with the new code in ::Engine::CGI
 r12119@t0mlaptop (orig r12084):  t0m | 2009-11-30 22:05:41 +0000
 Back out r12083, also clarify the docs - like this works for me now, and the bottom para seems the wrong way round...?
 r12122@t0mlaptop (orig r12087):  t0m | 2009-11-30 23:17:33 +0000
 Require new HTTP::Request::AsCGI
 r12124@t0mlaptop (orig r12089):  t0m | 2009-11-30 23:23:38 +0000
 Rewrite changelog entry to be more complete

r12127@t0mlaptop (orig r12092):  t0m | 2009-12-01 00:52:57 +0000
TODO out gshanks chained tests
r12128@t0mlaptop (orig r12093):  t0m | 2009-12-01 00:54:23 +0000
Bump deps and changelog for another dev release with new scripts and scary path resolving changes so I can have another call to test.

1  2 
lib/Catalyst.pm

diff --combined lib/Catalyst.pm
@@@ -4,7 -4,6 +4,6 @@@ use Moose
  use Moose::Meta::Class ();
  extends 'Catalyst::Component';
  use Moose::Util qw/find_meta/;
- use bytes;
  use B::Hooks::EndOfScope ();
  use Catalyst::Exception;
  use Catalyst::Exception::Detach;
@@@ -27,11 -26,12 +26,12 @@@ use URI::https
  use Tree::Simple qw/use_weak_refs/;
  use Tree::Simple::Visitor::FindByUID;
  use Class::C3::Adopt::NEXT;
+ use List::MoreUtils qw/uniq/;
  use attributes;
  use utf8;
  use Carp qw/croak carp shortmess/;
  
- BEGIN { require 5.008001; }
+ BEGIN { require 5.008004; }
  
  has stack => (is => 'ro', default => sub { [] });
  has stash => (is => 'rw', default => sub { {} });
@@@ -78,7 -78,7 +78,7 @@@ __PACKAGE__->stats_class('Catalyst::Sta
  
  # Remember to update this in Catalyst::Runtime as well!
  
- our $VERSION = '5.80007';
+ our $VERSION = '5.80014_02';
  
  {
      my $dev_version = $VERSION =~ /_\d{2}$/;
@@@ -335,9 -335,11 +335,11 @@@ call to forward
      $c->forward(qw/MyApp::Model::DBIC::Foo do_stuff/);
      $c->forward('MyApp::View::TT');
  
- Note that forward implies an C<<eval { }>> around the call (actually
- C<execute> does), thus de-fatalizing all 'dies' within the called
- action. If you want C<die> to propagate you need to do something like:
+ Note that L<< forward|/"$c->forward( $action [, \@arguments ] )" >> implies
+ an C<< eval { } >> around the call (actually
+ L<< execute|/"$c->execute( $class, $coderef )" >> does), thus de-fatalizing
+ all 'dies' within the called action. If you want C<die> to propagate you
+ need to do something like:
  
      $c->forward('foo');
      die $c->error if $c->error;
@@@ -346,6 -348,21 +348,21 @@@ Or make sure to always return true valu
  your code like this:
  
      $c->forward('foo') || return;
+     
+ Another note is that C<< $c->forward >> always returns a scalar because it
+ actually returns $c->state which operates in a scalar context.
+ Thus, something like:
+     return @array;
+     
+ in an action that is forwarded to is going to return a scalar, 
+ i.e. how many items are in that array, which is probably not what you want.
+ If you need to return an array then return a reference to it, 
+ or stash it like so:
+     $c->stash->{array} = \@array;
+ and access it from the stash.
  
  =cut
  
@@@ -357,8 -374,8 +374,8 @@@ sub forward { my $c = shift; no warning
  
  =head2 $c->detach()
  
- The same as C<forward>, but doesn't return to the previous action when
- processing is finished.
+ The same as L<< forward|/"$c->forward( $action [, \@arguments ] )" >>, but
+ doesn't return to the previous action when processing is finished.
  
  When called with no arguments it escapes the processing chain entirely.
  
@@@ -370,23 -387,27 +387,27 @@@ sub detach { my $c = shift; $c->dispatc
  
  =head2 $c->visit( $class, $method, [, \@captures, \@arguments ] )
  
- Almost the same as C<forward>, but does a full dispatch, instead of just
- calling the new C<$action> / C<$class-E<gt>$method>. This means that C<begin>,
- C<auto> and the method you go to are called, just like a new request.
+ Almost the same as L<< forward|/"$c->forward( $action [, \@arguments ] )" >>,
+ but does a full dispatch, instead of just calling the new C<$action> /
+ C<< $class->$method >>. This means that C<begin>, C<auto> and the method
+ you go to are called, just like a new request.
  
  In addition both C<< $c->action >> and C<< $c->namespace >> are localized.
- This means, for example, that $c->action methods such as C<name>, C<class> and
- C<reverse> return information for the visited action when they are invoked
- within the visited action.  This is different from the behavior of C<forward>
- which continues to use the $c->action object from the caller action even when
+ This means, for example, that C<< $c->action >> methods such as
+ L<name|Catalyst::Action/name>, L<class|Catalyst::Action/class> and
+ L<reverse|Catalyst::Action/reverse> return information for the visited action
+ when they are invoked within the visited action.  This is different from the
+ behavior of L<< forward|/"$c->forward( $action [, \@arguments ] )" >>, which
+ continues to use the $c->action object from the caller action even when
  invoked from the callee.
  
- C<$c-E<gt>stash> is kept unchanged.
+ C<< $c->stash >> is kept unchanged.
  
- In effect, C<visit> allows you to "wrap" another action, just as it
- would have been called by dispatching from a URL, while the analogous
- C<go> allows you to transfer control to another action as if it had
- been reached directly from a URL.
+ In effect, L<< visit|/"$c->visit( $action [, \@captures, \@arguments ] )" >>
+ allows you to "wrap" another action, just as it would have been called by
+ dispatching from a URL, while the analogous
+ L<< go|/"$c->go( $action [, \@captures, \@arguments ] )" >> allows you to
+ transfer control to another action as if it had been reached directly from a URL.
  
  =cut
  
@@@ -396,12 -417,15 +417,15 @@@ sub visit { my $c = shift; $c->dispatch
  
  =head2 $c->go( $class, $method, [, \@captures, \@arguments ] )
  
- Almost the same as C<detach>, but does a full dispatch like C<visit>,
- instead of just calling the new C<$action> /
- C<$class-E<gt>$method>. This means that C<begin>, C<auto> and the
- method you visit are called, just like a new request.
- C<$c-E<gt>stash> is kept unchanged.
+ The relationship between C<go> and 
+ L<< visit|/"$c->visit( $action [, \@captures, \@arguments ] )" >> is the same as
+ the relationship between 
+ L<< forward|/"$c->forward( $class, $method, [, \@arguments ] )" >> and
+ L<< detach|/"$c->detach( $action [, \@arguments ] )" >>. Like C<< $c->visit >>,
+ C<< $c->go >> will perform a full dispatch on the specified action or method,
+ with localized C<< $c->action >> and C<< $c->namespace >>. Like C<detach>,
+ C<go> escapes the processing of the current request chain on completion, and
+ does not return to its caller.
  
  =cut
  
@@@ -480,7 -504,9 +504,9 @@@ sub error 
  
  =head2 $c->state
  
- Contains the return value of the last executed action.
+ Contains the return value of the last executed action.   
+ Note that << $c->state >> operates in a scalar context which means that all
+ values it returns are scalar.
  
  =head2 $c->clear_errors
  
@@@ -525,6 -551,10 +551,10 @@@ sub _comp_names_search_prefixes 
      # if we were given a regexp to search against, we're done.
      return if ref $name;
  
+     # skip regexp fallback if configured
+     return
+         if $appclass->config->{disable_component_resolution_regex_fallback};
      # regexp fallback
      $query  = qr/$name/i;
      @result = grep { $eligible{ $_ } =~ m{$query} } keys %eligible;
             (join '", "', @result) . "'. Relying on regexp fallback behavior for " .
             "component resolution is unreliable and unsafe.";
          my $short = $result[0];
-         $short =~ s/.*?Model:://;
+         # remove the component namespace prefix
+         $short =~ s/.*?(Model|Controller|View):://;
          my $shortmess = Carp::shortmess('');
          if ($shortmess =~ m#Catalyst/Plugin#) {
             $msg .= " You probably need to set '$short' instead of '${name}' in this " .
             $msg .= " You probably need to set '$short' instead of '${name}' in this " .
                "component's config";
          } else {
-            $msg .= " You probably meant \$c->${warn_for}('$short') instead of \$c->${warn_for}({'${name}'}), " .
+            $msg .= " You probably meant \$c->${warn_for}('$short') instead of \$c->${warn_for}('${name}'), " .
                "but if you really wanted to search, pass in a regexp as the argument " .
                "like so: \$c->${warn_for}(qr/${name}/)";
          }
@@@ -639,7 -670,7 +670,7 @@@ If you want to search for models, pass 
  
  sub model {
      my ( $c, $name, @args ) = @_;
+     my $appclass = ref($c) || $c;
      if( $name ) {
          my @result = $c->_comp_search_prefixes( $name, qw/Model M/ );
          return map { $c->_filter_component( $_, @args ) } @result if ref $name;
          return $c->model( $c->stash->{current_model} )
            if $c->stash->{current_model};
      }
-     return $c->model( $c->config->{default_model} )
-       if $c->config->{default_model};
+     return $c->model( $appclass->config->{default_model} )
+       if $appclass->config->{default_model};
  
      my( $comp, $rest ) = $c->_comp_search_prefixes( undef, qw/Model M/);
  
      if( $rest ) {
          $c->log->warn( Carp::shortmess('Calling $c->model() will return a random model unless you specify one of:') );
-         $c->log->warn( '* $c->config->{default_model} # the name of the default model to use' );
+         $c->log->warn( '* $c->config(default_model => "the name of the default model to use")' );
          $c->log->warn( '* $c->stash->{current_model} # the name of the model to use for this request' );
          $c->log->warn( '* $c->stash->{current_model_instance} # the instance of the model to use for this request' );
          $c->log->warn( 'NB: in version 5.81, the "random" behavior will not work at all.' );
@@@ -693,6 -724,7 +724,7 @@@ If you want to search for views, pass i
  sub view {
      my ( $c, $name, @args ) = @_;
  
+     my $appclass = ref($c) || $c;
      if( $name ) {
          my @result = $c->_comp_search_prefixes( $name, qw/View V/ );
          return map { $c->_filter_component( $_, @args ) } @result if ref $name;
          return $c->view( $c->stash->{current_view} )
            if $c->stash->{current_view};
      }
-     return $c->view( $c->config->{default_view} )
-       if $c->config->{default_view};
+     return $c->view( $appclass->config->{default_view} )
+       if $appclass->config->{default_view};
  
      my( $comp, $rest ) = $c->_comp_search_prefixes( undef, qw/View V/);
  
      if( $rest ) {
          $c->log->warn( 'Calling $c->view() will return a random view unless you specify one of:' );
-         $c->log->warn( '* $c->config->{default_view} # the name of the default view to use' );
+         $c->log->warn( '* $c->config(default_view => "the name of the default view to use")' );
          $c->log->warn( '* $c->stash->{current_view} # the name of the view to use for this request' );
          $c->log->warn( '* $c->stash->{current_view_instance} # the instance of the view to use for this request' );
          $c->log->warn( 'NB: in version 5.81, the "random" behavior will not work at all.' );
@@@ -767,6 -799,12 +799,12 @@@ should be used instead
  If C<$name> is a regexp, a list of components matched against the full
  component name will be returned.
  
+ If Catalyst can't find a component by name, it will fallback to regex
+ matching by default. To disable this behaviour set
+ disable_component_resolution_regex_fallback to a true value.
+     
+     __PACKAGE__->config( disable_component_resolution_regex_fallback => 1 );
  =cut
  
  sub component {
@@@ -818,11 -856,11 +856,11 @@@ Returns or takes a hashref containing t
  
      __PACKAGE__->config( { db => 'dsn:SQLite:foo.db' } );
  
- You can also use a C<YAML>, C<XML> or C<Config::General> config file
- like myapp.conf in your applications home directory. See
+ You can also use a C<YAML>, C<XML> or L<Config::General> config file
+ like C<myapp.conf> in your applications home directory. See
  L<Catalyst::Plugin::ConfigLoader>.
  
- =head3 Cascading configuration.
+ =head3 Cascading configuration
  
  The config method is present on all Catalyst components, and configuration
  will be merged when an application is started. Configuration loaded with
@@@ -918,7 -956,7 +956,7 @@@ Returns the engine instance. See L<Cata
  Merges C<@path> with C<< $c->config->{home} >> and returns a
  L<Path::Class::Dir> object. Note you can usually use this object as
  a filename, but sometimes you will have to explicitly stringify it
- yourself by calling the C<<->stringify>> method.
+ yourself by calling the C<< ->stringify >> method.
  
  For example:
  
@@@ -1106,7 -1144,6 +1144,6 @@@ EO
          my $name = $class->config->{name} || 'Application';
          $class->log->info("$name powered by Catalyst $Catalyst::VERSION");
      }
-     $class->log->_flush() if $class->log->can('_flush');
  
      # Make sure that the application class becomes immutable at this point,
      B::Hooks::EndOfScope::on_scope_end {
                  . "Class::Accessor(::Fast)?\nPlease pass "
                  . "(replace_constructor => 1)\nwhen making your class immutable.\n";
          }
-         $meta->make_immutable(replace_constructor => 1)
-             unless $meta->is_immutable;
+         $meta->make_immutable(
+             replace_constructor => 1,
+         ) unless $meta->is_immutable;
      };
  
+     if ($class->config->{case_sensitive}) {
+         $class->log->warn($class . "->config->{case_sensitive} is set.");
+         $class->log->warn("This setting is deprecated and planned to be removed in Catalyst 5.81.");
+     }
      $class->setup_finalize;
+     # Should be the last thing we do so that user things hooking
+     # setup_finalize can log..
+     $class->log->_flush() if $class->log->can('_flush');
+     return 1; # Explicit return true as people have __PACKAGE__->setup as the last thing in their class. HATE.
  }
  
  
@@@ -1158,40 -1205,63 +1205,63 @@@ sub setup_finalize 
      $class->setup_finished(1);
  }
  
- =head2 $c->uri_for( $action, \@captures?, @args?, \%query_values? )
- =head2 $c->uri_for( $path, @args?, \%query_values? )
- =over
- =item $action
- A Catalyst::Action object representing the Catalyst action you want to
- create a URI for. To get one for an action in the current controller,
- use C<< $c->action('someactionname') >>. To get one from different
- controller, fetch the controller using C<< $c->controller() >>, then
- call C<action_for> on it.
+ =head2 $c->uri_for( $path?, @args?, \%query_values? )
  
- You can maintain the arguments captured by an action (e.g.: Regex, Chained)
- using C<< $c->req->captures >>.
+ =head2 $c->uri_for( $action, \@captures?, @args?, \%query_values? )
  
-   # For the current action
-   $c->uri_for($c->action, $c->req->captures);
+ Constructs an absolute L<URI> object based on the application root, the
+ provided path, and the additional arguments and query parameters provided.
+ When used as a string, provides a textual URI.
+ If no arguments are provided, the URI for the current action is returned.
+ To return the current action and also provide @args, use
+ C<< $c->uri_for( $c->action, @args ) >>. 
+ If the first argument is a string, it is taken as a public URI path relative
+ to C<< $c->namespace >> (if it doesn't begin with a forward slash) or
+ relative to the application root (if it does). It is then merged with
+ C<< $c->request->base >>; any C<@args> are appended as additional path
+ components; and any C<%query_values> are appended as C<?foo=bar> parameters.
+ If the first argument is a L<Catalyst::Action> it represents an action which
+ will have its path resolved using C<< $c->dispatcher->uri_for_action >>. The
+ optional C<\@captures> argument (an arrayref) allows passing the captured
+ variables that are needed to fill in the paths of Chained and Regex actions;
+ once the path is resolved, C<uri_for> continues as though a path was
+ provided, appending any arguments or parameters and creating an absolute
+ URI.
+ The captures for the current request can be found in
+ C<< $c->request->captures >>, and actions can be resolved using
+ C<< Catalyst::Controller->action_for($name) >>. If you have a private action
+ path, use C<< $c->uri_for_action >> instead.
+   # Equivalent to $c->req->uri
+   $c->uri_for($c->action, $c->req->captures,
+       @{ $c->req->args }, $c->req->params);
  
    # For the Foo action in the Bar controller
-   $c->uri_for($c->controller('Bar')->action_for('Foo'), $c->req->captures);
+   $c->uri_for($c->controller('Bar')->action_for('Foo'));
  
- =back
+   # Path to a static resource
+   $c->uri_for('/static/images/logo.png');
  
  =cut
  
  sub uri_for {
      my ( $c, $path, @args ) = @_;
  
+     if (blessed($path) && $path->isa('Catalyst::Controller')) {
+         $path = $path->path_prefix;
+         $path =~ s{/+\z}{};
+         $path .= '/';
+     }
      if ( blessed($path) ) { # action object
-         my $captures = ( scalar @args && ref $args[0] eq 'ARRAY'
-                          ? shift(@args)
-                          : [] );
+         my $captures = [ map { s|/|%2F|; $_; }
+                         ( scalar @args && ref $args[0] eq 'ARRAY'
+                          ? @{ shift(@args) }
+                          : ()) ];
          my $action = $path;
          $path = $c->dispatcher->uri_for_action($action, $captures);
          if (not defined $path) {
  
      carp "uri_for called with undef argument" if grep { ! defined $_ } @args;
      s/([^$URI::uric])/$URI::Escape::escapes{$1}/go for @args;
+     s|/|%2F| for @args;
  
      unshift(@args, $path);
  
@@@ -1541,9 -1612,9 +1612,9 @@@ sub execute 
  
  sub _stats_start_execute {
      my ( $c, $code ) = @_;
+     my $appclass = ref($c) || $c;
      return if ( ( $code->name =~ /^_.*/ )
-         && ( !$c->config->{show_internal_actions} ) );
+         && ( !$appclass->config->{show_internal_actions} ) );
  
      my $action_name = $code->reverse();
      $c->counter->{$action_name}++;
  
      # is this a root-level call or a forwarded call?
      if ( $callsub =~ /forward$/ ) {
+         my $parent = $c->stack->[-1];
  
          # forward, locate the caller
-         if ( my $parent = $c->stack->[-1] ) {
+         if ( exists $c->counter->{"$parent"} ) {
              $c->stats->profile(
                  begin  => $action,
                  parent => "$parent" . $c->counter->{"$parent"},
@@@ -1606,25 -1678,6 +1678,6 @@@ sub _stats_finish_execute 
      $c->stats->profile( end => $info );
  }
  
- =head2 $c->_localize_fields( sub { }, \%keys );
- =cut
- #Why does this exist? This is no longer safe and WILL NOT WORK.
- # it doesnt seem to be used anywhere. can we remove it?
- sub _localize_fields {
-     my ( $c, $localized, $code ) = ( @_ );
-     my $request = delete $localized->{request} || {};
-     my $response = delete $localized->{response} || {};
-     local @{ $c }{ keys %$localized } = values %$localized;
-     local @{ $c->request }{ keys %$request } = values %$request;
-     local @{ $c->response }{ keys %$response } = values %$response;
-     $code->();
- }
  =head2 $c->finalize
  
  Finalizes the request.
@@@ -1662,8 -1715,6 +1715,8 @@@ sub finalize 
          $c->finalize_body;
      }
  
 +      $c->log_response;
 +
      if ($c->use_stats) {
          my $elapsed = sprintf '%f', $c->stats->elapsed;
          my $av = $elapsed == 0 ? '??' : sprintf '%.3f', 1 / $elapsed;
@@@ -1741,7 -1792,7 +1794,7 @@@ sub finalize_headers 
          }
          else {
              # everything should be bytes at this point, but just in case
-             $response->content_length( bytes::length( $response->body ) );
+             $response->content_length( length( $response->body ) );
          }
      }
  
@@@ -1878,7 -1929,7 +1931,7 @@@ sub prepare 
          $c->prepare_read;
  
          # Parse the body unless the user wants it on-demand
-         unless ( $c->config->{parse_on_demand} ) {
+         unless ( ref($c)->config->{parse_on_demand} ) {
              $c->prepare_body;
          }
      }
      $path       = '/' unless length $path;
      my $address = $c->req->address || '';
  
 -    $c->log->debug(qq/"$method" request for "$path" from "$address"/)
 -      if $c->debug;
 +    $c->log_request;
  
      $c->prepare_action;
  
@@@ -1918,6 -1970,17 +1971,6 @@@ sub prepare_body 
      $c->engine->prepare_body( $c, @_ );
      $c->prepare_parameters;
      $c->prepare_uploads;
 -
 -    if ( $c->debug && keys %{ $c->req->body_parameters } ) {
 -        my $t = Text::SimpleTable->new( [ 35, 'Parameter' ], [ 36, 'Value' ] );
 -        for my $key ( sort keys %{ $c->req->body_parameters } ) {
 -            my $param = $c->req->body_parameters->{$key};
 -            my $value = defined($param) ? $param : '';
 -            $t->row( $key,
 -                ref $value eq 'ARRAY' ? ( join ', ', @$value ) : $value );
 -        }
 -        $c->log->debug( "Body Parameters are:\n" . $t->draw );
 -    }
  }
  
  =head2 $c->prepare_body_chunk( $chunk )
@@@ -2001,328 -2064,55 +2054,328 @@@ sub prepare_query_parameters 
      my $c = shift;
  
      $c->engine->prepare_query_parameters( $c, @_ );
 +}
  
 -    if ( $c->debug && keys %{ $c->request->query_parameters } ) {
 -        my $t = Text::SimpleTable->new( [ 35, 'Parameter' ], [ 36, 'Value' ] );
 -        for my $key ( sort keys %{ $c->req->query_parameters } ) {
 -            my $param = $c->req->query_parameters->{$key};
 -            my $value = defined($param) ? $param : '';
 -            $t->row( $key,
 -                ref $value eq 'ARRAY' ? ( join ', ', @$value ) : $value );
 +=head2 $c->apply_parameter_debug_filters($params)
 +
 +=cut
 +
 +sub _apply_parameter_debug_filters {
 +    my $c      = shift;
 +    my $type   = shift;
 +    my $params = shift;
 +
 +    # take a copy since we don't want to modify the original
 +    my $filtered_params = {%$params};
 +
 +    my @filters;
 +
 +    my $filter_param_config = $c->config->{Debug}->{param_filters};
 +    if ( ref($filter_param_config) eq 'HASH' ) {
 +
 +        # filters broken out by parameter type (i.e. body, query, all)
 +        my $type_filters = $filter_param_config->{$type} || [];
 +        $type_filters = [$type_filters] if ref $type_filters ne 'ARRAY';
 +
 +        my $all_filters = $filter_param_config->{'all'} || [];
 +        $all_filters = [$all_filters] if ref $all_filters ne 'ARRAY';
 +
 +        @filters = $c->_normalize_debug_filters( [ @$type_filters, @$all_filters ] );
 +    } elsif ($filter_param_config) {
 +        @filters = $c->_normalize_debug_filters($filter_param_config);
 +    }
 +
 +    # allow callback to modify each parameter
 +    foreach my $k ( keys %$filtered_params ) {
 +
 +        # apply filters to each param
 +        foreach my $f (@filters) {
 +
 +            # take a copy of the key to avoid the callback inadvertantly
 +            # modifying things
 +            my $copy_key = $k;
 +
 +            my $returned = $f->( $copy_key => $filtered_params->{$k} );
 +
 +            if ( defined $returned ) {
 +
 +                # if no value is returned, we assume the filter chose not to modify anything
 +                # otherwise, the returned value is the logged value
 +                $filtered_params->{$k} = $returned;
 +
 +                last;    # skip the rest of the filters since this one matched
 +            }
          }
 -        $c->log->debug( "Query Parameters are:\n" . $t->draw );
      }
 +    return $filtered_params;
  }
  
 -=head2 $c->prepare_read
 +# turn debug filters into a list of CodeRef's
 +sub _normalize_debug_filters {
 +    my $c = shift;
  
 -Prepares the input for reading.
 +    my @filters = ref( $_[0] ) eq 'ARRAY' ? @{ $_[0] } : grep { defined $_ } @_;
  
 -=cut
 +    my @normalized = map { _make_filter_callback($_) } @filters;
  
 -sub prepare_read { my $c = shift; $c->engine->prepare_read( $c, @_ ) }
 +    return @normalized;
 +}
  
 -=head2 $c->prepare_request
 +sub _make_filter_callback {
 +    my $filter = shift;
  
 -Prepares the engine request.
 +    my $filter_str = '[FILTERED]';
 +    if ( ref($filter) eq 'Regexp' ) {
 +        return sub { return $_[0] =~ $filter ? $filter_str  : undef };
 +    } elsif ( ref($filter) eq 'CODE' ) {
 +        return $filter;
 +    } else {
 +        return sub { return $_[0] eq $filter ? $filter_str : undef };
 +    }
 +}
 +
 +=head2 $c->log_request
 +
 +Writes information about the request to the debug logs.  This includes:
 +
 +=over 4
 +
 +=item * Request method, path, and remote IP address
 +
 +=item * Query keywords (see L<Catalyst::Request/query_keywords>)
 +
 +=item * Request parameters (see L</log_request_parameters>)
 +
 +=item * File uploads
 +
 +=back
  
  =cut
  
 -sub prepare_request { my $c = shift; $c->engine->prepare_request( $c, @_ ) }
 +sub log_request {
 +    my $c = shift;
  
 -=head2 $c->prepare_uploads
 +    return unless $c->debug;
  
 -Prepares uploads.
 +    my ( $method, $path, $address ) = ( $c->req->method, $c->req->path, $c->req->address );
 +    $method ||= '';
 +    $path = '/' unless length $path;
 +    $address ||= '';
 +    $c->log->debug(qq/"$method" request for "$path" from "$address"/);
 +
 +    if ( my $keywords = $c->req->query_keywords ) {
 +        $c->log->debug("Query keywords are: $keywords");
 +    }
 +
 +    $c->log_request_parameters( query => $c->req->query_parameters, body => $c->req->body_parameters );
 +
 +    $c->log_request_uploads;
 +}
 +
 +=head2 $c->log_response
 +
 +Writes information about the response to the debug logs.  This includes:
 +
 +=over 4
 +
 +=item * Response status code
 +
 +=item * Response headers (see L</log_headers>)
 +
 +=back
 +
 +This logging is not enabled by default.  To enable it, you must set a flag in your Catalyst config:
 +
 +      __PACKAGE__->config( Debug => { log_response => 1 } );
  
  =cut
  
 -sub prepare_uploads {
 +sub log_response {
      my $c = shift;
  
 -    $c->engine->prepare_uploads( $c, @_ );
 +    return unless $c->debug && $c->config->{Debug}->{log_response};
 +
 +    $c->log->debug('Response Status: ' . $c->response->status);
 +    $c->log_headers('response', $c->response->headers);
 +}
 +
 +=head2 $c->log_request_parameters( query => {}, body => {} )
 +
 +Logs request parameters to debug logs
 +
 +If you have sensitive data that you do not want written to the Catalyst
 +debug logs, you can set options in your config to filter those values out.
 +There are a few different ways you can set these up depending on what
 +exactly you need to filter.
 +
 +=head3 Filtering parameters by name
 +
 +The most basic means of filtering is to add an entry into your config
 +as shown below.  You can have a simple scalar to just filter a
 +single parameter or an ARRAY ref to filter out multiple params.
 +
 +    # filters a single param
 +    __PACKAGE__->config( Debug => { param_filters => 'param_name' } );
 +
 +    # filters multiple params
 +    __PACKAGE__->config( Debug => { param_filters => [qw(param1 param2)] } );
 +
 +When the debug logs are generated for a given request, any parameters
 +(query or body) that exactly match the specified value(s) will have
 +their values replaced with '[FILTERED]'.  For instance:
 +
 +    [debug] Query Parameters are:
 +    .-------------------------------------+--------------------------------------.
 +    | Parameter                           | Value                                |
 +    +-------------------------------------+--------------------------------------+
 +    | password                            | [FILTERED]                           |
 +    .-------------------------------------+--------------------------------------.
 +
 +=head3 Filtering parameters by regular expression
 +
 +If you have a set of parameters you need to filter, you can specify a
 +regular expression that will be used to match against parameter names.
 +
 +    # filters parameters starting with "private."
 +    __PACKAGE__->config( Debug => { param_filters => qr/^private\./ } );
  
 -    if ( $c->debug && keys %{ $c->request->uploads } ) {
 +    # filters parameters named "param1" or starting with "private." or "secret."
 +    __PACKAGE__->config( Debug => { param_filters => [ 'param1', qr/^private\./, qr/^secret\./ ] } );
 +
 +Notice on the second example, the arrayref contains a string as well
 +as two regular expressions.  This should DWIM and filter parameters that
 +match any of the filters specified.
 +
 +=head3 Filtering parameters by callback
 +
 +If you want even more flexible filtering, you can specify an anonymous
 +subroutine.  The subroutine is given the parameter name and value and
 +is expected to return the new value that will be shown in the debug log.
 +An C<undef> return value indicates that no change should be made to
 +the value.
 +
 +    # transform any "password" param to "********"
 +    __PACKAGE__->config(
 +        Debug => {
 +            param_filters => sub { my ( $k, $v ) = @_; return unless $k eq 'password'; return '*' x 8; }
 +        }
 +    );
 +
 +    # combine several param filtering methods
 +    __PACKAGE__->config(
 +        Debug => {
 +            param_filters => [
 +                'simple_param_name',
 +                qr/^private\./,
 +                sub { my ( $k, $v ) = @_; return unless $k eq 'password'; return '*' x 8; },
 +            ]
 +        }
 +    );
 +
 +An example of the debug log for a request with 
 +C<password=secret&some_other_param=some_other_value> would be:
 +
 +    [debug] Body Parameters are:
 +    .-------------------------------------+--------------------------------------.
 +    | Parameter                           | Value                                |
 +    +-------------------------------------+--------------------------------------+
 +    | some_other_param                    | some_other_value                     |
 +    | password                            | ********                             |
 +    .-------------------------------------+--------------------------------------.
 +
 +=head3 Filtering by parameter location
 +
 +If you have different filters that depend on whether a param was passed
 +as a query or body param (or as either), you can specify a hashref with
 +different sets of filters:
 +
 +    # filters all body parameters
 +    __PACKAGE__->config( Debug => { param_filters => { body => qr// } } );
 +
 +    # filters query parameters starting with 'private'.
 +    __PACKAGE__->config( Debug => { param_filters => { query => qr/^private\./ } } );
 +
 +    # filters all parameters (query or body) through the specified callback
 +    __PACKAGE__->config(
 +        Debug => {
 +            param_filters => {
 +                all => sub { return unless $_[0] eq 'fizzbuzz'; return 'FIZZBUZZ FILTER' }
 +            }
 +        }
 +    );
 +
 +Of course, you can use any of the above filtering methods with these
 +"location-specific" filters:
 +
 +    # body parameter filters
 +    __PACKAGE__->config(
 +        Debug => {
 +            param_filters => {
 +                body => [
 +                    'some_param',
 +                    qr/^private\./,
 +                    sub { return 'XXX' if shift eq 'other_param' }
 +                ]
 +            }
 +        }
 +    );
 +
 +    # query parameter filters
 +    __PACKAGE__->config(
 +        Debug => {
 +            param_filters => {
 +                body => [
 +                    'some_param',
 +                    qr/^private\./,
 +                    sub { return 'XXX' if shift eq 'other_param' }
 +                ]
 +            }
 +        }
 +    );
 +
 +    # query parameter filters
 +    __PACKAGE__->config( Debug => { param_filters => { all => [qw(foo bar)] } } );
 +
 +=cut
 +
 +sub log_request_parameters {
 +    my $c          = shift;
 +    my %all_params = @_;
 +
 +    my $column_width = Catalyst::Utils::term_width() - 44;
 +    foreach my $type (qw(query body)) {
 +        my $filtered_params = $c->_apply_parameter_debug_filters( $type, $all_params{$type} || {} );
 +        next unless keys %$filtered_params;
 +        my $t = Text::SimpleTable->new( [ 35, 'Parameter' ], [ $column_width, 'Value' ] );
 +        for my $key ( sort keys %$filtered_params ) {
 +            my $param = $filtered_params->{$key};
 +            my $value = defined($param) ? $param : '';
 +            $t->row( $key, ref $value eq 'ARRAY' ? ( join ', ', @$value ) : $value );
 +        }
 +        $c->log->debug( ucfirst($type) . " Parameters are:\n" . $t->draw );
 +    }
 +}
 +
 +=head2 $c->log_request_uploads
 +
 +Logs file uploads included in the request to the debug logs.
 +The parameter name, filename, file type, and file size are all included in
 +the debug logs.
 +
 +=cut
 +
 +sub log_request_uploads {
 +    my $c = shift;
 +    my $uploads = $c->req->uploads;
 +    if ( keys %$uploads ) {
          my $t = Text::SimpleTable->new(
              [ 12, 'Parameter' ],
              [ 26, 'Filename' ],
              [ 18, 'Type' ],
              [ 9,  'Size' ]
          );
 -        for my $key ( sort keys %{ $c->request->uploads } ) {
 -            my $upload = $c->request->uploads->{$key};
 +        for my $key ( sort keys %$uploads ) {
 +            my $upload = $uploads->{$key};
              for my $u ( ref $upload eq 'ARRAY' ? @{$upload} : ($upload) ) {
                  $t->row( $key, $u->filename, $u->type, $u->size );
              }
      }
  }
  
 +=head2 $c->log_headers($type => $headers)
 +
 +Writes HTTP::Headers to debug logs, applying filters as configured.
 +
 +Similarly to how L</log_request_parameters> is configured, you can
 +configure Catalyst to filter response header values to avoid writing
 +sensitive data to your logs (e.g. cookie values, etc.). The configuration
 +works in virtually the same way as the examples in
 +L</log_request_parameters>.  Here are a few specific examples:
 +
 +    # filters all "Set-Cookie" headers from response logging
 +    __PACKAGE__->config(Debug => { response_header_filters => 'Set-Cookie' } );
 +
 +    # filters only the value of the cookie (and leaves the name, path, expiration)
 +    __PACKAGE__->config(
 +        Debug => {
 +            response_header_filters => sub {
 +                my ( $n, $v ) = @_;
 +                return unless $n eq 'Set-Cookie';
 +                $v =~ s/^.*?;//;
 +                return $v;
 +            },
 +        }
 +    );
 +
 +=cut
 +
 +sub log_headers {
 +    my $c       = shift;
 +    my $type    = shift;
 +    my $headers = shift;    # an HTTP::Headers instance
 +
 +    my $filtered = $c->_apply_header_debug_filters( $type, $headers );
 +
 +    my $t = Text::SimpleTable->new( [ 35, 'Header Name' ], [ 40, 'Value' ] );
 +    $filtered->scan(
 +        sub {
 +            my ( $name, $value ) = @_;
 +            $t->row( $name, $value );
 +        }
 +    );
 +    $c->log->debug( ucfirst($type) . " Headers:\n" . $t->draw );
 +}
 +
 +# Applies debug filters to $headers and returns a new HTTP::Headers object which has (potentially) filtered values.
 +sub _apply_header_debug_filters {
 +    my $c    = shift;
 +    my $type    = shift;
 +    my $headers = shift;
 +
 +    my @header_filters   = $c->_normalize_debug_filters( $c->config->{Debug}->{ $type . '_header_filters' } );
 +    my $filtered_headers = HTTP::Headers->new();
 +    foreach my $name ( $headers->header_field_names ) {
 +        my @values = $headers->header($name);
 +
 +        # headers can be multi-valued
 +        foreach my $value (@values) {
 +            foreach my $f (@header_filters) {
 +                my $new_value = $f->( $name, $value );
 +
 +                # if a defined value is returned, we use that
 +                if ( defined $new_value ) {
 +                    $value = $new_value;
 +                    last;    # skip the rest of the filters
 +                }
 +            }
 +            $filtered_headers->push_header( $name, $value );
 +        }
 +    }
 +    return $filtered_headers;
 +}
 +
 +=head2 $c->prepare_read
 +
 +Prepares the input for reading.
 +
 +=cut
 +
 +sub prepare_read { my $c = shift; $c->engine->prepare_read( $c, @_ ) }
 +
 +=head2 $c->prepare_request
 +
 +Prepares the engine request.
 +
 +=cut
 +
 +sub prepare_request { my $c = shift; $c->engine->prepare_request( $c, @_ ) }
 +
 +=head2 $c->prepare_uploads
 +
 +Prepares uploads.
 +
 +=cut
 +
 +sub prepare_uploads {
 +    my $c = shift;
 +
 +    $c->engine->prepare_uploads( $c, @_ );
 +}
 +
  =head2 $c->prepare_write
  
  Prepares the output for writing.
@@@ -2453,7 -2143,7 +2506,7 @@@ Reads a chunk of data from the request 
  be used in a while loop, reading C<$maxlength> bytes on every call.
  C<$maxlength> defaults to the size of the request if not specified.
  
- You have to set C<< MyApp->config->{parse_on_demand} >> to use this
+ You have to set C<< MyApp->config(parse_on_demand => 1) >> to use this
  directly.
  
  Warning: If you use read(), Catalyst will not process the body,
@@@ -2490,40 -2180,32 +2543,32 @@@ sub setup_actions { my $c = shift; $c->
  
  =head2 $c->setup_components
  
- Sets up components. Specify a C<setup_components> config option to pass
- additional options directly to L<Module::Pluggable>. To add additional
- search paths, specify a key named C<search_extra> as an array
- reference. Items in the array beginning with C<::> will have the
- application class name prepended to them.
+ This method is called internally to set up the application's components.
+ It finds modules by calling the L<locate_components> method, expands them to
+ package names with the L<expand_component_module> method, and then installs
+ each component into the application.
  
- All components found will also have any
- L<Devel::InnerPackage|inner packages> loaded and set up as components.
- Note, that modules which are B<not> an I<inner package> of the main
- file namespace loaded will not be instantiated as components.
+ The C<setup_components> config option is passed to both of the above methods.
+ Installation of each component is performed by the L<setup_component> method,
+ below.
  
  =cut
  
  sub setup_components {
      my $class = shift;
  
-     my @paths   = qw( ::Controller ::C ::Model ::M ::View ::V );
      my $config  = $class->config->{ setup_components };
-     my $extra   = delete $config->{ search_extra } || [];
-     push @paths, @$extra;
-     my $locator = Module::Pluggable::Object->new(
-         search_path => [ map { s/^(?=::)/$class/; $_; } @paths ],
-         %$config
-     );
  
-     my @comps = sort { length $a <=> length $b } $locator->plugins;
+     my @comps = sort { length $a <=> length $b }
+                 $class->locate_components($config);
      my %comps = map { $_ => 1 } @comps;
  
-     my $deprecated_component_names = grep { /::[CMV]::/ } @comps;
+     my $deprecatedcatalyst_component_names = grep { /::[CMV]::/ } @comps;
      $class->log->warn(qq{Your application is using the deprecated ::[MVC]:: type naming scheme.\n}.
          qq{Please switch your class names to ::Model::, ::View:: and ::Controller: as appropriate.\n}
-     ) if $deprecated_component_names;
+     ) if $deprecatedcatalyst_component_names;
  
      for my $component ( @comps ) {
  
          # we know M::P::O found a file on disk so this is safe
  
          Catalyst::Utils::ensure_class_loaded( $component, { ignore_loaded => 1 } );
-         #Class::MOP::load_class($component);
-         my $module  = $class->setup_component( $component );
-         my %modules = (
-             $component => $module,
-             map {
-                 $_ => $class->setup_component( $_ )
-             } grep {
-               not exists $comps{$_}
-             } Devel::InnerPackage::list_packages( $component )
-         );
  
-         for my $key ( keys %modules ) {
-             $class->components->{ $key } = $modules{ $key };
+         # Needs to be done as soon as the component is loaded, as loading a sub-component
+         # (next time round the loop) can cause us to get the wrong metaclass..
+         $class->_controller_init_base_classes($component);
+     }
+     for my $component (@comps) {
+         $class->components->{ $component } = $class->setup_component($component);
+         for my $component ($class->expand_component_module( $component, $config )) {
+             next if $comps{$component};
+             $class->_controller_init_base_classes($component); # Also cover inner packages
+             $class->components->{ $component } = $class->setup_component($component);
          }
      }
  }
  
+ =head2 $c->locate_components( $setup_component_config )
+ This method is meant to provide a list of component modules that should be
+ setup for the application.  By default, it will use L<Module::Pluggable>.
+ Specify a C<setup_components> config option to pass additional options directly
+ to L<Module::Pluggable>. To add additional search paths, specify a key named
+ C<search_extra> as an array reference. Items in the array beginning with C<::>
+ will have the application class name prepended to them.
+ =cut
+ sub locate_components {
+     my $class  = shift;
+     my $config = shift;
+     my @paths   = qw( ::Controller ::C ::Model ::M ::View ::V );
+     my $extra   = delete $config->{ search_extra } || [];
+     push @paths, @$extra;
+     my $locator = Module::Pluggable::Object->new(
+         search_path => [ map { s/^(?=::)/$class/; $_; } @paths ],
+         %$config
+     );
+     my @comps = $locator->plugins;
+     return @comps;
+ }
+ =head2 $c->expand_component_module( $component, $setup_component_config )
+ Components found by C<locate_components> will be passed to this method, which
+ is expected to return a list of component (package) names to be set up.
+ =cut
+ sub expand_component_module {
+     my ($class, $module) = @_;
+     return Devel::InnerPackage::list_packages( $module );
+ }
  =head2 $c->setup_component
  
  =cut
  
+ # FIXME - Ugly, ugly hack to ensure the we force initialize non-moose base classes
+ #         nearest to Catalyst::Controller first, no matter what order stuff happens
+ #         to be loaded. There are TODO tests in Moose for this, see
+ #         f2391d17574eff81d911b97be15ea51080500003
  sub _controller_init_base_classes {
      my ($app_class, $component) = @_;
+     return unless $component->isa('Catalyst::Controller');
      foreach my $class ( reverse @{ mro::get_linear_isa($component) } ) {
          Moose::Meta::Class->initialize( $class )
              unless find_meta($class);
@@@ -2569,16 -2297,12 +2660,12 @@@ sub setup_component 
          return $component;
      }
  
-     # FIXME - Ugly, ugly hack to ensure the we force initialize non-moose base classes
-     #         nearest to Catalyst::Controller first, no matter what order stuff happens
-     #         to be loaded. There are TODO tests in Moose for this, see
-     #         f2391d17574eff81d911b97be15ea51080500003
-     if ($component->isa('Catalyst::Controller')) {
-         $class->_controller_init_base_classes($component);
-     }
      my $suffix = Catalyst::Utils::class2classsuffix( $component );
      my $config = $class->config->{ $suffix } || {};
+     # Stash catalyst_component_name in the config here, so that custom COMPONENT
+     # methods also pass it. local to avoid pointlessly shitting in config
+     # for the debug screen, as $component is already the key name.
+     local $config->{catalyst_component_name} = $component;
  
      my $instance = eval { $component->COMPONENT( $class, $config ); };
  
@@@ -2862,7 -2586,8 +2949,8 @@@ the plugin name does not begin with C<C
          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" )
+             if $plugin->isa( 'Catalyst::Component' );
          $proto->_plugins->{$plugin} = 1;
          unless ($instant) {
              no strict 'refs';
@@@ -2953,23 -2678,80 +3041,80 @@@ messages in template systems
  
  sub version { return $Catalyst::VERSION }
  
- =head1 INTERNAL ACTIONS
+ =head1 CONFIGURATION
  
- Catalyst uses internal actions like C<_DISPATCH>, C<_BEGIN>, C<_AUTO>,
- C<_ACTION>, and C<_END>. These are by default not shown in the private
- action table, but you can make them visible with a config parameter.
+ There are a number of 'base' config variables which can be set:
+ =over
+ =item *
+ C<default_model> - The default model picked if you say C<< $c->model >>. See L</$c->model($name)>.
+ =item *
+ C<default_view> - The default view to be rendered or returned when C<< $c->view >>. See L</$c->view($name)>.
+ is called.
+ =item *
+ C<disable_component_resolution_regex_fallback> - Turns
+ off the deprecated component resolution functionality so
+ that if any of the component methods (e.g. C<< $c->controller('Foo') >>)
+ are called then regex search will not be attempted on string values and
+ instead C<undef> will be returned.
+ =item *
+ C<home> - The application home directory. In an uninstalled application,
+ this is the top level application directory. In an installed application,
+ this will be the directory containing C<< MyApp.pm >>.
+ =item *
+ C<ignore_frontend_proxy> - See L</PROXY SUPPORT>
+ =item *
+ C<name> - The name of the application in debug messages and the debug and
+ welcome screens
+ =item *
+ C<parse_on_demand> - The request body (for example file uploads) will not be parsed
+ until it is accessed. This allows you to (for example) check authentication (and reject
+ the upload) before actually recieving all the data. See L</ON-DEMAND PARSER>
+ =item *
+ C<root> - The root directory for templates. Usually this is just a
+ subdirectory of the home directory, but you can set it to change the
+ templates to a different directory.
+ =item *
  
-     MyApp->config->{show_internal_actions} = 1;
+ C<search_extra> - Array reference passed to Module::Pluggable to for additional
+ namespaces from which components will be loaded (and constructed and stored in
+ C<< $c->components >>).
  
- =head1 CASE SENSITIVITY
+ =item *
  
- By default Catalyst is not case sensitive, so C<MyApp::C::FOO::Bar> is
- mapped to C</foo/bar>. You can activate case sensitivity with a config
- parameter.
+ C<show_internal_actions> - If true, causes internal actions such as C<< _DISPATCH >>
+ to be shown in hit debug tables in the test server.
  
-     MyApp->config->{case_sensitive} = 1;
+ =item *
  
- This causes C<MyApp::C::Foo::Bar> to map to C</Foo/Bar>.
+ C<using_frontend_proxy> - See L</PROXY SUPPORT>.
+ =back
+ =head1 INTERNAL ACTIONS
+ Catalyst uses internal actions like C<_DISPATCH>, C<_BEGIN>, C<_AUTO>,
+ C<_ACTION>, and C<_END>. These are by default not shown in the private
+ action table, but you can make them visible with a config parameter.
+     MyApp->config(show_internal_actions => 1);
  
  =head1 ON-DEMAND PARSER
  
@@@ -2977,7 -2759,7 +3122,7 @@@ The request body is usually parsed at t
  but if you want to handle input yourself, you can enable on-demand
  parsing with a config parameter.
  
-     MyApp->config->{parse_on_demand} = 1;
+     MyApp->config(parse_on_demand => 1);
  
  =head1 PROXY SUPPORT
  
@@@ -2998,6 -2780,18 +3143,18 @@@ changes are made to the request
      The host value for $c->req->base and $c->req->uri is set to the real
      host, as read from the HTTP X-Forwarded-Host header.
  
+ Additionally, you may be running your backend application on an insecure
+ connection (port 80) while your frontend proxy is running under SSL.  If there
+ is a discrepancy in the ports, use the HTTP header C<X-Forwarded-Port> to
+ tell Catalyst what port the frontend listens on.  This will allow all URIs to
+ be created properly.
+ In the case of passing in:
+     X-Forwarded-Port: 443
+ All calls to C<uri_for> will result in an https link, as is expected.
  Obviously, your web server must support these headers for this to work.
  
  In a more complex server farm environment where you may have your
@@@ -3005,11 -2799,11 +3162,11 @@@ frontend proxy server(s) on different m
  configuration option to tell Catalyst to read the proxied data from the
  headers.
  
-     MyApp->config->{using_frontend_proxy} = 1;
+     MyApp->config(using_frontend_proxy => 1);
  
  If you do not wish to use the proxy support at all, you may set:
  
-     MyApp->config->{ignore_frontend_proxy} = 1;
+     MyApp->config(ignore_frontend_proxy => 1);
  
  =head1 THREAD SAFETY
  
@@@ -3046,7 -2840,7 +3203,7 @@@ Wiki
  
  =head2 L<Catalyst::Manual> - The Catalyst Manual
  
- =head2 L<Catalyst::Component>, L<Catalyst::Base> - Base classes for components
+ =head2 L<Catalyst::Component>, L<Catalyst::Controller> - Base classes for components
  
  =head2 L<Catalyst::Engine> - Core engine
  
@@@ -3068,9 -2862,11 +3225,11 @@@ abw: Andy Wardle
  
  acme: Leon Brocard <leon@astray.com>
  
+ abraxxa: Alexander Hartmaier <abraxxa@cpan.org>
  Andrew Bramble
  
- Andrew Ford
+ Andrew Ford E<lt>A.Ford@ford-mason.co.ukE<gt>
  
  Andrew Ruthven
  
@@@ -3086,8 -2882,18 +3245,18 @@@ chansen: Christian Hanse
  
  chicks: Christopher Hicks
  
+ Chisel Wright C<pause@herlpacker.co.uk>
+ Danijel Milicevic C<me@danijel.de>
+ David Kamholz E<lt>dkamholz@cpan.orgE<gt>
+ David Naughton, C<naughton@umn.edu>
  David E. Wheeler
  
+ dhoss: Devin Austin <dhoss@cpan.org>
  dkubb: Dan Kubb <dan.kubb-cpan@onautopilot.com>
  
  Drew Taylor
@@@ -3098,16 -2904,26 +3267,26 @@@ esskar: Sascha Kiefe
  
  fireartist: Carl Franks <cfranks@cpan.org>
  
+ frew: Arthur Axel "fREW" Schmidt <frioux@gmail.com>
  gabb: Danijel Milicevic
  
  Gary Ashton Jones
  
+ Gavin Henry C<ghenry@perl.me.uk>
  Geoff Richards
  
+ groditi: Guillermo Roditi <groditi@gmail.com>
+ hobbs: Andrew Rodland <andrew@cleverdomain.org>
  ilmari: Dagfinn Ilmari MannsÃ¥ker <ilmari@ilmari.org>
  
  jcamacho: Juan Camacho
  
+ jester: Jesse Sheidlower C<jester@panix.com>
  jhannah: Jay Hannah <jay@jays.net>
  
  Jody Belka
@@@ -3116,6 -2932,12 +3295,12 @@@ Johan Lindstro
  
  jon: Jon Schutz <jjschutz@cpan.org>
  
+ Jonathan Rockway C<< <jrockway@cpan.org> >>
+ Kieren Diment C<kd@totaldatasolution.com>
+ konobi: Scott McWhirter <konobi@cpan.org>
  marcus: Marcus Ramberg <mramberg@cpan.org>
  
  miyagawa: Tatsuhiko Miyagawa <miyagawa@bulknews.net>
@@@ -3144,16 -2966,22 +3329,22 @@@ rafl: Florian Ragwitz <rafl@debian.org
  
  random: Roland Lammel <lammel@cpan.org>
  
- sky: Arthur Bergman
+ Robert Sedlacek C<< <rs@474.at> >>
  
- the_jester: Jesse Sheidlower
+ sky: Arthur Bergman
  
  t0m: Tomas Doran <bobtfish@bobtfish.net>
  
  Ulf Edvinsson
  
+ Viljo Marrandi C<vilts@yahoo.com>
+ Will Hawes C<info@whawes.co.uk>
  willert: Sebastian Willert <willert@cpan.org>
  
+ Yuval Kogman, C<nothingmuch@woobling.org>
  =head1 LICENSE
  
  This library is free software. You can redistribute it and/or modify it under