=== lifeless_ is now known as lifeless
=== elmo_ [~james@george.kkhotels.co.uk] has joined #launchpad
=== stu1 [~stub@dsl-] has joined #launchpad
=== kiko is now known as kiko-afk
=== justdave_ [~dave@] has joined #launchpad
=== justdave_ is now known as justdave
=== kiko-afk is now known as kiko
!alindeman:*! Hi all .. It appears that one of our main rotation servers has dropped off the Internet ... We've pulled it from rotation and are working to mitigate further problems ... Sorry for any inconvenience and thanks for using Freenode!04:13
=== BradB|away [~bradb@host217-37-231-28.in-addr.btopenworld.com] has joined #launchpad
=== mdz [~mdz@69-167-148-207.vnnyca.adelphia.net] has joined #launchpad
justdaveok, anyone know what this error means?06:08
justdave/home/dave/Source/Warthogs/launchpad/launchpad/lib/sqlobject/main.py:231: UserWarning: I tried to set the property "labels", but it was already set, as a method.  Methods have significantly different semantics than properties, and this may be a sign of a bug in your code.06:08
kikoit seems that one class defined in :231 already has a method defined called labels()06:14
kikoit may be that this is only described in the interface..06:14
=== stub [~stub@dsl-] has joined #launchpad
justdaveyeah, but sqlobject isn't mine, so Apparently I"m talking to it wrong somewhere.06:24
justdaveexcept I'm not calling it directly, just trying to load a couple objects from canonical.launchpad.database06:24
justdaveand malone/browser.py is still importing them from there06:25
justdavealthough I get the same error loading browser, too06:26
justdavemaybe it's a red herring and I should just ignore it. :)06:26
kikoit's triggering when importing?06:28
stubjustdave: I think it was Carlos, Daf or Spiv who had that error last night. 06:38
justdaveyeah, triggers when importing06:39
justdaveseems to be only a warning though, it keeps going06:39
stubThe sqlobject subclass needs fixing (sqlobject is setting magic variables, I think because of some join attributes. It needs to be told to use names that don't conflict).06:40
stubYer.. it was spiv. I'd stick it in Bugzilla or check the IRC logs from about 12 hours ago.06:40
justdaveok, looks like it mostly still works...06:46
justdaveit wasn't passing tests, but that appears to be because urllib doesn't follow redirects06:46
justdaveand it was pulling bugs from bugzilla.mozilla.org as part of the test suite06:46
justdavewhich recently started enforcing https :)06:47
justdaveI suppose I should teach it to test for redirects, cuz that might bite us again in the future, too.06:47
justdaveone last error from the test suite that I'm not sure on...06:48
justdave  File "/usr/lib/python2.3/doctest.py", line 790, in rundoc06:48
justdave    for tag, kind, homecls, value in _classify_class_attrs(object):06:48
justdave  File "/usr/lib/python2.3/inspect.py", line 211, in classify_class_attrs06:48
justdave    obj = getattr(cls, name)06:48
justdaveAttributeError: __provides__06:48
justdaveis that the test suite complaining about that labels warning?06:49
justdavethat's the only error it's giving now.06:49
=== daf [daf@muse.19inch.net] has joined #launchpad
justdaveif I want to set a datestamp field to CURRENT_TIME how do I do that in sqlobject to get it to actually run the "CURRENT_TIME" as SQL instead of using it as a string value?07:12
justdaveor does it know that automatically for a timedate field?07:13
lifelessjustdave: look at SourceSource.certify*07:16
lifelessit does that07:16
justdavewhere do I find that?  (found SourceSource, but don't see certify in there)07:18
justdavegrep -rin certify *   comes up empty on lib/canonical07:19
lifelessnot sure..07:20
lifelessits moved a lot :007:20
lifelessyou could try enable as a search instead07:20
lifelessif mark hasn't merged his update07:20
justdaveok, think I found it07:21
stubjustdave: canonical/database/contstants.py07:22
justdaveyep, just assigns 'NOW' to it07:22
justdaveeasy enough :)07:22
stubjustdave: Its important to make sure you store the UTC timestamp07:22
stubjustdave: 'NOW' stores local time.07:23
justdave'NOW AT TIMEZONE UTC' ?07:24
justdavethere's bunches of places in SourceSource that just do 'NOW'07:27
justdave    watches = BugWatch.select(07:27
justdave        "(lastchecked < (current_time - interval 23 hours))")07:27
justdavecurrent_time in there is going to pull local time, too, isn't it?07:28
stubyup. and every one is a bug :-)07:30
stub(although I just set the production database to UTC time so it isn't a major one any more)07:30
justdave For timestamp with time zone, the internally stored value is always in UTC (Universal Coordinated Time, traditionally known as Greenwich Mean Time, GMT). An input value that has an explicit time zone specified is converted to UTC using the appropriate offset for that time zone. If no time zone is stated in the input string, then it is assumed to be in the time zone indicated by the system's timezone parameter, and is converted to UTC07:31
justdave using the offset for the timezone zone.07:31
stubOur columns are timestamp-without-timezone07:31
justdavewas going to say, if they were with timezone, then it probably wouldn't matter07:32
justdavelaunchpad_test=> select timestamp 'now';07:55
justdave         timestamp         07:55
justdave 2004-10-07 01:53:58.9083907:55
justdavelaunchpad_test=> select timestamp 'now' at time zone 'UTC';07:55
justdave           timezone            07:55
justdave 2004-10-06 21:54:21.685953-0407:55
justdavethat's taking 'now' at my local time, pretending it's UTC, and converting it back to my local time.07:56
justdavesomething doesn't look right.07:56
stubMmm... more reason not to futz with timezones ;-)07:57
justdave    watches = BugWatch.select(08:00
justdave        "(lastchecked < (now() - interval '23 hours'))")08:00
justdavethat doesn't return a list I can iterate through?08:00
justdave  File "./check-watches.py", line 36, in main08:00
justdave    for watch in watches:08:00
justdave  File "/home/dave/Source/Warthogs/launchpad/launchpad/lib/sqlobject/main.py", line 1242, in __iter__08:00
justdave    return conn.iterSelect(self)08:00
justdaveAttributeError: 'ConnectionDescriptor' object has no attribute 'iterSelect'08:00
stubLooks like the SQLObject 0.6 upgrade has bitten you08:01
justdavenice. :)  How do I fix it?08:02
stubAre you using initZopeless?08:03
justdavedoh.  that would probably help.  Not even initializing the database connection.08:04
justdaveI'm surprised it didn't crash more spectacularly than that08:04
stubThats lucky - apart from that I don't know about using SQLObject outside of Zope ;)08:05
justdaveok, added the initZopeless and now it works :)08:07
stubjustdave: From a command prompt can you please run 'createland -d launchpad_test plpgsql' and tell me if you get an error?08:13
=== stub is sampling how other developers have their postgresql setup
stubErm .... 'createlang, not createland08:13
justdavedave@ibook [2:14 ~ 2]  tcsh> createlang -d launchpad_test plpgsql08:14
justdavecreatelang: language installation failed: ERROR:  permission denied for language c08:14
stubThats two out of two :-(08:15
=== stub goes back to the drawing board
justdavegah.  bugzilla.gnome.org is running too old a version of bugzilla to have the rdf buglists :(08:49
justdavethat throws a kink in things08:49
stubjustdave: Would it be simpler to upgrade them than work around it?09:26
justdaveI already worked around it :)09:35
justdaveturns out they actually do have rdf buglists in the version they're running, it's just using a different url syntax to get to it.09:37
justdaveso it's making two lookups now, first one to check the version number, second using the appropriate syntax for that version to grab the bug data09:38
justdavewe might want to store that in the BugTracker table...09:39
justdaveI can still poll for it, but it would be pointless to poll for the version number every time I look up a bug...  it won't change that often, so polling that only the first time and remembering from then on (for that day anyway) when looking up other bugs might be nice09:40
justdaveok, caching it in the script now.  class constructor lets me pass in a version, if you pass one it uses it, if you don't, it probes.  If I don't have it cached, I don't pass one, then I cache the one it finds for next time.09:56
=== SteveEgg is now known as SteveA
justdavehmm, urllib sucks.10:04
=== justdave starts using urllib2
justdaveurllib won't tell me if I got a 40410:05
=== debonzi [~debonzi@host217-37-231-28.in-addr.btopenworld.com] has joined #launchpad
=== Kinnison [~dsilvers@host217-37-231-28.in-addr.btopenworld.com] has joined #launchpad
=== BradB|away is now known as BradB
Kinnisonstub: So is it easy to rename a table?10:10
=== elmo_ [~james@host217-37-231-28.in-addr.btopenworld.com] has joined #launchpad
=== lulu [~lu@host217-37-231-28.in-addr.btopenworld.com] has joined #launchpad
=== cprov [~cprov@host217-37-231-28.in-addr.btopenworld.com] has joined #launchpad
sabdfljustdave: once we're up and running, i'm happy for you to spend part of  your time getting the big bugzilla instances into good shape for interoperability with malone10:31
sabdflstub: can we go ahead with that production system update shortly?10:31
lifelesssabdfl: so, how did it all go after I crashed? Is it ready for stub and I to test & move into production ?10:32
sabdfllifeless: yes, i believe so, i need to make sure that i have a version that does eveything i need, then hand it over to you for your own testing10:32
sabdfli still don't know how to test your stuff10:32
stubsabdfl: sure10:33
lifelessbuildbot testing for the sql interface is largely done by make check10:33
lifelessthere are a couple of bits that I still check by hand - by running up the staging instance.10:33
lifelesssabdfl: ok. updating my copy now10:34
cprovsabdfl: nicole had success yesterday, the results you can see in
lifelesssabdfl: do you ahve a version that does what you need at the moment ?10:35
sabdflcprov: that's really awesome!10:37
cprovsabdfl: yep10:38
sabdflstub, spiv, did we get sourceforgeproject and freshmeatproject added to project and product?10:38
dafcprov: nice!10:38
sabdflok, that obviously won't make today's cut then :-)10:38
Kinnisoncprov: any way to make the table in the middle use more space?10:39
Kinnisoncprov: horizontal space that is10:39
stubI don't have the email around either - was it just those two columns? what datatype? what constraints?10:40
cprovKinnison: yes, I'll take note .10:41
=== stub can put it in now - provided the columns allow nulls it shouldn't affect anything
cprovKinnison: you also can navigate from project/product til sourcepackage and see the very low performance in sourcepackage data "fetch information"10:42
=== Kinnison grins
cprovKinnison: btw, you can have the DB dump in to compare the performance, what do you think ?10:47
Kinnisoncprov: performance for what?10:48
justdavesabdfl: ximian will be the big one (if we have anything from them that we need to track?).  they're still running 2.1010:52
justdaveapache is on 2.14.2, and they have hardware problems preventing them from upgrading, supposedly10:52
sabdfljustdave: they've also done a ton of customization i think10:52
justdaveyes, they have10:53
justdaveI just submitted the working check-watches.py script to pqm10:55
justdavecron it at will :)10:55
justdaveit has output currently though10:55
justdave(lists off the bugs as it checks them)10:56
sabdflok, will be useful for debugging10:56
=== justdave is strongly considering going to sleep soon
justdaveok, just got the success message back from pqm11:03
sabdflstub, lifeless: pqm message on the wire with version that works for me11:09
sabdfllifeless: this version is a lot smarter about having different people logging in than what was running previously11:10
sabdflplease can we make sure this code is available only over https, and only with a username and password11:10
sabdfleven though not all pages require a login for zope, elmo, can we enforce this at the front end?11:11
sabdflor do we listen to a unique port without ssl?11:11
elmo_[for the benefit of those not at mark's:]  they're  proxypassed through https, with basic auth11:13
sabdfljustdave: are you running launchpad on your dev box?11:13
sabdflelmo_: thanks, that's good enough for me11:13
justdavesabdfl: yep11:15
sabdfljustdave: if you update to the latest version once my patch is in, you should be able to:11:16
sabdfl(a) create project, and product11:16
sabdfl(b) register a bug tracker for that project11:16
sabdflthat way the bug tracker is associated with the project11:16
justdavecan we associate a bugtracker with products optionally?11:17
justdaveApache Foundation has two bugtrackers, and some of the products are on each11:17
sabdflwe can associate both trackers with the apache project11:18
justdavethat would work11:18
sabdfland in the shortdesc makeit clear which one works11:18
sabdflif the distinction is straightforward, put it in the tracker title, like "Apache Web Projects Bug Tracker" vs "Apache Java Bug Tracker"11:19
sabdflthat's what whill show up in the dropdown listboxen11:19
=== BradB ponders infestation while mering
BradBmerging, even11:21
justdaveThey have both Bugzilla and JIRA, and it's basically the product-manager's preference which to use, so there's no clear line between what type of projects use which tracker.11:22
justdavealthough in general the java-based projects tend to use JIRA (because it's written in Java, and the java zealots all hate perl ;)11:23
Kinnisonstub: renaming tables...11:26
Kinnisonstub: What's the SQL to do it?11:26
stubalter table foo rename to bar;11:26
KinnisonDoes that rejiggle foreign keys etc?11:26
stub'\h alter table' if you want11:27
stubYes - foreign keys are jigged11:27
=== Kinnison writes a big fookoff chunk of SQL to rename sourcepackageupload to sourcepackagepublishing; add buildpublishing and point packagepublishing at the new buildpublishing table
stubprimary key sequence will need some lovin, but I can do that.11:28
KinnisonDo you want new stuff to be 'create table' and then a pile of alter table commands11:28
Kinnisonor do you want a create table with all the contraints etc built in?11:28
stubone create table is fine11:28
stub(and preferred)11:28
=== BradB notes buginfestation has a concatenated PK, shudders
sabdflstub - i'd like the scriptlet that does the table rename also to rename primary_id_seq as well11:32
sabdflBradB: that's a bug, please fix11:32
sabdflBradB: also, i think we may want to get rid of "CodeRelease"11:32
sabdfland have two infestations - one of a sourcepackagerelease and one of a productrelease11:33
BradBI'll have to email the list to be clear here, because Kinnison mentioned having designed tables in the same way. So here goes.11:33
sabdflthis is fairly deep surgery on the glue that binds doap and soyuz, can we discuss?11:33
sabdflKinnison: policy is to give every table an int primary key11:34
sabdflnamed id11:34
sabdflCREATE TABLE Foo (11:34
sabdflid       serial PRIMARY KEY,11:34
Kinnisonsabdfl: then sourcepackageupload fails this policy11:34
sabdflKinnison: quite possibly11:34
sabdfli though't i'd caught all of them before handing over to stub11:34
Kinnisondoesn't seem to be11:35
=== Kinnison ponders the SQL to correct this and will incorporate it into this change I'm writing
sabdflKinnison: let's keep those changes separate11:35
sabdflKinnison: a primary key fix like that requires no approval from me and can go straight in via stub11:36
stubKinnison: There have already been patches to fix those issues. It involves creating a sequence, creating a new 'id' column, setting the default of the new column to be retrieved from the sequence, dropping the existing primary key and recreating the constraint as a unique, creating a unique index for the new primary key11:37
Kinnisonstub: yeah; I've got most of the way now11:37
stubSo just email me the screwed tables so I don't forget and I'll get on it this evening or tomorrow :)11:37
=== Kinnison nods
=== justdave is now known as justdave_zzz
stub(and the update command to populate the new id column...)11:39
sabdflstub, Kinnison, for this one, because its a standard problem with a standard fix, just let stub know which table needs fixing11:40
sabdflrather than let each dev figure out how to fix it11:40
Kinnisonsabdfl: Okay; but it needs to go hand-in-hand with renaming the table11:40
sabdflKinnison: ok, fair nuff11:41
Kinnisonsabdfl: If that's okay; then I'll punt it to stub now11:41
Kinnisonstub: personal mail or launchpad@11:41
sabdfllifeless: test looking ok?11:42
stubnp. When do you need it by?11:42
Kinnisonstub: ideally I could do with it quite soon because I have a bunch of other related changes which we'll need for lucille11:42
stubok - I'll do it after rollout tonight along with your other outstanding (lucilleconfig)11:43
BradBsabdfl: Okay, so source packages can be infested and products can be infested. Let's 1. drop coderelease (unless something else uses it), 2. add an infestation_type column to buginfestation, and 3. make infestation inflate to either a sourcepackage or a product, depending on infestation_type.11:46
stubIs infestationtype necessary? It would be implicit depending on which of the product or the sourcepackage columns is not NULL11:55
BradBThere wouldn't be a column for each of those.11:56
lifelesssabdfl: been waiting for you to say you were finished. 11:58
lifelessare you finished ?11:58
sabdfllifeless said so a while back12:01
sabdflBradB: i'd rather have separate infestations12:03
sabdflpolymorphic tables have bitten us in the past12:03
sabdflwe usually end up undoing them12:03
sabdflso productinfestation12:04
sabdfllifeless: how does it look?12:04
sabdflfor you?12:04
sabdflstub: what do you think of separating the infestations?12:05
stubI'd prefer seperate ones12:05
sabdflok, let me talk through it with bradb here and we'll send a proposal12:06
Kinnisonsabdfl: I have the SQL for the new buildpublishing table and the alters for sourcepackagepublishing and packagepublishing now. Do you want to check them; or should I send them to launchpad@ for you to see there?12:19
sabdflagreed on separate tables, bradb will send stub the sql12:19
stubCan someone send me the product-scraping columns too if they have that email lying around? I think I've nuked it.12:20
lifelesssabdfl: what caused this: 12:20
lifeless    *12:20
lifeless    * Module zope.tales.tales, line 109, in __init__12:20
lifeless      self._next = i.next()12:20
lifeless    * Module canonical.launchpad.database.project, line 53, in bugtrackers12:20
lifeless      for bugtracker in self._bugtrackers:12:20
lifelessAttributeError: 'Project' object has no attribute '_bugtrackers'12:20
lifelessoh bah, new fun12:21
lifeless  File "/home/robertc/source/canonical/buildbot/launchpad/lib/zope/configuration/fields.py", line 197, in fromUnicode12:21
lifeless    raise InvalidToken("%s in %s" % (v, u))12:21
lifelesszope.configuration.xmlconfig.ZopeXMLConfigurationError: File "/home/robertc/source/canonical/buildbot/launchpad/site.zcml", line 5.2-5.3312:21
lifeless    ZopeXMLConfigurationError: File "/home/robertc/source/canonical/buildbot/launchpad/lib/canonical/configure.zcml", line 17.2-17.3612:21
lifeless    ZopeXMLConfigurationError: File "/home/robertc/source/canonical/buildbot/launchpad/lib/canonical/lp/configure.zcml", line 32.2-37.812:21
lifeless    ConfigurationError: ('Invalid value for', 'factory', "Couldn't import canonical.lp.tales, No module named icelso in canonical.lp.tales.RequestAPI")12:21
lifelessmake: *** [run]  Error 112:22
stubTest upgrade of a production mirror worked with no surprises12:22
lifelessthe database ?12:22
lifelessbut not a launchpad instance :[12:23
lifelesscan you copy an upgraded production dump into the 'buttress' postgresql database on chinstrap ?12:24
stubCan I nuke the existing contents?12:24
sabdfllifeless: 'sec12:27
sabdfllifeless: my code has:12:27
sabdfl    _bugtrackers = RelatedJoin('BugTracker', joinColumn='project',12:27
sabdfl                                           otherColumn='bugtracker',12:27
sabdfl                                           intermediateTable='ProjectBugTracker')12:27
sabdfljust above that. do you?12:28
lifelesswhich file ?12:28
spivThere's a bug in SQLObject 0.6 here, I think :(12:28
sabdflin lib/canonical/launchpad/database/project.py12:28
spivIf you add joinMethodName='_bugtrackers' to that RelatedJoin, it should fix it (but doing so shouldn't be necessary)12:28
lifelesssabdfl: yes.12:28
spivI'm trying to find a fix for that atm.12:29
sabdflspiv: it's working fine in my copy12:29
lifelessspiv: on the money honey12:29
spivsabdfl: Have you upgraded your SQLObject since lifeless imported 0.6? :)12:29
lifelessspiv: that'll be the _poTemplatesJoin thing too12:29
sabdflspiv: i believe so12:30
sabdflhow do i check?12:30
spivlifeless: Yeah, I expect so.  And also the two UserWarnings when it starts.12:30
lifelesstla tree-version sourcecode/sqlobject12:30
spivsabdfl: cd sourcecode/sqlobject; tla tree-version12:30
spivOr lifeless's way :)12:30
sabdfli have the following script which runs regularly12:31
lifelesssabdfl: this was an exception, it was an upstream release change.12:31
sabdflcd ~/projects/ubuntu12:31
sabdfltla cat-config configs/canonical.com/launchpad/development | xargs -n 2 tla update -d12:31
sabdflwhy doesn't that pick it up?12:31
lifelesssabdfl: did you update your config as per my email ?12:32
stublifeless: run ~stub/buttress-dump.sql - I don't have postgresql access on chinstrap atm.12:32
sabdfllifeless: i should not have to12:32
sabdflseriously, if a change like that to a piece of code which i *only use*  cannot be done by admins and automatically routed, then it is a bug12:33
lifelesssabdfl: I'll accept that.12:33
lifelessok, traversal problem:12:34
lifeless    *  Module zope.app.traversing.adapters, line 52, in traverse12:34
lifeless      raise NotFoundError(subject, name)12:34
lifeless      __traceback_info__: (<Product at 0x4428072c>, 'sourcesources', [] )12:34
lifelessNotFoundError: (<Product at 0x4428072c>, 'sourcesources')12:34
lifelessis where I went to get that12:34
sabdfllifeless: how do i fix it? can i simply put 0.6 in place of 0.5.1?12:35
sabdfllifeless: does the same thing happen when we update to a more recent vesion of zope?12:35
lifelessfor your dists tree, you just star merge.12:35
lifelessthat will propogate the code to your sqlobject, although it won't change the tree-version, *it will give you 0.6*12:36
lifelessfor zope, we're still in the same branch, because we've been tracking the same line of development.12:36
sabdfli think it's the same bug12:36
sabdflbecause sourcesources is constructed the same way _bugtrackers is12:36
sabdflstar merge from?12:37
lifelesssabdfl: I sent out an email with all this in it. Is it ok if I point you at that ?12:37
sabdflplease fix it so this stuff happens silently from now on.12:37
sabdflwhen we switch to sqlobject 0.7, it should just happen, for everybody12:38
sabdflsame for zope updates12:38
lifelessif we get everyone one raw, I'll guarantee that happily.12:38
lifelesswhat was that demo user again ?12:39
lifelessgot it12:40
lifelesssabdfl: looks good so far, testing buildbot now.12:41
lifeless(this is with those sqlobject bug fixes.)12:42
spivI think I've got a possible fix for the SQLObject bug... just testing.12:45
lifelessspiv:  any thoughts on this:12:49
lifelesspsycopg.ProgrammingError: ERROR:  relation "importersourcesource" does not exist12:49
lifelesssabdfl: around ?12:50
lifelessImporterSourceSource deriving from SourceSource breaks the queries.12:52
sabdfllifeless: sec, i'm updateing to sqlobject 0.612:54
sabdflholy crap there are a lot of patches to dists that i never had12:55
sabdfllifeless: go ahead12:59
lifelessis there any reason you didn't move the methods on SourceSource into the database module?01:00
lifelessbecause thats broken buildbot.01:00
lifelessSQLObject uses the class name in the queries it makes.01:00
sabdfllifeless: there were several different SourceSource classes01:00
lifelessok, there was only one derived from SQLObject though.01:01
spivlifeless: You can set the table name for SQLObject explicitly.01:01
spiv_table = 'SourceSource'01:01
lifelesshappier thanks01:02
lifelesssabdfl: forget it01:02
sabdflin my copy of class SourceSource:01:02
sabdflclass SourceSource(SQLBase):01:02
sabdfl    """SourceSource table"""01:02
sabdfl    implements (ISourceSource)01:02
sabdfl    _table = 'SourceSource'01:02
sabdfl    _columns = [01:02
sabdfl        StringCol('name', dbName='name', notNull=True),01:02
lifelesssabdfl: its all good now, no problem.01:02
sabdfl        StringCol('title', dbName='title', notNull=True),01:02
sabdflwhat was the problem?01:03
lifelessthe derived class needed _table='SourceSource' added01:03
sabdfllifeless: why do you need a derived class? we are getting rid of those01:03
lifelesssabdfl: eventually, I don't, but there was one left half-reorganised.01:03
lifelessI just need it to keep working :)01:04
sabdflwhere, i would rather fix it properly01:04
sabdfllifeless: no, that's what got us into this state01:04
lifelessinfoImporter.py in lib/canonical/arch01:04
sabdflnobody know what depends on what, or where it might be hidden01:04
sabdfllifeless: please move those methods to SourceSource01:05
sabdflbtw - for your "research" list, it might be interesting to look at advanced ways of dealing with code that moves between files01:05
sabdflinfoImporter subclasses SourceSource01:06
sabdflthen reassigns "SourceSource" to be the subclass01:06
lifelessdon't blame me - did not do that crack.01:06
lifelessmoving them to SourceSource now.01:07
sabdflso somene reading code in there might have NO idea that they were not dealing with a SourceSource01:07
lifelessok I'm good.01:12
lifelessI've sent a merge up with what I needed.01:12
sabdfllifeless: ping when you get the success message01:12
lifelessand I'll tag off a new production config after dinner (which is now 2 hours later due to various*, so am starving)01:12
sabdflstub: do you have a fix for the RelatedJoin ?01:13
lifelessoh right, I haven't included the RelatedJoin fixes, I didn't want to conflict with you. 01:13
lifelessThey only affect the front end though.01:13
stubI no nuh-thing!01:14
spivI'm slowly homing in on the Join bug.01:15
spiv(it also affects MultipleJoin)01:15
sabdflsorry, meant spiv :-)01:15
sabdflspiv, is there a workaround i can commit?01:15
spivsabdfl: Set joinMethodName everywhere.01:16
spivi.e. foo = RelatedJoin(...) -> foo = RelatedJoin(..., joinMethodName='foo')01:16
sabdflso MultipleJoin(... joinMethodName=.. ah ok01:16
sabdflthat will only take a few minutes for me to do, but it then makes the code brittle to attribute renaming01:17
sabdflthink you'll have a proper fix shortly?01:17
spivAnother 30min, I think, yeah, there's a surpirsing number of layers of indirection to follow.01:17
sabdflhmm... there are a lot of MultipleJoin's01:18
sabdflof curse01:18
sabdflRelatedJoin is not very common at this point01:18
sabdflbut fixing all of both would take too long01:18
spivI've foundd *something*,, it might not be this bug, but it's certainly a bug ;)01:21
spivOk, I want to hurt somebody now, but at least I have a fix...01:22
BradBAnd the test to show that it works, presumably. ;)01:23
spivBradB: It's called "launchpad" ;)01:23
spivBradB: It should be pretty easy to write a test for.01:24
spivBradB: So easy, in fact, that there's no excuse for it to have not been done yet, so no excuse for it being broken by a stupid mistake.01:24
spivBradB: Yes, I will write a test for it.01:25
BradBspiv: Not everyone using SQLObject uses Launchpad. :)01:25
spiv(Ian actually committed a patch on the off-chance it might fix it, according to the mailing list, without any testing manual or automated!)01:25
spiv(it didn't fix it)01:26
spivOk, andrew.bennetts@canonical.com/sqlobject--joinMethodName-fix--0.6 01:28
spivCurrently it only has the fix, unit test is in the works.01:29
spivThe fix itself is a one-liner, btw:01:29
spiv+    joinMethodName = property(_get_joinMethodName, _set_joinMethodName)01:29
spivIt has failing tests even before I touched it.01:36
lifelesssabdfl: its merged.01:39
lifelessspiv: is that a merge request ?01:39
lifeless(my food is nearly ready... back in ~ 30)01:40
spivlifeless: Yeah, once I've poked at it a little more and am sure it's good .01:41
lifelessjust say wehen01:41
spivI've just committed a test case that passes with the fix, but not without, though.01:41
spivStuff it, I can't see how it can be any worse,, pleas merge :)01:41
spivBradB: want me to generate a patch for you to commit upstream (if you think it's ok)?01:42
=== lulu [~lu@host217-37-231-28.in-addr.btopenworld.com] has joined #launchpad
BradBsure, that'd be good01:44
BradBstub: Can you email launchpad@ declaring the standard way to name unique constraints, and the standard way to name foreign key constraints? I thought I'd borrowed from the way it's currently done in much of the SQL, but I think sabdfl wants something more precise and descriptive.01:46
stubI'm using table_column_key to match the postgres default01:46
stubI usually fix peoples naming when the patches come through ;)01:47
BradBstub: Be lazy and write an email so that you can save yourself work. ;)01:53
=== stub is almost done
stubNaming conventions of course really depend on what mood I'm in (or what mood Mark is in if he decides to overrule me ;) )01:54
BradBwe need a BDBAFL!01:55
stubThe title I tend to use is Database Nazi, so that 'B' might have to go. Me and my 3 month contract is all for the 'FL' though ;)02:00
BradBspiv: The test still fails with your patch (few lines of pasting coming up):02:04
BradBTraceback (most recent call last):02:04
BradB  File "test.py", line 771, in testJoinAttributeWithUnderscores02:04
BradB    self.failUnless(hasattr(ImplicitJoiningSO, 'foo'))02:04
BradB  File "/opt/local/lib/python2.3/unittest.py", line 278, in failUnless02:04
BradB    if not expr: raise self.failureException, msg02:04
stubare we there yet?02:04
spivBradB: Guh?02:05
=== spiv double-checks
BradBI ran them like this: cd SQLObject/tests; python test.py -dpostgres02:05
dilysNew bug 2086 for Launchpad/Launchpad: Melding dbschema and sqlobject would be cool02:06
spivBradB: PYTHONPATH!02:06
spivBradB: I ran it as:02:06
spivPYTHONPATH=. python tests/test.py --database=postgres02:06
spiv(in the root of the sqlobject checkout)02:07
BradByeah yeah :)02:07
BradBi hate myself for that02:07
spivBradB: Thanks for double-checking that the test sfail before my patch, though ;)02:07
=== spiv workraes
spivworkraves, rather.02:08
=== BradB picks up where he left off on submitting the schema changes for infestation
BradBspiv: Wouldn't you think a sane test suite tests the things in its parent directory explicitly?02:13
BradBMaybe I'll patch test.py too, if it seems reasonably to do so.02:14
KinnisonARGH, bloody mailman02:14
KinnisonCan someone with privs on the launchpad list accept the mail I sent to it?02:14
KinnisonAt this rate I'm going to have to add a second subscription02:14
BradBsabdfl: We want to rename these again then, don't we? BugProductInfestation -> BugProductReleaseInfestation, BugPackageInfestation -> BugPackageReleaseInfestation.02:20
sabdflBradB: no, i don't think that's necessary02:22
sabdflsince a bug can only infect code, and the code must be in a release02:22
sabdflcprov: could you check gina into the launchpad archive please, at a place stevea decides?02:38
cprovsabdfl: yes. of course, I'll ask him02:40
sabdflgreat. it's super work, thank you02:40
cprovSteveA: ping02:40
SteveAcprov: lib/canonical/launchpad/gina perhaps02:47
cprovSteveA: maybe,  lib/canonical/launchpad/scripts/ then gina & nicole ?02:48
SteveAthese are scripts?02:48
SteveAnot libraries02:48
cprovSteveA: python standalone scripts02:48
SteveAoh, okay02:49
SteveAok, let's put it where you suggested02:49
cprovSteveA: tks02:49
SteveAwe might move them to ./scripts later02:49
SteveAbut I want to think about that a bit02:49
cprovSteveA: ok now it goes in /lib/canonical/launchpad/scripts :)02:50
BradBstub: Hang on with that SQL for a bit, there might be one column we overlooked.02:51
lifelessstub: ready ?02:59
lifelessall shut down03:00
lifelessbeginning code update03:00
stubDatabase all done03:05
sabdfllifeless: does your version ave a fix for the sqlobject issue?03:09
sabdflSteveA: we need a "scripts" place03:09
lifelesssabdfl: I didn't commit that fix, thought you were going to.03:09
sabdfland the libs should have names approriate to their purpose, even if the script has a fun name03:10
dafsabdfl: we have lib/canonical/rosetta/scripts03:10
SteveAsabdfl: yep, agreed03:10
sabdfllifeless: spiv, i was waiting for the proper fix03:10
dafsabdfl: possibly we should have a lib/canonical/launchpad/scripts03:10
dafsabdfl: (as cprov suggested)03:10
sabdflmaybe "tools" is better than scripts03:10
sabdflwhere would a library go?03:10
dafa library for what?03:11
lifelessspiv: is there a fix ?03:11
sabdflspiv: whats the status on that fix, it breaks a lot of the things i need from this code update03:11
spivFor joinMethodName?03:11
spivlifeless: It's in my branch, and ready to be merged.03:11
lifelessspiv: you were testing it further ...03:11
spivlifeless: BradB has committed it upstream already, I believe.03:11
spivlifeless: Oh, sorry, yes, I'm happy with it now :)03:12
SteveAdaf: we'll put all the scripts in a unified place03:12
spivlifeless: My bad for not notifying you :/03:12
lifelesssabdfl: update your code and that should03:12
sabdfllifeless: ok, i'll need to test everything03:13
BradBspiv: Yep, it's committed upstream.03:14
lifelessstub: do I still need this patch? :03:14
lifeless--- orig/lib/canonical/lp/sql.py03:14
lifeless+++ mod/lib/canonical/lp/sql.py03:14
lifeless@@ -3,6 +3,7 @@03:14
lifeless from zope.app.rdb.interfaces import IZopeConnection, IZopeCursor03:14
lifeless def confirmEncoding(*args,**kw):03:14
lifeless+    return None03:14
lifeless     rdb = zapi.getUtility(IZopeDatabaseAdapter, 'launchpad')03:14
lifeless     dsn = rdb.getDSN()03:15
lifeless     dbname = str(dsn.split('//')[1] )03:15
stubTry it without it - if it works, great. One less bug to sort out :-)03:15
stubkeep it in if it makes things simpler though - we can safely assume that production is running with the correct database encoding ;)03:15
stub(That is the code that makes launchpad refuse to start if the database encoding is incorrect if you remember)03:16
dafstub: what was the problem with it?03:17
stubdaf: For some stupid reason, despite working perfectly on everyones dev environment it didn't on the production launchpad server :-/03:17
dafoh, lovely03:17
BradBstub: I've changed the infestation script: added a few more columns, another table, a couple more constraints and corrected some casing to be more consistent with the SQL that's already being used to build the DB. Should I send a diff of it to the list, or the whole thing?03:19
stubWhat do you mean whole thing?03:20
BradBall the SQL again, or just a diff of the stuff I've just changed.03:20
BradB"all" needed to create the stuff related to infestation.03:20
stubOh... all of your changes in one place if possible.03:20
=== kiko [~kiko@200-206-134-238.async.com.br] has joined #launchpad
BradBI'll just send a second copy of it to the list then, probably easier.03:21
kikomorning lunchpadders03:22
kikohow's the sandwich sprint going?03:23
kikodebonzi, cprov: buenas 03:23
BradBkiko: We "wrap" up tomorrow, eh.03:23
sabdflerk. lifeless, found a bug editing sourcesource if you change archarchive, will fix and commit03:25
sabdfli'll be toast when we're done03:26
lifelessheh :)03:26
sabdflstub: maybe we should have a "proposed changes" dir in db/schema/03:26
sabdflwith scriptlets that are under construction03:27
lifelesswe're good03:27
stubSure. I'm not particularly fussed how they come through.03:27
stubI tend to leave them lying around in database/schema with the extension '.pending' but that might get messy if everyone did it ;)03:27
lifelessheres the first challenge though.03:28
lifelesswe need the apache username @ passwords synced with those inside launchpad03:28
lifelessor I can't edit anything :|03:28
=== lifeless goes to bring importd back to life
stubssh tunnel could get things running, but would suck :-(03:29
lifelessstub: heh, YES.03:29
kikolifeless, have you considered using mod_auth_* to avoid the sync naturally?03:29
lifelesskiko: I didn't setup apache. so haven't considered anything :)03:30
lifelessI simply got to throw peanuts @ elmo @ 5am.03:30
kikowe could just write a mod_auth_perl module or something that connected to the DB and did what we wanted. it's not complicated.03:30
lifelesskiko: well, for /right now/ I'll accept stub adding a person for me, and the same password being given to apache :)03:31
kikoyou hackers03:31
lifelessthank you03:31
=== limi [~limi@212.80-202-72.nextgentel.com] has joined #launchpad
liminetwork is back at least03:32
=== limi is now one tooth less dangerous
limi...only 3 left to go :P03:33
sabdfllimi: welcome back03:34
sabdflless wise?03:34
limiyes, 1/4th03:34
sabdfllifeless: stub: code works for my purposes, pqm message is on the wire with merge for fix to sourcesource editing03:34
limithe scary surgery-requiring stuff comes later03:34
=== limi goes back to Shipit
cprovspiv: ping03:35
lifelesssabdfl: cool.03:37
spivcprov: pong.03:37
lifelessI'll backport it tomorrow morning.03:37
sabdfllifeless: backport? can we not upload this current code?03:37
lifelesssabfl the username thing is somewhat more important.03:38
sabdflit has a few other fixes, like passwords03:38
lifelesssabdfl: we're on a branch., I generally cherry pick specific fixes, so that we don't introduce regressions.03:38
cprovspiv: can you suggest some place to add the NickName.py lib from Brab in LP ?03:39
lifelessfor example there has been at least one other commit in the interim (by celso I think), and I haven't tested that.03:39
spivcprov: Hmm.03:39
sabdfllifeless: ok, then you'll need to ask stevea where to find the password fixes he needs03:39
lifelesssabdfl: I'll bring your entire commit across.03:40
lifelesselmo_ stub so, what do I need to do to get this usercode ?03:41
spivcprov: I think it'd be best to ask Steve; I'm not sure what the best place is.03:41
cprovspiv: aha, He told me the same thing about you one minute ago :)03:42
spivcprov: Drat ;)03:42
cprovspiv: the question is:  You'll use it in FOAF too ? where do you preffer ?03:42
cprovspiv: btw, we need methods inside Person(SQLBase) to createPeople() and createTeam()03:43
cprovspiv: they might be useful for us 03:43
spivcprov: I'd be tempted to put them in canonical.launchpad.nickname, I'm not sure if that's consistent with other stuff in canonical.launchpad.03:44
spivcprov: FOAF is another candidate for the nickname stuff.03:44
cprovspiv: this place (canonical.launchpad) is a very confused today ...03:45
spivcprov: How would Person.createPeople(...) differ from Person(...)?03:45
spivYes, but it's being cleaned up progressively.03:45
spivAvoiding it just because it's messy will lead us back to where we started ;)03:45
kikothe land of rape and honey?03:46
=== spiv -> workrave for 10min
lifelessthere was a importd problem, fieldnames had been changed, fixed now.03:46
cprovspiv: you're right ! in nothing ... so let's use it in FOAF :)03:47
lifelesssabdfl: need me for anything else?03:51
cprovspiv: now I'm creating new Person/Team by Person() ...but I need to fill the notNull name field, so let's say some place to add the Nickname lib so I can continue to create in the same way til we decide the methods, ok?03:51
lifelessstub: we're done other than that person thing.03:52
=== lifeless crashes and burns. night all.
lifelessstub: apache and launchpad have conflicting http credentials.03:53
stubthat one.03:53
lifelessthat one.03:53
sabdflnight lifeless03:53
=== lifeless waves
SteveAspiv: ping03:54
=== carlos [~carlos@69.Red-80-33-181.pooles.rima-tde.net] has joined #launchpad
=== BradB ate too much chocolate
BradBmy brain is as fuzzy as a very fuzzy thing right now03:58
sabdfllifeless: did you branch this morning for that production update?03:59
sabdflstevea wants to know how to point you at the password code that needs to be on the production box?03:59
cprovBradB_Crashed by Launchpad DB :)04:00
kikoBradB, you're *SUCH* a slacker, you'll even try lunchpadding to get off the hook04:00
carlosdaf: did you saw the db changes?, any change?04:00
cprovcarlos: don't be that dificult, we had thousands of them ...lol04:01
spivSteveA: pong.04:02
carloscprov: :-P04:03
dafcarlos: do you mean "have you looked at my patch?"04:04
carlosdaf: yes04:04
carlosdid you saw *my* db changes :-P04:04
cprovcarlos: hehe04:05
dafsorry, no04:05
dafcarlos: https://rosetta.warthogs.hbd.com/rosetta/prefs -- this looks broken04:05
carlosdaf: I fixed it yesterday04:07
carlosdaf: ok, the selector bug?04:07
=== BradB is now known as BradB|Expo
carlosdaf: it's the bug that we have after the Warnings we get from sqlobject04:08
carlosbecause the Joins04:08
carlosdaf: spiv knows about it already04:08
spivcarlos, daf: that's now fixed.04:08
spivUpdate your SQLObject :)04:08
carlosspiv: ok04:08
SteveAspiv: got jabber?04:09
spivSteveA: do now.04:09
dafcarlos: ok, going out -- back later04:09
carlosdaf: later04:10
SteveAspiv: can you ping me on jabber?04:10
=== carlos [~carlos@69.Red-80-33-181.pooles.rima-tde.net] has joined #launchpad
=== carlos [~carlos@69.Red-80-33-181.pooles.rima-tde.net] has joined #launchpad
stubsabdfl, BradB|Expo: BugInfestationType.type -- shouldn't this be BugInfestationType.name ?04:47
stubAnd I assume that column (type or name) is UNIQUE?04:48
SteveAbrad is away04:53
SteveAas with almost everyong04:53
SteveAat the linux expo04:53
=== stub sulks
carlosspiv: could you commit the patch you sent me for sqlos?05:08
spivcarlos: Ok.05:16
carlosspiv: thanks05:16
spiv(I already committed it upstream after all...)05:16
carlosspiv: btw, I have latest sqlobject code and I still have the Join bug05:16
carlosThe warning is not there anymore, but rosetta does not work05:17
spivcarlos: Oh!05:17
=== carlos reactivates postgres log to see the sql sentences
spivcarlos: I wonder if it's still the same bug, or a new one...05:17
carlosno idea05:17
spivI'm guessing it's a different issue, but that's just a gues :)05:18
spivguess, rather.05:18
spivIf you can narrow down where the problem is in rosetta, I'll help figure out what's going wrong.05:18
carlosok, thanks05:19
carlosthe join does not queries for the table rows05:20
carlosWhen you visit rosetta/prefs I get:05:20
carlos2004-10-07 17:19:16 [4916]  LOG:  statement: select p.id, displayname, givenname, familyname,05:20
carlos                password from person as p, emailaddress as e where p.id05:20
carlos                = e.person and e.email='carlos@canonical.com'05:20
carlos2004-10-07 17:19:16 [4916]  LOG:  statement: SELECT name, displayname, givenname, familyname, password, teamowner, teamdescription, karma, karmatimestamp FROM Person WHERE id = 1305:20
carlos2004-10-07 17:19:16 [4916]  LOG:  statement: SELECT Language.id, Language.code, Language.nativename, Language.englishname, Language.pluralforms, Language.pluralexpression FROM Language WHERE  1 = 1 ORDER BY englishname05:20
carloswe have code that ask for PersonLabel table05:21
carlosusing the Joins05:21
carlosspiv: how could I debug it so it could help you?05:21
spivWhere is the code with that join?05:22
carlosinside the Person object05:22
carlos _labelsJoin = RelatedJoin('Label', joinColumn='person',05:23
carlos        otherColumn='label', intermediateTable='PersonLabel')05:23
carlosline  #7105:23
carlosspiv: wait05:25
carlosI think it's not a problem with sqlobject05:25
carlosthe template is completely broken05:25
carloslimi: ?05:26
spivcarlos: Phew ;)05:26
carloslimi: did you changed rosetta-preferences.pt?05:27
carlosit's broken, all the code I had there is gone05:27
carlosso the language selector is not working anymore05:27
stubHas anyone gone over Lalo's patch yet btw?05:27
stubThe initZopeless modifications?05:27
carlosstub: don't know05:30
carlosstub: did he leave already?05:30
SteveAstub: know much about cookie auth in zope2 ?05:31
stubcarlos: He was hanging around for a bit longer and was going to check it in - don't know 05:32
stubSteveA: Way too much05:32
=== stub shudders
=== SteveA jabbers at stub
=== ddaa [~ddaa@nemesis.xlii.org] has joined #launchpad
spivstub: Aside from the docstring of dubious copyright, it looked good to me.05:35
stubCool - I guess it should be committed then and people sort out the fallout of the API change05:39
dilysNew bug 2087 for Launchpad/Database: initZopeless patch05:41
carloswell, at this moment, launchpad is broken so I don't think it will be a problem :-P05:42
carloslots of imports are missing from the new object layout05:42
carlosSteveA: are we free to fix the missing imports we detect?05:43
limicarlos: no, haven't touched Rosetta in ages, unfortunately05:46
carlosarchzoom says that you changed it :-?05:46
carlos2004-10-05 GMT  Canonical.com Patch Queue Manager <pqm@canonical.com>   patch-50105:47
carlosmodified files:05:47
carlos     lib/canonical/launchpad/templates/bug-index.pt05:47
carlos     lib/canonical/launchpad/templates/launchpad.css05:47
carlos     lib/canonical/launchpad/templates/main-template.pt05:47
carlos     lib/canonical/launchpad/templates/plone.css05:47
carlos     lib/canonical/launchpad/templates/portlet-bug-reference.pt05:47
limitwo days ago?05:47
carlos     lib/canonical/launchpad/templates/rosetta-preferences.pt05:47
carlos     lib/canonical/lp/resources.zcml05:47
carlos     lib/canonical/malone/browser.py05:47
carlosseems like you put there a "development" template05:47
limithat's probably an errouneous checkin from a Malone checkin05:48
limifeel free t back it out05:48
=== limi sighs at arch
carloslimi: so the removal of the name and password form was accidental?05:48
limiI'm *this* close to setting up my own local SVN repository for doing work05:48
limiyes, probably05:48
carlosI will restore it now, then05:49
limiI can't remember to have done any of that, but there you go05:49
limiarch moves in mysterious ways05:49
=== limi is in pain, and goes to bed
carlosanyone could help me about the new object layout?06:04
SteveAwhat do you want to know?06:12
SteveAyou are using ctags aren't you?06:12
carlosSteveA: I need to know the policy about the new layout, I think it's a file per object for the interface and for the implementation (inside interfaces and database)06:14
carlosbut I'm not sure06:14
carlosI'm getting errors like:06:15
carlos    *  Module canonical.rosetta.browser, line 403, in selectedLanguages06:15
carlos      return list(self.person.languages())06:15
carlos    * Module canonical.launchpad.database.person, line 77, in languages06:15
carlos      schema = Schema.byName('translation-languages')06:15
carlosNameError: global name 'Schema' is not defined06:15
carlosso I suppose I need to move the "Schema" object from dlalo.py to database/schema.py (and perhaps the same with the interface, not sure if it's already in place)06:16
carlosalso, I don't know where should I put other objects like Languages or Schemas that are not database objects but helper ones06:17
SteveAnot a file per class06:25
SteveAone file per large area of functionality06:25
carlosSteveA: but we have a file for potemplates and another one for pomsgsets06:27
SteveAI don't think we should have that06:27
SteveAwe should probably have one file for po-related stuff06:28
carloscould we get a README file talking about it?06:28
SteveAwe're still working it out06:28
carloslaunchpad is not working at this moment and I need it understand it to help fixing it06:29
SteveAoh, it was working a short time ago06:29
carlossorry "I need it to understand"06:29
carlosSteveA: I think it stop working with latest mark commit06:29
carloshe moved his .py file content into database/06:29
SteveAcircular import?06:30
carlosmissing imports06:30
SteveAoh, ok06:30
SteveAinterfaces should be all imported from canonical.launchpad.interfaces06:30
SteveAdatabase stuff needs to be imported into other database modules from those particular database modules06:31
SteveAbut can be imported into the rest of the application from canonical.launchpad.database06:31
carlosand what happens with objects that are still outside database/ ?06:32
carloslike Schema and Language (they are still inside dlalo.py06:32
SteveAwhere is dlalo.py?06:37
carloswith the other files06:38
SteveAand, dlalo.py is imported into database06:38
carlosit was06:39
carlosI mean, before Mark changes (not sure if the break was before them), it was working06:40
SteveAyou could try the tree before mark's changes, and see if that works06:42
carloshmm, it's not working that version either but because other problem:06:55
carlos    ConfigurationError: ('Invalid value for', 'factory', "Couldn't import canonical.lp.tales, No module named icelso in canonical.lp.tales.RequestAPI")06:55
carlosSteveA: btw, I suppose that the future is to move all d*.py and i*.py files into database and interfaces so I will try to fix it as it's now06:56
SteveAok, yes06:56
=== lulu [~lu@host217-37-231-28.in-addr.btopenworld.com] has left #launchpad []
=== justdave_zzz is now known as justdave
=== elmo_ [~james@george.kkhotels.co.uk] has joined #launchpad
=== kiko [~kiko@200-206-134-238.async.com.br] has joined #launchpad
elmo_spiv: !09:38
spivelmo_: Hmm?09:46
spivelmo_: If you're shocked at the cleartext emailing of passwords, don't be :P09:48
kikoI am09:50
elmo_spiv: I'm not shocked, I'm bitter.  very bitter09:52
spivelmo_: Oh, right.09:52
kikocheeky cheeky jtroup09:59
=== ddaa [~ddaa@nemesis.xlii.org] has joined #launchpad
=== ..[topic/#launchpad:kiko] : lunchpad: home of the sandwich sprinters | fogo na bomba
=== sabdfl [~mark@host217-37-231-28.in-addr.btopenworld.com] has joined #launchpad
=== BradB|Expo [~bradb@host217-37-231-28.in-addr.btopenworld.com] has joined #launchpad
=== SteveA [~steve@host217-37-231-28.in-addr.btopenworld.com] has joined #launchpad
sabdflkiko: fogo na bomba?12:00

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