Clean up, no moose here.
[catagits/Catalyst-Devel.git] / gsoc / gsoc-devel-plan-5-23.txt
CommitLineData
01dfb279 115:36 <t0m> right. so the first thing to do is probably write a test to check
2 generating an application doesn't change.
315:37 <dhoss> per app?
415:38 <t0m> no, I mean whilst you're ripping ::Helper apart.
515:38 <dhoss> OH
615:38 <dhoss> gotcha
715:38 <t0m> if you install your branch.. Then catalyst.pl t/TestAppForComparison
815:39 <dhoss> so we have the same results now as before, yes?
915:39 <t0m> then you write a test which says catalyst.pl /tmp/TempTestApp; my
10 $diff = `diff -urN t/TestAppForComparison /tmp/TempTestApp`; ok
11 !length($diff) or warn $diff;
1215:40 <t0m> exactly. and that'll test you rip all of the files out of Helper.pm
13 correctly..
1415:40 <dhoss> okay, TestAppForComparison created. i'll commit that initial
15 version
1615:40 <t0m> you'll probably want to nuke it after that, as testing the
17 generated strings of an entire app dir is gonna be a PITA
1815:41 <t0m> to maintain
1915:41 <dhoss> i could see that
2015:41 <t0m> But it's totally the right solution whilst you're trying to rip
21 stuff out without changing it
2215:41 <dhoss> temp testing :-D
2315:44 <t0m> I've got some ideas on doing better testing that the TestApp we
24 generate is good.
2515:44 <t0m> but they're a bit more involved, and not needed for this at all ;)
2615:45 <dhoss> this being this refactor, or this bit of the refactor?
2715:45 <t0m> the latter.
2815:45 <dhoss> okay - got it
2915:46 <t0m> and once this is done - you can branch again to work on the code,
30 and again to work on the generated app templates (as we'll want to
31 moosify those, so your app is moosetastic by default
3215:46 <t0m> and as it's all in different files - you can do both in parallel as
33 you feel like and safely merge back
3415:47 <t0m> did you get to grips with MX::GetOpt and do you have a plan for
35 that yet?
3615:48 <dhoss> so one branch for helper_refactor, one for code (which code?),
37 and one for app templates
3815:48 <t0m> As I guess catalyst.pl should be taught to use it, and so should
39 the generated scripts :)
4015:48 <dhoss> i've been playing with MX::GetOpt, i need a few more details on
41 what exactly needs to be beat up
4215:48 <t0m> yy, but you branch from completed helper_refactor :)
4315:49 <t0m> and 'code' is the actual refactor / api changes for helpers
4415:49 <t0m> bletch
4515:50 <dhoss> okay, so the 'code' branch will be simply the C::H code branched
46 from helper_refactor
4715:50 <t0m> get_file has to keep working as everything using ::Helper needs it
4815:50 <t0m> yes, exactly.
4915:51 <t0m> so you need to make a get_file_from_sharedir function or something
5015:51 <dhoss> okay, making sense now :-)
5115:51 <t0m> and change things over to use that.
5215:51 <t0m> that's fine though - means you can extract 1 file at a time
5315:52 <dhoss> which would be better, no? better atomicity and for testing
5415:52 <t0m> yy
5515:52 <t0m> bletch was at the fact that 'get_file' is a good method name, and
56 it's now deprecated
5715:53 <dhoss> is that in C::H?
5815:53 <t0m> yy
5915:53 * dhoss is a little behind in my api knowledge
6015:53 <dhoss> off the top of my head at least
6115:53 <t0m> it's the 'get me a file out the <DATA> section' method
6215:53 <dhoss> aha right
6315:54 <t0m> which you're replacing in favour of 'get me a file out of the share
64 dir'
6515:54 <t0m> and 'copy file out of sharedir' methods.
6615:54 <t0m> The former for templates
6715:54 <t0m> the latter for binaries, which gets rid of the hateful decoding and
68 writing out business
6915:54 <dhoss> get -> we're going to interpolate shit, copy -> we're giong to
70 use directly?
7115:55 <t0m> just so
7215:55 <t0m> eliminating the 'please turn this giant hex string back into
73 binary' thing
7415:55 <dhoss> definitely :-P
7516:00 <t0m> sub _mk_favicon {
7616:00 <t0m> my ( $self ) = @_;
7716:00 <t0m> $self->copy_share_file(
7816:00 <t0m> File::Spec->catfile( ( caller(0) )[0], 'favicon.ico' ),
7916:00 <t0m> File::Spec->catfile( $self->{root}, "favicon.ico" )
8016:00 <t0m> );
8116:00 <t0m> }
8216:00 <t0m> sumfin like dat
8316:01 <dhoss> easy enough
8416:01 <t0m> the actually, all the caller crap dies too
8516:02 <dhoss> hrm, i suppose we have to keep the atrocious
86 Class::Accessor::Fast method name artifacts?
8716:02 <t0m> that's to clue get_file what file to borg crap out off
8816:03 <t0m> I vote that most of them can burn, as we'll be working out what
89 shit to copy a lot more dynamically
9016:03 <t0m> and the ones which can't get deprecated, but preserved.
9116:04 <dhoss> so that's just for the current get_file, right?
9216:04 <t0m> yy
11dbddd9 93########################################################################
94## done
9516:04 <t0m> $self->copy_share_file(
01dfb279 9616:04 <t0m> 'favicon.ico',
9716:04 <t0m> File::Spec->catfile( $self->{root}, "favicon.ico" )
9816:04 <t0m> );
11dbddd9 99#########################################################################
01dfb279 10016:05 <t0m> more like it
10116:05 <t0m> so we have sub mk_foo { shift->generate_foo(@_); }
102
c5387711 103====
1045-28
5430247e 10503:04 < dhoss> SO. official next step: 1) #done trim crap out 2) #done write test for how
c5387711 106 helpers are invoking Catalyst::Helper 3)??? 4) profit!
6be0f534 10703:05 < t0m> 3)#done Re arrange files in sharedir so we can make the comversion guts
c5387711 108 totally generic
10903:05 < t0m> 4) merge&profit
11003:05 < t0m> *conversion
11103:05 < dhoss> rearrange meaning mv foo MyApp?
11203:06 < t0m> erm, yes, as described above, so that the contents of share/ is
113 laid out the same as a newly generated MyApp
11403:06 < dhoss> OH
11503:06 < dhoss> okay
11603:06 < dhoss> instead of my current fuckery :-)
11703:06 < dhoss> autarch: btw if you have an idea for that i'd love an email to
118 the one in topic
11903:06 < t0m> cause then the entire generate application becomes 'copy this
120 directory from X => Y, applying some file mangling rules)
6be0f534 121
122=============================================================================
12304:26 < t0m> dhoss: erm, yeah - so the two things to do is: unit tests for the
124 methods like get_file which we're not actually using any more..
12504:27 < t0m> (do that by making t/lib/ExampleHelper.pm - copy the TT one from
126 CPAN or something, and then write some tests that get_file can
127 successfully pull chunks out the __DATA__ segment
12804:28 < t0m> and rename everything in the sharedir to be named as-per where it
129 ends up in your app, but suffixed by .tt or .bin
13004:29 < t0m> e.g. share/Makefile.PL.tt share/root/favicon.ico.bin
131 share/lib/MyApp.pm.tt
13204:30 < t0m> the exact reasons for this nameing scheme become aparent post
133 first merge, when we remove most of the code :)
13404:30 < t0m> but all of share/ needs to be in it's final resting place pre-merge
13504:31 < marcus> http://lumberjaph.net/blog/index.php/2009/05/30/catalystxdispatcherasgraph/ # <3 lazyweb
13604:31 < t0m> so tests the stuff we're no longer using in Helper.pm (e.g.
137 get_file) still works. Rename share/ bits
13804:31 < t0m> marcus: Indeed :)
13904:31 < t0m> ^^ those two, then first merge.
9b5ece3f 14023:36 <@kd> dhoss: just found a bug in ::Devel ...
14123:36 <@kd> we're using #!/usr/bin/env perl now
14223:36 <@kd> that means we have to add the use warnings; pragma beneath it
14323:37 <@kd> that doesn't appear to be happeining in the scripts
14423:37 <@kd> please fix
14523:38 <@kd> dhoss: i.e. http://gist.github.com/122081
5c330d3c 146==============================================================================
99d7d5b9 147
148# DONE
5c330d3c 1491. Rename everything into final layout:
150 . tt files all named .tt
151 . none tt files all named .bin
152 . directory structure as generated, e.g. share/lib/MyApp.pm.tt, share/root/favicon.ico.bin
153
1542. get new layout working
155
99d7d5b9 156
157# DONE
5c330d3c 1583. get tests for back compat - i.e. the methods no longer used in Helper.pm like 'get_file'
159 . copy Catalyst::Helper::View::TT into t/lib/TestBackCompat.pm
160 . write test t/deprecated_methods_backcompat.t which says:
161 use FindBin qw/$Bin/;
162 use lib "$Bin/lib";
163 use Test::More tests => 1;
164
165 my $helper = TestBackCompat->new( %maybe_some_params_here );
166 my $a_section = $helper->get_file('FileName');
167 is $a_section, 'FILECONTENTSFROM__DATA__';
168
99d7d5b9 1693. RFC - DONE
5c330d3c 170
171Looking ahead
172
173MooseX::Getopt
6be0f534 174
b87c5403 175################################################################################
17617:46 < t0m> dhoss: erm, oh, so the _other_ thing I didn't think of
17717:46 < t0m> Is Cat works on windows
17817:46 < t0m> I have stuffed loads of "t/foo.t"
17917:46 < t0m> into strings.
18017:46 < t0m> which will break win
18117:47 < t0m> so, all those places where I just "string/append/a/file.name"
18217:47 < t0m> you need to use Path::Class qw/file/; file(qw/ string append a
183 file.name /);
18417:47 < t0m> like ^^^
18517:48 < t0m> then it will still work on win32
18617:48 < dhoss> noted
18717:48 < t0m> There is already File::Spec->catfile
18817:48 < t0m> which does the same thing
18917:48 < t0m> but more ugly
19017:48 < t0m> either/or
19117:48 < purl> either/or is "public load_first_existing_class" or "load_class
192 passes multiple args to load_first_existing_class"
19317:48 < t0m> don't care...
19417:49 < t0m> Just "file/name" is BAD
19517:49 < t0m> and will hate windows users
196
197Summary:
78b98607 19817:43 < dhoss> 1. fix pod coverage, 2. remove TestAppForInvocation 3. ??? # DONE
19917:43 < t0m> 3. merge # DONE
b37d9199 200################################################################################
201--- Log opened Wed Jun 17 18:23:06 2009
20218:23 -!- Irssi: Starting query in perl with t0m
20318:23 <t0m> yo. wanna pick my brain affore I crash?
20418:23 <t0m> I wanna branch, and start hacking local::lib stuff
20518:23 <t0m> but that'll do a 4am on me again
20618:24 <dhoss> okay, yes
20718:25 <dhoss> i stopped after the last thing we talked about, the Moose-ification of Helper.pm. started that but nothing significant
20818:26 <t0m> no worries. There's at least 2 things you can work on right now obviously
20918:26 <t0m> one being that
21018:26 <t0m> one being hacking the generated
21118:26 <t0m> +code
21218:26 <t0m> one being tests for the generation stuff
21318:27 <t0m> at least 2 :)
21418:27 <dhoss> :-D
21518:27 <dhoss> lemme check hiveminder
21618:28 <t0m> but yeah, first 2 can be independent branches. +tests can just go in trunk
21718:29 <dhoss> so branch again
21818:29 <dhoss> and work on scripts
21918:29 <dhoss> which are tasks...hold on
22018:30 <t0m> and branch again for moosify helper. if you want. I mean work on what you wanna work on - I'm just saying after stage 1, there is a whole spread of stuff to do now
22118:30 <dhoss> #PYMI,#PYM9?
22218:30 <dhoss> yea, i'd love to moosify the helper
22318:30 <t0m> Also, probably not enough todos to cover it - there is removing all the hardcoded filenames...
22418:31 <t0m> so many stuff.
22518:31 <t0m> cool, do that then :)
22618:31 <t0m> then we'll actually refactor/rewrite it
22718:31 <t0m> so all those _mk_foo things go away
22818:31 <dhoss> okay, sweet, yea i forgot the about the hardcoded shits
22918:31 <dhoss> okay, so my famous list:
23018:31 <t0m> that's going to involve some fun Module::Install hacking ;)
23118:32 <dhoss> making _mk_blargh go away is?
23218:32 <t0m> just so
23318:32 <t0m> oh, sorry - yeah. _mk_favicon
23418:32 <dhoss> just so == yes? (sorry, my crosspondia lang isn't up to snuff)
23518:32 <t0m> etc etc etc
23618:33 <t0m> just so = yes = exactly like you descibed but I misread what you said.
23718:33 <dhoss> ahaha :-)
23818:33 <t0m> basically, the code has sub _mk_foo { render('lib/foo..pm.tt', 'lib/foo.pm') } (pseudocode)
23918:34 <dhoss> okay, so: 1. #PMYI 2. #PYM9 3. Moosification of halper
24018:35 <t0m> if you could do foreach my $from_fn_-_to_fn ( $self->get_list_of_things_in_sharedir ) {
24118:35 <t0m> ^^ That would suck so much less
24218:36 <dhoss> yea i've been looking at something like that
24318:38 <t0m> that's fairly easy, with the way we did the rename
24418:38 <t0m> initially, if you just found everything not /\.tt$/
24518:38 <dhoss> exactly, phrew
24618:39 <t0m> and transplanted them
24718:39 <t0m> that would be a good start
24818:39 <t0m> in fact, you could add that
24918:39 <t0m> not take any code away
25018:39 <t0m> just copy the files twice
25118:39 <t0m> not fail tests
25218:39 <t0m> commit
25318:39 <dhoss> copy the files twice?
25418:39 <t0m> take away the _mk_favicon etc methods one by one
25518:40 <dhoss> aha, and add that loop
25618:40 <t0m> well, if you run foreach my $binfile ($self->find_all_bin_files) { $self->copybinfile_to_app($binfile) }
25718:40 <t0m> (pseudocode)
25818:41 <t0m> ^^ Adding that to the current generation process won't break anything
25918:41 <t0m> You just generate the favicon.ico (etc) twice
26018:41 <t0m> once in that loop
26118:41 <t0m> once in pre-existing $self->_mk_favicon
26218:41 <t0m> in the same place..
26318:41 <t0m> so you overwrite it the 2nd time
26418:41 <dhoss> okay, so *leave* _mk_blargh and copy it into the for loop, i get it
26518:42 <t0m> well, do the generic thing in the for loop
26618:42 <t0m> in fact - here is a smart move. You know the 'check generated files' test?
26718:42 <dhoss> yes
26818:42 <t0m> unlink each file
26918:43 <t0m> after you pass a test as it exists
27018:43 <t0m> then add an extra test doing a File::Find
27118:43 <t0m> and fail if it finds anything
27218:43 <dhoss> so check file, unlink, then another test to look for leftovers
27318:44 <t0m> exactly
27418:44 <t0m> then you add something generic to copy bin files
27518:44 <dhoss> and, forgive me, but what does that help us make sure we've done?
27618:45 <t0m> Makes sure you're not suddenly generating t/01app.t and t/01/app.t.tt # Oops, you fucked up the 'what file name do I generate test'
27718:45 <t0m> s/test'$/code'/
27818:46 <t0m> so you don't ever accidentally generate duplicate files with diff names
27918:46 <t0m> or blank files with a weird name
28018:46 <dhoss> okay, i think i understand
28118:47 <t0m> or genrally any shit you're not specificially saying 'we test it generates a file named X'
28218:47 <t0m> you test it generates X
28318:47 <t0m> you test it does not generate anything other than X
28418:47 <dhoss> right
28518:47 <dhoss> oaky
28618:47 <dhoss> that's what i figured
28718:47 <t0m> sorry => tangent :)
28818:48 <dhoss> it's okay, i'm a one track mind with this stuff :-)
28918:48 <t0m> I can't find pmyi, but pym9 cool
29018:49 <dhoss> Try rewriting script_create.pl and see how far you can get - the big issue is going to be help display
29118:49 <dhoss> that's pmyi
29218:49 <t0m> yes
29318:49 <t0m> exactly so :)
29418:49 <t0m> Oh, no, hang on
29518:49 <t0m> Rewrite script_server.pl first
29618:50 <t0m> in fact, rewrite everything that isn't _create first
29718:50 <t0m> _create is the hardest
29818:50 <t0m> and needs the most thinking
29918:50 <t0m> by a fucking long shot
30018:50 <t0m> I think _create probably involves MooseX::App::Cmd
30118:51 <dhoss> so, rewrite with Moose sex getops
30218:51 <t0m> do the simple ones
30318:51 <t0m> first
30418:51 <t0m> like myapp_server.pl
30518:51 <t0m> like you just said :)
30618:51 <t0m> which will get you up to scratch on the Moo sex
30718:51 <t0m> before you have to hack it
30818:52 <t0m> Also, we can then start the bikeshedding about the right thing to do with moving the real code back into a CPAN dist
30918:52 <t0m> rather than it being in generated scripts
31018:52 <dhoss> right, that would be awesome :-)
31118:53 <t0m> myapp_XXXXX.pl should say: use Catalyst::Script::XXXXX; Catalyst::Script::XXXXX->new_with_options->run;
31218:53 <t0m> + shebang line
31318:53 <dhoss> right, i saw that in the list
31418:53 <t0m> kk. So make the simple scripts MX::Getopt packages
31518:54 <t0m> with the ->new_with_options->run incantation at the end of the source
31618:54 <t0m> hit until myapp_server.pl works like it used to.
31718:54 <t0m> rip Catalyst::Script::DevServer out
31818:55 <t0m> job done
31918:55 <dhoss> okay. i'll give it a crash
320--- Log closed Wed Jun 17 19:00:38 2009
321--- Log opened Wed Jun 17 19:00:44 2009
32219:00 <t0m> http://scsys.co.uk:8001/29932.
32319:00 <t0m> I guess something like that but with less syntax errors works
32419:01 <t0m> expand out till original functionality replicated :)
32519:01 <dhoss> Moose<3
32619:01 <dhoss> thanks man
32719:04 <dhoss> i'm gonna get some grub. i'll ping you if i have any questions, i appreciate the help :-)
32819:06 <t0m> no worries. I'm at 2am
32919:06 <t0m> so => bed
33019:08 <dhoss> hehe sleep up man
331--- Log closed Wed Jun 17 19:13:38 2009
884c19d3 332++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
33312:39 < t0m> to check we generate an application which can pass it's own tests
334 :)
33512:40 < dhoss> so write a test to do taht?
33612:40 < t0m> yy, that would be cool. Can just be on the bottom of the generated
337 files one
33812:41 < t0m> run Makefile.PL, check exist status 0, check 'Makefile' exists,
339 run make test, check exit status zero
34012:41 < dhoss> i trust something like `$perl Makefile.pl; make test` would do?
34112:41 < t0m> *exit status
34212:41 < dhoss> or is that windows unfriendly?
34312:41 < dhoss> OH SHIT
34412:41 < dhoss> thats right
34512:41 < t0m> yeah, pretty much
34612:41 < dhoss> i have to fix those /'s
34712:41 < dhoss> make em windows happy
34812:41 < t0m> yy, good one, File::Spec->catfile it up :)
34912:42 < dhoss> i'm working on hacking buubot to read my mind
35012:42 < dhoss> so i can just tell it to grab shit i say and todo it
35112:42 < t0m> other than that, lets leave it till we can actually see a need for
352 more tests..
35312:42 < dhoss> that's *fine* by me :-)
35412:43 < dhoss> so i can branch and moosify, and hack on the create scripts to
355 make them moosey
35612:43 < dhoss> also, what does MX::Getopt need to play nice?
35712:43 < t0m> yy. I guess if you hack on the scripts, you want to write tests
358 that they still perl -c in the generated app
35912:43 < t0m> yy. I guess if you hack on the scripts, you want to write tests
360 that they still perl -c in the generated app
36112:43 < t0m> and attack the simple scripts like myapp_server.pl first
36212:44 < t0m> And you'll work out what GetOpt struggles with :)
36312:44 < dhoss> which one was the pain in the ass one? was that create?
36412:44 < t0m> yy
36512:44 < dhoss> ok, i got them backwards
36612:44 < t0m> create has much more elaborate option parsin
36712:44 < t0m> *parsing
36812:44 < dhoss> okay. that will be a later beast
36912:45 < t0m> so yeah, just branch and jfdi, add tests for things as you touch
370 them - as you touch scripts add a 'scripts still compile' test
37112:46 < t0m> when each script is nicely getopt'd and refactored, it'll be easy
372 to test a lot more..
373
b87c5403 374
c5387711 375
376