/srv/irclogs.ubuntu.com/2011/12/06/#launchpad-dev.txt

jtvHow do I push a branch to staging again?  It trips me up every time.  "Read-only transport," it says, whether I use lp: or bzr+ssh:02:59
lifelesslp-staging://02:59
lifelessor is it lp://staging/...02:59
lifelessone of them02:59
lifelessif its connecting and then saying read-only, you're not in the team :>02:59
rick_h_jtv: qastaing? or staging? I used bzr push lp://qastaging/~rharding/... for qastaging with success03:04
jtvlifeless: what team?03:04
jtvrick_h_: I suppose I could try qastaging, thanks.03:04
lifelessthe one you are pushing to a branch of03:05
jtvlifeless: I tried lp://staging/, which is what the UI tells me to do, but same error.03:05
lifelessjtv: what was the full url03:05
jtvlifeless: so "read-only transport" from bzr can actually mean that I don't have privileges?03:05
lifelessit means it tried to write and failed03:06
jtvlp://staging/~stellarium/stellarium/auto-po03:06
lifelesseither because its using http or can't write03:06
lifelessjtv: and are you a member of ~stellarium on staging?03:06
jtvNo.03:06
lifelessok, so thats working as expected03:07
jtvExcept for the misleading error message.03:07
lifelessbzr doesn't know the cause for being unable to write03:07
jtvThat's not very comforting to me, is it?  It tells me "read-only transport" when there's nothing wrong with the transport, only with where I'm trying to transport to.03:09
lifelessindeed03:12
lifelessits also exactly what will happen if you push locally to a directory you only have rx bits on03:12
lifelessfor instance03:12
lifelessfeel free to file a bug on bzr/bzr+lp03:13
lifelesshah03:21
lifelessdead code in LP's DB migration system03:22
lifelesswin03:22
wgrantlifeless: Where?03:22
wgrantjtv: Bug #89417703:22
_mup_Bug #894177: run_jobs.py pofile_stats oopses: permission denied for relation productseries <oops> <translations-handoff> <Launchpad itself:Triaged by benji> < https://launchpad.net/bugs/894177 >03:22
jtvwgrant: oh, so what I filed was a dupe.  :(03:22
jtvLooks like the script was converted to a job, and then not tested under realistic access rights.03:23
wgrantYeah. You might want to throw your info into that one.03:23
wgrantYes.03:23
jtvThanks.03:23
wgrantWell.03:23
wgrantIt works fine for distro templates.03:23
wgrantJust not product ones.03:23
wgrantI've tested locally and product+productseries is sufficient.03:23
lifelesswgrant: upgradelog03:24
lifelesswgrant: implemented on non-slony environments only03:25
wgrantI see no upgradelog03:25
lifelessah, its new, not dead03:26
lifelessstub is capturing the sql executed03:26
* lifeless ports03:26
wgrantIs that the thing I reverted over the weekend?03:26
lifelessyes03:26
lifelessbecause it was broken, yes.03:26
lifelessdid it break on qastaging or staging ?03:27
lifelessif it broke on staging, its because the autodetect stuff for it was only on the non-slony case03:28
wgrantbuildbot03:29
lifelessah, interesting03:29
wgranthttps://lpbuildbot.canonical.com/builders/lucid_lp/builds/1617/steps/compile_1/logs/stdio03:30
wgrant  File "upgrade.py", line 645, in get_bzr_details03:30
wgrantValueError: need more than 1 value to unpack03:30
wgrant    branch_nick, revno, revision_id = out.split(' ', 3)03:30
lifelesshmmm, I think I want to chat to sub. And I started early today; so going to EODish. (As in , will be back later)03:33
wgrantkk03:33
micahgit07:09
micahgoops, was going to say that it's weird that I get E-Mails that I've assigned myself a bug faster than a page refresh07:09
lifelessstub: can we have a call in ~ 1 hour about trusted.sql etc and lazr_postgresql ?07:17
stublifeless: sure07:26
stublifeless:  https://code.launchpad.net/~stub/launchpad/db-deploy/+merge/84231  will affect this work btw07:48
bkerensaflacoste: You around?08:10
wgrantbkerensa: Probably not for a few hours yet.08:14
wgrantBut there are lots of LP devs around.08:15
bkerensawgrant: K just looking for someone on the Launchpad team to interview for Dev News about the new Beta Bug Listing Features and other things being worked on08:15
wgrantbkerensa: Most people who have been working on that (and flacoste) are in the Americas, so won't be around for a while.08:16
bkerensawgrant: k ;) I'm in the Americas but I'm also a night owl :P so perhaps I'll catch them tomorrow (I will just idle)08:17
wgrantHeh08:18
adeuringgood morning08:46
frankbangood morning09:00
mrevellHello09:01
bigjoolshas anyone else seen spurious errors in lp.buildmaster.tests.test_builder.TestSlave in ec2?09:07
lifelessbigjools: new bug for you - https://bugs.launchpad.net/txlongpoll/+bug/900579 - I believe its pretty shallow.09:08
_mup_Bug #900579: txlong poll reads any queue <txlongpoll:Triaged> < https://launchpad.net/bugs/900579 >09:08
lifelessbigjools: (it may just be a deployment thing in fact)09:08
lifelessbigjools: https://code.launchpad.net/+longpoll/?uuid=oopses&sequence=1 is a good url to make the impact clear ;)09:08
bigjoolslifeless: yeah, I tend to err on the side of permissions09:08
* lifeless really really goes now09:08
allenaplifeless: Interesting (re. https://code.launchpad.net/~lifeless/storm/bug-618019/+merge/34715). I may borrow that for an experiment. Ta.09:26
wgrantbigjools: huwshimi had one of those yesterday. First I'd seen of it.09:44
=== gmb` is now known as gmb
=== gmb changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: gmb | Critical bugtasks: 3*10^2
* cjwatson bangs his head against bug 71376410:47
_mup_Bug #713764: fake librarian columns cannot be looked up by storm <Launchpad itself:Triaged> < https://launchpad.net/bugs/713764 >10:47
stubHow do I revert a reversion on my branch?10:47
jelmerstub: merge a reversion of the reversion :)10:49
jelmerstub: e.g. "bzr merge -r-5..-4 ."10:49
stubI mean the magic commit message tags - list it as a reversion there?10:49
jelmerah10:49
jelmerstub: I'd add the same tags as in the original commit that landed it [bug=YYYYYY][r=...] etc, and a comment saying it's relanding something that was rolled back10:50
cjwatsonThere must surely be other examples in LP of mock objects wrapping Storm objects that can still manage to be looked up by Storm, but I can't find a pattern that works10:50
cjwatsonMaybe I'll just have to use the full librarian the way everyone else who's run into this seems to have done :-/10:51
StevenKstub: [rollback=<rev>]10:53
StevenKstub: And tag the bug as bad-commit-<rev>10:53
stubThere is no bug10:53
stubSo that step is easy I guess ;)10:53
jelmerStevenK: wouldn't that just be for the rollback itself, rather than the rollback of the rollback?10:54
StevenKI'm guessing stub is rollbacking the commit, so [rollback= is fine10:55
wgrantHe's rollbacking my rollback.10:56
stubThe commit has already been rolled back. I'm rolling back that rollback (reapplying with what hopefully will fix the issue)10:56
wgrantNo [rollback= required.10:56
stubk10:56
stubMy next trick would have been self referential rollback= statements to mess with qa-tagger10:56
wgrantYou're a bad person.10:57
stubqa-tagger is broken. Early Christmas break everyone!10:57
bigjools\o/10:59
* cjwatson tries to understand http://paste.ubuntu.com/761501/11:17
cjwatsonWhat, in general, do I need to do to let my tests get hold of an archive's PublisherConfig?11:17
bigjoolscjwatson: you are running in the wrong layer11:23
bigjoolsyou need zopeless11:23
cjwatsonI thought zopeless didn't give me a librarian11:24
cjwatsonhowever now that I work my way through the class hierarchy I see that's wrong11:25
cjwatsonThanks.  Onto the next failure :-)11:27
=== matsubara-afk is now known as matsubara
rick_h_morning party people11:31
wgrantI really should delete ZopelessLayer at some point.11:32
wgrantSince it doesn't actually do11:32
wgrantmuch different any more.11:32
allenapwgrant: Can you remove all layers please?11:35
wgrantTurning the class hierarchy into a stick is a good way to start :)11:35
allenapwgrant: Me no comprendo.11:36
wgrantIf the layer hierachy is closer to a stick than the complex tree it is now, it becomes easier to deal with .11:36
allenapwgrant: You're being pragmatic again.11:38
wgrant:(11:38
allenapwgrant: One layer less would be a very healthy step.11:39
wgrantWell, crucially, killing of ZopelessLayer also kills off ZopelessDatabaseLayer, LaunchpadZopelessLayer, and ZopelessAppServerLayer.11:39
bigjoolslayers were a hack to have slow-starting fixtures available across tests11:40
bigjoolsI think TestTools is gaining this ability RSN11:40
allenapwgrant, bigjools: I'm sure we could come up with a layer-like wrapper around testresources. I experimented with something similar once before.11:41
jmlyay death to zopeless layer!12:44
rick_h_gmb: you still around for a review?12:50
gmbrick_h_: Sure12:50
rick_h_gmb: https://code.launchpad.net/~rharding/launchpad/inline_editor/+merge/8452812:50
rick_h_gmb: thanks12:50
gmbWoah12:50
gmbrick_h_: That's 1899 lines of diff12:50
rick_h_well mostly -12:51
rick_h_gmb: yea sorry, ripped out a lot12:51
gmbrick_h_: Our usual per-branch limit is 800. I won't be able to review that in the time I have left online today.12:51
gmbrick_h_: You'd be better off talking to someone on your squad to see if they have the time to take a look at that.12:52
rick_h_gmb: cool, thanks12:52
gmbNp12:52
=== almaisan-away is now known as al-maisan
=== al-maisan is now known as almaisan-away
=== almaisan-away is now known as al-maisan
DavieyIn regards to package set ACL access, is it viable to add a 3rd type, to help with package to team bug triaging?13:58
* Daviey asks to see if it is worth raising a bug.13:58
=== jam1 is now known as jam
=== gmb changed the topic of #launchpad-dev to: https://dev.launchpad.net/ | On call reviewer: - | Critical bugtasks: 3*10^2
deryckabentley, ping for standup.14:32
abentleyadeuring: bug 89483614:35
_mup_Bug #894836: Wrong order-by widget is highlighted when the page has loaded a previously select preference <bug-columns> <Launchpad itself:Triaged> < https://launchpad.net/bugs/894836 >14:35
=== matsubara is now known as matsubara-lunch
cjwatsonAnyone fancy reviewing https://code.launchpad.net/~cjwatson/launchpad/refactor-cron-germinate/+merge/84624 ?15:03
jtvcjwatson: it's too late for me right now, but please tell me that's your massive speedup branch!15:08
cjwatsonIt is15:10
cjwatsonNot that I've actually run it in situ yet to demonstrate speedup, merely a stripped-down version on my laptop15:10
jtvAgonizing.  Human intuition is notoriously unreliable for these things.  Looking forward to seeing the real-world difference!15:11
cjwatsonIndeed.  I can't really tell for absolute sure without a full Soyuz instance, which is likely to be a bit much for anything I have locally :-)15:12
cjwatsonBut I'm reasonably confident.15:12
cjwatsonThere's a factor of three in the right direction between the old version on cocoplum and the stripped-down version on my laptop.  I don't think all of that can be overhead, and if my laptop is that much faster than cocoplum we're all in trouble. :-)15:13
jtvWe should all have laptops as fast as cocoplum!15:15
cjwatsonI might try syncing over Packages and Sources to mawson and running the stripped-down version there, or something15:16
cjwatsonOr even as an unprivileged user on cocoplum at a quiet time in the hour15:16
jtvNot a job for dogfood?15:17
cjwatsonYeah, mawson's probably better for it15:17
cjwatsonAs long as I do a control run with current Packages/Sources first15:17
cjwatsonThe control run I did yesterday took six minutes and produced output considerably smaller than current production, so I don't think it's a good comparator15:18
cjwatson(comparand?)15:18
jtvThe latter, I suspect.15:18
jtvBut it's not my language.  :)15:18
bigjoolsjtv: you don't get off that easily, you speak it better than the average teenager15:28
jelmer... and somehow manage to speak it without the annoying Dutch accent15:33
=== matsubara-lunch is now known as matsubara
=== al-maisan is now known as almaisan-away
=== deryck is now known as deryck[lunch]
=== salgado is now known as salgado-lunch
cjwatsonbigjools: perhaps this is premature, but at some point when you have a chance, I'd like to chat about the next stage in improving how germination is done: I'd like to move it before apt-ftparchive, so that we get rid of hysteresis and avoid the occasional need for manual action when seeds change17:12
bigjoolscjwatson: sounds good17:12
cjwatsonand I'd like to make sure I understand how to slot that into the publisher properly17:12
bigjoolsis there a publisher hook for that stage?  I can't remember17:12
cjwatsonI think it would go in between B and C - there's no hook there at this point17:12
bigjoolsok, easy to add17:13
cjwatsonyou think it ought to be a hook?  It'll need to talk to the DB17:13
cjwatsonso presumably can't just be the out-of-process kind of thing that distro-parts is17:13
bigjoolswell germination is an Ubuntu thing - at least nothing else needs it but perhaps it might in the future17:13
cjwatsonagreed17:14
cjwatsonsome kind of in-process hook then17:14
bigjoolsthere's no reason why it can't be a run-parts that access the DB17:14
cjwatsonoh - yeah, of course, duh, my generate-extra-overrides is exactly such a thing17:14
* cjwatson <- idiot17:15
bigjoolsit's the soyuz effect, roll with it :)17:15
cjwatsonI'd like to have it mark pockets dirty when seed output changes, too; I guess there's no reason a hook couldn't do that as wewll17:15
cjwatson*well17:15
bigjoolshmmm yes, that could be quite useful17:15
cjwatsonthen no more having to keep the odd universe package in a queue around release time just in case we need to change seeds in a hurry, whee17:16
cjwatsonpre-index.d sound OK as a name?  (strawman)17:18
bigjoolsyup17:18
cjwatsonthen I get to find out whether I got the germinate API for this right ...17:19
cjwatsonthere's a method that's supposed to yield a sequence of (enum, {header: value, ...})17:20
cjwatsonso I think I do dict(.buildIndexStanzaFields) on every PUBLISHED [SB]PPH and feed that in17:22
cjwatsonwhat I don't know is whether doing that extra [SB]PPH query (basically the same as those in _writeComponentIndexes) will be significantly slower than having germinate read and parse Packages/Sources; do we have numbers on how long the _writeComponentIndexes queries take on something Ubuntu-sized?  I know we aren't using that mode in Ubuntu at the moment17:25
bigjoolscjwatson: I suspect that reading from the DB is always going to be quicker than parsing a file17:35
cjwatsonbigjools: oh good17:37
bigjoolscjwatson: we used _writeComponentIndexes stuff on Ubuntu on dogfood once just to see what it did and it was comparable to running a-f in fact.  I'm sure we can optimise it some more.17:39
bigjoolsthe slow part of using a-f is writing its input files...17:39
cjwatsonit would get a bit slower if it were made fully-compatible - for instance it'd have to read extra override files17:40
cjwatson(or we'd have to stuff them into the db)17:40
bigjoolsyeah17:40
bigjoolswell I want those in the DB17:40
bigjoolsI want everything in the DB17:40
bigjoolsthen other parts of LP can benefit17:40
cjwatson*cough* https://launchpad.canonical.com/ExtraPackageOverrides17:41
bigjoolsyeah :)17:42
cjwatsoncomparable to running a-f> germinate parsing those files takes seconds, so it needs to be in that ballpark17:44
bigjoolswell I am talking overall publisher speed17:45
bigjoolsright, EOD for me, good night all17:48
=== deryck[lunch] is now known as deryck
bigjoolshmm the update manager could do with a "shutdown after installing" option17:49
=== salgado-lunch is now known as salgado
abentleyderyck: There's no OCR.  Could you review https://code.launchpad.net/~abentley/launchpad/fix-spinner-bugs/+merge/84633 please?18:13
deryckabentley, sure18:14
abentleyderyck: thanks.18:15
deryckabentley, I don't know if I understand fetch_only.18:21
deryckabentley, does that mean, "we're doing XHR only" or "we're only changing out lists" or something else?18:21
abentleyderyck: it means fetch the data, but don't render it.18:22
deryckabentley, ah ok. so we're still showing the spinner regardless of if the list is loaded from cache or XHR?18:22
abentleyderyck: technically yes, but when the list is loaded from the cache, the spinner is hidden again so quickly that you don't see it.18:24
deryckabentley, right, that's fine.18:24
rick_h_abentley: the main reason we added it so that the re-scroll to top would take effect if the data came from cache/not18:24
rick_h_does that still take place?18:24
abentleyrick_h_: I expect it does.18:25
rick_h_abentley: ok cool18:25
rick_h_ic, the .success is always called, but the spinner might not have been visible. So we basically reassert it's hidden and run scroll to top18:26
abentleyrick_h_: success is only called if the event succeeded, and only if we were loading the batch in order to display it.18:27
deryckabentley, r=me.18:27
abentleyderyck: thanks.18:28
rick_h_benji: howdy, api question for you if you've got a sec18:56
benjirick_h_: shoot18:56
rick_h_so I'm looking at bug: https://bugs.launchpad.net/launchpad/+bug/80895218:57
_mup_Bug #808952: NoCanonicalUrl using api to fetch bug comments <api> <oops> <Launchpad itself:Triaged by rharding> < https://launchpad.net/bugs/808952 >18:57
rick_h_and went checking out how the canonical url data stuff works18:57
rick_h_and it seems the url generated in this oops was /1.0/ubuntu/+source/b...18:57
rick_h_which fails, but if you /version/1.0 it works18:57
rick_h_or take out the 1.0 completely18:57
rick_h_so it seems to be something more in launchpadlib generating the urls?18:58
rick_h_benji: oh sorry, I messed up. The "response" is a 404 when you take off the 1.0. I didn't realize that.19:17
benjirick_h_: I'm glad you figured it out -- because I had gone to other things while you wrote and then forgot you had asked :(19:19
rick_h_well, nothing figured out as far as the original issue, but at least I misunderstood it and got past that19:19
* benji wonders if he's the only one that needs people to mention his name to remember that they're talking to him.19:19
rick_h_benji: no, I'm supposed to be working on that19:20
rick_h_benji: updating irc habits along with other things19:20
benjirick_h_: in that case let me check your question and see if I can suggest anything19:20
rick_h_benji: basically something is up with the api talking to/about comment #11 on that bug19:21
rick_h_benji: if I loop through all comments using the api it works, but if you try to link directly through the api to comment 11 it fails.19:21
rick_h_benji: https://bugs.launchpad.net/ubuntu/+source/banshee/+bug/805938/comments/11 works though19:21
_mup_Bug #805938: Totem set as default music player after install instead of Banshee <apport-bug> <i386> <iso-testing> <oneiric> <patch> <running-unity> <unity-2d> <unity:Fix Released> <banshee (Ubuntu):Invalid> <desktop-file-utils (Ubuntu):Fix Released> <unity (Ubuntu):Fix Released by canonical-dx-team> <banshee (Ubuntu Oneiric):Invalid> <desktop-file-utils (Ubuntu Oneiric):Fix Released> <unity (Ubuntu Oneiric):Fix Released by canonical-dx-team> <19:21
benjirick_h_: I don't remember exactly how the URL generation is divvied up between LP and lazr.restful, but lazr.restful isn't very big and that's where I'd look first19:22
rick_h_benji: ok cool. Will head there. I've been chasing the ICanonicalDataURL stuff in LP up until now19:22
lifelessstatik: flacoste: just confirming we have a call in 70 minutes? (e.g. did the calendar work...)19:23
flacostelifeless: yes19:24
flacostelifeless: 66 minutes actually :-)19:24
lifelessclickety click19:24
abentleyderyck: I'm looking at bug 892211 and I can see the problem: updateFieldVisibilty is calling _extraRenderUI(), which is calling updateFromCookie.  Can we talk about solutions?20:43
_mup_Bug #892211: reset to default in bug listing visibility widget doesn't work <bug-columns> <Launchpad itself:Triaged> < https://launchpad.net/bugs/892211 >20:43
bachi flacoste -- can we decide on the lplib recipe and get it done?20:46
flacostebac: on the phone, will ping you when i'm done20:48
bacflacoste: perfect20:48
deryckabentley, I'm not available today. cast about for someone else, or I can chat with you about it tomorrow.20:57
abentleyderyck: okay.20:57
sinzuiWe have a branch that hardens teams to such a degree, that to write a test that logs in as the teamowner, you must first login as an admin20:58
sinzuiI think I will take a 30 minute break to ponder the irony20:58
lifelessbac: out of tree is best here21:09
lifelessbac: leverage (ha hate that phrase) the ubuntu packaging21:09
flacostebac: besides what lifeless is saying21:09
flacostewhat other open issues remains?21:09
flacostegiven jelmer pointers, i agree that having the debian tree separate is best21:10
bacflacoste: where to put it. ~launchpad vs ~lazr-developers21:10
flacostei think ~launchpad is better21:10
flacoste~lazr-developers is hysterical raisins to me21:10
lifelessbranch ownership?21:10
lifelessIts in the wiki21:10
lifelesssee dev.launchpad.net/CreatingNewProjects21:10
baclifeless: recipe ownership21:11
lifeless(tl;dr: ~canonical-launchpad-branches)21:11
lifelessLP is in that team, but so are other canonical folk like ex-launchpadders who may help maintain it if they have access21:11
flacostelifeless: any reasons that we kept "or '~lazr-developers'." on that page?21:11
lifelessflacoste: wanted it to be consistent with current ownerships21:12
lifelessflacoste: no deeper reason21:12
flacosteok, i'd prefer if we don't extend the set of things owner by that team though21:12
lifelessflacoste: happy for us to remove if21:12
lifelessediting now21:12
flacostethx21:12
flacostebac: so the recipe could be owned by ~canonical-launchpad-branches also then21:13
flacosteand i would put this in a ppa on the launchpad team21:13
bacflacoste: ok, i'll do that21:13
flacostebac: thanks!21:13
baclifeless: can you expand your thought on, ahem, leveraging the ubuntu packaging?  are you saying we don't need the packaging branch i created?21:14
lifelessshould be able to use the nest command to grab just the debian dir directly from ubuntu21:14
lifelessyou may need a packaging branch if we need to diverge21:15
baclifeless: but i'd like for us to be able to update the changelog, thus the branch21:15
lifelesshmm, just realised. ~canonical-launchpad-branches may be an issue because of the insane notifications we do. Do we notify recipe owners always?21:15
lifelessIf so, then ~launchpad will be needed, even if its conceptually wrong.21:15
lifelessbac: auto build recipes don't bother with that21:16
lifelessbac: that said, it is up to you, I don't have a strong recommendation.21:16
baclifeless: they do get the debupstream version from the changelog21:16
lifelessyes, but every build starts fresh from the branches21:17
=== salgado is now known as salgado-afk
lifelessbac: ah, I think you mean 'I want the package major version to match our releases, not the latest version in Ubuntu'21:18
baclifeless: yes, for the PPA21:18
lifelessbac:  you can do that three ways = custom packaging branch; just set it in the recipe rather than using debupstream; make sure we release into Ubuntu very quickly.21:18
lifelessbac: the easiest is just to set it in the recipe instead of using debupstream21:18
baclifeless: as seen here: https://launchpad.net/~bac/+archive/ppa21:18
pooliehi all21:23
benjianyone fancy a quick review? https://code.launchpad.net/~benji/launchpad/bug-894177-2/+merge/8467621:24
poolieo/ benji21:26
benjipoolie: thanks21:26
poolieIt looks plausible to me but you probably want another review from someone more experienced.21:27
benjipoolie: thanks21:29
lifelessbenji: there is a context manager for switching db user21:49
lifelessbenji: it might be nicer21:49
benjilifeless: ooh, indeed it would; thanks21:50
benjibac: absolutely, I'm now a card-carying QA instructionist21:51
lifelessheh, 3 reviews :P21:51
* benji looses 10 cross-channel discussion points.21:51
lifelessI missed that bac had21:52
baclifeless: sorry, i failed to claim it.21:52
benjilifeless: I now feel very good about my MP, thanks ;)21:52
lifelessbac: no worries21:52
baclifeless: but it's good as you added the cm bit21:52
bacteamwork21:53
bacredundancy21:53
cjwatsonHmm.  My stripped-down version of lp:~cjwatson/launchpad/refactor-cron-germinate noddy-benchmarks at about twice the speed of the current implementation, for identical output; but I think I've got something wrong that means that it isn't extracting all the benefit it could22:02
* cjwatson wasn't expecting that22:03
lifelesscjwatson: nice22:03

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