/srv/irclogs.ubuntu.com/2008/07/02/#bzr.txt

berto-jelmer: sure, i'll give that a shot.00:02
lifelessjam: revno 8 has your patches with tests fixed00:05
berto-jelmer: not sure this is what you're after:  http://paste.pocoo.org/show/78325/00:06
berto-jelmer: i used this: gdb --args python /home/berto/local/opt/bzr.dev/bzr push /home/dev/repo.svn00:06
awilkinsjelmer: yegods this is tedious ; I now have it compiling (yay!) but not linking yet (Boo!)00:08
jelmerawilkins: :-( What error?00:09
awilkinsOh, it's normal for windows - totally different library finding. Let me patch my bits back in00:10
jelmerberto-: interesting - no idea00:11
jelmerberto-: Does the bzr-svn testsuite pass on your machine?00:11
awilkinsBah, spoke too soon00:12
* awilkins goes back to hand-unrolling struct initializers00:12
jelmerberto-: (make check)00:13
awilkinsjelmer: Yipes, it might have built00:15
jelmerawilkins: Any chance you can send a bundle with the C99-removal stuff?00:16
awilkinsjelmer: Am I supposed to have a bunch of pyd files?00:16
awilkinsAha00:16
awilkinsI have 4 pyd files00:16
jelmerawilkins: no, those were removed a long time ago00:16
awilkinsclient, ra, repos, and wc00:16
Odd_Blok1Does abentley still host BB himself, or has it moved to a Canonical server?00:16
berto-jelmer: ooh, aobrted!00:17
awilkinsjelmer: It's just built them00:17
jelmerawilkins: Which branch are you using then?00:17
awilkinsjelmer: 0.400:17
awilkinspyd files are the intended output of a C extension, no?00:17
jelmerawilkins: I'm pretty sure that doesn't contain any .pyd files..00:17
jelmerAh, this is windows of course..00:18
jelmerawilkins: maybe :-)00:18
jelmerthey're also the extension pyrex uses for one of its file types, that's what confused me00:18
awilkinsThey're in the build folder and marked 0015, I think that's a success00:18
jelmernice :-)00:18
berto-jelmer: http://paste.pocoo.org/show/78326/  i can't gather anything interesting from that.00:18
jelmerberto-: hmm, you may want to try "make valgrind-check" or "make gdb-check"00:18
awilkinsjelmer: Right, problem one, MSVC has no stdbool.h, so I've pasted a simple one and changed the includes from path-includes to -local-includes00:19
Odd_Blok1lifeless: What are your thoughts on moving PQM to a team-maintained branch on LP, and using BB and PQM itself to do the development?00:19
jelmerawilkins: Can you exclude those changes for now?00:19
awilkinsjelmer: Sure, let me shove them on a shelf00:19
berto-jelmer: i'm thinking py2.5 might be the way to go and see if all this goes away.00:19
lifelessOdd_Blok1: uhm, pqm implies a non team maintained branch :)00:20
lifelessOdd_Blok1: I'm fine with the idea of BB, though we're using lp's review system at the momen00:20
Odd_Blok1lifeless: Yeah, LP's review system is probably OK.  I'd quite like for PQM to be self-hosting though, so that I'm forced to get to grips with it as a user.00:24
awilkinsjelmer: Does vi put UTF-8 signatures at the front of files?00:25
=== Odd_Blok1 is now known as Odd_Bloke
jelmerawilkins: nope, I do :-)00:25
awilkinsjelmer: Ah, so these are meant to be here?00:26
awilkinsjelmer: They're showing up as changes in shelve ; maybe that's a bug00:26
awilkins+´../* Copyright .® 2008 Jelmer V00:26
awilkins(the ".." are the unprintables for UTF-8 signature00:27
jelmerawilkins: Probably some sort of bug on Windows00:27
awilkinsjelmer: Hmm. I'll test that in a bit00:27
lifelessOdd_Bloke: I think I'd rather have the dependencies on baz etc really wound back before trying for that00:27
lifelessOdd_Bloke: its not the friendliest thing to setup today00:27
awilkinsjelmer: 'tis ok after I strip them off in an editor that is aware of them00:27
Verterokdisconnect00:28
Verterokdisconnect00:28
Odd_Blokelifeless: Sure, that makes sense.  Removing the VCS stuff is first on my list, to save me having to accommodate it when I do anything else.00:31
awilkinsjelmer: That patch should be approaching your mailbox00:38
awilkinsjelmer: Alas, "Unable to load bzr-svn extensions - did you build it?"00:40
jelmerawilkins: thanks00:49
jelmerawilkins: hmm00:49
jelmerawilkins: It build the extensions in the same directory as the .py files?00:49
* igc breakfast00:50
jelmerhi Ian00:50
awilkinsjelmer: No, a subfolder, but I moved them into the same folder00:56
awilkinsjelmer: I may be over-linking00:56
awilkinsjelmer: I'm just cutting my linking to only required libs00:57
* lamont bemoans the lack of a bzr git-import00:57
Penglamont: bzr-fastimport?00:57
PengMaybe?00:58
jelmerawilkins: If they're in the same folder and still failing, you may want to look at .bzr.log00:58
awilkinsjelmer: What's that thing where you filter a list with "for x in "  ?00:58
jelmerlist comprehension?00:58
jelmerlamont: yeah, bzr-fastimport or bzr-git (which I'll be working on over the summer)00:58
jelmer(not that helps you presently)00:59
lamontjelmer: and I can continue to freshen from the git repo00:59
lamont?00:59
jelmerlamont: with bzr-fastimport, I think you can as long as you keep the files with the mappings around00:59
lamontbeing able to use the bzr UI with a git backend would be a big win for traction, I think01:00
lamonteven if it means the occasional impoirt01:00
lamontmore to the point, that would come in handy for creating a bzr branch of the git-core package....01:01
lamontand can I push back to the git repo?01:02
jelmerlamont: with bzr-fast-import ? Yes, you can export back to a git repo afaik01:03
lamontnice01:04
lamontjelmer: does that mean export back to a new-and-virgin git repo, or to the one that I imported from (as a push) ?  hopefully the latter01:05
* lamont should really read up on bzr fast import01:05
jelmerlamont: bzr fast-import/export use a custom file format that is also understood by git fast-import/export01:06
jelmerlamont: afaik you can continue exporting to an existing git repo01:06
lamontnice - I'll do some reading01:07
lifelesspoolie: http://allmydata.com/01:12
lifelesspoolie: http://ceph.newdream.net/01:14
jelmerberto-: more luck with 2.5?01:14
igchi jelmer01:16
igclamont: fastimport/export is designed for interchange01:18
igcit does provide some limited incremental mirroring but it's not overly smart yet01:18
igclamont: Pieter has done some good work on improving it but I'm yet to incorporate all of his work into the trunk01:19
igcif the trunk isn't flexible enough for you yet, try Pieter's branch01:20
jelmerawilkins: still there?01:27
awilkinsjelmer: yes01:37
awilkinsjelmer: It seems to be loading them now, but I'm getting MSVCR80.dll errors01:38
awilkinsjelmer: I thikn it should be linked against MSVCR71 for Python 2.501:38
awilkinsjelmer: GAH they stopped working again01:44
awilkinshttp://pastebin.ca/106009901:47
jmlhow can I conveniently look at the log message for the last change to a file?01:49
jelmerawilkins: I've merged your .C fixes01:55
jelmerawilkins: hmm, no indication of what module couldn't be found?01:56
berto-jelmer: got sidetracked, haven't checked yet.01:57
awilkinsjelmer: Looks like it can't find apr & co01:57
jelmerawilkins: co?01:57
awilkinsjelmer: "and company"01:58
jelmerawilkins: Copying all required dlls into the bzr-svn folder may work :-P01:58
awilkinsjelmer: Looks like it's not hunting through the path, I set a filesystem monitor on it01:58
awilkinsjelmer: It's weird, it's looking through SOME folders on the PATH but not all of them01:59
* awilkins copies the DLLs into the folder02:00
awilkinsMSVCR80.dll02:01
awilkinsBah, looks like the wrong version to use02:04
awilkins"The application has made an attempt to load the C runtime library incorrectly"02:05
jelmerhmm02:07
awilkinsjelmer: I'm poring over the linker output to see if I am linking to bad versions of libraries02:08
awilkinsjelmer: I'm using the MSVC7 linker as far as I'm aware02:09
awilkinsjelmer: I think my LIB env needs a bit of a kick02:12
awilkinsjelmer: Et voila... bingo02:14
jelmerawilkins: it works!?02:14
awilkinsTHis is what you get for installing the Windows SDK02:14
awilkinsLet me try the selftest02:14
awilkinsBugger02:15
awilkinsIt got as far as "bzr plugins" withotu moaning this time though02:15
jelmerwhat did it moan about?02:16
awilkinsjelmer: MSVCR80... I deleted it and I now have an ACTUAL STACK TRACE02:17
awilkinshttp://pastebin.ca/106010802:18
jelmerawilkins: looks like your version of bzr is not new enough02:20
awilkinsjelmer: Could be, I'm on a self-build of 1.6b202:20
* awilkins pulls his dev branch02:21
* awilkins snores02:23
* awilkins is running bzr.dev selftest svn02:25
awilkinsThere are still far too many of these "unable to remove testing dir" errors on windows02:27
jelmerok, but at least it appears to be somewhat running?02:28
awilkinsjelmer: Yes, I so far have 101/925 14 err 2 fail02:28
awilkinsjelmer: I'll post you the STDOUT when it's done02:29
jelmerawilkins: woot!02:30
jelmerawilkins: That's a big improvement from not working at all already :-)02:30
jelmerawilkins: How much local changes do you have?02:30
awilkinsjelmer: Quite a nasty patch to setup.py, a local stdbool.h, and the c files use it02:31
awilkinsjelmer: And by "nasty" I mean "totally hardcoded for adrian's filesystem"02:32
awilkinsAs well as "may cause Posix builds to break, dunno"02:32
awilkinsThe big stinker is the MS linker which insists on seeing every lib in the tree before it will link the ones at the top (I don't know if GNU link does this)02:33
jelmerawilkins: so just setup.py and stdbool.h ?02:33
lifelessok02:33
lifelessthese are definitely slower to write:02:33
lifelessGraphIndex: Wrote 92994 in 15.32802:33
lifelessBTreeIndex: Wrote 92994 in 25.07902:33
jelmerawilkins: I'd be interested in that patch02:34
jelmerawilkins: Is there some way to find those paths automatically on windows?02:34
awilkinsjelmer: Unless they are in your LIB and INCLUDE env, probably not02:34
awilkinsjelmer: distutils uses those on Windows (I presume as well as Posix)02:35
awilkinsjelmer: It may be enough to insist they get put in LIB and INCLUDE02:36
jelmerawilkins: there's no apr-config or svn-config utilities?02:36
awilkinsjelmer: They are bash scripts02:36
awilkinsWell, apr-config is, afaik02:36
jelmerah, right02:37
awilkinsjelmer: I think we demonstrated that GCC doesn't work very well for building Python extensions for Win3202:37
jelmeryeah, guess we should amend the apr detection to just look for that header then02:37
awilkinsI put in a PosixBuildData and WindowsBuildData class02:37
awilkinsBut I'm not 100% sure I left the Posix end compatible with Posix02:38
jelmerah, k02:38
awilkinsOk, you have 87 err, 16 fails02:38
jelmerCan you mail me the output?02:38
jelmerand perhaps those changes to setup.py as well so I can verify the posixy bit still works02:39
jelmerI'll see if I can trim that stuff down a bit tomorrow02:39
jelmerthat stuff == the failures02:39
jelmertime for some sleep first :-)02:39
awilkinsI concur, it's 0240 here02:40
awilkinsjelmer: Ok, those files should be on their way, goodnight.02:42
* Odd_Bloke --> lunch (of a sort, it's nearly 3am here but I got up at 10pm...)02:53
* igc lunch03:18
=== bigdo2 is now known as bigdog
Odd_BlokeCould someone pastebin a sample bzr PQM submission email for me?03:56
lifelessOdd_Bloke: install bzr-pqm-submit03:58
lifelessOdd_Bloke: then do 'bzr pqm-submit --dry-run'03:58
mwhudson_i guess it's not too surprising that the c extensions make bzr annotate faster04:04
mwhudson_is the amount they make things faster generally known?04:05
lifelessyes04:08
lifelesswe highly recommend using them04:08
mwhudson_the answer in this case seems to be "20 times faster"04:08
lifeless"we highly..."04:08
Odd_BlokeTop. Men.04:09
pickscrapeIs this a new thing for 1.6?04:09
lifelesspickscrape: no04:09
mwhudson_or... something else is going on04:11
lifelesswoo04:20
lifelessGraphIndex: miss torture in 343.13804:20
lifelessBTreeIndex: miss torture in 41.80304:20
mwhudson_so it seems doing revision_tree('..').annotate_iter() over http got waaaaaaaaaay slower somewhere between 1.6b2 and r350804:21
mwhudson_which is strange, as (a) that's not very long afaict and (b) i didn't think much had changed with either annotation or http04:23
mwhudson_(i think the c extensions comment above was a red herring)04:23
lifelessmwhudson_: I can't see anything indicating why04:24
lifelessmwhudson_: are you getting a RemoteRepository or a FooRepository object?04:25
* mwhudson_ digs some more04:25
mwhudson_lifeless: foorepository i assume04:25
mwhudson_yeah04:25
mwhudson_what bzr.dev revision roughly corresponds with 1.6b2 ?04:26
lifelessnot sure04:26
lifeless3468 is 1.6b104:26
mwhudson_ok, let me try that04:27
mwhudson_bisect ftw04:27
mwhudson_hmm04:28
=== mwhudson_ is now known as mwhudson
mwhudsonso maybe the difference is running it uninstalled vs installed04:29
mwhudsonbut that makes very little sense04:29
lifelessmwhudson: I think you have confounding factors04:31
lifelessmwhudson: how are you testing? via lh?04:31
mwhudsonlifeless: no, locally04:31
mwhudsonah04:32
mwhudsoni bet it's c extension related after all04:32
mwhudson'make' uses 'python' to build the extensions04:32
mwhudsonand i've been running my tests with python2.404:32
lifelessyes04:33
mwhudsonok, win04:33
mwhudsonman that was really starting to confuse me04:34
lifelessigc: ping04:38
igchi lifeless04:38
lifelessigc: I'm wondering if you want to usertest btree-plain repositories?04:41
lifelessigc: real-world scale applications >> artificial benchmarks04:42
igclifeless: just looking over the email thread now04:42
igcwondering when the best time to run some benchmarks was04:42
igc:-)04:42
lifelesslet me quote worf04:43
lifeless"Today is a good day to die"04:43
abentleyOdd_Bloke: Still on my own server04:44
igcso lifeless, what baseline did you want to compare against? The latest bzr.dev?04:46
ja1lifeless: moved04:52
=== ja1 is now known as jam
lifeless:)04:52
jamI was here all along :)04:52
jamjust hiding04:52
lifeless:)04:52
jamlifeless: I thought that quote was Flatliners04:52
lifelessso, adding first and last really depends on the ration of between-key misses04:52
jamwell, it wasn't so much adding first and last as it was changing the < first > last logic04:53
lifelessand only gets that benefit for 2/child-nodes - basically every fencepost will get you one saving, but all the internal misses aren't saved04:53
lifelessjam: perhaps I'm missing something04:53
jamlifeless: sure, though it is easier to benchmark its value if we have it04:53
jamI was trying to work out what we *might* get04:53
jambut it is hard to instrument that04:54
lifelessjam: right, me too. All my gedanken were not encouraging though, which is why I skipped implementing04:54
jamlifeless: no, we only get 2/child-nodes, but it goes -infinity => start04:54
jamversus  X => Y04:54
jamit sort of depends heavily on the "evenly distributed"04:54
lifelessright04:55
jamwhether that is true or not04:55
lifelessbut all it takes is a few adam's and zaphods04:55
lifeless:)04:55
jamA pack with only robertc@ will reject all of the john@ nodes very quickly04:55
lifelessjam: 1 IO vs three though04:55
lifelessjam: but the three with the smallest node in the cache will still be very quick04:56
lifelessjam: a more interesting one is to consider .tix04:56
jamlifeless: is that sorted (file_id, revision_id) or (revision_id, file_id) ?04:57
jamformer, right?04:57
lifelessyes04:57
lifelessjam: heh, you didn't write a from_bin ? :P05:01
jamyou mean bin_to_array ?05:02
lifelessyes05:02
jamyeah, it was mostly testing packing, not the other way around05:02
lifelessquestion05:02
lifelesswhy the power-of-2 constraint?05:02
jamlifeless: so I could do & instead of %05:03
jamI believe05:03
lifelessanyhow, 2048 is one :P05:03
jamas is 128, or 25605:03
jamdepending on where you want to go with that05:03
lifelessyeah05:03
lifelessI'll start with 25605:04
jamlifeless: It is because I have to map from an integer into a bit05:04
jamso I go to offset "X >> 4" bit "X & 4" sort of thing05:04
lifelessjam: seems to me you could just work with any number of bytes05:04
lifelessjam: by taking that much of the sha and being tricky05:05
jam# This is used to take our 32-bit values, and mask off the high bits05:05
jam# so that the integer offsets, always point within the final bit-array05:05
jam# basically, 0 < (integer & self._bitmask) < self._num_bits for any05:05
jam# integer. Because _num_bytes is always a power of 2, _num_bits is05:05
jam# also a power of 2, and so a simple bit mask will do.05:05
jamself._bitmask = self._num_bits - 105:05
lifelessjam: mmm, thoughts for a different day05:05
jamlifeless: yes, you could do mod05:05
jamI did & _bitmask rather than % length05:05
jamlifeless: oh, for low bits / entry, MD5 is a bit better05:06
jamit only sets 4 bits in the output, which means it goes "white" slower05:07
jamThe theoretical numbers are in the class docstrings05:07
jam(note that in practice, I got worse than theoretical, and always better with sha1. But I wasn't testing <4 bits / e either)05:08
lifelessjam: right. well ideally we won't be either :P05:08
lifelessI'm going to add05:09
lifeless:bloom:\nFILTER05:09
jam??05:12
lifelessjam: just how I'm going to encode it in the internal node05:12
jamah, sure05:12
lifelessa key of :bloom: which is illegal to generate from bzrlib, then the binary bytes05:12
jamlifeless: interesting. at *each* internal node?05:13
lifelessjam: yes05:13
lifelessjam: higher internal nodes we may want to not have the filter05:14
lifelessjam: but its clearly of most use down adjacent to leaves05:14
jamother than giving you less work to do higher up :)05:14
jambut it goes white pretty quickly05:15
lifelessright05:15
jam(or black, if your terminal is white background :)05:15
lifelessthe higher the layer the more bits needed for a useful filter05:15
lifelessbut the less IO needed to encounter a filter05:15
lifelessso is array an array of bytes or bits05:18
jamlifeless: a = array.array('B')05:19
jamBytes05:19
jamself._array[offset >> 3] & Bloom.bitmask[offset & 0x7]05:19
lifelessso, array(B, bytes)05:19
lifelesswhy didn't you use array.write() ?05:20
jamarray(B, num_bytes)05:20
lifeless    The constructor is:05:20
lifeless    05:20
lifeless    array(typecode [, initializer]) -- create a new array05:20
lifelessinitialized from the optional initializer value, which must be a list,05:20
lifeless     |  string. or iterable over elements of the appropriate type.05:20
jamlifeless: # stupidly, there's no good way that I can see of resizing an array05:20
jam# without allocing a huge string to do so05:20
jam# thus I use this, slightly odd, method:05:20
lifelessjam: yes, I'm toing bin_to_array here though05:21
jamlifeless: if you already have it as a string, just shove that into array.array('B', mystring)05:21
lifelessjam: yes, thats what I said isn't it ? :)05:21
jamlifeless: oh, by the way, what constraints are on your key values?05:22
jamIsn't there something about being "no-whitespace , utf-8" ?05:22
lifelessyes05:22
jamthis would be raw bits, so could take on any value05:22
lifelesssame as bzrlib.index05:22
jamlike \n05:22
lifelessjam: indeed, I handle that already: P05:22
jamThe most efficient, "safe" encoding I've encounter is something like base8505:23
lifelessjam: '\n'.join(content) - this is all encoded by zlib for us05:23
jamlifeless: but in "_InternalNode.__init__() you use _parse_lines(bytes.split('\n'))"05:24
jamor is this going in somewhere that isn't being compressed.05:24
lifelessjam: nope, its at the end of that list05:25
lifelessok, array_to_bin is slightly broken05:26
lifelessin that its got somehow different output vs .tostring()05:26
jamlifeless: I think you miss what it is05:27
jamarray_to_bin => 010110110111005:27
jamas in the numerals05:27
lifelessjam: oh!05:27
jamascii text :)05:27
lifelessindeed, not what I thought05:27
lifelesswhere is more caffeine :)05:27
jamlifeless: I think you can just dump the array bytes as you asked earlier05:27
lifelessI've just committed a round trip bloom support for the parser05:28
lifelessnow to hook up creating these for some nodes05:28
jamlifeless: real quick, to figure out the position of a leaf node, you need the offsets for all the internal nodes added together?05:30
lifelessno05:30
jamnode_index = offset + node.offset + pos05:30
jamand05:30
jamoffset = offset + self._row_lengths[row]05:30
lifelesssum (row_lengths before the row this internal node is in) + this_node.offset + pos05:30
jamboth seem to be 'accumulating'05:31
lifelessyou need the sum of the rows above05:31
lifelessyou need this nodes offset05:31
jamoj05:31
jamok05:31
lifelessand you need the offset (0 based) from the pointers in this node05:31
lifelessthis is constant whether you are looking for a leaf or internal05:32
jamlifeless: so that is the row offset for the entry in the row you are looking up05:35
jamso if I'm on the root node, I have a row_offset of 1 for the first layer of internal nodes05:36
lifelessyes05:36
lifelessoff by one in my description05:36
lifelesssum(row_lengths including this row) + internal_node.offset + pos_from_bisect_right(internal_node.keys)05:37
lifelessjam: one trivial optimisation would be to precalculate the sums05:38
jammeh... :)05:38
lifelessjam: :P05:38
jamlifeless: just to be clear, _InternalNode.keys is a sorted list, _LeafNode.keys is a dictionary, right?05:46
lifelessyes05:46
lifelessbecause bisect in the former and existence in the latter05:46
jamlifeless: sure, though you can bisect in the latter, too05:46
jamjust bisect_left05:46
lifelessits slower usually05:46
lifelessbut you could consider just plucking out the keys you want as it parses05:46
jaminteresting thought05:47
jamanyway, I was confused by Node.attribute having a different signature05:47
jamfixing05:47
jamlifeless: I tend to get confused that you are ~lifeless on LP, but ~robertc on email and people.ubuntu.com05:52
lifelesssorry :)05:53
poolieactually i think he's robert@canonical, and  neither of the other two work there05:56
lifelessrobertc will05:56
lifelessas well as first.last05:56
pooliehm05:57
poolietwo of your patches are approved with tweaks05:59
jamlifeless: was one of your "fixes" to the tests to bump up the number of nodes from 25k => 100k? Because that test seems to be excruciatingly slow right now06:00
jamI'm not sure if I broke something, or if it just refuses to finish06:00
lifeless100K06:00
lifelessits due to the extra packing06:00
lifelessyes, it takes a lot of nodes to make a 3-level index.06:01
jamwell, then I guess I have to poke at that before I can test my iter_entries fixes :)06:01
jamOK              215798ms06:01
lifelessjam: its writing performance :)06:01
jamIs a bit too long to wait06:01
lifelesserm06:02
lifelessit was 12 seconds for me06:02
lifelessI lie06:02
lifeless90seconds06:02
lifelessand yes, I was cursing06:02
lifelessthere are two of them06:02
jamwell, that has a bit of pdb time in there06:07
jam^| doesn't work on win3206:08
lifeless:)06:08
jamlifeless: 34480ms with my performance tweaks back in06:13
jambut 3 test failures06:13
jambecause now it doesn't pack *quite* as efficiently06:14
jamlifeless: is that just "pretend it is correct" ?06:15
jam(specifically, "test_2_leaves_1_0")06:15
lifelessjam: well, if you don't make them pass, I'll have to :)06:17
lifelessjam: or are you asking 'how do I decide the new results are ok' ?06:17
jamlifeless: right06:18
jamI think I just need to decrease the number of nodes for test_2_leaves_1_006:18
jamsince it seems specific about testing 2 leaves06:18
igcpoolie: thanks for the reviews. Please see my reply to the content filtering one.06:19
Odd_BlokeHacking bits out of PQM is fun. :)06:19
lifelessjam: yes, I look and poke, and tweak06:19
lifelessOdd_Bloke: cool06:19
Odd_BlokeSeriously, I could do this all summer.06:19
Odd_BlokeOh, wait. :p06:19
lifelessok, in theory we have bloom filters now06:20
jamlifeless: ugh, one of the failing tests is iter_all_entries_reads... aka the slow one06:22
lifelessjam: I try to improve the resiliency each time I touch them, but fundamentally its a little hard to test some stuff without enough data to , well, test it06:22
jamit seems a bit odd to be subject to the whims of the compressor06:23
jamas it makes it a possible problem based on what zlib they have06:23
lifelessthe compressor is part of the format06:23
jamlifeless: but you can be compatible with zlib and not give exactly the same output06:23
lifelessjam: zlib is seriously stable06:23
lifelessjam: this is true, and such folk can send patches :P06:24
lifelessdang06:24
lifeless  File "/home/robertc/.bazaar/plugins/index2/btree_index.py", line 93, in finish_node06:24
lifeless    raise AssertionError("Not enough space for bloom filter.")06:24
lifelessAssertionError: Not enough space for bloom filter.06:24
lifelessah, found the bug06:26
poolielifeless, can we talk briefly?06:26
lifelesssorry, I'm dressed now06:26
jamno talking while clothed.... hmm06:27
jamsounds like a morning after issue06:28
fullermdjam: You haven't done anything recently with FreeBSD trees, have you?06:32
jamfullermd: not in a long time, no06:33
* fullermd nods.06:33
fullermdDidn't think so.06:33
jamyou sound aggressive with that :)06:33
fullermdWell, I've been paying very poor attention since April   :)06:33
fullermdI just threw together that ShowStoppers page on it on a whim earlier today, and wondered if you had anything new to add to it.06:34
fullermdBut I guess "It's too damn big and too damn slow" is still a good first hurdle.06:35
jamlifeless: unfortunately, your choice to pick the "middle" of the lexi-sorted nodes doesn't work well in my repo06:43
jamsearch_from_revid in 0.87706:43
jamAfter spending a lot of time setting it up06:43
jamalso unfortunately, the get_components_positions(2000) triggers the "unable to cache this many nodes" assertion06:45
lifelessjam: lol :P06:51
lifelessjam: that was written with your work in mind06:51
jamlifeless: what do you think about splitting an internal-node cache from a leaf-node cache?06:51
lifelessjam: neutral06:52
jamfor the new "iter_entries" I'll only hit the internal nodes 1 time06:52
jamso they don't get priority over the leaf nodes06:52
jameven if there are 100 keys hitting the node06:52
lifelessjam: why not use _read_nodes then for the leaf nodes?06:55
jamlifeless: well, do we *never* want to cache leaf nodes?06:55
jamMy idea with a 2 caches, is that both could be LRU's06:55
lifelessjam: sure, that works too06:56
jamlifeless: but for the "get it working" that is my plan atm06:56
jamalso, at this point I wish you wrote them as 'selftest --benchmark' so I could run some of them without running all of them :)06:59
lifelesssorry :)06:59
jam^VI#07:00
jamis my friend07:01
jamI guess that is ^v<scroll>I# <enter>07:01
lifelesshmm, how best to copy an in-progress bloom - copy.deep_copy ?07:01
lifelesswill array.array deep copy correctly?07:01
jamlifeless: not sure, there are only 4 member variables aside from the array07:02
jam__deepcopy__(...)07:02
jam    copy(array)07:02
jam    Return a copy of the array.07:02
jamlifeless: ^^ it looks like array has a __deepcopy__ member07:02
lifelessthanks :)07:03
jamlifeless: anyway, sleepytime, its after 1am here07:03
lifelessok, I have bloom creation happ07:03
lifelessjam: gnight07:03
jamI have some code, for multi-way bisect, but it won't help randomly iterating one key at a time07:04
jamso I'll look closer at that07:04
lifelessok07:04
lifelessI'll have miss-avoidance in a few minutes, then go on to test annotate for that patch07:04
igclifeless: I'm running indexbench.py now. The moz one finished quickly; the OOo one (1.15M keys) took a long while for the 1st part and is up to the 2nd part now07:41
lifelessigc: cool - latest version I presume ?07:41
igcthe only weird thing is that the last metric is 0.0007:41
igcI *think* so07:41
lifelessigc: note that a fully packed index is not ideal :)07:41
lifelessigc: because we want to find out realworld (autopacked only) behaviour07:42
lifelessigc: does it have miss_torture in the output ?07:43
igclifeless: hmm - my benchmarking repos are usually fully packed07:43
lifelessigc: yes, I've pointed this out before :)07:43
igcmiss_torture is the one coming out as 0.0007:43
lifeless(not to you specifically, but on the list)07:43
AfCLooking for subjective opinions: how much should I worry about what `bzr gannotate` shows being correct? Is it a reflection of primary underlying relationships, or is it just a slash at the task of identifying things?07:43
lifelessAfC: what do you mean by correct? It should give you a pretty good idea of the last change occuring on a line07:44
AfCI have managed to contrive situations where the change is being attributed to a merge, not a source revision. This is a bit disturbing.07:45
lifelessAfC: that occurs when eiher A) the merge changed the line, or B) the same change was made on both sides07:46
AfC[resulting from the following: cherry pick something off of branch A onto B. No problem, although yes the new revision will claim to have invented these lines. Then merge B back into A, and suddenly gannotate shows not the original revision from A, *nor* the new revision on B, but the merge revision being the author of those lines]07:47
lifelessAfC: right; it would be better to show *both*, but we show the point at which we can't decide.07:47
AfClifeless: well, having to choose one of the other, fine, but choosing the merge?!?07:47
lifelessAfC: if you click on it, you can annotate both sources and see where it comes from07:48
lifelessAfC: say it wasn't a cherrypick, but was some copyright claim or something07:48
AfClifeless: ok. My real question was whether this was something I needed to worry about and avoid creating.07:48
lifelessAfC: no, its totally normal and we'll likely improve the UI further to give more helpful results07:48
AfCOk07:49
AfC(it was quite worrying when I first saw it)07:49
lifelessigc: 0.00 is expected07:49
lifelessigc: there are no keys that are in the repository and not in a given index07:49
AfC(I tried merge -r X..Y; I tried rebase; various permutations of branch creation order and [re]merge sequencing)07:50
lifelessAfC: sounds like we need a page explaining what annotate *actually* does07:51
AfClifeless: I don't use it much, but I came to appreciate that (until now) it should real revisions being the source of things, not merges.07:52
AfCshowed*07:53
AfCJeesh. Time for a break, apparently.07:53
lifelessAfC: right; and doing that implies handling origins(line) > 1 :)07:54
berto-is there some way for me to save BZR_REMOTE_PATH for a given repository?07:58
gourberto-: see bzr_remote_path config variable08:02
gour"..This value may only be specified in locations.conf"...08:02
catsclawOh, there we are08:02
berto-gour where am i looking for the variable?  some documentation, the wiki?08:03
gourberto-: http://doc.bazaar-vcs.org/bzr.dev/en/user-reference/bzr_man.html08:03
gourberto-: and http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/index.html08:03
berto-gour: thanks!08:03
catsclawQuick question: loggerhead only works in two modes, server and proxy, right?  Not as a cgi?08:03
spivAlso, "bzr help configuration", but you can read the same info in http://doc.bazaar-vcs.org/bzr.dev/en/user-reference/bzr_man.html#configuration-settings08:05
berto-gour: locations.conf works great!08:07
mwhudsoncatsclaw: yes08:08
catsclawWell, great.08:08
mwhudsoncatsclaw: you could probably make it work as a cgi well enough for small branches08:08
mwhudsonbut anything more than a couple of thousand revisions would be pretty darned slow08:08
gourberto-: that's not true!08:09
gourberto-: bzr works great ;)08:09
berto-haha08:09
catsclawMaybe so.  But I can't run servers or set the proxy path on my host08:09
gourberto-: however, many like complicated things, although i'm not the one of them :-)08:10
catsclawSo the lack of CGI support is extremely annoying08:10
gourhmm, cannot say much about it...08:10
gourcatsclaw: what do you need?08:11
gourmaybe there is 'the other way'08:11
catsclawIdeally, I'd like a way to browse the repository from the web, and edit text files through a web browser08:11
catsclawI was hoping to find the "browse the repository" piece separately, and just hack it for the "edit text files" piece.08:12
mwhudsoncatsclaw: it's just a wsgi thing these days08:12
mwhudsonif there's a cgi wsgi container, it should be a snap to set up08:12
luksif you just want to browse the last revision of files (similar to svn's webdav listing), you can try http://bzr.oxygene.sk/bzrbrowse.cgi/bzrbrowse/trunk08:13
catsclawThere's a cgi and Fastcgi wrapper for wsgi08:14
igclifeless: that's still running but some good news ...08:16
igciter_all_entries: 1037s -> 13s08:16
catsclawAll right.  It's too late to bother with this right now.08:19
catsclawI'll have to figure out the FastCGI->WSGI stuff later08:20
catsclawLater08:20
berto-is it possible to branch off a bzrsvn branch then merge between the two bzr branches?08:24
berto-nm, just tried it, looks to work nicely.  :)08:24
igcnight all08:30
berto-in order to push in local changes into bzrsvn i had to merge, then rebase, then use svn-push.  that seemed to work.  but, then i checked svn and all my changes were pushed in as one commit.  is there some way to replay all my commits?08:33
lifelessigc: gnight08:33
berto-looks like that happened because i had all the changes in a bzr repo then i merged them into my bzrsvn repo.08:34
berto-jelmer: bzrsvn is working fine with py2.5.  looks like it's not too happy on py2.4, at least not on debian etch.08:35
jelmerberto-: only mainline commits are pushed08:48
jelmerberto-: Thanks for the info - any chance you can file a bug saying 2.4 is broken?08:48
jelmerI'll see if I can fix that before the release, or at least warn people appropriately08:48
berto-i updated the Requirements list on the bzrsvn wiki page.08:49
jelmerI consider this a bug rather than a specific requirement08:53
berto-jelmer: https://bugs.launchpad.net/bzr-svn/+bug/24478608:54
ubottuLaunchpad bug 244786 in bzr-svn "BzrSvn does not work well on Python2.4" [Undecided,New]08:54
berto-heh, gotta love mr. ubottu :)08:54
jelmerberto-: thanks08:55
Odd_BlokeDoes anyone know where I can find the source for AfC's "There's A Branch Here" pages?  ISTR he posted on the list about it at some point, but I can't seem to find it from a (cursory) search.09:24
james_whey Odd_Bloke09:25
jelmerOdd_Bloke: You mean this sort of thing: http://people.samba.org/bzr/jelmer/bzr-svn/0.4/ ?09:26
james_whttp://article.gmane.org/gmane.comp.version-control.bazaar-ng.general/41665/match=09:27
Odd_Blokejames_w: o/09:27
jelmerah, wasn't aware of that one, only of Michael Ellerman's htmllog plugin09:28
thekorn9hi, how can I resolve a conflict where a file was added?09:42
thekornI mean, if there are string conflicts, I get this '>>>>' marks and so on,09:43
thekornand edit this sections manually, then run bzr resolve09:43
thekornbut what can I do if a file with the same name was added in the two branches09:44
james_wthekorn: place the one you want at that path, with the content that you want, and then run "bzr resolve file"09:53
james_wI believe if you want the one that got moved to .moved you "bzr rm file; bzr mv file.moved file"09:53
thekornjames_w: ok, thanks, bzr is so easy :)09:56
james_wthis is one of the places that I think it's not that intuitive.09:56
james_wif we get file joins then this case will be much better.09:57
james_wthekorn: have you seen "bzr help conflicts"?09:57
thekornright, 'bzr resolve' without filename did not work09:57
james_wany advice on improving it would be appreciated.09:57
thekornjames_w: no, I've only looked for bzr help resolve09:58
thekornso maybe a hint there to also check bzr help conflicts would be cool09:59
thekornoh, nevermind, there is one10:00
Odd_BlokeIs there a release schedule for 1.6 yet, or is it just "when it's done"?10:07
AfCOdd_Bloke: I never published it.10:07
AfCOdd_Bloke: 'cause no one actually asked me10:07
harobedhi, in bazaar, can I modify one mistake in log message of last revision commit ?10:07
Odd_Blokeharobed: 'bzr uncommit', then commit again.10:07
harobedOdd_Bloke: I need to do one uncommit by revisions ?10:08
AfCOdd_Bloke: it is, as you would expect, embedded in a [very very thin] template that is used to generate all those pages, but the logic looks like it could be lifted out without too much trouble.10:08
AfCOdd_Bloke: bug me about it again in 3-4 hours and I'll send it your way10:08
harobedexample, I'm on revisions number 100 and my mistake is in revisions number 85 ? I need to uncommit to revisions 85 ?10:08
Odd_BlokeAfC: I'll probably be in bed, but I'll bug you again at some point. :)10:09
harobedI can't modify log message in .bzr file ?10:09
Odd_Blokeharobed: Ah, sorry, I misunderstood your question.10:09
harobedOdd_Bloke: hmm, first, my current revisions is 10010:09
matkorharobed: revert only bad commit like: bzr merge -r 85..8410:10
AfCOdd_Bloke: (ie, having explained that, I'm happy to email it to you, but it's not really general consumption, y'digg?)10:10
harobedOdd_Bloke: I've mistake in log message of revisions 8010:10
Odd_Blokeharobed: It is possible, but you'd be rewriting history which means that you wouldn't be able to collaborate with other people who've branched from you.10:10
Odd_BlokeAfC: Cool, my address is D.M.Watkins at warwick.ac.uk. :)10:10
Odd_BlokeAfC: Thanks!10:10
=== visik7 is now known as Guest77446
Odd_Blokeharobed: Is the mistake in the commit message or in the data committed?10:11
=== visi_ is now known as visik7
harobedOdd_Bloke: commit message only, not the code data10:11
Odd_Blokeharobed: OK, have you shared this branch with anyone?10:12
harobedOdd_Bloke: not10:12
Odd_Blokeharobed: Then it is possible to do, but I'm not sure of the best way to do it.10:13
Odd_BlokePossibly rebase.10:14
harobedrebase ?10:16
=== thekorn_ is now known as thekorn
* mgedmin made bzr crash13:37
Odd_Blokemgedmin: How so?13:38
* mgedmin tried to do a bzr pull in a bound branch13:39
mgedminhm, I have 1.3.1 here... let's upgrade and try again13:39
Odd_Blokemgedmin: Could you pastebin the error somewhere?13:41
Odd_Blokeubottu: paste13:41
ubottupastebin is a service to post multiple-lined texts so you don't flood the channel. The Ubuntu pastebin is at http://paste.ubuntu.com (make sure you give us the URL for your paste - see also the channel topic)13:41
nanderssonWhere looks Mac OS X for the Bzr plugin-directory?13:42
james_wnandersson: bzr --version should tell you13:43
mgedminOdd_Bloke: http://paste.ubuntu.com/24463/13:44
nanderssonjames_w, Thanks! I'll that as fast as I found out how to get a command line :)13:46
Odd_Blokemgedmin: OK, I don't know enough about that part of the code to understand the error, but you want to 'bzr update' in a bound branch.13:46
mgedminI was trying to pull in changes from someone else's branch, not my bound branch's upstream13:47
mgedminbzr merge works, btw13:47
nanderssonjames_w, there you go :) /Users/[username]/.bazaar/plugins - Thank you!13:48
* mgedmin reads bzr help checkouts now13:48
nanderssonNow I'll try to see if I can get BzrEclipse to work on Mac OS X :)13:49
lifelessgnight everyone13:51
pygihi hi13:53
nanderssonNow got BzrEclipse running on Mac OS X 10.4 :)14:03
Tsmithhow expensive is creating a bzr's branch on a 186 MB codebase (text only)?  is it feasible to have hundreds/thousands of branches for each complex feature merge from one site to another?14:47
weigon_Tsmith: are you using a shared repo ?14:50
Tsmithi have no idea14:50
Tsmithwould a bzr info help?14:50
weigon_yep14:50
Tsmith$ bzr info14:51
TsmithCheckout (format: pack-0.92)14:51
TsmithLocation:14:51
Tsmith       checkout root: .14:51
Tsmith  checkout of branch: /var/bzr/blinds.ca14:51
Tsmithbasically the same thing for /var/bzr/blinds.com, where the patch is coming from14:51
Tsmithyes14:52
Tsmithi believe it is a shared repo14:52
Tsmithi may be "doing it wrong", but my team uses bzr much like svn; like bzr co from a remote repository, bzr up and every thing14:52
Tsmith100K    /var/bzr/blinds.com/branches14:53
Tsmith22M     /var/bzr/blinds.com14:53
Tsmithhmm does it really only use 100 KB?14:53
Tsmiththat has to be impossible14:54
Tsmithk i think i answered my question w/ your motivation14:54
Tsmiththanks14:54
Tsmiththe answer is "Using a remote repo w/o trees, it is very inexpensive to branch."14:56
robstahi14:58
robstais there any way to hard reset a checkout? there is some stale lock and even "break-lock" can't fix it any more14:58
* mgedmin upgrades to bzr 1.515:18
mgedminsame error!15:20
mgedminyay15:20
mgedminmy bug is https://bugs.launchpad.net/bzr/+bug/20968915:28
ubottuLaunchpad bug 209689 in bzr "KeyError in transport close _file_streams while pulling into a bound branch" [Undecided,New]15:28
mgedminwhy oh why bzr always punishes me for trying to start using it???15:28
* mgedmin unhappy15:28
nanderssonIs there I way to "Checkout from Bazaar" (launchpad) directly from BzrEclipse?15:30
nandersson"a way to"15:30
jelmermgedmin: thanks for the bug report15:31
mgedminjelmer: no problem; have fun fixing it :-)15:33
NfNitLoopnandersson: can't you "create a new project" and then choose bazaar -> branch or something like that?15:55
Tsmithhow do you comment in python?17:08
Tsmith(trying to port svn hook to mantis)17:08
andrea-bsTsmith: # text17:09
Tsmiththanks17:09
andrea-bsyou're welcome :)17:09
abentleylifeless: ping17:13
jelmer'evening Aaron17:14
jelmerabentley: Do you think it makes sense to move some of the code that figures out whether or not a revision has been merged to bzrlib?17:15
abentleyCode in BundleBuggy?17:15
jelmeryeah17:16
jelmersince I'm about to duplicate more of it in my plugin17:16
jelmerand I suspect the launchpad merge request stuff has similar bits?17:17
abentleyIt doesn't really seem like it.17:18
abentleyToo short to bother with.17:18
jelmerabentley: No other objections though?17:20
jelmerabentley: I'm looking at doing pattern matches seeing if .diffs have been merged17:21
abentleyWell, considering we've already got an implementation of missing, I'm concerned.17:21
jelmersorry, I think I'm not wording this very well17:22
jelmerlet me rephrase17:22
jelmerabentley: Do you think it makes sense to move some of the code that figures out whether or not a merge directive has been merged to bzrlib?17:22
jelmere.g. as a MergeDirective.was_merged(branch_tip) function17:23
abentleyso basically b = Branch(); graph = b.repo.get_graph(); md.revision_id in graph.heads(md.revision_id, b.last_revision)17:24
mkanatmwhudson: Still no 100% CPU. :-)17:25
nanderssonIt seems I can not check out a Launchpad project directly from BzrEclipse, but I have to do a manual checkout first from the command line and then create a new project based on that branch in Eclipse.17:25
jelmerabentley: Yes - for the current format17:26
nanderssonThere is no thing like it's CVS counterpart "Create project from CVS"17:26
jelmerabentley: regular patches or git merge directives (not sure how they call them) will be more complicated17:26
abentleyWell, I'm not clear whether heads is 100% trustworthy at the moment.  If it is, I guess it's okay.17:27
Pilkydoes anybody know if anyone has done any sort of plugin for doing a --fixes thing that works with lighthouseapp.com?17:39
luksPilky: I don't think there is any plugin that touches external bug tracker based on the --fixes flag17:45
pickscrapeCan anyone point me at the steps I need to take to install loggerhead?17:47
Pilkyluks: isn't the launchpad integration done in a plugin, or does launchpad read the info from the branch when it's pushed up?17:50
luksPilky: launchpad reads it from pushed branches on it's own17:52
Pilkyok17:52
Pilkyguess it's something I'll have to look into at some point in the future17:52
=== thekorn_ is now known as thekorn
fogI am trying to develop a bzr adding for MonoDevelop and calling bzr from the cmdline is quite slow. I'd like to write a little helper that communicated using stdio with the addin and answer simple queries like "whats the status of file xxx?". what's the best place to start? documentation or example code is available?18:07
LeoNerdMaybe look at 'bzr shell' ?18:07
james_wfog: jam had a plugin that was similar to this, bzr-service I think it was called.18:08
fogthak you both18:08
jamfog: and eventually bzr-xmloutput is supposed to turn into a full RPC for a service responding to bzr queries.18:09
jambzr-service spawns something that you communicate over (currently TCP sockets) eventually should be named pipes on windows / unix sockets otherwise18:09
fogjam: I am currently using xmloutput but does not fit the monodevelop model well18:09
jamthough I haven't touched it in a long time18:09
fogi need 3 different commands/outputs to just get the right information for a file18:10
jamthat may not change for bzr-service, since it is just a proxy for running "bzr foo"18:10
beunofog, Verterok has an xml-rpc client18:10
fogfile-id to see if a file is under version control, then status to get its status and then log to get extra information18:10
beunoit uses the same concept of bzr-service, so it doesn't spawn a new bzr every time18:10
beunoactually, it's going to be the new version of xmloutput18:11
beunofog, https://code.edge.launchpad.net/~guillo.gonzo/bzr-xmloutput/xmlrpc18:12
fognot spawning is fine, it is the spawning that is veeery slow.18:12
fogbeuno: thanks18:12
beunofog, np. He uses it for eclipse, and this made it *much* faster18:12
leandro_hi all. I'm new (comming from cvs/svn) to bzr and I'd like to create a new repository for my project. I decided to used the svn layout MY-PROJECT/trunk. Should I create MY-PROJECT with --no-trees ?19:12
leandro_I'm planning to store all branches under MY-PROJECT/19:12
james_wleandro_: if you are planning to do your work there then you probably do not want --no-trees19:17
james_wif you are setting this up on a server, and then you are going to use branches/checkouts locally to do the work then you probably do want --no-trees19:18
james_wthe second also applies if you are doing it in two places on the same machine, e.g. /var/repos/whatever and ~/devel/whatever for work.19:18
leandro_james_w: I'm assuming all work will be done inside MY-PROJECT/trunk or My-PROJECT/branch-x19:18
leandro_james_w: yes, I'm doing it on a server19:19
leandro_but i will checkout MY-PROJECT/trunk, not My-PROJECT19:19
james_wyep, then I suspect you want --no-trees19:20
leandro_forget --no-trees then?19:20
leandro_ah..ok19:20
leandro_james_w: tks19:22
blueyedI've asked a few days ago already about keeping local changes in a main.local branch (jam has helped me), but now it seems that every now and then I need to explicitly revert this "local" diff when merging.. the setup is as follows: "main" (dev branch) and "main.local", which has changes I don't want in "main", but for feature branches.. I've done reverse cherrypicking, but somehow bzr seems to forget about it, when I merge between those19:25
blueyedbranches now.19:25
abentleyjam: So the issue with iter_entries_by_dir is: given a, a/b, c, c/d, you think it'll give a, c, d, b instead of a, c, b, d?19:26
jamabentley: correct19:27
jamthe last inserted was the last child of the previous directory19:27
jamrather than the first19:27
jamabentley: however, it may not show up in the children, but only in the grandchildren (underneath b and d)19:28
jamnm, you already have grandchildren of ''19:28
abentleyjam: Okay.  That gives me a test I can use.19:29
NfNitLoopblueyed: "reverse cherrypicking"?19:32
blueyedNfNitLoop: well, not really.. but in general: merge the other branch, but drop the changes which should differ ("bzr revert ."), then commit.19:33
blueyedbasically, I want to have a (submit) branch from "main", with changes to "main", that should never make it into "main" (when merging from or into main)19:36
blueyedNfNitLoop: "reverse cherrypicking" is described at http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/index.html#reverse-cherrypicking19:37
blueyedIs this not possible, because bazaar does not track cherrypick merges yet?19:57
abentleyjam: Are you satisfied with my email explanation of why we don't need to test the unchanged case?20:15
jamabentley: for the other ones, yes20:16
jamI wasn't sure if that was true, just was pointing out it didn't show in the changes20:16
abentleyAre there some that you think we *should* be testing that we're not?20:16
abentleyjam: I'm not sure what "for the other ones" means.20:18
jamfor things other than testing iter_entries_by_dir()20:19
=== mw is now known as mw|food
NfNitLoopblueyed: your answer seems to be in that document.   "Unlike a normal merge, Bazaar does not currently track cherrypicks."20:21
abentleyjam: Okay, I've added an iter_entries_by_dir test (using the example in tree.py) and an annotate-with-rename test, and plan to merge everything I've submitted in that series.20:22
blueyedNfNitLoop: yes, that's what I've thought now.. I cannot believe though that this workflow (having a branch with permanent changes) is not supported..20:22
abentleyThanks for your reviews.20:22
jamI'm not sure that I got to everything20:22
jambut I at least did a good amount20:22
NfNitLoopblueyed: it's only when you cherrypick that it gets forgotten.  Usually you just branch off from main and then 'merge' (non-cherrypick) from main as you move forward.20:23
namehey20:24
NfNitLoopblueyed: there's also another plugin/workflow which you may find useful...20:24
NfNitLoopweave?  thread?  I forget.20:24
namehow do i see which branches i have got in my working copy20:24
NfNitLoopbzr switch?20:25
blueyedNfNitLoop: but I want to merge from and to main.local to main.. that seems to be the problem.. loom? (which seems to provide threads)20:25
blueyedname: "bzr info -v"?20:25
NfNitLoopblueyed: aah, loom.20:25
nameah bzr branching is kinda different than git ;)20:26
NfNitLoopI'm not sure if loom is what you want.20:26
NfNitLoop(blueyed)20:26
abentleyjam: You did everything directly related to PreviewTree that I've submitted.  Which is great.20:27
abentleyjam: When lifeless turns up, we can figure out what to do about get_parent_map20:27
namenow to my real question. what file in loggerhead shows the source of the file you are viewing? i am trying to implement syntax highlightning20:28
NfNitLoopblueyed: I guess I'm not quite getting your workflow.   If you keep main and your branch separate and never merge in changes from main then eventually they'll diverge so that merging from branch into main becomes painful...20:28
blueyedNfNitLoop: I merge changes from main to main.local (and the other way around): I'm merging another upstream branch (CVS/tailor) to main, which I want to have in main.local, too. But new features/fixes come through main.local (or another branch from main - "production").20:32
NfNitLoopso, just continually merge in changes (non-cherrypick)  from main.local into your bugfix branches.20:33
NfNitLoopI think I'm losing track of your original issue.  *reads scrollback*20:34
blueyedNfNitLoop: sorry for causing confusion.. the problem appears to be when I merge from main to main.local or from main.local to main.. then the (cherrypicked) difference gets applied again.20:35
NfNitLoopdon't cherrypick differences.20:36
NfNitLoopjust merge them.20:36
NfNitLoopif you cherrypick, bzr cant' track it.20:36
blueyedSure. But I need to cherrypick the differences (once).. but then when merging, they get applied again, I "bzr revert" them, but they keep on coming in..20:37
NfNitLoopwhy do you need to cherrypick the differences?20:37
NfNitLoopif you branch from main->main.local20:37
blueyedBecause when I do "bzr merge main.local" in "main" the first time, I get the local changes..20:37
NfNitLoopthat's... what that command is supposed to do.20:38
blueyedSo I "null merge" them, as jam called it..20:38
blueyedyes.20:38
blueyedBut I don't want to revert the changes between those branches every time I merge them..20:39
NfNitLoopit doesn't...20:39
NfNitLoopor shouldn't.20:39
NfNitLoopI still don't see any reason to cherrypick in your workflow.20:40
NfNitLoopI think we may have a communication issue.  can you run some commands and paste them to a pastebin to show the behavior you're describing?20:40
blueyedNfNitLoop: that's what jam recommended, but essentially "bzr revert [particular files]" is a synonym for (reverse) cherrypicking here, isn't it?20:40
blueyedNfNitLoop: sure.20:41
NfNitLoopblueyed: aaah.   Yes, if you did 'bzr revert .' and then 'bzr commit', then you have told that branch to merge in the changes, *and then* reverse them.  and commited that to history.20:41
NfNitLoopso you'll never be able to merge them in.20:42
NfNitLoopbecause it thinks they already are.  (and then have been changed back.)20:42
blueyedNfNitLoop: so, am I doing something wrong? Maybe I need to add another intermediate branch?20:44
NfNitLoopblueyed: yeah, I dont' think you need to 'bzr revert .', unless there were more details about that case that I mentioned.20:45
NfNitLoopso, let's see what your use cases are.20:46
NfNitLoop'main' mirrros some remote repo? ]20:46
blueyedNfNitLoop: well, I need to do "bzr revert [files that shouldn't have get merged]"..20:46
NfNitLoopblueyed: that's not quite what that does.20:46
blueyedNfNitLoop: main is bzr+ssh://blueyed@bazaar.launchpad.net/%7Eblueyed/b2evolution/dev/20:46
NfNitLoopit should more read as 'bzr revert [file-changes taht should never get merged]'20:47
blueyedNfNitLoop: yes.20:47
NfNitLoopbut if they should never get merged... how are you going to merge them in in the future?   why not just remove them from main.local?20:48
blueyedNfNitLoop: well, they are in main.local, because they are changes like "$debug = 1" and other changes useful/needed for local development.20:49
blueyed..and therefore I want to have them in my feature branches, too.20:49
NfNitLoopyeah...  I'm not sure you want to check those in to any branch...20:49
NfNitLoopit really complicates your branching/merging scheme.20:50
NfNitLoopIMO, only check in production code.  have other files or settings files to enable debugging.20:50
NfNitLoop(Others?)20:50
blueyedwell, in the case of creating a new feature branch, it makes it easier (to have those changes there already)20:50
mwhudson_hello20:52
NfNitLoopblueyed: but any time you try to modify code that you've rejected from your main branch, the merge is going to barf.  (I think.)20:53
NfNitLoopI'm speculating here, since I haven't tried this workflow.20:53
NfNitLooplikewise, if you ever try to merge main->main.local, it'll try to delete your debug statements.20:55
blueyedNfNitLoop: well, I'm not modifying those changes to main.local (in main or any other branch).. the problem is just that the changes come back "as-is".20:55
blueyedNfNitLoop: exactly.20:55
NfNitLoopright.  so, I would recommend against that workflow. :p20:56
blueyed:D oook.. ;)20:56
NfNitLoopyou've read the bzr workflows page?20:56
NfNitLoopYou may find one there that works for you.20:56
NfNitLoopHmm... there's another one....20:57
blueyedI've read it once, yes, but it seems to be more generic than this.20:57
NfNitLoopwhat's the workflow that lets you table changes?20:57
NfNitLoopis that loom, or another one?20:57
blueyedI'll look at loom or something similar..20:57
blueyedyes, with threads.20:57
blueyedRead about it the other day, but it sounded quite complicated (was related to keeping the patch size limit for bzr patches)20:58
=== enobre1 is now known as enobrev
NfNitLoopright.  so in your .local branch you could shelve those changes, merge from main, then re-import your dev changes.20:59
NfNitLoopthat way the bits without your .local changes merge cleanly.20:59
NfNitLoophttp://bazaar-vcs.org/BzrShelveExample?highlight=(shelve)20:59
blueyedwell, shelve is something different (which I've used already)21:00
NfNitLoopHrmm, actually, committing them to a loom/thread might be easier than hand-picking them each time.21:00
NfNitLoopyeah.21:00
blueyedIt's not about conflicts in merges after all.21:00
NfNitLoopHmm.21:03
NfNitLoopyou could have main (remote), dev (new features) and debug(debug statements)21:03
NfNitLoopmerge from main->dev21:04
NfNitLoopimlpement new feature.21:04
NfNitLoopcommit.21:04
NfNitLoopmerge that into dev21:04
NfNitLooper, into debug.21:04
NfNitLooptest it in debug.21:04
NfNitLoopif it works, push dev -> main21:04
NfNitLoopand your debug statements never enter the rest of the branches.21:04
NfNitLoopwhich I guess is sortof what loom would offer in a single branch.21:06
blueyedwell, I'd like to have "debug" in "dev" during development, of course.21:06
blueyedI'll look into loom etc some more later, thanks for your help and feedback.21:07
=== mwhudson_ is now known as mwhudson
lifelessñmoin21:58
lifelessabentley: hi21:58
abentleylifeless: we have inconsistencies between VersionedFiles.get_parents_map and PlanMergeVersionedFile.get_parents_map, when it comes to parentless revisions.  Sometimes you get (), sometimes you get NULL_REVISION.22:02
lifelesssorry!22:02
abentleyI'd like to unify them.22:02
abentleyInterestingly, at least some of the old calling code was expecting ().22:03
lifelessheh. so the NULL_REVISION emitter was for code expecting the behaviour of a Graph created from a Repository which we needed to reused22:03
lifelesswe could push NULL_REVISION down to VersionedFiles22:03
abentleylifeless: That's my favourite option, and I think John expects that.22:04
lifeless+1 from me22:05
abentleySo to be clear, the ancestor of ('file-id', 'one') would be ('null:',)22:06
lifelessusing NULL_REVISION rather than a tuple is a little strange, but it works with all key-lengths, and with all the current graph code, which is why I did it back last year for pack repos22:06
lifelessI'm happy for you to use NULL_REVISION or (NULL_REVISION,) - whichever you like22:07
lifelessif you go for the latter, can I suggest a symbolic constant of NULL_KEY22:07
abentleyNULL_REVISION isn't an aribtrary constant, though.  It's just a paranoid way of writing the revision-id "null:".22:08
lifelessyes22:08
abentleySo I prefer a tuple-- and NULL_KEY WFM.22:08
lifelessjam: good catch on the bloom use22:13
=== bigdo2 is now known as bigdog
jamlifeless: howdy22:52
jamlots of changes for you to pull :)22:52
jamlifeless: so... I outlined it in an email, but I think the next best way to improve performance is a dynamic bloom22:53
jamI think we can shrink a bloom with no loss22:53
=== mw|food is now known as mw
jamand we can expand with minimal loss, as long as the bloom isn't already full22:53
jam(well, it has to be rather empty, but that can be controlled)22:53
jamthat would let us grow the bloom as we need to, without always allocating a 10MB bloom and then shrinking it22:53
jamlifeless: and cache thrashing is 100% why iter_random_all performance sucks22:55
jamIf you make the node cache bigger, or start caching the individual lines, performance goes from 100s => 8 => 4s22:55
jamversus Graph at 6s22:55
lifelessjam: I think its worth investigating a root bloom vs leaf-1 bloom22:59
lifelessI knew about the cache thrashing btw - it was in an early email :)23:00
jamlifeless: sure, I just have hard numbers to show for it :)23:00
lifelessjam: so did I :) (I tested 100 and 1000 page caches at the time) :>23:00
lifelessjam: so, I'm going to commit my tweaks and merge23:01
lifelessjam: we save nontrivally by only looking at the bloom adjacent to the leaf23:02
jamaka the last one?23:02
lifeless2seconds out of 4623:02
lifelessyeah, only probing once23:02
jamlifeless: what benchmark?23:02
lifelessrandom, ccompononents and miss23:03
jamwell, multiway is going to conflict with your changes23:03
jamand brings in 20 => 10s for miss23:03
jamand about the same for ccomponents23:04
lifelesscool23:04
lifelessdoes multiway bloom as well?23:04
jamlifeless: yes23:04
jammiss_torture 25.094 => 10.9623:04
jamget_cc 28.4 => 14.523:04
jamsearch 2.5 => 1.223:04
jamthough this is my code and not yours, so I might have down-performed some stuff23:05
jamAlso, my repository recently reset itself, going from 18+ packs to 1223:05
lifeless:P23:05
jamI must have rolled a digit23:05
lifelessI don't commit in the same repo23:05
jambut I was careful to test these on the same repo23:05
jamlifeless: yeah, I just rsync'd mine out of the way23:05
lifelesswheee23:08
jam?23:08
lifelessyes iter_entries does 'conflict'23:08
jamIt wouldn't be hard to bring in your "only check the last row bloom"23:08
jamthough I also pre-compute all of the key => offset mappings23:08
jamso I'm not sure if you would see the same savings23:08
jamYour original code had to do N sha1sums at each row23:09
lifelessis get_raw_offsets in the pybloom code?23:09
lifelessor do I need to pull ?23:09
jamlifeless: no it is in NodeBloom23:09
lifelesscool23:09
jamI haven't committed stuff to pybloom yet23:09
jamThough if I did work on dynamic blooms, I would probably do it there first23:10
jamabentley: ping23:10
lifelessjam: Oh, I've replied to your analysis with some thoughts23:11
jamlifeless: and I think I replied to your reply :)23:11
jamI think bringing the leaf key cache up a level could be interesting23:11
jamprobably significantly more beneficial overall23:12
jamplus, sharing a cache means less waste, etc.23:12
lifelessjam: aah cool23:13
lifelessjam: oh, you look for a branch now ?23:18
jamlifeless: yeah, so I can get a proper ancestry to search23:19
jamI kept getting nodes on a trivial plugin23:19
jamand then search would be like 0.1s23:19
lifeless:P23:19
jamI changed the search as well23:19
jammostly because it was easier to assert correctness with23:19
jamiter_ancestry(23:19
jamthough having to change from tuple keys => revision_ids sucked23:20
jamespecially because of the NULL_REVISION hackery in bzrlib23:20
lifelessthere is an adapter in bzrli23:20
lifelessbut yes23:21
lifelessjam: I see iter_random_one at 113 seconds still ?23:24
lifelessjam: is there some option I need to tweak?23:24
jamlifeless: you need to enable the line cache23:24
jamor increase the node cache23:25
jamlifeless: line 391 in btree_index:23:25
jamself._leaf_value_cache = None # lru_cache.LRUCache(100*1000)23:25
pickscrapeIs there any way to tell bzr init to ignore any shared repository it finds?23:25
pickscrapeOr would issuing bzr init-repo first have the desired effect?23:26
jampickscrape: not ATM, though you can 'bzr init-repo' in the inbetween23:26
pickscrapejam: thanks :)23:26
jamlifeless: I disable the line cache for testing other things, to see how much it helps/hurts, If you want to move the key cache into the combined index, I would recommend that :)23:27
jamlifeless: I just saw this: self._page_size = transport.recommended_page_size() is that "future work"  showing its head?23:30
lifelessjam: yes23:33
jamI was a bit curious how you would handle page_size % _PAGE_SIZE != 023:33
lifelessjam: my very initial concept for write once index segments had a fixed size page with network hint23:33
lifelessjam: round :)23:33
jamlifeless: so the idea would be that if you push to remote, it would auto bloat the page size23:34
jamwell, auto increase at least :)23:34
jambloat is probably a bad term23:34
jamabentley: If you get a chance, I'd like to chat quickly on how to pass parameters between the merge objects23:36
abentleyjam: sorry, on a call23:38
jamnp23:39
lifelessjam: well two things23:43
lifelessjam: you could read additional internal nodes optimistically23:43
lifelessjam: and you could make a bigger page size if you think it makes sense23:43
jamlifeless: yeah, I think the former is likely to be very good, I'm not sure if the latter gets you much23:44
jamespecially if your transport supports arbitrary reads23:44
jamwe really just want to cap the minimum size23:44
jamrather than bloat every request23:45
jamwell, that is my thought at least23:45
jamif I am already reading 64k across 16 disjoint pages, that seems fine23:45
lifelessjam: if there is not much cost to do that; of course FTP has a huge cost ;P23:46
jamlifeless: right, this is more for HTTP & bzr+ssh23:46
lifelessbut I'm not worried about FTP per se; but even http and sftp have some trouble with arbitrary readvs23:46
jamand *maybe* sftp with pipelining23:46
jamhttp does pretty good for most servers23:46
jamexcept squid proxies :)23:46
jamand the ones that don't support it at all (like BaseHTTP)23:47
abentleyjam: pong23:55
jamabentley: so the first problem I'm facing... Merger is the class that find the unique_lca base, and detects a criss-cross, but Merge3Merger is the one that deals with paths, etc.23:56
jamDo I just need to add a "supports_XXXX" member and then pass it in the __init__ like we do now?23:57
abentleyNot clear what we'd be passing.  The multiple LCAs in a criss-cross?23:57
abentleyDon't we want that on a per-file basis?23:58
jamabentley: for the whole-tree-paths logic, I use the whole tree LCAs23:59
jambut at a minimum, I want to pass the criss-cross flag23:59
jammy merge3 code just passes it unconditionally, but certainly that isn't "compatible"23:59

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