[01:29] <Kinnison> night
[05:27] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: ++resource++ URLs should be absolute and favicon (patch-825)
[10:30] <Kinnison> Morning
[10:49] <Kinnison> Morning stub
[10:49] <stub> Yo
[10:50] <Kinnison> You going to be around long enough to review and merge an sql patch if I commit it soon?
[10:50] <stub> yup
[10:51] <Kinnison> cool; I'm just doing my normal paranoid checks before submitting to pqm
[10:52] <Kinnison> pqm request sent ;-)
[10:52] <stub> Got comments? :-)
[10:53] <Kinnison> It's four views
[10:53] <Kinnison> I wasn't aware comments were needed for views
[10:53] <Kinnison> If you want them I'll have to do some more
[10:56] <stub> At the very least it needs 'This is a view used by blah listing all the whatsits with green watchamacallits'
[10:56] <Kinnison> Oh okay
[10:56] <Kinnison> give me a sec to hack
[10:57] <stub> Just stick 'em straight in comments.sql
[10:57] <Kinnison> before you merge the patch?
[10:58] <stub> Sure. A few spurious non fatal errors never hurt anyone ;)
[10:59] <Kinnison> COMMENT ON VIEW blah IS ''; ?
[10:59] <Kinnison> like that?
[10:59] <stub> Yup.
[10:59] <Kinnison> cool
[10:59] <Kinnison> I caught my pqm request before it hit servers so I'll put them at the bottom of the patch
[10:59] <stub> I'll sort out any quoting errors or whatever when I do the merge so don't be too paranoid
[11:01] <Kinnison> *nod*
[11:04] <Kinnison> pqm merge sent
[11:18] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: Rename some views, merge some, tidy the sqlobject interactions with them. (patch-826)
[11:19] <Kinnison> that'd be the one
[11:39] <stub> So - should I make a decision about view naming conventions now, or just be inconsistent ;)
[11:39] <Kinnison> I recommend being inconsistent
[11:40] <Kinnison> I offered two conventions in that file
[11:40] <Kinnison> since I can't choose
[11:44] <stub> Neither of which match the V* ones I committed for Kiko ;) I guess there are important things to worry about though...
[11:46] <stub> I guess we will want some indexes in there at some point to speed up those joins..
[11:49] <Kinnison> most of the joins are on primary keys but in time we may want indexes too
[11:49] <Kinnison> I've only tested performance on a single distrorelease (warty) and that seems fine
[11:53] <Kinnison> Morning cprov 
[11:58] <cprov> Kinnison: morning 
[12:11] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: Views for Lucille (patch-827)
[12:11] <Kinnison> thanks stub
[01:07] <Kinnison> ALTER TABLE BinaryPackage
[01:07] <Kinnison>     ALTER COLUMN archspecific SET NOT NULL;
[01:07] <Kinnison> is that right to mark the column as not-null ?
[01:11] <carlos> Kinnison: I think so
[01:11] <Kinnison> carlos: ta
[01:11] <Kinnison> yeah; patch 7 does it that way
[01:18] <Kinnison> stub: I've sent another pqm merge with another db patch
[01:19] <Kinnison> stub: if you happen to still be around
[01:38] <Kinnison> Erm, is pqm b0rken?
[01:42] <SteveA> pqm       2349  0.0  0.0  3756 2272 pts/2    S+   Nov18   0:00 -su
[01:42] <SteveA> not sure what that means
[01:42] <SteveA> that's the only pqm process on chinstrap
[01:42] <Kinnison> indeed
[01:42] (elmo/#launchpad) that's just lifeless with a pqm hell open
[01:43] (elmo/#launchpad) err, shell
[01:43] <Kinnison> I think you were right the first time :-)
[01:55] (elmo/#launchpad) dude, you should have come to the data centre
[01:55] <carlos> lunch time
[01:56] (elmo/#launchpad) (when you were in London I mean - it's by far the faster way I know of to get a local mirror :)
[01:59] <Kinnison> elmo: laptop doesn't have enough room for a full mirror
[01:59] <Kinnison> my desktop only has 5 gigs more than this mirror will need spare right now
[01:59] <Kinnison> I'm tempted to say "sod this" and just hammer mawson instead
[01:59] (elmo/#launchpad) use zhongshan?
[02:01] <Kinnison> yeah; sod it; that'll be enough
[02:04] <Kinnison> elmo: any idea why pqm hasn't done my merge-request yet?
[02:05] (elmo/#launchpad) it thinks it has
[02:05] (elmo/#launchpad) tabnanny failed
[02:05] (elmo/#launchpad) ---- tabnanny bitching ----
[02:05] (elmo/#launchpad) /home/pqm/arch/queue/workdir/rocketfuel@canonical.com/rocketfuel@canonical.com---launchpad--devel--0/launchpad/lib/canonical/launchpad/scripts/gina/clas
[02:05] (elmo/#launchpad) ses.py 299 '\tif len(data) == 0:\n'
[02:05] (elmo/#launchpad) /home/pqm/arch/queue/workdir/rocketfuel@canonical.com/rocketfuel@canonical.com---launchpad--devel--0/launchpad/lib/canonical/launchpad/scripts/gina/grab
[02:05] (elmo/#launchpad) ber.py 136 '\t    try:\n'
[02:05] <Kinnison> aah
[02:06] <kiko> Kinnison, WHAT ARE THOSE TABS DOING THERE?
[02:06] <Kinnison> why didn't 'make check' catch those?
[02:06] <Kinnison> elmo: was pqm meant to forward that info back to me?
[02:07] (elmo/#launchpad) Nov 22 12:21:28 chinstrap postfix/smtp[26745] : 1C8AFEE806F: to=<dsilvers@digital-scurf.org>, relay=adelie.warthogs.hbd.com[82.211.81.139] , delay=0, stat
[02:07] (elmo/#launchpad) us=sent (250 Ok: queued as 33288192C01C)
[02:07] <Kinnison> boggle
[02:08] (elmo/#launchpad) you're bouncing it
[02:08] (elmo/#launchpad) Nov 22 12:21:28 adelie postfix/smtp[16595] : 33288192C01C: to=<dsilvers@digital-scurf.org>, relay=mx.pepperfish.net[195.149.39.198] , delay=0, status=boun
[02:08] (elmo/#launchpad) ced (host mx.pepperfish.net[195.149.39.198]  said: 550 rejected: cannot route to sender: response from fiordland.warthogs.hbd.com [82.211.81.145]  was 550
[02:08] (elmo/#launchpad)  <pqm@canonical.com>: Recipient address rejected: User unknown in virtual alias table <pqm@canonical.com> (in reply to MAIL FROM command))
[02:08] (elmo/#launchpad) meh
[02:08] <Kinnison> aah because the sender is unroutable
[02:12] <SteveA> Kinnison: I want you to get a screwdriver and lever your "tab" key from your keyboard.
[02:12] <SteveA> it's what I do ;-)
[02:12] <Kinnison> SteveA: emacs does the right thing for me
[02:12] <Kinnison> SteveA: I blame vim on mawson
[02:13] <Kinnison> I'd very much like it if 'make check' would rant about tabs
[02:13] <stub> It does!
[02:13] <Kinnison> why didn't it rant at me I wonder
[02:18] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: Gina bits and a db patch for binarypackage, fixed tabs in gina too (patch-828)
[02:18] <Kinnison> woo
[02:18] <Kinnison> elmo: it's working now
[02:19] <Kinnison> stub: fancy reviewing that patch?
[02:19] <stub> sure
[02:19] <Kinnison> ta
[02:26] <stub> Kinnison: Can we make the new column processorspecific instead of archspecific? We are already using arch for arch, and using arch as an abbreviation for architecture will be confusing.
[02:27] <Kinnison> stub: either that or architecturespecific
[02:27] <stub> Hmm... although we already have distroarchrelease
[02:27] <Kinnison> in fact, I would prefer architecturespecific
[02:28] <stub> ok. I'll put it through as architecturespecific
[02:30] <kiko> elmo, did you not get my request to admins@?
[02:33] (elmo/#launchpad) the one you sent on Friday?
[02:38] <kiko> elmo, yes, for salgado.
[02:38] <kiko> he starts this week
[02:40] (elmo/#launchpad) I've started what I have to do on my end
[02:44] <kiko> thanks.
[03:02] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: BinaryPackage.architecturespecific for Gina (patch-829)
[03:03] <Kinnison> elmo: any chance you can either make me a postgres superuser on zhongshan or do some stuff for me on template1 ?
[03:05] (elmo/#launchpad) done the former
[03:05] (elmo/#launchpad) do you want a less 1980's copy of the archive too?
[03:05] <Kinnison> That'd be ace if you could; I think the copy is okay but an update would be nice
[03:09] (elmo/#launchpad) hmm, I'm going to have to move it, fyi
[03:10] <Kinnison> that's fine
[03:10] (elmo/#launchpad)  /srv/archive.ubuntu.com/ -> /srv/archive.ubuntu.com/ubuntu/ to match mawson and generally be sane
[03:10] <Kinnison> yeah
[03:34] <carlos> hmmmm
[03:35] <BradB> morning
[03:35] <carlos> the new rosetta's favicon is really funny, but I'm not sure it should be used in our public release :-P
[03:35] <carlos> BradB: morning
[03:35] <carlos> ohh, it's not rosetta's favicon but launchpad one
[03:37] <carlos> SteveA: around?
[03:38] <SteveA> hi carlos
[03:38] <carlos> SteveA: hi
[03:38] <SteveA> I'm about to have a phonecall with daf.  can it wait a little while?
[03:38] <carlos> yes
[03:50] <Kinnison> elmo:zhongshan is full dude :-(
[03:50] <Kinnison> elmo: It's possible that rsync failed :-(
[03:51] <Kinnison> elmo; I'm emptying my test pool; can you repeat the archive sync to be sure it's complete?
[03:51] (elmo/#launchpad) boggle
[03:52] <Kinnison> elmo: zhongshan only has a 67 gig drive
[03:52] <Kinnison> well a 67 gig / partition
[03:52] (elmo/#launchpad) *BOGGLE* 
[03:53] (elmo/#launchpad) we're at 45Gb for archive.u.c/ubuntu already
[03:53] <Kinnison> yeah
[03:53] <Kinnison> scary eh?
[03:53] (elmo/#launchpad) RUN AFUCKINGWAY
[03:53] <Kinnison> I've freed 17 gigs on zhongshan
[03:55] (elmo/#launchpad) is zhongshan any use to use, with what little space will be left ?
[03:56] <Kinnison> yep
[03:56] (elmo/#launchpad) ok
[03:56] (elmo/#launchpad) well, mirror's rerunning now
[03:56] <Kinnison> I'm prototyping the multi-arch gina
[03:56] <Kinnison> I can just turn off the librarian integration for the duration
[04:04] <carlos> elmo: any hint to enter on mawson using my local ssh certificate as I do to enter chinstrap?
[04:04] (elmo/#launchpad) carlos: cat .ssh/id_rsa.pub | gpg --clearsign | mail change@db.warthogs.hbd.com
[04:05] <carlos> elmo: I did it already, but I need to use chinstrap to reach mawson
[04:05] <carlos> and my local certificate is not used, but the one at chinstrap
[04:05] (elmo/#launchpad) uh?
[04:06] <Kinnison> Host mawson
[04:06] <Kinnison>         ProxyCommand ssh chinstrap nc -q0 %h %p
[04:06] <Kinnison>         Hostname mawson.ubuntu.com
[04:06] <carlos> BradB: I know it's late... but happy birthday :-)
[04:06] <Kinnison> is what I have in my .ssh/config
[04:06] (elmo/#launchpad) you are using the proxying instructiosn on wiki.canonical.com/MachineOverview right?
[04:06] <carlos> elmo: didn't know about that
[04:06] <carlos> O:-)
[04:06] <carlos> Kinnison, elmo thanks, I'm going to read it now
[04:12] <BradB> carlos: thanks :P
[04:22] <Kinnison> this one doesn't cope with arch-indep debs but it's a good start
[05:20] <bob2> aloha
[05:20] <bob2> I broke launchpad again
[05:23] <bob2> after "make" in the db schema dir, then "make build run" in the root, I get an exception when doing anything on the DOAP page
[05:26] <BradB> Is spiv on holiday?
[05:27] <carlos> BradB: yes
[05:27] <BradB> bob2: That explains why it's broken then. :)
[05:28] <BradB> bob2: The deal is, if $app is broken, it's because $developer didn't provide a complete enough test suite for his $app, and thus we were able to checkin a change that made $developer's $app break.
[05:29] <carlos> :-P
[05:29] <carlos> later
[05:30] <bob2> BradB: hah
[05:31] <bob2> BradB: should I send $developer a backtrace?
[05:31] <BradB> bob2: no. https://launchpad.ubuntu.com/malone/bugs.
[05:32] <bob2> BradB: ah
[05:43] <bob2> BradB: hrm, is my login the same as the website's?
[05:44] <sabdfl> BradB: i have a present for you
[05:45] <BradB> really! :)
[05:46] (elmo/#launchpad) doh.  poor Brad.  if it's anything like the "gift" Colin got.. ;-)
[05:46] <BradB> heh heh
[05:49] <bob2> can non-LP people login to the malone dogfood server?
[05:49] (elmo/#launchpad) no
[05:49] (elmo/#launchpad) why?
[05:49] <bob2> erm, to the LP web thing, not ssh
[05:49] <BradB> bob2: do you have an account on ubuntulinux.org? it's the same one.
[05:50] <bob2> ah
[05:50] (elmo/#launchpad) yes - it's just protected by a clientside cert, which is in the mailing list archives
[05:50] <bob2> yeah, I have thgat
[05:50] <bob2> but I need to login to report the bug, but I guess I've just misremembered my password
[05:51] <bob2> ah, perfect
[05:52] <BradB> bob2: you can report the bug on the launchpad product perhaps. we don't have products for DOAP or FOAF, i don't think.
[05:53] <sabdfl> elmo: that's the gift that keeps getting given ;-)
[05:53] <sabdfl> BradB: its a dump of a malone db with a couple thousand bugs sync'd from debbugs
[05:53] <bob2> BradB: yeah, that's what I was doing
[05:54] <sabdfl> 24,000 messages
[05:54] <bob2> LP seems really slow
[05:54] <sabdfl> 7,000 bugs
[05:54] <dilys> New Malone bug #59: "DOAP pages cause an exception.", submitted by Rob Weir
[05:54] <dilys> https://launchpad.ubuntu.com/malone/bugs/59
[05:54] <bob2> woo
[05:55] <sabdfl> its a nice taste of malone-for-distro-team
[05:55] <BradB> sabdfl: and it won't wipe my hard drive, right? :)
[05:55] <sabdfl> BradB: *shouldn't*
[05:55] <BradB> i need lots of people, since that's what i'm testing currently.
[05:57] <bob2> wtf is up with the bugs on 44bsd-rdist?
[05:57] <sabdfl> BradB: i will extend my debbugs sync script to add all the relevant people, then you'll have *plenty*
[05:57] <sabdfl> but for the moment, let's work with this snapshot
[05:58] <BradB> ok. where do i get it when i need it?
[06:00] <SteveA> carlos: please ping me when you're back
[06:06] <bob2> bugs 56 and 59 seem to have been attached to 44bsd-rdist somehow
[06:08] <BradB> People who know something about FOAF: the thing that contains people in Launchpad, what's it called?
[06:08] <BradB> I see IPersonSet, but it isn't clear that there's any implementation for any of that yet, and thus I'm not sure if it's really been blessed as the thing on which to search for people.
[06:08] <BradB> implementation on a search page somewhere, that is.
[06:11] <BradB> sabdfl: dude, are you /sure/ you don't want to remove summary from the bug reporting page? :) for every person that's reported a bug thus far in malone (including me) they've either 1. begged for summary to be optionally, if even on the bug add form at all and/or 2. written a summary that precludes the need for having to explicity say #1. :)
[06:11] <BradB> s,optionally,optional,
[06:12] <sabdfl> BradB: ask me this again after we have outside users for a month, ok?
[06:12] <BradB> ok
[06:12] <sabdfl> also, make sure you are using the summary wherever it is possible
[06:12] <sabdfl> in other words, presenting it in the UI in sane and sensible places
[06:12] <sabdfl> i think it adds a level of quality that other bug trackers don't have
[06:12] <BradB> yeah. i haven't yet found those places, but i'll keep it in mind.
[06:13] <sabdfl> if you are not presenting the info anywhere, then it's useless to ask people to capture it
[06:13] <sabdfl> i think there's a lot of value in having a one-paragraph summary of a bug
[06:13] <sabdfl> but that value is only shown when that one paragraph appears in all the right places
[06:13] <BradB> if anything, i could perhaps see stealing the first paragraph of the report itself as the summary.
[06:14] <BradB> but good bug reporters know very well that the title of the bug has to tell me what this bug is about.
[06:14] <SteveA> as the initial summary perhaps, and then allow people ample opportunities to improve it later.
[06:14] <sabdfl> in my reports, i print the title, and use a tooltip for the summary
[06:14] <SteveA> I know I've used bugtrackers of upstreams that I use, but don't contribute to, and I've wanted to improve the summaries on their bug reports when I've found the wrong or the right bug I'm looking for
[06:15] <kiko> here's my proposal, sabdfl, SteveA, BradB 
[06:15] <SteveA> but if it is too much hassle to do so, then I won't
[06:15] <kiko> use by default the initial comment as the bug summary
[06:15] <kiko> and allow it to be edited later separately
[06:15] <kiko> I always dreamed of doing this for bugzilla
[06:15] <kiko> the initial comment is the bug summary and it's immutable
[06:15] <sabdfl> at this stage we don't have any clear guidelines on the form as to WHAT info to put in summary vs description
[06:16] <kiko> well, the user won't read any guidelines anyway..
[06:16] <kiko> Users Don't Read, remember. :)
[06:17] <BradB> heck, i wouldn't even bother reading that. i don't care much about being nice to a bug tracker. i just want it to get out of my way, like just about everything i do that involves a computer.
[06:17] <sabdfl> they will, if it's in the text box already
[06:17] <kiko> it has to be something obvious. description is obvious; title and description is sufficiently obvious, title, summary and description are less so.
[06:17] <kiko> sabdfl, Jacob Nielsen would slap you on the wrist if he heard that :)
[06:18] <sabdfl> he would find my wrist is a little less limp than his own
[06:18] <kiko> he's not limp-wristed personally, in fact
[06:19] <BradB> ok, if nobody says otherwise, i'm writing a PersonContainer for FOAF, because i see nothing else that contains people.
[06:19] <BradB> er, no, i'm not. i'm going to test something that already has a container that i know of instead. :)
[06:21] <kiko> BradB, salgado is starting on FOAF tomorrow, if you'd like to assign to him.
[06:21] <BradB> sure. i don't really know how to report this as a bug though, as i don't know enough about FOAF to say how it should work.
[06:25] <BradB> kiko: Where's IProduct{Set,Container}? i.e. What did you guys /really/ call it?
[06:26] <kiko> BradB, just report it saying what you need, we'll sort out the rest.
[06:26] <SteveA> daf, carlos: let's talk about rosetta on #canonical-meeting in 30 minutes' time. (1600 UTC)
[06:26] <BradB> kiko: ok
[06:26] <kiko> BradB, soyuz doesn't actually deal with products except when linking to rosetta and malone, you know. :)
[06:26] <SteveA> let's use IxxxSet rather than IxxxContainer as our convention.
[06:27] <BradB> ok, I'll go with ISourcePackageSet then
[06:28] <SteveA> There are a few interfaces / implementations with "Container" in them.  debonzi, can you take on renaming these to "Set" instead?
[06:28] <debonzi> SteveA, sure
[06:29] <SteveA> debonzi: so we have IBugExternalRefContainer in malone, and that should be changed to IBugExternalRefSet whereever it occurs.
[06:29] <SteveA> for example.
[06:30] <sabdfl> BradB: scp chinstrap:~mark/launchpad_dev.20041122.sql.bz2 .
[06:30] <debonzi> SteveA, Right.. Ill d that
[06:30] <SteveA> this only applies to code that is to do with soyuz, malone and rosetta.  not to other launchpad application system code, such as in lib/canonical/launchpad/webapp/session.py we have LaunchpadSessionDataContainer
[06:31] <sabdfl> SteveA: yes, bug editing would definitely give you karma
[06:31] <SteveA> because a LaunchpadSessionDataContainer is a different kind of thing, and should stay as it is.  Basically, stuff in canonical/launchpad/webapp should stay as it is
[06:31] <SteveA> thanks debonzi
[06:31] <sabdfl> that's what salgado should be working on
[06:31] <sabdfl> so would linking malone bugs to upstream, etc
[06:32] <dilys> New Malone bug #60: "FOAF needs a search interface exposed via XML-RPC", submitted by Brad Bollenbach
[06:32] <dilys> https://launchpad.ubuntu.com/malone/bugs/60
[06:33] <SteveA> why xmlrpc?
[06:33] <BradB> for the super widget
[06:33] <SteveA> why not just an http GET ?  that should be compatible with more browsers, and be simpler to implement.
[06:34] <SteveA> there have been a bunch of discussions about this already
[06:34] <BradB> SteveA: manually parsing the response in JS?
[06:35] <SteveA> when kiko and mark and I last discussed this, we talked about returning the response in a way that is easy to parse with javascript 
[06:35] <BradB> we were just talking about this last week. nobody mentioned anything about not using XML-RPC.
[06:35] <SteveA> I think kiko suggested passing back a javascript array
[06:35] <kiko> I sure did.
[06:36] <SteveA> but, the transport really should make no difference.  far fewer browsers support xmlrpc for javascript than support doing HTTP, and there is much less complexity on the server, and in the handling of things like authentication.
[06:37] <carlos> SteveA: ping
[06:37] <SteveA> hello carlos
[06:37] <carlos> hi
[06:37] <SteveA> I'd like to have a meeting with you and daf about rosetta on #canonical-meeting, in 20 minutes time
[06:37] <carlos> ok
[06:38] <BradB> kiko: you mean the reponse is a data structure that would be eval'd (or whatever the JS equivalent is) into a JS array?
[06:39] <BradB> s/is a/is text that looks like a/
[06:39] <kiko> yes, that would be it. a bit nasty using eval, but it's not too slow.
[06:40] <SteveA> this, using an HTTP GET, ought to be a simple thing
[06:40] <BradB> kiko: nasty indeed. seems pretty insecure.
[06:40] <SteveA> insecure how?
[06:41] <SteveA> the javascript is being served from our server.  it is data coming from our server that gets evaled by the javascript interpreter in a browser.  then later, it is getting more data from our server, and evaling it.
[06:41] <BradB> SteveA: for all the different things that will need to be searchable and their corresponding data returned in this eval'd data structure, it seems to be asking for a quoting attack.
[06:42] <SteveA> I really can't see how.  You have a function in JS that gets data from a particular URL and evals it.
[06:42] <SteveA> I don't see what there is to attack.
[06:42] <BradB> SteveA: javascript insertion?
[06:43] <SteveA> I don't see what you mean.
[06:44] <BradB> SteveA: like an sql insertion attack, but with javascript instead. is that easy to avoid here/
[06:44] <SteveA> the javascript is not executed on our server.
[06:44] <BradB> so? :)
[06:45] <SteveA> I do not see a possibility for anything that resembles an sql insertion attack
[06:46] <BradB> SteveA: as long as people exposing the GET interfaces are cautious to quote the return values correctly, it should be okayish. there's an elevated risk here though, no doubt.
[06:47] <BradB> SteveA: e.g. if I entered my name as 'Brad "); ...some nasty js here...' or some such.
[06:48] <Kinnison> I was under the impression that sqlobject should pretty much prevent an SQL injection attack
[06:48] <BradB> Kinnison: there's no sql injection attack going on here.
[06:49] <Kinnison> Oh you're talking HTML injections?
[06:49] <BradB> i said a javascript injection attack. :) the same /idea/ as an sql insertion attack, but on javascript, not sql.
[06:49] <Kinnison> one would hope all values heading back out got HTML encoded yes
[06:53] <sabdfl> BradB|lunch: ping when you're back
[06:54] <BradB|lunch> sabdfl: didn't quite head out the door yet.
[06:54] <BradB|lunch> what's up?
[06:54] <sabdfl> a bunch of things that used the ownerID trick have busticated recently
[06:54] <BradB|lunch> busticated how?
[06:54] <BradB|lunch> in which app?
[06:54] <sabdfl> hmm...
[06:54] <sabdfl> go into doap
[06:55] <sabdfl> search for a project
[06:55] <sabdfl> click on a product
[06:55] <sabdfl> look on the left, see the "File A Bug.." link
[06:55] <sabdfl> click on it and file a bug
[06:55] <sabdfl> boom
[06:55] <BradB|lunch> who didn't test that?
[06:57] <sabdfl> BradB|lunch: the page tests still work
[06:57] <BradB|lunch> ouch :/
[06:57] <sabdfl> because if you POST the correct things to the form, it still works
[06:57] <sabdfl> i think it has to do with the rendering
[06:57] <sabdfl> this is where we want to use the normal addform, but we want to add the owner to the object, owner being the request principal
[06:58] <sabdfl> i copied what i thought was your example on how to do that
[06:58] <BradB|lunch> BugFactory does that already. I've already filed a bug saying that things that add bugs need to use BugFactory.
[06:59] <sabdfl> <browser:widget field="owner" class="canonical.widgets.OwnerWidget" />
[06:59] <sabdfl> so should I rework that form to use BugFactory?
[06:59] <BradB|lunch> that would close a bug, so yeah, i think it'd be a good idea
[06:59] <sabdfl> hmm... it seems to do so already
[07:00] <BradB|lunch> sabdfl: the first thing to do is make sure the relevant test fails though.
[07:01] <sabdfl> there is no test for this part of the machinery
[07:01] <BradB|lunch> ...or create one, as necessary :)
[07:01] <BradB|lunch> eh, which i guess means fixing it first then
[07:02] <sabdfl> hmm... old on, further debugging suggests the problem lies elsewhere
[07:03] <sabdfl> ok
[07:03] <sabdfl> this is interesting
[07:04] <sabdfl> in the zcml for the addform, i gave both a class= and a content_factory=
[07:04] <sabdfl> the view class has a createAndAdd method, which is what is being called
[07:04] <sabdfl> it does not seem to be calling the content_factory (which was BugFactory) at all
[07:06] <sabdfl> SteveA: what are the rules for an addform with both a class= and a content_factory=?
[07:06] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: Librarian wrapper for Lucille (patch-830)
[07:06] <BradB|lunch> sabdfl: createAndAdd is what properly calls the content_factory :)
[07:07] <BradB|lunch> you don't want to override both
[07:07] <sabdfl> ok, i'll try leaving out the class
[07:07] <BradB|lunch> the template calls view/update, which will call createAndAdd, inside which a call to self.create calls the actual factory. if you provide createAndAdd on your view /and/ a content_factory, it will not do what you expect.
[07:08] <SteveA> sabdfl: wow, what hugely complex code the zcml addform directive has behind it
[07:09] <sabdfl> BradB|lunch: well here's the challenge
[07:09] <sabdfl> i'm doing the "file a bug ON A KNOWN PRODUCT" age
[07:10] <sabdfl> url would be something like /doap/projects/foo/bar/+filebug
[07:10] <sabdfl> "file a bug on product bar of project foo"
[07:11] <BradB|lunch> you're doing exactly the same as what a normal bug add is, but you're just molding the UI around a bit to make a shortcut off a bug. if anything, perhaps you can simple store the product id in a hidden field in the form.
[07:11] <BradB|lunch> s,simple,simply,
[07:11] <BradB|lunch> s/off a bug/off a product/ # heh
[07:12] <BradB|lunch> point being though, the code should be structured in such a way that 1. we don't duplicate any templates, hopefully, and 2. by the time BugFactory is called, it all just Does The Right Thing (i.e. the params have been provided to BugFactory correctly by the caller)
[07:13] <SteveA> in an add form, the default implementation of self.create(*args, **kw) is to call the content_factory
[07:13] <sabdfl> BradB|lunch: i don't think auto-generated forms, on their own, are going to be good enough for us
[07:14] <sabdfl> the reality is that i spend large amounts of time trying to bend the form machinery to do what i want
[07:14] <BradB|lunch> SteveA: we've got that part figured out already. sabdfl overrode createAndAdd on his view class, which precludes calling the factory, hence the problem.
[07:14] <sabdfl> in this case, storing a "hidden id" seems so ugly
[07:14] <BradB|lunch> sabdfl: why!?
[07:15] <sabdfl> well, for a start, it's likely to expose the db id of the product, which i'd rather not do
[07:15] <SteveA> so, you need to call self.create from your new createAndAdd
[07:15] <sabdfl> SteveA: is that all?
[07:15] <BradB|lunch> sabdfl: they're exposed everywhere already. if we need to fix that, we can, which would include fixing how it would be presented when a hidden id.
[07:15] <BradB|lunch> sabdfl: the point is that you probably didn't mean to override createAndAdd :)
[07:15] <SteveA> the default case just says: content = self.create(*args, **kw)
[07:16] <sabdfl> i did intent to override createAndAdd
[07:16] <BradB|lunch> sabdfl: why?
[07:16] <sabdfl> because in this case I not only want to create a bug, i want to create the ProductBugAssignment too
[07:16] <BradB|lunch> sabdfl: i already solved that problem though.
[07:17] <sabdfl> SteveA: i think i looked into the default implementation
[07:17] <BradB|lunch> sabdfl: trust me. we have rules about how a bug is add. those rules are explained in BugFactory. whereever you create bugs from the UI, you should be using BugFactory, so that when those rules change, they change consistently everywhere.
[07:18] <BradB|lunch> sabdfl: if his means that in your shortcut-UI you store a hidden id, then it's worth our time to do that, and it's perfectly sane to do so.
[07:18] <sabdfl> ok, i think i can just add product to the **kw and call BugFactory
[07:19] <BradB|lunch> sabdfl: if you don't like the fact that we expose ID's in our HTML, then we'll fix the tokens that vocabs use. this will automatically fix the hidden field value (because that's just a token from a vocab)
[07:19] <BradB|lunch> s/ID's/IDs/
[07:20] <BradB|lunch> sabdfl: why not just store it as a hidden field? i don't understand why we want to write duplicate code in there for nothing. surely the Z3 machinery has an easy way to say "save these request params as hidden fields in the form".
[07:21] <BradB|lunch> then your link to add a bug simply passes the relevant token.
[07:25] <sabdfl> BradB|lunch: when you're back, take a look at that db dump and let's walk through malone using that many bugs 
[07:25] <SteveA> sabdfl: did you call the default implementation from your own code, or did you entirely override it?
[07:26] <sabdfl> SteveA: entirely overrode it
[07:26] <sabdfl> ceck in browser/product.py
[07:26] <kiko> sure.
[07:26] <sabdfl> ProductFileBugView
[07:27] <SteveA> nice security code ;-)
[07:27] <sabdfl> def notify_bug_added(bug_add_form, event):
[07:28] <kiko> sabdfl, I can take a look at some queries when you need me to.
[07:28] <sabdfl> SteveA: give me something better to work with ;-)
[07:28] <SteveA> will do RSN
[07:28] <sabdfl> kiko: we're just getting to the OOOOFFF point you guys hit when you first rn gina
[07:30] <SteveA> sabdfl: maybe you could have done it by adding your own code, but calling the original to do its work in between
[07:34] <sabdfl> stevea: i'm trying to fix this function:
[07:34] <sabdfl> def notify_bug_added(bug_add_form, event):
[07:34] <sabdfl> is bug_add_form a dict?
[07:35] <sabdfl>     if bug_add_form.owner:
[07:35] <sabdfl>         owner = bug_add_form.owner.displayname
[07:35] <sabdfl>     if bug_add_form.sourcepackage:
[07:35] <sabdfl>         spname = bug_add_form.sourcepackage.sourcepackagename.name
[07:35] <sabdfl>     if bug_add_form.product:
[07:35] <sabdfl>         pname = bug_add_form.product.displayname
[07:35] <sabdfl> these lines will fail if the form *didn't* get a source package or product
[07:35] <SteveA> it cannot be a dict
[07:36] <sabdfl> can i change these to bug_add_form.get('fieldname', None)?
[07:36] <SteveA> if it were a dict, it would read bug_add_form['owner'] : etc.
[07:36] <sabdfl> ah, right
[07:36] <sabdfl> wtf is it then?
[07:36] <SteveA> I don't know.  try asking the debugger?
[07:36] <kiko> an instance?
[07:36] <kiko> :)
[07:36] <sabdfl> right
[07:36] <sabdfl> kiko: you'll be the FIRST person i ask next ;-)
[07:36] <kiko> Kinnison, behave or I'll let you have no more fun with her today.
[07:37] <sabdfl> (Pdb) print bug_add_form
[07:37] <sabdfl> <canonical.launchpad.database.bug.BugAdded object at 0x418c754c>
[07:37] <kiko> there you have it.
[07:37] <sabdfl> whouldya look at that?
[07:37] <kiko> you want hasattr() I suspect.
[07:37] <Kinnison> kiko: but but but she is completely and utter fucked from a multi-arch PoV
[07:37] <sabdfl> tnx :-)
[07:38] <SteveA> hasattr is evil.  it eats exceptions
[07:38] <kiko> hasattr(bug_add_form, "sourcepackage") ?
[07:38] <SteveA> maybe you want getattr(fieldname, None)
[07:38] <kiko> SteveA, well, what do you suggest -- this is going to raise AttributeError, isn't it?
[07:38] <SteveA> slightly less evil than hasattr
[07:38] <kiko> then it's:
[07:38] <kiko> if getattr(bug_add_form, "sourcepackage", None) is not None:
[07:38] <kiko>    ...
[07:38] <kiko> (but I hate that)
[07:38] <SteveA> yeah, of course
[07:39] <sabdfl> so what do the guru's recommend?
[07:39] <kiko> SteveA seems to distrust hasattr; I think it's harmless in this context but it's your call who to trust. I suspect it doesn't matter and both forms are equivalent.
[07:39] <SteveA> sabdfl: is the point that one of the attributes may not be present?
[07:40] <SteveA> so, right now you're getting an AttributeError?
[07:40] <sabdfl> SteveA: yes
[07:40] <SteveA> use getattr
[07:41] <SteveA> if you're going to be hitting this pattern a lot, then someone should write a wrapper object to do this more elegantly
[07:41] <SteveA> form = AttributeAccessAsDict(bug_add_form)
[07:41] <SteveA> if form.get('fieldname') is None:
[07:41] <SteveA>  etc.
[07:42] <sabdfl> can i use getattr(obj, 'attribute') and have it return None if there is no attribute like that?
[07:42] <sabdfl> or do I have to be explicit about the fallback to None?
[07:42] <kiko> sabdfl, you need to be explicit.
[07:43] <kiko> >>> getattr(int, "foo")
[07:43] <kiko> Traceback (most recent call last):
[07:43] <kiko>   File "<stdin>", line 1, in ?
[07:43] <kiko> AttributeError: type object 'int' has no attribute 'foo'
[07:44] <carlos> do you know if postgres can handle a field with "text" type that could have about 1MB of text in it?
[07:45] (elmo/#launchpad) carlos: yes it can
[07:46] <carlos> elmo: thanks
[07:47] <debonzi> SteveA, should BugContainerBase be changed to BugSetBase too ?
[07:48] <sabdfl> ProductBugAssignment(bug=bug, product=kw['product'] , owner=kw['owner'] )
[07:49] <sabdfl> debonzi: yes, if you can merge the two sanely
[07:49] <sabdfl> regarding the above code...
[07:49] <sabdfl> will it work, if kw['product']  is a Product object, not an int?
[07:50] <debonzi> sabdfl, Im not sure
[07:53] <SteveA> debonzi: yes please
[07:54] <SteveA> sabdfl: I think it is supposed to.
[07:56] <Kinnison> argh!
[07:56] <Kinnison> binarypackage is unique on binarypackagename,version
[07:56] <Kinnison> argh!
[08:01] <lulu> night all :o)
[08:01] <lulu> kinnison: cheer up !
[08:01] <Kinnison> night lulu
[08:07] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: script fixes, remove breadrumbs from Rosetta (patch-831)
[08:21] <SteveA> >>> class AttributesByKey(UserDict.DictMixin):
[08:21] <SteveA> ...     def __init__(self, obj):
[08:21] <SteveA> ...         self.obj = obj
[08:21] <SteveA> ...     def __getitem__(self, key):
[08:21] <SteveA> ...         try:
[08:21] <SteveA> ...             return getattr(self.obj, key)
[08:21] <SteveA> ...         except AttributeError:
[08:21] <SteveA> ...             raise KeyError, key
[08:21] <SteveA> 
[08:21] <SteveA> needs an `import UserDict` too
[08:22] <SteveA> sabdfl: had an idea about your use of getattr / hasattr earlier.
[08:28] <dilys> New Malone bug #61: "Create a new table to store temporal po/pot files to be imported", submitted by Carlos Perell Marn
[08:28] <dilys> https://launchpad.ubuntu.com/malone/bugs/61
[08:39] <BradB> SteveA: is there another meeting on wednesday? i don't recall seeing an email to lp@ about it.
[08:39] <carlos> BradB: is there any way to remove a package from a bug in malone? I selected a package and a product and I want to remove the package reference
[08:40] <BradB> carlos: for now, the best you can do is reject it, perhaps.
[08:42] <carlos> BradB: but the bug is still valid, I think I will maintain it and remember to use only product next time ;-)
[08:42] <carlos> BradB: thanks
[08:42] <SteveA> BradB: I'm traveling to London on Wednesday.  How would Thursday work for you?
[08:43] <BradB> should be fine, i think
[08:44] <BradB> carlos: hm? if you reject the package assignment, you only reject the package assignment.
[08:44] <Kinnison> SteveA: thursday?!
[08:44] <Kinnison> SteveA: I guess so
[08:44] <Kinnison> SteveA: I'll be @ kamion's place but I can try to make sure I'm available
[08:47] <SteveA> I'd prefer thursday to friday, as it gives some time to start following up on the meeting
[08:47] <carlos> BradB: oh, I didn't saw it has it's own status. Thanks
[08:47] <carlos> SteveA: it's ok for me
[08:47] <SteveA> so, let's do thursday
[08:47] <SteveA> I'll send a mail after workraving
[08:54] <dilys> Merge to rocketfuel@canonical.com/launchpad--devel--0: Massive *Container to *Set renaming. All the interfaces and classes used by soyuz, rosetta and malone named <something>Container was renamed to <something>Set. The IProjectContainer and ProjectContainer classes were deleted since the respecting Set was already implemented and all the other class using the Container was changed to use the Set one. I hope it does not break anything. At least launchpad is ru
[08:56] <SteveA> debonzi: excellent!
[08:56] <carlos> BradB: any chance to get a diff like output with the notification mails?
[08:57] <BradB> carlos: The notification emails will have to be better-formated. Normal people can't read diff-like output.
[08:58] <kiko-afk> w00t
[08:59] <carlos> BradB: but it's easier to understand by developers :-P
[08:59] <debonzi> SteveA, nice.. I hope everything still working at least as it was :)
[08:59] <dilys> New Malone bug #62: "all Launchpad templates should have titles", submitted by Dafydd Harries
[08:59] <dilys> https://launchpad.ubuntu.com/malone/bugs/62
[08:59] <BradB> carlos: I guess it depends on what you mean by diff-like output for notification emails.
[09:00] <carlos> - Old value
[09:00] <carlos> + New value
[09:01] <carlos> diff -u
[09:01] <BradB> yeah, that's something to be avoided in notification emails dude :)
[09:02] <BradB> we can arrive at a format that is readable by developers and by people that don't have superpowers too, i think.
[09:02] (daf/#launchpad) wdiff?
[09:07] (daf/#launchpad) gconftool-2 --type string --set /apps/malone/notification/diff_style "udiff"
[09:08] <carlos> :-P
[09:38] <BradB> SteveA: What's our policy for upgrading Zope 3? The thing that I'd like to use to solve the selection problem is sources, which don't appear to be in the snapshot of Z3 we're using.
[09:41] <sabdfl> given that the tests use a different db, is it possible to run launchpad and make check at the same time?
[09:43] <BradB> sabdfl: I think that's a problem with postgresql. Client A is connected to db A, client B wants to drop db B in the same cluster, but can't because A is connected to A.
[09:43] <carlos> daf: I'm merging now the sql patch for the new table
[09:43] <sabdfl> right
[09:43] <sabdfl> carlos: new table?
[09:43] <carlos> will try to finish it today so you can use it
[09:44] <carlos> sabdfl: yes, to store raw po/pot
[09:44] <carlos> for the web import
[09:44] <sabdfl> can those rather be additional fields on POTemplate and POFile?
[09:44] <sabdfl> i don't think we need history, just the last one
[09:44] <carlos> sabdfl: it's a temporal queue
[09:45] <carlos> we are using it that way until we get zodb ready
[09:45] <sabdfl> why not just a field on POTemplate, and one on POFile?
[09:45] (daf/#launchpad) that would mean that you can't upload PO file data for a PO file that doesn't exist yet
[09:45] <sabdfl> you'd create the POFile at the time of the first upload
[09:45] <sabdfl> then, you'd have a POFile
[09:45] (daf/#launchpad) true
[09:45] <sabdfl> it's the same as parsing a directory with a POTemplate and POFiles
[09:45] (daf/#launchpad) isn't this whole mechanism temporary?
[09:46] <sabdfl> everything temporary becomes permanent ;-)
[09:46] (daf/#launchpad) heh :)
[09:46] (daf/#launchpad) I think if it's a separate table, it might be easier to amputate it
[09:46] <sabdfl> this is the pre-cursor to "find it in Bazaar branch, and auto-imort"
[09:47] <carlos> sabdfl: we don't need it into the database
[09:47] <sabdfl> carlos: yes we do
[09:47] <carlos> sabdfl: why?
[09:47] (daf/#launchpad) we also want to store things like who made the upload
[09:47] <sabdfl> this is something i should have asked for ages ago, actually
[09:47] <sabdfl> daf: np, it's just a field on the table
[09:47] <sabdfl> this is the simplest way to get going
[09:47] <sabdfl> we can enhance it to a proper workflow later
[09:48] <carlos> sabdfl: I mean, I don't see which utility could have store the .po file inside the database
[09:48] <sabdfl> ALTER TABLE POTemplate ADD COLUMN fileuploaded;
[09:48] <sabdfl> carlos: que?
[09:48] <carlos> sabdfl: <carlos> sabdfl: we don't need it into the database
 carlos: yes we do
[09:48] <sabdfl> it means it's there for reporting and analysis
[09:49] <sabdfl> if you look at launchpad *right now* you'll see that for *any* product, you can instantly start using malone as your upstream bug tracker
[09:49] <sabdfl> you just create the project and product, then click on "File bug..." and voila
[09:49] <sabdfl> we need to get rosetta to the same point
[09:50] <sabdfl> I want to create the project on product and click on "Start translating.." and have it prompt me for a POTemplate and POFiles
[09:50] <sabdfl> e voila
[09:50] <carlos> right, we are adding the same functionality in Rosetta and I don't see why we need to store that file into the database to have it...
[09:50] (daf/#launchpad) what's this "reporting and analysis" bit?
[09:50] <carlos> you upload the .pot or .po file
[09:50] <carlos> we import it into rosetta
[09:51] <sabdfl> "show me a list of projects which have uploaded POTemplates"
[09:51] <carlos> and we can forget about the raw imported file
[09:51] <carlos> sabdfl: what happens when we automatically update the POTemplate from arch?
[09:51] <sabdfl> carlos: who imports it into Rosetta
[09:52] <carlos> should we kill the raw field?
[09:52] <carlos> sabdfl: when arch is in place, a script
[09:52] <sabdfl> carlos: we could store the last version we pulled from arch into that field
[09:52] (daf/#launchpad) sabdfl: how is that different to "show me a list of projects which have POTemplates"?
[09:52] <sabdfl> when we update it from arch, we store it there
[09:52] <sabdfl> daf: it isn't, it just takes you straight there
[09:53] <sabdfl> the guy uploaded a potemplate, you get a POTemplate
[09:53] <carlos> I see it as a waste of hd, but if you want it, it does not hurts
[09:53] <sabdfl> not an intermediate step which requires more code...
[09:53] <sabdfl> shortest path to being live in las vegas
[09:53] <sabdfl> you are 90% of the way there
[09:53] <sabdfl> carlos: can you show me the table dfinition you wanted?
[09:54] <SteveA> BradB: first, check to see if the new zope3 snapshot you're using works with our code.  Next, we need to ask lifeless and jblack what we should do to get a new zope3 into rocketfuel.
[09:54] <carlos> CREATE TABLE RawPOFile (
[09:54] <carlos>   id         serial  NOT NULL PRIMARY KEY,
[09:54] <carlos>   file       text    NOT NULL,
[09:54] <carlos>   potemplate integer NOT NULL REFERENCES POTemplate(id),
[09:54] <carlos>   language   integer REFERENCES Language(id),
[09:54] <carlos>   variant    text,
[09:54] <carlos>   person     integer REFERENCES Person(id),
[09:54] <carlos>   datesent   timestamp without time zone DEFAULT timezone('UTC'::text, ('now'::text)::timestamp(6) with time zone) NOT NULL,
[09:54] <carlos>   CHECK (((language IS NULL) AND (variant IS NULL)) OR (language IS NOT NULL))
[09:54] <carlos>   );
[09:54] <BradB> SteveA: ok
[09:55] <carlos> hmmm
[09:55] <carlos> person should be uploader
[09:56] <sabdfl> carlos: do they have to upload a potemplate first?
[09:56] <carlos> they need to create it like the projects and products
[09:56] <carlos> from a web interface
[09:56] <carlos> they should upload a potemplate, yes
[09:56] <carlos> but it's not a hard requirement
[09:59] <sabdfl> so, where is the uploaded potemplate stored?
[09:59] <carlos> sabdfl: same table
[09:59] <carlos> language = NULL, variant = NULL
[10:00] <sabdfl> carlos: please restructure to add the needed fields to POTemplate and POFile
[10:00] <sabdfl> think of it this way
[10:00] <sabdfl> the backend should not care whether the file came from revision control, or was uploaded
[10:00] <sabdfl> we implement the uploading now, before spain, because it makes the system bsaically usable
[10:01] <sabdfl> can we parse a POTemplate or POFile in real time?
[10:01] <BradB> SteveA: Interesting. The all pass with a new Z3 (rev 28491). I get an error on trying to drop a db that's already being accessed by other users, which causes two errors, but that doesn't seem related to the Z3 upgrade.
[10:01] <carlos> sabdfl: it takes about 7-8 minutes to import a pofile
[10:01] <carlos> a potemplate is faster
[10:01] <carlos> we need to profile the import code
[10:01] <carlos> to make it faster
[10:02] (daf/#launchpad) sabdfl: I'm getting conflicting messages about how the PO(T) upload should work
[10:02] (daf/#launchpad) when people upload PO files, are they imported directly, or do they get checked by someone first?
[10:09] <SteveA> doesn't uploading po files take a while?
[10:11] (daf/#launchpad) well, given that uploading large files takes a while, uploading large PO files will take a while
[10:11] <SteveA> oh, I don't mean uploading.  I mean inserting into the database.
[10:11] (daf/#launchpad) yes, it does take a whlie
[10:14] <SteveA> how long?
[10:15] (daf/#launchpad) it depends -- I'd guess it's O(n) in the number of messages, but we've observed several minutes for moderately sized files
[10:18] <SteveA> several like, more than three?
[10:19] <sabdfl> ok, so we won't have the user wait while we import
[10:19] <sabdfl> we'll put a status flag on there
[10:19] <sabdfl> then we'll try and import it in the background
[10:19] <sabdfl> if it works, we update the status to "imported" and notify the user
[10:20] <sabdfl> if it doesn't we send a message to the user and our mailing list, so we can help sort it out
[10:20] (daf/#launchpad) hmm, aren't there potential problems with launching asynchronous processes when handling a request?
[10:21] <SteveA> yes there are
[10:21] <SteveA> so we don't do that
[10:21] <SteveA> we have a separate place where the queue gets processed, one file at a time
[10:21] <SteveA> so, as a user of rosetta, I can ask for various pot files to be uploaded and imported
[10:21] <SteveA> the system remembers it was me who asked for these to be done
[10:22] <SteveA> I'm told immediately that the file is queued, and will be processed into the database in the near future
[10:22] (daf/#launchpad) I'm still confused about:
[10:22] (daf/#launchpad) 21:02:09 <daf> sabdfl: I'm getting conflicting messages about how the PO(T) upload should work
[10:22] (daf/#launchpad) 21:02:31 <daf> when people upload PO files, are they imported directly, or do they get checked by someone first?
[10:22] <SteveA> a separate cron job can call a URL that says: process the next potfile in the queue now, and send appropriate status messages
[10:23] <sabdfl> exactly
[10:27] <sabdfl> BradB: have you had a chance to play with the big db dump?
[10:27] <sabdfl> it looks really cool to see 7,000 bugs in malone
[10:29] <BradB> sabdfl: not yet. i'm building a little source package selection widget using Z3 "sources" currently. is it more important for me to look at the dump?
[10:30] <sabdfl> BradB: i'd like to walk through it with you, because it highlights a few issues that are going to be in your lap
[10:31] <BradB> sabdfl: where do i get it from?
[10:31] <sabdfl> scp chinstrap:~mark/launchpad.2004.11.22.sql.bz2 .
[10:31] <sabdfl> try that
[10:33] <BradB> sabdfl: 
[10:33] <BradB> bradb@oxygen:~ $ scp chinstrap.warthogs.hbd.com:~mark/launchpad.2004.11.22.sql.bz2 .
[10:33] <BradB> scp: /home/mark/launchpad.2004.11.22.sql.bz2: No such file or directory
[10:34] <sabdfl> try 20041122
[10:34] <BradB> i see it though. i guess it's launchpad_dev.20041122.sql.bz2
[10:34] <sabdfl> right
[10:34] <sabdfl> workrave
[10:34] <carlos> sabdfl: about the po storage we were talking... What happens if the po file is broken and we cannot import it? we have lost the old raw file, should we try to fix it? 
[10:34] <BradB> comin down the wire
[10:36] <sabdfl> carlos: we imported the old file, it's represented in the iscurrent MsgSets
[10:38] <carlos> sabdfl: right, but what should be done with that file? remove it from the row? or just mark the import as done and forget the file until next import that will overwrite it?
[10:38] <SteveA> I suggest to leave it there
[10:38] <SteveA> you may want to analyze why it failed
[10:38] <SteveA> allow the next import to overwrite it too
[10:39] <SteveA> I suppose we should save the failed po files somewhere, or have them mailed somewhere
[10:39] <BradB> sabdfl: this should pipe fine through psql then eh?
[10:39] <carlos> hmm, perhaps we could execute msgfmt -c before importing it and reject the upload if it fails?
[10:39] <sabdfl> carlos: the status should say "failed"
[10:39] <sabdfl> status can be "new", "imported", "failed"
[10:39] <carlos> importing it == save it in raw mode
[10:40] (daf/#launchpad) carlos: we shuoldn't need to call msgfmt -- trying to parse it with our own parser should be good enough
[10:40] <carlos> daf: our parser is not perfect and it will take us some time to get it perfect
[10:40] <carlos> the SteveA's suggestion will help us to improve it
[10:41] <carlos> if msgfmt rejects a file it's not our fault if our parser fails
[10:42] (daf/#launchpad) if there are bugs in our parser, we should fix them
[10:42] <sabdfl> lifeless: please can you import apt 0.6 urgently? it's blocking real distro work
[10:42] (daf/#launchpad) if our parser's going to choke on the file, running it thourhg msgfmt first is not going to help anything
[10:42] <carlos> daf: I know, if we use msgfmt we just forget about broken files, any other error will be detected and notified so we could fix it
[10:43] <carlos> daf: I was talking about broken .po files
[10:43] (daf/#launchpad) well, our parser should be able to detect broken PO files
[10:44] <carlos> ok, then parse it with our parser, if it's correct, we save it into the database, it it fails, we reject the upload. Is it ok?
[10:44] <carlos> reject the upload and send us an email to check why it failed
[10:45] <sabdfl> if we can do a very fast sanity check, we should do that in real time
[10:45] <sabdfl> reject obviously broken files
[10:45] <sabdfl> then, we can try the proper import
[10:46] <SteveA> yeah, don't want people using it to upload warez or pr0n
[10:46] <carlos> sabdfl: the parser is not too slow, it's the import the one that is slow
[10:46] <sabdfl> ok
[10:46] <sabdfl> parser should bereally fast
[10:47] (daf/#launchpad) yeah, the parser is fast
[10:47] (daf/#launchpad) it's the DB stuff which is slow
[10:47] <carlos> hmm, I just remembered
[10:47] <sabdfl> SteveA: i'm creating the buttress app, should i go with the old style location of lib/canonical/buttress/*?
[10:47] <carlos> sabdfl: is there any problem with the code that was reused from python when developing the parser?
[10:48] <carlos> you asked about the license but didn't said anything more about it
[10:48] <SteveA> sabdfl: yeah, that's consistent with the other apps
[10:48] <sabdfl> carlos: i don't know
[10:48] <sabdfl> as long as the licence allows us to use it internally, that's fine
[10:48] <BradB> sabdfl: heh, the bug paging isn't yet only retrieving just the objects to render the first page :P
[10:48] <carlos> SteveA: I don't know the pyton license details, is it a problem for us?
[10:48] <sabdfl> no, it shouldn't be
[10:49] <carlos> SteveA: we have some code from python in our parser
[10:49] <SteveA> we'd agreed to talk about moving the apps into canonical.launchpad during the conference -- sketch it out and see what makes sense
[10:49] <BradB> sabdfl: when do you want to walk through this?
[10:49] <sabdfl> BradB: yeah, we are going to have to ask kiko's advice on indexes ;-)
[10:49] <sabdfl> BradB: tomorrow's good, i have code to write for lifeless
[10:49] <sabdfl> ping me when you're up
[10:49] <BradB> sabdfl: currently it's my fault. i'm just not querying the bugs properly in the batching machinery.
[10:49] <SteveA> carlos: code from python is under the python license.  It needs clear attribution in the code, and a note of approximately what has been changed.  that's all.
[10:49] <sabdfl> just wanted you to see it running
[10:49] <BradB> sabdfl: ok, i'll ping you tomorrow then
[10:49] <sabdfl> i think it's going to be fantastic!
[10:50] <sabdfl> we have lots of issues to polish, but the underlying idea is now proven in my mind
[10:50] <SteveA> carlos: obviously keep the copyright intact
[10:50] <sabdfl> within a month or two i think we should have lots of keen upstream users
[10:50] <carlos> # Contains code from msgfmt.py (available from python source code),
[10:50] <carlos> #     written by Martin v. Loewis <loewis@informatik.hu-berlin.de>
[10:50] <carlos> #     changed by Christian 'Tiran' Heimes <ch@comlounge.net>
[10:50] <BradB> i sure hope so
[10:50] <carlos> SteveA: is that enough?
[10:51] <SteveA> carlos: is it possible to keep the python code in its original module source, on its own?
[10:51] <SteveA> that is the best way.
[10:51] <carlos> don't know
[10:51] <carlos> lalo did it, I will look at it this week
[10:52] (daf/#launchpad) as I understand it, lalo copied a few lines
[10:52] (daf/#launchpad) I don't know which lines
[10:52] (daf/#launchpad) if they are trivial, it's probably not enough to be covered by copyright
[10:52] (daf/#launchpad) if not...
[10:55] <SteveA> carlos, daf: find out exactly which parts of the file are from the python source.  Note the fact clearly at the top of the file, who wrote them, and that they are under the PSF licence.
[10:55] <SteveA> it isn't urgent, seeing as it is mentioned in the file already
[10:55] (daf/#launchpad) I think the parser code could probably do with a review at any rate
[10:55] <SteveA> and the PSF license allows us to use the code.
[10:55] (daf/#launchpad) again, it's not urgent
[10:56] (daf/#launchpad) but given our experience with poimport.py, it would be worth Carlos and I taking a look at it
[10:56] <SteveA> yes
[11:00] (daf/#launchpad) SteveA: do you have an idea about dealing with absolute links in Rosetta?
[11:01] <SteveA> which absolute links?
[11:02] (daf/#launchpad) hmm, some of them are on the main template
[11:02] <dilys> New Malone bug #63: "Review and improve our po parser", submitted by Carlos Perell Marn
[11:02] <dilys> https://launchpad.ubuntu.com/malone/bugs/63
[11:02] (daf/#launchpad) I suppose those would be easy to work around
[11:02] (daf/#launchpad) carlos: gracias
[11:02] (daf/#launchpad) carlos: do you know of any absolute links aside from those in the main template?
[11:02] <SteveA> we talked about the main template the other day: for now, do a hack where you look at the URL to see if you are on the rosetta stand-alone or with the rest of launchpad
[11:02] <SteveA> keep it quick and cheesy
[11:03] <SteveA> soon there will be a better way to do this.
[11:03] (daf/#launchpad) I'm not sure I understand your suggestion
[11:03] <carlos> I did this patch for the main template:
[11:03] (daf/#launchpad) there are links in the overridden page template which would be easy to change
[11:03] <carlos> --- orig/lib/canonical/launchpad/templates/rosetta-main-template.pt
[11:03] <carlos> +++ mod/lib/canonical/launchpad/templates/rosetta-main-template.pt
[11:03] <carlos> @@ -67,15 +67,15 @@
[11:03] <carlos>          &mdash;
[11:03] <carlos> -        <a href="/rosetta/translator">Translator Dashboard</a>
[11:03] <carlos> +        <a href="translator">Translator Dashboard</a>
[11:03] <carlos>          &mdash;
[11:03] <carlos> -        <a href="/rosetta/maintainer">Project Maintainer Dashboard</a>
[11:03] <carlos> +        <a href="maintainer">Project Maintainer Dashboard</a>
[11:03] <carlos>          &mdash;
[11:03] <carlos> -        <a href="/rosetta/prefs">My Preferences</a>
[11:04] <carlos> +        <a href="prefs">My Preferences</a>
[11:04] <carlos>        </div>
[11:04] <carlos> that should fix those links
[11:04] <carlos> but there are other inside rosetta that shows ++foo++ links
[11:04] (daf/#launchpad) carlos: looks good
[11:04] <carlos> let me look for them..
[11:04] <SteveA> I don't think so
[11:04] <SteveA> those links will break when you're not at the root of rosetta
[11:04] <carlos> right
[11:05] (daf/#launchpad) oh, yeah
[11:05] (daf/#launchpad) it needs to be /translator etc.
[11:05] <carlos> I forgot that, that's why I did not committed it this morning...
[11:05] <carlos> daf: no
[11:05] <SteveA> it is midnight here.  I'm off for the night.  see you tomorrow.
[11:05] <carlos> daf: that will be also wrong
[11:06] <carlos> SteveA: night
[11:06] (daf/#launchpad) SteveA: good night
[11:06] <SteveA> cheers
[11:06] <carlos> daf: the correct link is /rosetta/translator from launchpad
[11:06] <carlos> daf: but from rosetta.shut... is /translator
[11:06] (daf/#launchpad) that's what I was trying to say
[11:06] (daf/#launchpad) I think
[11:07] <carlos> if you put /translator, it will be broken
[11:07] <carlos> from launchpad
[11:07] <carlos> don't see your point
[11:07] (daf/#launchpad) ok
[11:07] (daf/#launchpad) oh, I see
[11:08] (daf/#launchpad) yes, Rosetta will be broken from launchpad.ubuntulinux.org
[11:08] <carlos> daf: the breadcrumbs is the other broken thing I saw:
[11:08] <carlos> https://rosetta.shuttleworthfoundation.org/projects/gnome/gnome-panel
[11:08] (daf/#launchpad) but getting it working from rosetta.sf.o is more important
[11:08] <carlos> you said it's fixed, right?
[11:08] (daf/#launchpad) I removed the breadcrumbs completely
[11:08] <carlos> perhaps we should update the dogfood code
[11:08] (daf/#launchpad) they don't work with vhosts anyhow
[11:13] <carlos> daf: I'm going to end my work for today, will do the db change tomorrow, is that ok for you or do you need it for your current work?
[11:15] (daf/#launchpad) go ahead with it
[11:15] (daf/#launchpad) sorry
[11:15] (daf/#launchpad) I mean, go ahead and stop for today
[11:15] (daf/#launchpad) I have other things I can work on
[11:16] <carlos> :-P
[11:16] <carlos> ok
[11:16] (daf/#launchpad) hasta maana
[11:16] <carlos> daf: I'm not going to sleep yet ;-)
[11:16] (daf/#launchpad) ah :)
[11:34] <sabdfl> what is our favicon?
[11:35] <sabdfl> looks like... um... not sure
[11:36] <sabdfl> is there a way in sql to update a row with values from other tables?
[11:38] <kiko> an update with a select clause?
[11:38] <Kinnison> a single value yes
[11:38] <Kinnison> more than one? goodness knows
[11:38] <carlos> sabdfl: a rubber duck
[11:39] <sabdfl> carlos: if i can't find mine will you bath with me instead?
[11:39] <sabdfl> i *think* update ... from  might do the trick
[11:40] <carlos> sabdfl: X-)
[11:40] <sabdfl> carlos: oh, tha FAVICON
[11:40] <sabdfl> whew
[11:41] <carlos> sabdfl: what do you thought?
[11:41] <carlos> X-)
[11:41] <sabdfl> update table set column = table.column FROM table, table WHERE. ...
[11:41] <sabdfl> works
[11:41] <sabdfl> carlos: i thought you were saying that a rubber duck could update my tables
[11:41] <sabdfl> :-)
[11:42] <carlos> sabdfl: this conversation goes directly to the wiki, you know it, right?
[11:42] <carlos> :-)
[11:42] <Kinnison> sabdfl: coo; is that standard SQL or a pgsql extension?
[11:42] (elmo/#launchpad) Kinnison: latter
[11:43] <Kinnison> elmo: aah
[11:43] <sabdfl> Kinnison: i think it's standard
[11:43] <sabdfl> ah
[11:43] (elmo/#launchpad) sql92's update is wank - almost everyone extends it
[11:43] <sabdfl> elmo knows :-)
[11:48] <sabdfl> debonzi: thanks for the renaming!
[12:00] <debonzi> sabdfl, no problem :)