[00:38] morning [00:38] hiya [01:02] hi. is there something out there that "plugs in" to something like loggerhead to administer repos/branches/users and whatnot? [01:05] codebrainz: not that I know of [01:05] it might be nice though! perhaps you could file a bug on loggerhead asking for that [01:05] poolie: got a minute for a chat ? [01:05] is loggerhead in python? [01:05] yes [01:05] launchpad.net/loggerhead [01:06] maybe I'll work on a patch [01:06] that would be awesome [01:06] hi there lifeless [01:06] sure [01:14] i think there is already a bug asking for more 'write access' type stuff in loggerhead [01:14] hello [01:15] have any of you previously used git or hg? [01:23] I'm pretty sure everyone here would have tried both [01:24] whysat? [01:25] steven_t: do you have a deeper question trying to get out? [01:25] no. [01:26] ive never learned a vcs before. i want to learn one but want my knowledge to be applicable and useful and relevant for years to come. researching which one to learn :) [01:26] so far git is the winner, because its so modularized and widely supported [01:26] I think they're all very good, myself [01:26] bzr and hg are supposed to be easier to learn, bzr in particular tries to be user friendly [01:27] modularized?! [01:27] steven_t: have you used other vcs's before, like rcs or cvs or svn? [01:28] none. [01:28] the choice in part also depends on whether you're going to be casual or heavy user [01:28] are you familiar with diff and patch? [01:29] no [01:29] i want to become a heavy user, im a coder and plan to be a professional [01:30] what sort of coding and how long have you been coding? [01:30] well technically im already a professional, but what im learning in my spare time is more unixy than my dayjob (cocoa) [01:30] to answer your question: http://blog.degutis.org/post/651422590/i-think-im-a-little-crazy [01:30] git is excessively complex, and rather arcane, IMO. I'd favour bzr or hg, especially if you're without previous VCS knowledge [01:31] what maxb said. [01:31] although without the 'excessively' [01:33] nice read; either bzr or hg would be fine for you [01:33] I'd also consider a code completing editor, although good fast typing skill is always valuable :-) [01:35] django use svn, so you might want to try that first; sometimes the best thing to try is what the people who you work with use [01:35] do you just use one machine mostly? [01:41] poolie: thanks :) [02:39] lifeless: I'm curious as to why pqm is failing. Does it try building the docs via the Makefile? Are there logs I can look at? [02:41] igc: yes, it builds the docs - we check they build on every commit, just like code [02:41] [which is another reason I want all the docs in the one tree, but thats a different discussion] [02:42] igc: its building in a very small chroot, that only has default packages + what we've specifically asked for. We haven't asked for any sphinx stuff, and I don't know what ones to ask for. [02:43] lifeless: we need python-sphinx [02:43] is that the entirety ? [02:43] lifeless: 0.6 or later [02:43] lifeless: I believe so [02:43] hah [02:43] so we're still on hardy [02:43] it has < 0.5.2 [02:43] sorry, <= 0.5.2 [02:43] lifeless: building the PDFs are messier though - LaTeX toolchain [02:44] lifeless: it *may* work there (in terms of building something) [02:44] I'm loathe to disable checking the docs on commit [02:44] i.e. 0.5.2 may be ok [02:44] we've caught doc syntax errors that way [02:45] I'll file an rt [02:45] and we can see what happens. [02:45] lifeless: I agree - let's keep the doc build step as a check [02:46] lifeless, poolie: was there a consensus on https://code.edge.launchpad.net/~ian-clatworthy/bzr/cmds-in-userref-585667/+merge/26004 ? [02:47] igc if it doesn't break the import tests it's ok with me [02:47] igc: I'd be happiest with just calling the register method from the doc generators [02:47] igc: because they are essentially mini front ends, its appropriate that they do that [02:48] igc: this isn't in conflict with poolies comments [02:50] poolie: test_import_tariff passes with my fix fwiw [02:50] then it's ok with me [02:50] its not with me [02:51] if someone later wants to tighten it up while keeping both your test and the import tariffs passing they can [02:51] it will undo work done for commandant [02:51] lifeless: how? [02:52] lifeless: it only uses the builtins if none are already registered afaict [02:52] igc: right, so if none are registered you'll show the bzr specific ones [02:52] lifeless: yes [02:52] which is wrong [02:52] if none are registered, none are registered [02:53] I appreciate that there is a little bit of code tension here, because we have generic and bzr specific stuff in the same module. [02:53] but I really do think its worth having a clear separation [02:54] mm, this code is not super generic at the moment anyhow [02:55] poolie: its used as a generic core by commandant, by lptools, and possibly others [02:56] I thought commandant reimplemented it? [02:56] as jkakar wanted more facilities he decided to layer on us [02:56] I reworked things to make that possible [02:56] Ah ok. [02:57] he has a patch to further reduce stuff in commandant, but that got push back [02:57] and it outside of the commands.py core anyhow, it was about reuseing the cmd_help object and the like [02:57] s/it/is/ [02:58] igc: poolie: What would convince you to keep the query/setting code paths separate? It seems obvious to me that that is desirable, and I'm not sure how to convince you. [02:59] igc: poolie: Its roughly 30 seconds work to add a call to the set function from the doc generator code, so its clearly not about the effort involved :) [02:59] lifeless, i'm pretty sure i made the change that ian's correcting here, not jamu [02:59] poolie: I'm pretty sure I made it [02:59] ah [02:59] lifeless: we don't know how many clients are broken by the change [02:59] poolie: but lets look deeper [03:00] ok [03:00] lifeless: at least the doc generators are broken - they are easily fixed [03:00] poolie: I think you're right, the doc generators already call install_bzr_command_hooks [03:01] ok, land it. [03:01] my complaint is rescinded [03:01] sorry for the noise [03:02] lifeless: I'm not sure the doc generators call install_bzr_command_hooks btw [03:02] igc: see generate_docs.py [03:02] igc: that is the front end, isn't it ? [03:02] lifeless: yep - it is [03:03] igc: it appears to call it [03:03] igc: please do correct me if I'm wrong [03:03] lifeless: you're correct - my mistake [03:05] lifeless: i was looking in the layer below last week (bzrlib/doc_generate) [03:05] so install_bzr_command_hooks is the thing that should be called to make bzr commands visible [03:05] it installes _get_bzr_command [03:05] and _list_bzr_commands [03:06] and if its not enough, then there is a bug [03:06] which is why I've retracted my objection: I was misremembering the function name I needed to care in detail about [03:08] \o/ 247 emails unread, down from 1400 this morning (UDS and moving backlog finally getting under control) [03:08] * igc lunch - bbl [03:53] EODing - started at 6 [06:01] hi [06:01] igc: still here? [06:02] hi bialix! [06:02] hi igc! [06:02] I have a question about bzr-exlorer project [06:02] there is separate documentation for it [06:02] where is the branch? [06:02] bialix: lp:bzr-explorer-website [06:03] igc: I think it's worth to change ownership of this project to bzr-explorer-dev or something similar. what do you think? [06:04] bialix: +1 [06:04] * igc looks [06:04] who is in charge to upload these docs to bazaar site? [06:05] igc: ^ [06:05] bialix: it's done automatically by a cron job ... [06:05] ? [06:06] directly from your branch? [06:06] just make the changes to bzr-explorer-website and it will appear within an hour typically [06:06] from trunk, yes [06:08] so so, branch ownership should be changed to explorer-devs too [06:09] igc: anything other I should be aware of? [06:09] bialix: maybe the bzr-docs team ought to be the maintainer of bzr-explorer-website? [06:09] maybe, I dunno [06:10] igc: there is no bzr-docs team on lp [06:10] ~bzr-doc is [06:11] I'm ok with ~bzr-doc as owner [06:12] igc: when your vacation starts? [06:13] bialix: I'm around this week and next [06:13] bialix: till the 9/Jun at least [06:14] ok [06:15] * bialix has no more questions so far [06:15] thanks igc! [06:17] bialix: fyi, most of the other bzr doc projects are maintained by Bazaar Developers (~bzr) [06:17] bialix: that's a restricted team [06:17] which I'm thinking the owner of bzr-explorer-website ought to be [06:17] otherwise, anyone can "join-up" and spam the site [06:18] bialix: ^^^ [06:19] bialix: is switching ownership to ~bzr ok by you? [06:19] (i.e. ownership of bzr-explorer-website) [06:20] mmm, yes [06:20] but *I* am not memebr of ~bzr [06:20] need to join (again) [06:20] bialix: yes, I just noticed that [06:20] I will do [06:21] bialix: cool (and thanks) [06:23] :-) [06:24] Shucks, after all that time keeping ~bzr bialix-free... [06:24] today is holiday? [06:24] fullermd: yep :-( [06:24] * bialix waves on fullermd [06:25] * igc waves to fullermd too! [06:25] * beuno waves at igc [06:25] hi beuno! [06:25] * fullermd gets a little seasick from all the waving. [06:25] more waves for you: ~~~~~ [06:26] Oooh... urrrg... blech. This must be how Windows developers feel all the time :( [06:28] rotfl [06:28] not really [06:32] bialix: ok - bzr-explorer-website now maintained by ~bzr and trunk moved accordingly [06:32] igc: thanks [06:38] I am getting these gc warning while running some tests. http://pastebin.com/00H7XCn0 ... is this something that I should be worried about? [06:40] this is the test producing the warnings .. http://pastebin.com/KhTkcnV1 [06:44] parthm: yes, that's worth worrying about [06:44] It indicates that some objects have been locked but not unlocked. [06:45] Which is usually a relatively minor issue, but it should be easy to correct (and if it isn't then it suggests a deeper problem) [06:45] spiv: so could this be an issue in test or the code? [06:46] In this case there's nothing in your test method directly that is locking the tree, so I would suspect the code is at fault. [06:46] by test i mean test case. and code is feature. [06:46] spiv: ok. thanks. will check code. [06:50] poolie: thanks! [06:50] hey spiv [06:51] Hey bialix [06:52] is 'self.add_cleanup(tree.lock_read().unlock)' the recommended way now as against try/finally? .. i think the gc issue was due to unlock not being in finally for cmd_ignore. [06:53] i am wondering if i should add_cleanup or try/finally. [06:53] add_cleanup [06:53] There should be something in the dev docs about that [06:54] spiv: ok cool. that was the problem. i will add_cleanup to cmd_ignore. [06:54] spiv: thanks [06:55] Hmm, the docs do mention @only_raises, but don't seem to have been updated to mention bzrlib.cleanup or Command.add_cleanup [06:57] Just quickly, the rationale for preferring add_cleanup is a) it behaves better when multiple exceptions occur, and b) it avoids extremely indented code just because some code needs three different resources acquired and released. [07:00] spiv: that makes sense. thanks. add_cleanup fixed it. [07:54] spiv: quick chat about leaks ? [07:55] spiv: or did you EOD already ? [08:01] hi there vila [08:01] poolie: hey ! [08:05] vila: sure [08:06] spiv: so, regarding our discussion at UDS, I'd like to tweak my description :) The problemS occur when the main thread, close a socket handled by another thread [08:06] spiv: does that make more sense ? [08:08] vila: if you mean 'while another thread is concurrently performing operations on that socket', sure [08:09] spiv: yes, generally listen (Though I avoid that case by faking a connection) or just waiting in a recv() call [08:10] That seems fairly clearly a bad thing to do... does our test suite ever try to do that? [08:10] spiv: so, next, the smart server create a thread for each client connection and make it a daemonic one, errr, push this subject on the stack [08:11] spiv: to reclaim the threads, yes, [08:11] spiv: the server collects the threads as connections occur and in stop_server() calls shutdown(RW) [08:13] the threads are blocked otherwise waiting for the client to speak [08:13] the client sockets are opened, waiting to be used by their respective transport [08:14] we don't have a transport.close() to get out of this loop and I don't want to add it before addressing the leaks [08:16] I will need it anyway as when all leaks are fixed, a full selftest run fails with Too Many Open Files, most of them being transport sockets [08:16] so I first need a way to completely shutdown the server, including all threads, not relying on the daemonic ones anymore [08:18] vila: hmm, so you are saying that it can leak fds if one thread does sock.close() while another thread is doing sock.recv() on the same sock? [08:18] Or are you saying something else? [08:18] the other side of the socket (the client one), [08:19] shutdown() + close() actually (I couldn't find a confirmation that one will call the other) [08:20] So the main thread doing server_sock.close() succesfully closes the server_sock fd and causes the associated thread to terminate, but the client socket is not released too? [08:20] yes [08:20] Ok, that sounds like a bug in our client code to me. [08:20] Possibly in our test infrastructure for our client code. [08:21] spiv: the transport contract says the socket will remain opened so far [08:21] Right. [08:22] and as long as we don't try to manipulate it, there is no point where we can realize it's closed [08:22] The fact the contract doesn't facilitate this doesn't contradict my claim ;) [08:22] I suspect that python can't either so it can't gc it either [08:22] There are a couple of options. [08:23] spiv: I wanted to understand if 'bug in our client code' was covering this [08:23] Well, but in our test infrastructure at least. [08:23] s/but/bug/ [08:24] Whether we decide it's ultimately because the Transport API doesn't provide a way to close connections isn't yet settled in my mind. [08:24] backtracking a bit: 'bad thing to do', yes, but what can be the consequences ? [08:25] So, actually, I think calling close() in one thread while another does recv() is reasonable. [08:25] spiv: no problem with that, as long as the test infra can use it :) [08:25] It's arguably a workaround for a more elegant way to interrupt the worker thread, but in practice it seems to behave the way we'd like it to. [08:25] spiv: knowing that exceptions in threads are caught and re-raised at join time to make it possible to ignore the socket ones occuring in this context [08:26] s/for a/for the absence of a/ [08:26] yup, exactly [08:27] (And glancing at the CPython source for socketmodule.c it seems to be robust enough to make sure the close(fd) really will be called) [08:27] an alternative will be to use timeouts, but I've encountered too many problems with this approach and I'd prefer to avoid it if possible [08:28] I vote very strongly for steering well clear of Python's socket timeouts. [08:28] So there's a fairly cheap thing we could do. [08:28] spiv: but close() itself doesn't ensure the other side is notified right ? There may still be data to be transmitted no ? [08:28] Which is add a hook point that is called every time ConnectedTransport makes a connection [08:29] yeah, I overrided transport.get_transport, same result [08:29] Then the test suite could install a hook function to collect those connection objects, and then close them after every test. [08:29] yeah, addCleanup(disconnect_transport) [08:30] disconnect_transport is an ugly hack so far testing for attributes called 'close' or 'disconnect' :-D [08:31] I think that would a reasonable thing to do. I don't think it would get in the way of possibly adding an official "close connection" API to transport later, and might even be an incremental step towards that. [08:31] It would also be useful as a debugging tool, perhaps. [08:31] exactly, this doesn't address what close connection should mean: always close, close only for the last user of the shared connection, etc [08:32] I could imagine writing a plugin that counts the number of connections, same sort of thing as how -Dhpss etc can report stats about other things. [08:33] hmm, yeah, a hook is better than overriding get_transport in that case, I'll keep that in mind [08:33] And a hook on "create connection" rather than get_transport in general. [08:33] sure [08:34] transports can be created but never connect [08:34] now, about the samrt server itself [08:34] smart [08:34] a daemonic thread is created for each client connection [08:35] this interfere in my leak hunt :) [08:35] most of the test use SmartServer_for_testing, but some don't [08:35] most of the tests use SmartServer_for_testing, but some don't [08:36] I tried to change them but failed, lost in the difference parameters used for __init__ and start_background_thread (from memory) [08:37] Well, why not do the same thing? [08:37] collect threads ? [08:37] Add a hook point to bzrlib.smart.server that is invoked for every new thread? [08:38] There's already an overall server_started (and server_started_ex :/) hook point. [08:38] here you are, thanks, that's the bit I came here for :-) [08:39] a bit more work, but definitely the way to go, hooks are good [08:39] :) [08:40] I think you only need to invoke it from SmartTCPServer.serve_conn [08:40] spiv: a 'connection_started' hook... yes [08:40] Or perhaps from the target func it uses. [08:40] that's the one I override in _for_testing [08:41] may be, I have to do the same kind of stuff for http/sftp anyway, I'll try to unify [08:42] It's not perfect, as the server does occasionally create other threads [08:42] (to handle insert_stream requests) [08:42] But I think probably that it will be good enough. [08:43] vila: btw, jml filed a bug asking about a way to close bzrlib transport connections for launchpad's test suite [08:43] ha ha, thanks for the tip, I still have a few leaks without explanation so far (but nothing critical anymore) [08:44] vila: if you do address this be sure to find that bug and let jml know how we're dealing with a similar problem [08:44] spiv: hehe, I commented there :) Th problem is on my radar for eons, I wanted to address the server side of the problem first to avoid masking it [08:46] success: the gross hack keep the open files to ~50 instead of >1024 ! [08:46] with some fallouts for gio and ftp accounting for ~70 failures but that's expected [08:47] pfew, I see the light ! [08:47] spiv: thanks for the teddy-bearing, very valuable ! [08:48] vila: nice work! Glad I could help :) [08:49] spiv: by the way, bzrlib.smart.server.SmartTCPServer uses a timeout, [08:49] I understand why, yet, it contradicts your recommendation... Why ? [08:49] Because the world is imperfect :( [08:50] grr, I meant: reading the code I understand why you used it, but why take the risk ? [08:50] * spiv looks [08:50] Erk, so it can break out of blocking accept once per second to check if it should stop? Ugh. [08:51] also, isn't there a potential bug there, related to leaks, for a loooong live running smart server ? (Hitting the too many open files limit or something) [08:51] Gosh I wish we could use Twisted for this stuff. [08:51] Not that I know of, why do you think so? [08:51] shooting in the dark here, but in case some weird bug came out of lp, that may be worth looking at [08:52] The leaks we've been discussing are client-side. [08:52] so far yes, I'm now talking about the smart server creating a daemonic thread in serve_conn [08:52] I don't recall any bug reports about 'bzr serve' running out of fds. [08:53] ok, good to know :) [08:53] When the client disconnects that thread will stop. [08:54] hmm, that's the point where I don't know *when* it will stop [08:54] after all, the client leaks in selftest are kind of a mirror scenario [08:55] I do know when it will stop. [08:55] tell me :) [08:56] It will stop when it tries to read from the socket and finds it has been disconnected. [08:56] when will it try to read ? [08:56] All the time, except when actively working on processing bytes it has already received. [08:57] then it will block waiting for the client, what if the client crashed and can't properly close the socket ? [08:57] (and if it is in the middle of calculating a response then that means it's either about to try writing the response, or about to try to read more bytes of the request) [08:58] Well, if the client drops of the internet suddenly and never manages to send a FIN etc then yes the socket will hang around indefinitely. [08:58] guarded by some timeout ? [08:58] I don't think so. Timeouts are a risky proposition. [08:59] no no, not by us, I was thinking by the TCP stack or something [08:59] (Both in that historically Python's socket.settimeout feature has had subtle bugs, and that you can get false positives if the client really does want to be idle for 2 hours) [09:00] Oh, well, some platforms allow you to set a system-wide timeout for checking if a TCP still seems to be alive. [09:00] hmm, ok, out of scope for today and the hook should be far enough for the tests [09:00] But no, we don't do anything about that in bzr. [09:00] It would be good to do so, I think. [09:01] But judging from the lack of bug reports about it I don't think it's a high priority :) [09:01] Yeah, a hook would be handy there, especially if it is passed the thread object and the socket object. [09:01] sure, I wanted to mention the idea in case it would light a bulb for you [09:02] spiv: for my purposes, both are needed :) [09:02] Because then it makes it possible to write a plugin that arranges to e.g. use Linux-only magic to set TCP keepalives per socket. [09:02] vila: great :) [09:04] spiv: just for fun, have a look at bzrlib.tests.stub_sftp.SokectListener for the last biggest source of thread leaks :) [09:05] vila: I've had that fun in the past, I hope you don't mind if I pass on that tonight ;) [09:06] hehe, np, enjoy your evening :) === radoe_ is now known as radoe [09:58] evenin all :) [10:04] hi there [10:21] hi :) [12:03] I'm fairly novice at using bzr and today got stuck with a problem while trying to commit changes to a local branch. bzr just freezes and does nothing... I can run status or log or diff on the same branch, but it hangs when trying to commit the changes done to a single file. Did other commits on the same branch earlier in the day. I know this isn't much to try to help me, but if anyone could point me to some things that is possible to do to tr [12:03] find a bit more about what might be the source of the problem, I would apreciate. [12:03] AntoineLaf: how big is that single file? [12:07] it is a simple settings.php file [12:07] hi. I just filed https://bugs.edge.launchpad.net/bzr-rewrite/+bug/588249 anyone got any ideas? [12:07] Launchpad bug 588249 in bzr-rewrite "[regression] Rebase onto previous revision carries merge-metadata (affected: 1, heat: 0)" [Undecided,New] [12:08] 12kb [12:15] AntoineLaf: in that case, no idea [12:15] AntoineLaf: you might want to try to see what it's stuck on using strace [12:16] jelmer: that's exactly the kind of advice I was looking for :) thx [12:16] now I need to know what strace is... :) [12:17] ah, okey, I see how this could bring some light on the problem. [12:18] tumbleweed: hi [12:18] tumbleweed: what do you mean with "will show merge history" ? [12:19] jelmer: commit 2 is now a merge commit === oubiwann is now known as oubiwann_ [12:19] tumbleweed: of what exactly? [12:19] tumbleweed: also, is this with trunk? [12:19] jelmer: http://paste.ubuntu.com/442742/ [12:19] yes, tested with trunk [12:20] it used to do the right thing, but started doing this a few months ago. I put it down to ineptitude with rebasing until today :) === oubiwann_ is now known as oubiwann [12:28] jelmer: have you got any time to lend a hand in figuring out how to repair https://bugs.launchpad.net/bzr-svn/+bug/587819 ? [12:28] Launchpad bug 587819 in Bazaar Subversion Plugin "race condition when doing a bzr commit to an svn repo (affected: 1, heat: 6)" [Undecided,New] [12:42] tumbleweed: thanks for the bug report [12:42] jelmer: np. glad someone can understand it [12:42] peitschie: sorry, I'm working at the moment [12:42] jelmer: nps. I'm simply under some heavy time constraints... if i can't get the repository repair in the next day we probably will be forced to move back to pure svn [12:43] peitschie: The only real solution is to lock the root of the tree [12:43] jelmer:... obviously not my first preference :) [12:43] jelmer: the pre-commit hook i wrote should prevent it for the interm... it's trying to fix the existing data that is causing issues. I can't create a clean checkout in it's current state [12:46] peitschie: one of the alternatives is to remove all bzr revprops from the later revisions [12:46] that means your history will diverge but you should be able to check out the branch again [12:47] jelmer: sounds like a plan. I'll give that a try and see how badly it fails :) [13:38] jelmer: just to update, removing the bzr revprops really makes a mess of any existing bzr-svn branches (made with the corrupt info). I'll have to see if I can work around it... but this looks like it might be a little too much work to fix :(. that race condition bug really makes a mess! [13:38] thanks for your help though... and the otherwise wonderful plugin :) [13:49] is there something like gitolite/gitosis that exists for bzr? [13:49] csgeek_, what _are_ gitolite or gitosis? [13:50] csgeek_, web frontends? PQMs? ...? [13:51] re the former, I think Loggerhead is preferred [13:51] it allows you to limit what user can write to what using ssh RSA/DSA keys [13:52] ahh [13:52] basically security mechanism for granting user rights to a repo and limit what they can and can't do [13:52] rathern then relying to unix permission. Also prevents users from deleting "master" or whatnot [13:52] see http://doc.bazaar.canonical.com/bzr.dev/en/admin-guide/security.html [13:53] thanks nDuff [13:58] csgeek_, ...that said, my preferred route to controlling who has commit where (and under which circumstances they can commit, ie. forcing unit tests / formatting checks / whatnot to pass) is use of a PQM. [14:00] PQM = https://launchpad.net/pqm ? [14:00] csgeek_, and that class of tools, yes; there are a few for git also. [14:01] I'm familiar with the git tools, it has a few shortcomings, at least work preferes bzr (: [14:13] Hi. I started playing around with the externals plugin and navigated myself into a "situation". I first checkout out a svn repo inside m bzr working dir, then added it to .bzrmeta/externals. that broke because the url I used for the svn checkout was different than the one in the externals file (which I noticed on bzr ci), I then deleted the svn checkout and the externals-snapshot file but now I can't commit anymore. bzr ci always gives me: [14:13] bzr: ERROR: Not a branch: "/path/to/bzr/repo/svn/repo" [14:13] bzr st says nothing about that director though, it just shows the removes externals-snapshot [14:13] removed even [14:14] any hints on how to get out of this? [14:19] wow.. so when I make a new branch, that requies a new directory to be created. bzr branch . foobar would branch the current repo to the directory foobar. [14:24] csgeek_, there's an experimental colocated branch support plugin, and proper support should eventually show up in a release. [14:42] * TresEquis finds bzr's non-colocated branches much easier to work with than the git / hg model [14:42] especially with the "shared repository" format [14:45] :) [15:08] garyvdm: re expensive plugins, I bet you're being screwed just by qt import times, it's a big thing [15:08] unless you're already very careful about lazy loading? [15:09] mgz: we are very carefull about lazy loading. [15:10] mgz: it's importing bzrlib.branch [15:11] mgz: but I think the method that I used is not very accurate. :-( [15:12] measuring startup time isn't [15:12] you can do cold startup properly on nix as well, which will give you bigger numbers [15:12] what was the magic drop-caches command again... [15:13] hmm - let me try that [15:14] echo 3>/proc/sys/vm/drop_caches [15:14] after a sync. [15:29] mgz: do you know what I'm doing wrong here? [15:29] http://pastebin.org/ [15:29] http://pastebin.org/298078 [15:36] your shell doesn't seem to support time taking arguments [15:37] (time bzr rocks) 2> plugin_profile.txt [15:37] maybe? [15:37] * GaryvdM tries [15:38] mgz - that works, but I also want to do time -f %E bzr rocks - What shell should I use? [15:40] bash -c "help time" [15:40] and see what it offers [15:40] otherwise... well, see what else you have installed [15:41] hmm - thats very different to "man time" [15:43] mgz: got it [15:43] /usr/bin/time -ao plugin_profile.txt -f %E bzr rocks [15:43] a, ha. [15:46] how do I delete a remote branch? [15:47] I suppose I can ssh and rm -fr, but is there some mechanism via bzr [15:47] just do the obvious. [15:59] csgeek_: 'bzr remove-branch' [16:00] though that was added in the 2.2 series [16:00] mgz: just sent a mail with the cold cache results. [16:00] One of the users of GroundControl is getting http://people.ubuntu.com/~alanbell/Screenshot-Bazaar%20Error.png when attempting to push to a remote lp repository. (bug 587051) Should we handle this in GC, or is there a failure on the bzr side? [16:00] Launchpad bug 587051 in groundcontrol (Ubuntu) "repository incompatibility error message fixing bug in dasher (affected: 1, heat: 10)" [Undecided,New] https://launchpad.net/bugs/587051 [16:02] lfaraone: The error message could be more friendly... [16:02] GaryvdM: okay, what exactly is the problem encountered, and can it be fixed programmatically? [16:02] lfaraone: not programmatically [16:04] lfaraone: either upgrade lp:~vcs-imports/dasher/trunk, or... [16:04] garyvdm: that's interesting, very different result, presumably more penalty from not lazy loading other needed modules and less from hooks in bzr core [16:04] wonder what the search plugin is doing [16:05] lfaraone: recreate lp:~alanbell/dasher/bug..... as a --1.14 branch [16:05] lfaraone: see bzr help current-formats [16:06] lfaraone: You can convert a non-rich-root format to a rich-root format, but not the other way around :-( === deryck is now known as deryck[lunch] [16:14] http://pastebin.org/298236 with search [16:14] http://pastebin.org/298243 --no-plugins [16:14] mgz: ^ [16:16] mgz: bzrlib.branch, bzrlib.xml4 [16:16] hm, so that is mostly what john was saying in the last mailing list post. [16:16] Could be more lazy [16:17] though, making the commands that don't touch branches 100ms faster still seems worthwhile [16:17] mgz: Also I want to bring up the gui before bzrlib.branch is imported... [16:26] Hi vila [16:27] GaryvdM: hey ! [16:27] vila: I'm getting some test failures, an I want check if they are also happening on babune. [16:27] vila: But I cant access babune [16:27] where ? [16:27] vila: karmic [16:28] lol, I meant failures where ? [16:28] and what do you mean by "can't access" ? [16:28] vila: http://pastebin.org/298300 [16:28] oh [16:28] http://babune.ladeuil.net:26862/grid [16:29] vila^ [16:29] babune is blue and almost sunny [16:29] oh - thats the old address [16:30] wow, wow, wow, that's the old buildbot one, yeah ;) [16:30] http://babune.ladeuil.net:24842/ should be better [16:30] GaryvdM: And I thought you were running lucid ? [16:30] vila: thaks [16:31] vila: lucid on laptop, but not upgraded on the desktop. [16:32] GaryvdM: beware, I started keeping various versions here and there and I ended up running babune :-P [16:33] vila: Yhea - I'm just lazy to upgrade. [16:33] GaryvdM: okay. our goal is to avoid requiring users to have to manually do any of that. So, in the future, we should make sure that our new branches are created with the same format as the source? [16:33] lfaraone: Yes [16:34] lfaraone: bzr also needs a command that you can create a shared repo, in the format that you are going to branch into [16:34] lfaraone: we currently don't have a nice way to do that :-( [16:36] vila: any idea why I get these failures, and how to fix: http://pastebin.org/298327 [16:38] GaryvdM: hmm, that vaguely rings a bell... is it with --no-plugins or anything fancy ? [16:38] GaryvdM: anything weird with time or file system there ? [16:39] vila: yes [16:39] vila: yes --no-plugins [16:40] vila: ext4 fs [16:40] vila: going to try on the lucid laptop [16:40] What can I say, using /tmp/testbzr-buzGMO.tmp is asking for trouble, tests don't like being called buggy gizmos even in disguise [16:40] :) [16:42] so, debugging it manually is hard, it's a blackbox one, but you could try setting a breakpoint before the failing assertion, pp self.test_dir, open a terminal there and try looking around [16:42] vila: ok [16:42] including running ${TEH_RIGHT_PATH}/bzr st or ${SYSTEM_WIDE_INSTALLED}/bzr st [16:43] vila: also fails on lucid laptop [16:43] revno ? [16:43] 5274 [16:44] right, passed tests on babune [16:44] 5274 on trunk right, no local changes ? [16:44] yes [16:45] hmm - some unknown files. let me try bzr clean-tree and run again [16:46] GaryvdM: no ! [16:46] why? [16:46] wait, keep them in a safe place, there is no known reason for interference from the source tree, if it is the case, we have a bug [16:47] GaryvdM: so, put them aside and retry and but I won't hold my breath [16:47] vila: I allready did it on the desktop, but it's also failing on the laptop, so we can debug there if needed [16:48] * vila reading the test [16:48] urgh, one more eager test.... [16:50] vila: I rm the wt, did a checkout, make and it passes now [16:50] vila: Going to debug on the laptop [16:50] GaryvdM: anything in your setup related to .... what ? [16:51] vila: Sorry - don't understand the question. [16:52] I stopped writing when you said you fixed the problem by rm'ing your wt.... [16:52] ok [16:52] You had a dirty wt ? [16:52] on both machines ? [16:52] yes [16:53] tell us your dirty secrets will you... [16:53] what did *you* do to that poor wt ? [16:53] unresolved conflicts ? [16:54] Not sure [16:56] The plot thickens [16:56] The wt was not related. [16:57] If I run ./bzr selftest --no-plugins branch - I get the failures [16:57] If I run ./bzr selftest --no-plugins -s bzrlib.tests.blackbox.test_status.CheckoutStatus.test_branch_status - it passes [16:57] vila^ [16:57] * vila trying [16:58] with -s the plugins are loaded [16:58] err, sry, you have --no-plugins there too [16:58] eeeerk [16:59] vada retro satanas failing here, I wasn't there I hear nothing, I saw nothing === deryck[lunch] is now known as deryck [17:00] so, this smells test isolation [17:00] maybe a hook was added recently in this area and was not registered in b.h.known_hooks ? [17:00] vila: There was a BZR_PDB for tests, but I can't find it now. [17:02] vila: Maybe it was in my imagination ... [17:02] hmm, no I think there is one [17:03] BZR_TEST_PDB [17:03] vila: Thanks. btw where did you find that? [17:04] emacs... [17:04] :-P [17:04] I searched for PDB in bzrlib/tests/__init__.py [17:04] ok [17:05] GaryvdM: can you run qblame bzrlib/status.py and tell me if th revnos are truncated for you too [17:07] vila: Yes [17:08] vila: we try guess how much space we need, by just looking at the tip revno. We should look at the length of each revno that is shown [17:09] but see bug 504070 [17:09] Launchpad bug 504070 in testtools "testtools change broke BZR_TEST_PDB (affected: 1, heat: 8)" [Wishlist,Triaged] https://launchpad.net/bugs/504070 [17:09] vila: taking into account font metrics, I'm worried that it will be slow. [17:09] GaryvdM: just give me a way to resize interactively :) [17:10] vila: yes [17:14] GaryvdM: do you often run ~3000 tests in a single selftest ? [17:15] GaryvdM: did your failing runs ended mentioning a high number of leaking tests ? [17:15] vila: no - I want to make some imports lazy in bzrlib.branch - so I want to test lots of things [17:16] the no was for the ~3000 ? [17:16] Yes [17:16] vila: 17 non-main threads were left active in the end. [17:16] how many leaking tests ? [17:17] bzrlib.tests.blackbox.test_branch.TestBranchStacked.test_branch_stacked_from_smart_server is leaking threads among 13 leaking tests. [17:17] next line [17:17] err, what 13 only, lier :) [17:17] vila: bzr: interrupted - I'll run it again [17:18] I'm about to switch my whole VCS over to git, sell me on bzr. I'm interested in installing and using launchpad and just read about the usability of bzr. got me thinking [17:18] haaa, I got 591 leaking tests and 166 non-main thread left active [17:18] hey, that's better than 1600 [17:18] on top of that, there are may sockets left open, so you may be experiencing a 'Too Many Files Open' exception that is silently swallowed [17:19] mgz: that's for trunk :) [17:19] j0rd: Here is a page with good reasons: http://doc.bazaar.canonical.com/migration/en/why-switch-to-bazaar.html [17:19] GaryvdM: reading it now [17:19] GaryvdM: i was interested in real users expereiences as well [17:19] once I finished implementing all my pending tricks, I should be close to 0 unexplained thread leaks [17:20] i use ubuntu as well, which is another selling point of bzr, but other than that....i've never really heard of people using it [17:20] if you can get the working set of a full test run back down to 200MB rather than 1GB I'll be very happy [17:20] mgz: and by cheating a bit I know that instead of >1024 sockets for a full run, I'm now at ~50 (some of which being "valid") [17:21] mgz: no idea about that yet, first things first :) [17:21] * vila back to hacking [17:21] j0rd: we use bazaar quite extensively here at MySQL, moved from BitKeeper. [17:22] I'd say it's a pretty good tool, although we do have internal advocates with git [17:22] the main selling point for me with bzr would be that you can get paid support from the vendor for it. [17:22] kostja_osipov: i assume you have used the others as well "cvs, svn, git?" which is the stream i'm coming from. [17:23] svn was out of the question when we migrated, being a "better cvs" [17:23] git was high on the list, mainly because of its speed. === nlisgo_ is now known as nlisgo [17:23] kostja_osipov: alright, not looking for paid support, but i do like the web frontend launchpad...which currently is my major selling point. I need something web frontend, that i can show to my clients and have them interact with for bugs and documentation [17:23] but git wasn't as mature as it is now when we migrated, back in 2008 [17:23] GaryvdM: one more thing: 'branch' get you 3000 tests, most of them involving servers, with leaks, so you're doing the opposite of the --parallel=fork trick: instead of spreading the leaks, you're attracting them :-D [17:24] j0rd: well, that's launchpad platform, it's way more than just bzr [17:24] but git wasn't as mature as it is now when we migrated, back in 2008 <- it was, it was just less of a meme than it is now [17:24] kostja_osipov: i'm aware of that, it's something I'll need [17:24] we use our own development infrastructure (e.g. bugs.mysql.com, with bzr triggers in python that keep the bug database in sync with the trunk state), and only partially integrate to launchpad [17:24] vila: ack [17:24] mgz: we needed Windows support. [17:25] which git still doesn't have. [17:25] running half a unix system underneath it doesn't count. [17:25] mgz: when you choose a tool for a large open source project, you want all platform to be well supported. [17:25] and bzr was better than others in that. [17:25] bazaar has improved much more in the last two years than the other vcses [17:25] mgz: well, I think it's better now than before. I haven't been looking [17:26] ease of use is important for me, because i'm a free lancer and if the people I work with can't figure out my VCS, it'll cause problems [17:26] another reason I'm looking towards bzr right now [17:26] you can get a pre-packaged msys with your git now, it is still a sucky option [17:26] vila: that test says it is a blackbox test. I thought that ment a subprocess, but that is not the case. Is my understanding of what blackbox implies wrong? [17:26] mgz: Haven't been watching closely. I can say bzr still has a way to go to be my real BitKeeper replacement. But I can't say it doesn't get the job done. [17:26] and in some parts it's of course better than bk [17:27] yup, there's a long way to go all round. [17:27] j0rd: how big is your project? [17:27] GaryvdM: yes, a blackbox test runs with stdout/stderr/stdin redirected, subprocess is not a requirement and we try to avoid them [17:27] how many people work on it? [17:28] kostja_osipov: many small projects, for one off clients [17:28] GaryvdM: stdout/stdin being redirected, pdb can't be used [17:28] kostja_osipov: about 1-3 months in lenght each [17:28] kostja_osipov: drupal development. Ubercart uses bzr as well [17:28] and i do mostly ubercart work [17:28] so another selling point [17:29] I'd say if you're under 500 000 and 5 years of active history, you won't notice much of bzr drawbacks. [17:30] at least they are not apparent to me on that scale. [17:30] kostja_osipov: i'm really just looking for a frontend to my VCS, so that i can update my clients on progress upon commit and self document along the way. allowing them to see progress, track bugs and i can document features as they get built [17:30] my issue was with performance and with bzr file-ids... [17:30] and some gui quirks... I'd like the gui to be more flexible. [17:30] but otherwise... does the job. [17:31] kostja_osipov: ya, i'm fairly VCS agnostic to be honest. so the front end interface for my clients is actually more important to me. and having other colaborators pick it up easily [17:31] kostja_osipov: Which gui: gtk, or qbzr? [17:31] (and you only start to be getting performance issues when you're in millions of slocs) [17:32] I use gtk but I miss some very specific interface that was good in BK [17:32] gotta go (dinner) [17:33] kostja_osipov: thanks for your insight, very helpful [17:33] j0rd: It is very easy to run your own loggerhead. (http://bazaar.launchpad.net/~qbzr-dev/qbzr/trunk2a/files is loggerhead) [17:33] kostja_osipov: tell us at least what you're missing, we're holding our breath ! [17:33] kostja_osipov: :) [17:34] kostja_osipov: If you don't mind qt to much, give qbzr a try. [17:34] * GaryvdM plugs away shamelessly [17:35] I will. I'm missing bk sccstool to be precise [17:36] where you start with the revision history tree view, and can scroll back and forth in time and instantly get to every changeset. [17:36] really need to go [17:37] kostja_osipov: sounds like bzr qlog [17:39] I have a branch with a broken attempt of trying bzr-externals, everytime I try to commit on this branch, I just get an "bzr: ERROR: Not a branch: /path/to/the/old/external/thingy", any hints on how to get past this? I tried using uncommit to get to a stage before this happened but no luck [17:53] ok, deleting .bzrmeta/externals completely helped [18:32] vila: test results: http://pastebin.org/298796 [18:33] vila: The problem is caused by trace.is_quite() returning True. I'm going to log a bug. [18:36] Ah - Allready loged. 579996 [18:36] bug 579996 [18:36] Launchpad bug 579996 in Bazaar "test_status failure on trunk (revno 5227) (affected: 1, heat: 6)" [Medium,Confirmed] https://launchpad.net/bugs/579996 [18:45] hi all [18:45] our company currently using jazz clearcase server from IBM [18:45] we are thinking to replacing this with new SVC.. [18:46] Our servers are based on HPUX os. [18:46] so is BZR well supported on it? [18:49] HPUX is pretty rare. Your chances of finding someone who knows about it on IRC are fairly slim [18:49] But if it can run Python and a decent C compiler, chances are good [18:59] hpux has it's own compilers. [19:58] bzr locks seem to last across reboots on Windows [19:58] That's a bit unfortunate, eh? [20:02] exarkun: you just need to break the lock with bzr break-lock [20:02] GaryvdM: I know. But I don't see why I should need to. [20:03] heya [20:03] Hi bialix [20:04] I have question about pqm setup [20:04] actually 2 questions [20:04] 1) Does example in the HACKING.txt is still correct? it talking about sftp and b-v.o URLs so it seems pretty outdated [20:05] 2) Why it so overly-complicated? Is there wrapper around pqm plugin suitable for lazy and dumb windows devs who need only submit requests to bzr pqm? [20:06] hi Garyvdm [20:07] bialix: yes HACKING.txt does seam out of date. From my locations.conf: http://pastebin.org/299166 [20:09] bialix: re question 2 - It does not only apply to windows... [20:14] exarkun: Probably not the most knowable person to answer that question. I believe it is because the locks are handled by bzr, and not the os, and bzr does not know when the machine is restarted. [20:15] exarkun: The reason why bzr handles the locks, is it needs to be able to write to transports like ftp, where we can't do os locks. [20:16] GaryvdM: That's probably true. bzr should use a lock that gets reset across reboots, instead of whatever it uses now. [20:17] I filed a bug report, https://bugs.launchpad.net/bzr/+bug/588431 [20:17] Launchpad bug 588431 in Bazaar "bzr locks persist across reboots (affected: 1, heat: 6)" [Undecided,New] [20:17] ok [20:26] exarkun: I don't think so === nlisgo_ is now known as nlisgo [20:27] GaryvdM: oh, nice, thanks for the example [20:27] bialix: The purpose of the lock is to prevent concurrent access. If the lock was held by a process that existed before the last reboot, then there is no chance of concurrency. [20:27] exarkun: the problem with limbo is a known bug [20:28] exarkun: everything else is require more intelligence than bzr has right now [20:28] it's not so hard to run break-lock, is it? [20:28] Yes, it is. [20:29] GaryvdM: cool, I was not sure I can use lp: style urls [20:29] If I were actually the agent running "bzr checkout", then maybe it wouldn't be so hard to manually break the lock. [20:29] But I'm not. An automated build system is. [20:30] yep [20:31] bialix: yes, except for the submit branch. [20:31] So far I'm finding bzr to be somewhat lacking in reliability. I could easily use svn in an automated build system. It was slow, but it just about always worked. bzr, on the other hand, is much faster for many operations, but fails in a lot of different ways. [20:31] So, I hope #588431 (and the other bugs I've filed) are considered real issues and eventually addressed. I'd much rather be able to continue using bzr in the future, rather than having to switch back to svn. [20:32] yes === oubiwann is now known as oubiwann_ === nlisgo_ is now known as nlisgo === oubiwann_ is now known as oubiwann [20:48] Garyvdm: I want a pony^W qpqm-submit command. And planning to do so tomorrow === nlisgo_ is now known as nlisgo [20:49] bialix: :-) [20:49] bialix: I want to look at our start up time on windows [20:50] btw, I've started dogfooding bzr-explorer every day [20:50] it needs to be improved [20:50] one things that bother me: we need to invent a way to add "edit file" command to treewidget context menu [20:51] GaryvdM: cool [20:52] I did a clean install of windows, and the start time is not bad. But I have seen on windows installs that have been around for a while, the start up is very slow. [20:52] bialix: like you laptop. [20:52] *your [20:52] hmm [20:52] Open = edit file [20:54] no [20:54] open is launched file [20:54] bialix: I would like to try make an installer without libaray.zip, to see if it makes a difference, but the instructions to build the installer made me very scared... [20:54] so open for python file is just launched its execution [20:55] GaryvdM: really? I'm ever don't know if there is up-to-date instructions [20:55] why you need installer? [20:56] bialix: I think that maybe if we don't have libaray.zip, the start up will be faster, I would like to prove/disprove this. [20:56] you don't need installer for this [20:57] you can build bzr.exe with `python setup.py py2exe` command [20:57] and there is one place n setup.py where you can control creation of library.zip [20:57] bialix: re Edit File - maybe show the options for the different edit applications registerd in windows, like windows explorer? [20:58] oh - ok [20:58] GaryvdM: if you run bzr-explorer -- then you can see edit action (icon of paper with pen) which opens selected file in treewidget in the editor [20:59] we need a way to mirror this action in treewidget [20:59] allow explorer to inject this action [20:59] IIRC there is bug report on this === nlisgo_ is now known as nlisgo [21:00] GaryvdM: which instructions scare you? [21:02] bialix: bzr.dev/doc/developers/win32_build_setup.txt [21:02] Thats just to install the dependencies. [21:03] GaryvdM: what is your alternative to library.zip ? A loose tree of files? [21:03] Then you have to get all the plugins [21:03] i'm pretty sure that would be slower [21:03] jam: yes [21:03] .zip already has an index at the back [21:03] and the actual content is stored uncompressed [21:03] And navigating the python import path is a real pain on Windows [21:04] (and so is trying to measure cold-start performance) [21:05] GaryvdM: I thought bialix had done some testing to show that the pre-built installer was quite a bit faster than running from source [21:05] but it has been a while [21:05] jam: apparently you can do options = {"py2exe": {"skip_archive":1}} [21:05] [21:05] jam: it was faster for me, at least on FAT32 [21:05] but I can't say for sure about NTFS [21:06] hi jam, btw [21:07] I think that a py2exe exe probably does not scan the installed python paths, which would explain why it's faster. [21:07] Garyvdm: those could be simpler a bit: http://wiki.bazaar.canonical.com/BzrWin32Installer [21:07] GaryvdM: actually py2exed application has only library.zipin sys.path [21:08] GaryvdM: actually py2exed application has only library.zip in sys.path [21:08] bialix: Yes, thats what I was trying to say [21:08] bialix: thanks for the better doc. [21:09] GaryvdM: they're out-of-date a bit [21:09] feel free to blame [21:09] jam, bialix: we don't need MS Visual Studio for tbzr any more? [21:10] no, we need [21:10] maybe you can skip tbzr? [21:11] * bialix is about to going offline [21:12] I thought that req was removed. :-( [21:12] how fullermd said? rest is for wimps? so I am [21:12] ~~~ [21:14] GaryvdM: You need at least the 'light' version, but I've never actually worked out how to do it [21:14] naoki was good enough to figure out how to use express edition + an sdk [21:14] but as bialix mentioned, that is mostly just for the tbzr extension [21:15] I thought you had access to Desolation, though (the win32 build host) [21:15] jam: No :-( [21:27] I have a question on bug tracking... is anyone here knowledgable about it? [21:29] aarfeick_: Bug tracking in general, or bug-tracking with launchpad? [21:30] Well, I wrote my own bug tracker (as an exercise) [21:30] I developed a URL scheme to close bugs [21:30] My commits indicate the URL of the fix, but I don't think Bazaar is actually resolving that URL [21:31] Any ideas why? [21:31] aarfeick_: What do you mean with your commits indicate the URL of the fix? [21:32] aarfeick_: The bzr bugtracking support doesn't do anything to the bug-tracker. [21:32] aarfeick_: It just stores a URL to the bug-tracker in bzr. [21:32] When I use bzr commit -m "Test commit" --fixes my_tracker:123, the commit logs show the URL that I specified in my config [21:32] I see [21:32] I thought the point was to actually apply the fix using that URL [21:33] aarfeick_: no, it just tracks that a particular bug was fixed by a particular revision [21:33] I see... [21:33] I suppose I'd have to write a hook to do anything about it? [21:33] aarfeick_: Yeah. [21:34] aarfeick_: in launchpad's case it scans branches that are pushed for this revision proprety [21:35] Is there a (relatively) simple way to do so, that I could distribute to the rest of my development team? I fear I know nothing about bzr hooks. [21:35] aarfeick_: You could have the bug-tracker scan the VCS. [21:36] Oh... so it could scan the logs for the fix statement [21:36] My current implementation of the tracker is web-based so it can be used by other developers [21:36] So it would not be so simple [21:36] moin [21:46] In this case, I'd want to write a hook that "visits" a certain URL, which the bug-tracker uses to actually close the bug [21:46] Is there a *good* way to do this in Python? [21:47] By "visits" do you mean "issues an HTTP GET to"? [21:48] aarfeick_: a post commit hook could do "bzrlib.transport.get_transport(bugfix_url).get('.')" or you could use httplib/httplib2/twisted's getPage etc etc [21:49] exarkun: yes, an HTTP GET. [21:49] Yea, what lifeless said. [21:49] There's like a million Python libraries for that. :) [21:50] Excellent! I'm just learning Python (though I do know several other languages), and I figured this is a good useful project. [21:50] The tracker is in PHP [21:52] jam: Is there a reason bzrlib.errors one big file? It is quite costly to import. [21:53] dito for bzrlib.builtins [21:55] I'm trying to delay the importing of bzrlib.errors. It's a wack a mole game.... [22:02] GaryvdM: they are [22:03] GaryvdM: I've considered a few things, like putting them one-per-error in separate py files [22:03] more realistic to do that for builtins to start with, I think. [22:06] lifeless: ok [22:12] GaryvdM: however [22:12] GaryvdM: for builtins.py we have to load it for most commands [22:12] GaryvdM: for errors, if we catch *any* exception, we have to load it. [22:13] So lazy loading is a misleading tool for performance improvements here. [22:13] The key thing is, how much code do we load *doing a users operation* [22:13] and how much code do we *use* to do that operation [22:14] lifeless: My objective is to get those things to only import after I have got a qbzr window up [22:15] lifeless: I know it's just delaying the inevitable... [22:16] lifeless: I've made some progress. I can now import bzrlib.branch with out importing bzrlib.repofmt.pack_repo :-) [22:17] ugh, just had bzr revert --forget-merge still leave my sandbox hosed (due to conflicts) [22:17] I would expect all the conflicts to get washed away by the revert [22:17] the difference is stuff we can work on [22:18] GaryvdM: how do users invoke qbzr ? [22:18] lifeless: Either the command line, or tbzr, or bzr explorer [22:18] details! [22:18] gimme gimme details [22:19] bzr qlog [22:19] ok [22:19] so [22:19] how do you feel about 'qbzr log' [22:20] lifeless: hmm - I don't know [22:21] lifeless: I'll think about that. [22:21] that would make it trivial to avoid builtins.py - you wouldn't want all the bzr commands loaded *anyway* [22:21] and similarly errors.py would only need commands.py and options.py to be audited [22:22] a small tweak to the command lookup invocation code in your frontend would make 'qbzr log' load 'qlog' as the command object [22:22] and you can register the stock bzr command providers after you're in your mainloop [22:23] [if you want them at all, that is] [22:23] if you're not calling into cmd_foo objects, then you don't need to register them *at all* [22:23] lifeless: I don't think builtins is a problem - I'll check [22:24] lifeless: The other way to solve the problem is a central hook registry as per mailing list discussion. [22:25] that won't solve the problem [22:25] builtins.py, which you mentioned at :53 is *already* demand loaded by hooks [22:26] you'll get precisely 0.0 time saves from hook infrastructure changes for builtins.py [22:27] TresEquis, I think bzr detects text conflicts from the markers in the files. revert --forget-merge doesn't touch the working tree, so the conflicts would remain [22:27] TresEquis: 'bzr revert' - resets files and merge info [22:27] TresEquis: 'bzr revert .' - rests just files [22:28] TresEquis: 'bzr revert --forget-merges' - resets just merge info [22:28] lifeless: ok - sorry the builtins comment was just an observation. The bigger problem is plugins importing bzrlib.branch to register hook. [22:28] GaryvdM: thats not a problem for the command line [22:29] lifeless: yes [22:29] GaryvdM: And there is a lot of stuff in branch.py we should move into a format package [22:29] like we did for repository [22:29] that would make branch.py cheaper [22:30] not saying that the hook changes might help [22:30] but for branch.py it only defers stuff [22:30] better to avoid it completely; and we have 4 formats or so, only need the code for one. [22:30] lifeless: Yes, thats what I've been trying to do (make import bzrlib.branch cheaper) (maybe with the wrong approach) [22:31] lifeless: thanks, that helps [22:33] GaryvdM: I'd like to see the following made cheaper "using a branch" [22:33] GaryvdM: think whole-operation costs, not import costs. [22:33] that would benefit *everything* [22:33] lifeless: ack [22:34] * lifeless hands the furball back [22:34] http://bazaar.launchpad.net/~garyvdm/bzr/delay_imports/revision/5276 [22:36] lifeless: ^ that makes import bzrlib.branch not import bzrlib.repofmt.pack_repo [22:38] jon$yd [22:39] darn - wrong window [22:39] lol [22:41] time to change lots of passwords... [22:46] GaryvdM: To different things, this time. [22:46] exarkun: My brain wont cope with that [22:46] GaryvdM: That's okay. Use technology. [22:47] exarkun: Important things like bank are different [23:13] How precisely would I use the iter_bugs function in revision.py? [23:13] I'd like access to the bug URL's for a revision in a post-commit hook. [23:22] I am having trouble using iter_bugs() in revision.py... [23:23] yes? [23:24] lifeless: I just tested, and what I've done makes bzr status import less. (I'm not sure what exactly yet. It quite hard to compare 2 profile-imports) [23:25] GaryvdM: I'm not really all that interested in profile-imports [23:25] GaryvdM: I'm interested in 'time bzr st' [23:26] ok [23:26] with (say) a 20K file tree [23:26] or 100K if your machine is too fast to detect changes on 20K [23:26] GaryvdM: profile imports and similar are tools to direct performance effort, but they are poor proxies for actual time-spent. [23:27] GaryvdM: remember that importing all of bzr and plugins etc on modern machines is < 0.5 seconds [23:28] GaryvdM: oh also, if working on just getting-started speed, also time bzr st on very small trees [23:28] you'll have some chance of making the import time dominate [23:28] lifeless: yes - I've been timing bzr st on small trees, but not large trees [23:29] the risk with large trees will be near-zero if you're not changing code in loops [23:29] but I don't know what you're doing, so I mention it to make sure you're aware of the space we've optimised status within [23:29] lifeless: I'm also testing with cold cache, and warm cache [23:30] yes [23:35] jelmer: have you seen hydrazine? [23:36] lifeless: yes [23:36] I'd love it if you use it [23:36] because we could start generalising and pulling its features up into lp proper [23:37] you don't have to [23:37] just saying [23:38] lifeless: I do use it, I contributed some trivial fixes IIRC :-) [23:39] jelmer: ah! perhaps you have a stale branch :) [23:39] lifeless: which features are you thinking of though? [23:39] I've mostly used bugclient so far [23:39] feed-pqm [23:41] hi jam [23:41] hi lifeless, GaryvdM, jelmer [23:41] hey [23:42] Hi poolie [23:54] How come doing a status on a 2a branch imports xml code. I thought that 2a used bencode rather than xml. [23:55] * GaryvdM sees if making that lazy makes a difference. [23:58] GaryvdM: better to not load it, than to make it lazy [23:58] GaryvdM: lazy loading has given us some really nasty structures