sapling/eden/scm/lib
Arun Kulshreshtha ca8200e9df http-client: make send_async return a Vec of Futures instead of a Stream
Summary:
When the `send_async` method is used to dispatch multiple concurrent requests, the method needs to return an `AsyncResponse` for each request. Since `AsyncResponse`'s constructor is itself `async` (it waits for all of the headers to be received), internally the method ends up with a collection of `AsyncResponse` futures.

Previously, in an attempt to simplify the API, the method would insert all of these futures into a `FuturesUnordered`, thereby conceptually returning a `Stream` of `AsyncResponses`. Unfortunately, this API ends up making it harder to consume the resulting `AsyncResponses` concurrently, as one might want to do when streaming lots of data over several concurrent requests.

This diff changes the API to just insert the `AsyncResponse` futures into a `Vec` to allow the caller to use them as desired. To maintain compatibility with the old behavior for the sake of this diff, the one current callsite has been updated to just dump the returned `Vec` into a `FuturesUnordered`. This will be changed later in the stack.

Reviewed By: quark-zju

Differential Revision: D29204195

fbshipit-source-id: ecee8cff430badd8213c2efef62fc68fbd91fde9
2021-06-18 15:23:25 -07:00
..
async-runtime Update several rust crate versions 2021-06-17 16:38:19 -07:00
auth third-party/rust: update time to 0.2 2021-06-03 13:52:54 -07:00
backingstore config: namespace facebook::eden 2021-06-08 19:29:37 -07:00
blackbox Update several rust crate versions 2021-06-17 16:38:19 -07:00
bookmarkstore eden/scm/lib: autogenerate all Cargo.toml files with autocargo 2021-03-05 04:29:49 -08:00
checkout Update several rust crate versions 2021-06-17 16:38:19 -07:00
clidispatch clidispatch: add --insecure global flag 2021-03-31 12:53:46 -07:00
clientinfo Update several rust crate versions 2021-06-17 16:38:19 -07:00
cliparser third-party/rust: update tokio & tokio-stream 2021-03-10 11:01:28 -08:00
commitcloudsubscriber Update several rust crate versions 2021-06-17 16:38:19 -07:00
configmodel configmodel: impl Config on BTreeMap<String, String> 2021-06-13 09:19:22 -07:00
configparser fixup build after os_info crate update 2021-06-18 07:06:14 -07:00
cpython-async Update several rust crate versions 2021-06-17 16:38:19 -07:00
cpython-ext Update several rust crate versions 2021-06-17 16:38:19 -07:00
dag Update several rust crate versions 2021-06-17 16:38:19 -07:00
dev-logger third-party: update tracing-subscriber from 0.2.15 to 0.2.17 2021-04-12 19:24:10 -07:00
drawdag autocargo v1: changes to match autocargo v2 generation results. 2021-02-19 11:03:55 -08:00
eagerepo edenapi: remove metadata from Fetch<T> 2021-06-18 15:23:25 -07:00
edenapi http-client: make send_async return a Vec of Futures instead of a Stream 2021-06-18 15:23:25 -07:00
edenfs-client third-party/rust: update time to 0.2 2021-06-03 13:52:54 -07:00
encoding eden/scm/lib: autogenerate all Cargo.toml files with autocargo 2021-03-05 04:29:49 -08:00
fsinfo lib: remove #![deny(warnings)] 2021-04-21 12:24:47 -07:00
fsyncglob eden/scm/lib: autogenerate all Cargo.toml files with autocargo 2021-03-05 04:29:49 -08:00
hg-http send additional data identifying client 2021-06-07 06:38:37 -07:00
hg-metrics eden/scm/lib: autogenerate all Cargo.toml files with autocargo 2021-03-05 04:29:49 -08:00
hgcommands Update several rust crate versions 2021-06-17 16:38:19 -07:00
hgcommits Update several rust crate versions 2021-06-17 16:38:19 -07:00
hgtime third-party/rust: update time to 0.2 2021-06-03 13:52:54 -07:00
hostcaps Update several rust crate versions 2021-06-17 16:38:19 -07:00
http-client http-client: make send_async return a Vec of Futures instead of a Stream 2021-06-18 15:23:25 -07:00
indexedlog rotatelog: add fix cleaning up partially cleaned up logs 2021-06-11 11:36:05 -07:00
io Daily common/rust/cargo_from_buck/bin/autocargo 2021-05-05 04:03:47 -07:00
linelog Apply clang-format update fixes 2021-01-10 10:06:29 -08:00
lz4-pyframe autocargo v1: changes to match autocargo v2 generation results. 2021-02-19 11:03:55 -08:00
manifest eden/scm/lib: autogenerate all Cargo.toml files with autocargo 2021-03-05 04:29:49 -08:00
manifest-tree thrift/lib/rust: update to Bytes 1.x 2021-05-20 09:44:41 -07:00
metalog Update several rust crate versions 2021-06-17 16:38:19 -07:00
mincode Update several rust crate versions 2021-06-17 16:38:19 -07:00
minibench autocargo v1: changes to match autocargo v2 generation results. 2021-02-19 11:03:55 -08:00
minibytes Update several rust crate versions 2021-06-17 16:38:19 -07:00
mpatch eden/scm/lib: autogenerate all Cargo.toml files with autocargo 2021-03-05 04:29:49 -08:00
mpatch-sys eden/scm/lib: autogenerate all Cargo.toml files with autocargo 2021-03-05 04:29:49 -08:00
mutationstore mutationstore: avoid excessive server lookups for lazy dag 2021-06-14 16:00:58 -07:00
nodemap eden/scm/lib: autogenerate all Cargo.toml files with autocargo 2021-03-05 04:29:49 -08:00
nonblocking third-party/rust: update futures 2021-03-04 06:42:55 -08:00
pathmatcher update globset from 0.4.5 to 0.4.7 2021-06-15 15:47:49 -07:00
procinfo eden/scm/lib: autogenerate all Cargo.toml files with autocargo 2021-03-05 04:29:49 -08:00
progress Update several rust crate versions 2021-06-17 16:38:19 -07:00
radixbuf eden/scm/lib: autogenerate all Cargo.toml files with autocargo 2021-03-05 04:29:49 -08:00
renderdag eden/scm/lib: autogenerate all Cargo.toml files with autocargo 2021-03-05 04:29:49 -08:00
revisionstore http-client: make send_async return a Vec of Futures instead of a Stream 2021-06-18 15:23:25 -07:00
revlogindex dag: add DagAlgorithm::is_vertex_lazy 2021-04-13 16:37:47 -07:00
spawn-ext eden/scm/lib: autogenerate all Cargo.toml files with autocargo 2021-03-05 04:29:49 -08:00
status status: introduce status crate 2021-04-27 13:33:24 -07:00
streams Update several rust crate versions 2021-06-17 16:38:19 -07:00
taggederror eden/scm/lib: autogenerate all Cargo.toml files with autocargo 2021-03-05 04:29:49 -08:00
taggederror-util eden/scm/lib: autogenerate all Cargo.toml files with autocargo 2021-03-05 04:29:49 -08:00
third-party lib: remove unused C code 2021-04-08 16:50:13 -07:00
thrift-types Resolve bare_trait_objects warnings in path components 2021-05-19 22:03:56 -07:00
tracing-analyzer Update several rust crate versions 2021-06-17 16:38:19 -07:00
tracing-collector Update several rust crate versions 2021-06-17 16:38:19 -07:00
tracing-runtime-callsite pytracing: expose callsite.is_enabled() 2021-04-21 09:25:49 -07:00
treestate tree_state: introduce get_keys_ignorecase 2021-04-22 15:56:49 -07:00
types Update several rust crate versions 2021-06-17 16:38:19 -07:00
util clidispatch: split dispatch() method 2021-03-12 11:39:09 -08:00
version configparser: fix non-fb dependencies (#45) 2020-08-26 16:31:00 -07:00
vfs Update several rust crate versions 2021-06-17 16:38:19 -07:00
vlqencoding autocargo v1: changes to match autocargo v2 generation results. 2021-02-19 11:03:55 -08:00
workingcopy eden/scm/lib: autogenerate all Cargo.toml files with autocargo 2021-03-05 04:29:49 -08:00
xdiff autocargo v2: rollout and replace v1 in all use-cases 2021-03-02 06:43:29 -08:00
xdiff-sys autocargo v2: rollout and replace v1 in all use-cases 2021-03-02 06:43:29 -08:00
zstdelta rust: revert zstd crates 2021-06-11 04:39:54 -07:00
zstore Update several rust crate versions 2021-06-17 16:38:19 -07:00
CMakeLists.txt clib: remove buffer.[ch] 2020-10-02 10:47:23 -07:00
README.md Move fb-mercurial sources into an eden/scm subdirectory. 2019-11-13 16:04:48 -08:00
run_cargo_tests.py config: use Rust graph render as default 2020-10-19 17:07:30 -07: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).