sapling/lib
Jun Wu 0099d73ea1 dag: add more ancestor-related operations
Summary:
The existing hg APIs support things like getting all the gcas, and testing
"isancestor" without calcuating the gca. Implement them in the dag crate to
match those features.

I picked `gca` to make names shorter. Here is a list of how those features
get named in two codebases:

  Name in hg codebase  | Name in this crate
  -----------------------------------------
  ancestor             | gca_one
  commonancestorsheads | gca_all
  isancestor           | is_ancestor
  ancestors            | ancestors

Reviewed By: markbt, sfilipco

Differential Revision: D16672420

fbshipit-source-id: d205d7970623e992e656ae300218239cddbd26c8
2019-08-09 16:17:51 -07:00
..
asyncrevisionstore/src revisionstore: remove MutableHistoryStore::close 2019-05-21 15:25:28 -07:00
blackbox blackbox: buffer logs before initialization 2019-07-18 15:11:57 -07:00
bookmarkstore rust: update to 2018 edition 2019-06-03 07:22:36 -07:00
cdatapack fix a warning about an ignored const keyword 2019-08-05 12:10:41 -07:00
clib Started Eden for Windows and integrated hg store with it. 2018-08-21 17:51:26 -07:00
clidispatch clidispatch: do not flush in IO::write 2019-08-08 22:54:09 -07:00
cliparser cliparser: stop using vendored shlex 2019-08-08 22:54:08 -07:00
commitcloudsubscriber Apply rustfmt to all rust files 2019-07-10 20:18:48 -07:00
configparser rust: Head start on some upcoming warnings 2019-07-12 00:55:53 -07:00
cpython-ext lib: drop extension-module-2-7 cpython feature 2019-08-08 22:54:07 -07:00
cpython-failure lib: drop extension-module-2-7 cpython feature 2019-08-08 22:54:07 -07:00
dag dag: add more ancestor-related operations 2019-08-09 16:17:51 -07:00
drawdag drawdag: implement a Rust drawdag library 2019-05-03 13:35:40 -07:00
edenapi rust: Head start on some upcoming warnings 2019-07-12 00:55:53 -07:00
encoding bindings: add manifest python classes 2019-07-22 13:03:00 -07:00
hg_watchman_client Apply rustfmt to all rust files 2019-07-10 20:18:48 -07:00
hgcommands hgcommands: move commands from hgmain 2019-08-08 22:54:10 -07:00
indexedlog indexedlog: recover from partially created LogRotate 2019-07-30 10:17:10 -07:00
linelog linelog: update README 2018-11-08 12:34:36 -08:00
lz4-pyframe revisionstore: use Bytes instead of Box<[u8]> in Delta and DataEntry 2019-01-22 14:03:17 -08:00
manifest bindings: add finalize implementation for tree manifests 2019-08-06 14:24:31 -07:00
minibench minibench: add a way to provide adhoc messages for measurement 2019-08-09 16:17:50 -07:00
mpatch rust: update to 2018 edition 2019-06-03 07:22:36 -07:00
mpatch-sys rust: update to 2018 edition 2019-06-03 07:22:36 -07:00
mutationstore rust: update to 2018 edition 2019-06-03 07:22:36 -07:00
nodemap Apply rustfmt to all rust files 2019-07-10 20:18:48 -07:00
pathmatcher pathmatcher: add Matcher trait 2019-07-22 13:03:00 -07:00
procinfo procinfo: upgrade winapi to 0.3 2019-07-16 17:10:59 -07:00
radixbuf rust: update to 2018 edition 2019-06-03 07:22:36 -07:00
revisionstore revisionstore: remove loosefile.rs 2019-08-09 10:19:20 -07:00
stackdesc stackdesc: a thin library to annotate the current thread execution 2019-08-01 19:53:56 -07:00
third-party xdiff: backport upstream changes 2018-04-13 21:51:48 -07:00
treestate rust: Head start on some upcoming warnings 2019-07-12 00:55:53 -07:00
types types: add String/str conversions for RepoPath & friends 2019-07-22 13:02:59 -07:00
vlqencoding Apply rustfmt to all rust files 2019-07-10 20:18:48 -07:00
watchman_client Apply rustfmt to all rust files 2019-07-10 20:18:48 -07:00
zstdelta tp2/rust: Update socket2, net2, async-trait 2019-07-27 19:54:26 -07:00
Cargo.toml lib: rename hgpython to hgcommands 2019-08-08 22:54:09 -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).