[01:25] <sabdfl> stub: ping
[01:25] <sabdfl> stub: how painful are table renamings?
[01:25] <sabdfl> bugsystem -> bugtracker
[01:25] <sabdfl> projectbugsystem -> projectbugtracker
[02:09] <kiko> sabdfl, do you have time for a code-related question?
[02:09] <sabdfl> kiko: just have to land the patch for the renaming I just accidentally mailed about :-)
[02:09] <sabdfl> pressed send before i had committed... doh
[02:09] <kiko> heh
[02:10] <sabdfl> 5 minutes ok?>
[02:10] <kiko> hopefully PQM will be merciful
[02:10] <kiko> sure.
[02:23] <kiko> sabdfl, my question pertains to the intended location of the application component interfaces
[02:24] <kiko> I understand the database class interfaces should live in lauchpad/interfaces/
[02:24] <kiko> however what about application component classes and views?
[02:28] <sabdfl> kiko: some views are strongly bound to the domain object and generally useful
[02:29] <sabdfl> for example, tonight I just reused a method from the BugSystemSetView onto ProjectView to allow for the creation of a BugTracker on a Project as well as from scratch
[02:29] <sabdfl> the code was common so I took the View method, made it a freestanding function, then got both View's to call that
[02:30] <sabdfl> and it seems to make sense to have a place to keep view code that can be commonly used with the domain objects in some domain-oriented place rather than in the app itself
[02:30] <sabdfl> i just don't know exactly where yet
[02:30] <sabdfl> kiko: your suggestion?
[02:31] <kiko> I'm not sure yet, I wanted to hear your opinion on it now that you have your hands dirty
[02:31] <kiko> that's definitely true
[02:32] <kiko> in a new system we're architecting the domain classes are actually packages that have multiple modules in them -- you have product/ and then klass.py, queries.py, helpers.py, etc.
[02:33] <kiko> you could even have local views though I currently don't like that very much because it makes domain depend on interface classes
[02:33] <sabdfl> let's get a little dirtier for a while then figure out where to put it
[02:33] <sabdfl> should be less work that the last one :-)
[02:33] <kiko> yes, that's definitely the right way to do it
[02:33] <kiko> oh, you saw my timezone message then <wink>
[02:35] <kiko> having the domain classes be packages allows you to keep a lot of useful code bound together with it
[02:35] <kiko> the actual views and application components can then just pull stuff from them and compose the interface
[02:35] <kiko> sabdfl, this function you created, where did you put it?
[02:35] <kiko> in project.py?
[02:36] <sabdfl> no, in canonical.malone.browser
[02:36] <sabdfl> it's really a view function
[02:36] <sabdfl> and really related to bug trackers
[02:37] <sabdfl> so canonical.doap.browser.py just imported it from canonical.malone.browser.py
[02:37] <kiko> so it couldn't for instance be reused in a soyuz view of a project?
[02:37] <sabdfl> yes it could
[02:37] <kiko> somehow I don't like cross-package imports like that -- it seems like it should be moved somewhere "higher" 
[02:37] <kiko> OTOH we don't have a place to peg this sort of common code right now
[02:38] <kiko> in our projects I solve that by providing a components/ package that has interface+domain glue that all applications can use
[02:38] <kiko> so there's a components/person/ that actually provides multiple views of person that any app can choose to use at any time
[02:38] <kiko> I figure we should have something like portlets/ at least
[02:39] <kiko> so that soyuz knows exactly where to look for portlets that display bug data, for instance
[02:40] <kiko> I wonder
[02:40] <kiko> does the code in your function actually depend on anything UI-related?
[02:40] <kiko> (if it's not big, perhaps privmsg it to me?)
[02:46] <sabdfl> kiko: it needs a form and an owner
[02:46] <sabdfl> so i just pass both as arguments
[02:46] <sabdfl> the view object calls newBugTracker(form, owner)
[02:47] <sabdfl> i could have done newBugTracker(request) which I guess would give you enough to work it all out in the function
[02:47] <kiko> I guess it's still pretty tied to UI code, though, if we're dealing with requests and forms
[02:50] <sabdfl> yes, it is, which is why i put it in browser
[02:50] <sabdfl> i guess we could have a canonical.launchpad.browser/
[02:50] <sabdfl> which has a bunch of View's in it which are generally useful
[02:51] <sabdfl> and then the REAL app stuff could be in canonical.rosetta etc
[02:51] <sabdfl> but let's see how it goes
[02:51] <sabdfl> unless you see a pressing need to reorg that too :-)
[02:53] <kiko> I reckon we can wait till people think it's safe to go back to their little directories
[02:53] <stub> The cross imports between canonical.doap.browser and canonical.malone.browser is leading towards ugly cross import problems. The component architecture should make this unnecessary.
[02:53] <kiko> and then hit them with a 10am-13pm UTC surprise
[02:54] <kiko> stub, do you have a good solution for storing view-specific code that is common between apps?
[02:55] <stub> I'd have to see what doap.py is currently importing from malone and why... is that committed?
[02:56] <sabdfl> stub: should be now
[02:56] <sabdfl> morning
[03:00] <stub> In this case I guess to want to register the common functionality as a Utility
[03:01] <stub> (assuming it is just a function in malone/browser.py you need to share)
[03:03] <sabdfl> how do I do a many to many join in sqlobject?
[03:03] <sabdfl> in other words I want to return Project.bugtrackers 
[03:03] <sabdfl> where bugtrackers is the set of BugSystem obejcts as joined through the ProjectBugSystem table?
[03:03] <sabdfl> stub: yes it's just a function
[03:04] <sabdfl> stub: any idea on the ManyToMany join questioN?
[03:06] <stub> Yer - I'm just looking it up. Haven't used it myself though.
[03:06] <lifeless> lucille ?
[03:06] <sabdfl> lifeless: archive management stuff for james
[03:06] <stub> http://www.sqlobject.org/docs/SQLObject.html#relatedjoin-many-to-many
[03:07] <stub> Unfortunately I don't think you can use RelatedJoin until the SQLObject update has been done
[03:08] <sabdfl> stub: thanks
[03:08] <sabdfl> hmm... is the sqlobject NOT done?
[03:08] <sabdfl> lifeless: ?^?
[03:08] <lifeless> hmm ?
[03:09] <stub> https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=2020
[03:10] <lifeless> ah, crossed wires.
[03:11] <lifeless> I was waiting for a definative list of which local patches we wanted preserved.
[03:11] <lifeless> the code import itself is done and in rocketfuel since the 28th.
[03:12] <lifeless> SteveA: does sqlobject 0.6 have your feature to error on duplicate sqlobject class names ?
[03:14] <stub> lifeless: No - we need to reapply that patch. BradB only put it in upstream a few days ago I think.
[03:15] <lifeless> ok sqlobject--test--0.6 now has all our local changes
[03:21] <sabdfl> AttributeError: 'SORelatedJoin' object has no attribute 'otherClass'
[03:21] <sabdfl> anybody seen that before?
[03:23] <lifeless> do we have the update-database without-losing-contents script yet ?
[03:25] <dilys> Bug 2020 resolved: Update our SQLObject snapshot to 0.6 release
[03:25] <dilys> https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=2020
[03:29] <sabdfl> stub: how hard is table renaming?
[03:31] <stub> alter table foo rename to bar;
[03:31] <stub> trivial
[03:31] <stub> Fallout on the Python level is more what you would worry about, and grep will normally see to that.
[03:33] <sabdfl> stub: ok, please do the following,I'll clean up and commit working code:
[03:33] <sabdfl> bugsystem -> bugtracker
[03:34] <lifeless> should there be a launchpad_unittest target in database/schema ?
[03:34] <sabdfl> projectbugsystem -> projectbugtracker
[03:34] <sabdfl> are fieldnames as easy?
[03:34] <stub> ALTER TABLE SourcepackageBugAssignment ADD FOREIGN KEY (binarypackage) REFENRECES BinarypackageName  <-- should this go in now too (patch is in my pending queue)
[03:35] <lifeless> ok, trying to do this production update test, but the unit & functional tests are failing.
[03:35] <sabdfl> stub: i think we want to change the name of the field as well if we change it's target
[03:35] <sabdfl> binarypackagename
[03:35] <lifeless> is that expected ?
[03:35] <sabdfl> otherwise it would be inconsistent
[03:36] <stub> sabdfl: I agree - I was just trying to minimize changes since we have a deadline ;)
[03:37] <sabdfl> let's get them in now
[03:37] <sabdfl> while you're at it
[03:37] <lifeless> eek.
[03:37] <sabdfl> can we rename projectbugtracker.bugsystem to projectbugtracker.bugtracker
[03:38] <lifeless> I can only confirm stuff isn't broken at the revision I'm merged to...
[03:38] <sabdfl> stub: what's the sql to do the field renames?
[03:38] <sabdfl> lifeless: none of these tables are stuff you depend on
[03:38] <sabdfl> even indirectly
[03:38] <stub> ALTER TABLE foo RENAME COLUMN bar TO baz;
[03:38] <lifeless> ok.
[03:39] <lifeless> then It'll be your problem :)
[03:39] <lifeless> I'd like to have the unit & functional tests passing though.. is there any comment on the fact they are failing at all ?
[03:39] <sabdfl> alter table projectbugtracker rename column bugsystem to bugtracker;
[03:39] <sabdfl> this after the previous table renames
[03:40] <kiko> lifeless, brad shot off some emails on the issues this week
[03:41] <lifeless> kiko: so make test is expected to fail ? Ok then.
[03:41] <kiko> err, rather, today.
[03:41] <stub> sabdfl: Just testing the patch now before I commit that with the other pending changes
[03:41] <kiko> yes, it currently fails, though people are expected to fix that ASAP as we want to turn tests back on.
[03:41] <kiko> (in PQM, lifeless)
[03:42] <stub> justdave: I suspect this will definitely break check-watches.py
[03:42] <lifeless> kiko: yes, I was wondering about that :)
[03:49] <kiko> andrew was a bit unhappy about it
[03:51] <justdave> stub: yes it will, but I was expecting that :)
[03:55] <lifeless> sabdfl: ok, the first thing that brakes is /soyuz/projects/view-a-project
[03:55] <lifeless>     *
[03:55] <lifeless> AttributeError: 'Product' object has no attribute '_poTemplatesJoin'
[03:55] <sabdfl> lifeless: there's a much newer and better doap framework
[03:55] <lifeless> and equally
[03:56] <lifeless> doap/projects/iso-codes
[03:56] <lifeless> with the same error
[03:56] <lifeless> that works for for the project aaa.
[03:56] <lifeless> garh.
[03:57] <stub> database patches are with pqm
[03:57] <lifeless> ok, importantly, the do-not-use-info-imports project fails
[03:57] <lifeless> and thats the one I need access to.
[03:57] <lifeless>     *
[03:57] <lifeless> AttributeError: 'Product' object has no attribute '_poTemplatesJoin'
[03:58] <lifeless> ditto for the 'Launchpad mirroring project'
[03:58] <sabdfl> stub:
[03:58] <sabdfl> alter table bugtracker rename column bugsystemtype to bugtrackertype;
[04:02] <sabdfl> stub: ok?
[04:04] <sabdfl> lifeless: it most certainly does... where are you importing Project from?
[04:05] <stub> IRC is probably not the best medium for this :-)
[04:09] <sabdfl> stub: also need a unique name on bugtracker
[04:09] <sabdfl> also, need unique (project, bugtracker) on projectbugtracker
[04:09] <sabdfl> stub: i have working code for the post-rename platform
[04:09] <sabdfl> hmm... for a loose definition of woring, given the state of our tests
[04:10] <stub> unique(project,bugtracker) is already there.
[04:10] <sabdfl> oops, true
[04:10] <lifeless> sabdfl: what do you mean by 'importing Project' ?
[04:11] <sabdfl> import canonical.launchpad.database is the way to do it
[04:11] <sabdfl> is that where you are finding your Project object?
[04:11] <lifeless> I've just : grabbed the latest code, run the schema makefile to update the database, run make run in the top
[04:11] <sabdfl> lifeless: or just give me a url that is breaking
[04:11] <lifeless> I then browsed to the new doap stuff
[04:11] <sabdfl> ok
[04:12] <lifeless> http://localhost:8085/++skin++Debug/doap/projects/launchpad-mirrors
[04:13] <sabdfl> 'sworking fine here
[04:13] <lifeless> garh.
[04:13] <lifeless> ok, I'll nuke my database and retest. The concern though is - we can't do that to emperor.
[04:14] <lifeless> (new sample data works fine under the same /doap/projects/
[04:14] <lifeless> (its only existing sample data or production data it has trouble with)
[04:14] <sabdfl> stub: 
[04:14] <sabdfl> DatabaseException: ERROR:  relation "bugtracker_id_seq" does not exist  SELECT NEXTVAL('BugTracker_id_seq')
[04:15] <sabdfl> does the rename automatically rename the seq tables?
[04:16] <kiko> nope.
[04:16] <kiko> it doesn't.
[04:16] <sabdfl> nice
[04:17] <stub> No it doesn't, and I don't think we want to (it involves creating a new sequence with the new name, setting its current value correctly, and resetting the default value on the tables primary key). 
[04:17] <stub> oh...
[04:19] <sabdfl> hmm... what about
[04:19] <sabdfl> alter table bugsystem_id_seq rename to bugtracker_id_seq
[04:19] <sabdfl> seems to work here
[04:20] <sabdfl> kiko?
[04:25] <lifeless> sabdfl: its a canonical.launchpad.dmark.Product product instance, but it has not _poTemplatesJoin attribute
[04:26] <kiko> sabdfl, that's peculiar -- you're using alter table on a sequence?
[04:27] <kiko> or do you mean alter sequence bugsystem_id_seq?
[04:27] <lifeless> sabdfl: going to the gimp project, doesn't trigger the same code path.
[04:28] <kiko> ack
[04:28] <kiko> bizarre. pgsql has no alter sequence, you're right
[04:29] <kiko> sabdfl, sounds correct then. you alter the table and then the sequences it should use.
[04:31] <stub> kiko: I think they just overloaded the alter table command to deal with sequences, or it is possibly just a useful side effect
[04:31] <sabdfl> lifeless: i'll commit to my latest revision, which works on the arch-mirrors project
[04:31] <lifeless> sabdfl: thanks
[04:31] <lifeless> I'm tracking it down, nearly there :)
[04:32] <lifeless> oh, I know why
[04:32] <lifeless> the same data has no products.
[04:32] <lifeless> so the code int he template that fails is never triggered. you need products to trigger it.,
[04:33] <lifeless> does your arch-mirrors project have any products ?
[04:33] <lifeless> separate question, how do I give myself a usercode ?
[04:35] <sabdfl> you guys seeing chinstrap.warthogs.hbd.com?
[04:35] <lifeless> yes, just fine
[04:36] <lifeless> its idling.
[04:38] <sabdfl> lifeless: i think that's fixed in a recent commit. sec//
[04:40] <sabdfl> stub, lifeless: pqm mail on the wire
[04:41] <stub> lifeless: Sample data has no products at the moment, as the inserts are failing because there are no people :-/
[04:41] <sabdfl> lifeless: the page template still links to "+add-sourcesource"
[04:42] <sabdfl> what is the correct url for me to test with locally?
[04:42] <sabdfl> stub: where are all the people?
[04:43] <lifeless> sabdfl: it used to be /soyuz/project/product/+add-sourcesource , then .../sourcesourcename
[04:43] <stub> sabdfl: Being created *after* the projects are trying to be created :-/
[04:44] <stub> Yes - I think somebody has stuck a load of inserts manually at the top of current.sql
[04:46] <sabdfl> ah
[04:47] <sabdfl> does pg_dump do things in a fashion that avoids this?
[04:47] <sabdfl> maybe we should create new-samledata.sql with a big warning at the top of the file:
[04:48] <stub> Don't worry - I think it was me :-)
[04:48] <sabdfl> DO NOT EDIT THIS FILE
[04:48] <sabdfl> ?
[04:48] <stub> Must have sneezed at the wrong time and made vim do something nasty ;)
[04:48] <lifeless> stub: so how do I add a person for me ?
[04:49] <stub> lifeless: There is a readme file that Mark wrote in database/sampledata
[04:49] <stub> lifeless: But don't do it yet, as the new method of making sampledata will not merge well and I'm playing with it atm.
[04:50] <sabdfl> stub: hmm.. merges could be fun
[04:50] <lifeless> stub: the readme doesn't tell me
[04:50] <lifeless> that talks about updating the sample data, not about bootstrapping a usercode with password when you don't have one in the first place.
[04:51] <stub> Oh... ic. The script is in rosetta - look for createuser.py
[04:51] <stub> You would use that to create your user (crypt your password and insert into the Person table basically), then do the stuff described in sampledata/README to make a snapshot of your database.
[04:52] <sabdfl> lifeless: foo.bar@canonical.com
[04:52] <sabdfl> password test
[04:52] <lifeless> sabdfl: thanks.
[04:52] <sabdfl> but.. your scripts want you, i guess
[04:52] <lifeless> I'll need to do the createuser thing on emperor though...
[04:53] <lifeless> nope, your tweaks don't fix it.
[04:53] <lifeless> its the lack of products that stop you seeing it I think.
[04:54] <lifeless> oh bah, and now a problem with _bugtrackers.
[04:55] <sabdfl> lifeless: i think i've found the problem code
[04:55] <lifeless> cool
[04:56] <lifeless> I'll go grab a late breakfast.
[04:56] <lifeless> as I'm starving
[05:06] <stub> patch going to pqm now
[05:07] <sabdfl> lifeless: were you tracking the renaming at all?
[05:13] <lifeless> sabdfl: yes, but at the email level, not hte code level - no time to do more
[05:13] <sabdfl> ok, theres a lot to clean up
[05:13] <sabdfl> i'm on it now, may as well pull an all nighter
[05:13] <lifeless> get some sleep... sleep is important.
[05:14] <sabdfl> no, i think i want to commit this so I can as you to replace the "duh" lines with something more... explanatory
[05:14] <lifeless> sure thing.
[05:15] <lifeless> that was all the last day @ london :[
[05:15] <sabdfl> sure, time to clean it up though
[05:15] <sabdfl> ill get everything renamed and in the right places
[05:15] <sabdfl> and running
[05:16] <lifeless> thank you
[05:16] <lifeless> I'll go back to default-branch handling for now then
[05:17] <sabdfl> lifeless: please don't use arch-tag in new files
[05:17] <sabdfl> let's stick to tla add
[05:17] <lifeless> sabdfl: why not ?
[05:18] <lifeless> (arch tag is faster, able to carry data via patch | inclusion in svn etc, able to just be 'mv'ed)
[05:19] <sabdfl> lifeless: when you copy the file, arch bitches
[05:20] <lifeless> sabdfl: right, because you have the same id present, so you just update the tag, same as if you copy a file then run tla add.
[05:21] <sabdfl> right now, half the files have them, half don't and i don't like it
[05:21] <sabdfl> nor does the rest of the launchpad team
[05:21] <lifeless> oh.
[05:22] <lifeless> ok, for launchpad, I won't arch-tag files.
[05:32] <sabdfl> lifeless: how do you specify an Interface for a method that takes **kwargs
[05:32] <sabdfl> ?
[05:33] <lifeless> erm, the usual I'd have said:
[05:33] <lifeless> method(known, arguments, *args, **kwards)
[05:34] <sabdfl> thankjs
[05:36] <lifeless> did you know i'm up to 320 tests in cscvs ?
[06:10] <sabdfl> lifeless: you're making baby jesus cry over here
[06:11] <lifeless> sorry baby jesus
[06:11] <lifeless> baby sqlite is making me cry now
[06:14] <sabdfl> what do you use sqlite for ? cscvs?
[06:14] <lifeless> yes
[06:14] <lifeless> the temporary cache of CVS changesets
[06:14] <sabdfl> i have had to really brutalise the classes you created for sync db insertion
[06:15] <sabdfl> where are you using those classes, and are there tests?
[06:15] <lifeless> what file where they int ?
[06:15] <sabdfl> if it's enough just to get the data in the db, that's up and running now
[06:15] <sabdfl> when?
[06:15] <lifeless> if they came from canonical.arch.*, then I was using them in buildbot and in launchpad and there is good test coverage.
[06:16] <lifeless> if they came from canonical.soyuz.*, then just stashing the data in the database is enough.
[06:16] <lifeless> but there isn't great test coverage for the soyuz ones ( the functional test framework wasn't present when I was writing the bulk of that code)
[06:16] <sabdfl> the latter, phew
[06:17] <stub> sabdfl: When Malone sends an email to a Person, which email address does it use? I think we need a 'preferredemail'  column in the People table
[06:17] <sabdfl> agreed, but what if there isn't a preferred email, o any email?
[06:17] <lifeless> preferred contactdetails ?
[06:18] <stub> It should be set automatically to the first confirmed address. If there  is no preferred email or no email we don't send them anything
[06:19] <stub> (or better yet, refuse to let them be subscribed as a CC in the first place in that situation, although we still need to cope if they remove their email addresses later or they become invalid)
[06:21] <stub> lifeless: I was thinking of just a foreign key referencing the emailaddress table
[06:22] <stub> Or perhaps a preferred boolean column on the emailaddress table would be better...
[06:22] <lifeless> I was thinking just tack an object against the Person... represent that in the db the easiest way.
[06:25] <stub> It is tied to the emailaddress table though, where we store the status (new, confirmed, old).
[06:29] <stub> Hmm... actually we *could* just use the existing status column. 
[06:54] <sabdfl> i like the idea of doing nothing till we have a confirmed email for them
[06:54] <sabdfl> at that point, they are a user
[06:54] <sabdfl> till then, they are data
[06:55] <sabdfl> what's the magic to get Table.select(name='foo')?
[06:56] <sabdfl> stub?
[06:57] <kiko> magic?
[06:57] <kiko> Table just needs to inherit from SQLOS or whatever our base clase is :)
[07:10] <sabdfl> kiko: can you give me an example using Product?
[07:10] <sabdfl> I want the product with name='foo'
[07:11] <kiko> sure
[07:11] <sabdfl> >>> p.select(name='gnome')
[07:11] <sabdfl> Traceback (most recent call last):
[07:11] <sabdfl>   File "<stdin>", line 1, in ?
[07:11] <sabdfl> TypeError: select() got an unexpected keyword argument 'name'
[07:11] <sabdfl> >>>
[07:11] <sabdfl> p = Project
[07:12] <kiko> Project.select(Project.q.id == 23) 
[07:12] <kiko> for instance
[07:13] <kiko> there are examples in soyuz/sql.py I suspect
[07:14] <sabdfl> ah
[07:14] <sabdfl> thanks
[07:14] <kiko> I don't have a tree to peek at right now
[07:14] <lifeless> sabdfl: usually though I think its best to abstract that.
[07:14] <lifeless> it makes the code very dependent on the exact db structure.
[07:15] <kiko> lifeless, abstracting by providing class methods like getProjectByID?
[07:15] <lifeless> kiko: for example, yes.
[07:15] <lifeless> actually, the DataMapper pattern from POEAA is a much better way, which I started implementing for Product Project and Sync in soyuz
[07:16] <kiko> well, okay, but I tend to think that the domain code is helplessly intertwined with SQL and therefore tightly coupled to the db schema
[07:16] <lifeless> but, any abstraction that decouples data representation and semantics is the key,
[07:16] <kiko> in practice at least
[07:16] <lifeless> kiko: thats the whole point of the abstractions, they prevent that.
[07:16] <lifeless> Have you got a copy of POEAA ?
[07:16] <kiko> Patterns of ... ?
[07:17] <kiko> maybe I do
[07:17] <lifeless> patterns of enterprise application architecture
[07:17] <lifeless> fowler
[07:17] <kiko> martin
[07:17] <kiko> I see.
[07:18] <kiko> the problem I see is that IRL unless the abstraction is really flexible you end up cheating here and there to get things to just go as you need them to.
[07:18] <kiko> I'm okay with cheating though
[07:18] <kiko> and if you accept that I'll agree that providing abstractions that are cheatable are much better than sprinkling column and table names around application code if possible.
[07:19] <kiko> if your abstraction is just a dictionary mapping X to Y however.. ;-)
[07:19] <sabdfl> kiko: how do i use tal to specify a url that's like /xxx/name/
[07:19] <sabdfl> where xxx is fixed
[07:19] <sabdfl> and name comes from tal
[07:19] <sabdfl> like:
[07:19] <kiko> hummm
[07:19] <sabdfl> like: /srcpkg/5/
[07:20] <sabdfl> if i use tal:attributes it replaces the whole href
[07:20] <lifeless> kiko: sabdfl string('xxx') + context/name
[07:20] <kiko> hmmmm, can I see the whole statment
[07:20] <lifeless> I think you need python: or something in there too.
[07:21] <lifeless> kiko: right, so what you do is you encapsulate the semantics of the domain<->persistence in the data mapper.
[07:21] <sabdfl> <a tal:attributes="href string('sourcesource/') + source/name"
[07:21] <lifeless> then when you need to cheat, you just extend the datamapper appropriately.
[07:22] <lifeless> you can tie data mappers into your transaction framework, and that then takes care of lazy commits and so on.
[07:22] <lifeless> it all hangs together /very/ nicely. I understand that APE is based on much of POEAA
[07:23] <kiko> sabdfl, does that actually work?
[07:24] <sabdfl> lifeless: the Mapper code is horrible to follow
[07:24] <lifeless> the quick stuff I'd put together ?
[07:24] <sabdfl> kiko: python: string('sdfsdf')+source.name
[07:24] <sabdfl> works
[07:24] <sabdfl> lifeless: yes
[07:25] <kiko> I think data mappers tend to be kind of complex, given my experience with APE
[07:25] <sabdfl> maybe a nice fancy framework but the codepaths are too horrendous for words
[07:25] <lifeless> cause if thats what you mean, I won't disagree, I was simply aiming to keep the two things separate and build it out as appropriate.
[07:25] <sabdfl> thanks for the fun evening ;-)
[07:25] <kiko> heh
[07:25] <lifeless> sabdfl: nyah, that wasn't a nice fancy framework :)
[07:26] <sabdfl> what's wrong with this:
[07:26] <sabdfl>         return SourceSource.select(SourceSource.q.name=="%s" % \                                     quote(sourcesourcename))[0] 
[07:26] <lifeless> kiko: yes, data mappers are complex for trivial projects - but for something the size of launchpad... I think they are a simplification.
[07:26] <lifeless> sabdfl: are you asking me whats wrong with it stylisically, or functionally ?
[07:27] <kiko> it looks okay
[07:27] <sabdfl> functionally, it's 6:30 am
[07:27] <kiko> could be there are no SourceSource objects in the database and [0]  is breaking things
[07:27] <lifeless> kiko: yeah, deliberate exception in that case.
[07:28] <kiko> yes, but I need to see a traceback
[07:28] <lifeless> sabdfl: is there a traceback from that ?
[07:28] <sabdfl> list index out of range
[07:29] <sabdfl> but the same code works in a console
[07:29] <kiko> it just means that the [0]  is breaking things
[07:29] <kiko> are you looking at the same database?
[07:29] <lifeless> sabdfl: it means that there is not a matching source source for that sourcesourcename
[07:29] <kiko> are you running into an sqlobject-caching-my-data thing?
[07:30] <lifeless> I'd add a import pdb;pdb.set_trace() before the return, and poke a little after you trigger it 
[07:30] <kiko> I suspect it's just a consistency of db view issue, but ...
[07:32] <sabdfl> ok i'm in pdb
[07:32] <sabdfl> how do i print out variables etc?
[07:32] <lifeless> u
[07:32] <lifeless> will take you up the stack
[07:32] <lifeless> d 
[07:32] <lifeless> will take you down the stack
[07:32] <sabdfl> kiko: there are sourcesrouce rows
[07:32] <lifeless> list will show you the code
 will be evaluated in that context.
