[MERGE] Fix a case of look before you leap in knit.py

Robert Collins robertc at robertcollins.net
Wed Aug 22 22:39:17 BST 2007

On Wed, 2007-08-22 at 13:27 -0400, John Arbash Meinel wrote:
> John Arbash Meinel has voted tweak.
> Status is now: Conditionally approved
> Comment:
>       def _get_node(self, version_id):
> -        return 
> list(self._get_entries(self._version_ids_to_keys([version_id])))[0]
> +        try:
> +            return 
> list(self._get_entries(self._version_ids_to_keys([version_id])))[0]
> +        except IndexError:
> +            raise RevisionNotPresent(version_id, self)
> ^- I think you are actually supposed to be raising a filename here, not 
> an object.

There is no filename to raise; and RevisionNotPresent just wants a
'weave' object - the format string is 'Revision %s not present in %s'.

> At the very least, your object should have a __str__ that shows what 
> path it is at. Otherwise debugging things when we get a bad revision id 
> is really hard.
> It would seem that KnitGraphIndex doesn't have any idea what file it is 
> associated with, though. Which is a real shame, because we *have* 
> encountered this sort of thing. (Especially with data corruption, etc)

Right, it doesn't. I guess I can parameterise it at construction with a
file_id, but its another piece of data that could potentially skew, and
one that will only be used for __str__, so it seems ugly to do that.

> So, in the short term, this is okay. But really KGI is a bit hard to use 
> for post-mortem understanding. I think part of that is the abstraction, 
> because you are overlying a 'graph_index' object, which is also a bit 
> abstract.

Right. I want to reduce the amount of calls going through these deep
layers. For clarity the layers used by a current pack repo are:
Knit: KnitGraphIndex, _KnitData
KnitGraphIndex: GraphIndexPrefixAdapter
_KnitData: _KnitAccess
GraphIndexPrefixAdapter: CombinedGraphIndex
CombinedGraphIndex: [GraphIndex ...]
during a write there is also an InMemoryGraphIndex added to the
CombinedGraphIndex and wired up to the KnitGraphIndex callback, as well
as a ContainerWriter which is hooked up to the _KnitAccess object.

> And the fact that KGI is only used in your repository branch, and not by 
> any "live" code (just the test suite) makes it difficult to find. (And I 
> have to track InMemoryGraphIndex back through an 'import *' which means 
> I can't just simply '*' to search for the import occurance.)

Is that in the test file? I'll change that.

I'm not really clear what you want changed though.

GPG key available at: <http://www.robertcollins.net/keys.txt>.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : https://lists.ubuntu.com/archives/bazaar/attachments/20070823/4ec976b1/attachment.pgp 

More information about the bazaar mailing list