/srv/irclogs.ubuntu.com/2009/03/25/#bzr.txt

SpamapSwhen we had 15 users... we were like "well we need it" .. now we have 25 users... every user is I think $500 .. plus $100/year.00:00
mwhudsonjelmer: if you're still here00:16
mwhudsonjelmer: how does bzr-git's GitBranchBuilder avoid the00:17
jelmermwhudson: I am00:17
mwhudson*** Your name cannot be determined from your system services (gecos).00:17
mwhudsonproblem?00:17
mwhudsoni'm saying00:17
mwhudson            run_git(00:17
mwhudson                'commit', '-m', 'dsadas', '--author', 'Joe Foo <joe@foo.com>')00:17
mwhudsonand the above message is making me sad :(00:17
mwhudson(run on a test server, it works locally)00:18
mwhudsoni guess i can just run git config00:19
mwhudsonbut it seems pretty ick00:19
jelmerah00:20
jelmeryou might need a ~/.git/config file00:20
jelmermwhudson: please file a bug, we shouldn't require that to be able to run the testsuite00:20
mwhudsonjelmer: it's not your tests that are failing :)00:20
jelmerah00:21
jelmermwhudson: I'm not so sure we avoid that00:23
jelmerdo we?00:23
mwhudsoni can probably find out00:23
mwhudsonjelmer: bzr selftest git ?00:23
jelmermwhudson: yep00:23
mwhudsonjelmer: yeah, some tests fail00:24
=== bac_afk is now known as abc
=== abc is now known as bac
mwhudsonjelmer: i'll file a bug00:26
jelmermwhudson: thanks00:27
mwhudsonjelmer: https://bugs.edge.launchpad.net/bzr-git/+bug/34823800:29
ubottuUbuntu bug 348238 in bzr-git "tests fail if "Your name cannot be determined from your system services (gecos)."" [Undecided,New]00:29
skeftomaihi...is Bazaar the VCS created by Ubuntu and/or the one they use?00:58
bob2the same company that largely funds ubuntu also supports bzr00:59
skeftomaiah. did Ubuntu create a VCS?00:59
lifelessskeftomai: no, Ubuntu uses bzr01:00
skeftomaiok. that answers my question. thanks01:00
lifelessjam: ping01:13
JimersonHas anyone here run bazaar on aix?01:52
lifelessSome folk have posted on the list from time to time01:53
JimersonI've read some of those posts.01:53
JimersonI'm having issues getting it compiled, and I can't tell if it is a issue with python or bazaar01:54
lifelessJimerson: pastebin the error, or you could file a bug02:00
Jimersonhttp://pastebin.com/m7d64934602:02
jamlifeless: pong02:07
jamJimerson: it looks like you don't have the compiler that python was compiled with02:08
jam"xlc_r"02:08
JimersonThanks guys.02:11
JimersonNow I have to try and find the compiler :)02:11
lifelessjam: I'mmaking record_iter_changes a generator02:11
jamlifeless: to return what?02:13
lifelessfs hashes02:13
lifelessits that or call tree._observed_sha1 directly, this seemed more accessible for testing/flexibility02:14
JimersonThank you guys so much.02:16
JimersonThat resolved my issue.02:16
lifelesscool02:19
jamlifeless: I don't have a huge opinion either way. It seems a bit odd to iterate over record_iter_changes, just because if you stop mid-way it seems to be in a strange state.02:25
jamhowever, it is obviously an 'iter' sort of interface :)02:25
lifelessright02:26
lifelessanyhow, its done already :P02:27
lifelessthere are two issues, it could yield more than is put in (merge commits) or less (no stat cache calculations to update), which is why generator is better02:27
* igc lunch02:32
JimersonOne last question and I will leave you all alone, As bazaar does not handle partial checkouts. How do you handle a situation, where you want to arrange the structure, with folders that are only their for organanization, but you want to be able to export it to a production server?02:34
bob2put them in separate branches02:34
bob2or don't use your vcs for deployment02:35
lifelessJimerson: I'm not entirely sure I understand the question02:35
JimersonFor example:02:35
JimersonIn bazaar I want it like /project/version/blah02:36
JimersonBut I just want to export out to the server everything under blah.02:36
lifelessso, bzr export can do that02:36
JimersonThat means I would have to do a full overwrite everytime though correct?02:37
lifelessyes, if you used export02:37
lifelessuhm02:37
lifelessfor production deployments a number of folk use 'bzr upload'02:38
lifelessI agree with bob2 though, in bzr you wouldn't normally have project/version as part of your versioned paths02:38
lifelessnote that 'bzr init-repo', if you've used that, is *not* related to versioned data, its just a storage area02:38
JimersonHow do people seperate things then, just branch them out?02:39
lifelessJimerson: well typically they start separate02:41
bob2you want one branch per project02:41
bob2and they would start that way - you'd bzr init each individual thing indidividually02:41
lifelessJimerson: I mean, examine 'version' as part of a tree02:41
JimersonI get what you are saying.02:42
lifelessif you made a tarball of your project, each version would be a separate tarball right? and thus in bzr each version is a separate branch, or even just separate commits in a single branch, but they aren't both versioned in the same tree02:42
JimersonI am new to scm, so I am learning.02:42
lifelesslikewise project02:42
VSpikeJust wondering... for a checkout, should bzr push to the "checkout of" branch ever do anything?02:43
Jimersonlifeless, Thanks for all your help. I think I have enough to get rolling down the path. I'll be back. you have a nice evening.02:44
Jimersonbob2, Thank you as well.02:44
lifelessjam: around?02:45
lifelessor poolie02:45
lifelesscurrently we do housekeeping in commit02:45
lifelesswhen we implicitly unversion something, to make sure we only unversion the root of a collection of things that all got unversioned02:45
lifelesslike if we have a/b and both are missing02:46
lifelessif we don't, then wt.unversion() blows up02:46
lifelessI'd like to change wt.unversion([a-id, b-id]) to just deal IFF b-id is a child of a-id02:46
jamlifeless: so it wouldn't blow up if you did it in reverse, right? (unversion b-id before you unversion a-id)02:48
lifelessyes02:48
jamand the issue is that we are passing in a 'set'02:49
lifelessyes02:49
jamso it doesn't know what order to do things02:49
jamthe problem is that you may have a/b/c/d/e02:49
jamand get b-id, then e-id, then a-id, etc02:49
lifelessas the unversion set should be generally small, I think tracking this in unversion is ok, and easier to work with02:49
jamlifeless: so I would think that keeping track of "things not yet unversioned" would be fine02:50
jamand unversion should complain if all the children don't get unversioned02:50
jamor something like that02:50
lifelesswell unversion should complain if something provided was never versioned at all02:50
lifelessbut sure, we seem agreed that pushing this to unversion is fine02:50
jamlifeless: right, I'm actually saying that unversion should complain if you unversion "a" but *don't* unversion "b"02:51
lifelessjam: I don't think so, its meant to recurse for us02:51
lifelessand I like that02:51
jamlifeless: I think it can lead to deleting things that didn't get properly recorded as being deleted as part of the commit02:52
jamsay "iter_changes" somehow02:52
jamfor the case of "a/b" and "a/c"02:52
jamsomehow just saw a and a/b being deleted02:52
jamsuddenly the commit doesn't think about 'c'02:52
jambut unversion removes it anyway02:52
lifelessif that bug exists we have it already02:53
lifelessif you do bzr commit a/b and a is deleted, we should just delete b02:56
lifelesscare will be needed, I agree02:56
jamlifeless: I agree, but I'm saying that "record_iter_changes" is only going to have a delta for 'a/b' and not 'a/c' even though we are removing it in a follow up pass02:56
lifelessI'm down to 20 failures02:56
lifelessbut we won't remove all of a unless we record a delete of a02:57
jamI feel like it is opening up a hole, that you can catch by saying that the delta must verify itself complete02:57
lifelessand thus a/c won't be deleted, and if we did record a delete of a, a/c will be deleted [or the inventory delta is corrupt, which is even more serious]02:57
jamI agree, a delta being corrupt is serious, and you are missing a chance to catch it02:57
lifelessjam: unversion is on tree, its not the delta committed to the repository02:58
lifelessjam: I don't quite see the correspondence02:58
jamlifeless: the delta you are committing to the repository *should* match the one that tree is applying to itself02:58
lifelessjam: uhhhh02:59
lifelessjam: may be we're talking about completely different thigns02:59
jamso commit auto-detects missing files02:59
jamand then calls tree.unversion on them02:59
jamto match the fact that it commits the delete to the repo02:59
jamI'm saying that the logic in unversion03:00
jamcan check that the logic from commit is matched properly03:00
jamIf commit sees that 'a' is missing, commit *better* see that a/b and a/c are missing03:00
jamand thus it can pass all of those to unversion03:00
jamand unversion can double check that it agrees that everything under 'a' was marked removed03:01
lifelesswell03:01
lifelessthese sets do not have an equality constraint03:02
lifelessalready unversioned things03:02
lifelessI think that it might be good if repo.add_inventory_by_delta checked deletes remove all children correctly (by checking the basename map)03:04
lifelessor something03:04
poolielifeless: hi i'm back03:22
poolielifeless: so iiuc you're saying03:23
pooliedeleting the parent will implicitly remove the childern03:24
pooliechildren*03:24
pooliebut explicitly removing some or all of the children as well will not be an error?03:24
pooliethat makes sense to me03:24
lifelessright03:24
lifelessspecifically today, unversion[b,a] works, unversion[a,b] doesn't03:25
lifelessI think it should work03:25
lifelessdown to 16 errors03:32
poolieagree03:33
igcpoolie: one patch you may wish to review before you go on leave is http://bundlebuggy.aaronbentley.com/project/bzr/request/%3Cb87b89280902251019u212be32bv5e1b33fbe3dea83c%40mail.gmail.com%3E03:43
pooliethanks igc03:43
poolieah right03:43
igcpoolie: from memory, you were involved in the email thread leading up to it03:43
igcpoolie: and it's been sitting there for a month now as most of us are buried in brisbane-core03:44
pooliesure03:44
pooliei read the previous version03:44
pooliei asked for tests and they seem to be there so it should be good to go03:44
pooliethanks for the nudge03:44
lifelessbah03:58
lifelessiter_changes skips over subtrees03:58
lifeless6 to go04:16
poolieigc: that docs fix does actually work for me even in a new checkout04:24
pooliewhich is odd04:24
poolieigc, i'm inclined to just send it and see if pqm agrees...04:31
igcpoolie: worth a try :-)04:38
lifeless4 tests left04:42
poolielifeless: hi?04:59
poolieyou fell offline?05:00
VSpikeJust wondering... for a checkout, should bzr push to the "checkout of" branch ever do anything?05:01
lifelesspoolie: nope05:01
lifelesspoolie: still here :) deep hack is all05:01
pooliehm how curious, pidgin shows you as offline05:01
lifelesslies, its all lies!05:01
lifelessso, I have inventory free commits05:16
lifeless-woo-05:16
chrispitzeri'm hitting a problem pushing to a remembered location with bzr.05:46
chrispitzerI'm getting this when I try to push... bzr: ERROR: Generic path error: '85zdaceo7r26xzgd8t3m.fetch': Failure: unable to rename to '../packs/e1918987d0a82b7fad850f3c976fe036.pack')05:47
chrispitzerany idea what's happening?05:47
lifelesschrispitzer: hmm, are you onwindows perhaps?05:48
chrispitzernope05:49
chrispitzerdev on ubuntu - pushing to shared hosting.05:50
chrispitzerso I guess i don't know what the shared host is using... it's dreamhost05:50
lifelessis it ftp?05:50
lifeless(sorrry, on a phone call will be high latency05:51
chrispitzerThe remembered location is over sftp05:51
lifelesschrispitzer: thats odd06:01
lifelesscould be permissions, or a still open file06:02
Peng_DreamHost used to use NFS. They do something different now; probably just local ext3. Shrug.06:03
lifelesschrispitzer: what bzr version are you using?06:03
chrispitzerhow do i check that?06:05
Peng_chrispitzer: "bzr version"06:06
Peng_Augh!06:08
chrispitzer1.6.106:09
chrispitzerI just nuked the .bzr folder on the remote server and pushed using --use-existing-directory06:09
chrispitzerso that solves it for now.06:10
chrispitzer*shrug*06:11
lifelesschrispitzer: I suspect this is fixed somewhere around 1.10 or so06:14
lifelessI recall a similar bug report which we fixed06:14
Peng_What's Andrew Bennetts's nick again? andrew?06:14
lifelessoh, or someone deleted a directory06:14
lifelessPeng_: spiv06:14
Peng_Oh, duh, right!06:14
Peng_Thanks.06:14
Peng_spiv: ping06:14
chrispitzerhm06:23
chrispitzerhow so i push a working copy to a remote location?06:23
Peng_chrispitzer: You could use the bzr-upload plugin.06:24
Peng_chrispitzer: Or, if you have bzr installed on the server, you could push the branch, create a working copy on the remote side ("bzr co" in the branch), and install the bzr-push-and-update plugin locally.06:25
chrispitzeri think I'll need bzr-upload, as the server doesn't have bzr and I don't have control to install it06:29
Peng_chrispitzer: DreamHost? Why not? You can install it in your homedir if you want to.06:32
Peng_chrispitzer: I don't recommend it, since procwatch will probably murder it in the middle of large operations, but you *can*.06:32
chrispitzerlol06:35
chrispitzerug...06:38
chrispitzerbzr upload only allows full uploads, not differential?06:38
lifelessit does incrementak06:38
lifelessbut each file is full copied06:38
chrispitzerlol06:39
chrispitzerwhat's the point of that?06:39
chrispitzerit uploads the file, and if the file's already there it ignores the upload?06:39
Peng_What's the point of what?06:40
chrispitzeruploading everything, when you're going to discard 90% of what you upload06:40
Peng_Why are you going to discard 90% of what you upload?06:41
spivPeng_: pong06:41
Peng_spiv: Hi!06:41
chrispitzerthat's what bzr upload is doing (if I'm reading it correctly)06:42
Peng_spiv: The smart server jail stuff completely broke bzr+http with shared repos. What's the solution? File a bug? Edit my smart server script?06:42
spivPeng_: possibly both06:43
spivPeng_: start with filing a bug, though06:43
spivI'm surprised to hear that case broke, though.06:43
Peng_:D06:43
spivIn what way did it break?06:44
Peng_spiv: The server's logs get spammed with "BzrError: jail break: 'chroot-139142476:///repo/", the client gets a similar UnknownErrorFromSmartServer.06:45
spivThat's very odd.  That suggests a mismatch between the jail setup and the backing transport on the request handler.06:46
poolieigc, i did that review btw06:57
pooliehullo spiv06:57
Peng_spiv: Filed bug 348308.06:58
ubottuLaunchpad bug 348308 in bzr "Smart server jail breaks bzr+http with shared repos" [Undecided,New] https://launchpad.net/bugs/34830806:58
lifelesschrispitzer: you're reading it wrong :P it uploads only the changed files AFAIK06:58
chrispitzerit uploaded everything the first time, but only incremental since then.07:01
chrispitzerso it's good.07:01
chrispitzerI mean, even the first time the working copy should have matched the remote copy time stamps and all... but oh well. :P07:02
lifelesschrispitzer: it doens't work with working copies though, because we don't have the ability to efficiently and in a user-friendly deal with concurrent changes, conflicts etc07:03
igcpoolie: saw that, thanks07:08
vilahi all07:09
lifelesshi vila07:09
pooliehi vila07:10
poolieit might be nice if we really could deal with full remote working copies07:11
poolieit's possibly possible :)07:11
vilahmm, it would be nice if people stop proposing bzr-upload to upload a working tree since there is an explicit check there to ensure it will refuse to do so :)07:14
lifelesspoolie: I'm still skeptical but won't stop people doing it:)07:14
poolieoh sometime i'd like to talk to you about whether just adding an indirection file to the dirstate is really enough07:15
lifelesspoolie: ok07:15
lifelesspoolie: over lunch perhaps :P07:15
poolieas i said in the bug i thought there was a bug in that but imbw07:15
lifelesson my plate is to analyse 'st' updates and then I have enough data for a proposal07:15
lifelessI'll check the bug when I next think aboout that problem07:17
lifelessfor now, conversion to current chk is in progress, -> dinner07:17
pooliedo you mean analyze the value of updating the hash from st?07:17
pooliecool, good night07:17
lifelessI mean to analyse the potential race conditions of status doing that07:19
lifelesswith the alternate design07:19
=== thekorn_ is now known as thekorn
igchi vila08:02
igcvila: a present for you in the mailing list: my 'log DIR' patch ready for you to reconsider :-)08:03
vilaigc: hehe, ok, will look at it08:03
igcvila: that would be awesome - thanks08:03
vilaigc: on the other hand if you could have a look at the bbc test failures related to 'CHKInventory' object has no attribute 'filter' ... :)08:08
igcvila: Sure do. I'll do that either tonight or tomorrow08:13
* igc dinner08:13
vilaigc: thanks, enjoy your dinner :)08:13
lifeless19K test revisions converted08:26
pooliehi lifeless08:49
pooliei'm about to press send...08:49
spivlifeless, jml: http://pybites.blogspot.com/2009/03/unittest-now-with-test-skipping-finally.html09:54
lifelessspiv: well, thats good. the total lack of discussion is a bit odd10:06
lifelessor perhaps we were looking in the wrong place?10:06
lifelessalso the implementation of class skipping is pretty bong10:11
lifelesswtf doesn't def run() handle that10:11
AfCbong.10:16
OllieRis there a command to find out if a checkout if lightweight or heavyweight?11:41
Peng_OllieR: "bzr info", I suppose11:41
OllieRPeng_: that gives checkout location info and type11:42
OllieRbut doesn't tell me whether it was lw or hw11:42
OllieRannoyingly :(11:42
Peng_Seriously?11:42
Peng_Huh!11:42
OllieRyah11:42
OllieRunless it does on a later version i am running Bazaar (bzr) 1.3.111:42
Peng_OllieR: I'm on bzr.dev, and the second line will say either "checkout root" or "light checkout root".11:43
Peng_(err, third line. The first line of the Location section.)11:43
OllieRPeng_: right yes so it does :)11:46
OllieRPeng_: many thanks11:46
Peng_:)11:46
MezHey there, getting a bit of a weird error.12:07
Mezbzr: ERROR: bzrlib.errors.TooManyConcurrentRequests: The medium '<bzrlib.smart.medium.SmartSSHClientMedium object at 0x9e117ac>' has reached its concurrent request limit. Be sure to finish_writing and finish_reading on the currently open request.12:07
Peng_Mez: That probably means some unknown error happened, but it got masked by that. What version of bzr? It might've been fixed.12:08
Mez1.1212:08
Peng_Mez: Oh. That probably won't help, then. Still, 1.13.1 is out; you should upgrade. :)12:09
Peng_Mez: Sorry I can't help you...12:09
Mezseems an upgrade to 1.13 worked Peng_ (after running break-lock)12:16
Peng_Mez: Really? Great. :)12:18
lifelessigc: did you see my commit figures?12:27
igclifeless: I did. well done12:30
igclifeless: we just need to sort out the nested trees issue & I'm be very happy12:31
igcre commit in brisbane-core12:31
Peng_This is a dumb comment, but.. is it just me, or is brisbane-core a scarily large amount of new code?12:32
igcPeng_: it's a scary amount of thought ...12:36
igcthe code change themselves aren't huge in volume12:36
igcnight all12:37
Peng_igc: G'night.12:37
Peng_igc: 12,230 new lines according to diffstat, though they aren't all necessarily very interesting.12:39
OllieRcan you get bzr to default to a lightweight checkout?12:42
lifelessigc: would like it if you could arrange to run usertest with bbc + my patch from bundlebuggy merged + the lineI highlighted commented out12:43
lifelessigc: it would be very useful to know if there are surprises12:43
lifelessigc: there is about 12MB of packs12:43
Peng_OllieR: I guess you could make "checkout" an alias for "checkout --lightweight".12:43
Peng_OllieR: I'm not sure how you'd make a heavyweight checkout then..12:43
lifelessigc: I am wondering if we want to just cherry pick from bbc a lot to do the merge12:43
lifelessPeng_: --no-lightweight12:43
Peng_lifeless: Oh, okay.12:44
Peng_lifeless: Cherrypicking's no fun.12:44
lifeless10% of our total history isn't either :P12:44
OllieRPeng_: yeah not bad thinking12:44
OllieRlifeless: how do you mean --no-lightweight?12:45
OllieRcan't see that in any man pages12:45
Peng_Once everybody upgrades to bbc, that'll only be like 20 KiB, right? So what's the big deal? :D12:45
Peng_lifeless: 10% of history ish't *that* terrible. It'll be a pain to "bzr pull" when it lands, but it's not significant to "bzr branch" or anything.12:47
Peng_It's only significant because it'll come all at once.12:47
* Peng_ gets shot by someone on dial-up12:47
jelmerPeng_: you can also always do a stacked branch12:48
Peng_I wonder how large it would be even without history?12:50
Peng_Sending it to BundleBuggy would be funny. :)12:51
james_wdoes the new progress ever move to a unit larger than KB?12:56
james_w130000KB is too many digits for me12:57
nilghi, is there a tool to print what modifications has been done by who for a given file, thx13:22
Peng_nilg: "bzr annotate"?13:23
nilgyeah exactly what I wanted Peng_, thanks!13:25
Peng_:D13:26
james_wvila: hi13:36
vilajames_w: hi !13:37
james_wvila: would adding something like transport.get_transport(for_writing=True) make any sense?13:37
james_wthen bubbling that up to things like Branch.open()?13:37
james_whaving the intent there would allow better error messages when there is a mismatch between what you want to do and what is possible on the transport I feel13:38
vila1) I think most commands already use {branch,repo,wt}.open[_containing] so I'm not sure it's the right place13:40
vila2) You can't always decide from the url only if you will be able to write or not13:41
vilaand even if the scheme itself allows writing you may be denied later13:41
vilaYou're back to the not-logged-in-launchpad error message ?13:42
james_wyeah13:42
james_wI put it there, so I feel responsible that it sucks so much13:43
vilaresponsible does not imply gulty :)13:43
james_wI don't see what commands using open_containing et al have to do with it, they would indicate whether they will try and lock the branch for write or not13:43
james_wBranch.open_containing(for_writing=True) or similar13:44
james_wthere may be a few cases where they don't know, but that would be acceptable I guess13:44
james_wyour point 2 makes sense, but I believe we could at least communicate this to the directory service13:44
james_wthe lp: service could then give an error when it needs to13:45
vilaHow about checking that in the commands themselves via the underlying transport ?13:45
vilaor catch the exception and rephrase it if needed ?13:46
vila:-/13:46
james_wchecking was my first attempt, but the way that I did it was vetoed13:49
james_wI think we do attempt to catch the errors in a few places, but it's hard to get them all, and it keeps shifting13:49
james_wplus that gives no way for the lp: service to suggest lp-login13:49
jamjames_w: I think we would consider a "Branch.open_locked(for_write=True)" or "Branch.open_write_locked()"14:03
jamWe've talked about it on the list14:03
jamas a way to get around the current open + lock as a standard function14:03
jamalso, some internals tend to lock objects, and then unlock them to return them14:03
jamwhich then gets locked right away14:04
james_wthat sounds sensible14:05
james_wwould passing that information down to the transport layer be ok?14:05
james_wmost things wouldn't use it I imagine14:05
james_wor perhaps I misunderstood at what layer the directory services operate14:06
abentleyjames_w: It is a lookup that is performed by get_transport.  Transports themselves don't use it.14:11
abentleyjames_w: So I think pushing it down there would be fine.14:11
rockyjelmer: is svn-push still required to setup a new branch folder with bzr 1.13 and related bzr-svn ?14:11
abentleyjam: +1000 on a method for opening locked branches.14:12
jelmerrocky: yeah14:13
jelmerrocky: I have a patch for bzr.dev that allows it to integrate into "bzr push", but it hasn't landed yet14:13
jelmerwhoa, when did "bzr branch --stacked" get so freakishly quick?14:15
jelmercheckout out bzr.dev takes just 7 wallseconds14:16
Peng_jelmer: http://bazaar-vcs.org/bzr/ was upgraded to btrees recently; maybe that's why?14:16
jelmerPeng_: yeah, I guess that'd explain it14:17
rockyjelmer: hrm, my svn-push is hanging :/14:23
Peng_rocky: Hanging or doing a lot of work very inefficiently? :D14:25
rockyhehe it's hard to tell the difference when it doesn't end ;)14:29
brink_jelmer:  bzr git took me by surprise.   I had some bzr commands I forgot about in some scripts.  Accidentally ran them in a git repo and it just worked.  Nice.14:32
jelmerbrink_: :-)14:55
gnomefreakcan i push a branch using sftp?15:01
james_wyep15:02
gnomefreakjames_w: thanks15:02
jamjelmer: Along with the btree changes, I also recently changed the "grab the working tree" code to batch up requests into 5MB chunks15:08
jamwhich made a big difference for the python 'branch --stacked' I was testing15:08
jam(rather than requesting the content for each file separately)15:08
abentleyjam: The need for a fast iter_references seems legitimate to me, but since the current bbc format doesn't have it, should we consider having a new format for nested trees?15:19
jamabentley: it wouldn't be terribly hard to add another "chk_map" or similar to the disk format for brisbane-core15:20
jamand bring it in before we merge it to stable15:20
jam(we have a few more days, at least)15:20
jamotherwise, if you feel it isn't possible to do efficently without a disk format bump15:21
jamthen we can just disable it, and plan for one15:21
* Kinnison finally works out what brisbane-core is. "oooh" is my reaction15:21
jamI'm wondering, for example, if "bzr branch meta-1 meta-2" *needs* to create the new branches15:21
abentleyjam: I think an additional chk_map would probably work.15:22
abentleyjam: I guess we could make it optional.15:24
jamabentley: I would sort of like if the top level "inventory" record could know whether there was actually any entries, and could store a "NULL" reference, separate from a genuine sha1 reference15:24
jamotherwise, I guess you just get the same null-sha1 everywhere15:25
jamwhich isn't terrible15:25
abentleyjam: The idea is that nested behaviour should match non-nested behavior as much as possible.15:25
abentleyjam: not sure what you mean.  Are you talking about the chk map?15:25
jamabentley:  we still have an inventory text, which points out the file-id for the root of the tree, the root node in the id_to_entry map, and the root node in the parent_id_basename_to_file_id map15:26
jamI assume we would add a root key for the "tree_reference" map15:26
abentleyjam: That seems like a sane optimization.15:26
jamI'm just offering that it should probably consider having a "tree_reference: NULL" entry15:27
jamwhen we don't have any actual references15:27
jamit isn't a big deal15:27
jambut it means avoiding paging in an empty page15:27
abentleyjam: so about nested matching non-nested behavior: if you branch from foo, you have a new line of development for all files in foo.  If you branch from bar, and bar contains baz, it makes sense that you have a new line of development for all files in baz.15:29
abentleyWhether baz is a tree reference or a directory.15:30
abentleyjam: We're probably also going to want some more sophisticated branch/checkout operation that knows some trees should be checkouts and some should be branches.15:31
abentleyjam: based on user configuration.15:32
jamabentley: my argument is that there are a lot of ways it could be done, I would also venture that in the most common case, you *don't* want new branches for *all* of the sub projects15:33
jamI understand your arguments, and it comes down to the "implementor" gets to decide15:33
jamI'm just thinking that if the only use case that *has* to have the index, is "bzr branch" in a shared treeless repository15:35
jam(all other cases being ones where we are already walking the inventory)15:36
jamthen maybe we need to re-think that use case15:36
abentleyjam: I would venture that you want at least two new branches in the common case: one for the top-level directory holding the project and all its libraries, and one for the project source code itself.15:36
gioelehello15:36
gioeleis the bzr package on PPAs based on 1.13 or 1.13.1?15:36
abentleyjam: That's the only one we've found so far, but I haven't looked around at the others yet.15:37
jamgioele: I would guess the ppa hasn't been updated yet, as it should be "1.13.1-X"15:39
jamjohnf is the one who has been building them, but I haven't seen him around15:39
jamthen again, maybe he used -2 rather than going .1-115:41
jamwhich would be incorrect, but possible15:41
gioelejam: I see15:43
abentleyjam: At a glance, everything else could be redesigned to not use iter_references, not that this would be especially easy.15:43
jamgioele: if you install it, you can always do "bzr --version" to find out :)15:43
jamabentley: sure, like I mentioned in the post with Robert, the layering gets a bit tricky for stuff like "commit"15:45
jamthough I think having iter_changes always return tree references15:45
jambecause we don't *know* whether they have changed or not15:45
jamis a reasonable change15:45
abentleyjam: it depends on what you mean by changed.  We don't know if the subtree is changed, but the tree reference is only changed if its revision doesn't match the last_revision.15:46
jamabentley: but we don't know if its revision would match last_revision unless we've checked that the subtree has/hasn't changed15:47
jamconsider what "diff" really cares about when it wants to recurse15:47
jamArguably iter_changes in revision trees could chop off that entire subtree15:47
abentleyjam: The subtree will commonly change without its last_revision changing.15:48
jambut workingtrees seem like they should always recurse15:48
jamabentley: .....15:48
jamthen when you commit15:48
jamit doesn't record a new reference15:48
jamso that checkout15:48
jamgives you the new subtree?15:48
jamI thought the "content" for a tree-reference was the last-committed revision of the subtree15:48
jamnot the last-modified revision of the tree root15:48
abentleyjam: last-modified revision of the *subtree* root?15:49
jamright15:49
jamsorry15:49
jamIt should be the Tree.get_revision_id() not Tree.inventory.root.revision15:50
abentleyjam: Correct.15:50
jamabentley: which means that if the subtree content changes15:50
jamthen it's Tree.get_revision_id() should change15:50
jampossibly being "None" to indicate it doesn't know what it will be15:50
jamyte15:51
jamyet15:51
abentleyjam: only if there's a commit.15:51
jamabentley: I would argue that it should be None if there are changes and no commit15:51
jamsuch that "bzr commit --no-recurse" would then know to record the last value15:51
jambut "bzr commit" and "bzr diff" would both know that there are changes to be checked15:51
abentleyjam: I don't think so.15:51
jamabentley: what do you gain by having a value that is "not quite correct" ?15:52
abentleyjam: The value is entirely correct.15:52
jam(the content of the tree that is referenced, does not match exactly the content that the revision_id describes)15:52
abentleyIt's defined to be whatever the last_revision in the subtree was at the time when the last commit in the parent tree happened.15:53
abentleyIf there are no commits to the subtree, it's unchanged.15:53
jamabentley: that is the "basis_revision_id"15:53
jamwhich I think we sort of get confused with "revision_id"15:53
jambecause WT.last_revision() and RevisionTree.last_revision() both return something15:53
jambut it doesn't actually have the same meaning15:53
abentleyjam: No, it's MutableTree.last_revision15:54
jamabentley: so if you compare the current WT versus its basis, the fact that the tree reference points at the old value is sort-of wrong15:54
abentleyjam: I was not aware that RT had a last_revision15:54
jambecause it would indicate that there are no changes in the subtree15:55
jamwhen there are15:55
abentleyjam: You are assigning a meaning to the tree reference that I am not assigning to it.15:55
jamabentley: And I'm wondering why have a value there that doesn't have meaning15:55
jamif you can't use it to check for equality15:55
jamthen you may as well use None15:55
abentleyjam: My mistake, for a WT the value of the tree reference should always be the subtree's WT.last_revision15:58
jamabentley: you still can't use it as an equality check15:58
jamand it still seems like it should be None15:58
jamjust like the last-modified-revision for all files/dirs in the WT15:58
abentleyjam: You can then compare it to the basis one and decide whether to commit the entry.15:58
abentleyjam: I think it's more like get_file_sha1.15:59
jamabentley: but without scanning the subtree, you don't know if there are any modifications15:59
jamI suppose "bzr commit --no-recurse" could use it15:59
abentleyjam: and neither do I care if there are uncommitted modifications in the subtree.15:59
jamabentley: commit and diff both care, don't they?15:59
jamas in "bzr diff" in the parent project15:59
jamshould tell you there are changes in the child15:59
jameven if you haven't committed16:00
jamOr are "commit" and "diff" not fully recursive?16:00
abentleyjam: Sure they do.16:00
abentleyjam: They don't use iter changes that way, though.16:00
jamabentley: I'm arguing that they should...16:00
jamas it means you don't need iter_references()16:01
abentleyjam: At the cost of damaging the clarity of iter_changes futher.16:01
abentleyjam: If you're going to do recursion via iter_changes, you might as well just recurse in iter_changes itself.16:02
abentleyThat way, you don't have to emit unmodified entries.16:02
jamabentley: except 'commit' needs to start a new commit process in the subtree16:03
jamsince it won't share the revision_id, etc of the containing tree16:03
abentleyjam: commit can figure out that the containing tree doesn't own the file and start a new commit process.16:04
jamabentley: that seems far more expensive16:04
jamI think there should be room for a WT.iter_changes() that can return objects that may-or-may not have changed16:04
jamso that we don't have to verify that things have definitely changed16:04
jamuntil commit has finished16:05
jam(to avoid double-sha, etc)16:05
abentleyjam: I don't know how expensive it would be, but it doesn't seem like it has to be expensive.16:06
jamabentley: checking that every record is in the containing tree means you have to check every file, and recurse up to its root16:06
jamabentley: at a minimum, it is an extra check on every object16:06
jamrather than having it handed to you16:06
jamsince it already knows it16:06
jamwhen we hit a tree-reference, we *know* we are at the boundary16:07
jamwe don't have to check every modified file to see if it "really is" in this tree16:07
jam(the check isn't very expensive, but it is still a check on all files, and even whether you have tree references or not16:07
jambecause there *might* be a tree reference)16:07
abentleyjam: Don't we already look up the record for each modified file anyway?  And wouldn't that automatically fail?16:09
jamabentley: perhaps, though you then need to go figure out which subtree it was really in, etc.16:10
jamit still seems far cleaner to have it done with commit getting a tree-reference16:11
jamnot that it isn't possible to do either way, just cleaner16:11
jamagain, whoever is willing to write the code gets the final say16:12
jamI'm just describing my viewpoint16:12
abentleyYeah, and I disagree about all of this being cleaner.16:13
jamabentley: consider that the file_id may not be present, because it was an added file16:13
abentleyjam: what happens when you implement iter_changes betweeen two CHK trees?16:13
jamabentley: we have one, but it doesn't support subtrees16:14
jambecause the behavior is still pretty "undefined"16:14
jamalso, note that WT versus basis16:14
jamis *very* different from RevisionTree to RevisionTree16:14
jamand will always be so16:14
jamas you have to probe the content on WT16:14
jamand you *don't* on RevisionTrees16:14
jamand you also don't try to *commit*16:15
abentleyIt just seems that it's hard to emit the tree reference in that case unless it has changed.16:15
jamthe results of RT.iter_changes(RT)16:15
jamabentley: I generally, agree, my main argument is that for WT.iter_changes() we don't *know* without recursing if the subtree has changed16:15
jamseparate from RT.iter_changes(RT)16:15
jamabentley: I suppose I would agree that RT.iter_changes(RT) doesn't return tree references that haven't changed16:16
abentleyjam: They're supposed to have the same behaviour, given the same options.16:16
jambut WT.iter_changes(WT.basis_tree()) doesn't know16:16
jamand *should* return something16:16
jameither that, or it has to recurse into the subtree, wait for it to return whether it has changed or not16:16
jamand then use that to decide the last-modified of this tree16:17
jamentry16:17
jamand then finish scanning16:17
jamthat would be okay16:17
jamas it would then emit records for subtrees that really have changed16:17
jamwhich is what commit cares about16:17
abentleyjam: I don't think last-modified enters into it.16:17
abentleyjam: are you thinking of reference_revision?16:18
jampossibly, I'm not 100% sure what values go where16:19
jamthe point is that WT.iter_changes(basis) needs to actually scan, and can't rely on a cached value16:19
phinzeis it considered "bad form" to commit code to a downstream shared branch that really belongs in the central main branch?  i'm working on a feature that belongs in our trunk shared branch, but currently it has only one use case in the shared project branch i'm on... so i've been essentially shelving and unshelving to make sure that the code that belongs in trunk doesn't make it into the project branch16:19
phinzemy question is whether or not this is unnecessary and i should just commit it and pull it upstream when i'm ready?16:20
abentleyphinze: I'd be inclined to commit it into a separate branch, just to reduce the hassle.16:21
vilaphinze: I think you answered yourself, commit in branches with clear definition, create as many as you need and then merge them when you're ready16:21
phinzeyeah i suppose i'm only running into this because in this particular case i've neglected to use a task branch16:21
vilaphinze: see, you knew :)16:21
abentleyphinze: The loom plugin gives a way to automate this more.16:21
abentleyjam: Well, iter_changes doesn't emit either, so it's just a question of whether to set the modified boolean.16:22
phinzeokay so assuming i have a task branch were all changes belong in project branch "bar" but changes to file "dir/qux" belong in trunk16:22
phinzei would just merge everything into bar and then from trunk merge ../foo/dir/qux?16:23
phinzeooop16:23
jamphinze: I'll often split things out to go into a separate feature of trunk, commit it, get it merged to trunk, and then bring it back into my project branch16:23
phinzethat should be ../bar/dir/qux in my example16:24
=== beuno_ is now known as beuno
phinzejam: like this?: bzr branch trunk trunk-feature; cd trunk-feature; bzr merge ../bar-feature/dir/qux; bzr ci -m "Merging trunk feature from bar task branch"; cd ../trunk; bzr merge ../trunk-feature; bzr ci -m "Adding trunk feature"; cd ../bar; bzr merge ../trunk; bzr ci -m "Merging trunk into bar"; bzr merge ../bar-feature; bzr ci -m "Merging bar feature that happens to have trunk feature that I already merged from upstream"16:27
phinzeperhaps i should have pastebinned that... :\16:27
phinzejam: http://pastie.org/42669416:29
rockybah i hate it that in emacs shell the status tty stuff doesn't work very well with bzr16:29
phinzebbl16:30
jelmerrocky: did your svn-push finish?16:30
rockyjelmer: it didn't but i cancelled it, i'm trying again right now16:31
rockyoutside of emacs ;)16:31
rockyit's doing something but the status message is "discovering revprop revisions 609/"16:31
jelmerjam: hi16:33
rockyso far it says 10285kB @ 30kB/s ... whatever that means16:33
jelmerrocky: well, that's the amount of data it's transferred from the remote server16:34
rockyfrom or to?16:34
jelmerrocky: both, subversion doesn't distinguish when reporting data transfer16:34
rockyit occurs to me that there is a lot of content to upload so perhaps that's the issue here16:35
jelmerrocky: this all happens before the actual pushing16:35
jelmerrocky: it's just checking which revisions you have in your bzr repo already exist in the svn repo16:35
Mezhow do I get rid of16:35
MezNo handlers could be found for logger "bzr"16:35
Peng_Mez: Context? Where is this happening?16:36
beunoMez, try removing bzrtools16:41
beunoand see if it still happens16:41
beunowhat version of bzr are you using?16:41
MezPeng_: any action with bzr16:42
Mezusing 1.1316:42
Mezremoving bzrtools makes no difference16:43
Peng_Mez: Oooh. I don't know. Do you have permissions to write to ~/.bzr.log?16:43
Peng_Mez: Do you have the environment variable BZR_LOG set?16:44
Mezah...-rw-r--r-- 1 root root 66911 2009-03-25 16:42 /home/mez/.bzr.log16:44
Peng_Mez: Better, "bzr version" will show where it puts the log file. -- but you've already got it.16:44
Mezthat resolved it (chown)16:45
Peng_:)16:45
Peng_Maybe bzr should warn if the log setup fails.16:45
=== Toksyury1l is now known as Toksyuryel
jamjelmer, phinze: sorry I didn't get back to you yet, I had a phone call, and I'm going to eat lunch real quick, bb ~30min17:06
jamphinze: my guess is that doing "bzr merge ../bar-feature/dir/qux" is going to actually be a "cherrpick" because you aren't merging all of the changes from that branch.17:30
jamHowever, it otherwise looks correct.17:31
jamI might do it as...17:31
jelmerjam: I was wondering if a combination of your two suggested solutions for subtree performance handling in bbc would work17:31
jamphinze: nm, I saw that you were merging trunk back into bar, which is what I was about to mention17:32
jamjelmer: there are certainly lots of possibilities. There is also the "we would like to have bbc in core by the end of this week"17:33
jamso it is part of the rc1 next week17:33
jelmeroh17:33
jelmerI wasn't aware that was the plan :-)17:33
jamso what is our immediate goal17:33
jamand what will we get done later17:33
jelmernot that I'm complaining ;-)17:33
jamcan we get subtree performance to not be an immediate regression such that it would block bbc17:34
jelmerjam: in that case the "subtrees known broken" one seems most reasonable to me17:34
jamjelmer: though if "known broken" is the case, and we know we need a disk format bump17:34
jamthen we may as well continue to leave them broken17:34
jamsorry17:34
jamdisabled completely17:34
jamand expect there to be a --dev6 before we make them an official format17:34
jamso the discussion was about seeing if we reall need a --dev617:35
jamor whether the current structures are enough17:35
jelmerahh17:35
jamThe current structures are enough for all cases but 117:35
jamwell 'hypothetically given enough coding" enough17:35
jamand that 1 case could be written to happen differently17:35
jambut if that is seen as a bad route to what we want ultimately17:36
jelmerjam: but leavning them broken would mean people don't need to upgrade to a new inventory file format17:38
jelmerjam: when they start becoming supported17:38
jamjelmer: right, but if we need new data on disk17:39
jamthey have to upgrade *anyway*17:39
jamso why allow them to shoot themselves in the foot with the current format17:39
jelmerjam: we'd just have to do a (cheap) upgrade to a format that had that index17:39
jamjelmer: sure, but why wouldn't the rest of it also be cheap?17:39
brink_Starting to think rename determination should be automatic.   Now that I've played around with it enough I realize that it makes integration, refactoring, etc., work much better.17:40
jelmerjam: aren't upgrades that involve inventory rewriting expensive?17:41
jamjelmer: it depends on how much of the inventory you have to rewrite17:42
jamXML inventories have a single text for everything17:42
jamso you have to rewrite MB of data17:42
jamIf it is just changing a format value in the top level node17:42
jamthat is pretty cheap17:43
jamAnyway, I don't have a problem having a serializer that can include "tree-reference" in the stream17:43
jamand just set the flag "supports_subtree = False" in the RepositoryFormat17:43
jamAnd possibly add a bit in the serializer to have it check that it really-doesn't-yet have 'tree-reference' written.17:43
jelmerjam: ah, I hadn't considered the fact that bbc's inventory format is faster to write deltas for17:46
jelmerjam: thanks for the explanation of all of this17:47
jamjelmer: out of curiosity, how does subversion handle commits with svn:external?17:47
jamIs it not possible to have an atomic update?17:48
Peng_So would bbc make going from plain to rich roots cheap as well?17:48
jamPeng_:bbc is rich-root only17:48
jamat least, that is the plan17:48
jamwe may back down17:48
Peng_jam: Sure, but if it wasn't, would it be?17:48
jamPeng_: converting a CHK-plain => CHK-rich-root should be *much* cheaper than it is today, yes17:48
jamas it is writing 2 pages17:49
jam(affected page, and root)17:49
jelmerjam: externals are a bit of a hack17:49
Peng_How cheap? Like, "bzr pack" cheap or "instant" cheap?17:49
jelmerjam: basically it will run "svn commit" in all underlying trees as far as I know17:49
jamPeng_: well, you'd probably want to do a "pack" afterwards anyway...17:49
jambut that is 10-20min cheap, not 48hours17:49
jamfor the MySQL repo17:50
Peng_48 hours? Woah.17:50
jam"bzr pack" on bzr.dev takes approx 2 minutes in bbc17:50
jamand recompresses all the texts17:50
jelmerjam: externals are a bit like config-manager, in that they point at a URL that's to be checked out17:50
jamjelmer: I thought it could also refer to an exact revision17:50
jampossibly URL@revnum17:50
jelmerjam: but it's possible to not reference a specific revision, and if you reference a specific revision, you have to write that into the externals property yourself AFAIK17:51
jamjelmer: so you could "guess" at the right revnum17:51
jambut in the end you could be wrong17:51
jamjelmer: I also thought with svn there was a way to say "i'm starting a commit, when I'm ready to finish, if the revnum doesn't match what I thought it would, abort and start over"17:52
jelmerjam: yeah, in the case of a two-phase commit there could be some other person committing in between the first and the second commit17:52
jelmer*first and second phase17:52
jelmerjam: that's only for the base revision17:53
jelmerjam: so if you open /trunk for committing when the last revision is 317:54
jelmerthen somebody else could be committing revision 4 in /branches/foo and you wouldn't get an error17:54
=== beuno_ is now known as beuno
=== cprov-afk is now known as cprov
=== beuno_ is now known as beuno
=== beuno_ is now known as beuno
=== mario_ is now known as pygi
chrish1Hello. I've been reading the bazaar workflows documentation, and I've noticed something that puzzles me. In the "Decentralized with human gatekeeper version", Bundle Buggy is given as an example. Then at the end in the notes, it says "The Bazaar developers use Decentralized with automatic gatekeeper to develop Bazaar itself." And from what I understood from reading the mailing list, Bazaar uses Bundle Buggy20:11
chrish1 for its development. So, one of these three statements has got to be wrong, no? Which one is it?20:11
chrish1Can Bundle Buggy also do "automatic gatekeeper" (run a testsuite before commit, etc.)?20:11
Peng_chrish1: Bundle Buggy is used for reviews. PQM is used as the gatekeeper.20:11
LarstiQchrish1: the human gatekeeper needs to track what to merge, the Bazaar developers need to track what to review (with bundlebuggy)20:12
LarstiQhi davidstrauss20:13
chrish1Oh. So when the merge request is approved via Bundle Buggy, it forwards that to PQM to be merged into the trunk?20:13
davidstraussLarstiQ: hi20:13
Peng_chrish1: No, when it's approved via BB, someone manually sends it to PQM.20:14
chrish1Oh. So there's no need for any integration between the two. If I want to duplicate that setup, I just install Bundle Buggy and PQM separately, and forward manually between the two. That clarifies it, thanks!20:16
LarstiQchrish1: I guess you could make bundlebuggy submit requests to PQM, I think we like to keep some human judgement in the loop still.20:17
LarstiQbut maybe it can be smoothened20:17
chrish1I guess it's just a single command to submit a change to PQM once it's been accepted at review?20:19
LarstiQchrish1: hmm, you ask PQM to merge a branch, maybe you could point it at BB. That might not actually be mergeable depending on the state of trunk, hmm.20:21
LarstiQchrish1: try it! :)20:21
chrish1Will try it when the project has started to get off the ground (when there's a testsuite, etc.). Btw, what's the best place to suggest a clarification to the bazaar-vcs.org web site content? (For what confused me in the Workflows page.)20:25
LarstiQchrish1: if you're confident about the change, editing the wiki.20:26
LarstiQchrish1: if not, the list or maybe here if it's something I could apply immediatly20:27
chrish1I just want to suggest adding something like "(using Bundle Buggy for patch reviews and PQM to manage the trunk.)" after the "The Bazaar developers use Decentralized with automatic gatekeeper to develop Bazaar itself." sentence. Would have clarified things for me.20:29
LarstiQchrish1: sure, I can do that20:36
LarstiQchrish1: especially since I realise that documentation is not on the wiki :)20:38
chrish1Thanks!20:39
LarstiQchrish1: could you point me at the exact url/section you had in mind?20:40
pooliechrish1: you should also look at launchpad.net/tarmac20:40
pooliewhich is meant to read review results and then test and merge automatically20:41
chrish1LarstiQ: http://bazaar-vcs.org/Workflows (go to the end, the "Notes" section, etc.) Basically clarifying what I didn't understand before asking here...20:42
LarstiQchrish1: thanks20:43
LarstiQchrish1: so I was mislead by similar sections existing in the user guide, this _is_ the wiki afterall.20:44
* LarstiQ edits20:44
chrish1poolie: Wow. Looks cool. Thanks for the pointer! Is it already at a stage where it's usable, or should I wait some more before giving it a shot?20:46
abentleyjam: Can you clarify: iter_references is slow on a RevisionTree?20:47
jamabentley: yes20:47
abentleyjam: Even though it's an all-memory operation?20:48
LarstiQchrish1: edited.20:48
jamabentley: it is all memory for XML trees, it isn't for CHK, but regardless it is an O(tree) operation20:50
jamso 'slow' is a bit relative20:50
chrish1LarstiQ: Saw it, cool. Nice to see the quick turnaround time for clarifications to the documentation. :-)20:50
jamit is only slightly fast for XML RevisionTrees because we already paid the cost of deserializing every entry20:51
LarstiQchrish1: it helps that you had a clear request :)20:51
LarstiQchrish1: so thank you for the feedback.20:51
chrish1LarstiQ: Thanks. Will come back and visit (and hopefully have clear requests) if there's something I find unclear again.20:52
fullermdDoes tortoise have an interface to 'revert'?20:53
LarstiQchrish1: cool. I haven't set up PQM myself, but am here to help regardeless.20:53
LarstiQfullermd: hmm, it should.20:53
* fullermd is on a conference call.20:54
* LarstiQ looks at the code20:54
LarstiQfullermd: it has a call to qrevert, so I'd wager yes.20:58
fullermdI couldn't guess how to get at it, and he couldn't find it...20:59
LarstiQI can't actually test fully without windows here.21:02
LarstiQbut:  gettext("Re&vert..."), gettext("Revert local changes"),21:02
LarstiQif that's not showing up in the context menu, I don't know how it works21:02
fullermdWell, we ended up using the obvious and trivial workaround of making a new checkout of the whole tree at a given revision and copying the files.21:02
* fullermd is sure that was good PR.21:02
LarstiQfullermd: :/21:03
jelmerlifeless: hi22:03
lifelesshi22:06
Peng_Who thought of stacked branches? They're a really great idea. :)22:10
jelmerlifeless: You did some research before choosing a db format for bzr-search right?22:11
jelmerlifeless: I'm trying to decide what bzr-svn should use instead of sqlite22:11
jelmerlifeless: the main things I'm looking for are simple search keys (integers or strings), append-only, multiple concurrent writers/readers, preferably widely available (ideal would be included with bzr/python by default)22:12
* mwhudson would also be interested in such a thing for loggerhead/revnocache22:13
Peng_Doesn't bzr-search just use bzr indexes...?22:15
jelmerPeng_: it uses an additional index22:15
Peng_jelmer: Yeah. And the format is just a GraphIndex or btree index.22:15
jelmerah, crap22:16
mwhudsonjelmer: what's the problem with sqlite?  the writers-block-readers thing?22:18
jelmermwhudson: yeah22:19
lifelessjelmer: yes, I did22:33
lifelessjelmer: gimme 30 to grab food and stuff, and I'll chat about this with you22:34
jelmerlifeless: thanks!22:39
lifelessjelmer: so23:16
lifelessjelmer: I  researched search engines first23:16
lifelessjelmer: with a requirement that they be able to work over ftp etc [ideally by hooking into the python transports of bzr]23:17
lifelessnon-starters, or at least 'much work needed'23:17
lifelessfor various reasons23:17
lifelessjelmer: I ended up writing my own search engine; and yes I based it on bzr's B+Tree indices which are pretty good and have nice characteristics like write-once23:18
lifelessjelmer: bzr-search builds a similar infrastructure to packs to get multiple writer multiple readers safely23:20
spivI just had a spam that started with "Jam with your bundle!".  No wonder it got past my spam filter...23:22
lifelessspiv: 1:30 is definitely fine23:22
spivlifeless: cool23:22
jelmerlifeless: hmm23:23
lifelessjelmer: and I have a small project aiming to replace bzr searches storage guts with a general purpose thing it could reuse23:24
lifelessI'm feeling my way around the domain/needed heuristics at the moment23:25
lifelessjelmer: if you need to replace the value of keys its a little more tricky than bzr-search or repositories support23:26
lifelessdo you need to do that?23:26
jelmerlifeless: no, it's read-only23:27
jelmers/read/append/23:27
lifelessjelmer: k23:28
jelmerbasically there are three kinds of information in the cache:23:28
jelmer- a copy of "svn log -v" on the root of the repository (incrementally updated whenever new revisions appear in the svn repo)23:28
jelmer- a table mapping bzr revision ids to svn revno/path tuples23:29
jelmer- a table with basic bzr metadata about each round-tripped revision23:30
lifelessright23:35
lifelessso bzr-search's approach would work fine for you, I think23:35
lifelessas my generic thing isn't fit to show yet :) - its basically:23:36
lifelesshave a collection of packs with a names list (crib this from bzr-search)23:36
lifelesswith a function to merge at log2 or whatever23:36
lifelesseach pack has a directory, which the names list points at (by saying the bytes the index is found at)23:36
lifelessthe directory maps table names to byte ranges in the pack23:37
lifelesseach of those byte ranges is itself a B+Tree index, with the right tuple keywidth for the table and strings as values23:37
jelmerlifeless: thanks, I'll look into that23:42
lifelessbzrlib.plugins.search.index23:42
lifelessread through that23:42
lifelessyou'll be able to discard everything specific to searching23:42
lifelessjelmer: https://code.edge.launchpad.net/~jelmer/pqm/distutils/+merge/569 did you get notified of my review/23:56
lifeless?23:56
mrooneyIs there an easy way to see the unpushed commits of a branch to the push branch?23:58
jelmerlifeless: yeah, I just haven't gotten round to fixing it yet23:58
lifelessmrooney: bzr missing23:58
lifelessmrooney: e.g. bzr missing :push23:58

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