sapling/lib
Jun Wu 0b39ff42d9 configparser: implement basic parsing
Summary:
Handling sections and normal config items. `%` support will be added in an
upcoming patch.

Note: regex would make the code simpler - the expression
`^([^\s=]+)\s*=\s*(.*(?:\n[\t ].*)*)\s*` can extract both config name and
multi-line values. However a naive benchmark shows it is 20x slower parsing
larger files, and it has some initialization cost. Config parsing is at such
a low level and its performance is critical. So the code does its own
parsing instead of using regex.

Reviewed By: mitrandir77

Differential Revision: D8779051

fbshipit-source-id: a2de698f0676c886737c47891a0400f187bff822
2018-07-16 19:57:36 -07:00
..
argparse codemod: reformat rest of the code 2018-07-05 17:52:43 -07:00
cdatapack hg: disable check-code tests for C code 2018-06-05 19:21:43 -07:00
clib hg: disable check-code tests for C code 2018-06-05 19:21:43 -07:00
commitcloudsubscriber commit cloud subscriber: skip cloud sync if can't resolve interngraph host 2018-06-29 12:20:11 -07:00
configparser configparser: implement basic parsing 2018-07-16 19:57:36 -07:00
hg_watchman_client watchman rust client for hg: allow fallible deserialization for paths and add tests 2018-05-29 13:09:18 -07:00
indexedlog indexedlog: detect index corruption 2018-07-09 14:37:27 -07:00
linelog hg: disable check-code tests for C code 2018-06-05 19:21:43 -07:00
lz4-pyframe lz4-pyframe: fix compression of 0 length strings 2018-07-09 18:02:58 -07:00
minibench minibench: simple test filtering support 2018-04-17 18:54:39 -07:00
mpatch mpatch: add rust bindings 2018-05-14 16:06:32 -07:00
mpatch-sys mpatch: add rust bindings 2018-05-14 16:06:32 -07:00
pathencoding pathencoding: utility for converting between bytes and paths 2018-04-13 21:51:35 -07:00
pathmatcher gitignore: avoid quadratic behavior 2018-04-13 21:51:48 -07:00
radixbuf rust/tp2: update rust-crates-io 2018-06-01 09:32:56 -07:00
revisionstore loosefile: fix compilation errors in tests 2018-07-09 15:20:50 -07:00
third-party xdiff: backport upstream changes 2018-04-13 21:51:48 -07:00
treestate treestate: fix perf regression on treedirstate 2018-06-19 00:48:56 -07:00
vlqencoding vlqencoding: replace criterion with minibench 2018-04-17 18:54:39 -07:00
watchman_client watchman rust client for hg: allow fallible deserialization for paths and add tests 2018-05-29 13:09:18 -07:00
zstdelta vendoredcrates: upgrade zstd-sys to the latest 2018-06-28 15:08:01 -07:00
Cargo.toml configparser: add a new Rust library 2018-07-11 17:36:06 -07:00
README.md READMEs: tweaks based on feedback 2018-01-12 12:35:52 -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).