Difficulty of reconstructing a branch whilst deleting/fixing a broken revision

Jules Bean jules at jellybean.co.uk
Tue Feb 9 18:56:59 GMT 2010


Aaron Bentley wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Jules Bean wrote:
>> For merges with other sub-branches of the *broken* revision, I
>> couldn't merge (that would bring the large file back in)
> 
> It would bring it in temporarily, but if you didn't commit the revision
> as a merge (e.g. revert --forget-merges), then it would not be part of
> history and would be easy to get rid of.

OK, I didn't think of that. I think I didn't know about --forget-merges 
at that point in my exploration. This would be painful though, involving 
bzr repeatedly suffering out of memory errors while it tries to cope 
with the big file.

> 
>> Actually I think this was misguided anyway since bzr shelve would have
>> lost the file-ids of added files,
> 
> No, it preserves file-ids.

Wow. So it does. I'm not sure how I came to the conclusion it doesn't.

>> On some sufficiently complex changesets, bzr shelve doesn't work
>> even though bzr commit does.
> 
> I'm not sure how you got that error, but it's because it was trying to
> "bzr add" a file that didn't exist.

So this part sounds like a real bug, then. And possibly an important 
one. I still have the broken repo, and the fixed one, and most 
intermediate states too. I can't share the whole thing publically 
(sorry!) but is there something I can do to help pin this down?

>> Explicitly support an externalisable 'rich diff' which includes file
>> renames, additions, deletions and binary changes. This is probably
>> just the 'shelve' format, and not very different from the external
>> patchset format.
> 
> We already have merge directives and bundles.  I don't think we want
> another format.  The only reason you want this is to avoid preserving
> history, but we want our tools to preserve history wherever possible.
> 
> Perhaps a "merge --no-history" option would serve better.  It would be
> an explicit way to apply changes without preserving history, and would
> work with our existing formats.

That would be no different from a merge followed by a forget-merges, 
would it? The problem I need to solve involved preserving some history 
but changing (or forgetting) other aspects of it.

Jules




More information about the bazaar mailing list