mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 00:14:35 +03:00
A Scalable, User-Friendly Source Control System.
d245de4a41
Summary: This is a first pass at a prefetcher. The idea is simple, but the execution is impeded by some unfortunate slowness in different parts of mercurial. The idea is that you pass a list of glob patterns and we'll do something to make accessing files that match those patterns ideally faster than if you didn't give us the prefetch hint. In theory we could run `hg prefetch -I PATTERN` for this, but prefetch takes several minutes materializing and walking the whole manifest to find matches, checking outgoing revs and various other overheads. There is a revision flag that can be specified to try to reduce this effort, but it still takes more than a minute. This diff: * Removes a `Future::get()` call in the GlobNode code * Makes `globFiles` use Futures directly rather than `Future::get()` * Adds a `prefetchFiles` parameter to `globFiles` * Adds `eden prefetch` to the CLI and makes it call `globFiles` with `prefetchFiles=true` * Adds the abillity to glob over `Tree` as well as the existing `TreeInode`. This means that we can avoid allocating inodes for portions of the tree that have not yet been loaded. When `prefetchFiles` is set we'll ask ObjectStore to load the blob for matching files. I'm not currently doing this in the `TreeInode` case on the assumption that we already did this earlier when its `TreeInode::prefetch` method was called. The glob executor joins the blob prefetches at each GlobNode level. It may be possible to observe higher throughput if we join the complete set at the end. Reviewed By: chadaustin Differential Revision: D7825423 fbshipit-source-id: d2ae03d0f62f00090537198095661475056e968d |
||
---|---|---|
CMake | ||
common | ||
eden | ||
.gitignore | ||
CMakeLists.txt | ||
CONTRIBUTING.md | ||
getdeps.py | ||
LICENSE | ||
PATENTS | ||
README.md |
Eden
Eden is a project with several components, the most prominent of which is a virtual filesystem built using FUSE.
Caveat Emptor
Eden is still in early stages of development. We are making it available now because we plan to start making references to it from our other open source projects, such as Buck, Watchman, and Nuclide.
The version that we provide on GitHub does not build yet.
This is because the code is exported verbatim from an internal repository at Facebook, and not all of the scaffolding from our internal repository can be easily extracted. The key areas where we need to shore things up are:
- The reinterpretations of build macros in
DEFS
. - A process for including third-party dependencies (presumably via Git submodules) and wiring up the
external_deps
argument in the build macros to point to them. - Providing the toolchain needed to power the [undocumented]
thrift_library()
rule in Buck.
The goal is to get Eden building on both Linux and OS X, though Linux support is expected to come first.