sapling/eden/scm/lib
Jun Wu 6f4bf325d5 indexedlog: write Checksum inline with Log
Summary:
Enhance the index format: The Root entry can be followed by an optional
Checksum entry which replaces the need of ChecksumTable.

The format is backwards compatible since the old format will be just
treated as "there is no ChecksumTable", and the ChecksumTable will be built on
the next "flush".

This change is non-trivial. But the tests are pretty strong - the bitflip test
alone covered a lot of issues, and the dump of Index content helps a lot too.

For the index itself without ".sum", checksum, this change is bi-directional
compatible:
1. New code reading old file will just think the old file does not have the
   checksum entry, similar to new code having checksum disabled.
2. Old code will think the root+checksum slice is the "root" entry. Parsing
   the root entry is fine since it does not complain about unknown data at the
   end.

However, this change dropped the logic updating ".sum" files. That part is an
issue blocking old clients from reading new data.

Reviewed By: DurhamG

Differential Revision: D19850741

fbshipit-source-id: 551a45cd5422f1fb4c5b08e3b207a2ffe3d93dea
2020-02-28 09:23:55 -08:00
..
asyncrevisionstore/src pyrevisionstore: use PyPath instead of PyBytes 2020-01-28 10:01:50 -08:00
auth convert to bytes 0.5 2020-02-24 10:28:46 -08:00
backingstore convert to bytes 0.5 2020-02-24 10:28:46 -08:00
blackbox cargo: bump serde_cbor to 0.11 2020-02-21 14:08:43 -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 convert to bytes 0.5 2020-02-24 10:28:46 -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 cargo: bump serde_cbor to 0.11 2020-02-21 14:08:43 -08:00
configparser convert to bytes 0.5 2020-02-24 10:28:46 -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 nameset: UnionSet 2020-02-27 07:34:57 -08:00
drawdag Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
edenapi convert to bytes 0.5 2020-02-24 10:28:46 -08:00
edenfs-client update the Rust print_status() function to take an IO parameter 2020-02-26 14:54:40 -08:00
encoding Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
hgcommands tracing-collector: support owned strings in TreeSpans 2020-02-28 09:16:14 -08:00
hgtime hgtime: fix corner case of date range parsing 2020-01-27 09:37:00 -08:00
indexedlog indexedlog: write Checksum inline with Log 2020-02-28 09:23:55 -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 convert to bytes 0.5 2020-02-24 10:28:46 -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: add serde support 2020-02-07 14:21:39 -08:00
mpatch Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
mpatch-sys use absolute includes for the native cext modules 2020-02-19 13:05:06 -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: add a get_stripped method to ContentStore 2020-02-27 12:29:42 -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 rust/thrift: Un-rename futures-preview dependency 2020-02-27 22:27:58 -08:00
tracing-collector tracing-collector: support owned strings in TreeSpans 2020-02-28 09:16:14 -08:00
treestate Switch from failure::Fail trait to std::error::Error for errors 2019-11-22 08:53:31 -08:00
types convert to bytes 0.5 2020-02-24 10:28:46 -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 eden/scm: cover xdiff with autocargo 2020-02-19 05:15:17 -08:00
xdiff-sys eden/scm: cover xdiff with autocargo 2020-02-19 05:15:17 -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).