sapling/eden/scm/lib
Jun Wu 108f1c947a minibytes: minimalist zero-copy Bytes with mmap support
Summary:
This crate provides the core features of the commonly known `Bytes` crate:
zero-copy slicing and cloning, while also supports mmap-backed buffers.

The main motivation is to replace `Mmap` in `indexedlog`. That has multiple
benefits:
- Handles 0-sized mmap more cleanly.
- Handles clones more cleanly.
- Gain the flexibility to zero-copy data without lifetime / reference.
- Gain the flexibility to switch to non-mmap data.

The `bytes::Bytes` crate does not yet support mmap buffers as of its latest
release (0.5.4).

Implementation wise, `minibytes::Bytes` uses `Option<Arc<dyn Trait>>` for the
"trait object". This makes implementing the mmap storage just one line.
`bytes 0.5.4` re-invents the "trait object" manually using unsafe code. It requires
about 50 lines to implement the mmap storage (in D19756122).

Reviewed By: xavierd

Differential Revision: D19770856

fbshipit-source-id: 8cfa7052a18ac2e0cd6348b77d5e2a4acc61195c
2020-02-07 14:21:38 -08:00
..
asyncrevisionstore/src pyrevisionstore: use PyPath instead of PyBytes 2020-01-28 10:01:50 -08:00
auth Switch from failure::Fail trait to std::error::Error for errors 2019-11-22 08:53:31 -08:00
backingstore eden: periodically refresh content store to give it chances to release mapped files 2020-01-17 15:00:01 -08:00
blackbox Update rustfmt and reformat fbsource 2020-02-04 17:14:27 -08:00
bookmarkstore Switch from failure::Fail trait to std::error::Error for errors 2019-11-22 08:53:31 -08:00
cdatapack cmake: always build support for the EdenSCM backing store 2019-11-22 13:00:07 -08:00
clib cmake: always build support for the EdenSCM backing store 2019-11-22 13:00:07 -08:00
clidispatch pyconfigparser: use String as arguments instead of PyBytes 2020-01-16 09:31:45 -08:00
cliparser Update rustfmt and reformat fbsource 2020-02-04 17:14:27 -08:00
commitcloudsubscriber Switch from failure::Fail trait to std::error::Error for errors 2019-11-22 08:53:31 -08:00
commitstore/bench-serialize Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
configparser pyconfigparser: use String as arguments instead of PyBytes 2020-01-16 09:31:45 -08:00
cpython-ext cpython-ext: add a way to wrap Rust Write object into a Python object 2020-02-04 18:41:13 -08:00
dag dag: move iddag to own file 2020-01-24 15:49:54 -08:00
drawdag Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
edenapi Switch from failure::Fail trait to std::error::Error for errors 2019-11-22 08:53:31 -08:00
edenfs-client edenfs-client: fix warnings 2020-01-13 18:14:46 -08:00
encoding Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
hgcommands py3: only use binary stdin/stdout/stderr 2020-02-03 18:26:57 -08:00
hgtime hgtime: fix corner case of date range parsing 2020-01-27 09:37:00 -08:00
indexedlog indexedlog: add MultiLog 2020-01-17 21:49:57 -08:00
linelog Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
lz4-pyframe Switch from failure::Fail trait to std::error::Error for errors 2019-11-22 08:53:31 -08:00
manifest manifest: add testutil in core package 2020-01-14 11:49:52 -08:00
manifest-tree manifest-tree: move private test function to lib.rs 2020-01-14 11:49:53 -08:00
metalog Update rustfmt and reformat fbsource 2020-02-04 17:14:27 -08:00
mincode Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
minibench Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
minibytes minibytes: minimalist zero-copy Bytes with mmap support 2020-02-07 14:21:38 -08:00
mpatch Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
mpatch-sys Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
mutationstore mutationstore: update tests so that user is now a string 2020-01-30 19:54:45 -08:00
nodemap indexedlog: replace Log's dir with a new GenericPath type 2020-01-17 03:57:59 -08:00
pathmatcher pathmatcher: hint globset to use prefix strategy instead of regexp strategy 2019-11-14 14:27:39 -08:00
procinfo Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
radixbuf Update rustfmt and reformat fbsource 2020-02-04 17:14:27 -08:00
renderdag renderdag: add tests showing how orders affect rendering 2020-01-23 20:50:56 -08:00
revisionstore revisionstore: move memcache initialization to a background thread 2020-02-05 14:01:54 -08:00
stackdesc Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
third-party Merge fb-mercurial sources into the eden repository 2019-11-13 20:20:32 -08:00
thrift-types thrift: update thrift generated files 2020-01-23 16:06:51 -08:00
tracing-collector tracing: limit column width on ASCII output 2020-02-06 15:46:53 -08:00
treestate Switch from failure::Fail trait to std::error::Error for errors 2019-11-22 08:53:31 -08:00
types py3/rust: types: add AsRef<str> for RepoPath 2020-01-27 16:50:12 -08:00
util pyconfigparser: use PyPath instead of PyByte 2020-01-28 10:14:14 -08:00
vlqencoding Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
workingcopy workingcopy: add error handling and reporting to rust walker 2020-01-13 15:26:30 -08:00
xdiff move cram from xplat/third-party to third-party 2019-12-20 16:14:17 -08:00
xdiff-sys Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
zstdelta Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
zstore zstore: implement indexedlog::DefaultOpenOptions 2019-12-06 19:35:05 -08:00
CMakeLists.txt cmake: always build support for the EdenSCM backing store 2019-11-22 13:00:07 -08:00
README.md Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00

lib

Any native code (C/C++/Rust) that Mercurial (either core or extensions) depends on should go here. Python code, or native code that depends on Python code (e.g. #include <Python.h> or use cpython) is disallowed.

As we start to convert more of Mercurial into Rust, and write new paths entrirely in native code, we'll want to limit our dependency on Python, which is why this barrier exists.

See also hgext/extlib/README.md, mercurial/cext/README.mb.

How do I choose between lib and extlib (and cext)?

If your code is native and doesn't depend on Python (awesome!), it goes here.

Otherwise, put it in hgext/extlib (if it's only used by extensions) or mercurial/cext (if it's used by extensions or core).