sapling/eden/scm/lib
Meyer Jacobs 4ccbd119d7 debug: introduce error classification and metadata propagation
Summary:
Introduce new rust library, taggederror, which contains utilities for attaching metadata to errors. The library provides two main methods for attaching metadata to an error, the TaggedError wrapper type, and the AnyhowExt trait methods. Provides a struct, CommonMetadata, which contains all the metadata types introduced by taggederror (fault, transience, category, and typename), which can also be attached individually (and the same pattern can be used to attach other metadata).

Introduce a new native rust command, debugthrowrustexception, which causes the command to return an error, with some attached metadata.

Modify hg rust native command dispatch error handling to use debug formatter to print anyhow::Error errors. This will print out the source chain, contexts, and backtrace if available, which will cause the metadata we attach as a wrapper error or context to be printed.

Reviewed By: DurhamG

Differential Revision: D22420941

fbshipit-source-id: d38c5a10b686d86b69a2c0a19f5bcbf4ca24dff6
2020-07-15 10:03:10 -07:00
..
asyncrevisionstore/src packs: flush history packs every 10 million adds 2020-07-13 08:10:14 -07:00
auth auth: remove use of unwrap 2020-07-09 19:05:55 -07:00
backingstore revisionstore: add EdenApiFileStore and EdenApiTreeStore 2020-07-13 17:35:31 -07:00
blackbox blackbox: address clippy warnings 2020-03-18 10:16:39 -07:00
bookmarkstore types: address clippy warnings 2020-03-16 14:58:21 -07: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 debug: introduce error classification and metadata propagation 2020-07-15 10:03:10 -07:00
cliparser debug: introduce error classification and metadata propagation 2020-07-15 10:03:10 -07:00
commitcloudsubscriber rust/reindeer: update eventsource to 0.5 2020-07-08 04:15:21 -07:00
commitstore/bench-serialize cargo: bump serde_cbor to 0.11 2020-02-21 14:08:43 -08:00
configparser configs: switch to auditing the specific list of known problematic configs 2020-07-13 08:53:18 -07:00
cpython-ext cpython-ext: Add ExtractInnerRef trait 2020-07-09 19:05:55 -07:00
dag revlogindex: is_ancestor(x, x) should return true 2020-07-06 15:50:59 -07:00
dev-logger dev-logger: a simple library to enable env_logger for testing 2020-03-10 14:16:38 -07:00
drawdag Use types from the oxidized_by_ref crate instead of the oxidized crate for to_oxidized 2020-05-28 22:19:13 -07:00
dynamicconfig configs: add hg debugdynamicconfig --canary devvmXXX.prnY support 2020-07-15 01:14:30 -07:00
edenapi edenapi_types: fix comments in json.rs 2020-07-10 21:38:02 -07:00
edenfs-client eden/scm: move third-party facebook crates dependencies to a separate folder 2020-07-02 03:35:02 -07:00
encoding Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
fsinfo fsinfo: return an enum instead of a String 2020-03-23 14:29:10 -07:00
hgcommands debug: introduce error classification and metadata propagation 2020-07-15 10:03:10 -07:00
hgcommits hgcommits: make HgCommit serializable 2020-07-06 15:51:00 -07:00
hgtime hgtime: address clippy warnings 2020-03-16 14:58:22 -07:00
http_client http_client: add pool for Multi handles 2020-07-09 13:08:27 -07:00
indexedlog indexedlog: remove chown feature 2020-04-27 15:47:59 -07:00
linelog Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
lz4-pyframe eden: remove unused Rust dependencies 2020-06-17 17:55:03 -07:00
manifest manifest: add testutil in core package 2020-01-14 11:49:52 -08:00
manifest-tree Deprecate rust-crypto in manifest-tree 2020-03-23 11:15:58 -07:00
metalog metalog: implement compaction api 2020-06-26 09:58:58 -07:00
mincode Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
minibench mononoke/mercurial: make revlog crate OSS buildable 2020-04-08 09:49:11 -07:00
minibytes minibytes: address clippy warnings 2020-03-16 14:58:22 -07: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: copy entries automatically on flush 2020-07-02 13:22:34 -07:00
nodemap indexedlog: replace Log's dir with a new GenericPath type 2020-01-17 03:57:59 -08:00
pathmatcher Replace whitelist/blacklist term 2020-06-15 15:01:19 -07:00
procinfo procinfo: address compiler warning 2020-03-04 09:49:14 -08:00
radixbuf revlogindex: do not raise errors on ambiguous prefix 2020-07-06 15:50:58 -07:00
renderdag renderdag: make render API accept trait objects 2020-06-03 13:26:27 -07:00
revisionstore revisionstore: Add EdenApiHistoryStore 2020-07-13 17:35:31 -07:00
revlogindex revlogindex: update nodemap even if it's non-symlink and mmaped on Windows 2020-07-08 11:31:21 -07:00
taggederror debug: introduce error classification and metadata propagation 2020-07-15 10:03:10 -07:00
third-party xdiff: renamed third-party xdiff functions 2020-07-14 03:46:04 -07:00
thrift-types eden/scm: move third-party facebook crates dependencies to a separate folder 2020-07-02 03:35:02 -07:00
tracing-collector tracing-collector: add is_event to TreeSpan 2020-03-12 12:19:38 -07:00
treestate filesystem: add filesystem walking to PendingChanges 2020-04-24 13:58:53 -07:00
types edenapi_types: improve DataEntry hash check API 2020-07-06 14:47:48 -07:00
util revlogindex: update nodemap even if it's non-symlink and mmaped on Windows 2020-07-08 11:31:21 -07:00
version version: a Rust crate providing version information 2020-05-18 09:00:40 -07:00
vfs filesystem: add treestate walking logic 2020-04-24 13:58:53 -07:00
vlqencoding mutationstore: move MutationEntry type to types crate 2020-04-23 08:58:10 -07:00
workingcopy filesystem: add treestate walking logic 2020-04-24 13:58:53 -07:00
xdiff xdiff: renamed third-party xdiff functions 2020-07-09 01:20:32 -07:00
xdiff-sys xdiff: renamed third-party xdiff functions 2020-07-09 01:20:32 -07:00
zstdelta Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
zstore zstore: add simple caching 2020-05-01 14:24:52 -07: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).