[02:19] spiv: ping [02:19] spiv: do we still exit-hard from bzr? and if we do, does that run finally blocks. [02:23] lifeless: we do [02:23] lifeless: but we do it at the top level, i.e. in the 'bzr' script [02:24] lifeless: so there won't be any finally blocks on the call stack, because the call stack will only have one frame on it :) [02:25] (There may be finally blocks in generators that haven't run, but those would be unlikely to be run as a result of final garbage collection anyway) [02:25] ok cool [02:25] I wants a review from you [02:26] (waiting for LP API's) [02:26] and bzr [02:26] \o/ [02:27] oh darn. forgot to merge trunk [02:27] I'll do that after, it will be just NEWS to move stuff to the right section [02:28] spiv: https://code.edge.launchpad.net/~lifeless/bzr/fix-terminal-spew/+merge/28024 [02:28] Will take a look, thanks. [02:28] thank you [02:37] I guess for correctness, now I've seen that, I really should grab sys.info etc [02:37] and pass it down [02:37] it wasn't obvious that that should be done in Aaron's patch, though the issue still existed [02:37] I'm inclined to not bother until we'd behave differently in an __exit__ call thought. [03:40] spiv: I'd like to land the cleanup stuff soonish :) === naoki is now known as naoki-away [03:52] lifeless: just finishing review :P [03:54] lifeless: just sent [03:55] thanks [04:01] so [04:01] DebugMedium [04:01] I mean [04:01] _DebugCounter [04:05] spiv: turtles all the way down [04:07] context managers have all the same issues as cleanups :) [04:09] ohhh nice [04:09] I can use this to make the test log handling better. [04:09] lifeless: tangentially: https://bugs.edge.launchpad.net/launchpad-code/+bug/596726 [04:09] Launchpad bug 596726 in Launchpad Bazaar Integration "Poor support for merge proposals superseded by different branch (affected: 1, heat: 6)" [Undecided,New] [04:09] thanks [04:10] I was asking in lp-dev earlier about it [04:10] lifeless: turtles all the way down, but some of those turtles are in shark-infested waters ;) [04:11] I've been meaning to file a bug about that for a while, having a contemporary example to point at was just enough of a spur to make me to it :) [04:12] :) [04:12] so [04:12] you can read my mails [04:12] but top level [04:12] - test log support is the same logic needed to make this object better [04:12] - it looks like a cleanup stack to me [04:12] except for deprecation warnings, they are special. [04:13] I don't think you can reenable them, I mean. [04:13] but I don't want to increase scope more than needed [04:13] Hmm, cleanup stack does fit nicely. === naoki-away is now known as naoki [04:13] It is a pretty large scope creep for this patch. [04:14] I think I'll do a minimal job now and more in a separate patch this avo [04:14] My suspicion is that in practice the _DebugCounter's weakref callback will trigger early enough to make the atexit irrelevant [04:14] We should either fix it [04:14] or delete it [04:14] I'm happy to fix it [04:15] But I'd want to do some interactive testing or something to be confident about that, rather than just cross our fingers :) [04:15] IIRC, and I might not, the atexit was best-effort paranoia, but the goal was that it wouldn't be triggered. [04:16] we almost certainly lead ssh processes if the atexit triggers [04:16] leak [04:16] If a bzrlib-wide cleanup stack existed then that would fit much better than atexit :) [04:16] I guess you'd make BzrLibraryState an ObjectWithCleanups? [04:17] yes [04:17] Cool. I was a bit unsure about the value of this change initially, but I'm totally sold now :) [04:18] Btw, you're right about the implicit None return, I think that would propagate the way we want. It's nice that it defaults like that. [04:19] I'd forgotten about that :) [04:19] I've added [04:19] return False # propogate exceptions. [04:19] for clarity [04:20] and, I can start adding tests with just a little more work. [04:20] hmm I think I want to put this in a new module soon [04:23] There is a 'bzr serve' command - is there some incredibly awesome bzr server daemon that might make life for my code server management easier? [04:24] spiv: actually no; I'll decorate. [04:24] spiv: because circular imports. [04:25] lifeless: whee [04:26] random query; say I've got an integration branch, w/ tags for specific releases. say said branch has moved on from 0.1, but I need to cut a 0.1.1 [04:26] Is 'bzr serve' for a server with a single user that holds all the branches and access is granted to anyone? [04:27] I build the changes up, and the new tag in a branch off of 0.1. what exactly is the resultant graph if I try to merge it back? will the tag that gets pulled in actually include the >0.1 changes w/in that branch, or properly be just hte 0.1->0.1.1 branch to the side that occured? [04:27] 'bzr serve' doesn't (yet) do any sort of access control. [04:27] It leaves that to the OS. [04:27] ferringb: I don't quite understand the question [04:27] (well, it restricts access to files inside the directory given to --directory, but aside from that) [04:27] spiv: I'll be extremely excited when it can - that's coming... next week? [04:28] MTecknology: ha, if only :) [04:28] lifeless: possibly because I'm just confusing myself ;) [04:28] spiv: thanks [04:28] MTecknology: not coming soon, sadly [04:28] MTecknology: its not on the roadmap at all [04:29] MTecknology: we'd accept a tasteful patch, I'm sure :) - why do you need it? [04:29] lifeless: ok. got a branch releases are cut from- specifically releases from tag's, right? said branch is already well past 0.1... I need to cut a 0.1.1, aka just minor bugfixes... so I build out a 0.1.1 branch, including the tag. [04:29] We may tackle it as part of the 3.0 UI revamp, but even there it's not a great priority. [04:29] lifeless: when I merge it back to the central branch, the 0.1.1 tag will point at just the changeset for 0.1.1? or will it be those changes for 0.1.1 including the other crap in the main branch? [04:29] * ferringb figures it'll behave, but is just checking [04:30] spiv: http://pastebin.com/8cC31j76 [04:30] ferringb: perhaps if you sketched this in bzr commands I'd understand :) [04:31] like [04:31] lifeless: right now I have different user accounts for each team - It's getting kind of messy - not that managing it is hard - I made a plugin to make it easier too [04:31] MTecknology: as lifeless says, we'd welcome a patch for it, we certainly aren't opposed to the concept, but it isn't work we're planning to do ourselves any time soon. [04:31] bzr branch -r 0.1 trunk 0.1 [04:31] cd 0.1 [04:31] do stuff [04:31] bzr commit -m '0.1.1 [04:31] bzr tag 0.1.1 [04:31] cd ../trunk [04:31] bzr merge ../0.1.1 [04:31] bzr commit -m 'merge 0.1.1 into trunk' [04:32] ferringb: ^ is that what you mean ? [04:32] spiv: I think I'm committed to a little too much to learn python right now - but I can put this on the list for when i do learn it [04:32] lifeless: integration ==> more like 0.2, ok? bzr branch integration -r tag:0.1 mine-0.1.1; cd mine-0.1.1; set of bzr merges/commits; bzr tag 0.1.1;cd ../integration;bzr merge ../mine-0.1.1 [04:32] sure [04:32] ok so bzr log -r tag:0.1.1 [04:32] in integration [04:32] lifeless: so with that setup, having done that, if I go an do bzr branch integration -r tag:0.1.1 ; it will come through as just that side branches changes, correct? [04:32] yes [04:33] the tag won't change the revision it points at when it gets copied by a merge [04:33] you need to explicitly run 'tag' again to change the revision a tag points at. [04:33] yep [04:34] just verifying. mostly it's the fact that it's kind of retroactively inserting a dead branch into the target's history is all [04:34] lifeless: +1, although separately we should consider what to do about e.g. SFTPLock.__del__ and other __del__ methods, that in principle could trigger any time. [04:34] bad phrasing, but that's where I was curious if bzr would behave properly- haven't tried this yet with it. [04:34] spiv: I'm adding some docs [04:34] lifeless: and SFTPLock.__del__ at elast expects trace.warning to work [04:34] ferringb: no worries; I wanted to be sure I answered the right question:) [04:35] * ferringb wonders why you're not using a weakref finalizer there [04:35] ferringb: we call os._exit() [04:35] ferringb: yes, that would be better, although for the specific issue at hand it won't help [04:35] ferringb: to avoid the very slow gc of (potentially) a GB or more of memory [04:35] figured, more I spotted the __del__ [04:35] oh right [04:35] http://www.pkgcore.org/trac/pkgcore/browser/snakeoil/snakeoil/weakrefs.py <-- might be of interest; specifically the metaclass [04:36] we are largely deleting the __del)) methods [04:36] been experimenting with it lately... basically is the full power of __del__ w/out any of the issues, although it doesn't play perfectly w/ any isinstance checks people use due to it slipping a proxy in [04:36] lifeless: for that specific flavour of "warn if __del__ happens on unclean object", I think a "warn_if_bzrlib_still_initialized" method would be an ok solution [04:37] the code there is a bit rough also, mainly since I'm still playing with it to verify there isn't some insane corner case that causes me holy hell [04:37] it's not critical if that warning happens in the window between "tear down bzrlib" and "stop the VM" [04:38] lifeless: re: moving away from __del__... same, there just have been several cases where I really needed something like that, and it was way too much of a mess to write a weakref finalizer for each instance. hence coming up w/ the full proxy/metaclass trick instead. [04:38] spiv: well, it could hold onto the library state [04:41] re: that metaclass trick, I'd be curious also if either of you see a flaw with it. there are some variants (most of which require you to specify exactly what the finalizer will access), thus implementing another (doesn't need specifying what is needed for finalizing). [04:43] ferringb: Sorry, that code is a bit too gnarly for me to consider properly right at the moment [04:44] ferringb: it does sound like an interesting idea... although at the extreme if a __del__ method could be mechanically turned into a weakref callback without any downsides I'd hope that Python would do that automatically ;) [04:45] it can't fully transparently, technically [04:46] roughly... snakeoil has a rather extreme proxy implementation. it lies it's ass off completely- matches special methods, methods, etc. you can spot that the proxy is in use, but it's only in a couple of cpython level cases. [04:46] thats part of the key trick here. [04:47] Right. There are edge-cases like how __del__ can resurrect the object. [04:47] * ferringb notes proxy isn't even getting to that [04:47] the trick here is that people are using the proxy itself [04:47] when the proxy falls out of memory, the weakref gets fired, which finalizes the proxy target [04:48] said finalization punts the strong refs holding it in memory in the process [04:48] you could do a resurrect I suspect in this case, but it would be hard to actually pull it off by it's nature. when the weakref fires, the bugger is pretty well dead in every scenario I can come up with [04:50] spiv: reason for the special method proxying namely comes down to that the vm would behave differently w/ the proxy... consider if the proxy target has an __iadd__ or something. no special method on the proxy (which the vm decides on it's own), it takes a different route [04:50] hence this particular proxy scanning the target class and making a class w/ all of the necessary special methods in place [04:51] That's what I mean: there's a fundamental difference in capability there between __del__ and a weakref callback, so there's a limit to what you can do to automatically replace one with the other. [04:51] resurrection is about the only thing I can think of that is missing. [04:52] literally. because all that's tracked is the proxy falling away (which has zero data), when it goes out of memory it just turns around and tells the real object "hey asswipe, pretend like a __del__ just got ran on ya" (specifically real_object.__finalizer__(), which is whatever __del__ method was defined... moved to said name to avoid the known gc issues w/ __del__) [04:54] rephrasing... resurrection of the proxy itself. the real instance (the target) still is strong ref'ed at that point. [04:54] spiv: roughly that answer your concern? [04:56] spiv: incremental eyeball please; I think this is sufficient to land. rev 5231 [04:56] ferringb: possibly! It's a bit much to digest when I'm about to go get lunch :) [04:56] lifeless: ok [04:57] spiv: well, if it's of interest feel free to poke me/yell. may not be in here, but am looking to get a second set of high level eyes on that one [04:57] spiv: ok, its up now [04:57] spiv: I thought it had gone, but wifi glitched it [04:57] * ferringb notes he needs to clean up the implementation and flesh out tests in fully also, but so far it's behaving exactly as expected [04:58] "We hope you enjoy this library." Aw :) [04:59] spiv: :) [04:59] lifeless: typo: "my looking it up" should be "by ..." in __init__.py [05:00] thanks [05:00] 12 lines of comment => global variables suck [05:01] lifeless: typo: "needs to be alled" should be "... called", same file [05:02] bah [05:02] the table here is too high [05:02] lifeless: why the switch to making the caller of initialize have to call __enter__ manually? [05:02] spiv: I wrote some docs that looked odd [05:02] spiv: so I changed them to be nice and then altered the code to match [05:03] bzrlib.initialize is nicer if you can say [05:03] with bzrlib.initialize() as bzrstate: [05:03] *nod* [05:03] rather than having to lookup the actual class in use to use the with statement [05:03] as we're changing the contract anyway [05:04] I thought that might be it. Seems reasonable, but I wanted to make sure I understood. [05:04] (to must call __exit__ or your log statements are not guaranteed) [05:04] I figured adding in 'please call __enter__' wasn't much worse. [05:04] which reminds me [05:04] we didn't make that explicit in NEWS [05:05] lifeless: aside from those two typos in comments, all good. Merge at will! [05:05] Oh yeah, feel free to highlight this more in NEWS too :) [05:05] gimme 2 secs [05:06] I'll pastebin and you can shoo to eat [05:08] http://pastebin.com/2tXXy0v9 [05:08] thats the full NEWS diff now [05:09] spiv: ^ [05:09] I'll assume you're off eating and land witha promise to tweak later if needed, in 5 or so [05:12] lifeless: +1 [05:17] thanks! [05:48] parthm: hi [05:51] lifeless: hi [05:57] parthm: do you want to talk about the regex compilation stuff [05:58] lifeless: my personal preference is towards an error based approach. [05:58] great [05:58] lifeless: i am ok with warnings for operations like 'st' but specifically 'add' is something i would really prefer to error out. [05:58] it sort of reminds me of bug #549310 [05:58] Launchpad bug 549310 in Bazaar "bzr should not try to guess username but require setting it with whoami (affected: 1, heat: 6)" [Wishlist,Fix released] https://launchpad.net/bugs/549310 [05:58] yes [05:59] I think we should just error across the board, because if the file is damaged, nothing is going to be behaving sensibly anyway [05:59] I've seen error modes in other programs that spew a bunch of junk [05:59] and then say 'oh, XXX is wrong' [05:59] and users just get flummoxed at the sheer volume of info attacking them [06:00] lifeless: i agree. i was just typing out my opinion on the mp. hopefully we can have some discussion there and come to an agreement. [06:01] i think it may be best to keep the discussion on the mp (rather than the mailing list) as its one of those bikeshed topics :) [06:01] well [06:02] I think it can go either way [06:02] I can give you a detailed review [06:02] lifeless: do you prefer the mailing list? [06:02] but it seems to me that we can use much clearer code if we do errors; and its much more visually clear to the user as well [06:02] parthm: MP is fine. [06:03] I'm going to take a break and organise dinner ingredients and so forth [06:03] I'll pop in in a bit to discuss where we go in detail [06:04] lifeless: sure. i will update the mp with my comment. i think you and i are in agreement. maybe with some more discussion with jam, poolie and vila we can all agree on one thing :) [06:07] its been stalled for a bit [06:07] I'm patch pilot this week [06:07] so I want to [06:08] - unblock it [06:08] - land something that is clearly better than what we have [06:08] what we have is backtraces [06:08] changing that to a single line or so error will be a clear improvement [06:08] it doesn't preclude a warning based approach in future [06:09] but neither is it contingent on us deciding that we don't want a warning based approach. [06:09] that is to say, we don't actually need agreement here, because it can be changed in the future and we're not making it much different to the status quo [06:10] uhm by agreement I mean 'capital A Agreement' if that makes sense [06:10] we do need agreement that its an improvement over the status quo, but I think that that is triival [06:12] lifeless: yes. both (warning or error) are an improvement over the current situation. i can cleanup the error based patch and put it up for review. [06:13] lifeless: i have put up my thoughts on the mp. https://code.edge.launchpad.net/~parthm/bzr/300062-invalid-pattern-warnings/+merge/26809 [07:20] how can i specify the last revision of a branch? HEAD, tip , call it whatever bzr help revisionspec talks about a lot of stuff but i can't find this. [07:21] hi all. is this traceback something that would be worth reporting as a bug? http://paste.ubuntu.com/452801/ (i included the yum install, so you can see where the packages are from) [07:21] bzr has printed an actual error, but then backtraced anyway [07:21] chx: -1 [07:21] -1 ??? [07:22] that's like 1 revision before HEAD, no? [07:22] (i suspect its died because its on nfs, but thats by the by) [07:23] chx: it's HEAD [07:23] chx: e.g. compare 'bzr log --line -r -1' with 'bzr log --line | head -1' [07:24] chx: FWIW, 'bzr help revisionspec' tries to say so explicitly in the 'revno:' section [07:25] Bambi_BOFH: yes, except that I happen to know this bug is fixed in 2.1.2 :) [07:25] Bambi_BOFH: but any time bzr gives a traceback is a bug [07:26] Bambi_BOFH: (sometimes it's a bug in a plugin rather than bzr itself, but still a bug, and if you're unsure bzr devs are happy to reassign the bug report to the appropriate plugin for you) [07:26] spiv: fab! fixed before i found it, the way i like bugs. i'll branch onto local disk until the package is updated. thanks very much :) [07:26] Bambi_BOFH: you're welcome :) [07:27] :) [07:28] spiv: hrm, my brain is too convoluted for 'last' [07:29] sorry about ask-and-run, but back to work ;) *waves* [07:43] hi all ! [07:44] hiya === radoe_ is now known as radoe [08:11] sheesh, get away you [08:11] ? [08:11] xchat spurious launch [08:12] lifeless: the test suite run on windows in 1h10 now, onlya couple of failures left, not related to the leaks (but masked by them previously) [08:12] cool [08:12] Woo! [08:13] I no longer fail a test that encounter a hung thread (since there are few enough now to let the test suite complete), but I'd like some way to collect the info and report about them [08:13] addDetails [08:13] on the test [08:13] yeah, you mentioned that, how will they be displayed ? [08:14] and in the result look for a specific name || mime type [08:14] aggregate the info that matches, print in stopTestRun [08:14] I love it when API's come together [08:14] vila: it will look however you want it to [08:14] and is there some way to collect them to display a nice total in the end..ohh, I need to look at that then [08:15] but can these summaries be carried by subunit too ? [08:15] and any idea about making them apparent in hudson ? (And are there different steps/features needed ?) [08:16] and where is lp-loom-propose so I can run a single command and have multiple mp with their pre-requisite branch set ? :-P [08:17] addDetails will be carried by subunit [08:17] hudson - defer that, possibly depends on how much effort we're willing to put in :) [08:17] for looms I think one large MP may make more sense most of the time [08:18] but certainly you should file a bug on bzr-loom now, saying that it doesn't do what you need with lp-propose - set a task on bzr too saying that lp-propose needs appropriate extension points for loom [08:19] cough, the whole diff is now ~6000 lines, nobody will review that this century :-) [08:19] there are some heavy cleanups there (heavy in lines, not intent, aka trivial) [08:19] vila: 'most of the time' [08:19] yeah, kidding ;) [08:20] vila: I don't mean one diff btw [08:20] I know, that's what I do generally [08:20] vila: N diffs, one merge proposal. [08:20] oooohhhh [08:20] lifeless: but without your annotated review into place... [08:20] what do you think ? [08:20] lifeless: N diffs, one merge proposal is an interesting idea. [08:21] N diffs will be nice, but some diffs overlap [08:21] lifeless: I suspect that for sufficiently large work you might end up with more than 1 conversation, though [08:21] lifeless: although it's hard to know without the experience of trying it :) [08:22] I'm sure you will [08:22] yup, I *expect* multiple discussions on the leaking-tests loom [08:22] right now there is no room for experimenting [08:22] At the same time, N unlinked conversations is unlikely to be a good match either. [08:22] so we need to write some code ;) [08:23] It's interesting, actually. [08:23] lifeless: regarding the up-thread commits in a loom, you said: don't commit until a conflict occurs (or something close enough) right ? [08:23] near enough yes [08:24] though this week I'm PP, not expecting to do much loom loving [08:24] lifeless: does that mean you do merges with non-conflicted threads as additional parents ? [08:24] lifeless: just talking :) [08:24] vila: uhh [08:24] I don't know, does it ? [08:25] lifeless: not today, but how do you leave a clean committed tree to work with ? [08:25] I bet for many things I do that I can a) think of a nice split into N related diffs for review to make the pieces digestible for reviewrs, and b) that I could also guess which parts would tend to generate the most discussion. And I bet the boundaries of a) and b) don't exactly line up. [08:25] spiv: split more :) [08:26] vila: you don't [08:26] lifeless: you mean you leave the tree uncommitted ? [08:26] vila: needs to subtract merged-and-not-committed from status/diff and commit [08:26] vila: at some point splitting harms reviewability because you lose the sense of how the piece tie together [08:26] spiv: that's why I want a graph rather than a list of threads [08:27] vila: alternatively, phrased, the tree basis need not match any thread tip, we'd get a commit, then rebase the commit to the thread they committed to. [08:27] vila: or something. [08:27] vila: partly that might be solved by a nice way for a reviewer to flip between viewing a piece by itself and viewing it in the integrated whole, or possibly steps in between [08:27] vila: I expect to find many bugs and limitations doing this [08:27] spiv: certainly [08:27] vila: I want a graph of threads too, but I think that's tangential [08:28] spiv: I really don't like the UI that I expect that to generate. [08:28] lifeless: I'm pretty sure there should be a solution that doesn't involve rebase [08:28] vila: rebase isn't intrinsically wrong [08:28] vila: e.g. sometimes you refactor something in a very low level of the patch stack/graph driven by a need near the top of the stack [08:28] avoiding it because its rebase is a mistake [08:29] vila: the discussion of "I think this bit should be done differently" really wants to have as context all of that (but still somehow with as little of the rest of the patch stack/graph as possible, to minimise noise) [08:29] lifeless: I fear the UI too, but the model is just too irresitably nice I think. [08:29] I'm not against rebase, but I think it's an incomplete concept. Good enough to use in many cases but being able to filter the ancestry in various parts of the UI should provide the best of both worlds [08:30] vila: filtering non-intentional ancestry is a hack, I think [08:30] well, the UI should be s/up-thread/go-thread/ [08:30] lifeless: My intuition is that a good UI is tractable, partly because the graphs people want aren't going to be *that* complex. [08:30] vila: the reason looms are so noisy is because I once held the view that filtering non-intentional changes wsa sufficient [08:31] my intuition there is that the loom history should be displayed nicely in qlog (whether it can do that today is not part of this discussion :) [08:32] lifeless: It might be interesting to try a limited graph: where you can at have N threads in parallel, but they must all join together again at the next level. [08:32] sounds more like a desire than intuition :) [08:32] spiv: loom supports that today [08:32] lifeless: technically, yes [08:32] spiv: albeit manually. [08:32] lifeless: the UI doesn't make it very usable [08:32] lifeless: how so ? [08:32] vila: intuition is a guess [08:33] lifeless: but I think that's easily 90% of the cases people (well, me at least :) want more-than-a-linear-stack for :) [08:33] yes, a guess waiting for concrete steps to become real :) [08:33] spiv: I still haven't heard a case that is uniquely solved by graph that my less-merges stack isn't entirely suitable for [08:34] vila: still, if you replace 'intuition' in your sentence about qlog, with guess, it doesn't parse. [08:34] spiv, lifeless: Indeed the leaking-tests have threads to prepare a feature and parallel threads that uses this feature in different areas, each of them worth reviewing independently [08:34] spiv: and I'm sure that the UI for a stack is so much nicer than a graph :) [08:35] spiv: if there was a compelling 'I need a graph' argument, I'd be in like a flash [08:35] s/should/could/,, I meant, each thread should be a vertical line and the whole graph shows when each thread have been taken into account in upper threads [08:35] spiv: there's only one graph based patch manager out there that I know of - topgit - and I hear interesting things about its usability. [08:36] a stack is fine as long as each node can be a loom too :) [08:36] lifeless: can you point me to the less-merges stack parts? [08:36] spiv: no code yet [08:36] spiv: only the discussions at UDS + various back of head thoughts [08:37] spiv: I've been mulling on this a while, but not written it up. [08:37] I should [08:37] lifeless: part of what I'm after UI-wise is to make it hard to accidentally mix threads that I as a user consider parallel, and to have that situation shown nicely in show-loom etc [08:37] lifeless: please do :) [08:37] spiv: look back a few days in this channel [08:37] I laid out the technical bits to vila [08:38] 'vila.*lifeless.*loom' should be a good search [08:38] spiv: the basic idea is to only record a merge during up-thread when a conflict occurs, and then only with the causative branch. [08:39] spiv: to give someone the full set of merged branches together when they're working in the working tree, using some sleight of hand - e.g. a hidden temporary commit. [08:39] lifeless: that would be a nice incremental improvement [08:39] the two things are tied together [08:39] lifeless: but I don't think that's enough to really nicely support what I'm thinking of [08:39] haaa, hidden commit, ok [08:40] lifeless: I don't have a concrete use case in front of me to drive my opinion at the moment, though, so it's hard to be sure if I'm right or not :) [08:40] lifeless: I need to get back in the habit of using looms regularly :/ [08:41] lifeless: but part of the reason I fell out of the habit was the mental friction with forcing a mental DAG of work into a linear stack [08:41] spiv: so, do you routinely have 3+ branches on disk, merged non-stacklike together ? [08:42] lifeless: I routinely don't separate out the work at all, because I'm not using looms. I make exceptions for obviously unrelated bits :) [08:42] routinely, no, but I currently have a loom with 8 threads, 3 of them being parallel [08:44] lifeless: my recollection from when I was using looms is that I tended to want trunk->something, then something->X, something->Y, something->Z, then [X,Y,Z]->integrated, and maybe integrated->put-icing-on-the-feature-cake :) [08:45] spiv: hehe, very close to my current loom :) [08:46] spiv: something == ServerInAThread, X == http-leaks, Y == smart server leaks, Z == sftp leaks, ice-on-cake == socket leaks aka transport.disconnect [08:46] X, Y and Z being independent from each other [08:47] spiv: does ->X mean 'X builds on something' [08:47] spiv: or 'something needs X' [08:48] spiv: by the way, regarding smart server, the tests use a TCP server (no ssh) and seem to create a lot of different (independent) connections, does that ring a bell ? [08:48] lifeless: "builds on" [08:49] vila: what does "the tests" refer to here? [08:49] spiv: the observation is that there are a lot of independent threads created (one for each connection) which means multiple client connections not sharing a single connection [08:49] spiv: so, in the form I'm describing you would do the following: [08:49] vila: generally speaking each test that uses a smart server makes its own server, and thus its own client connection when get_transport is called [08:49] spiv: AFAICS all the tests that use SmartTCPServer_for_testing and its variants [08:49] spiv: sitting on something; hack hack hack; bzr commit --to-thread:X [08:49] spiv: which would: [08:50] spiv: I'm talking about a single server receiving multiple connections (~10/20) for a single tests [08:50] test, no s [08:50] vila: I wouldn't expect that, no [08:50] spiv: ok, good to know, we may have a bug or two there then [08:51] - make a thread X based on trunk; get the diff against the synthetic base for tree:, confirm the resulting diff, save it. [08:51] once you have X [08:51] vila: unless those tests are actually constructing ~10-20 transports from scratch, rather than reusing them [08:51] spiv: the test code itself doesn't seem to support this idea (and I didn't observe that for other servers) [08:51] (i.e. calling get_transport a lot, or passing URLs rather than transports around without also passing possible_transports, etc) [08:52] spiv: but ssh may mask that somwhow [08:52] then the diff for the next --to-thread would be checked for conflicts against both X and trunk [08:52] vila: very few tests involve SSH [08:52] spiv: if you exclude sftp, yes [08:52] the one after that against X, Y and trunk, etc (probably by walking back down till it gets a hit) [08:53] vila: I do, because we are talking about smart server tests :P [08:53] spiv: sure, I was making sure we were still on the page [08:54] spiv: essentially, to model it simply, I'm talking about keeping all the threads integrated all the time, in a floating set of rebased revisions. [08:54] but never logging or working directly with them in the UI [08:54] lifeless: I'm not immediately grasping this concept, or how I'd use it. [08:54] lifeless: which may be a good or bad sign ;) [08:55] lifeless: it's close to the mental model I've built since our last discussion [08:55] lifeless: give that it's almost EOD here, probably best to write it up properly somewhere rather than try to clarify it for me on IRC :) [08:55] (close because it doesn't run yet even in my head ;) [08:56] and that I'm unclear about which commits should be part of the final result or filtered out or something [08:57] But I'm sold on the idea that each thread ends up with a cleaner history than today === oubiwann is now known as away [08:58] lifeless: perhaps I should counter with a proper proposal of the UI I'm thinking of, I *think* it wouldn't be very complex at all, but writing it up will help me find out if I'm missing something. [08:59] spiv: writing it up will require some untinterrupted tuit time [08:59] spiv: so next week, perhaps [08:59] spiv: that said, I would love to see a good description of how you see a graph based one working [09:00] spiv: I would like to note two things of particular concern I'd be looking to understand [09:00] eeerk, AttributeError: 'ObjectWithCleanups' object has no attribute 'addCleanup' with bzr.dev@5310 py2.6.0 on osx [09:00] merge bases [09:00] vila: 'add_cleanup' is the name... [09:00] oh wow [09:00] So, um, wow :) [09:00] htf did that pass pqm [09:00] what lifeless said. [09:00] I bet I know [09:00] smart/medium.py line 506 [09:01] I bet _DebugCounter or whatever it is called [09:01] isn't tested. [09:01] lifeless: exactly [09:01] spiv: so merge bases - how do we avoid lots of criss crosses [09:02] spiv: CLI ui representation of the graph - including a sensible 'merge' or some such [09:02] http://paste.ubuntu.com/452826 [09:02] not that we should limit ourselves to cli [09:02] but I'd like usable on CLI, for loom, because Ubuntu devs loves their consoles [09:03] s/addCleanup/add_cleanup/ fixes it [09:03] yes [09:03] vila: right. +1 land it :) [09:03] whats that saying about untested code? [09:03] +1 on using addCleanup instead :) [09:03] lifeless: In my head I think I have good answer for the CLI ui [09:04] lifeless: not sure why you expect more criss-crosses, though [09:04] lifeless: that we should thank our testers ? (NOT !) :) [09:05] spiv: I've simulated DAGs by hand [09:05] spiv: and universally had equal-distant common ancestors along each path, leading to criss-cross complains and merge hell [09:09] lifeless: interesting [09:10] lifeless: I'll have to chew on that. Thanks! [09:12] spiv: sent to pqm [09:28] spiv: a posible explanation is - consider trunk->X, trunk->Y, (, Y -> something) [09:28] spiv: both X and Y are commonly one-commit on trunk [09:28] spiv: and clearly equally good the next time you merge trunk->something [12:53] greetings. i want to translate an open source application. can i use the bazaar + launchpad solution with ease ? [12:54] i have registered a SSH key and i'm really stuck - dunno what to do next [12:54] T_T [12:58] ask the proejct how they want patches submitted :) [14:02] Ooh, a way to reproduce https://bugs.edge.launchpad.net/bzr/+bug/522637 [14:02] Launchpad bug 522637 in Bazaar "BzrCheckError: Cannot add revision(s) to repository: missing referenced chk root keys (affected: 10, heat: 54)" [High,Confirmed] [14:10] is there any bzr-svn command to rationalise the cache on windows? [14:12] rationalise in what way? [14:15] remove the bits that aren't needed/used [14:21] You can probably use the sqlite3 command-line tool to VACUUM the cache database, I guess. [14:22] Well, to be pedantic, it's a cache, so none of it is *needed*... so you can just delete the svn-cache directory entirely ;) [14:23] I don't think there are any commands in the bzr-svn plugin for that. [14:23] File a bug asking for them, maybe? [14:23] * spiv -> zzz [14:26] :) [14:33] cbz: How do you define "bits that aren't needed"? [14:35] spiv: but it's only 08:30 === away is now known as oubiwann [15:05] How hard would it be to make a section in bzr that's available to anyone w/o setting up shared keys? === oubiwann is now known as away [15:29] hi guys. Just installed bazaar explorer on windows, and it wont launch [15:29] if I run `bzr explorer`, it says ERROR: No module named trace. You may need to install this Python library separately" === oubiwann is now known as oubiwann-away === oubiwann-away is now known as oubiwann [15:48] nvm I reinstalled the full package and it works. I'd like to get rid of tortoisebzr though [16:18] !info python-tracer | CaMason [16:18] CaMason: python-tracer (source: pytracer): Centralized trace management using sys.settrace. In component universe, is optional. Version 0.2.3-1 (lucid), package size 8 kB, installed size 104 kB [17:07] morning === deryck is now known as deryck[lunch] === nlisgo_ is now known as nlisgo [18:07] bbiab, taking lynne -> airport === oubiwann is now known as oubiwann-away === oubiwann-away is now known as oubiwann [18:29] broken link on http://doc.bazaar.canonical.com/migration/en/why-switch-to-bazaar.html "In the event that we’re wrong and another tool completely takes over, you can use fast-export to switch your code base across if and when another tool better meets your needs." [18:29] to http://doc.bazaar.canonical.com/migration/en/data-migration/fast-export.html === deryck[lunch] is now known as deryck [18:57] hi, i need some help with reverting to a previous revision: i reverted to a tagged revision, 3 revisions ago, but the files changed after that revision are listed as modified. shouldn't their content be reverted to that revision instead? [18:58] i used bzr revert -r tag:mytag [19:00] ah, ok ... so revert only reverts the file contents, but doesn't "undo" the revisions that followed. how do i "uncommit" each revision since that specific one? [19:02] never mind, got it. [19:04] grmpf. i uncommitted a few revisions, tried to do an upload, but bzr tells me that the branch and the uploaded tree have diverged, even if i use --full. am i missing something? [19:12] got it. one has to use --overwrite. [20:29] hey all [20:29] quick q [20:29] I can push a branch to LP fine, but how do I push something to something other than LP? [20:30] such as a webserver [20:32] jono, "bzr upload" will creates a working tree in the destination [20:32] ciss, so do I use bzr push or bzr upload? [20:32] what is the difference? [20:32] I just have a branch locally and I want to push it regularly to another machine [20:33] so someone else can pull from it [20:33] and we both have access to the same sftp destination [20:33] abentley: I hope the tweaks I made to your terminal spew patch are ok with you [20:33] lifeless, me too. [20:34] hah [20:34] jono: if you just want to share a branch via sftp, then ... do so [20:34] bzr push sftp://host/path [20:34] you might want to [20:34] bzr init-repo sftp://host/path/repo [20:34] first, but it isn't strictly necessary [20:34] ok cool [20:34] thanks! [20:36] abentley: I take it that means you haven't looked ? [20:36] lifeless, right. [20:36] kk [20:36] please do let me know before 2.2 final is released, I'll be happy to tweak further [20:37] andrew and I went over it with some care though, I'm fairly sure you'll approve [20:51] lifeless, actually, I do see at least one problem. The ContextManager protocol demands that you call __exit__ on the return value of __enter__, but you're calling it unconditionally on library_state. [20:57] abentley: oh! we must have misunderstood the protocol. [20:57] I followed what I saw you had done in the ui_factory [20:57] so both of the uses must be wrong [20:57] I'll read the context manager protocol PEP and submit a fixup branch [20:58] abentley: http://docs.python.org/reference/datamodel.html 3.4.10 says you call __enter__ and __exit__ on the same object [20:58] abentley: the return value of __enter__ is bound to the name used in the as clause [20:59] so the example I gave was wrong, but the code itself is fine [20:59] hmm, and __enter__ in both cases could usefully return self, for now. [21:00] thanks for calling that to attention [21:00] lifeless, you're right. [21:09] abentley: proposal proposed [21:11] lifeless, approved. [21:12] thanks [21:13] abentley: the draft patch you gave me for pqm was very useful [21:13] abentley: the api turned out to be rather more rabbit warren, but it got me started [21:14] lifeless, I'm glad. [21:23] lifeless: getting mixed up between "testr run --failing" and "testr failing" is very confusing :-) [21:23] james_w: I can imagine [21:24] james_w: we should fix that [21:24] show-failing or something would avoid it at least [21:29] james_w: testr st --failing ? [21:29] james_w: I dunno, having a direct simple command is noce too [21:29] james_w: perhaps testr run --auto [21:29] I would prefer testr show --failing to st [21:30] I would imagine st would be something like "104 tests, 56 failures, 4 skips" [21:30] yea [21:30] stats is pretty basic at the moment [21:30] heck, testr is pretty basic [23:01] lifeless: testr run --auto would loop by itself? [23:02] james_w: no, I meant auto as in 'automatically choose the tests to run' [23:02] james_w: so all tests if none are failing, or failures only if there are failures. [23:02] right [23:02] james_w: maybe that is what you meant by loop by itself [23:02] I was just thinking that a loop around that could be quite useful, depending on how long your testsuite took [23:03] inotify++ [23:03] + a background status window in your editor [23:03] for my fast testsuite projects a "run everything as fast as possible, then iterate over failing", in a pane of my terminal would be good [23:03] yeah [23:03] lifeless, i think requiring people to call __enter__ and __exit__ is a bit ugly in python2.4 code [23:04] plus some way to go from path -> test filter to run would be good for larger projects [23:04] james_w: yes, I'm looking forward to the new subunit discovery patch - you saw it needs tweaking right ? [23:04] yeah [23:04] just been distracted the last few days [23:05] poolie: It is a bit ugly. OTOH I don't know any python 2.4 library users other than loggerhead, and it supports being a plugin now as well. [23:05] any thoughts on a way to infer test patterns based on path in testr? [23:05] poolie: being a context manager is quite a bit nicer for python2.5 and up [23:05] might seed my thoughts for a flight sometime soon [23:05] mm and i guess showing that it's a context manager is worthwhile on 2.4 [23:05] james_w: please; be nice to be friendly for C etc [23:06] james_w: it is perhaps a general problem, and one that a separate tool should solve, testr could use that. Thats perhaps too fine grained: just offering food for thought [23:06] yeah, that's where I'm stuck. Would be easy to write a way to call a python function and pass the path, but that doesn't fit too well with .testr.conf [23:06] hmm, that would make it easier [23:07] perhaps something like urlconf from django if you know it? [23:07] james_w: I'm open to doing a plugin system for testr too [23:07] james_w: vaguely, but not intimately [23:07] mapping of regexes -> values, pick the tightest regex that matches [23:07] james_w: another related problem you might enjoy [23:08] james_w: 'I changed file FOO, what tests do I need to run' [23:08] plus a way to substitute groups from the match in to the value would be greaet [23:08] lifeless: ah, that's exactly the problem I'm considering :-) What were you thinking? [23:08] james_w: many people have stabbed at this problem; theres some prior art I can dig up in python space, but essentially we are perhaps wanting that top level contract [23:09] james_w: a database of call graphs (for python code). something similar for C (using gprof); write a interface, implement the languages we care about; profit. [23:09] james_w: the complex bit is that you need test run instrumentation tunneled through to the db [23:09] james_w: which perhaps subunit can help with. [23:10] that's more involved than I was envisaging [23:10] much more powerful and hands off, but... [23:10] james_w: precisely ;) [23:10] james_w: so, I've been building towards this for a while, finding good building blocks and making them nice. [23:10] james_w: like testr [23:11] yeah [23:11] james_w: I'd be delighted to have a regexp based approximation in testr [23:11] james_w: I'd just like it to have a contract which is fairly close to what one might want for an automated solution [23:12] path -> arguments for the test command was what I was thinking, would that fit? [23:12] jam: https://code.edge.launchpad.net/~lifeless/bzr/py3/+merge/28113 btw [23:12] james_w: command to get paths (e.g. bzr st); command to do paths->test id list as string or filename [23:12] james_w: perhaps [23:13] james_w: I suggest some experimentation [23:13] james_w: don't worry about code quality etc for now, just play around and see what tickles your fancy [23:13] yeah [23:14] I was thinking inotify, but yeah, that split would work ok [23:14] james_w: yes, we will want a way to specify the path[s] explicitly too, both for non-vcs cases and for manual control [23:14] inotify too [23:14] long as we define a sensible contract, one can write backends for inotify, bzr, etc etc as well as paths just being supplied on the command line [23:15] I wouldn't want "test id list" though, because I don't want to enumate tests at that level, unless testr had a way to enumerate tests too [23:15] james_w: testr works on enumerated tests fairly intrinsically [23:16] its how run --failing works: it filters the stream to get failure test ids, then uses that to construct the command line to run. [23:16] yeah, but I just want to say "given bzrlib/foo.py run bzrlib.tests.test_foo" [23:16] james_w: which is a wildcard on the test id [23:16] james_w: inside bzrlib [23:17] lifeless: ok, I thought you meant test id list in the -F sense: an exact list of tests to run [23:17] james_w: I did, and I can see the use for a wildcard here [23:17] ok [23:17] james_w: I think supporting both is useful [23:17] I'll try and take a first pass at this sometime [23:18] I have my head full of another problem right now though [23:18] naturally [23:18] feel free to braindump wishlist bugs [23:18] I don't mind 'it would be nice if frogs could jump [23:18] style bugs [23:18] Do they have to jump? Can they sort of sashay? [23:20] poolie: on context managers [23:21] poolie: we could provide friendly functions that call enter and exit, but I don't think its really a big deal [yet], and doing so may make the API ambiguous further down the track. [23:21] mm [23:21] i was wondering if it was worth doing the initialization at construction time [23:21] poolie: it is clearly documented, which offsets some of the ugliness in my mind [23:21] so that it matters less whether you call enter() [23:22] probably not worth it though [23:22] iirc this function is new in 2.2 anyhow [23:22] yes it is, new in 2.2b1 [23:22] poolie: that would be buggy I think, consider the fixture intent/use separation [23:23] what's the correspondance? [23:23] actually, bad analgoy [23:23] bah, analogy [23:24] anyhow, [23:24] a better one is perhaps, for testing it would be good to be able to poke at this quite precisely [23:24] and changing global variables in __init__ would likely make that tricky [23:24] i think if we're going to use a contextmgr, it really should be an idiomatic contextmgr [23:26] hah, - went to say 'affects me too' from the bug filing form on bug 421360 [23:26] Launchpad bug 421360 in Bazaar "switch won't let me switch with a pending merge (affected: 1, heat: 0)" [High,Confirmed] https://launchpad.net/bugs/421360 [23:26] and I filed it :P [23:38] poolie: https://code.edge.launchpad.net/~lifeless/bzr/encoding-option/+merge/28126 [23:53] poolie: I'd like to talk about the buffering patch some [23:53] on phone atm [23:53] sure [23:54] I mean, its not urgent, just I'd like to explore what we're doing in the area in a concentrated fashion :) [23:54] lifeless, what did you change? [23:55] in the encoding-option branch? NEWS - moved to right section, added a mention of the new option, and the years in the new file copyright statements were too broad