mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 07:17:55 +03:00
59ed6b36b5
Summary: When tree manifest data is available, we don't need to parse the full manifest any more, which is great because we can simply and quickly load the root manifest and be done with a checkout operation. We can then quickly load the manifest entry for a given directory path on demand, making us closer to our ideal of O(what-you-use). This diff plumbs in the manifest code from mercurial so that we can reuse the decoder implementation to get the manfiest data and translate it into something that we can put into our LocalStore. There's a little wrinkle when it comes to files; mercurial doesn't support a means for getting the file contents based on just its hash, we have to provide the filename and revision hash for that. We have existing code to create proxy entries in the store to map from a proxy hash to a tuple with the appropriate data needed to resolve the file entry. We need to extend its use to the trees that we generate because we need to be able to propagate that path down to a child tree when we generate the tree entry for a file for the first time. If a tree manifest is not available for a given revision, we fall back to the existing implementation that parses the full flat manifest. Note: the flat manifest import generates entries with different hashes compared to the tree manifest hash version. While we could make the serialization match up, there's little risk of this causing problems for us in practice, so punting on that for now. Reviewed By: simpkins Differential Revision: D4873069 fbshipit-source-id: 865001996745700586f571ed67371aed1668a6a7 |
||
---|---|---|
.. | ||
git | ||
hg | ||
test | ||
BackingStore.h | ||
BlobMetadata.h | ||
EmptyBackingStore.cpp | ||
EmptyBackingStore.h | ||
IObjectStore.h | ||
LocalStore.cpp | ||
LocalStore.h | ||
ObjectStore.cpp | ||
ObjectStore.h | ||
ObjectStores.cpp | ||
ObjectStores.h | ||
StoreResult.cpp | ||
StoreResult.h | ||
TARGETS |