[12:05] <ubotu> New bug: #137387 in bzr "Strange error message decorating the output of bzr status" [Undecided,New]  https://launchpad.net/bugs/137387
[12:18] <keir> lifeless: sorry to interrupt your deep hacking. it seems all that's stored in the index layer (the values) are integers. do we actually want to store arbitrary strings?
[12:30] <lifeless> keir: there is a layering concern here
[12:30] <lifeless> right now there is a boolean and two ints stored in the product values
[12:31] <keir> lifeless, i see
[12:31] <lifeless> I would be ok with making them into structured data rather than strings if there is a tangible win; otoh it makes the index less able to be reused - e.g. the pack-names index will need to be different
[12:31] <keir> lifeless,  i am just wondering, because it is potentially useful if there is a fixed-size-data case
[12:31] <lifeless> (it currently stores 4 ints)
[12:32] <keir> in my attempts to compress data structures, i've been known to reuse the lower bits of pointer addresses to store booleans :)
[12:33] <keir> my other question: are most uses repeated traversals?
[12:33] <keir> and why is it in the code you posted above, that it only traverses the first one?
[12:33] <lifeless> our knit deltas are deltas against one parent
[12:34] <lifeless> there are two parent-lists per node in the .tix
[12:34] <lifeless> one parent-list is the per-file graph, which is unrelated to compression
[12:34] <lifeless> the other parent-list is for the compression code
[12:34] <keir> what does tix stand for?
[12:34] <lifeless> and the compression code forms a tree, not a graph, so there is only ever 0 or 1 nodes
[12:34] <lifeless> 'text index'
[12:35] <keir> ok
[12:35] <lifeless> I don't know what the most common traversal is
[12:35] <keir> so there is an index for the compression code?
[12:35] <lifeless> or most common query pattern I should say
[12:36] <lifeless> for .rix its probably breadth first repeated queries on the first node-reference list
[12:37] <lifeless> for .iix it will probably be compression-sequence lookups - repeated queries following the compression parent
[12:37] <lifeless> for .six it will simply be large set queries for (all revisions being pulled at once)
[12:37] <Odd_Bloke> I'm trying to modify my bundle for bug #52479 to work on local branches as well as remote ones.  However, I'm struggling to find a way of working out where an unbound branch is committing to (with a bound branch I just use Branch.get_bound_location()).  What's the best way to do this?
[12:37] <ubotu> Launchpad bug 52479 in bzr "Message at the end of commit for bound branches" [Wishlist,In progress]  https://launchpad.net/bugs/52479
[12:37] <lifeless> for .tix it could be compression-sequence lookups, or it might be file-graph searches
[12:37] <lifeless> Odd_Bloke: branch.base ?
[12:38] <keir> aaaag! i just hit ctrl-L and logging is off in my xchat
[12:38] <keir> does someone have a log of the last few hours?
[12:38] <lifeless> Odd_Bloke: in commit it should simply be 'committed to %s' % master_branch.base
[12:38] <lifeless> Odd_Bloke: you shouldn't need to make any calls about bound branches
[12:39] <lifeless> keir: there is one on the web I believe
[12:40] <keir> no one else has logging on?
[12:40] <keir> i was going to paste our chats into my notes and tidy it up
[12:40] <lifeless> keir: there is not a separate index for compression; the compression code uses the second node-reference list to form the compression-tree
[12:40] <Odd_Bloke> lifeless: Yeah, my one year of CompSci Java had me only looking at methods. :/  I'll modify it as such.
[12:40] <lifeless> keir: its layering - the index layer is agnostic for the exact use its put to, which has allowed me to use it about 3 different ways so far
[12:41] <keir> lifeless, i don't know what a compression-tree is
[12:41] <keir> lifeless, yes, i understand.
[12:41] <keir> lifeless, however i think it is reasonable to add a 'my values are 8 bytes' flag to the graph builder
[12:41] <lifeless> keir: I don't know how to describe it differently. I've tried twice
[12:42] <lifeless> We store a given byte-sequence as either a full copy or as a line based deltas against another byte sequence
[12:43] <keir> lifeless, ok, so that is a compression tree. i understood that, just not that it was named 'compression tree'
[12:43] <lifeless> well we don't have a ideal name for it
[12:43] <lifeless> its not a graph
[12:43] <lifeless> though a graph can store it
[12:43] <lifeless> which is how I fit it into the GraphIndex structure
[12:44] <keir> and i imagine the compression tree, in typical use cases, has a very low branching factor
[12:44] <lifeless> given that the index builder only has to output data when the index has all its entries added to it, I don't see why you add a flag telling it how long the values are: you can determine that by inspection during finish()
[12:45] <lifeless> keir: the compression tree for inventory is about 4 for every one
[12:45] <lifeless> erm
[12:45] <lifeless> thats wrong,t ahts the ratio of non-mainline to mainline
[12:45] <lifeless> best thing to do is to query it yourself and see for a live repository :)
[12:46] <keir> true!
[12:46] <lifeless> you could report on this for inventories and texts - .iix and .tix
[12:46] <lifeless> now
[12:46] <lifeless> byte-sequence reconstruction is performance critical for many operations
[12:46] <keir> what does that mean?
[12:47] <keir> byte-sequence reconstruction
[12:47] <lifeless> I've been referring to 'texts' in an ambiguous way
[12:47] <lifeless> texts can mean 'something in the .tix index' or it can mean 'any sequence of bytes we have stored in the repostiory' which is a superset of the first meaning
[12:47] <lifeless> so I'm disambiguating now to be clear
[12:48] <keir> ok
[12:48] <lifeless> reconstructing things like the contents of an inventory or the contents of a given file version is a common operation
[12:48] <lifeless> and when its slow it multiplies in effect
[12:48] <lifeless> 'bzr checkout mozilla' for instance constructs 55K byte sequences which are delta compressed
[12:49] <keir> ah! so i imagine that's slow
[12:49] <lifeless> so that will be following the compression tree for 55K texts in the .tix and 1 inventory from the .iix
[12:49] <keir> but ideally, there is a pack with a fulltext only a few deltas behind, correct?
[12:49] <lifeless> so for .tix and .iix getting the nodes from the compression tree for a single node is a very common operation
[12:50] <lifeless> well fulltexts are put in when the deltas add to about the size of the full text
[12:50] <lifeless> so a big text gets more fulltexts between deltas than a small text
[12:50] <lifeless> erm switch the words there
[12:50] <keir> yes, i understand.
[12:50] <lifeless> ok
[12:51] <keir> is it often that many files are queried?
[12:51] <lifeless> lets see
[12:51] <keir> for one of my projects, astrometry.net, we use some very clever branch-and-bound algorithms to compare two trees; one is our index, and one is constructed at query time
[12:51] <lifeless> branch and checkout will queries size-of-tree nodes for the compression graph
[12:52] <lifeless> merge will query size-of-difference * two
[12:52] <keir> so in  those cases it may be possible to do better than N * (index lookup)
[12:53] <lifeless> pull does a merge under the hood
[12:53] <keir> so the only time branch is not equivalent to cp -R is when there's a shared repo, and you are only branching one of the branches?
[12:53] <lifeless> same with update
[12:53] <lifeless> branch is never equivalent to cp -R
[12:54] <keir> ok. i fail to see why
[12:54] <lifeless> if there is no shared repo we do a clone, which spiders all the data and verifies
[12:54] <keir> in cases where it's not a shared repo
[12:54] <keir> so just cp -R + md5check
[12:54] <lifeless> you as a user can do that
[12:54] <lifeless> we dont
[12:54] <lifeless> you might be mounting sftp over fuse for instance
[12:54] <keir> ok. just because of portability?
[12:55] <lifeless> being on a file:// url doesn't guarantee data integrity
[12:55] <lifeless> you might have a lot of unreferenced data
[12:55] <keir> ok, right. my question is more one of what is the fundamental operation, and in non-shared branching, it is just copying raw bytes.
[12:55] <lifeless> and we don't copy that - if you make a new branch it only contains the data referenced
[12:55] <lifeless> ok
[12:55] <lifeless> to make a new branch we:
[12:56] <keir> exactly, which is why it is not the case for shared repos, because you only branch one of the severa branches, and the shared repo contains all revs
[12:56] <lifeless>  - ensure there is a repository that can be used at the branch. In the shared repo case we find that up the containing directories. In the non shared repo case we create it.
[12:56] <lifeless>  - we perform a data fetch from the source branch's repository for the revisions referenced by the branch
[12:57] <lifeless>  - we create a working tree of the tip of the branch
[12:57] <lifeless> for a shared repository the fetch operation fast-paths and just asserts that the data requested is in fact present
[12:59] <keir> ok
[01:02] <lifeless> If you have more questions ping; I suggest getting some of the live indices and exmaining them playing with them etc, perhaps instrument to record the sequence of calls or something then use bzrlib and see what's asked for
[01:03] <keir> yeah
[01:03] <keir> where can i get a big pile of live indicies?
[01:04] <lifeless> my repo that I have pointed you at
[01:04] <keir> ok
[01:04] <keir> those are all the uses for the index right now?
[01:04] <lifeless> or follow my dogfooding instructions from the list
[01:04] <lifeless> and make your own pack based repo
[01:04] <lifeless> yes, they are all the uses
[01:04] <lifeless> course, we aren't finished
[01:04] <lifeless> so as a client let me be clear - the scope is-a-changing :)
[01:05] <lifeless> (but not much I hope)
[02:09] <lifeless> poolie: still on the phone ?
[02:09] <poolie> now serving #72
[02:09] <keir> lifeless: can we exploit that most of the keys have large common prefixes?
[02:14] <keir> because of what we are storing, a radix tree for the keys might not be crazy
[02:16] <ddaa> poolie: got a patch for you
[02:17] <abentley> The form of the keys is not guaranteed.  imports from git, for example, may have revision ids of "git:%(hash)s".
[02:18] <ddaa> http://paste.ubuntu-nl.org/36388/
[02:18] <keir> also, i'm not sold that we want multiple adjacency lists for each node; why not use multiple graphs, with a seperate key/value index?
[02:18] <keir> abentley, ok.
[02:18] <ddaa> Make bzrlib.tests.TestCase use super() in setUp and tearDown, and fix a small typo that fucks up emacs syntax highlighting.
[02:19] <ddaa> poolie: poolie need anything else for this patch? It's fairly trivial.
[02:19] <ddaa> (the super stuff is needed now for some Launchpad test case)
[02:19] <abentley> keir: Gnu Arch imports have a common prefix.  bzr-svn 3 does.  Dunno about bzr-svn 4.
[02:20] <keir> what's a reasonable size for a preamble?
[02:20] <keir> i figure there's going to be no way to avoid reading at least a few hundred bytes from the start of each index
[02:21] <abentley> I think lifeless has been talking about reading 64K at a time.
[02:21] <keir> it seems to me that you can shrink down the size of the index if you separate the key/value part from the key->(key)* part
[02:21] <abentley> (for remote access, that is)
[02:21] <keir> yes, of course
[02:22] <abentley> So you would want that 64K to include the preamble and a sizeable number of recent keys.
[02:23] <poolie> ddaa, did you post it to the list?
[02:23] <ddaa> ahem
[02:23] <ddaa> no
[02:23] <ddaa> I do not plan to
[02:23] <ddaa> I do not have time to read the bzr list really.
[02:23] <ddaa> spiv is looking at it now
[02:24] <poolie> hrm
[02:24] <ddaa> I'll have him get through the hoops.
[02:24] <spiv> ddaa: hmm.
[02:25] <keir> hmm, so after a pull, locally an index gets built from the data that got pulled? (for pack repos anyway)
[02:26] <spiv> ddaa: the problem is it's an incompatible API change.  Other people might have subclasses with multiple-inheritance involving bzrlib.tests.TestCase already.
[02:27] <ddaa> if they do, then they're bust
[02:27] <spiv> ddaa: not at all
[02:27] <ddaa> because all the other test classes that derive from TestCase use super() already
[02:28] <lifeless> keir: thats a possibility, consider benchmarking on live data
[02:28] <ddaa> As far as I can tell, there is no way to look at it and not see it as a bug, because TestCase clearly is the one breaking the rules.
[02:28] <spiv> Well, bzrlib doesn't multiply inherit from TestCase via different routes.
[02:28] <lifeless> keir: you can use my dgofooding insutrctyions to convert repos like thepython import on launchpad to packs
[02:28] <poolie> ddaa, posting a patch to the list does not require that you read everything on the list
[02:29] <lifeless> ddaa: python's TestCase doesn't use super FWIW
[02:29] <poolie> it's enough to just say 'please cc me on replies', or pick out that one thread from the list
[02:29] <abentley> ddaa: There are at least a few places we use MI in the test suite: the bundle tests and the versionedfile tests come to mind.
[02:29] <ddaa> lifeless: if that's a problem, then all the classes that derive from bzrlib.tests.TestCase should be changed not to use super()
[02:30] <keir> lifeless, ok. it seems reasonable that there may be multiple indexes with the same keyspace, and possibly differerent or same data
[02:30] <lifeless> ddaa: is this impacking you in some way ?
[02:30] <poolie> what specific problem does it cause?
[02:30] <spiv> ddaa: what lifeless said.  Using super in bzrlib.tests.TestCase isn't going to solve all uses of inheriting from two different unittest.TestCase classes.
[02:30] <ddaa> lifeless: yes, I want to MI from a TestCaseWithTransport and one existing test class in the Launchpad test suite that derives from unittest.TestCase.
[02:31] <thumper> ddaa: best to state what you actually want it to do and why it doesn't currently work
[02:31] <lifeless> -->commit performance
[02:31] <spiv> ddaa: I don't think that can work reliably, sadly.
[02:31] <spiv> ddaa: because you have diamond inheritance
[02:32] <poolie> i wish i'd inherited diamonds :)
[02:32] <spiv> ddaa: but part of the inheritance graph is unittest.TestCase, which doesn't use super.
[02:33] <ddaa> spiv: it is not a problem because there is no diamond above unittest.TestCase
[02:33] <spiv> I *think* the fact that unittest.TestCase is the notional common root might be enough to make it work with current Python.
[02:33] <keir> lifeless, actually, i have a crazy idea. what about having a mapping var length keys -> fixed size id's. then we can support key tuples as (id1, id2) rather than the full string
[02:33] <spiv> But they've changed the MRO before and could easily do it again.
[02:33] <spiv> In general though, I think inheriting from multiple TestCases isn't a good thing to do.
[02:33] <keir> lifeless, then we get to have 1 place that lists all the file id's and one place that lists the rev id's
[02:34] <ddaa> spiv: I find it unlikely that a MRO change would affect a simple case like this one.
[02:34] <spiv> Because you'
[02:34] <lifeless> keir: thats roughly what the current index does, the fixed size ids are byte offsets in this case
[02:34] <lifeless> keir: so its a reasonable thing to do
[02:34] <spiv> re likely to get difficult interactions even without super.
[02:34] <ddaa> spiv: okay, I give up on this patch and just somehow refactor my code.
[02:34] <keir> lifeless, ok. it looks like the file id's and rev id's are used in multiple idx's; so this would be a big win on large indexes
[02:34] <poolie> ddaa, i'd suggest instead
[02:34] <ddaa> I see too much reviewer argument ahead.
[02:35] <poolie> well, to back up
[02:35] <poolie> you need some bzr-related setup and some lp-related setup done for a single test?
[02:36] <ryanakca> for bzr commit, it's 'bzr commit -m "commit message" --fixes:lp:bugnumber' ?
[02:36] <ddaa> poolie: in a nutshell, yess
[02:38] <poolie> i'd be inclined to do it by
[02:38] <poolie> refactoring the parent classes so that all the setup methods are individually callable
[02:39] <poolie> which should generally be the case already for bzr
[02:39] <poolie> then having your setUp just do what it wants
[02:39] <poolie> i think relying on super to do all this is confusing/problematic
[02:39] <ddaa> yes, that what I meant by "refactor my code"
[02:39] <poolie> spiv, do you agree
[02:39] <ddaa> I it just mildly disappointing because MI would have been the natural way to do it IMO.
[02:40] <spiv> Yes, I think that would probably work.
[02:40] <spiv> A hackish way to do that is simply:
[02:40] <spiv> def setUp(self): self.borrowedTest = OtherTestCase('foo'); self.borrowedTest.setUp()
[02:41] <keir> hah, i am redesigning berkely db
[02:41] <ddaa> poolie: BTW, you probably want to clean out the uses of super() in setup() and tearDown() methods of bzrlib.tests.TestCase descendants then.
[02:41] <poolie> :)
[02:41] <spiv> Which doesn't save you from conflicts in the setup (e.g. if both tests want to tweak global state like logging, os.environ, or the cwd).
[02:41] <spiv> But that would be a problem with MI anyway.
[02:42] <ddaa> poolie: either use it everywhere, or use it nowhere. The current situation is just a problem waiting to happen IMO.
[02:42] <spiv> Also, you don't get easy access to custom assertion methods on the OtherTestCase.
[02:42] <ddaa> spiv: which would be an annoyance in this case.
[02:43] <poolie> google says "authentic python handbag" :)
[02:43] <poolie> ddaa, if you want to remove them in fixing this that's ok with me,
[02:43] <poolie> or file a bug
[02:43] <poolie> ddaa, please use the regular review mechanism if you want bazaar changes
[02:43] <lifeless> keir: bdb doesn't have graph awareness; thats a key part of this index logic
[02:44] <poolie> and we will try to make it work efficiently for you
[02:44] <ddaa> poolie: ack
[02:44] <lifeless> ryanakca: what are you asking ? have you read the help?
[02:45] <poolie> if you try it and you think it is eg taking too much time, raise that with one of us or on a company list
[02:45] <keir> lifeless, i know :)
[02:45] <ryanakca> lifeless:   --fixes=ARG           mark a bug as being fixed by this revision.
[02:46] <ryanakca> lifeless: ARG being something. Anyways, I don't need to anymore, since the Ubuntu upload closed them
[02:46] <keir> do we want indexes to scale > 4gb?
[02:46] <keir> or  rather, is it reasonable to expect to be able to fit the entire index in memory? or should i design assuming you can't do that
[02:47] <lifeless> ryanakca: at the end of 'bzr help commit'
[02:47] <lifeless> See also: bugs, uncommit
[02:47] <lifeless> ryanakca: so 'bzr help bugs'
[02:47] <ryanakca> lifeless: thanks
[02:51] <abentley> lifeless: shall I merge Watkins' patch without test case refactorings?
[02:56] <ubotu> New bug: #137407 in bzr "messy error if BZR_HOME does not exist" [Low,Triaged]  https://launchpad.net/bugs/137407
[03:01] <poolie> we seem to have a lot of reviews bounced recently
[03:01] <poolie>  because of disagreements about indenting
[03:01] <poolie> but there is no clear statement in either hacking or pep8 about just what is allowed
[03:01] <lifeless> abentley: sure, that was speculation or I wouldn't have done bb:approve
[03:03] <igc> morning
[03:05] <abentley> poolie: clearly, the reviewer gets to choose the indenting style >:-)
[03:05] <poolie> ok, that works :)
[03:12] <abentley> Well, I'm not sure about double-indenting when doing line-wrapping.  Because you're already down to 67 characters if you're in a method body, 63 if you're in a try block, 59 if there's a loop inside the try block.
[03:13] <keir> lifeless, what is the 'absent' field used for?
[03:15] <ubotu> New bug: #137412 in bzr "Code duplication in tests.blackbox.test_commit" [Undecided,New]  https://launchpad.net/bugs/137412
[03:16] <lifeless> keir: it records keys which are not in the index but are referred to by a key reference
[03:16] <lifeless> I don't line 8-indents on line wraps
[03:17] <poolie> here are the possibilities as i see them:
[03:17] <poolie> a- indent under the delimiter (opening brace or whatever)
[03:17] <poolie> b- indent 4 spaces
[03:17] <poolie> c- indent 8 spaces
[03:17] <keir> lifeless, hmm, what is it used for? in the next layer up?
[03:17] <poolie> d- indent 0 spaces
[03:18] <abentley> I would prefer a where practical, otherwise b.
[03:18] <poolie> a is nice
[03:18] <poolie> a bit more laborious to maintain
[03:18] <poolie> well, for non-emacs users
[03:19] <jml> :)
[03:19] <lifeless> keir: no, consider an index with one entry and one key-reference list:  ('key1',), 'value', [('anotherkey',)] 
[03:19] <lifeless> keir: iter_all_entries() needs to yield ('key1',), 'value', [('anotherkey',)] 
[03:20] <lifeless> keir: iter_entries([('anotherkey',)] ) needs to yield nothing
[03:20] <lifeless> anotherkey is not present in the index
[03:20] <lifeless> it is absent
[03:20] <keir> ok
[03:20] <lifeless> have a look at the serialisation tests
[03:20] <keir> but aren't keys listed by their position in the file?
[03:20] <lifeless> have a look at the serialisation tests
[03:21] <poolie> lifeless, how about allowing a/b?
[03:21] <poolie>  spiv ^^
[03:21] <lifeless> c?
[03:21] <lifeless> poolie: we currentl use a or b as people feel comfortable
[03:21] <poolie> i thought you didn't like c?
[03:21] <lifeless> I don't like c
[03:21] <poolie> i sometimes use c as that's what vim seems to like
[03:21] <poolie> i am happy to change though
[03:22] <lifeless> vim is on crack
[03:22] <keir> vim rocks!
[03:22] <poolie> i just want it settled rather than being rehashed in every review
[03:22] <lifeless> sure
[03:22] <poolie> it is probably configurable in vim
[03:22] <lifeless> can I ring to bounce an idea
[03:22] <abentley> lifeless, keir: Maybe you can compromise: vim is on crack rocks!
[03:22] <poolie> lol
[03:23] <keir> abentley, heh
[03:23] <abentley> keir: I speak as a vim user.
[03:28] <keir> ok, i just came up with a nice unified way of storing these graphindexes, and i realize it just bakes down to the same thing as a berkely db
[03:28] <spiv> I use a or b.
[03:28] <keir> how does knowing we're storing a graph help again?
[03:29] <keir> i mean, i can make the format amenable to readv() wire access, but it's still just storing k,v pairs
[03:45] <lifeless> keir: you can group data topologically
[03:46] <lifeless> keir: you can reduce latency by adding apis for common graph/tree walking operations where the index layer is able to predict and readahead in the graph order
[03:47] <lifeless> and you can dictionary compress key references because we have 'k,v,r' rather than 'k,v' where the key references would be opaque
[03:55] <keir> alright. time for graphviz
[04:03] <abentley> keir: I don't know if you'll find it useful, but bzrtools includes "graph-ancestry", which uses dot.
[04:04] <keir> abentley, ok, thanks
[04:55] <lifeless> -> poolie
[05:42] <poolie_> jml_, hi?
[06:05] <AfC> Weird. Someone submits a branch to us, including about new 50 files making up something that we decide not to accept (and so revert|delete). We work further on the branch, then merge it to 'mainline'. We then push to the public repo, and bzr does the endless-small-round-trips thing.
[06:06] <AfC> After thinking about it, I realized that it must be creating new knit files server side for each of those files, because they were in revisions that are in the branch even though the files involved were subsequently deleted.
[06:23] <poolie_> yes, because it's still carrying the history for those files
[08:01] <ubotu> New bug: #137449 in bzr "status performance regression compared to 0.17" [Undecided,New]  https://launchpad.net/bugs/137449
[11:29] <dato> uhm, bzr upgrade is not supported over bzr+ssh?
[11:29] <dato> % b upgrade --dirstate-tags bzr+ssh://bzr.debian.org/bzr/pkg-python-debian/trunk
[11:29] <dato> bzr: ERROR: The branch format Bazaar-NG meta directory, format 1 is already at the most recent format.
[11:30] <dato> % b upgrade --dirstate-tags sftp://bzr.debian.org/bzr/pkg-python-debian/trunk
[11:30] <dato> ... finished
[11:32] <mwhudson> https://bugs.launchpad.net/bzr/+bug/125166
[11:32] <ubotu> Launchpad bug 125166 in bzr "Smart server doesn't suppport upgrading" [Low,Confirmed] 
[11:33] <pygi> morning
[11:33] <mwhudson> with no knowledge at all, it seems like it should be fairly easy to fix...
[11:33] <dato> mwhudson: ah, thanks.
[12:28] <lifeless> dato: thats right
[01:02] <rschuster> hi bzr-folks
[01:03] <rschuster> i am trying to implement a bzr-fetcher for OpenEmbedded and need your help
[01:03] <rschuster> how can I find out the latest revision number of a certain (remote) branch?
[01:04] <rschuster> something like 'svn info <remote-url>' which will contain the line: "Revision: 8404" (for example)
[01:06] <dato> rschuster: as a command (that is, not using the Python API): bzr revno http://...
[01:09] <rschuster> dato: thanks alot thats it!
[01:09] <dato> rschuster: you're welcome
[01:40] <abentley> rschuster, note that the revision number is not the most accurate indicator of whether a branch has changed.
[01:40] <dato> he left already.
[01:42] <igc> night all
[03:35] <asabil> anyone knows how to make the visual studio integration working ?
[03:57] <Ng> hey folks. If I push a bzr tree to an sftp:// I obviously just get a .bzr directory there. What magic can I do on the remote end to make it generate the working files too (not automatically, just manually is fine)
[03:58] <mwhudson> Ng: 'bzr update'
[03:58] <Ng> mwhudson: that's what I thought, but it said "No WorkingTree exists for file:///blah/branch/.bzr/checkout/."
[03:59] <Ng> (fwiw, the local bzr is 0.18 and the remote is 0.17)
[03:59] <mwhudson> oh
[03:59] <mwhudson> 'bzr co'
[03:59] <Ng> spot on, thanks :)
[06:54] <jelmer> Lo-lan-do: The non-lhs push issue has been fixed in the 0.4 branch of bzr-svn
[07:01] <Lo-lan-do> jelmer: Excellent, thanks.
[07:13] <keir> how difficult would it be to implement git-style branch switching?
[07:13] <keir> so that you only have 1 working tree, which you can switch between branches with a bzr command
[07:14] <jelmer> keir: that should be possible to implement using a plugin
[07:14] <keir> wow, really!
[07:14] <jelmer> and wouldn't be too hard I think
[07:14] <keir> ok, that is high on my list after writing a new index layer
[07:14] <keir> i definitely prefer git's way of working regarding branches
[07:15] <Lo-lan-do> There's already a bzr switch command...
[07:16] <jelmer> bzr switch takes a to_location though
[07:17] <keir> is in not in the main bzr?
[07:17] <jelmer> no, it's in bzrtools
[07:17] <keir> bzr help commands | grep switch -> empty
[07:17] <keir> aah, ok
[07:17] <jelmer> you'd want it to take a tag I guess
[07:17] <keir> no, a branch name
[07:17] <jelmer> right, so you'd want to write a plugin that:
[07:17] <jelmer> keeps a list of branch names in a file somewhere under .bzr/
[07:18] <jelmer> the file would simply contain a dictionary with "branch name -> revid" mappings
[07:19] <keir> how is a branch represented in a shared repo now?
[07:19] <jelmer> and the plugin would have a ocmmand to list the branches, one to add a branch to the file and one to change the active branch
[07:19] <jelmer> keir: there's a .bzr/branch/last-revision file that contains the tip of the branch
[07:19] <jelmer> that's all there is to a branch
[07:20] <keir> ok
[07:20] <dato> or a .bzr/branch/revision-history for v5 branches
[07:20] <keir> so in a shared repo, it's .bzr/branch_name_here/revision-history?
[07:20] <jelmer> keir: you can simply call Branch.set_last_revision(revid) to change the tip of a branch
[07:21] <luks> keir: no, in the branch's .bzr dir
[07:21] <keir> aah, ok
[07:22] <luks> repository doesn't know about it's branches
[07:22] <keir> right, i understand
[07:23] <keir> so i'd basically have to make a new branch format
[07:23] <keir> and by format, i mean placement of branches
[07:25] <jelmer> no, you should be able to use the current branch format
[07:25] <jelmer> the only bit of data that is missing atm is the list of branches
[07:26] <jelmer> the active branch can still be in .bzr/branch
[07:28] <Herodes> I get this :
[07:28] <Herodes> "working tree is out of date, run 'bzr update'
[07:28] <Herodes> bzr: ERROR: exceptions.AssertionError: 257 != 1"
[07:28] <Herodes> how can I fix it ?
[07:29] <Herodes> it is a new branch that I have ,...
[07:29] <Herodes> and I am merging a branch with 257 revisions,..
[07:29] <Herodes> so I suppose I need to push up the revision I have to 257...
[07:30] <james_w> keir: my plugin does stuff like that, so I can give you pointers as well when you do it if you like.
[07:41] <Herodes> I found the problem..
[07:42] <Herodes> I was using the "bzr merge", where I needed to use "bzr branch". Sorry for spaming..
[08:03] <relix> Heya
[08:03] <relix> I'm trying to version my whole /home directory
[08:03] <relix> so I was in my home dir, and used "bzr init"
[08:04] <relix> then I tried "bzr add" and after changing a couple of filenames that made it crash, it said "(amount) files ignored. Add them by name to version them"
[08:04] <relix> I can't go over these thousands of files to add them "by name"
[08:04] <relix> how can I add them?
[08:04] <relix> I tried bzr add *; bzr add /david/home/; bzr add ./; bzr add;
[08:04] <relix> none works
[08:06] <james_w> what files are they? dot files? (bzr ignored would tell you)
[08:07] <yml> hello
[08:07] <yml> good evening
[08:07] <relix> ah thanks james_w
[08:08] <relix> apparantly one of my ignored settings filters a couple of thousand files
[08:08] <relix> so it's entirely my fault and I feel pretty dumb now having wasted your time :s
[08:08] <james_w> relix: no problem.
[08:09] <yml> what is the easiest way to remove some of the revisions of a project hosted on launchpad?
[08:11] <yml> if this is not possible. how can I delete a branch?
[08:12] <james_w> yml: remove completely, or just rewind a branch?
[08:12] <yml> remove
[08:12] <james_w> you have to delete the branch. However if launchpad use shared repositories even doing that might not get rid of it completely.
[08:13] <yml> or remove all the revision below revno60
[08:13] <yml> I mean remove the revision  from 1..59
[08:17] <yml> or is it possible to create a branch from an exiting repository for all the revno>60 and the this new branch to do bzr push --overwrite
[08:20] <Peng> relix: I don't recommend doing that in bzr, if you're going to include dot directories like .opera. I did, and committing got really slow after a few months. OTOH, the bzr guys are working on improving that, so maybe it won't be so bad in the future.
[08:33] <mwhudson> yml: i don't think you can do what you suggest even locally can you?
[08:34] <yml> mwhudson  : I don't know I am trying many combination but so far I have not found anything that do what I would like to do.
[08:35] <mwhudson> bzr pretty firmly assumes that if you have revision X you have all of revision X's parents
[08:35] <yml> I would like to dump the last 2 revsion and build a new rep with this.
[08:36] <mwhudson> you can drop the latest two revisions with 'bzr uncommit' (twice) and then push --overwrite
[08:36] <yml> Ideally I would also like to delete branch on launchpad or at least remove all the content
[08:36] <mwhudson> you can use lftp to rm -rf the .bzr in your branch
[08:37] <mwhudson> (via sftp)
[08:37] <yml> mwhudson  I want to do the oposite keep ONLY the latest 2 revision
[08:37] <mwhudson> yml: that's not what you said :)
[08:37] <mwhudson> yml: and you can't do that
[08:37] <yml> that is clear  :-)
[08:39] <yml> sftp> rm -rf .bzrCouldn't stat remote file: No such file or directoryRemoving /~yml-nospam/django-survey/main-yui/-rfCouldn't delete file: No such file or directory
[08:40] <mwhudson> *lftp*
[08:40] <yml> mwhudson  : unfortunatly I am not able to do this
[08:40] <yml> I am sorry what is lftp?
[08:40] <mwhudson> the default sftp client is surprisingly horrible
[08:41] <mwhudson> http://lftp.yar.ru/
[08:41] <Peng> lftp isn't that great, either. No globbing. :(
[08:41] <mwhudson> actuall
[08:41] <mwhudson> y
[08:42] <mwhudson> bzr uncommit -r 0 --force; bzr push --overwrite
[08:42] <mwhudson> may be sufficient
[08:43] <yml> mwhudson so back to my original question bzr branch --revision=last:2 my path
[08:44] <yml> keep only the history of the file of the last 2 revisions
[08:44] <yml> even if when I do bzr log I can retrieve the complete history?
[08:45] <yml> that mya sound strange on this channel I want to destroy all the information in the revisions 1..59
[08:46] <mwhudson> you can probably create a new branch that has the same content
[08:46] <mwhudson> but they won't be connected in the revision graph
[08:47] <yml> This is fine
[08:55] <brmassa> guys, i did some changes on my working tree but i changed my mind. how can i reset it and restore my last revision?
[08:56] <Lo-lan-do> bzr revert?
[08:56] <brmassa> thanks
[08:57] <yml> mwhudson slap my forehead,your solution of creating a new rep seems to work
[08:57] <yml> I wait that launchpad refresh its history
[08:58] <luks> "bzr uncommit -r 0 --force; bzr push --overwrite" will not actually remove the data from launchpad
[08:58] <relix> peng yeah I'm getting memory errors right now :(
[08:58] <relix> I ignored .opera's cache4 directory though so it shouldn't be much of a problem
[08:59] <yml> luks  : GRRRR!!! I was happy that bzr didn't raise any error message :-)
[08:59] <yml> too easy
[09:00] <luks> it will remove the branch, but the repository with all the data is still there
[09:00] <yml> How can I remove the content of a branch?
[09:01] <luks> use a sftp client that remove remove directories recursively and remove the .bzr directory
[09:01] <luks> er, that can remove
[09:02] <yml> I have an error message when I try to do that
[09:02] <luks> the 'sftp' client can't do that
[09:02] <yml> sftp> rm -rf .bzrCouldn't stat remote file: No such file or directoryRemoving /~yml-nospam/django-survey/main-yui/-rfCouldn't delete file: No such file or directory
[09:03] <yml> luks I do not understand? can I do that with sftp or not?
[09:04] <luks> yml: "<mwhudson> you can use lftp to rm -rf the .bzr in your branch"
[09:05] <yml> I try lftp a couple of minute ago
[09:05] <yml> lftp yml-nospam@bazaar.launchpad.net:~> ls`ls' at 0 [Connecting...] 
[09:05] <yml> and for the last 5 minutes it is displaying this error message
[09:07] <yml> Interesting it seems that my history is gone thanks to
[09:07] <yml> http://codebrowse.launchpad.net/~yml-nospam/django-survey/main-yui/changes
[09:08] <yml> bzr uncommit -r 0 --force; bzr push --overwrite
[09:08] <yml> is that possible?
[09:09] <Peng> relix: Ignore opcache/, opthumb.dat, thumbnails/ and widgets/*/ too.
[09:09] <yml> I had 62revisions before
[09:09] <jelmer> well, the data is not easily accessible, but it's still there
[09:10] <relix> good idea Peng
[09:10] <relix> had thumbnails ignored already
[09:10] <relix> but it's crashing on something different: the .incomplete dir of dc++
[09:11] <Peng> relix: I dunno anything about that. Large files or anything?
[09:11] <relix> yeah possibly
[09:12] <Peng> relix: It'll have to hold entire files in RAM occasionally.
[09:12] <Peng> s/have to// ;)
[09:13] <yml> jelmer: does that mean that people without a write access to this rep cannot see them
[09:13] <relix> ah, righ
[09:15] <jelmer> yml: no, they will be able to access it if they try very hard
[09:16] <jelmer> wel, not *very* hard perhaps, but it's not trivial to access
[09:16] <yml> Is there a way to get anything better
[09:17] <yml> I mean more radical
[09:17] <yml> :-)
[09:17] <jelmer> yml: yes, remove the entire .bzr directory
[09:18] <yml> could you guide me to do this ?
[09:18] <jelmer> yml: but I'm not entirely sure how to do that on launchpad, maybe the folks in #launchpad can better tell you
[09:18] <yml> 2 peoples mention lftp
[09:18] <jelmer> "rm -rf .bzr" will work if it's on a local system
[09:18] <yml> but I do not manage to get that far
[09:18] <yml> ok jelmer
[09:19] <yml>  I am going to ask on #launchpad
[09:19] <yml> Thank you very much all
[09:20] <brmassa> guys, i have a project on my pc and also on launchpad.net. how can i have the same branch on my office pc? if i merge with my launchpad, all revisions becomes one.
[09:22] <jelmer> brmassa: you'd want 'bzr branch <launchpad-url>'
[09:23] <brmassa> and for the second time, when i have a branch already? can i do it again?
[09:27] <Lo-lan-do> How about a checkout?
[09:28] <brmassa> hmmm really really
[09:30] <dato> brmassa: bzr pull
[09:32] <brmassa> im gonna check both.
[09:33] <brmassa> the windows version available on site has the python lib for criptography?
[09:33] <brmassa> parakiko or something...?
[09:38] <beuno> who can help me fin out why I'm getting this error on a 500mb branch?   bzr: ERROR: exceptions.MemoryError:
[09:38] <beuno> I'm branching it through sftp
[09:42] <brmassa> 500mb? jezz!
[09:45] <jelmer> beuno: please sent an email to the list
[09:45] <jelmer> beuno: that should work, but the people most likely to be able to help aren't here atm
[09:45] <beuno> jelmer, will do, thanks
[10:20] <lifeless> abentley: yo
[10:28] <james_w> dato: are you around?
[10:29] <dato> james_w, yes
[10:29] <james_w> hi.
[10:30] <james_w> I'm working on the bug with builddeb where it fails when the tarball contains multiple files in the root. #440069. Do you remember it?
[10:30] <dato> yes
[10:32] <james_w> you said that dpkg-source supports it by unpacking to a temporary directory.
[10:32] <dato> I believe it does that
[10:32] <james_w> I already do that, but I need to source directory to copy the debian/ in to.
[10:32] <brmassa> lifeless... will 0.90 be on gutsy repository?
[10:33] <james_w> so I currently rename the contents of the extracted tarball to the package-version that I want, assuming there is one entry and it is a directory.
[10:34] <james_w> do you think checking for a single directory and erroring if there is more that one is a good approach, or will I find even wierder tarballs out there?
[10:34] <dato> the thing is you unpack in a temporary directory. if there's only one item, you move it out of the temp directory, into the name you want. if there's more than one, you rename the *temporary directory* to the name you want.
[10:35] <dato> if you are *building* in a temporary directory, then you need two temporary directories, one under the another
[10:35] <dato> toplevel for building, other one for the unpack steop
[10:35] <james_w> ah, rename the tempdir. Thanks, I'll no that.
[10:36] <dato> right, np
[10:36] <dato> james_w: I have an unpack-in-subdir script that does that, here it is: http://rafb.net/p/GhPw3485.html
[10:36] <dato> but it's pretty much straightforward
[10:38] <dato> though now I notice, that does not do renaming, but other stuff, dunno why
[10:55] <james_w> dato: you rock. thanks.
[11:04] <lifeless> abentley: ping
[11:08] <dato> james_w: you're welcome :)
[11:51] <NfNitLoop> Anyone here have experience with svk and bzr-svn?   I'm looking for a comparison.
[11:51] <NfNitLoop> I've got a svn repo here in the states and developers down in Argentina.   The poor connection between here and there is becoming a headache.
[11:57] <arjenAU> NfNitLoop: well svk is not quite a distributed system. it's a distributed trick bolted onto a very centralised system. if you can choose, I'd go for the pure design, bzr or hg
[12:00] <arjenAU> NfNitLoop: using the svn plugin for bzr does not quite make it distributed either, but it's a good way to migrate to bzr.
[12:01] <NfNitLoop> Well, it was a giant pain to get them to switch to svn.  I don't see us migrating away from it any time soon.
[12:01] <lifeless> AFAICT bzr-svn has more fidelity
[12:01] <NfNitLoop> So I'm looking at a way of "bolting on" a solution to give the remote devs. a more distributed environment.
[12:02] <lifeless> and you can wrk with bzr native as soon as one user has done the conversion