/srv/irclogs.ubuntu.com/2012/08/02/#launchpad-dev.txt

deryckI'm starting to worry private projects has too much baggage to be any fun working on.02:01
derycksinzui, are you around?02:02
* StevenK stabs staging, the update script says that 11801 is the newest, which is a lie.02:03
wgrantStevenK: staging doesn't have the new Wgrant-Optimized Update Pathâ„¢02:05
StevenK:-(02:05
StevenKwgrant: I'm just impatient, we have seven hours for staging to update.02:06
* StevenK stabs the branch scanner too02:11
wgrantderyck: I think it shouldn't be too bad once you actually cut through requirements, and everyone works out what needs doing. Disclosure has a similar aura around it, but it proves to be reasonably enjoyable while the path remains clear.02:16
wgrantStevenK: Let's see what it's doing..02:17
deryckwgrant, I hope you're right.  I'm worried there's too much overlap between our two squads.02:17
wgrantWe may want to kill the current garbo/karma stuff to speed things along.02:17
wgrantDepending on where it is.02:17
wgrantStevenK: It started updating 4 minutes ago02:18
wgrantStevenK: Should be qa-tagged in maybe an hour.02:18
wgrantderyck: There is a lot. But we're almost out of that area.02:20
wgrantHopefully :)02:20
deryckwgrant, ah, that's encouraging then.02:21
* StevenK stabs the branch scanner again02:22
wgrantStevenK: What's it doing?02:23
StevenKNot scanning ~stevenk/launchpad/bugsubscriptionfilter-itype02:23
wgrantStevenK: It's cursed. You probably can't delete it.02:26
wgrantStevenK: Rename and repush02:26
wgrantStevenK: Did you link a bug manually just after you pushed it?02:26
StevenKYeah02:27
StevenKBleh02:28
StevenKSo you can't link a bug or create an MP or ....02:32
wgrantNot on a Launchpad branch before the initial scan, no02:32
* StevenK blames BranchRevision02:33
wgrantYes.02:33
wgrantStevenK: This scan's not looking good either...02:33
wgrantThere we go02:34
wgrantSuccess02:34
StevenKThe UI hasn't updated yet02:34
wgrantStevenK: I actually meant you should rename the branch on LP, so you could keep a sensible name.02:34
wgrantHas so02:34
wgrantYou're probably just enslaved.02:34
StevenKFInally02:37
StevenKs/I/i/02:37
StevenKwgrant: And I renamed them around02:37
wgrantSo I saw02:37
StevenKwgrant: Do you want the review, or shall I pick on wallyworld_?02:38
wgrantI shall.02:38
wgrantWhile I wait for qastaging to QA for me.02:38
StevenKAh, you have qastaging do your QA for you? That sounds handy, you must tell me how.02:38
wgrantStevenK: Did you consider refactoring _set_{statuses,importances,tags,information_types}? There's a lot of ugly common code there.02:41
wgrantStevenK: 2012-08-02 02:45:49 INFO    2209-26-3 applied just now in 0.2 seconds02:47
StevenKwgrant: I was just pondering how to do that.02:54
StevenKwgrant: And thanks02:54
StevenKwgrant: I'd love to refactor the three _set_ methods. I just can't think of a way to do it.03:03
StevenKHmmm, maybe03:03
* StevenK scribbles some notes to fiddle with after lunch03:04
wgrantStevenK: They all do a very similar thing. They might want to take a class, an attribute name, the current set of values, and the desired set of values.03:04
StevenKwgrant: Yeah, but property() can't do anything with those03:04
StevenKSo _set_statuses will live on as a one line or so wrapper03:05
wgrantSure, that'd be a helper method.03:05
wgrantExactly.03:05
StevenKSince I've got test passing, I'll try my hand at refactoring after lunching03:05
rick_h_lifeless: ping, around?03:27
lifelesshi03:38
rick_h_lifeless: hey, wanted to beg/bribe for a LoC exception for the yui work that's blown up on me a few times.03:39
rick_h_first, fixing the buildout recipe upstream seemed dead since there's no upstream I can find and it's not maintained since 2010: http://pypi.python.org/pypi/plone.recipe.command/03:39
rick_h_lifeless: so in stand up it came up about just doing the unzip work in a python script vs using the unzip dep in the buildout command03:40
rick_h_obviously, adding a python script to do the work is aLoC increase, but the goal of the work is to allow the YUI version feature flag to work and allow easily testing YUI/maintaining the JS state in the build directory03:40
rick_h_so wanted to see if I could convince you better for maintance and hopefully doesn't hang production servers on deploy this time :/03:41
rick_h_not done yet, but start of the idea: https://code.launchpad.net/~rharding/launchpad/yuiv4/+merge/117800 doing in spare time around the private project requirements stuff03:41
lifelesswhats the copytree for ?03:43
rick_h_lifeless: the .zip has test/doc dirs we don't want. We only care for the build dir. so we extract to a build/js/tmp and copytree the build dir to build/js/yui-xxx03:44
lifelesscan't you just pass in the dir you want ?03:45
lifelesshmmm, doesn't let you transform it03:45
lifelesssadface.03:45
rick_h_zipfile will let me extract based on name, but I need to have all the names I want not a single dir adjusted03:45
lifelessok03:45
lifelessrick_h_: so, plone.recipe.command is still buggy here, I'm worried about us using it. It is a booby trap.03:46
rick_h_lifeless: true, I wanted to ditch it but don't see how to get the version into the here from versions.cfg and such directly03:47
lifelessrick_h_: I think the loc overhead is tolerable, but that about 80% of the overhead is because you're calling a process not a function.03:47
lifeless'version into the here' ?03:47
rick_h_lifeless: so yui-default gets the version from versions.cfg, passed into the call to this script via the buildout section03:47
rick_h_my first thought was to use the buildout generation to hard code the yui version into the script when the template is extracted03:48
rick_h_but that only gives me one version, not multiple for the feature flag setting03:48
lifelessversions.cfg talks about python packages03:49
lifelessyui isn't a python package.03:49
lifelessHow is it relevant ?03:49
rick_h_yes, but part of the reason my first idea was turned down was that it didn't respect versions.cfg. There's an entry in versions.cfg for YUI that is used to calc the 'default' yui everyone gets03:49
lifelesswhy?03:50
rick_h_because it's a nice single place to specify the correct version of a dependency? I'm only guessing at the original reasong03:50
rick_h_reasoning that is03:50
rick_h_if it wasn't for that I'd turn the whole thing into a make target and skip buildout entirely, but that versions.cfg traps me into the use03:51
lifelessdon't use versions.cfg03:51
lifelesseasy done.03:51
rick_h_ok, nvm then. I should be able to continue to use unzip from the makefile then, ditch the plone.recipe.command all together, and rework this03:51
lifelessseriously, versions.cfg is for python package versions, its not rich enough to describe '4 versions of a package'03:51
lifelessbecause python doesn't support concurrent loading of one API03:52
rick_h_right, that's why the buildout is set to run yui-default and yui-3.503:52
lifelessso to wedge this into versions.cfg, you'd have to use N different packages03:52
rick_h_lifeless: ok thanks, works for me.03:52
lifelessand do string matching to decide which ones were YUI03:52
lifeless-> thats more than a little horrid03:52
rick_h_well, it appears to populate a var yui_version = ${versions:yui}03:53
rick_h_so it didn't seem quite that dirty, but understand03:53
lifelessI see 'yui = 3.3.0' in versions.cfg03:55
lifelesswhat am I missing ?03:55
rick_h_lifeless: right, the yui-default block in buildout.cfg is getting that via ${versions:yui}03:55
lifelesssure, but this does demonstrates the friction.03:56
rick_h_I don't think you're missing anything, just that we're only using it to describe the 'default' version of the package and using additional buildout.cfg blocks to load the feature flag available versions of YUI for side by side install03:56
lifelessYou're encoding versions in buildout.cfg03:56
lifelessnot in versions.cfg03:56
rick_h_lifeless: correct, lots of friction03:56
rick_h_lifeless: right, ok. I'll rework it in my spare time and make an effort to ditch the plone.recipe.command03:58
rick_h_thanks for the time/chat.03:58
lifelessanytime03:58
lifelesslong term the mythical handling-js system will want this flexability03:58
rick_h_yes, with 3.6.0 released today it's killing me I've not gotten it sorted yet.03:59
StevenKwgrant:  2 files changed, 40 insertions(+), 75 deletions(-)04:07
wgrantStevenK: Excellent.04:10
StevenKwgrant: http://pastebin.ubuntu.com/1124649/04:10
wgrantStevenK: _get_collection, _set_collection, mabe?04:12
wgrantmaybe04:12
StevenKwgrant: _set_collection makes the line 78 lines04:16
StevenKEr, chars04:16
wgrantThat's fine.04:16
StevenKI thought 77 was the limit?04:16
wgrant8004:17
wgrantnow04:17
wgrantOr was it 7904:17
wgrantOne of those two04:18
wgrantCertainly not 7704:18
wgrant/usr/share/pyshared/pocketlint/formatcheck.py:DEFAULT_MAX_LENGTH = 8004:18
wgrantsinzui has spoken.04:18
StevenKwgrant: Right. Do you want to see the new diff?04:20
wgrantStevenK: That would be lovely.04:21
StevenKwgrant: http://pastebin.ubuntu.com/1124660/04:21
wgrantNow it's a little easier to see the differences :)04:23
StevenKwgrant: Shall I push that up?04:27
=== Ursinha` is now known as Ursinha
wgrantStevenK: Might as well.04:29
wgrantLess good is better code.04:29
wgrantEr04:29
wgrantLess code is better code.04:29
StevenKYes, I'm not sure I want to refactor _get_tags() and friends04:29
StevenKI'm tempted to kill the pointless docstrings04:30
StevenKwgrant: Opinion?04:31
wgrantMaybe04:34
StevenKwgrant: Killing the docstrings turns it into +39/-10004:36
* StevenK stabs Firefox05:02
StevenKlifeless: So I'd like to organise an FDT tonight with two patches, 2209-26-{2,3}.05:05
StevenKlifeless: 26-2 updates two tables, BugSubscriptionFilter{Status,Importance} and 26-3 creates a new table.05:06
wgrantMore specifically, 26-2 changes from a serial to a natural primary key05:06
StevenKlifeless: Timing on staging puts both patches applying in 0.5 seconds.05:08
* StevenK sorts out the db-stable deployment report05:14
StevenKwgrant: Do we want a NDT?05:14
StevenKI'd like to make sure I've not broken get_bug_tags() with r15733, but I'm not sure which pages make use of it.05:15
wgrantStevenK: Let's see.05:24
wgrantStevenK: Huh05:26
StevenKwgrant: Hm?05:26
wgrantStevenK: I may have missed something. What do you see as the callsites for it?05:26
wgrantI can only see one, but I'm presumably missing something.05:26
StevenKwgrant: IDistroseries.getUsedBugTags(), IDistribution.getUsedBugTags(), IProduct.getUsedBugTags() at least05:28
StevenKIProductSeries and IProjectGroup too I think05:28
wgrantRight. And what uses those?05:28
wgrantYeah05:29
wgrantThat whole set of methods can just be deleted05:29
wgrantOnly one callsite05:29
wgrant(BugEditView uses it to decide whether a tag is new. But the JS doesn't do it, so the classical form doesn't need to either)05:30
StevenKSo I fixed them for nothing? :-)05:30
wgrantWell05:30
wgrantIt led us to them05:30
wgrantSo now we can destroy them.05:30
StevenKWhich is the callsite I need to preserve?05:31
wgrantThere is only one callsite that I can see, BugEditView.validate05:31
wgrantAnd you don't need to preserve it05:31
StevenKUh?05:33
StevenKlib/lp/registry/model/distributionsourcepackage.py:        return self.distribution.getUsedBugTags()05:33
StevenKlib/lp/registry/model/sourcepackage.py:        return self.distroseries.getUsedBugTags()05:33
wgrantI'm pretty sure those are just delegations05:33
wgrantBut I haven't checked.05:33
StevenKlib/lp/bugs/browser/bug.py:            bugtarget.getUsedBugTags() + bugtarget.official_bug_tags)05:33
wgrant    def getUsedBugTags(self):05:33
wgrant        """See `IBugTarget`."""05:33
wgrant        return self.distribution.getUsedBugTags()05:33
wgrantStevenK: Right, that one is the only real callsite05:34
wgrantAnd it can die05:34
StevenKwgrant: It can?05:35
wgrantLook at what it does.05:35
wgrant(ignoring the XSS hole)05:35
StevenKSo the entire validate method can just die horribly?05:36
wgrantRight05:36
wgrantYou might have noticed the new tag validation on the AJAX widget.05:36
wgrantIt's very fancy.05:36
wgrantSo fancy that it's invisible and 0 bytes in size.05:37
StevenKHahaha05:37
wgrantSince everyone has used the AJAX widget since 2009 and not lamented this warning's absence, I think it can be abolished.05:37
wgrantas a bonus, you get rid of shitty code05:37
wgrantAnd an XSS vulnerability or two05:37
wgrantThere's also a not insignificant volume of tests.05:39
wgrantSo whoever does this gets a nice LOC credit.05:39
lifelessStevenK: got a bazaar.l.n link to those two patches ?05:40
StevenKlifeless: Sure, give me a tick.05:41
wgrantStevenK: :( you stole my patch series05:41
wgranthttp://bazaar.launchpad.net/~launchpad-pqm/launchpad/db-devel/view/head:/database/schema/patch-2209-26-2.sql http://bazaar.launchpad.net/~launchpad-pqm/launchpad/db-devel/view/head:/database/schema/patch-2209-26-3.sql05:41
wgrant2209-26-* was a new series so the BVP stuff was grouped :(05:42
StevenKI didn't steal them, they were freee05:42
wgrantlifeless: ^^ the two patches I linked above05:46
StevenKwgrant: 13 files changed, 5 insertions(+), 150 deletions(-)05:47
lifelessok05:47
wgrantStevenK: You've grepped around for tests?05:47
lifelessStevenK: I'm curious why a new table not an array05:47
wgrantAnd any other orphaned methods?05:47
wgrantlifeless: I suggested a new table, to maintain consistency and share code.05:48
wgrantlifeless: But indeed, all four filters deserve to be arrays05:48
wgrantAnd should probably be migrated that way eventually.05:48
StevenKwgrant: Yeah05:48
StevenKsteven@undermined:~/launchpad/lp-branches/destroy-getusedbugtags% bzr grep getUsedBugTags | grep -v getUsedBugTagsWithOpenCounts | wc -l05:49
StevenK005:49
lifelessStevenK: you have+1 on double-dipping the FDT.05:49
StevenKlifeless: Thanks05:49
StevenKwgrant: So I guess FDT for r1180305:50
wgrantStevenK: You also removed confirm_tag_action?05:50
StevenKNope05:50
wgrantAnd indeed, 11803 is correct05:51
wgrantBut you should remove confirm_tag_action05:51
wgrant    _confirm_new_tags = False05:51
wgrantcan die as well05:51
wgrantAnd render()05:51
wgrantAnd __init__05:51
wgrantAnd part of the template.05:51
wgrants/part/all/05:52
wgrantThat view appears to be nearing its end...05:52
StevenKWhich template?05:53
wgrantThe view's template.05:54
wgrantIt's a form05:54
wgrantExcept for the notifications05:54
wgrantExcept we've removed the notifications05:54
wgrantSo it's a form.05:54
wgrantOh05:55
wgranthm05:55
StevenKSo I drop the template from the ZCML?05:55
wgrantThe action can go away as well05:55
wgrantSince that just makes it a LaunchpadEditFormView05:55
wgrantSo the view ends up with like one method05:55
wgrantRight05:55
wgrantUm05:55
wgrantMaybe05:55
wgrantMay need to use generic-edit-form.pt or whatever it is05:56
wgrant        template="../../app/templates/generic-edit.pt"/>05:56
StevenKwgrant: 15 files changed, 9 insertions(+), 230 deletions(-)05:58
wgrantStevenK: Make sure to set next_url properly06:00
wgrantI'd rename cancel_url to next_url, then set cancel_url = next_url06:00
StevenKAlready done06:00
wgrantSo the view's like 10 lines and uses the generic template now, right?06:01
StevenKwgrant: Hmmm, it is 1206:09
StevenKBugMarkAsDuplicateView had a little surgery too06:10
wgrantStevenK: What'd you do to it?06:12
StevenKwgrant: It had next_url specially due to BugEditView, now that it doesn't require the specialness, it can be pushed up to the base class06:13
wgrantStevenK: Ah, right06:14
wgrantStevenK: However, I've just noticed what may be a fatal flaw in this simplification06:14
wgrantStevenK: They're views on BugTask06:14
wgrantBut they operate on the Bug06:14
wgrantThat's why they're not classical LEFVs, I suppose.06:14
wgrantSo you may need to preserve the custom actions.06:14
StevenKHmmmm, not sure.06:16
StevenKwgrant: 5 failed tests07:06
wgrantStevenK: :(07:06
StevenKA few of them look caused by my overzealous deletion07:08
wgrantNah07:08
wgrantNo such thing as overzealous deletion07:08
StevenKHaha07:08
wgrantIt just means you haven't deleted enough tests07:08
wgrant=> underzealous deletion07:08
adeuringgood morning07:31
dpmhi, could someone help me? I'm trying to build the language packs for 12.04.1, from a script running on a server which calls LP (the getPackageUploads API call) to fetch some translations files. However this seems to fail with a timeout, I've tried a couple of times with the same end result. Here is the log from the script, and the LP response. Perhaps the 'x-lazr-oopsid: OOPS-80db179b422b1ae941c44605effcdaf1' could be helpful in determining what's hap09:00
dpmpening?09:00
dpmAny help will be greatly appreciated, as this is currently blocking the 12.04.1 language pack build09:00
czajkowskiadeuring: wgrant StevenK anyone able to help dpm out09:03
dpmthanks czajkowski09:03
dpmsorry, forgot to paste the log, here it is: http://pastebin.ubuntu.com/1124842/09:04
wgrantThis is probably fallout from cjwatson's work, but let's see...09:04
dpmI'm running the script again, to see if it runs through or if I get another timeout09:06
dpmwgrant, have you had a chance to look at the timeout issue I was mentioning (not sure if you meant you were looking at it, just checking)? ^09:30
wgrantdpm: Oh, I think we got netsplit09:31
wgrant19:10:23 < wgrant> Yeah09:31
wgrant19:10:35 < wgrant> The new PackageUpload security adapter is issuing several queries for every item.09:31
wgrant19:10:36 < wgrant> Um09:31
wgrant19:11:05 < wgrant> dpm: Where's this script?09:31
dpmwgrant, ah, yeah, hadn't seen the ping. So the script is at http://bazaar.launchpad.net/~ubuntu-langpack/langpack-o-matic/main/view/head:/import and the relevant bit that calls the function is at http://bazaar.launchpad.net/~ubuntu-langpack/langpack-o-matic/main/view/head:/lib/static_translations.py#L5809:33
StevenKwebops: Who is my willing vict^W^Wfriendly webop for the FDT in 25 minutes?09:35
StevenKSigh09:35
mthaddonStevenK: I am09:36
wgrantdpm: Ugh, that's pretty awful. Grabbing like 120000 uploads from LP every time.09:47
wgrantLet's see.09:47
dpmouch09:47
wgrantAh, it's actually several times more than that.09:51
dpmwgrant, anything that can be done either in LP or in the script to improve on that and avoid the timeout?09:57
wgrantdpm: Sorry, will get back to you soon, just had a bit of a crisis.10:19
dpmwgrant, no worries, thanks for your help10:19
wgrantjam: re. dpm's issue, I'd like to bump the timeout for DistroSeries:EntryResource:getPackageUploads from 5s back up to 9s, as it was a couple of months back.11:56
wgrantIt'll hopefully be enough.11:57
wgrantJust.11:57
dpmwgrant, I assume that even if the timeout is reverted in LP, it will still take a while for it to land. Is there anything I can do on my side (i.e. on the script), so that I can start building the language packs in the meantime?12:02
wgrantdpm: We can apply the timeout change instaneously.12:04
wgrantOnce I find a TL to approve it.12:04
dpmwgrant, ah, awesome, that'd work best for me then if it's possible12:05
StevenKOh look, there's one.12:16
jamwgrant: it seems a pretty major band-aid, since once he needs another 10% more data it will hit the timeout again, but if it unblocks him for now, then it seems ok in the short term.12:52
jamIs there a way to comment the change so we know who needs the time bump?12:52
wgrantjam: Well, it's batched12:53
wgrantjam: Batches of 40 work atm12:53
wgrantBatches of 75 do not12:53
wgrantAn O(batch size) query count is the problem.12:54
wgrantAnd it's easier to set a feature flag on LP temporarily than hack launchpadlib or the script12:54
jamwgrant: it is batched inside launchpadlib?12:54
wgrantjam: Right, iterating over a collection retrieves it in chunks12:54
jamwgrant: so do we have a decent way to document the decision, so we can revisit it later?12:59
jamor is there at least a bug about DistroSeries:EntryResource:getPackageUploads being O(batch_size) ?13:00
jamif so, it seems fine to bump the timeout13:00
wgrantjam: I'm going to talk to cjwatson about it, but there indeed needs to be a bug.13:01
wgrantjam: We can mention in the feature flag changelog that it's because of this script13:01
* wgrant is filing13:02
wgrantBug #103217613:07
_mup_Bug #1032176: DistroSeries.getPackageUploads timing out due to authorization checking  <api> <regression> <soyuz-core> <timeout> <Launchpad itself:Triaged> < https://launchpad.net/bugs/1032176 >13:07
wgrantjam: So, I propose to add the feature rule 'hard_timeout pageid:DistroSeries:EntryResource:getPackageUploads 120 9000'13:07
jamwgrant: what is the 120?13:08
wgrantjam: The priority13:08
wgrantWe currently have up to 11913:08
wgranthttps://launchpad.net/+feature-rules13:08
jamwgrant: seems fine to me13:08
wgrantjam: Thanks.13:09
wgrantdpm: Care to try the script again?13:15
wgrantThe timeout is up and the method call works for me now13:16
sinzuijcsackett: we are going to hangout with Orange and 16:00. I want their help to solve sharing parts of projects13:19
dpmwgrant, sure, let me start the run, thanks!13:43
dpmrunning now13:43
dpmlast time it stopped after ~10 minutes so I guess if it runs longer than that that'll be some indication that it works13:44
jcsackettsinzui: i assume from the use of 24 hour time you mean UTC?13:44
sinzuijcsackett: yes, sorry for the ambiguity13:44
jcsackettsinzui: no worries. :-)13:44
barryhi folks.  we have a rather urgent problem with a spammer: https://answers.launchpad.net/launchpad/+question/20486214:52
barrycan anyone help us?14:52
czajkowskibarry: sure14:54
czajkowskibarry: done14:55
barryczajkowski: thanks!  i know we'll continue to play whack-a-mole with this person.  this isn't the first time and i'm sure it won't be the last.14:55
barryi don't know why he hates us ;)14:56
czajkowskimeh always one14:56
czajkowskijust file a new answer each time and we can track it14:56
barryczajkowski: thank you14:56
czajkowskinp14:57
=== abentley changed the topic of #launchpad-dev to: http://dev.launchpad.net/ | On call reviewer: - | Firefighting: - | Critical bugs: 4.0*10^2
abentleyadeuring: There's no OCR.  Could you please review https://code.launchpad.net/~abentley/launchpad/better-find-missing-ready-error/+merge/117926 ?15:30
adeuringabentley: sure15:30
adeuringabentley: r=me, minor nitpick15:41
abentleyadeuring: Thanks.15:41
=== jcsackett changed the topic of #launchpad-dev to: http://dev.launchpad.net/ | On call reviewer: jcsackett | Firefighting: - | Critical bugs: 4.0*10^2
jcsackettabentley: apologies for not having set the topic earlier.15:58
abentleyjcsackett: I'm a slacker too.  I was OCR yesterday and today I was still listed in the topic.15:59
jcsackettthe topic is the easiest part to forget. esp if you get in the habit of just checking the activereviews page all the time.15:59
=== almaisan-away is now known as al-maisan
=== al-maisan is now known as almaisan-away
=== deryck is now known as deryck[lunch]
lifelesso/18:30
=== deryck[lunch] is now known as deryck
rick_h_deryck: ping19:57
deryckrick_h_, hi19:57
lifelessderyck: hi, so I can do a call whenever19:57
rick_h_deryck: got a sec to chat before I EOD?19:57
deryckrick_h_, on call, sorry.19:58
rick_h_deryck: np19:58
derycklifeless, sorry, crazy afternoon.  Let's chat next week.  Too much churn right now with what's going on with purple too.21:20
lifelessok21:21
jcsackettirssi21:44
lifelessindeed21:45
* jcsackett just now realizes that the "dead" irssi window he was restarting wasn't dead.22:02
=== jcsackett changed the topic of #launchpad-dev to: http://dev.launchpad.net/ | On call reviewer: - | Firefighting: - | Critical bugs: 4.0*10^2

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