/srv/irclogs.ubuntu.com/2010/06/21/#bzr.txt

lifelessspiv: ping02:19
lifelessspiv: do we still exit-hard from bzr? and if we do, does that run finally blocks.02:19
spivlifeless: we do02:23
spivlifeless: but we do it at the top level, i.e. in the 'bzr' script02:23
spivlifeless: so there won't be any finally blocks on the call stack, because the call stack will only have one frame on it :)02:24
spiv(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
lifelessok cool02:25
lifelessI wants a review from you02:25
lifeless(waiting for LP API's)02:26
lifelessand bzr02:26
lifeless\o/02:26
lifelessoh darn. forgot to merge trunk02:27
lifelessI'll do that after, it will be just NEWS to move stuff to the right section02:27
lifelessspiv: https://code.edge.launchpad.net/~lifeless/bzr/fix-terminal-spew/+merge/2802402:28
spivWill take a look, thanks.02:28
lifelessthank you02:28
lifelessI guess for correctness, now I've seen that, I really should grab sys.info etc02:37
lifelessand pass it down02:37
lifelessit wasn't obvious that that should be done in Aaron's patch, though the issue still existed02:37
lifelessI'm inclined to not bother until we'd behave differently in an __exit__ call thought.02:37
lifelessspiv: I'd like to land the cleanup stuff soonish :)03:40
=== naoki is now known as naoki-away
spivlifeless: just finishing review :P03:52
spivlifeless: just sent03:54
lifelessthanks03:55
lifelessso04:01
lifelessDebugMedium04:01
lifelessI mean04:01
lifeless_DebugCounter04:01
lifelessspiv: turtles all the way down04:05
lifelesscontext managers have all the same issues as cleanups :)04:07
lifelessohhh nice04:09
lifelessI can use this to make the test log handling better.04:09
spivlifeless: tangentially: https://bugs.edge.launchpad.net/launchpad-code/+bug/59672604:09
ubot5Launchpad bug 596726 in Launchpad Bazaar Integration "Poor support for merge proposals superseded by different branch (affected: 1, heat: 6)" [Undecided,New]04:09
lifelessthanks04:09
lifelessI was asking in lp-dev earlier about it04:10
spivlifeless: turtles all the way down, but some of those turtles are in shark-infested waters ;)04:10
spivI'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:11
lifeless:)04:12
lifelessso04:12
lifelessyou can read my mails04:12
lifelessbut top level04:12
lifeless - test log support is the same logic needed to make this object better04:12
lifeless - it looks like a cleanup stack to me04:12
lifelessexcept for deprecation warnings, they are special.04:12
lifelessI don't think you can reenable them, I mean.04:13
lifelessbut I don't want to increase scope more than needed04:13
spivHmm, cleanup stack does fit nicely.04:13
=== naoki-away is now known as naoki
spivIt is a pretty large scope creep for this patch.04:13
lifelessI think I'll do a minimal job now and more in a separate patch this avo04:14
spivMy suspicion is that in practice the _DebugCounter's weakref callback will trigger early enough to make the atexit irrelevant04:14
lifelessWe should either fix it04:14
lifelessor delete it04:14
lifelessI'm happy to fix it04:14
spivBut I'd want to do some interactive testing or something to be confident about that, rather than just cross our fingers :)04:15
spivIIRC, and I might not, the atexit was best-effort paranoia, but the goal was that it wouldn't be triggered.04:15
lifelesswe almost certainly lead ssh processes if the atexit triggers04:16
lifelessleak04:16
spivIf a bzrlib-wide cleanup stack existed then that would fit much better than atexit :)04:16
spivI guess you'd make BzrLibraryState an ObjectWithCleanups?04:16
lifelessyes04:17
spivCool.  I was a bit unsure about the value of this change initially, but I'm totally sold now :)04:17
spivBtw, 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:18
spivI'd forgotten about that :)04:19
lifelessI've added04:19
lifeless        return False # propogate exceptions.04:19
lifelessfor clarity04:19
lifelessand, I can start adding tests with just a little more work.04:20
lifelesshmm I think I want to put this in a new module soon04:20
MTecknologyThere is a 'bzr serve' command - is there some incredibly awesome bzr server daemon that might make life for my code server management easier?04:23
lifelessspiv: actually no; I'll decorate.04:24
lifelessspiv: because circular imports.04:24
spivlifeless: whee04:25
ferringbrandom 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.104:26
MTecknologyIs 'bzr serve' for a server with a single user that holds all the branches and access is granted to anyone?04:26
ferringbI 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
spiv'bzr serve' doesn't (yet) do any sort of access control.04:27
spivIt leaves that to the OS.04:27
lifelessferringb: I don't quite understand the question04:27
spiv(well, it restricts access to files inside the directory given to --directory, but aside from that)04:27
MTecknologyspiv: I'll be extremely excited when it can - that's coming... next week?04:27
spivMTecknology: ha, if only :)04:28
ferringblifeless: possibly because I'm just confusing myself ;)04:28
MTecknologyspiv: thanks04:28
spivMTecknology: not coming soon, sadly04:28
lifelessMTecknology: its not on the roadmap at all04:28
lifelessMTecknology: we'd accept a tasteful patch, I'm sure :) - why do you need it?04:29
ferringblifeless: 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
spivWe may tackle it as part of the 3.0 UI revamp, but even there it's not a great priority.04:29
ferringblifeless: 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 checking04:29
lifelessspiv: http://pastebin.com/8cC31j7604:30
lifelessferringb: perhaps if you sketched this in bzr commands I'd understand :)04:30
lifelesslike04:31
MTecknologylifeless: 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 too04:31
spivMTecknology: 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
lifelessbzr branch -r 0.1 trunk 0.104:31
lifelesscd 0.104:31
lifelessdo stuff04:31
lifelessbzr commit -m '0.1.104:31
lifelessbzr tag 0.1.104:31
lifelesscd ../trunk04:31
lifelessbzr merge ../0.1.104:31
lifelessbzr commit -m 'merge 0.1.1 into trunk'04:31
lifelessferringb: ^ is that what you mean ?04:32
MTecknologyspiv: 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 it04:32
ferringblifeless: 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.104:32
lifelesssure04:32
lifelessok so bzr log -r tag:0.1.104:32
lifelessin integration04:32
ferringblifeless: 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
lifelessyes04:32
lifelessthe tag won't change the revision it points at when it gets copied by a merge04:33
lifelessyou need to explicitly run 'tag' again to change the revision a tag points at.04:33
ferringbyep04:33
ferringbjust verifying.  mostly it's the fact that it's kind of retroactively inserting a dead branch into the target's history is all04:34
spivlifeless: +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
ferringbbad phrasing, but that's where I was curious if bzr would behave properly- haven't tried this yet with it.04:34
lifelessspiv: I'm adding some docs04:34
spivlifeless: and SFTPLock.__del__ at elast expects trace.warning to work04:34
lifelessferringb: no worries; I wanted to be sure I answered the right question:)04:34
* ferringb wonders why you're not using a weakref finalizer there04:35
lifelessferringb: we call os._exit()04:35
spivferringb: yes, that would be better, although for the specific issue at hand it won't help04:35
lifelessferringb: to avoid the very slow gc of (potentially) a GB or more of memory04:35
ferringbfigured, more I spotted the __del__04:35
lifelessoh right04:35
ferringbhttp://www.pkgcore.org/trac/pkgcore/browser/snakeoil/snakeoil/weakrefs.py <-- might be of interest; specifically the metaclass04:35
lifelesswe are largely deleting the __del)) methods04:36
ferringbbeen 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 in04:36
spivlifeless: 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 solution04:36
ferringbthe 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 hell04:37
spivit's not critical if that warning happens in the window between "tear down bzrlib" and "stop the VM"04:37
ferringblifeless: 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
lifelessspiv: well, it could hold onto the library state04:38
ferringbre: 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:41
spivferringb: Sorry, that code is a bit too gnarly for me to consider properly right at the moment04:43
spivferringb: 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:44
ferringbit can't fully transparently, technically04:45
ferringbroughly... 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
ferringbthats part of the key trick here.04:46
spivRight.  There are edge-cases like how __del__ can resurrect the object.04:47
* ferringb notes proxy isn't even getting to that04:47
ferringbthe trick here is that people are using the proxy itself04:47
ferringbwhen the proxy falls out of memory, the weakref gets fired, which finalizes the proxy target04:47
ferringbsaid finalization punts the strong refs holding it in memory in the process04:48
ferringbyou 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 with04:48
ferringbspiv: 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 route04:50
ferringbhence this particular proxy scanning the target class and making a class w/ all of the necessary special methods in place04:50
spivThat'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
ferringbresurrection is about the only thing I can think of that is missing.04:51
ferringbliterally.  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:52
ferringbrephrasing... resurrection of the proxy itself.  the real instance (the target) still is strong ref'ed at that point.04:54
ferringbspiv: roughly that answer your concern?04:54
lifelessspiv: incremental eyeball please; I think this is sufficient to land. rev 523104:56
spivferringb: possibly!  It's a bit much to digest when I'm about to go get lunch :)04:56
spivlifeless: ok04:56
ferringbspiv: 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 one04:57
lifelessspiv: ok, its up now04:57
lifelessspiv: I thought it had gone, but wifi glitched it04: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 expected04:57
spiv"We hope you enjoy this library." Aw :)04:58
lifelessspiv: :)04:59
spivlifeless: typo: "my looking it up" should be "by ..." in __init__.py04:59
lifelessthanks05:00
lifeless12 lines of comment => global variables suck05:00
spivlifeless: typo: "needs to be alled" should be "... called", same file05:01
lifelessbah05:02
lifelessthe table here is too high05:02
spivlifeless: why the switch to making the caller of initialize have to call __enter__ manually?05:02
lifelessspiv: I wrote some docs that looked odd05:02
lifelessspiv: so I changed them to be nice and then altered the code to match05:02
lifelessbzrlib.initialize is nicer if you can say05:03
lifelesswith bzrlib.initialize() as bzrstate:05:03
spiv*nod*05:03
lifelessrather than having to lookup the actual class in use to use the with statement05:03
lifelessas we're changing the contract anyway05:03
spivI thought that might be it.  Seems reasonable, but I wanted to make sure I understood.05:04
lifeless(to must call __exit__ or your log statements are not guaranteed)05:04
lifelessI figured adding in  'please call __enter__' wasn't much worse.05:04
lifelesswhich reminds me05:04
lifelesswe didn't make that explicit in NEWS05:04
spivlifeless: aside from those two typos in comments, all good.  Merge at will!05:05
spivOh yeah, feel free to highlight this more in NEWS too :)05:05
lifelessgimme 2 secs05:05
lifelessI'll pastebin and you can shoo to eat05:06
lifelesshttp://pastebin.com/2tXXy0v905:08
lifelessthats the full NEWS diff now05:08
lifelessspiv: ^05:09
lifelessI'll assume you're off eating and land witha promise to tweak later if needed, in 5 or so05:09
spivlifeless: +105:12
lifelessthanks!05:17
lifelessparthm: hi05:48
parthmlifeless: hi05:51
lifelessparthm: do you want to talk about the regex compilation stuff05:57
parthmlifeless: my personal preference is towards an error based approach.05:58
lifelessgreat05:58
parthmlifeless: i am ok with warnings for operations like 'st' but specifically 'add' is something i would really prefer to error out.05:58
parthmit sort of reminds me of bug #54931005:58
ubot5Launchpad 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/54931005:58
lifelessyes05:58
lifelessI think we should just error across the board, because if the file is damaged, nothing is going to be behaving sensibly anyway05:59
lifelessI've seen error modes in other programs that spew a bunch of junk05:59
lifelessand then say 'oh, XXX is wrong'05:59
lifelessand users just get flummoxed at the sheer volume of info attacking them05:59
parthmlifeless: 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:00
parthmi 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
lifelesswell06:01
lifelessI think it can go either way06:02
lifelessI can give you a detailed review06:02
parthmlifeless: do you prefer the mailing list?06:02
lifelessbut 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 well06:02
lifelessparthm: MP is fine.06:02
lifelessI'm going to take a break and organise dinner ingredients and so forth06:03
lifelessI'll pop in in a bit to discuss where we go in detail06:03
parthmlifeless: 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:04
lifelessits been stalled for a bit06:07
lifelessI'm patch pilot this week06:07
lifelessso I want to06:07
lifeless - unblock it06:08
lifeless - land something that is clearly better than what we have06:08
lifelesswhat we have is backtraces06:08
lifelesschanging that to a single line or so error will be a clear improvement06:08
lifelessit doesn't preclude a warning based approach in future06:08
lifelessbut neither is it contingent on us deciding that we don't want a warning based approach.06:09
lifelessthat 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 quo06:09
lifelessuhm by agreement I mean 'capital A Agreement' if that makes sense06:10
lifelesswe do need agreement that its an improvement over the status quo, but I think that that is triival06:10
parthmlifeless: 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:12
parthmlifeless: i have put up my thoughts on the mp. https://code.edge.launchpad.net/~parthm/bzr/300062-invalid-pattern-warnings/+merge/2680906:13
chxhow 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:20
Bambi_BOFHhi 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
Bambi_BOFHbzr has printed an actual error, but then backtraced anyway07:21
spivchx: -107:21
chx-1 ???07:21
chxthat's like 1 revision before HEAD, no?07:22
Bambi_BOFH(i suspect its died because its on nfs, but thats by the by)07:22
spivchx: it's HEAD07:23
spivchx: e.g. compare 'bzr log --line -r -1' with 'bzr log --line | head -1'07:23
spivchx: FWIW, 'bzr help revisionspec' tries to say so explicitly in the 'revno:' section07:24
spivBambi_BOFH: yes, except that I happen to know this bug is fixed in 2.1.2 :)07:25
spivBambi_BOFH: but any time bzr gives a traceback is a bug07:25
spivBambi_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
Bambi_BOFHspiv: 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
spivBambi_BOFH: you're welcome :)07:26
Bambi_BOFH:)07:27
chxspiv: hrm, my brain is too convoluted for 'last'07:28
Bambi_BOFHsorry about ask-and-run, but back to work ;) *waves*07:29
vilahi all !07:43
lifelesshiya07:44
=== radoe_ is now known as radoe
vilasheesh, get away you08:11
lifeless?08:11
vilaxchat spurious launch08:11
vilalifeless: 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
lifelesscool08:12
spivWoo!08:12
vilaI 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 them08:13
lifelessaddDetails08:13
lifelesson the test08:13
vilayeah, you mentioned that, how will they be displayed ?08:13
lifelessand in the result look for a specific name || mime type08:14
lifelessaggregate the info that matches, print in stopTestRun08:14
lifelessI love it when API's come together08:14
lifelessvila: it will look however you want it to08:14
vilaand is there some way to collect them to display a nice total in the end..ohh, I need to look at that then08:14
vilabut can these summaries be carried by subunit too ?08:15
vilaand any idea about making them apparent in hudson ? (And are there different steps/features needed ?)08:15
vilaand where is lp-loom-propose so I can run a single command and have multiple mp with their pre-requisite branch set ? :-P08:16
lifelessaddDetails will be carried by subunit08:17
lifelesshudson - defer that, possibly depends on how much effort we're willing to put in :)08:17
lifelessfor looms I think one large MP may make more sense most of the time08:17
lifelessbut 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 loom08:18
vilacough, the whole diff is now ~6000 lines, nobody will review that this century :-)08:19
vilathere are some heavy cleanups there (heavy in lines, not intent, aka trivial)08:19
lifelessvila: 'most of the time'08:19
vilayeah, kidding ;)08:19
lifelessvila: I don't mean one diff btw08:20
vilaI know, that's what I do generally08:20
lifelessvila: N diffs, one merge proposal.08:20
vilaoooohhhh08:20
vilalifeless: but without your annotated review into place...08:20
lifelesswhat do you think ?08:20
spivlifeless: N diffs, one merge proposal is an interesting idea.08:20
vilaN diffs will be nice, but some diffs overlap08:21
spivlifeless: I suspect that for sufficiently large work you might end up with more than 1 conversation, though08:21
spivlifeless: although it's hard to know without the experience of trying it :)08:21
lifelessI'm sure you will08:22
vilayup, I *expect* multiple discussions on the leaking-tests loom08:22
lifelessright now there is no room for experimenting08:22
spivAt the same time, N unlinked conversations is unlikely to be a good match either.08:22
lifelessso we need to write some code ;)08:22
spivIt's interesting, actually.08:23
vilalifeless: regarding the up-thread commits in a loom, you said: don't commit until a conflict occurs (or something close enough) right ?08:23
lifelessnear enough yes08:23
lifelessthough this week I'm PP, not expecting to do much loom loving08:24
vilalifeless: does that mean you do merges with non-conflicted threads as additional parents ?08:24
vilalifeless: just talking :)08:24
lifelessvila: uhh08:24
lifelessI don't know, does it ?08:24
vilalifeless: not today, but how do you leave a clean committed tree to work with ?08:25
spivI 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
vilaspiv: split more :)08:25
lifelessvila: you don't08:26
vilalifeless: you mean you leave the tree uncommitted ?08:26
lifelessvila: needs to subtract merged-and-not-committed from status/diff and commit08:26
spivvila: at some point splitting harms reviewability because you lose the sense of how the piece tie together08:26
vilaspiv: that's why I want a graph rather than a list of threads08:26
lifelessvila: 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
lifelessvila: or something.08:27
spivvila: 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 between08:27
lifelessvila: I expect to find many bugs and limitations doing this08:27
vilaspiv: certainly08:27
spivvila: I want a graph of threads too, but I think that's tangential08:27
lifelessspiv: I really don't like the UI that I expect that to generate.08:28
vilalifeless: I'm pretty sure there should be a solution that doesn't involve rebase08:28
lifelessvila: rebase isn't intrinsically wrong08:28
spivvila: 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 stack08:28
lifelessavoiding it because its rebase is a mistake08:28
spivvila: 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
spivlifeless: I fear the UI too, but the model is just too irresitably nice I think.08:29
vilaI'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 worlds08:29
lifelessvila: filtering non-intentional ancestry is a hack, I think08:30
vilawell, the UI should be s/up-thread/go-thread/08:30
spivlifeless: My intuition is that a good UI is tractable, partly because the graphs people want aren't going to be *that* complex.08:30
lifelessvila: the reason looms are so noisy is because I once held the view that filtering non-intentional changes wsa sufficient08:30
vilamy 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:31
spivlifeless: 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
lifelesssounds more like a desire than intuition :)08:32
lifelessspiv: loom supports that today08:32
spivlifeless: technically, yes08:32
lifelessspiv: albeit manually.08:32
spivlifeless: the UI doesn't make it very usable08:32
vilalifeless: how so ?08:32
lifelessvila: intuition is a guess08:32
spivlifeless: but I think that's easily 90% of the cases people (well, me at least :) want more-than-a-linear-stack for :)08:33
vilayes, a guess waiting for concrete steps to become real :)08:33
lifelessspiv: I still haven't heard a case that is uniquely solved by graph that my less-merges stack isn't entirely suitable for08:33
lifelessvila: still, if you replace 'intuition' in your sentence about qlog, with guess, it doesn't parse.08:34
vilaspiv, 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 independently08:34
lifelessspiv: and I'm sure that the UI for a stack is so much nicer than a graph :)08:34
lifelessspiv: if there was a compelling 'I need a graph' argument, I'd be in like a flash08:35
vilas/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 threads08:35
lifelessspiv: there's only one graph based patch manager out there that I know of - topgit - and I hear interesting things about its usability.08:35
vilaa stack is fine as long as each node can be a loom too :)08:36
spivlifeless: can you point me to the less-merges stack parts?08:36
lifelessspiv: no code yet08:36
lifelessspiv: only the discussions at UDS + various back of head thoughts08:36
lifelessspiv: I've been mulling on this a while, but not written it up.08:37
lifelessI should08:37
spivlifeless: 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 etc08:37
spivlifeless: please do :)08:37
lifelessspiv: look back a few days in this channel08:37
lifelessI laid out the technical bits to vila08:37
lifeless'vila.*lifeless.*loom' should be a good search08:38
lifelessspiv: the basic idea is to only record a merge during up-thread when a conflict occurs, and then only with the causative branch.08:38
lifelessspiv: 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
spivlifeless: that would be a nice incremental improvement08:39
lifelessthe two things are tied together08:39
spivlifeless: but I don't think that's enough to really nicely support what I'm thinking of08:39
vilahaaa, hidden commit, ok08:39
spivlifeless: 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
spivlifeless: I need to get back in the habit of using looms regularly :/08:40
spivlifeless: 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 stack08:41
lifelessspiv: so, do you routinely have 3+ branches on disk, merged non-stacklike together ?08:41
spivlifeless: 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
vilaroutinely, no, but I currently have a loom with 8 threads, 3 of them being parallel08:42
spivlifeless: 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:44
vilaspiv: hehe, very close to my current loom :)08:45
vilaspiv: something == ServerInAThread, X == http-leaks, Y == smart server leaks, Z == sftp leaks, ice-on-cake == socket leaks aka transport.disconnect08:46
vilaX, Y and Z being independent from each other08:46
lifelessspiv: does ->X mean 'X builds on something'08:47
lifelessspiv: or 'something needs X'08:47
vilaspiv: 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
spivlifeless: "builds on"08:48
spivvila: what does "the tests" refer to here?08:49
vilaspiv: 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 connection08:49
lifelessspiv: so, in the form I'm describing you would do the following:08:49
spivvila: generally speaking each test that uses a smart server makes its own server, and thus its own client connection when get_transport is called08:49
vilaspiv: AFAICS all the tests that use SmartTCPServer_for_testing and its variants08:49
lifelessspiv: sitting on something; hack hack hack; bzr commit --to-thread:X08:49
lifelessspiv: which would:08:49
vilaspiv: I'm talking about a single server receiving multiple connections (~10/20) for a single tests08:50
vilatest, no s08:50
spivvila: I wouldn't expect that, no08:50
vilaspiv: ok, good to know, we may have a bug or two there then08:50
lifeless - make a thread X based on trunk; get the diff against the synthetic base for tree:, confirm the resulting diff, save it.08:51
lifelessonce you have X08:51
spivvila: unless those tests are actually constructing ~10-20 transports from scratch, rather than reusing them08:51
vilaspiv: the test code itself doesn't seem to support this idea (and I didn't observe that for other servers)08:51
spiv(i.e. calling get_transport a lot, or passing URLs rather than transports around without also passing possible_transports, etc)08:51
vilaspiv: but ssh may mask that somwhow08:52
lifelessthen the diff for the next --to-thread would be checked for conflicts against both X and trunk08:52
spivvila: very few tests involve SSH08:52
vilaspiv: if you exclude sftp, yes08:52
lifelessthe one after that against X, Y and trunk, etc (probably by walking back down till it gets a hit)08:52
spivvila: I do, because we are talking about smart server tests :P08:53
vilaspiv: sure, I was making sure we were still on the page08:53
lifelessspiv: 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
lifelessbut never logging or working directly with them in the UI08:54
spivlifeless: I'm not immediately grasping this concept, or how I'd use it.08:54
spivlifeless: which may be a good or bad sign ;)08:54
vilalifeless: it's close to the mental model I've built since our last discussion08:55
spivlifeless: 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
vila(close because it doesn't run yet even in my head ;)08:55
vilaand that I'm unclear about which commits should be part of the final result or filtered out or something08:56
vilaBut I'm sold on the idea that each thread ends up with a cleaner history than today08:57
=== oubiwann is now known as away
spivlifeless: 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:58
lifelessspiv: writing it up will require some untinterrupted tuit time08:59
lifelessspiv: so next week, perhaps08:59
lifelessspiv: that said, I would love to see a good description of how you see a graph based one working08:59
lifelessspiv: I would like to note two things of particular concern I'd be looking to understand09:00
vilaeeerk, AttributeError: 'ObjectWithCleanups' object has no attribute 'addCleanup' with bzr.dev@5310 py2.6.0 on osx09:00
lifelessmerge bases09:00
spivvila: 'add_cleanup' is the name...09:00
lifelessoh wow09:00
spivSo, um, wow :)09:00
lifelesshtf did that pass pqm09:00
spivwhat lifeless said.09:00
lifelessI bet I know09:00
vilasmart/medium.py line 50609:00
lifelessI bet _DebugCounter or whatever it is called09:01
lifelessisn't tested.09:01
vilalifeless: exactly09:01
lifelessspiv: so merge bases - how do we avoid lots of criss crosses09:01
lifelessspiv: CLI ui representation of the graph - including a sensible 'merge' or some such09:02
vilahttp://paste.ubuntu.com/45282609:02
lifelessnot that we should limit ourselves to cli09:02
lifelessbut I'd like usable on CLI, for loom, because Ubuntu devs loves their consoles09:02
vilas/addCleanup/add_cleanup/ fixes it09:03
lifelessyes09:03
spivvila: right. +1 land it :)09:03
lifelesswhats that saying about untested code?09:03
vila+1 on using addCleanup instead :)09:03
spivlifeless: In my head I think I have good answer for the CLI ui09:03
spivlifeless: not sure why you expect more criss-crosses, though09:04
vilalifeless: that we should thank our testers ? (NOT !) :)09:04
lifelessspiv: I've simulated DAGs by hand09:05
lifelessspiv: and universally had equal-distant common ancestors along each path, leading to criss-cross complains and merge hell09:05
spivlifeless: interesting09:09
spivlifeless: I'll have to chew on that.  Thanks!09:10
vilaspiv: sent to pqm09:12
lifelessspiv: a posible explanation is - consider trunk->X, trunk->Y, (, Y -> something)09:28
lifelessspiv: both X and Y are commonly one-commit on trunk09:28
lifelessspiv: and clearly equally good  the next time you merge trunk->something09:28
desengreetings. i want to translate an open source application. can i use the bazaar + launchpad solution with ease ?12:53
deseni have registered a SSH key and i'm really stuck - dunno what to do next12:54
desenT_T12:54
Kamping_Kaiserask the proejct how they want patches submitted :)12:58
spivOoh, a way to reproduce https://bugs.edge.launchpad.net/bzr/+bug/52263714:02
ubot5Launchpad bug 522637 in Bazaar "BzrCheckError: Cannot add revision(s) to repository: missing referenced chk root keys (affected: 10, heat: 54)" [High,Confirmed]14:02
cbzis there any bzr-svn command to rationalise the cache on windows?14:10
spivrationalise in what way?14:12
cbzremove the bits that aren't needed/used14:15
spivYou can probably use the sqlite3 command-line tool to VACUUM the cache database, I guess.14:21
spivWell, to be pedantic, it's a cache, so none of it is *needed*... so you can just delete the svn-cache directory entirely ;)14:22
spivI don't think there are any commands in the bzr-svn plugin for that.14:23
spivFile a bug asking for them, maybe?14:23
* spiv -> zzz14:23
cbz:)14:26
maxbcbz: How do you define "bits that aren't needed"?14:33
MTecknologyspiv: but it's only 08:3014:35
=== away is now known as oubiwann
MTecknologyHow hard would it be to make a section in bzr that's available to anyone w/o setting up shared keys?15:05
=== oubiwann is now known as away
CaMasonhi guys. Just installed bazaar explorer on windows, and it wont launch15:29
CaMasonif I run `bzr explorer`, it says ERROR: No module named trace. You may need to install this Python library separately"15:29
=== oubiwann is now known as oubiwann-away
=== oubiwann-away is now known as oubiwann
CaMasonnvm I reinstalled the full package and it works. I'd like to get rid of tortoisebzr though15:48
MTecknology!info python-tracer | CaMason16:18
ubot5CaMason: 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 kB16:18
lifelessmorning17:07
=== deryck is now known as deryck[lunch]
=== nlisgo_ is now known as nlisgo
lifelessbbiab, taking lynne -> airport18:07
=== oubiwann is now known as oubiwann-away
=== oubiwann-away is now known as oubiwann
DanCbroken 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
DanCto http://doc.bazaar.canonical.com/migration/en/data-migration/fast-export.html18:29
=== deryck[lunch] is now known as deryck
cisshi, 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:57
cissi used bzr revert -r tag:mytag18:58
cissah, 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:00
cissnever mind, got it.19:02
cissgrmpf. 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:04
cissgot it. one has to use --overwrite.19:12
jonohey all20:29
jonoquick q20:29
jonoI can push a branch to LP fine, but how do I push something to something other than LP?20:29
jonosuch as a webserver20:30
cissjono, "bzr upload" will creates a working tree in the destination20:32
jonociss, so do I use bzr push or bzr upload?20:32
jonowhat is the difference?20:32
jonoI just have a branch locally and I want to push it regularly to another machine20:32
jonoso someone else can pull from it20:33
jonoand we both have access to the same sftp destination20:33
lifelessabentley: I hope the tweaks I made to your terminal spew patch are ok with you20:33
abentleylifeless, me too.20:33
lifelesshah20:34
jamjono: if you just want to share a branch via sftp, then ... do so20:34
jambzr push sftp://host/path20:34
jamyou might want to20:34
jambzr init-repo sftp://host/path/repo20:34
jamfirst, but it isn't strictly necessary20:34
jonook cool20:34
jonothanks!20:34
lifelessabentley: I take it that means you haven't looked ?20:36
abentleylifeless, right.20:36
lifelesskk20:36
lifelessplease do let me know before 2.2 final is released, I'll be happy to tweak further20:36
lifelessandrew and I went over it with some care though, I'm fairly sure you'll approve20:37
abentleylifeless, 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:51
lifelessabentley: oh! we must have misunderstood the protocol.20:57
lifelessI followed what I saw you had done in the ui_factory20:57
lifelessso both of the uses must be wrong20:57
lifelessI'll read the context manager protocol PEP and submit a fixup branch20:57
lifelessabentley: http://docs.python.org/reference/datamodel.html 3.4.10 says you call __enter__ and __exit__ on the same object20:58
lifelessabentley: the return value of __enter__ is bound to the name used in the as clause20:58
lifelessso the example I gave was wrong, but the code itself is fine20:59
lifelesshmm, and __enter__ in both cases could usefully return self, for now.20:59
lifelessthanks for calling that to attention21:00
abentleylifeless, you're right.21:00
lifelessabentley: proposal proposed21:09
abentleylifeless, approved.21:11
lifelessthanks21:12
lifelessabentley: the draft patch you gave me for pqm was very useful21:13
lifelessabentley: the api turned out to be rather more rabbit warren, but it got me started21:13
abentleylifeless, I'm glad.21:14
james_wlifeless: getting mixed up between "testr run --failing" and "testr failing" is very confusing :-)21:23
lifelessjames_w: I can imagine21:23
lifelessjames_w: we should fix that21:24
james_wshow-failing or something would avoid it at least21:24
lifelessjames_w: testr st --failing ?21:29
lifelessjames_w: I dunno, having a direct simple command is noce too21:29
lifelessjames_w: perhaps testr run --auto21:29
james_wI would prefer testr show --failing to st21:29
james_wI would imagine st would be something like "104 tests, 56 failures, 4 skips"21:30
lifelessyea21:30
lifelessstats is pretty basic at the moment21:30
lifelessheck, testr is pretty basic21:30
james_wlifeless: testr run --auto would loop by itself?23:01
lifelessjames_w: no, I meant auto as in 'automatically choose the tests to run'23:02
lifelessjames_w: so all tests if none are failing, or failures only if there are failures.23:02
james_wright23:02
lifelessjames_w: maybe that is what you meant by loop by itself23:02
james_wI was just thinking that a loop around that could be quite useful, depending on how long your testsuite took23:02
lifelessinotify++23:03
lifeless+ a background status window in your editor23:03
james_wfor my fast testsuite projects a "run everything as fast as possible, then iterate over failing", in a pane of my terminal would be good23:03
james_wyeah23:03
poolielifeless, i think requiring people to call __enter__ and __exit__ is a bit ugly in python2.4 code23:03
james_wplus some way to go from path -> test filter to run would be good for larger projects23:04
lifelessjames_w: yes, I'm looking forward to the new subunit discovery patch - you saw it needs tweaking right ?23:04
james_wyeah23:04
james_wjust been distracted the last few days23:04
lifelesspoolie: 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
james_wany thoughts on a way to infer test patterns based on path in testr?23:05
lifelesspoolie: being a context manager is quite a bit nicer for python2.5 and up23:05
james_wmight seed my thoughts for a flight sometime soon23:05
pooliemm and i guess showing that it's a context manager is worthwhile on 2.423:05
lifelessjames_w: please; be nice to be friendly for C etc23:05
lifelessjames_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 thought23:06
james_wyeah, 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.conf23:06
james_whmm, that would make it easier23:06
james_wperhaps something like urlconf from django if you know it?23:07
lifelessjames_w: I'm open to doing a plugin system for testr too23:07
lifelessjames_w: vaguely, but not intimately23:07
james_wmapping of regexes -> values, pick the tightest regex that matches23:07
lifelessjames_w: another related problem you might enjoy23:07
lifelessjames_w: 'I changed file FOO, what tests do I need to run'23:08
james_wplus a way to substitute groups from the match in to the value would be greaet23:08
james_wlifeless: ah, that's exactly the problem I'm considering :-) What were you thinking?23:08
lifelessjames_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 contract23:08
lifelessjames_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
lifelessjames_w: the complex bit is that you need test run instrumentation tunneled through to the db23:09
lifelessjames_w: which perhaps subunit can help with.23:09
james_wthat's more involved than I was envisaging23:10
james_wmuch more powerful and hands off, but...23:10
lifelessjames_w: precisely ;)23:10
lifelessjames_w: so, I've been building towards this for a while, finding good building blocks and making them nice.23:10
lifelessjames_w: like testr23:10
james_wyeah23:11
lifelessjames_w: I'd be delighted to have a regexp based approximation in testr23:11
lifelessjames_w: I'd just like it to have a contract which is fairly close to what one might want for an automated solution23:11
james_wpath -> arguments for the test command was what I was thinking, would that fit?23:12
lifelessjam: https://code.edge.launchpad.net/~lifeless/bzr/py3/+merge/28113 btw23:12
lifelessjames_w: command to get paths (e.g. bzr st); command to do paths->test id list as string or filename23:12
lifelessjames_w: perhaps23:12
lifelessjames_w: I suggest some experimentation23:13
lifelessjames_w: don't worry about code quality etc for now, just play around and see what tickles your fancy23:13
james_wyeah23:13
james_wI was thinking inotify, but yeah, that split would work ok23:14
lifelessjames_w: yes, we will want a way to specify the path[s] explicitly too, both for non-vcs cases and for manual control23:14
lifelessinotify too23:14
lifelesslong 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 line23:14
james_wI 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 too23:15
lifelessjames_w: testr works on enumerated tests fairly intrinsically23:15
lifelessits 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
james_wyeah, but I just want to say "given bzrlib/foo.py run bzrlib.tests.test_foo"23:16
lifelessjames_w: which is a wildcard on the test id23:16
lifelessjames_w: inside bzrlib23:16
james_wlifeless: ok, I thought you meant test id list in the -F sense: an exact list of tests to run23:17
lifelessjames_w: I did, and I can see the use for a wildcard here23:17
james_wok23:17
lifelessjames_w: I think supporting both is useful23:17
james_wI'll try and take a first pass at this sometime23:17
james_wI have my head full of another problem right now though23:18
lifelessnaturally23:18
lifelessfeel free to braindump wishlist bugs23:18
lifelessI don't mind 'it would be nice if frogs could jump23:18
lifelessstyle bugs23:18
fullermdDo they have to jump?  Can they sort of sashay?23:18
lifelesspoolie: on context managers23:20
lifelesspoolie: 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
pooliemm23:21
pooliei was wondering if it was worth doing the initialization at construction time23:21
lifelesspoolie: it is clearly documented, which offsets some of the ugliness in my mind23:21
poolieso that it matters less whether you call enter()23:21
poolieprobably not worth it though23:22
poolieiirc this function is new in 2.2 anyhow23:22
poolieyes it is, new in 2.2b123:22
lifelesspoolie: that would be buggy I think, consider the fixture intent/use separation23:22
pooliewhat's the correspondance?23:23
lifelessactually, bad analgoy23:23
lifelessbah, analogy23:23
poolieanyhow,23:24
lifelessa better one is perhaps, for testing it would be good to be able to poke at this quite precisely23:24
lifelessand changing global variables in __init__ would likely make that tricky23:24
pooliei think if we're going to use a contextmgr, it really should be an idiomatic contextmgr23:24
lifelesshah, - went to say 'affects me too' from the bug filing form on bug 42136023:26
ubot5Launchpad bug 421360 in Bazaar "switch won't let me switch with a pending merge (affected: 1, heat: 0)" [High,Confirmed] https://launchpad.net/bugs/42136023:26
lifelessand I filed it :P23:26
lifelesspoolie: https://code.edge.launchpad.net/~lifeless/bzr/encoding-option/+merge/2812623:38
lifelesspoolie: I'd like to talk about the buffering patch some23:53
poolieon phone atm23:53
lifelesssure23:53
lifelessI mean, its not urgent, just I'd like to explore what we're doing in the area in a concentrated fashion :)23:54
poolielifeless, what did you change?23:54
lifelessin 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 broad23:55

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