/srv/irclogs.ubuntu.com/2005/09/11/#launchpad.txt

=== robertbb [n=robertbb@d154-20-189-90.bchsia.telus.net] has joined #launchpad
=== jinty [n=jinty@205.134.224.215] has joined #launchpad
=== Kinnison sighs and starts his test run again
=== netjoined: irc.freenode.net -> kornbluth.freenode.net
=== salgado [n=salgado@200-171-140-32.dsl.telesp.net.br] has joined #launchpad
=== camilotelles [n=Camilo@20132139198.user.veloxzone.com.br] has joined #launchpad
=== WaterSevenUb [n=WaterSev@azevedo.astro.up.pt] has left #launchpad ["Fui]
=== robertbb_ [n=robertbb@d154-20-150-5.bchsia.telus.net] has joined #launchpad
Kinnisonnight dudes01:08
=== SnakeBite [n=SnakeBit@84.242.143.64] has joined #launchpad
=== carlos -> bed
kiko-zzzlifeless?02:06
=== Alinux [n=Ubuntu@p54A38043.dip0.t-ipconnect.de] has joined #launchpad
dilysMerge to rocketfuel@canonical.com/launchpad--devel--0: [trivial]  Added Occitan plural forms. (patch-2353: carlos.perello@canonical.com)02:21
=== stub [n=stub@203-217-37-199.dyn.iinet.net.au] has joined #launchpad
=== camilotelles [n=Camilo@20132139198.user.veloxzone.com.br] has joined #launchpad
stubCan someone send me the current password for the Canonical wiki?07:09
stubta07:10
=== _Rappy_ [n=hunt-pre@dsl-253-122.monet.no] has joined #launchpad
=== robitaille [n=robitail@d154-5-117-228.bchsia.telus.net] has joined #launchpad
=== Alinux [n=Ubuntu@p54A38043.dip0.t-ipconnect.de] has joined #launchpad
=== Alinux [n=Ubuntu@p54A38043.dip0.t-ipconnect.de] has joined #launchpad
=== niran [n=niran@cpe-67-10-213-51.houston.res.rr.com] has joined #launchpad
=== zyga [n=zyga@2-mi2-1.acn.waw.pl] has joined #launchpad
=== robertbb_ [n=robertbb@d154-20-150-5.bchsia.telus.net] has joined #launchpad
dilysMerge to rocketfuel@canonical.com/launchpad--devel--0: [trivial]  documentation tweaks. (patch-2354: bjorn.tillenius@canonical.com)09:38
sabdflmoin moin09:40
=== robitaille [n=robitail@d154-5-117-228.bchsia.telus.net] has joined #launchpad
lifelesskiko-zzz: ?09:50
=== dand [n=dand@gw.datagroup.ro] has joined #launchpad
sabdflso guys, what's the verdict on language packs? stub? carlos?10:03
sabdflSteveA: can we automagically discover the closest parent url component which is accessible to zope.Public?10:09
sabdflso, if we are at /products/gnomebaker/+edit then it would be /products/gnomebaker/10:09
=== carlos [n=carlos@243.Red-83-47-24.pooles.rima-tde.net] has joined #launchpad
carlosmorning10:22
=== Keybuk [n=scott@syndicate.netsplit.com] has joined #launchpad
sivangmorning carlos 10:48
carlossivang, hi10:49
carloshmmm10:51
carlosjamesh, https://launchpad.net/products/rosetta10:51
carlosjamesh, the calendar is a bit... big10:51
carlosor is the bug list?...10:52
jameshcarlos: yes.  I blame malone10:52
jamesh:)10:52
carlosok10:52
carlos:-P10:52
jameshbug 2036's title has a long URL in it which can't be word-broken10:52
BjornTi blame the browser, looks perfectly fine in mine :)10:54
jameshBjornT: does Opera word-break on slashes or something?10:55
BjornTjamesh: yeah10:56
jameshwe should probably be adding <wbr>'s or &zwnj;'s to URLs10:56
jameshas hints10:56
=== cprov [n=cprov@haddenham.pepperfish.net] has joined #launchpad
jameshactually, I'm not sure if mozilla handles ZWNJ (zero-width non-joiner) characters10:58
jameshit does handle <wbr> though10:58
lifelessjamesh: i think I'm done for now on pending revirews, just doing a real run to see how it looks11:02
lifelessjamesh: how do you want it back - ?11:02
jameshlifeless: I'll take a look over them and merge, I guess.11:05
lifelessok, I'll put it up on needs review page then :011:05
=== ubuntulog [n=warthylo@port49.ds1-van.adsl.cybercity.dk] has joined #launchpad
=== Topic for #launchpad: Discussion with Launchpad users and developers. || https://launchpad.net/ || Includes Rosetta and Malone. || Developers' meeting, Thursday 8 Sep, 12:00 UTC
=== Topic (#launchpad): set by SteveA at Thu Sep 1 14:05:24 2005
(lifeless/#launchpad) kiko-zzz: so what would you like me to review today ?11:28
SteveAsabdfl: are you working on the logout link at the moment?11:32
sabdflSteveA: no11:32
sabdflBjornT: thanks for the conflicts around bugsubscription ;-)11:33
SteveAokay.  i like to do some small self-contained tasks each day.  i'll improve the logout link as my warmup today.11:33
sabdflSteveA: rockin. thanks.11:34
BjornTsabdfl: sorry :) but it wasn't that bad, was it?11:35
SteveAgustavo rocks: http://labix.org/editmoin11:39
lifelesssweet11:40
=== BjornT has already edited some pages using it :)
sabdflBjornT: the only thing that worries me is that i'd moved to returning None from unsubscribe() if the person is not subscribed11:41
sabdflyou changed to ValueError11:41
sabdfli reverted that, but i'm not sure where you are looking for valueerror11:42
jordisabdfl: hey! did you have time to work on that feature we talked about?11:42
Kinnisonis there a way to tell SQLObject not to defer updates?11:42
SteveA<interjection>we shouldn't use ValueError for such exceptions, but a more specific exception, such as SubscriptionError</interjection>11:42
SteveAKinnison: there's a flush_updates call.  you can do it for individual objects, or for the whole transaction.11:43
Kinnisonergh11:43
SteveAcanonical.database.sqlbase.flush_database_updates()11:43
KinnisonI just want something like SQLBase.disable_deferred()11:43
KinnisonI want to see the exception the *moment* an error occurs11:43
Kinnisonso I know what line caused it11:43
SteveAi'm sure that's possible, but i'd need to look into exactly how to do it11:44
BjornTsabdfl: you can change it to None if you want. i didn't really change anything, i implemented it as described in the interface. i check if the user is subscribed before i try to unsubscribe him, though.11:44
sabdflok. that's in mail commands? in the web ui i've just ignored an attempt to unsubscribe someone who is not subscribed11:45
sabdflit's a noop11:45
spivKinnison: SQLBase._lazyUpdates = False11:45
spivKinnison: (off the top of my head)11:45
=== Kinnison tries
BjornTsabdfl: yeah, i do the same in the email ui. if the user isn't subscribed, it's a noop11:46
spivKinnison: certainly, grepping for lazy will find the relevant thing :)11:46
sabdflcool. in that case i think it's more elegant to keep that decision in the lower layer11:47
sabdflspiv: were you ill when stevea and i were discussing a general way to pass messages to the user?11:47
SteveAthere's a spec on this now11:47
SteveAstu wrote the spec in brazil11:47
sabdflok11:48
SteveAit just needs implementing iirc11:48
spivSteveA: http://mozex.mozdev.org/ is another solution to that problem.11:48
SteveAspiv: i'm a commandline junkie11:48
Kinnisonspiv: seems to be _lazyUpdate rather than _lazyUpdates11:48
=== Kinnison runs a test
spivSteveA: So am I, but wikis are sufficiently webby that I find the context-switch to command lines annoying.  I realise this is very much a matter of personal preference, though :)11:49
spivsabdfl: I don't recall the specific discussion, no.  But I do recall that there is a spec about it :)11:49
sabdflok. who's assigned to implement that?11:50
KinnisonHow can I determine what user I've managed to connect to the db as?11:56
spivconfig.launchpad.dbuser should tell you.11:57
Kinnisonta11:58
stubproduction rollout happening...12:00
carlosstub, what's the patchset you are rolling out?12:00
stublaunchpad--production--1.3112:01
=== WaterSevenUb [n=WaterSev@azevedo.astro.up.pt] has joined #launchpad
carlosstub, ok12:01
sivanglaunchpad.net is donw?12:07
SteveAit's being updated12:07
SteveAstub: the "down for maintenance" page isn't working.12:07
sivangSteveA: ok. do you know if the lpi pages should back sometime soon?12:07
SteveAi get a 503 error from apache12:08
sivangsame here12:08
stubSteveA: Yup. It still hasn't been installed.12:08
SteveAis it in RT?12:08
stubSteveA: Yes, although you can't see it at the moment (there is another ticket about missing tickets)12:11
SteveAgaah12:11
=== spiv -> dinner
SteveAsabdfl: stub will be implementing the notification messages spec12:13
stubAll back up12:24
stubcarlos: Did a fix for the rosetta karma land, or is that still todo?12:25
carlosstub, still todo, but I will do it this week12:25
stubcarlos: No worries - just wondering if I should clear out the dud entries yet12:26
elmostub: librarian's down still?12:26
stubta )12:26
SteveAelmo: 503 status page?12:26
stubLibrarian restarted too12:27
carlosstub, the patch will include a db patch to "migrate" that data12:28
stubcarlos: If it is just 'delete from karma where action in (16,27)', then I need to run it manually rather than it being in the dbpatch12:29
vinscihi carlos - time for the daily reminder12:30
carlosstub, yeah, it's that12:31
carlosstub, I know I was planning to do a "migration script" more than a db patch12:31
carlosvinsci, hi12:31
vinscicarlos, if it is delayed much longer, I won't have any time on my hands.  I do have some time now.12:33
carlosvinsci, count with that today, sorry :-(12:33
elmoSteveA: yeah, I know12:34
SteveAstub: nice sane response about sources on zope3-dev12:34
=== carlos [n=carlos@243.Red-83-47-24.pooles.rima-tde.net] has joined #launchpad
dilysMerge to rocketfuel@canonical.com/launchpad--devel--0: [trivial]  Some missing (trivial) SQLObjects and a quick fix to a broken join in a publishing class (patch-2355: daniel.silverstone@canonical.com)01:03
sabdflspiv: i've got a ticketing system in your review queue01:05
sabdflit's a big patch01:05
sabdflbut mostly straightforward01:05
sabdfland i'm adding the page tests now01:06
sabdflcould i ask you to send me comments tomorrow, so i can land this for the next production update?01:06
sabdflwe need some end user feedback asap01:06
spivsabdfl: I'm about 2/3rds of the way through the review, judging from my scrollbar.01:07
spivYou should have plenty of comments by tomorrow ;)01:07
=== ddaa [n=ddaa@217.205.109.249] has joined #launchpad
ddaasabdfl01:12
ddaadisappointing01:12
sabdflspiv: perfect, thanks!01:12
ddaaKeybuk: ping01:12
Keybukddaa: hey01:14
ddaaWe have a problem.01:14
ddaaManagement has decided to get rid of the arch-namespace related tables.01:14
ddaaI'm right now working on the new database and interface classes for Branch and Revision.01:15
Keybukright01:15
ddaaTo try and stay focused I reckelessly removed all the old arch namespace cruft.01:15
ddaaarcharchive01:15
ddaaarchbranch01:15
ddaaarchchangeset01:15
ddaayadda yadda yadd01:15
Keybukyup01:15
lifelessincluding database.Archive01:15
lifeless^^01:16
ddaaWhich break hctapi pretty throughly01:16
Keybukthey would01:16
ddaaHow difficult do you think it would be to update that code to work with the new model?01:16
Keybukalter the get_branch_from(), get_changeset_from() and put_manifest() functions01:16
Keybukshould be trivial01:16
lifelessKeybuk, ddaa - cool01:17
lifelessKeybuk: we'll probably defer that until after the sprint01:17
Keybukthey just use the database to build up an arch name01:17
lifelessKeybuk: and possibly ask you to do it while ddaa fixes taxi, but we'll see how tough it will be. the problem is that there are no arch names anymore, so knowing how to fix this may require hct internal knowledge01:18
Keybukhct uses arch names01:18
lifelessis it ready to move to urls ? 01:19
Keybukno01:19
KeybukI'll make the move to urls when I make the move to baz-ng01:19
lifelessKeybuk: what are the blockers to moving sooner ? We had planned in sao carlos to move lp to urls asap across the board.01:20
=== Kinnison preps to wander off for lunch
KeybukI'm more concerned with getting people using hct01:20
lifelessKeybuk: ok. let me rephrase - how big is the job of moving the lp side hct code to urls ? 01:21
Keybukit's not just the lp-side code01:21
Keybukyou'd have to move all of hct and sourcerer to using urls throughout01:21
Keybukand invent a new way of naming archives and branches accordingly01:22
Keybukprobably a few weeks work01:22
Keybukthe arch namespace is quite fundamental to it01:22
lifelesswhy would you need to name the archives? I thought that hct was essentially bzr-ng ready? If you are worried about being able ot give baz names, I can give you a uuid-based archive and branch naming scheme easily, which is all that is needed if you use urls for everything01:23
Keybukbecause the names are intended to be meaningful01:23
SteveAcarlos: ping01:24
lifelessok, so its a big job. ddaa and I will talk about a contingency plan, and you and I and Mark can talk monday, onk ?01:24
Keybukright01:24
carlosSteveA, pong01:24
lifelessI'd like you to think , in prep for monday, about what could be done to make it not-a-big-job. I.e. 'names dont matter because bzr doesnt have them'01:24
Keybukmy opinion remains that it's a sufficiently big job that the cost of doing that at the expense of actually having people using hct is too high01:24
Keybukso the right time to do it is when we shift to bzr01:24
SteveAcarlos: i run launchpad, pretty close to what is in rocketfuel, and go to the url http://localhost:8086/products/netapplet/+series/releases/+pots/netapplet/af/01:24
lifelessKeybuk: we do not want to make shifting to bzr a watershed event, that makes the shift very very hard to do.01:25
SteveAcarlos: i get an error about not being able to traverse to 'browsername' when rendering the page template01:25
lifelessKeybuk: so, have a think, and we'll talk monday.01:25
Keybukthere's nothing that can be done to make it not-a-big-job I'm afraid01:25
SteveAcarlos: can you reproduce this error?  is this page tested?01:25
Keybukeven the shift to bzr is going to be a big-job01:25
Keybukit's a possible job, and even quite a boring and tedious one01:25
Keybukbut it's a lot of code change01:26
carlosSteveA, let me check...01:26
Keybuk(infer "easy" from "boring and tedious")01:26
carlosSteveA, same error here01:28
carlosSteveA, I suppose we don't have a pagetest or that should not happen01:28
SteveAindeed01:28
carlosSteveA, thanks for the warning01:28
=== Seveas [n=seveas@ksl403-uva-132.wireless.uva.nl] has joined #launchpad
=== camilotelles [n=Camilo@20132139198.user.veloxzone.com.br] has joined #launchpad
sabdfldoes anybody know what the password is for "Sample Person" (name12)?01:39
carlossabdfl, test01:49
=== carlos -> lunch
=== mpt [n=mpt@200-171-140-32.dsl.telesp.net.br] has joined #launchpad
=== niemeyer [n=niemeyer@200.138.36.81] has joined #launchpad
niemeyerMorning!02:25
=== ChanServ [ChanServ@services.] has joined #launchpad
=== salgado [n=salgado@200-171-140-32.dsl.telesp.net.br] has joined #launchpad
=== niemeyer [n=niemeyer@200.138.36.81] has joined #launchpad
=== mpt [n=mpt@200-171-140-32.dsl.telesp.net.br] has joined #launchpad
=== camilotelles [n=Camilo@20132139198.user.veloxzone.com.br] has joined #launchpad
=== ddaa [n=ddaa@217.205.109.249] has joined #launchpad
=== cprov [n=cprov@haddenham.pepperfish.net] has joined #launchpad
=== dand [n=dand@gw.datagroup.ro] has joined #launchpad
=== niran [n=niran@cpe-67-10-213-51.houston.res.rr.com] has joined #launchpad
=== _Rappy_ [n=hunt-pre@dsl-253-122.monet.no] has joined #launchpad
=== Burgundavia [n=corey@S0106000000cc07fc.gv.shawcable.net] has joined #launchpad
=== segfault [i=carlos@prognus.com.br] has joined #launchpad
=== interalia [n=interali@adsl-60-232.swiftdsl.com.au] has joined #launchpad
=== jamesh [n=james@203-59-251-126.dyn.iinet.net.au] has joined #launchpad
=== Virtuall [n=virtuall@off.lv] has joined #launchpad
=== SteveA [n=steve@office.pov.lt] has joined #launchpad
=== mdz [n=mdz@ca-studio-bsr1o-251.vnnyca.adelphia.net] has joined #launchpad
=== lifeless [n=robertc@dsl-240.26.240.220.dsl.comindico.com.au] has joined #launchpad
=== spiv [n=andrew@adsl-66-203.swiftdsl.com.au] has joined #launchpad
=== lamont [n=lamont@mix.mmjgroup.com] has joined #launchpad
=== dilys [i=daf@muse.19inch.net] has joined #launchpad
=== elmo [n=james@83-216-156-21.jamest747.adsl.metronet.co.uk] has joined #launchpad
=== jordi [n=jordi@115.Red-213-96-69.pooles.rima-tde.net] has joined #launchpad
=== superted [n=superted@213.167.101.222] has joined #launchpad
=== Kinnison [n=dsilvers@haddenham.pepperfish.net] has joined #launchpad
=== \sh_away [n=nnnnnnnn@server3.servereyes.de] has joined #launchpad
=== Znarl [i=karl@bb-82-108-14-161.ukonline.co.uk] has joined #launchpad
niemeyerlifeless: That's more like "Is everything ok?"02:33
elmowho created the ticket in RT via  the warthogs user?02:35
dilysMerge to rocketfuel@canonical.com/launchpad--devel--0: [trivial]  Fixed the pofile index page to work when we don't have such pofile in our database (so POFile.owner is None) + test (patch-2356: carlos.perello@canonical.com)02:35
salgadoSteveA, around?02:35
stubelmo: That would be me02:37
lifelessniemeyer: ah, roughly 'how are you?' ?02:37
elmostub: please use the mail interface; if you use the generic user and web interface I have no idea who opened it02:38
elmostub: also, the reason your requests didn't come across is this is a brand new RT02:39
elmofor various long uninteresting reasons02:39
stubelmo: ok ;)02:39
stubelmo: So I should refile them?02:39
elmoif you don't mind, that'd rock02:39
elmootherwise, I'll get to them in a bit02:39
niemeyerlifeless: Yes! :)02:41
stubelmo: resen02:47
stubt02:47
elmostub: danke schoen02:55
=== sabdfl [n=mark@217.205.109.249] has joined #launchpad
\shgentlemen, is there any possible way to receive personal data from launchpad via xmlrpc call or soap call after authentication?03:04
=== bradb [n=bradb@modemcable033.209-70-69.mc.videotron.ca] has joined #launchpad
spiv\sh: There's no public xmlrpc or soap interfaces yet, but what do you mean by "personal data"?03:07
\shspiv: i'm thinking about hacking a call to LP user page which should receive all data from there, and push it into a jabber user directory while u r registering a new jabber account...03:08
lifeless\sh: person/+rdf03:08
\shlifeless: ok thats a good start03:10
spiv\sh: No fancy rpc required :)03:11
\shwill you integrate other data items like email etc. into the foaf record as well? ,-)03:11
\shspiv: well..updating the record via rpc would be a good idea as well...creating a new jabber account (if you don't have one) and updating your personal record :)03:11
\shspiv: and later also your sip address etc.03:12
lifeless\sh: we are interested in such xml rpc facilities, but right now none are live03:12
spiv\sh: I believee emails aren't published in that rdf intentionally, to avoid making launchpad an easy target for email address harvesters.03:14
\shspiv: that's why I asked, if this would be possible after authentication with lp in an automatic manner03:15
\shthe other idea is to use the database as jabber user directory...*hmmm*03:15
\shor sip phonebook as well03:15
spiv\sh: In theory we could do that.  The best person to talk to about our rdf is morgs.03:16
lifelessspiv: email addresses are on the person page in plain text03:16
lifelessspiv: dont think rdf makes buckleys difference03:16
spiv(who is on leave until the 21st, unfortunately)03:16
\shspiv: well..I'm working on a concept how to integrate SIP + Jabber + Launchpad for a easy to use single sign on03:17
lifelesscool03:17
mptagh03:18
spivlifeless: Yeah.  We should at least do foo.replace('@', '&#40;') or whatever it is, to foil the basic harvesters.03:18
=== mpt still doesn't have permission to see the bugs he's assigned to
spiv\sh: We do have an internal XML-RPC api to the launchpad db for authentication.03:19
mptbradb?03:19
\shat the end it will work like this: you login into your first installation of ubuntu, register with launchpad, create a jabber account,  create a sip account automatically on serverside, kicked by launchpad, and the user has a fully communication office at hand after installation :) that's the plan for ShtoomVoip03:19
spiv\sh: We should definitely talk at UBZ.03:20
stub\sh: Feel like describing your project on wiki.launchpad.canonical.com  (ideally as a specification?) If it looks like a good and non-evil idea we might come to the party and meet you half way. 03:20
\shspiv: when all goes well..sure :)03:21
bradbmpt: https://launchpad.net/people/mpt/+assignedbugs03:21
spiv\sh: https://wiki.launchpad.canonical.com/AuthServer may be of interest03:21
\shstub: I'm drawing right now some things via dia...to get a correct workflow03:21
stubWe have two XML-RPC servers that could be extended to your needs03:21
sabdflspiv: that review wrapped?03:21
sabdfltests are added and mirrored03:21
sabdflSteveA: to all the standalone tests run in the same "story"?03:22
mptbradb: Yes, but the link to "the whole list of bugs assigned to him(her)[me] " is beyond my puny permissions03:22
sabdflstub: any idea what generates IntegrityError's ? under breezy they have become ProgrammingErrors03:22
\shspiv: is it a canonical internal wiki? 03:22
mptbradb: Anyway, that's not what I wanted to ask you. What I wanted to ask you was, What is the lock icon for in https://launchpad.net/malone/bugs/1966 ?03:23
stuburgh ;-(03:23
spiv\sh: Hmm, you can't see/edit it?03:23
stub\sh: It is publicly readable, but I don't think there is public edit access03:23
bradbmpt: Confusion. :P It's meant to indicate a task/watch linkage.03:24
\shspiv: I see nothing..can't even access it ....03:24
\shhmm03:24
bradbmpt: I want to demolish /malone/assigned RIGHT NOW. Would it make sense to show all a persons assigned, open bugs on the +assignedbugs page instead?03:24
\shlast hop  i can get through is 11:  82.211.81.76 (82.211.81.76)                          asymm 12  68.996ms03:24
spivsabdfl: Not yet, it won't be finished before I go to bed.03:24
mptbradb: Absolutely.03:25
sabdflcould you send what you have when you crash?03:25
spiv\sh: http*s*?03:25
stubsabdfl: Generally violating a database constraint. If psycopg has been upgraded, some of the exceptions might have changed.03:25
\shspiv: nothing..03:25
bradbmpt: Right, branching now.03:26
sabdfli could make those page tests catch ...Error03:26
spiv\sh: Hmm :(03:26
\shno connect via https and also no error message ,-)03:26
spiv\sh: It's supposed to be publicly readable.03:26
\shargl03:26
\shfirefox bug03:26
\shcertificate accepting dialogbox appears on desktop 2 where my main instance of ff is *grrr*03:27
spivAh.03:27
stubsabdfl: psycopg.DatabaseError is probably what you want to catch if it has changed03:27
SteveAsabdfl: yes.  there is nothing special in the testrunning code that makes standalone different from, say, foaf03:27
stubsabdfl: The exception hierarchy is in http://www.python.org/peps/pep-0249.html03:28
sabdflstub: this is a page test03:28
sabdflnot code03:28
sabdflit's currently looking for IntegrityError: ERROR etc03:28
sabdfland that needs to become ...Error03:28
sabdflto work with boath hoary and breezy03:28
bradbmpt: What should we make that strange lock icon into? A pair of binoculars? An eye? An icon that represents the specific external tracker linked to? Something else?03:28
SteveAso, IntegrityError and ProgrammingError are siblings03:28
SteveAboth derive from DatabaseError03:28
sabdflthe page test machinery ain't that smart :-)03:29
stubAre you writing a spider or something? I'm curious as to why expected output should contain a database exception?03:29
=== spiv -> bed
salgadospiv, do you have 2s before you go?03:30
mptbradb: So in the list of "Remote bug watches" way down yonder in the bottom right corner of the page, a watch applies to only one task?03:31
SteveAstub: look at the end of doc/bugtask.txt03:31
SteveAlooks like an IntegrityError can leak out of the bugtask API03:31
SteveAwhich seems to me to be a bug in the API03:32
SteveAand in its implementation03:32
stubahh... doctest... not a page test ;)03:32
=== stub context switches
SteveAbradb: ping03:32
sabdflright, sorry03:32
SteveAso, no stories for system doctests03:32
=== Kinnison returns from lunch
sabdflSteveA: for the record, <BLANKLINE> handling has taken months off my life03:33
SteveAi'm pretty sure that each runs independently.03:33
sabdflSteveA: that was a separate question03:33
bradbmpt: I'm not sure if there's actual database constraints enforcing that, but in practice, yes, I think a watch would be assigned to one task per bug.03:33
sabdflregarding the tests in pagetest/standalone/03:33
SteveAokay03:33
bradbSteveA: hi03:33
SteveAbradb: why does the bugtask API let an IntegrityError through?03:33
SteveAi think the API should guard against letting IntegrityErrors occur at all03:34
stubSteveA: It leaks it if you invoke the create method improperly. The doctest is just demonstrating it.03:34
bradbSteveA: what should it raise instead?03:34
sabdflthe create method should be on the target03:34
stubAlthough I'd rather there was just an assert03:34
sabdflthat's the way i've done it with milestones, tickets, specs, etc03:34
SteveAi still don't get it.  we have python code that can check things, and avoid sending the database invalid data.03:34
sabdflthat way, you *can't* pass it bogus data03:35
sabdflso rather than having IBugTaskSet.create()03:35
sabdflhave an IBugTarget.fileBug()03:35
sabdflor newBugTask()03:35
bradbSteveA: Is it always that simple though? What if the validation logic is sort of complex and you don't want to maintain it in two places?03:35
SteveAbradb: there is no excuse for writing an API that can let a database integrity error through.03:36
sabdflSteveA: what will it take to fix <BLANKLINE> handling properly?03:36
bradbSteveA: what should it raise instead?03:36
SteveAsabdfl: depends.  to fix it in python upstream, it needs someone to scrutinize the code and fix it.  to fix it for launchpad, i or someone else can improve the fancydiffer, and plug that in for checking as well as diffing.03:37
SteveAthe fancydiffer at least has decent test coverage.03:38
SteveAbradb: AssertionError is good.03:38
stubbradb: You can't recover from database exceptions because the connection needs to be reset. They are a safety net. Raise a ValueError or derivative if user input might trigger it, or just stick an assert statement in if it is purey to guard against programmers screwing up03:38
SteveAstub: i prefer AssertionError, because no code should expect to receive this.  it shouldn't be particularly recoverable from.03:38
bradbDoes this mean maintaining constraint validation logic in two places?03:38
sabdflbradb: in this case, it should be a method on IBugTarget03:39
sabdflthat way the constraints are automatically fulfilled03:39
bradbsabdfl: right, kiko-zzz had a patch that implemented that, but he was hesitant about adding it because he wasn't sure if it "felt right"03:39
SteveAbradb: sabdfl is objectorientedly right.03:40
bradbsabdfl: "automatically"? perhaps simpler to validate, but i don't see how they're "automatically fulfilled" :)03:40
SteveAbradb: and on maintaining constraint validation logic in two places, which two places are you talking about?03:40
bradbe.g. you could still try to create a task on the same bug/context twice03:40
sabdfl - ...duplicate key violates unique constraint "person_name_key"03:40
sabdfl    ? ^^^03:40
sabdfl    + ProgrammingError: ERROR:  duplicate key violates unique constraint "person_name_key"03:40
sabdfl    ? ^^^^^^^^^^^^^^^^^^^^^^^^^^03:40
sabdfl      <BLANKLINE>03:40
sabdfl      UPDATE Person SET name = 'sabdfl' WHERE id = 703:40
sabdfl03:41
sabdflSteveA: help03:41
bradbSteveA: python code and constraints stored in the database03:41
sabdflstub: any progress on getting linkchecker to pass on lp-with-sampledata?03:41
stubbradb: we do maintain constraint logic in two places. Every UNIQUE constraint in the db has a corresponding unique clause in the column definition in the database class for example. naming constraints are duplicated in the database, and in the form validation. If you don't duplicate the constraints, you can't unittest properly because you don't know the code paths.03:41
SteveAbradb: it is better to write your constraints in python, and have the safety net of the database constraints.  You must not make a poor API simply to avoid some duplication.03:42
bradbok03:42
stubsabdfl: Nope. Linkchecker was giving me the shits again so I've been talking with Kiko and Steve a bit about other spidering options03:42
sabdflbradb: i've often observed you jumping through hoops to avoid a small amount of duplication03:42
sabdflonly generalise code the third or fourth time you have to write it, and then only if its worth it03:43
stubsabdfl: I suspect we need to knock up a minimal spider to fulfill all our use cases03:43
SteveAwe'll have a neat way to check links on pagetests once we get the latest zope3 code.03:43
SteveAsabdfl: is that with fancy diffing on or off?03:43
sabdflSteveA: the default03:44
stub(although linkchecker might still be the best short term solution so I really should belt it with a hammer for an hour and see what happens)03:44
kikohey ho03:44
sabdflmorning kiko03:44
sabdflgreat monthly report03:44
stubyo03:44
SteveAsabdfl: turn fancy diffing off, and try again.03:44
sabdfllet's generate the next one out of milestones + lp specs03:44
sabdflSteveA: it will still fail03:44
SteveAbut, that won't help much if the problem is with <BLANKLINE>03:44
SteveAbut it might give better output03:44
kikothanks mark03:45
kikoso today I will be doing reviews03:45
kikoI have two largish ones03:45
kikoif you have one you'd like me to look at you can ask but no promises03:45
salgadoone is for me, I hope03:45
sabdflkiko: spiv has the ticket system under review already, thanks03:46
kikogreat03:46
kikosalgado, sure, though I suspect it won't be ready for today03:47
stubI've started work on LibrarianGarbageColletion, but the spec as it stands will not actually collect any garbage. The issue is that files will only ever get deleted if they have an expiry date that is not NULL. In almost all of our use cases, setting an expiry date when you create a file would be silly (because we don't want them to expire until they are no longer referenced)03:49
carlosSteveA, http://openwengo.com/index.php03:49
carlosSteveA, perhaps we should start looking into it...03:49
stubSo I think the definition of an unnecessary file in the Assumptions section needs tweaking03:50
SteveAcarlos: interesting03:51
carlosSteveA, seems like Linux version is working already on their svn server. The "problem" is that they are using QT but if it "just works"...03:52
stub*I* think that we should remove a file if its expiry date is in the past OR it is no longer references by any other database objects. However, and UDU there were calls (sabdfl?) to make it so files should only be removed if its expiry date is in the past03:53
SteveAit's SIP, so it will have the same restrictions on certain NATs and routers etc. as shtoom.  The software may be more like a finished product.03:53
stub(full stop). So unexpired files hang around even if nothing references them03:54
SteveAsomeone finished a commercial zope3 project: http://griddlenoise.blogspot.com/2005/09/major-zope-3-client-project-finished.html03:54
bradbmpt: One thing I haven't quite figured out yet: if you're looking at the /malone page as an anon user, how do you go from that to viewing your assigned bugs page? Also, even if you already are logged in, does it make sense to have an "Assigned Bugs" link on the Malone front page with a dynamically-generated link that jumps you to FOAF?03:54
SteveAsurely NULL should mean "i don't care when i'm GCed"03:54
SteveA?03:55
sabdflstub: requiring an expiry date then means that we can put all the policy of expiration in one place03:55
SteveAdo we have a need to keep certain things forever in the librarian, if they're not referenced inside launchpad?03:55
stubI can't think of a use case for it, hence my enquiry ;)03:57
=== stub quickly checks the spec to see if the use case is there...
mptbradb: Your first question is a general problem that can also be expressed as "If you're looking at the /rosetta page as an anon user, how do you go from that to viewing the list of things you've been translating?"03:58
stubHeh.... in fact, all the use cases say 'file should be removed when no longer references'03:58
bradbmpt: I think the problem is slightly different here. The main issue that concerns me is having to jump between namespaces.03:58
mptbradb: Perhaps we could have a magic user that forced you to login and then redirected you to the page for you in particular03:59
mpte.g. reserve the name "you", then /people/you/+bugs redirects to /people/you/+bugs/+login which, when submitted, redirects to /people/bradb/+bugs03:59
bradbnobody, perhaps?04:00
mptHowever, that may be a solution to a problem that doesn't really exist04:00
mptWe could just say "You must _log in_ to see bugs you're involved with in Malone"04:00
bradbI can even give them a /malone/+login link and redirect, i think, but is it bad to redirect to another namespace?04:00
bradbright04:01
mptAs J. Random Person I don't know what a "namespace" is in this context, so I'm going to say "No, I don't mind where you take me to"04:01
bradbok04:02
stubsabdfl: So we create a file in the librarian for a persons hackergotchi. It has a NULL expiry because it shouldn't expire. The user uploads a new hackergotchi. The old hackergotchi is now unreferenced with a NULL expiry. Should the garbage collector remove it? The current spec says no, it will stay there for ever and ever.04:04
stubThis might just be a bad choice of words in the spec, or might be important to some use case I don't get.04:05
kikostub, yeah, you have a good point04:05
kikobut we have no way of saying that file X obsoletes file Y unless we use the filename, right?04:06
sabdflit could be part of the EditView04:06
sabdfl"when replacing a previous hackergotchi, be sure to expire the old one04:07
stubkiko: The only way of doing it is at every point where a file is replaced with another, we set an expiry on the old file. And it also then means doing manual updates via SQL becomes a pita04:07
stubRemembering to do that at everypoint will be error prone I suspect...04:07
kikostub, are the filenames always the same?04:08
=== Kinnison does a happy dance. Finally got an entire ubuntu published
stubCould we use a date in the far future to refer a 'do not expire' file as opposed to a 'do not expire until referenced' file?04:08
stubkiko: No.04:08
stubkiko: Content doesn't have names anyway - it is just a blob.04:08
=== camilotelles [n=Camilo@200.128.80.250] has joined #launchpad
stuberm.... ignore that last comment.04:08
salgadoSteveA, I found a bug in our sqlobject that's already fixed upstream. I backported the fix (https://chinstrap.ubuntu.com/~dsilvers/paste/filekXqKBc.html), and this is something I definitely need for ShipItNG. It's only 20lines. can you review it for me?04:08
sabdflKinnison: rock04:08
sabdflwell done04:09
sabdflKinnison: are we close to bringing up a breezy-clone? upload, build, and publish?04:09
SteveAsalgado: so, it is basically saying that bool columns can be Null 04:10
SteveAand we want to treat None as Null, not as False in bool columns.04:10
salgadoSteveA, exactly04:10
SteveAsounds good to me. do we have bool columns that aren't NOT NULL ?04:11
stuberm.... in english I mean saying 'if expires==NULL, then the file can be removed x hours after it is no longer referenced. If you need the file to remain permanently chewing up disk space, set the expiry to the NEVER_EXPIRE constant (a magic value of 1/1/2038).04:11
stubI still need a use case for a file that should hang around for ever if it is no longer referenced by anything.04:11
Kinnisonsabdfl: Getting ever closer04:11
salgadoSteveA, yes, we do. ShippingRequest.approved can have NULL values, meaning it's pending approval04:11
Kinnisonsabdfl: This was a full publish of warty/hoary/breezy as imported by gina04:12
Kinnisonsabdfl: so a *HUGE* job which showed up a few flaws in the publisher I finished in brazil last time :-)04:12
=== camilotelles_ [n=Camilo@200.128.80.250] has joined #launchpad
sabdflKinnison: how long did the publish take?04:13
vinscicarlos, wow, the openwengo code repository is big :)04:13
SteveAsalgado: i guess... i'm tempted to consider a DBSchema, so that the the "pending approval" state can appear nicely in a UI.  but, if that's yagni, then okay.  in any case, the patch to sqlobject looks good.  i don't think we have anywhere that None is being passed in at present.  maybe you can start off conservatively, and test it by asserting is not None, to check we aren't using None as False right now?04:13
carlosvinsci, I hope that's good :-)04:13
Kinnisonsabdfl: Well, that run took ca. 30min04:14
Kinnisonsabdfl: 10min of which was apt-ftparchive04:15
sabdflok04:15
sabdfland is an update run faster than the first time creation?04:15
salgadoSteveA, the pending approval will definitely appear as so in the UI. what you're suggesting is to add the assert and running our tests to check if something breaks?04:15
Kinnisonsabdfl: I hope so. A totally initial publish is more like nine hours :-)04:15
Kinnisonsabdfl: since we have to shovel about 100 gigs around and then get apt-ftparchive to run over it04:16
SteveAsalgado: i was confusingly talking about two different things.04:16
Kinnisonsabdfl: plus this is running on mawson which elmo says hasn't got much IO, and it's spewwing debug output at ca. 90kB/s04:16
Kinnison:-)04:16
sabdflok04:16
SteveAsalgado: to land the patch: 1. add an assert that the value is never None in to_python and from_python in the BoolValidator.  run all tests.  if that works, apply the patch.04:17
SteveAsalgado: the other point was to consider if using a dbschema rather than a tristate bool makes the shipit application any simpler.04:17
=== lamont__ [n=lamont@15.238.5.156] has joined #launchpad
Kinnisonsabdfl: It's quite odd debugging stuff which uses a megabit of bandwidth for its trace output :-)04:18
salgadoSteveA, yes, that's what I understood about "starting off convervatively". I'll try it04:18
salgadoSteveA, about the DBSchema, I don't think it's necessary, because you should use ShippingRequest.is[Approved,Denied,Pending]  instead of directly accessing ShippingRequest.approved, anyway04:19
kikostub, ping?04:20
kikostub, can you pull marilize's account over to staging?04:20
stubkiko: Yup. It will be Person, EmailAddress, GPGKey and WikiName I guess.04:22
stubcarlos: Or can I just reset the staging database to production?04:23
kikoI don't think she'll need GPGKey or WikiName for the test, stub 04:23
kikostub, I don't think carlos is going to like you if you do that :)04:23
stubShe needs wikiname or some of our pages are broken ;)04:23
kikoaieee04:23
carlosstub, no, please, don't do that ....04:23
carlosstub, at least not today04:23
kikoheh04:23
stubcarlos: ok. Just checking ;004:23
carlosstub, I will try to confirm you later today that you can run the script on production04:24
carlosafter that, I will not mind at all of any update you do :-)04:24
vinscicarlos, we'll see ;)04:24
SteveAsalgado: you might also do a quick scan of the Bool sqlobject fields we have in database classes, to make sure they're all NotNull so far04:24
SteveAsalgado: if any are not NotNull, then we might have faulty data in those places.04:25
carloskiko, Kinnison  what's the status of gina run on production?04:27
carlosthat would reduce a bit the time to generate language packs because I will be able to filter out any package outside main...04:28
salgadoSteveA, good point. I'll do that04:28
kikolast I heard it was pending some diskspace04:28
Keybukso I clicked on a bug ... did some stuff with it04:28
Keybuknow I can't get back to my product's bug listing04:28
Kinnisonwhat TZ is Montral ?04:28
vinscicarlos, from the softphone-ng README, I like it already.  The guys seems to understand software architecture well04:28
Keybukif I click "Overview" it just goes back to the frontpage of launchpad04:29
KeybukKinnison: America/Montreal04:29
salgadocarlos, language.py:    visible = BoolCol(dbName='visible')04:29
carlosvinsci, I hadn't time to look into that04:29
salgadocarlos, do you want NULL values on that column?04:29
KinnisonUTC-4, ta04:29
carlossalgado, no, thanks for the warning. Will fix it now04:29
salgadoKinnison, publishing.py:    embargo = BoolCol(dbName='embargo', default=False)04:29
salgadoKinnison, I guess you definitely want NULL values on that column?04:30
=== Seveas [n=seveas@seveas.demon.nl] has joined #launchpad
salgadooops, sorry04:30
vinscicarlos, among other things, the same code base support GUIs for both Qt and GTK or "whatever toolkit you prefer"04:30
Kinnisonerm, no, that needs a notNull=True04:30
salgadoI misread it as default=None04:30
carlosvinsci, cool04:30
salgadoKinnison, do you want me to add it for you?04:30
carlosvinsci, I like it more now :-)04:31
Kinnisonsalgado: sure, if you're in the area04:31
=== vinsci gave up on GTK/Gnome a year or two ago
salgadoKinnison, done04:32
vinsciso I wouldn't have minded non-gnome support ;-) It obviously better that it can provide both cleanly, though04:32
KinnisonAnyone know how long a flight from London to Montral will take?04:32
salgadocarlos, pofile.py:    rawfilepublished = BoolCol(notNull=False, default=None)04:32
vinsciKinnison, london/la is 1204:32
vinsciwill ruin your whole day, anyway :)04:33
salgadocarlos, do you rely on rawfilepublished being None somewhere?04:33
Kinnisonvinsci: a 12 hr flight?!04:33
vinsciwell, l.a. is quite a bit further away04:33
salgadocprov, codeofconduct.py:    active = BoolCol(dbName='active', notNull=False, default=False)04:34
salgadocprov, I guess that line should have a notNull=True, no?04:34
Kinnisonsabdfl: a run where nothing has changed is 17 minutes04:35
Kinnisonsabdfl: and I think I can reduce that when I have more time to look at optimisations04:35
sabdflok super04:35
Kinnisonbut for now, I'm getting this publisher branch ready for a quick review and moving on04:35
sabdflwe don't need to stress about perf at this stage04:35
cprovsalgado: yes, it's one of the many mistakes I did with notNull, are you correcting those  ?04:35
salgadocprov, yes, I'm fixing it now04:36
=== mpt finishes reading BugTaskWatchLinkage and BugTasksAndExternalBugTrackers
Kinnisonsabdfl: indeed04:36
Kinnisonsabdfl: < 30m is the target04:36
SteveAi have a 221 line diff.txt that i'd like a reviewer to look over and give me feedback on04:36
Kinnisonsabdfl: so that ubuntu can refresh every half-hour like it does now04:36
cprovsalgado: if you can use you regexp-fu to find them, it'll be perfect, because I suspect there are more :( 04:36
salgadocprov, but I'm fixing only the ones related to BoolCol()s. might be good if you can have a look and check for other misuses of notNull04:37
salgadocprov, I can't be sure when they're misused or not. I'd have to ask for each one04:37
mptbradb: Am I right in thinking that bug watches currently don't actually do anything, but they will in the future?04:37
stubkiko: Done, I think ;)04:37
stubkiko: oops.. hang on04:37
cprovSteveA: let me know when have time (~10 min) to talk about an issue I'm having to run tests as a restrict user, ok ?04:38
sabdflSteveA: mail it to me04:38
stubkiko: ok04:38
sabdflmpt: yes, they will in future suck in all related data from the remote bug tracker, regularly04:38
stubkiko: Should I email her, or are you dealing with it?04:38
cprovsalgado: if you can build a list of all fields would be nice to sort it out easily, what do you think ?04:38
bradbmpt: You'd have to confirm with sabdfl as to whether the code that fetches and updates remote bug statuses is actually running on production.04:39
sabdflit's not running, afaik04:39
bradbmpt: IOW, they're not really doing much, for the moment.04:39
mptok.04:39
salgadocarlos, did you see my message about rawfilepublished a few lines above?04:40
kikostub, I can email her, sure. thanks!04:42
SteveAsabdfl: sent04:44
carlossalgado, sorry, my server's raid controller start beeping and had to leave to see what happens04:46
carlossalgado, no, I think it should never be NULL04:46
carlossalgado, will fix it too04:46
=== camilotelles [n=Camilo@200.128.80.250] has joined #launchpad
sabdflSteveA: a bit of a hack, innit :-)04:47
SteveAyeah04:47
SteveAi looked at what is involved in checking the permission "internally", and decided it will be much easier when i've done some refactoring of the publisher which is coming up soon.04:47
salgadocarlos, if you're sure it should never be NULL then I'll fix it. I need to have these fixes in before I merge my fix in sqlobject04:47
carlossalgado, the only situation where I can think it could be NULL is with old data, but that means that the data migration done when that field was added was a bit... hacky04:48
sabdflSteveA: any reason not to address this TODO now?04:48
sabdfl +        # TODO: Check whether logged in at all.  If not logged in, either +        #       show an error, or fail transparently.04:48
carlossalgado, so go ahead04:48
sabdflcarlos: lang pack status?04:49
carlossalgado, I have the language one fixed already and ready to request a rocketfuel merge should I stop that?04:49
=== camilotelles__ [n=Camilo@200.128.80.250] has joined #launchpad
carlossabdfl, seems like whitespace issue is gone. I got a couple of errors that I need to check if it's a corner case or not but that is not blocking language packs anymore04:50
salgadocarlos, well, if you're going to request a merge, then I'd ask you to fix the rawfilepublished too. ;)04:50
salgadocarlos, can you do that?04:50
sabdflcarlos: well done04:50
SteveAsabdfl: good point.  what do you think it should do?  if not logged in at all, then just redirect as normal.  if logged in using basic auth... probably just redirect again.  the worst we get is someone continually pressing "logout" and then filing a bug.  but this won't occur for normal use of the system.04:50
carlossabdfl, https://launchpad.net/malone/bugs/1566 is an issue now but we can workaround it easily as it's a matter of remove all obsolete entries. Anyway I'm fixing the code now so that would the plan B04:50
carlossalgado, sure04:50
sabdflwhere would they press "logout"?04:50
carlossabdfl, thanks, but that should be fixed long ago... I'm not too proud of that...04:51
mptbradb: eh, fmt:icon returns me escaped HTML (full of &lt; and &gt;) rather than real HTML04:51
bradbmpt: did you use structure?04:52
bradbcontent="structure .../fmt:icon", etc?04:52
mptbradb: bingo, thanks04:52
bradbnp04:52
KinnisonSteveA: Is there any way to run a given test as a particular database user? (This is a potential BLOCKER for soyuz until we know either way)04:53
carlossalgado, hmmm POFile.rawfilepublished does not have the NOT NULL constraint at DB level...04:53
salgadoKinnison, look at the test for the foaf-karma-updater cronscript, it uses the karma dbuser04:53
SteveAKinnison: basically, yes.  but it means you need to take more responsibility for that test's setup04:53
Kinnisonokay thanks04:54
carlosso that's not a trivial fix, I cannot fix that now04:54
Kinnisonsalgado: erm, this is a doctest, not a script :-)04:54
Kinnisonare there any doctests which do this?04:54
sabdflcarlos: do we keep the distro po templates around, are they accessible for a later parsing?04:55
sabdfli'm trying to think how best to avoid this review-breezy-xxx stuff04:56
sabdfli think we need a table where we store the potemplate details we were not able to match up04:56
carlossabdfl, http://people.ubunut.com/~lamont/translations/04:56
salgadoKinnison, oh, sorry. I forgot the user is specified in the script and not in the test04:56
carlossabdfl, there you have all .po and .pot files that were ever imported into Rosetta04:56
sabdflthen jordi should review that daily, and say which template belongs where04:56
carlossabdfl, yeah, that system would be really good04:57
carlosI'm a bit overloaded fixing templates from time to time04:57
SteveAthanks for the review, sabdfl 04:57
carlossabdfl, I was thinking on an "easy" fix with the major problem that creates lots of review-* templates04:57
sabdflcarlos: ok, what's that?04:57
carloschecking if the path has the tarball version number04:58
carlosif it's build/gtk+2.8.3/po04:58
carlosinstead of create a new potemplate when the 2.8.4 is imported04:58
carloswe could try to guess that it's an update04:58
carlosit's an easy fix04:58
carlosbut your solution is the way to go 04:59
cprovsalgado: doc/karmaupdater.txt is pointless for my issue, it executes another process., did you mean other file ?04:59
carlosas a long term solution04:59
lamont__carlos: btw, we just made the fixes to get translations back into ~lamont/translations for you... with a large influx as a result (I wasn't sure how far back to go, so I expect I overshot...)04:59
carloslamont__, yeah, thank you, I saw that, the import queue has now more than 3000 pofiles to import....04:59
carlos;-)05:00
lamont__well, maybe 20 july was a bit overkill...05:00
carlosWaterSevenUb, that means that synaptic should appear soon05:00
lamont__:-)05:00
carloslamont__, already imported .po files will be ignored05:00
salgadoSteveA, a lot of tests are failing if I add the assert on the validator, all of them in rosetta, aparently05:00
carloslamont__, so it should not be a problem05:00
carlossalgado, which assert?05:00
SteveAsalgado: can you paste up a typical stack trace you get from the assert?05:01
lamont__carlos: way cool05:01
bradbSteveA: it appears to me that code in a view's constructor gets run even when the current user doesn't have the permissions to view that page. (e.g. I have some view code which grabs the current user and redirects them somewhere else because of a changing URL, but user.name raises an AttributeError on NoneType when the user is shown the login prompt to be auth'd to reach the page.)05:01
=== jinty [n=jinty@205.134.224.215] has joined #launchpad
bradbif what i think is happening really is happening, that would appear to be a security hole05:02
salgadoSteveA, https://chinstrap.ubuntu.com/~dsilvers/paste/filenmCN0N.html05:03
SteveAbradb: a view's constructor will be called in a variety of situations.  i keep saying that there should be no significant code in a view's constructor.05:03
ddaampt: pouet!05:04
bradbSteveA: Is this a security hole?05:04
SteveAbradb: i don't think so.  views are not "assets".  the content classes are the assets.05:04
mptddaa: que?05:04
bradbmpt: "slut" :P05:04
stubKinnison: At the moment I think you subclass LaunchpadFunctionalTestSetup or LaunchpadZopelessTestSetup and override the dbuser attribute05:05
SteveAso, at worst, having significant actions in a view's constructor can lead to usability issues.05:05
salgadocarlos, it's an assert in sqlobject. I added it to make sure we're not inserting NULL values in BoolCol columns, because our sqlobject can't cope with that (it'll always return False for NULL columns)05:05
carlosI need to leave for an hour and a half. Anyone needs anything urgent from me?05:05
bradbSteveA: I'm able to run code that drives a page that I don't have the permission to access. I'm trying to figure out how that isn't a security hole. ;)05:05
mptddaa: What have I done now?05:05
ddaampt: I'm working on branch-summary-listing.pt right now. I would like to add a href somewhere to the canonical branch url. Where should I do that?05:05
Kinnisonstub: heh05:06
stubKinnison: If that is a PITA, feel free to add arguments to the setUp method to pass in the user to connect as.05:06
stub(I could have sworn it already worked that way ;/)05:06
mptddaa: From the branch's name05:06
ddaaIf it were me I would put it in the <b>branch title</b>, except I would not be using <b>, and I would be using some CSS so the hyperlink would not be underlined when the mouse is not over it. 05:06
carlossalgado, hmm, I will fix the pofile.rawfilepublished issue then today, it will need db changes + code changes and it's not trivial is that fast enough for you or you need it now?05:06
ddaampt: the branch name is not present in the mockup05:06
Kinnisonstub: perhaps when I have more time05:06
SteveAbradb: you are not running code that "drives a page".  you are using vague language to try to make a point.05:07
mptddaa: Where's the mockup?05:07
ddaabranch-summary-listing.pt05:07
salgadocarlos, if you can fix it today then it's not a problem. thanks. :)05:07
mptddaa: I spy a "context/title" in there05:08
carlossalgado, could you mail me the list of problems you get?05:08
ddaampt: ha, that's the title then05:08
carlossalgado, or is it only POFile.rawfilepublished ?05:08
lifelessq/win 1905:08
bradbSteveA: Ok, moving on. Is a redirect in a view constructor considered "significant code".05:08
bradbs/\./?/05:08
ddaampt: what's the procedure to get cosmetic improvements (like the CSS trick I just mentioned) done?05:09
SteveAbradb: i'm kinda busy with at least two things happening at once.  can you mail me a detailed description of what you want to know?05:09
bradbok :)05:09
ddaampt: "don't, just nag me until it's done" is an acceptable answer.05:09
mptddaa: IMO the CSS trick you mentioned would not be an improvement05:09
salgadocarlos, I'll run the tests now with "rawfilepublished = BoolCol(notNull=True, default=False)" and see if something is still broken05:09
mptddaa: So is just "don't" an acceptable answer? :-)05:10
ddaampt: IMO you want to have "hyperlink" color for the title, but you do not want to have them all underlined.05:10
carlossalgado, ok, thanks. Mail me it and I will look into it as soon as I'm back05:10
carlossee you later05:10
ddaabut I'm not the UI professional here.05:10
SteveAsalgado: that error is happening in the toPython assert.  so, it seems to me that means there is a NULL in the database at that point.05:11
mptddaa: I'd really rather just have them all underlined.05:11
ddaayuck05:11
SteveAsalgado: if that's so, it means we need to do some cleaning up of NULLs in the production database before we can roll out that sqlobject patch.05:11
=== ddaa goes to make his ugly page template
lifelessddaa: non underlined urls are mystery meat and very bad05:11
lifeless_very_05:12
SteveAsalgado:  this concerns me, so i'd like to get stub's input.05:12
mptmmmmmystery meat navigation05:12
ddaabah05:13
salgadoSteveA, I'm pretty sure all we need is to run "update pofile set rawfilepublished = FALSE where rawfilepublished IS NULL;"05:13
stubIf BoolCol can't cope with NULL, it is broken. Python has True, False and None, PostgreSQL has true, false and NULL. Shouldn't be a problem.05:13
salgadostub, in our current sqlobject version it can't05:14
salgadobut that's fixed in upstream and I need to backport this change05:14
stubok05:14
SteveAstub: current sqlobject's boolcol converts NULL/None into False transparently, both ways05:14
lifelesssalgado: give the backported change to spiv to merge, he has rights to sqlobject IIRC05:14
SteveAthe patch salgado wants to backport makes it a tri-state when the column is declared Non-Null05:15
salgadolifeless, I have rights too (I guess everybody does)05:15
lifelesssalgado: sqlobject ?05:15
salgadolifeless, the problem is that wee need to fix our existing data05:15
lifelesshmm, it is set to canonical, whaddya know05:15
bradbsalgado: I can't find a doctest for PersonView. Is the view class tested anywhere? If not, I'll create a new test right now, for the methods I'm interested in.05:16
SteveAi am surprised that we have faulty data, because the existing code looked like it never sets a NULL.05:16
stubsalgado: rawfilepublished will always be NULL if rawfile is NULL05:16
SteveAso it would be non-sqlobject code that has put NULLs in05:16
stubThe NULLs would be default values05:17
salgadostub, so, it should allow NULLs05:17
salgadocarlos said it shouldn't allow NULL values05:17
salgadobradb, no, there's no test for that view --it's tested only by page tests05:17
stubIt could be modeled either way.05:17
bradbok, I'm creating one now, thanks05:17
carlossalgado, hmmm, stub is right, I assumed that POFile.rawfile is NOT NULL and that's not true... 05:19
stubI prefer it being NULLable myself - gives me more flexibility setting up partial indexes and other stoof05:19
carlossalgado, stub I don't mind to fix it so 'not null' is not valid or leave it as it's atm05:19
stubI think to fix the data, using the current schema definition unchanged, we could do 'UPDATE pofile SET rawfilepublished=FALSE WHERE rawfilepublished IS NULL and rawfile IS NOT NULL'05:20
stub(if there is actually broken data)05:21
carlosstub, yeah, it sounds ok for me05:25
dilysMerge to rocketfuel@canonical.com/launchpad--devel--0: [trivial]  Language.visible is NOT NULL (patch-2357: carlos.perello@canonical.com)05:28
carlossalgado, there you have it05:28
carloslater!05:28
salgadoSteveA, so, what's the plan for the sqlobject fix? aparently the only other BoolCol that we should allow NULL values is the rawfilepublished05:32
SteveAsalgado: overall, if stu is happy with the integrity of production data, and the existing BoolCols that are wrong are being fixed right now, then go ahead and apply the patch to sqlobject.05:33
sd-tuxhi carlos , how can i download a translation/.po from roseta... "Download translations" don't work because of BUG #197805:34
stublaunchpad_prod=# select count(*) from pofile where rawfile is not null and rawfilepublished is null;05:41
stub count05:41
stub-------05:41
stub  925005:41
stub(1 row)05:41
stubSo we need that update as a DB patch when the bug gets fixed.05:41
=== stub goes to bed
=== mpt wonders what "There are currently no links to this bug watch" means
salgadostub, I'll add that db patch as part of my last shipitng changes, because the sqlobject will need to be updated in production when we cherrypick the shipit changes05:45
bradbmpt: There are currently no tasks linked to that watch, perhaps. Not sure how to say that without sounding like you're being talked at by a computer.05:45
elmostub: still here? ;)05:45
stubelmo: just!05:46
ddaaWhat's involved in making a discussion thing work for branches?05:46
elmostub: just for my sanity - you want full debbugs mirrors on both production and staging?05:46
ddaastub: ^^05:47
stubelmo: Yes. We will need both. Staging before production, but I thought I'd put in the production request early.05:48
bradbmpt: Maybe making watch adding part of task adding/editing would eliminate the need for that wording entirely.05:48
elmostub: ok05:48
bradbI can't think of a use case for an orphan bugwatch.05:48
stubddaa: From the database side, you create a BranchMessage table which links Branch to Message. See BugMessage or *Message for details. UI I don't know if we have anything generic.05:50
ddaastub: I have a BranchMessage table in BranchDataStorage.sql05:51
ddaastub: who would know about generic discussion UI foo?05:51
stubddaa: sabdfl might be your best bet - I think he has knocked this up for bounties and tickets and might have stuff for you to pinch or reuse.05:52
=== Nafallo [i=nafallo@c-459571d5.07-44-73746f50.cust.bredbandsbolaget.se] has joined #launchpad
=== ddaa decides it's time for a smoke
ddaasabdfl is not around right now05:53
sabdflddaa: ?05:53
=== Nafallo_ [n=nafallo@unaffiliated/nafallo] has joined #launchpad
ddaawell, I'll have a smoke anyway :)05:54
ddaanext I think you can come have a look and tell us what would suit your fancy05:54
KinnisonSteveA: can you cast your eye over that branch so I can merge those publisher fixes?05:55
salgadoKinnison, binarypackagerelease.py:    essential = BoolCol(dbName='essential')05:55
salgadobinarypackagerelease.py:    architecturespecific = BoolCol(dbName='architecturespecific')05:55
salgadoKinnison, default=False, nutNull=True?05:55
salgado(I mean, can I add that?)05:55
Kinnisonsalgado: for the first yes05:55
Kinnisonsalgado: the secnd should be notNull=True, but no default declarator05:55
salgadookay05:55
stubsabdfl: I was wondering if you had any generic front end to Message and *Message tables you might have knocked up as part of Bounties or ticketing05:56
stubsabdfl: Because ddaa is looking at the message spool for branches05:56
SteveAmessages are always to do with presentation, so there will always be a request available05:56
SteveAso, can you make it an API on the request?05:57
SteveAeither directly, or via an adapter05:57
mptbradb: Yeah, you have to add a watch, and then you have to link a task to one of the watches ... It's too much like work.05:57
SteveAKinnison: which branch exactly?05:57
KinnisonSteveA: the one I added to your review queue a short while ago?05:57
=== SteveA remembers at last to subscribe to the PendingReviews page, seeing as the reviews list seems to have lost its subscription
dilysMerge to rocketfuel@canonical.com/launchpad--devel--0: [r=jamesh]  Supporting architeture coherent builder-queue construction, (build architecuture independent or specific) and process run-time tests. (patch-2358: celso.providelo@canonical.com)05:59
SteveAKinnison: aw poop, it isn't on jamesh's pending reviews page yet06:00
elmohey, can I kill python2.3 from our servers?06:00
KinnisonSteveA: If I can be in a position to merge it (either merge-approved or merge-conditional) by the time I get back from bowling later tonight, I'll be happy. So you can wait a bit06:01
SteveAelmo: cautiously yes, but i'll mail the launchpad list about it06:02
SteveAelmo: i don't know what version of python stub has plugged into postgresql06:03
lifeless2.3 I think06:04
lifelessI'm sure he has had to backport some stuff a little06:04
lifelesskiko - any luck with the photos ?06:04
mptlifeless: What did you mean by "'Remote Bug Details' could with some in-your-face help" in <https://launchpad.net/malone/bugs/1208>?06:13
mptIs that help as in "here's how to use this thing", or help as in fixing the design?06:13
lifelessask brad :006:14
lifelessI was sitting with him and we saw a page, and I was plain scared by it06:14
mptok06:16
bradbI recently observed Burgundavia wondering what a bug watch was all about too.06:17
bradbSounds like this needs the same kind of love I gave to release targeting06:18
kikompt, please use a consistent name over all fields when you do fix that :-)06:18
=== bradb nominates "prioAndSevFilter" as one of the stranger variable names I've seen in LP code
sabdflspiv: still reviewing?06:21
sabdflsalgado: "whoxxx" is different to all the other db field names for a person06:21
sabdfltypically we use a role name06:22
sabdflassignee06:22
sabdflreporter06:22
sabdflor similar06:22
salgadosabdfl, IIRC that was the name we were using in our discussions here in Brazil. that's why I kept it06:23
salgado(I assume you're talking about shipit?)06:23
bradbmpt: Would it be any great crime for now if I removed the "bugs with shared interest" part of the +assignedbugs page? It's non-trivial to test, and might be spending time on the wrong thing until we've learned more about how Real People are actually using this report, IMHO.06:28
kikobradb, I think it should stay06:30
kikodon't test it for now if you are blocked by this06:30
kikoand btw06:30
kikowhy are you changing that page?06:30
bradbok, i'll leave it untested06:30
dilysMerge to rocketfuel@canonical.com/launchpad--devel--0: [r=sabdfl]  improvements to logout pages (patch-2359: steve.alexander@canonical.com)06:30
bradbkiko: I'm not changing anything user visible, I'm just adding tests for the view, because that's now the page you land on when you click "Assigned Bugs" from the Malone front page (bye bye /malone/assigned...fixing a criticalish bug in that report that's preventing mpt from accessing the full list of his assigned bugs.)06:31
kikowhat was the criticalish bug, btw?06:32
kikogreat that you nuked the page though06:32
bradbkiko: Permission Denied. I don't think /malone/assigned is handling privacy correctly; not calling the correct APIs is my guess (but that page is in bad need of nuking either way :)06:32
kikoheh06:33
kikocarlos, ping?06:33
bradb /malone/assigned will continue to work, but it'll just redirect you to the right place in FOAF now06:33
=== bradb follows the word of Jakob
sabdflall hail jakob06:40
SteveA"there are no cows on the ice"06:40
KinnisonSteveA: thanks for that review. I'll get onto it ASAP. As for the amount of database code outside of c.l.d.* I agree it's annoying from the PoV of discoverability. I'll put "Move soyuz db queries into c.l.d.*" onto my longer-term todo if that's okay with you? Something for me to tackle in UBZ perhaps?06:42
SteveAwhy were they constructed outside of there in the first place? 06:42
kikowhy aren't you adding API to your database objects?06:42
kikoSteveA's words are my own06:43
KinnisonBecause at the time I didn't understand how we were laying stuff out and I just wanted to code so I did things the way I've done them in the past (I.E. not as well as I should). For the most part they should be fairly simple to move but I'm loathe to do such refactoring until such a time as I'm not the critical path for the next Ubuntu release :-)06:44
KinnisonIt's not an excuse, I know. But it is the reason06:45
=== kiko is unhappy
SteveAKinnison: do you think someone other than you can move things into their correct places?  do you trust the tests enough to allow others to make moves like that?06:46
kikoputting the database code in the database classes means the APIs were properly designed06:49
kikowhy would it be less traumatic to move the database code later, when we are already being used daily?06:49
KinnisonSteveA: for now I don't want to risk having conflicts. Once I've got the breezy tracker running properly I'll be in a better position to rearrange things. Celso would probably be a good person to do the rearrangement.06:51
SteveAKinnison: when do you think that time will be?06:52
KinnisonSteveA: I have a personal deadline of the end of this week to have it at least limping along06:52
KinnisonSteveA: I agreed that deadline with mark and celso06:52
SteveAkiko: what do you think?  have a rearrangement of this database code in a couple of weeks from now/06:53
SteveA?06:53
kikoI still don't understand why once the tracker is running we're in a better position to rearrange the code06:54
kikoand not putting database code in database objects often means the APIs your software is using are wrong06:54
Kinnisonkiko: because until the tracker is running, I will be in a major code crunch and at the same time I may have to change things at the drop of a hat, which makes conflict resolution a complete arse.06:57
=== Kinnison apologises
Kinnisonmy personal stress levels are getting in the way of my work06:57
KinnisonI'll see what I can do to tidy up this code when I get back later tonight06:58
Kinnisonbbl07:00
=== Kinnison has his cell if he's needed.
SteveAsalgado-lunch: got shipit running here.  getting some schooltool expertise to help -- they've done this before07:15
kikoSteveA, wooo!07:15
Nafallocarlos: when do we have gajim in breezy rosetta? :-)07:24
kiko<kiko> should I make private bugs which have tracebacks?07:29
kiko<kiko> it's very inconvenient and often impossible07:29
SteveAi don't see why having a traceback is enough reason on its own to make a bug private07:31
SteveAif the traceback reveals sensitive security-related stuff, then perhaps07:32
SteveAbut not in general07:32
kikoit reveals implementation details.07:32
kikobut I'm happy if you're happy!07:35
Nafallocarlos: "Administrator help needed. Gajim has not yet been setup for translation through Rosetta."07:35
Nafallocarlos: please do ;-)07:35
mptkiko: #launchpad also reveals implementation details07:40
kikompt, so it does, so it does07:41
SteveAhi sabdfl 07:44
SteveAum07:44
SteveAExchat07:44
SteveAhi salgado 07:44
carlosNafallo, please, follow the instructions at https://wiki.ubuntu.com/RosettaFAQ07:47
carloskiko, pong07:47
kikocarlos!07:48
Nafallocarlos: oh, nice :-). thanx07:48
kikojordi, ping?07:59
SteveAjblack: ping08:00
Nafallocarlos: added on RosettaPendingImports :-)08:03
carlosNafallo, thank you08:03
=== dda1 [n=ddaa@217.205.109.249] has joined #launchpad
bradbkiko: Would you be willing to review my assigned bugs report fixes patch?08:07
bradbIt's criticalish, so I'm hoping to get it in today to rollout by tomorrow.08:08
kikouhm08:09
kikohow long?08:09
bradbkiko: 11 files changed, 201 insertions(+), 144 deletions(-)08:12
kikobradb, sure, put it up on the reviews page in my section08:14
bradbwill do, thanks08:15
bradbmpt: So, the fix which I believe will fix your assigned bugs perms problem (and seriously desuckify what happens when you visit /malone/assigned, or click the link on the Malone front page) is in kiko's review queue now.08:33
jblacksteva: pong08:40
SteveAhi jblack .  just wondering if there's going to be a baz updates meeting this week.  can you send an email to the usual suspects to confirm?08:42
jblackHasn't this already been settled? an hour before the launchpad meeting every thursday? 08:43
SteveAdidn't know it was regular, and it helps to send out a reminder if you're the meeting convener08:43
=== WaterSevenUb [n=WaterSev@azevedo.astro.up.pt] has joined #launchpad
jblackI thought you were. ;) 08:45
jblackI'll send out an email today. :) 08:46
SteveAcool08:46
SteveAgood night folks08:46
kikonight SteveA 08:46
=== niemeyer calls kiko just to see the nick changing again..
niemeyer;)08:47
kikoheh08:47
kikofixed all of them now08:47
sabdflspiv: still reviewing?08:49
mptbradb: great -- it'll certainly help me to see all the bugs assigned to me in one place08:50
=== Adam-_ [n=uimp@217.124.95.61] has joined #launchpad
bradbhm, /me is overwhelmingly giddy to try out Z3 form error messages after the URL dragon has been slayed08:57
bradbi'm on a mission to make our failure modes not suck08:58
bradbBjornT: ping08:59
kiko    ConfigurationError: ('Invalid value for', 'class', "Couldn't import canonical.launchpad.browser, cannot import name WIPRevision")09:03
kikoany clue why I'm getting this?09:03
bradbkiko: __all__?09:03
kikothis is on a hopefully clean tree, though09:03
bradbmm09:04
bradbkiko: update cscvs09:04
kikorocketfuel@canonical.com/cscvs--devel--1.009:04
kiko* tree is already up to date09:04
kiko@#!@#09:04
bradbfear becomes me09:05
bradbbradb@oxygen:~/launchpad $ baz resolved lib/canonical/launchpad/browser/bug.py09:08
bradb1 conflicts remain in this tree09:08
bradbRequested conflicts have been resolved09:08
bradbthat is a confusing message to me09:08
bradbSteveA: around?09:12
kikonope09:12
kikohe's gone09:12
bradbhm09:12
bradbI've run into more pain with using IBugTask as the context.09:13
kikoI suspected so09:13
bradbe.g. for the bug description editing page09:13
bradbname="+edit"09:13
bradbfor="...IBugTask"09:13
bradbschema="...IBug"09:13
bradband here's the real kicker...09:13
bradbpermission="...hahah!"09:13
bradbpermission checking is done on the thing named in for=""09:14
bradbso, the permission checking to edit bug attributes is done on the bug *task*09:14
bradbwith IBugInContext, ABICT, this view could have simply been registered for="...IBug", because IBiC inherits from IBug. in that case, i believe it would just work.09:16
niemeyerKeybuk: ping09:19
=== bradb writes SteveA an email
Keybukniemeyer: heyhey09:21
niemeyerKeybuk: Hi :)09:21
niemeyerKeybuk: Would you be able to explain a bit the structure you've used for patches?09:22
niemeyerKeybuk: I'm curious about, for instance, what happens when the software version changes.09:22
KeybukI'll have to answer this with a story09:23
Keybukwe'll use a simple source package that has a tarball and a patch in it09:23
Keybukimport version 1.0-1 and we get09:23
Keybuk+ simple--orig--1.009:23
=== niemeyer takes his chimarro and listens carefully..
Keybuk  + simple--patch-name--1.009:23
Keybuksimple--orig--1.0--base-0 is the contents of the tar file09:24
Keybuksimple--patch-name--1.0--base-0 is the continuation of that09:24
Keybuksimple--patch-name--1.0--patch-1 is with the patch applied09:24
Keybuk-- 09:24
Keybukso far, so as expected09:24
niemeyerWhat about --diff--?09:24
KeybukDON'T INTERRUPT :p09:24
=== niemeyer :X
Keybukso we import 1.0-2 now09:25
Keybukthis only has some changes to the patch, and none of 09:25
Keybukthe tarball itself09:25
Keybukso we don't change simple--orig--1.0 at all09:25
Keybuksimple--patch-name--1.0--patch-2 is the "update" to the patch branch09:25
=== SnakeBite [n=SnakeBit@84.242.143.64] has joined #launchpad
Keybukso if we checkout patch-1 we get the state for 1.0-1 and if we checkout patch-2 we get the state for 1.0-209:26
Keybuk-- 09:26
Keybuknow let's import 1.0-3 which has changes to _both_09:26
Keybuksimple--orig--1.0--patch-1 is the "update" to the tar file09:26
Keybukwe merge those changes onto the patch-name branch (to update the patch to 1.0-3)09:26
Keybuksimple--patch-name--1.0--patch-3 is the "update" for the changes to the tar file09:27
Keybukwe then import the patch changes onto the patch branch09:27
Keybuksimple--patch-name--1.0--patch-4 has those09:27
Keybuk--09:27
Keybukand lastly 1.0-4 has only changes to the tarfile09:27
Keybuksimple--orig--1.0--patch-2 is the update09:27
Keybukand again, we merge those changes onto the patch branch09:27
Keybuksimple--patch-name--1.0--patch-5 is that update09:27
Keybukno changes to the patch need to be imported, so that's that job done09:28
Keybuk--09:28
Keybukthose are the "simple" operations09:28
niemeyerAck09:28
Keybuknow, when the upstream version changes, we do something different09:28
=== carlos ->dinner
carlossee you09:28
niemeyercarlos: Have a nice dinner09:28
Keybukso we import 2.0-1 which has changes to both, and for fun, let's add a new patch too09:29
niemeyer(conflicts, please :)09:29
Keybukwe /branch/ the simple--orig--1.0 branch09:29
Keybukso we create simple--orig--2.0--base-0 as a continuation of the last state of 1,009:29
Keybukand simple--orig--2.0--patch-1 to "update" that to the contents of the tarball as we found it09:30
niemeyerHummm.. interesting09:30
Keybukthat probably makes some sense, here's where it gets fun09:30
Keybukwe now need to do the same for the patch09:30
Keybukwe branch the simple--orig--2.0 branch _NOT_ the last patch branch09:30
Keybukwe then merge the changes from the last patch branch onto it09:30
Keybukand then finally update it09:31
Keybuksimple--patch-name--2.0--base-0 is a continuation of simple--orig--2.009:31
Keybuksimple--patch-name--2.0--patch-1 is the merge of the simple--patch-name--1.0 branch09:31
Keybuksimple--patch-name--2.0--patch-2 is the update to the actual patch contents09:31
niemeyerBy "changes from the last patch branch" you mean changes from patch-name--1.0--patch-N to orig--1.0--patch-N?09:31
Keybukyes09:32
Keybukdelta the branch and apply it09:32
Keybukadding a new patch is easy09:32
Keybukbranch simple--orig--2.0 (to simple--new-patch--2.0--base-0) and update it with the applied content of the patch (patch-1)09:32
niemeyerUnderstood09:33
Keybukso you understand that?09:33
niemeyerYes09:33
Keybukgood ...09:33
Keybukso let's take a _real world_ example09:33
Keybukwe have the simple_1.0.orig.tar.gz09:33
Keybukwhich is slightly different from simple-1.0.tar.gz the upstream one09:33
Keybukand we found the differences on the CVS import of simple's upstream09:34
Keybukand there was a previous import of simple_0.9.orig.tar.gz09:34
Keybuk...09:34
Keybuksimple--orig--1.0 is a branch of simple--UPSTREAM-RELEASE--1.009:34
Keybukwe merge the changes from simple--orig--0.909:34
Keybukwe sync-tree with simple's upstream CVS at the point we found it09:35
Keybukand then we update the branch to include the changes09:35
Keybuk- 09:35
Keybukso we can extend this to arbitrarily complicated structures09:36
Keybukand it means that there is an incredibly short path between any patch09:36
Keybukyou can calculate ancestry in just one or two steps, rather than a zillion09:36
=== robitaille [n=robitail@p235-083.public.uvic.ca] has joined #launchpad
Keybukso where there's a CVS upstream, you can just merge from it without having to worry about complicated layers in between09:37
niemeyerRight.. that's nice. A "patch provider"09:37
niemeyerOk.. what about conflicts?09:37
Keybukwhat conflicts?09:37
Keybukyou've got what it's supposed to look like in front of you09:37
Keybukyou have the tarball and patch you're trying to import09:38
niemeyerOk.. let me try to explain09:38
Keybukso you can just go "la la la la" and ignore them all09:38
niemeyerWe have simple--orig--1.0--patch-X available, and also simple--patch-name--1.0--patch-Y09:39
Keybukhmm, available how?09:39
niemeyerImported09:39
Keybukit's easier to refer to this in terms of the bundled version09:39
niemeyerAnd we've found a tarball for 2.0 to import.09:39
Keybukright09:40
Keybukdo you mean an upstream tarball?09:40
niemeyerCreating simple--orig--2.0--base-0, a branch of --patch-X.09:40
Keybukor a new 2.0 source package09:40
niemeyerA 2.0 source package, for instance.09:40
Keybukok09:41
Keybukso yes, we have simple--orig--2.0--base-0 from simple--orig--1.0--patch-X09:41
Keybukand simple--orig--2.0--patch-1 with the content of it09:41
Keybuk... no conflict so far ?09:42
niemeyerNow, we have a patch between simple--orig--1.0--patch-X and patch-name--1.0--patch-Y that we want to apply to patch-name--2.0--base-0, right?09:42
Keybukright, assuming that patch-name is in the 2.0 package09:42
Keybukwe make a simple--patch-name--2.0-base-0 from simple--orig--2.0--patch-109:42
Keybukand then try and apply the delta to that09:43
niemeyerRight.. but the changes might conflict with the new patch, right?09:43
Keybukcorrect09:44
Keybukhowever on disk you have a directory in which you unpacked simple_2.0.orig.tar.gz and applied simple-patch-name.patch09:44
Keybukso you know what the /result/ is supposed to look like09:44
Keybukbaz goes "argh!! conflicts!!", we just ignore them and commit it anyway09:44
Keybukthe worst that can happen is you just commit the useful patch logs09:45
niemeyerAh, that's where I'd like to get.09:45
Keybukand then the next thing you do is make that branch look exactly like the unpacked copy on disk, and commit that09:45
niemeyerHummm.. that's strange.09:45
Keybukthere's absolutely no reason that operation needs to be a merge, it could just be a sync-tree, but I like it to be a merge because it often works out quite nicely09:46
bradbkiko: will you have a chance to review that patch today?09:46
kikoI might09:46
kikoright now I have a fucked tree09:46
bradbhehhe.adskj;a09:47
niemeyerKeybuk: Another example, just to clarify it in my mind. Suppose I'm a user, and I have a upstream source tarball of simple-2.0 in my hands, and want to upgrade what is currently being managed by hct.09:47
niemeyerhct has 1.009:48
niemeyerAnd patches for it09:48
niemeyer(like you've shown)09:48
Keybukright09:48
Keybukthis gets a little more interesting, but once you know the basic operations, it comes out quite sweet09:48
Keybukso let's imagine we imported simple-1.0 like this:09:48
Keybuksimple-1.0.tar.gz09:48
niemeyerWhat would be the procedure, first, considering that patches do not conflict, and then considering that they conflict with the differences of 1.0 -> 2.0.09:48
Keybuk+ simple_1.0.orig.tar.gz09:48
Keybuk  + simple_1.0.patch09:49
Keybukin other words, the source package's orig.tar.gz was a branch off the upstream tar.gz09:49
niemeyerAck09:49
Keybukwe feed the new /upstream/ tarball into the imported09:49
Keybukwe get simple--release--2.0--base-0, a continuation of simple--release--1.0--base-009:49
Keybukand simple--release--2.0--patch-1, which has the actual changes09:50
Keybukso delta(simple--release--1.0--base-0, simple--release--2.0--patch-1) is the actual changes from 1.0 to 2.009:50
Keybukthat's all we do!09:50
Keybukwe were only given an upstream job, so that's all that happens09:50
Keybukwe drop a manifest against the Simple 2.0 ProductRelease record09:50
Keybuknow09:50
KeybukCONTEXT SWITCH09:50
Keybukthe user, or an automated process that's part of Grumpy Groundhog comes along09:51
Keybukthey see that a new upstream version has been imported09:51
Keybukand they do something like09:51
Keybuk$ hct pull products/simple/2.009:51
Keybuk(or the short-cut)09:51
Keybuk$ hct pull upstream09:51
Keybukthis uses the same code (hct.model and hct.naming, btw) to process the merge09:52
Keybukit creates a new simple--orig--2.0-base-0 as a tag from simple--release--2.0-patch-109:52
Keybukmerges the delta of the previous orig branch (which might be removing non-free docs, for example) onto it and creates a simple--release--2.0--patch-209:53
KeybukTHAT MIGHT CONFLICT09:53
Keybukbut that's ok, we have a user sitting in front of ut09:53
Keybukwe leave them a directory with the conflicts in and go "oi! resolve this"09:53
Keybuk(grumpy reports via e-mail that there were conflicts that need fixing)09:53
Keybukwe carry on09:53
niemeyerOk09:53
niemeyerUnderstood09:53
Keybukwe make a new simple--patch-name--base-0 from simple--release--2.0--patch-209:53
Keybukwe take the previous delta and make simple--patch-name--patch-109:54
Keybukwhich also might conflict09:54
Keybukbut again, there's a user sat in front of us who can resolve that09:54
Keybukand the best bit about this is that because we know we just asked the user to resolve a conflict, we can label that changeset specially Launchpad09:55
Keybukand the next time someone gets that conflict (because they try the same thing), we can just grab that changeset from the database and apply it09:55
Keybuk-- 09:55
niemeyerNice!09:56
niemeyerThanks for the extensive explanation09:56
Keybukso we can do neat tricks09:57
Keybukgrumpy can once a day try to apply new upstream changes to every source package09:57
Keybukand when it breaks report via e-mail09:57
Keybukall the user has to do is try and do the same operation, fix the conflict and commit it09:57
Keybuk(to _their_ archive)09:57
Keybukand grumpy (and every other user doing the same operation) would automatically pick it up09:58
Keybukso we can use it as an early-warning-system for patch failures09:58
Keybuk-- 09:58
Keybukwhere a couple of people (hi, Mark!) get confused is where the commits go09:58
Keybukthe branches we've been talking about so far have all been sacred to sourcerer09:59
Keybukusers _don't_ commit to those branches09:59
Keybukso let's say I get my simple source package again09:59
niemeyerKeybuk: Ah, yes, that's something I missed/overlooked on your mail. You mention that the patch will automatically be available to other on the next day, but how does it get there (in the public archive)?09:59
Keybuk"hct source simple" does a baz get on:09:59
Keybuksimple@bazaar.ubuntu.com--ubuntu/simple--orig--1.010:00
Keybuksimple@bazaar.ubuntu.com--ubuntu/simple--patch-name--1.010:00
Keybukand that's what I have in my working tree10:00
Keybuknow when I type "hct commit" (which isn't in the dailies, but is on my disk and going in tomorrow) we can't commit to those branches, so we make a copy of them in the user's archive10:00
Keybukso it uses the same model code (hct.model gets lots of exercise)10:01
Keybukand the user ends up with10:01
Keybukscott@netsplit.com/simple--orig--1.010:01
Keybukscott@netsplit.com/simple--patch-name--1.010:01
Keybukin their own archive, and the commit completes10:01
Keybukso now any operation they do is local to them10:01
Keybukand doesn't collide with anything sourcerer (or any other process) is trying to do10:01
niemeyerRight.. but what I'm a bit confused about is that you say:10:02
niemeyer"""10:02
niemeyerOk, so you made some changes to it; what happens tomorrow when someone10:02
niemeyerelse comes along and needs to make more changes?10:02
niemeyer"""10:02
niemeyer:o) =>  Getting dbus-0.36.2/debian/patches/dbus-some-bug-got-fixed.patch10:02
Keybukin the long term (read HctDevelopmentCycle on the wiki) when you release your source, it'll be dropping a manifest referring to _your_ branches in the database10:02
niemeyerSo it means it's on a common/shared/public/whatever archive10:03
Keybukah10:03
Keybukright10:03
Keybukso there's no "hct commit" command in the released version of hct10:03
Keybukwe're not testing that right now, we're testing the basic work-flow10:05
Keybukthe uploads happen by using "hct assemble" and then just uploading it into the existing ftp queue10:05
Keybukso sourcerer notices the upload, and imports it10:05
Keybukso it does a fresh import of the source package and the patch appears because it was found in the source package10:06
Keybuksadly it's unrelated to the patch branch that exists on the original user's drive10:06
Keybukbut they probably won't notice <g>10:06
Keybukthis is a short-term hack to get distro team buy-in now, and figure out what problems they'll have with the work-flow, before we take away the existing stuff10:06
niemeyer$ dupload *.changes10:07
niemeyerThis will upload the patch itself?10:07
Keybukyeah, dupload is a Debian tool10:07
niemeyerWhich will later be imported?10:07
Keybukthose last bits are "existing things the distro team use already"10:07
Keybukit's supposed to feel comfortable to them10:07
niemeyerUnderstood10:07
Keybukand it just gets imported again10:07
niemeyerNow it all makes sense10:07
Keybukwe refer to that as "laundering"10:07
Keybukyou loose the cash you had in your pocket, but at least you can wear the jeans again10:08
Keybukin the _long_ term, they wouldn't upload it with the old tool -- they'd issue something like "hct release" which would do the magic inside launchpad to make it happen10:08
KeybukHctDistroGratification (lp wiki) is what we're giving them today10:08
KeybukHctDevelopmentCycle (lp wiki) is where we're going10:09
=== niemeyer checks
niemeyerKeybuk: What about the --diff-- branches?10:13
niemeyerwhich are used as the patch-base10:13
Keybukthose are just second-level patch branches10:15
Keybuksimple--orig--1.010:15
Keybuk+ simple--diff--1.010:15
Keybuk + simple--patch-name--1.010:15
Keybukso orig changes get applied to diff, diff changes to patch-name10:15
Keybukno different than patch-of-a-patch10:15
niemeyerIs orig ever changed?10:16
niemeyerOr just works as the parent of orig--N+1?10:17
kikohmmm10:21
kikowhat test is it that stuart always tells me to use10:21
niemeyer"""10:21
niemeyer The libtool package in Debian has a large monolithic diff branch, which is the logical patch base. However in Ubuntu, the package has been cleaned up and moved to a new source package format; in there, the original source is the logical patch base.10:21
niemeyer"""10:21
niemeyerThat should explain part of the idea10:21
kikowhich lists pages to check?10:23
niemeyerKeybuk: Thanks again. I now have food for further investigation, and won't bother you for another while. ;)10:23
=== niemeyer must leave now, though..
niemeyerSee you guys10:25
Keybukorig can be changed10:26
Keybukoh, bah, he went10:26
dilysMerge to rocketfuel@canonical.com/launchpad--devel--0: [trivial]  adding a script that allows you to link your sourcecode and lib to directories hanging off another tree (patch-2360: christian.reis@canonical.com)10:30
=== kiko does TDD
=== dand [n=dand@83.103.205.67] has joined #launchpad
=== Alinux [n=Ubuntu@p54A38043.dip0.t-ipconnect.de] has joined #launchpad
dilysMerge to rocketfuel@canonical.com/launchpad--devel--0: [trivial]  When displaying a raw traceback, the errorservice forgot to check if the entry was expired. Fixed. (patch-2361: christian.reis@canonical.com)11:41
=== jbailey [n=jbailey@testhaus.cns.utoronto.ca] has joined #launchpad
jbaileyHmm, I merged accouns and my karma didn't get transfered.  Is that a bug?11:53
jbaileyHmm, and it also seems to still list my old account "jbailey-ubuntu" as member of the Ubuntu Core Team rather than "jbailey"11:56

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!