[07:33] <lifeless> ie.
[07:33] <lifeless> print quote(sourcesourcename)
[07:33] <lifeless> or print self.foo.bar
[07:33] <sabdfl> ok, sourcesourcename is coorect
[07:33] <lifeless> is quote(sourcesourcename) correct ?
[07:34] <lifeless> you can assign variables too:
[07:34] <lifeless> temp=SourceSource.select(SourceSource.q.name=="%s" % quote(sourcesourcename))
[07:34] <sabdfl> hmm... the unicode thing seems to be an issue
[07:34] <lifeless> print temp
[07:34] <sabdfl> (Pdb) quote(sourcesourcename)
[07:34] <sabdfl> u"'ytyu'"
[07:34] <lifeless> thats not good :)
[07:34] <kiko> argh
[07:35] <sabdfl> suggestions?
[07:35] <kiko> what are you querying for?
[07:35] <lifeless> has sourcesourcename already been quoted by chance ?
[07:35] <lifeless> quote isn't idempotent.
[07:35] <sabdfl> (Pdb) sourcesourcename
[07:35] <sabdfl> u'ytyu'
[07:35] <sabdfl> (Pdb)
[07:35] <lifeless> yes, its already quoted. so you
[07:36] <lifeless> youve added a quote call before this method was called.
[07:36] <lifeless> either remove the quote here, and ensure all callers quote, or remove the quote up the call stack.
[07:36] <lifeless> (I think. Its a theory)
[07:36] <lifeless> what is str(sourcesourcename)
[07:37] <sabdfl> (Pdb) str(sourcesourcename)
[07:37] <sabdfl> 'ytyu'
[07:37] <lifeless>  actually, that does look ok.
[07:37] <lifeless> I was misreading before :[
[07:37] <lifeless> I presuem that ytyu is your sample data?
[07:37] <sabdfl> seems to work without the quoting
[07:38] <sabdfl> lifeless: yes
[07:38] <lifeless> heh, then yeah, nuke the quote call, maybe leaving a comment.
[07:38] <kiko> it's odd that it's coming in quoted, though.
[07:50] <lifeless> yay, sqlite beaten into shape
[07:52] <sabdfl> lifeless: "har har"?
[07:56] <lifeless> where?
[07:59] <kiko> ouch
[07:59] <kiko> 3am
[07:59] <kiko> time to sleep or people will be unhappy tomorrow
[07:59] <kiko> see you guys in 6h
[08:29] <sabdfl> lifeless: what are branchfrom and archarchive in sourcesource? don't see them in the table at all
[08:31] <lifeless> they should be in the table.
[08:31] <lifeless> erm let me see.
[08:33] <lifeless> what file are they in now ?
[08:34] <lifeless> branchfrom is the element in Job that the cvs source branch is recorded in.
[08:34] <lifeless> in the database that is cvsbranch.
[08:36] <lifeless> archarchive appears to have been lost
[08:36] <lifeless> but I'm stilldigging
[08:38] <lifeless> actually, where are you seeing archarchive ? I need to check the context
[08:39] <lifeless> bbs
[08:53] <lifeless> sabdfl: where are you seeing archarchive ?
[10:03] <SteveA> morning
[10:15] <carlos> morning
[10:19] <cprov> carlos: morning
[10:21] <Kinnison> Morning
[10:22] <daf> SteveA: did we work out what to do with the patch for SQLOS at https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=2005 ?
[10:25] <lifeless> my bet is sabdfl went to sleep :] 
[10:25] <Kinnison> There's klingons off my starboard bow
[10:26] <sabdfl> lifeless: it was a 40 minute power nap :-)
[10:26] <sabdfl> lifeless: archarchive is in the page template
[10:27] <sabdfl> klingons in "shoot to kill" mode
[10:27] <lifeless> on the sideboard bow jim
[10:27] <stub> daf: spiv has commit rights to sqlos now I believe so he can push it upstream. lifeless will need to patch our local copy, or perhaps just make a snapshot after upstream is updated?
[10:28] <sabdfl> lifeless: from the db, there is no place to store arch archive details, can i pull  that out of the page template?
[10:28] <lifeless> sabdfl: there used to be.
[10:28] <sabdfl> which field?
[10:28] <lifeless> that field is where I put 'cvs@arch.ubuntu.com'
[10:28] <sabdfl> for new classes, please only ever use the fieldnames in the db in the db access class
[10:29] <sabdfl>  newarchive             | text                        |
[10:29] <sabdfl>  newbranchcategory      | text                        |
[10:29] <sabdfl>  newbranchbranch        | text                        |
[10:29] <sabdfl>  newbranchversion       | text                        |
[10:29] <sabdfl> are those the ones?
[10:29] <lifeless> I'm just checking
[10:29] <sabdfl> the page templates use names that are completely different from the db, in a very opaque way
[10:30] <sabdfl> i'm just going to remap them straight to the obvious names
[10:30] <lifeless> yes, newarchive.
[10:30] <lifeless> as long as you update the infoImporter logic, I'm happy.
[10:30] <sabdfl> lifeless: no, sorry, up to you to make that stuff work
[10:31] <lifeless> then please don't remap it, as I won't know whats canges and it'll triple the time to to it.
[10:31] <sabdfl> i've basically spent all ight rewriting these core classes to follow thelaunchpad conventions
[10:31] <sabdfl> lifeless: too late, it was broken, obtuse and not maintainable
[10:33] <lifeless> sabdfl: I've no problem with it changing, but if you change foo->bar, then heop that I can figure that bar was foo - thats difficult. I'd much rather you either tell me 'change foo to bar', or change foo to bar throughout all at once.
[10:33] <lifeless> s/heop/hope/
[10:33] <sabdfl> lifeless: all i am doing is reverting to the name used in the database
[10:34] <lifeless> as for the conventions being different, the Job datatype in importd predates all of launchpad, which is what I needed to get the data in - I'm sorry if I caused confusion
[10:34] <sabdfl> the previous code had objectname._instancevar which was different to table.field and also different to the form context/value
[10:34] <sabdfl> it's not the access pattern, it's the naming that's totally inconsistent
[10:34] <lifeless> sabdfl: ah that was a different thing, that was my rough mapper where the domain object wasn't a sqlobject.
[10:34] <sabdfl> i'm feeling a little grumpy about it
[10:35] <lifeless> ok, what do I need to do from here ?
[10:35] <sabdfl> so, when i'm done, you will be able to:
[10:35] <sabdfl>  * create a new SourceSource
[10:35] <sabdfl>  * edit a sourcesource
[10:35] <sabdfl> and your code will be able to access db fields through Object.fieldname
[10:35] <sabdfl> very straightforward
[10:48] <sabdfl> lifeless: is sourcesource.branch the db table of the branch we created into which we sync this upstream?
[10:51] <sabdfl> lifeless: what is the "hosted" field?
[10:52] <lifeless> the hosted field is used to record things like 'sourceforge', 'savannah'
[10:52] <lifeless> where we can add logic to infer cvs tarball locations and the like
[10:52] <lifeless> branch is a foreign key into the branch table IIRC.
[10:52] <sabdfl> tnx
[10:52] <lifeless> but we can't populate branch until the sync has completed.
[10:53] <lifeless> (chicken and egg problem).
[10:53] <lifeless> so the actual sync engine ignores it.
[10:58] <lifeless> dinner time.
[11:05] <sabdfl> lifeless: the page template refers to archsourcename and archsourceurl
[11:05] <sabdfl> what are they in the db?
[11:05] <lifeless> I thought they were the same in the db.
[11:05] <lifeless> they are for full archive mirroring - thats the archive name, and the url we can find it at.
[11:06] <sabdfl> they are not in the db at all
[11:06] <sabdfl> please verify
[11:06] <sabdfl> lifeless: ^
[11:06] <lifeless> looking
[11:11] <lifeless> sabdfl: ok, they were specced but not-yet-implemented.
[11:11] <lifeless> you can ignore them safely.
[11:12] <sabdfl> ok, they will disappear from the template
[11:12] <lifeless> I have to test some code here before generating the sql patch for stub
[11:12] <lifeless> sabdfl: can you <!-- --> comment them out? 
[11:12] <sabdfl> sure
[11:12] <lifeless> thanks
[11:12] <sabdfl> with a real comment?
[11:13] <lifeless> FIXME lifeless get off your arse --> will do
[11:13] <lifeless> I had limi put the form layout on the template is all, I don't want to have to recreate it later.
[11:13] <lifeless> equally you could just delete the tal: bits.
[11:17] <sabdfl> stub: why did launchpad-2-00-0.sql get modified today?
[11:17] <sabdfl> surely the renamings coming in as alter table snippets?
[11:18] <stub> If I create new tables, I need to add drop table commands in there (or I guess I could have a pre-launchpad-2-00-0-drop.sql script or something instead)
[11:19] <sabdfl> stub: ah, thanks
[11:19] <sabdfl> phew :-)
[11:19] <sabdfl> stub: is it possible to check the schema revision of the db, and refuse to run if the db is not in sync with the code?
[11:19] <lifeless> ok really off to get myself dinner now.
[11:20] <sabdfl> like, have a place where we store a revision for the db
[11:20] <stub> Yes, quite possible. It just hasn't been implemented
[11:20] <sabdfl> each alter table scriptlet would also update that
[11:20] <lifeless> that was our plan...
[11:20] <dilys> New bug 2080 for Launchpad/Database: SQLObject iterators disobey the iteration protocol
[11:20] <dilys> https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=2080
[11:20] <lifeless> sabdfl: the table scriptlets shouldn't do that: the makefile that runs them should
[11:20] <sabdfl> then the code checks at startup if the db revision is correct
[11:20] <stub> We would need to move to something more intelligent than a makefile I suspect, but that is no hardship.
[11:20] <sabdfl> ok
[11:24] <stub> sabdfl: We actually already have a similar check to what you are after - launchpad refuses to run if the database encoding is not set correctly.
[11:26] <limi> hello
[11:26] <limi> :)
[11:26] <stub> Morning
[11:27] <debonzi> limi, hi :)
[11:27] <daf> limi: found your adapter? :)
[11:28] <limi> yes :)
[11:28] <limi> must have been tired this morning
[11:28] <limi> it's usually second nature when I pack the laptop :)
[11:28] <daf> I did silly things this morning
[11:29] <daf> I left my mobile in the hotel room
[11:29] <daf> I went back for it, found it and then left the key in the room on the way back down
[11:29] <limi> and; of course - the tram was stuck behind a bus with engine problems, so I had to walk half the distance and do the subway instead :P
[11:29] <limi> hehe
[11:29] <limi> maybe it's contagious
[11:29] <daf> you'll like this hotel
[11:29] <daf> it has duvets
[11:30] <elmo_> and tiles
[11:31] <Kinnison> And wireless (just not in daf's room)
[11:31] <daf> :)
[11:31] <daf> well, it seemed to work if you stayed within that 10cm area
[11:32] <limi> duvets! ;)
[11:35] <cprov> daf: aha, just don't move and it'll work (nice kind of wireless mobility) <wink> , anyway you have a cable :P
[11:39] <daf> cprov: yeah, I resorted to the cable :)
[11:39] <daf> far less flaky
[11:40] <elmo_> the wireless is useless even in 109 fwiw
[11:40] <Kinnison> It's fine in 519
[11:41] <cprov> better than the old Canonical Hotel (Claverly?!?) , no NET  
[11:50] <sabdfl> lifeless: we need the new code running in production before you crash tonight, ok?
[11:51] <stub> sabdfl: Will that require a database upgrade?
[11:51] <sabdfl> stub: yes, to the current state
[11:52] <sabdfl> :w
[11:57] <lifeless> sabdfl: ok, tell me when you've committed to I can test in staging.
[11:57] <sabdfl> ok
[11:57] <dilys> New bug 2081 for Launchpad/Rosetta: add option to translation page to show untranslated messages only
[11:57] <dilys> https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=2081
[12:07] <limi> is https://www.warthogs.hbd.com/ down for everyone else too?
[12:08] <Kinnison> limi: https://wiki.canonical.com/ ?
[12:09] <limi> ok, just tried to follow the link Jane posted
[12:09] <limi> on the warthogs list
[12:10] <elmo_> https://www.warthogs.hbd.com/ works for me
[12:10] <limi> I get "unknown host" here
[12:10] <limi> oh well
[12:11] <limi> I'll use the canonical one, that works
[12:19] <stub> elmo_: /etc/postgresql/postgrsql.conf and /etc/postgresql/pg_hba.conf are no longer writable by user postgresql
[12:19] <stub> (on emperor)
[12:22] <elmo_> hmm,t he upgrade chown'ed them but not chgrp
[12:22] <elmo_> stub: fixed
[12:22] <stub> Ta.
[12:30] <limi> there's no way RSS can support authentication, right?
[12:36] <elmo_> stub: are all thos idle clients normal/expected?
[12:36] <stub> limi: You could encode the username in the URL (ala amazon session ids)
[12:37] <limi> stub: yes, that's an option
[12:38] <limi> thinking about having personalized RSS feeds for bugs
[12:38] <stub> elmo_: we should be getting 4 for each launchpad. I don't know how many importds are running but each of them probably has a connection.
[12:38] <limi> anyway, planet.ubuntu skinning time ;)
[12:39] <limi> stub: tell me when you have some time, and I'll explain the grouping stuff I need for the Malone UI
[12:40] <dilys> Bug 2080 resolved: SQLObject iterators disobey the iteration protocol
[12:40] <dilys> https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=2080
[12:59] <stub> limi: Yo
[01:01] <limi> stub: yo - just going out for lunch, are you here for a while more?
[01:01] <stub> I think there is an upgrade going on later, so I guess so ;)
[01:01] <limi> ok ;)
[01:01] <limi> see you in a bit
[01:16] <dilys> New bug 2082 for Launchpad/Launchpad: SQLObjectVocabularyBase needs a doctest
[01:16] <dilys> https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=2082
[01:29] <dilys> New bug 2083 for Launchpad/Rosetta: Do the split of .pot and .po records from POMsgSet to two different tables
[01:29] <dilys> https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=2083
[01:30] <sabdfl> stub: just discussing a column rename with BradB
[01:30] <sabdfl> bugwatch.bugsystem->bugwatch.bugtracker
[01:31] <sabdfl> and saying i'd like the guys who changes it to commit the new alter table scriptlet in the same changeset as the code changes that depend on it
[01:31] <sabdfl> ideally, you work up the scriptlet till you are happy with it, assign it a filename, then give it to them to commit
[01:32] <sabdfl> if we were really being arch-ish you'd tag off them, add it, they'd merge your changeset, then merge it all up to rocketfuel, but i don't think that's workable
[01:32] <stub> It isn't just a scriptlet - it is also sample data and possibly modifications to launchpad-2-0-0.sql
[01:32] <sabdfl> sound good?
[01:32] <sabdfl> ah
[01:32] <sabdfl> so what's the best way to coordinate?
[01:34] <stub> if it is done like this, then there can only be one pending database change in the pipeline, as the database changes need to be done in sequence. So if I make the changes and hand it off, I can't go making other schema modifications until it has been committed.
[01:35] <BradB> ok stub, what's the first thing we need to do then?
[01:35] <stub> In some cases it works, but we really don't want to have schema changes branching off and then having to be merged back together again.
[01:39] <stub> If we require code changes to be committed with the database schema modifications, then we need to use branches to coordinate. Someone who knows arch better will need work out the process as I've not got as far as playing with them.
[01:39] <sabdfl> the timing thing is a problem even using branches
[01:40] <stub> I don't think the existing model has caused problems, as most modifications are generally fairly small and only affected the code the requester was working on at the time.
[01:40] <sabdfl> alright, however you go about it, let's try to get the db changes merged at the same time as the code changes
[01:40] <sabdfl> maybe the filename allocation is left till the last minute
[01:41] <BradB> stub: in this case, there's no sampledata to add, at least.
[01:42] <BradB> i should be able to get the file changes from you (maybe a patch to launchpad-2-0-0.sql and a patch-whatever.sql file) in one go, merge them into my working dir, fix the app code as needed to suit, commit locally, then merge it into rocketfuel.
[01:42] <stub> BradB: Unless you are adding a nullable column or a constraint that already passes, the sampledata changes
[01:43] <lifeless> stub: the race window is quite small, and atomic.
[01:43] <BradB> stub: we're renaming a column
[01:43] <BradB> nothing changes semantically.
[01:43] <lifeless> the person creating the patch should do so, then immediately submit a merge.
[01:43] <lifeless> if two people try to do this, the second persons merge will fail.
[01:44] <BradB> stub: for as long as this isn't renamed, we can't access the malone app to continue working towards the friday deadline. :)
[01:44] <lifeless> when it does, they should rename their patch up to the next one, and then submit a merge.
[01:45] <stub> lifeless: A merge to what though? There is a qa process involved in getting the patches right (documented in schema/README)
[01:45] <lifeless> stub: can that be test-suited ?
[01:45] <stub> lifeless: no
[01:46] <lifeless> then whoever signs off needs to be the person submitting the merge.
[01:47] <stub> Yup. So the work is done in a branch and I or acting DBA finalizes by telling PQM to merge from the branch?
[01:47] <lifeless> yes
[01:47] <lifeless> that would do it.
[01:48] <stub> As long as people inform launchpad@ about database schema changes they are considering - schema changes affect everyone
[01:52] <dilys> Bug 2065 resolved: Review Rosetta code so the "inlastrevision" and "active" fields are correctly used
[01:52] <dilys> https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=2065
[01:56] <stub> So I would 'tla tag --setup whoever@canonical.com/launchpad--gratuitouschanges--666 $myarchive/launchpad--schemamods--64', vet, then 'arch-submit-merge "blahblahblah"' ?
[01:57] <lifeless> stub: have a look at arch-submit-merge...
[01:57] <lifeless> you can just submit the merge request directly straight from there branch
[01:57] <stub> I'm worried that we are working out processes like this - database schema changes should be becoming less frequent and more minor, not the other way around.
[01:58] <lifeless> back in an hour, need a break before brain explodes.
[01:58] <BradB> stub: I'll write an email to the mailing list noting this rename.
[02:03] <BradB> stub: Actually, yeah, you're best to wait to see this email as there are a couple other renamings needing related to this.
[02:04] <BradB> s/needing/needed/
[02:05] <stub> Yup. I try to batch the patches when this doesn't affect peoples work.
[02:05] <stub> Is this stuff being rolled out tonight?
[02:06] <BradB> Well, the DB changes should happen ASAP (after the email is sent) unless sabdfl has some reason to not want that.
[02:07] <sabdfl> stub: yes, let's get this all in
[02:07] <sabdfl> stub: apologies, table renaming turned into a bigger deal than i thought
[02:10] <stub> sabdfl: Mmm... not a good idea to do that sort of thing before deadlines unless things won't work.
[02:10] <sabdfl> good point
[02:10] <sabdfl> bugtrackers have not been touched by any code till i started fwork on them
[02:10] <sabdfl> that's when i realised we needed the renaming
[02:16] <carlos> lunch time
[02:16] <carlos> later
[02:17] <daf> is PQM wedged again?
[02:18] <daf> I sent a merge request an hour or two ago and haven't heard about it yet
[02:18] <limi> sabdfl: is Planet supposed to be under Community, or its own tab on the ubuntu site?
[02:19] <sabdfl> limi: which do you think is better?
[02:19] <limi> depends on how prominent you want Planet to be :)
[02:19] <BradB> stub: Renaming email sent to LP ML.
[02:19] <limi> it may make sense as a separate tab right now
[02:19] <limi> since there aren't a lot of them yet
[02:19] <sabdfl> let's start it on its own tab, then move it into community
[02:20] <limi> ok
[02:20] <limi> and the tab should simply be "Planet"?
[02:20] <limi> is that a well enough known concept?
[02:29] <spiv> It will be ;)
[02:30] <spiv> daf: PQM is idle atm, I don't if that's because someone unwedged it ;)
[02:30] <daf> grumble
[02:37] <stub> BradB: That change seem benign on the rest of launchpad - I don't see a problem with me committing it now
[02:38] <BradB> Go for it, dude.
[02:38] <BradB> If you merge it now, I can have it star-merged here within 2 hours.</tla_hate>
[02:38] <stub> You got a patch done already for the stuff you have found? 
[02:39] <BradB> No, I thought you were giving me that. ;)
[02:39] <BradB> Okay: what's the first step here?
[02:39] <stub> No - I'll do it. Just didn't want to waste your work if you had already done it or started ;)
[02:40] <BradB> I'll leave it to you.
[02:52] <daf> /home/daf/src/canonical/dists/launchpad/lib/sqlobject/main.py:231: UserWarning: I tried to set the property "labels", but it was already set, as a method.  Methods have significantly different semantics than properties, and this may be a sign of a bug in your code.
[02:52] <daf> spiv: is this a known problem?
[02:54] <SteveA> is there a method called labels ?
[02:59] <daf> the class in question is canonical.launchpad.dlalo.Schema
[02:59] <daf> sorry
[02:59] <daf> two classes
[02:59] <limi> ddaf
[02:59] <limi> :)
[02:59] <limi> is that llike llimi?
[02:59] <daf> canonical.launchpad.dlalo.Schema and canonical.launchpad.dlalo.Label
[03:00] <daf> is a llimi like a llama?
[03:00] <limi> llikely
[03:00] <daf> bbaa
[03:01] <daf> ? :)
[03:01] <limi> fun to design when you can't see how it turns out until you hand it back ;)
[03:01] <limi> the Planet templates
[03:01] <limi>         <TMPL_LOOP Channels>
[03:01] <limi> etc
[03:01] <limi> ;)
[03:01] <daf> nice! :)
[03:01] <limi> almost as nice as DTML
[03:02] <limi> it's scarily similar, in fact
[03:02] <spiv> daf: That error suggests someone has defined both _get_labels and labels.
[03:02] <daf> maybe... it IS DTML? :)
[03:02] <daf> spiv: I can't see anything obviously wrong
[03:04] <daf> it's complaining about Schema.labels and Label.persons
[03:04] <spiv> Hmm.
[03:04] <lifeless> sabdfl: so when can I start testing again ?
[03:04] <lifeless> cause its getting late here
[03:04] <sabdfl> lifeless just got it "working" again
[03:05] <lifeless> ok. 
[03:05] <lifeless> let me know when.
[03:06] <daf> spiv: I can't tell why it's trying to set those attributes
[03:07] <spiv> daf: Oh, right.  I think it's because joins (the MultipleJoin & RelatedJoin) auto-generate those names.
[03:07] <spiv> Or rather, try to :)
[03:07] <stub> daf: label is a foreign key
[03:07] <spiv> SQLObject actually does something sane for once and warns about the problem ;)
[03:07] <daf> stub: "labels"
[03:07] <sabdfl> lifeless: just going to test, then sendpqm message
[03:07] <daf> spiv: right, I thought it might be related to the joins
[03:08] <stub> BradB: That change is with PQM btw
[03:08] <spiv> daf: I'm trying something...
[03:09] <BradB> stub: Thanks.
[03:09] <spiv> daf: I think it's actually choosing the wrong name due to a bug in SQLObject, but we can explicitly set the right one.
[03:10] <spiv> Ok, setting joinMethodName='_labelsJoin' fixes the warning.
[03:10] <spiv> But the docs say that's what should happen anyway...
[03:10] <daf> cunning
[03:11] <spiv> Yeah, we're not the first to notice this.
[03:27] <sabdfl> stub: picked up a problem after a full database recreation:
[03:27] <sabdfl>   DatabaseException: ERROR:  relation "bugtracker_id_seq" does not exist  SELECT NEXTVAL('BugTracker_id_seq')
[03:28] <sabdfl> lifeless: am continuing to test
[03:28] <sabdfl> lifeless: if you want to start testing, pull from my archive on chinstrap
[03:28] <lifeless> I'll wait till you're happy, knee deep in cscvs anyway
[03:30] <sabdfl> lifeless: how iscscvs coming along?
[03:30] <stub> sabdfl: I have no idea why you are seeing that - my tables still reference bugsystem_id_seq
[03:30] <sabdfl> stub: seems bugsystem_pkey got left behind too
[03:31] <sabdfl> i did a make in database/schema
[03:31] <sabdfl> let me try again
[03:31] <stub> sabdfl: Yes - I'm not changing the names of the constraints or sequences - there isn't any point at the moment.
[03:32] <lifeless> sabdfl: the stuff I'm working on now removes the last non-trivial hurdle I'm aware of.
[03:32] <lifeless> in short - very very well these days
[03:32] <sabdfl> lifeless: can i hold you to it? <duck>
[03:33] <lifeless> sabdfl: yes.
[03:33] <sabdfl> cool!
[03:33] <lifeless> I'm not saying there won't be more to do :). But that anything else won't require heart surgery.
[03:33] <sabdfl> now we have nice web pages for the source addition, things will ramp up quickly
[03:33] <sabdfl> very
[03:34] <sabdfl> stub: i'm going to drop the database altogether and reate it completely from scratch
[03:35] <lifeless> sabdfl: while you are working on that stuff, can you make it so that only I can certify for enablement? 
[03:35] <stub> I'll do more testing - I want it to work when I roll out to prod :-/
[03:35] <lifeless> (or a group, or whatever) - thats more stuff that just wasn't available back in london/oxford
[03:36] <sabdfl> stub: how do i drop the db?
[03:36] <stub> dropdb launchpad_test
[03:36] <stub> (which will fail or hang until all connections to it are closed, so remember to shutdown launchpad)
[03:38] <sabdfl> is there a special makefile command to create it again?
[03:38] <sabdfl> must make gives zillion errors
[03:38] <sabdfl> s/must/just/
[03:39] <limi> sabdfl: http://planet.ubuntulinux.org updated - should I add a tab to the main web site?
[03:39] <sabdfl> yes please alex
[03:39] <sabdfl> and thank you
[03:39] <limi> (there is a portlet fix pending, just sent it to elmo)
[03:39] <limi> ok, updating...
[03:40] <SteveA> limi: hello
[03:40] <SteveA> can we talk about lurker?
[03:40] <SteveA> (not your coworker)
[03:40] <limi> we can :)
[03:40] <limi> hehe
[03:40] <limi> yes, it's a confusing name ;)
[03:40] <SteveA> There is a .css file as part of lurker
[03:40] <limi> yup
[03:40] <limi> all of that is in ploneCustom.css now
[03:40] <SteveA> did you include equivalents in the css files on ul.org ?
[03:41] <SteveA> ok
[03:41] <limi> so you don't need it
[03:41] <SteveA> Look at this:
<th align="left">Thread</th><th align="left">Author</th><th align="left">Date&nbsp;(<script type="text/javascript"><!--
[03:41] <SteveA> timezone(1096652773);//--></script>+300<noscript>UTC</noscript>)</th></tr><tr style="" onclick="self.location='http://lists.ubuntu.com/lists/message/20041001.174613.a85e1b64.en.html';" onmouseover="rollIn(this);" onmouseout="rollOut(this);" class="row2"><td nowrap="nowrap"><a name="20041001.174613.a85e1b64"></a><a href="../message/20041001.174613.a85e1b64.en.html"><img src="../imgs/j.png" title="Eric Deleforterie at 2004-10-01 
[03:41] <SteveA> 20:46" onmouseover="titledate(this,1096652773);" alt="M"></a></td><td nowrap="nowrap">Eric Deleforterie</td><td nowrap="nowrap"><script type="text/javascript"><!--
[03:41] <SteveA> textdate(1096652773);//--></script>2004-10-01&nbsp;20:46<noscript>2004-10-01 17:46</noscript></td></tr>
[03:41] <SteveA> <tr style="" onclick="self.location='http://lists.ubuntu.com/lists/message/20041001.202531.7f12cfc5.en.html';" onmouseover="rollIn(this);" onmouseout="rollOut(this);" class="row1"><td nowrap="nowrap"><a name="20041001.202531.7f12cfc5"></a><a href="../message/20041001.202531.7f12cfc5.en.html"><img src="../imgs/g.png" title="etienne zannelli at 2004-10-01 23:25" onmouseover="titledate(this,1096662331);" alt="M"></a></td><td nowra
[03:41] <SteveA> p="nowrap">etienne zannelli</td><td nowrap="nowrap"><script type="text/javascript"><!--
[03:41] <limi> eeek
[03:41] <SteveA> textdate(1096662331);//--></script>2004-10-01&nbsp;23:25<noscript>2004-10-01 20:25</noscript></td></tr>
[03:41] <SteveA> <tr style="" onclick="self.location='http://lists.ubuntu.com/lists/message/20041002.075458.5b8197e2.en.html';" onmouseover="rollIn(this);" onmouseout="rollOut(this);" class="row2"><td nowrap="nowrap"><a name="20041002.075458.5b8197e2"></a><img alt="|" src="../imgs/b.png"><a href="../message/20041002.075458.5b8197e2.en.html"><img src="../imgs/i.png" title="Eric Deleforterie at 2004-10-02 10:54" onmouseover="titledate(this,109670
[03:41] <SteveA> 3698);" alt="M"></a></td><td nowrap="nowrap">Eric Deleforterie</td><td nowrap="nowrap"><script type="text/javascript"><!--
[03:41] <SteveA> textdate(1096703698);//--></script>2004-
[03:41] <SteveA> oops
[03:41] <limi> http://paste.plone.org, please ;)
[03:41] <SteveA> sorry
[03:41] <SteveA> wrong paste buffer
[03:41] <SteveA> a img.selected { background-color:#77F }
[03:41] <SteveA> a:visited img { background-color:#BBB }
[03:41] <SteveA> a:visited img.selected { background-color:#77F }
[03:42] <SteveA> a img:hover { background-color:#55F }
[03:42] <SteveA> 
[03:42] <stub> sabdfl: just run 'make' as normal - the errors are it trying to drop or alter tables that don't exist.
[03:42] <SteveA>  /* The following are used to induce highlighting effects on thread message icons */
[03:42] <SteveA> that's it
[03:42] <SteveA> 5 lines
[03:42] <SteveA> starting with that comment
[03:42] <SteveA>  #55F is the blue that is an envelope background
[03:42] <limi> I should include them?
[03:42] <limi> aha
[03:42] <limi> couldn't find it the last time I looked
[03:42] <limi> thanks
[03:42] <SteveA> ok
[03:42] <SteveA> also:
[03:43] <SteveA> http://lists.ubuntu.com/lists/thread/20041002.075655.e3b28dc7.en.html
[03:43] <SteveA> I have changed the roll-over of the list of threads to an orangey colour
[03:43] <SteveA> there's an odd effect on the last row of the table
[03:43] <limi> you mean the border?
[03:45] <SteveA> yes
[03:45] <SteveA> I guess so
[03:45] <SteveA> random orange lines
[03:46] <limi> SteveA: btw, if you could add in the Planet tab in Lurker, that would save me a round-trip :)
[03:46] <limi> just add:
[03:46] <limi>         <li id="portaltab-support" class="plain">
[03:46] <limi>             <a href="http://planet.ubuntulinux.org/"
[03:46] <limi>                accesskey="t">Planet</a>
[03:46] <limi>         </li>
[03:47] <limi> after the existing tabs (Ubuntu, Community, Support)
[03:48] <sabdfl> stub: even after a complete database drop and recreate, i still see this:
[03:48] <sabdfl>   DatabaseException: ERROR:  relation "bugtracker_id_seq" does not exist  SELECT NEXTVAL('BugTracker_id_seq')
[03:49] <stub> Where do you see the error? When the sample data is loading or from launchpad?
[03:50] <sabdfl> no, when queries start to hit the db
[03:51] <stub> When I do '\d BugTracker' inside psql, I can see the primary key is referencing bugsystem_id_seq and nothing else should even know that sequence exists.
[03:52] <sabdfl> alter table projectbugsystem_id_seq rename to projectbugtracker_id_seq;
[03:52] <sabdfl> alter table bugsystem_id_seq rename to bugtracker_id_seq;
[03:52] <sabdfl> these fix the problem
[03:53] <BradB> stub: These were the autocomplete renames I suggested. :) (At least some of them)
[03:53] <stub> It doesn't fix my database, as the DEFAULT value of the tables still point to the old sequence (which no longer exists!)
[03:54] <stub> Is there python code that is referencing the _seq sequence directly, rather than telling the database to use DEFAULT?
[03:54] <SteveA> limi: I added the tab
[03:54] <sabdfl> not afaik
[03:54] <limi> great, thanks
[03:55] <limi> SteveA: fixing the border now
[03:55] <SteveA> ok
[03:55] <sabdfl> stub: although sqlobject may be doing voodoo behind the scenes
[03:55] <limi> SteveA: ..and adding the link styles
[03:55] <SteveA> ok
[03:55] <BradB> stub: pgconnection does a select nextval on the sequence name.
[03:55] <sabdfl> so, my mistake for going ahead with the rename, but we need to finish it now
[03:56] <SteveA> I shall now re-enable cacheing the lurker pages
[03:56] <stub> sabdfl: Urgh..... sqlobject might be the culprit, assuming the sequence name!
[03:56] <SteveA> seeing as I've finished messing with the source
[03:56] <sabdfl> SteveA: does limi know about the way we are including style / header / footer?
[03:56] <SteveA> no, but I'll tell him
[03:56] <sabdfl> stub: looks like it
[03:56] <SteveA> limi: do you have a login on rince?
[03:56] <sabdfl> ok, we're not going to get this in sanely today
[03:56] <limi> SteveA: maybe? :)
[03:57] <stub> Means I'm going to have to go futzing around with primary keys :-(
[03:57] <sabdfl> stub, lifeless, get some rest, we'll move to production tomorrow
[03:57] <sabdfl> stub: we may as well learn now when it's cheap :-)
[03:57] <SteveA> there are three xsl files: ubuntuheader.xsl, ubuntufooter.xsl and ubuntustyles.xsl.  These are included at appropriate points in the templates.
[03:57] <BradB> stub: Oh, and yeah, said select nextval uses a seq name that is derived from the table name.
[03:57] <SteveA> There is some xsl crap at the start and end of the files.  The files must be well-formed xml.
[03:57] <SteveA> I also had to change &entities; to &#numbers;
[03:57] <BradB> So let's just rename them sanely.
[03:57] <sabdfl> limi i'll mail these to you now
[03:58] <limi> sabdfl: ok
[03:59] <stub> BradB: Oh... I see why it is doing it to, as SQLObject would need to know the ID it just inserted :-(
[03:59] <limi> is Mako's Shipit code in Arch?
[03:59] <stub> Should be a minor change anyway - I'm just being a drama queen :-)
[03:59] <sabdfl> limi: on the wire now
[03:59] <limi> aha
[03:59] <daf> lifeless: either my merge to PQM is taking a really long time or I'm only imagining that I submitted a merge -- can you tell me which it is?
[03:59] <sabdfl> stub: that's what i'd preferyou to me
[03:59] <limi> thought you meant the Lurker templates
[03:59] <sabdfl> sorry
[03:59] <limi> :)
[04:00] <sabdfl> that's what i'd prefer you to be
[04:00] <lifeless> daf: you have an overactive imagination
[04:01] <limi> (we knew that)
[04:01] <limi> :] 
[04:04] <limi> stub: time to do some Malone discussions/changes?
[04:05] <stub> I want to quickly do the sequence rename patch first. Then I'll see how tired I am - its midnight here ;)
[04:06] <limi> ok :)
[04:06] <limi> sabdfl: what was the Lurker files for? are any changes needed in the templates?
[04:06] <limi> s/was/were/
[04:08] <lulu> limi:Steve and I have been working on it. I have just sent you an email with 3 changes to the CSS. Thanks.
[04:10] <limi> sabdfl: added an introductory paragraph to Planet, tell me if you want it changed - just felt the need to explain what Planet Ubuntu was about :)
[04:13] <limi> lulu: that still doesn't explain what I'm supposed to do with the templates :)
[04:15] <lulu> limi: thanks for the intro para. We have some content pending on the website, waiting for Jeff's review to explain what Planet is all about and how a member can get their blog listed there.He hasn't had a chance to review it yet. I had hoped he would before it went live.
[04:15] <lulu> limi:templates...mmm dunno :o)
[04:24] <stub> sabdfl, BradB: next patch with PQM
[04:24] <stub> limi: Yo
[04:25] <limi> yo yo
[04:25] <limi> word up
[04:25] <dilys> Bug 1976 resolved: get rid of fake_person() in Rosetta's browser.py
[04:25] <dilys> https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=1976
[04:26] <limi> so, Malone -
[04:28] <spiv> daf: Btw, there's a fix for the joinMethodName issue in SQLObject SVN already, and even better, it doesn't work ;)
[04:29] <limi> (sorry, out of character there for a moment)
[04:30] <dilys> New bug 2084 for Launchpad/Database: SQLObject assumes primary key sequence naming
[04:30] <dilys> https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=2084
[04:32] <carlos> spiv: the "JoinMethidName issue" is the wargning we are getting now since the SQLObject update?
[04:32] <carlos>  /s/wargning/warning/
[04:34] <spiv> carlos: Yep.
[04:34] <lifeless> sabdfl: how are you going ?
[04:34] <lifeless> 12:30..
[04:34] <stub> lifeless: He told you to go to bed before :-)
[04:34] <carlos> funny
[04:34] <spiv> carlos: It's probably causing actual breakage in addition to warnings.. .I should test that theory.
[04:35] <limi> stub: ok, I need a way to list the links (external references) grouped instead of having the type inline - for example, I want to list the CVE reference first, and then the other external links
[04:35] <carlos> spiv: I can test it, it's in code I wrote
[04:35] <stub> limi: Do you care which comes first?
[04:35] <lifeless> stub: did he ?
[04:36] <limi> stub: and I would need the same for the people - I would like to group the CC/Watch people by what type of subscription they have
[04:36] <limi> stub: CVE first, preferrably
[04:36] <stub> (23:57:01) Mark Shuttleworth: stub, lifeless, get some rest, we'll move to production tomorrow
[04:36] <lifeless> ph cool
[04:36] <lifeless> silly irssi didn't highlite.
[04:37] <limi> stub: it's more that I want a method that is something like getCVEs(), getCCed() etc
[04:37] <lifeless> no need to tell me twice.
[04:37] <stub> limi: Are you sure about people? I would have thought surname would be best as that is how people would use the table (?)
[04:37] <lifeless> night all
[04:37] <carlos> lifeless: night
[04:37] <stub> Get yer beauty sleep
[04:37] <limi> stub: well, I'm not sure what should be visible - I was thinking that you could only modify the link that was you, and that would be on top - and then the rest would be listed according to type?
[04:38] <limi> stub: you have enough beauty to survive another hour? ;)
[04:38] <stub> I've got beauty leaking out my arse
[04:39] <limi> very useful for those late-night sessions
[04:39] <carlos> daf: I'm thinking on prepare a patch for #2083 so we change it as soon as possible so we have more time to test all changes that it implies (perhaps using a branch until all code is working with the new layout)
[04:40] <stub> limi - it will be prettier than getCVE - you will just be able to do tal:repeat="cvs bug/cves"
[04:41] <stub> but that is no problem
[04:41] <limi> great
[04:46] <dilys> New bug 2085 for Launchpad/Malone: Groupings of  subscribers, external references etc.
[04:46] <dilys> https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=2085
[04:47] <kiko> hey guys
[04:48] <stub> limi: So you need a workaround right now? It can be done with a tal:define="cves python:[r for r in refs where r.bugreftype == 1] "
[04:48] <limi> stub: I don't like workarounds, they tend to stay around forever ;)
[04:49] <limi> I know it can be done, I just want it to be done right :)
[04:49] <stub> Anything else or am I off to bed?
[04:49] <stub> Morning kiki
[04:49] <limi> people + refs is all I need
[04:49] <limi> I believe
[04:49] <kiko> kiki here kiki there
[04:50] <limi> kikiwiki
[04:50] <stub> ok - trivial, but it would conflict with Marks work so it will wait until tomorrow or so.
[04:50] <limi> ok
[04:50] <limi> I'll do the static template code for now, then
[04:56] <kiko> how's the lunchpad team?
[04:57] <kiko> debonzi, cprov: ping?
[04:57] <debonzi> kiko, 
[05:05] <daf> carlos: a branch sounds good to me
[05:05] <carlos> daf: perfect
[05:05] <cprov> kiko: pong
[05:06] <daf> it's a pretty big change
[05:06] <kiko> how's it going cprov
[05:06] <cprov> kiko: fine, what about you ?
[05:06] <kiko> cprov, lots of hard work :-/
[05:06] <lulu> limi: how's the skinning of mailman going?
[05:07] <cprov> kiko: nicole rocks a lot ! it grabs DOAP info from web :)
[05:07] <kiko> w0ap
[05:07] <kiko> neat
[05:07] <cprov> kiko: really
[05:08] <cprov> and also DOAP Pages are very nice now !
[05:08] <carlos> spiv: yes, it's a problem
[05:08] <limi> lulu: not started yet, doing Malone work
[05:08] <carlos> spiv: the joins are not working now
[05:08] <limi> lulu: will probably start Mailman tomorrow
[05:08] <cprov> kiko: Kinnison and James are working on Lucile (uploader frontend) 
[05:09] <kiko> cprov, that is so cool
[05:09] <cprov> kiko: debonzi is working on ZODB at www.ubuntulinux.org :) !!!
[05:09] <spiv> carlos: I thought so. :(
[05:10] <kiko> hah
[05:10] <spiv> carlos: There's a workaround (explicitly set joinMethodName), but I'll see if I can hunt down the bug.
[05:10] <carlos> ok
[05:10] <carlos> spiv: thanks
[05:11] <limi> lulu: somebody should send me the Mailman templates, though
[05:11] <limi> so I have them ready for tomorrow
[05:14] <lulu> limi: just chatting to Mark on mailman...standby
[05:15] <carlos> spiv: I get an interesting error with tests
[05:15] <carlos> *****************************************************************
[05:15] <carlos> Failure in example: sqlrepr(time(13, 45, 50), 'postgres')
[05:15] <carlos> from line #30 of canonical.database.sqlbase.quote
[05:15] <carlos> Expected: "'13:45:-1'"
[05:15] <carlos> Got: "'13:45:50'"
[05:16] <carlos> The test seems to be broken 
[05:18] <stub> carlos: That is testing a bug in sqlobject - obviously they fixed it ;)
[05:19] <carlos> :-)
[05:19] <spiv> :)
[05:19] <carlos> so, could I remove that test or just fix it?
[05:19] <carlos> to detect a regression?
[05:19] <stub> carlos: Have a look at the comments - it makes some of our code redundant if I remember correctly
[05:19] <carlos> ok
[05:19] <spiv> I can do that.
[05:20] <spiv> It looks like we only need to keep the special case for datetime now, not date or time.
[05:21] <carlos> spiv: ok
[05:21] <spiv> stub: I haven't gotten *any* response to any of my sqlobject bug reports of SF :(
[05:25] <lulu> limi:Please get shipit done today, or we will run out of time tomorrow with Mailman and other changes.
[05:25] <lulu> limi: I'll get back to you on mailman templates....
[05:26] <limi> lulu: that will mean less Malone work
[05:26] <limi> please clear that with Mark in that case
[05:26] <lulu> limi: 2 hrs a day, and 1 from yesterday. Web deadline Thurs eve.
[05:27] <limi> lulu: I have already done 3 hours of skinning today
[05:27] <lulu> limi:ok - well then there's lots to be done in 2 hrs tomorrow then. Thanks
[05:28] <limi> uhm, you guys can't just set a static amount of hours and cram an arbitrary amount of work into that time
[05:28] <limi> that's not how it works
[05:33] <limi> ok, need to go home and make dinner for our visitors - will be back online later this evening
[05:43] <ddaa> doh, pyarch/twisted really kills performance...
[05:45] <sabdfl> stub: do you have a sql script for testing that does the table renaing?
[05:46] <sabdfl> seems to work if I rename all the id_seq things as well as the tables
[05:46] <ddaa> 32s without twisted process handling, 96s (and still a few failures) with it.
[05:47] <stub> sabdfl: PQM tells me the patch is in
[05:54] <sabdfl> stub:
[05:54] <sabdfl> mark@slinky ~/projects/ubuntu/launchpad/database/schema $ make
[05:54] <sabdfl> * Using launchpad-2-00-0 as baseline
[05:54] <sabdfl> * Creating database "launchpad_test" with sample data.
[05:54] <sabdfl> * This will hang if another process is accessing the database
[05:54] <sabdfl> createdb -E UNICODE launchpad_test || echo launchpad_test already exists
[05:54] <sabdfl> createdb: database creation failed: ERROR:  database "launchpad_test" already existslaunchpad_test already exists
[05:54] <sabdfl> createlang -d launchpad_test plpgsql
[05:54] <sabdfl> createlang: language installation failed: ERROR:  permission denied for language c
[05:54] <sabdfl> make: *** [base]  Error 1
[05:54] <sabdfl> ?
[05:55] <sabdfl> stub: what's the plpgsql for?
[05:55] <stub> Hmm... have to work out how to make that work if the current user isn't a postgres superuser.
[05:56] <stub> It isn't being used yet so you can just comment that line out
[05:56] <sabdfl> stub: sudo -u postgres, ight?
[05:56] <sabdfl> what's it for?
[05:56] <stub> It will be used for some more advanced constraints
[05:56] <stub> see name-constraints.sql.pending
[05:57] <sabdfl> ok. have fun, dont break anything
[05:59] <stub> Will you comment that out and commit or should I?
[05:59] <stub> sabdfl: It won't break anything - just point out code that is already broken ;)
[06:00] <stub> And stop the database being polluted
[06:19] <Kinnison> stub: I have a couple of things I want adding to the soyuz schema. Should I describe them to you; or provide ALTER statements?
[06:20] <stub> your choice, but it is best if you email them to the launchpad@ mailing list so everyone can see what is going on.
[06:20] <Kinnison> Which do you prefer though? "I'd like a column called foo in table bar" or "ALTER TABLE foo ADD COLUMN bar...." ?
[06:21] <stub> alter tables are more explicit.
[06:21] <Kinnison> Okay
[06:21] <stub> Some comments is useful too, so I understand why things are changing and can make meaningful comments in the patches
[06:25] <stub> Kinnison: Is it urgent or can I leave it until tomorrow?
[06:27] <sabdfl> Kinnison: it's a process, stub and i have final say over what goes it, so send ALTER TABLE's with rationale to the wiki / list
[06:27] <sabdfl> stub: i'm sure you'll keep the db-level stuff sane
[06:28] <dilys> Bug 2078 resolved: Product doesn't match IProduct
[06:28] <dilys> https://bugzilla.warthogs.hbd.com/bugzilla/show_bug.cgi?id=2078
[06:29] <Kinnison> sabdfl: yeah; I know you two have final-say. I was just interested in which form of request would be preferred by stub
[06:29] <Kinnison> stub: It's not currently blocking me; so non-urgent I guess
[07:38] <Kinnison> daf: Have you sent that merge to pqm?
[07:40] <daf> Kinnison: yep
[07:43] <Kinnison> daf: Cool. I've made a couple of my scripts slightly less bonkers if you give them duff args or run them outside a tree
[07:46] <Kinnison> daf: I'm proposing to put in: pqm-chinstrap-merge tla-star-merge-here and tla-mirror-here
[07:47] <daf> Kinnison: there are those of us who have hooks for mirror-on-commit
[07:47] <Kinnison> daf: Yeah; I don't like that
[07:48] <daf> I'm not asking you to :)
[07:48] <daf> my point was that mirror-on-merge is redundant if you have mirror-on-commit
[07:49] <Kinnison> oh right
[07:50] <Kinnison> tla-star-merge-here is my favourite
[07:51] <Kinnison> it tree-lints and stops if that isn't clean; then it does a tla-undo if there are changes; then it merges; commits that; then redoes any undo it made
[07:52] <daf> nice!
[07:53] <Kinnison> means that you never get bradb-stylee "merge from RF, oh and foo" commits :-)
[07:53] <daf> oops :)
[07:59] <daf> Kinnison: feel free to rearrange it to have daf/, dsilvers/
[07:59] <daf> Kinnison: could you rename tla-revert to arch-revert for me, for consistency?
[07:59] <Kinnison> sure
[08:03] <Kinnison> daf: submitted
[08:07] <spiv> daf: Hmm, the arch-submit-merge script also exists in rocketfuel@canonical.com/arch-pqm...
[08:07] <daf> spiv: yep
[08:08] <SteveA> yes.  I want this script to be made specific to launchpad
[08:09] <SteveA> I mean, why should I have to type pqm@chinstrap.warthogs.hbd.com each time ?
[08:09] <Kinnison> well; I will as soon as pqm finishes
[08:13] <spiv> What about a slightly more general solution along the lines of the {arch}/+upstream file, e.g. a {arch}/+pqm file.
[08:13] <spiv> ?
[08:20] <kiko> hey SteveA?
[08:23] <daf> spiv: we were thinking of {arch}/+pqm-address :)
[08:29] <spiv> daf: I'd lean towards +upstream-pqm myself ;)
[08:32] <SteveA> heyheyhey
[08:56] <BradB> I finally grokked today what spiv meant when he said that "we don't use the ZODB in Launchpad". At least, I think I grokked it.
[08:57] <kiko> what was there to grok about that? it's zope X3, file-based :)
[08:58] <BradB> I just never quite thought of building a Z3 app that entirely sidesteps the ZODB.
[08:58] <BradB> It's like buying a car and then driving it like Fred Flintstone (i.e. taking out the engine and running it around.)
[08:59] <kiko> maybe. I use the ZODB every day, all day
[08:59] <kiko> I think it rocks
[08:59] <kiko> others may differ..
[09:10] <BradB> 15 minutes so far and my local commit has already started...argh.
[09:20] <SteveA> I love the zodb
[09:22] <daf> spiv: that would be good also
[09:25] <carlos> daf: which is the best way to do the branch for the po/pot split? a tag of my own repository or another tag of rocketfuel?
[09:27] <daf> um
[09:27] <daf> of rocketfuel, I think
[09:27] <carlos> ok
[09:29] <BradB> 34 minutes, and i haven't even gotten to locally committing the star-merge. I'm really looking forward to an arch sprint happening. :)
[09:31] <kiko> an arch crawl you mean
[09:42] <BradB> 48 minutes and counting.
[09:44] <kiko> seriously dude?
[09:45] <BradB> seriously dude
[09:47] <kiko> that's freaked out
[09:48] <BradB> pqm request submitted baby!
[09:50] <spiv> BradB: rock out :)
[09:50] <spiv> BradB: I hear ubuntu takes only about half an hour to install... ;)
[09:53] <BradB> heh
[09:57] <carlos> daf: I have an initial proposal to change the database based on what we where talking for the po/pot split
[09:59] <daf> great!
[10:03] <carlos> daf: and it's sent to launchpad mailing list now
[10:03] <daf> carlos: ok, I'm leaving for today
[10:03] <carlos> ok
[10:04] <carlos> daf: good night