rust/hg-core/Cargo.toml
author Georges Racinet <georges.racinet@octobus.net>
Tue, 18 Feb 2020 19:11:15 +0100
changeset 44386 8f7c6656ac79
parent 44305 d8d4fa9a7f18
child 44539 fe7d2cf0b429
permissions -rw-r--r--
rust-nodemap: pure Rust example To run, use `cargo run --release --example nodemap` This demonstrates that simple scenarios entirely written in Rust can content themselves with `NodeTree<T>`. The example mmaps both the nodemap file and the changelog index. We had of course to include an implementation of `RevlogIndex` directly, which isn't much at this stage. It felt a bit prematurate to include it in the lib. Here are some first performance measurements, obtained with this example, on a clone of mozilla-central with 440000 changesets: (create) Nodemap constructed in RAM in 153.638305ms (query CAE63161B68962) found in 22.362us: Ok(Some(269489)) (bench) Did 3 queries in 36.418µs (mean 12.139µs) (bench) Did 50 queries in 184.318µs (mean 3.686µs) (bench) Did 100000 queries in 31.053461ms (mean 310ns) To be fair, even between bench runs, results tend to depend whether the file is still in kernel caches, and it's not so easy to get back to a real cold start. The worst we've seen was in the 50us ballpark. In any busy server setting, the pages would always be in RAM. We hope it's good enough not to be significantly slower on any concrete Mercurial operation than the C nodetree when fully in RAM, and of course this implementation has the serious headstart advantage of persistence. Differential Revision: https://phab.mercurial-scm.org/D7797
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
40271
dbc28c91f7ff rust: pure Rust lazyancestors iterator
Georges Racinet <gracinet@anybox.fr>
parents:
diff changeset
     1
[package]
dbc28c91f7ff rust: pure Rust lazyancestors iterator
Georges Racinet <gracinet@anybox.fr>
parents:
diff changeset
     2
name = "hg-core"
dbc28c91f7ff rust: pure Rust lazyancestors iterator
Georges Racinet <gracinet@anybox.fr>
parents:
diff changeset
     3
version = "0.1.0"
dbc28c91f7ff rust: pure Rust lazyancestors iterator
Georges Racinet <gracinet@anybox.fr>
parents:
diff changeset
     4
authors = ["Georges Racinet <gracinet@anybox.fr>"]
dbc28c91f7ff rust: pure Rust lazyancestors iterator
Georges Racinet <gracinet@anybox.fr>
parents:
diff changeset
     5
description = "Mercurial pure Rust core library, with no assumption on Python bindings (FFI)"
42609
326fdce22fb2 rust: switch hg-core and hg-cpython to rust 2018 edition
Raphaël Gomès <rgomes@octobus.net>
parents: 42331
diff changeset
     6
edition = "2018"
44305
d8d4fa9a7f18 rust-re2: add wrapper for calling Re2 from Rust
Raphaël Gomès <rgomes@octobus.net>
parents: 44301
diff changeset
     7
build = "build.rs"
40271
dbc28c91f7ff rust: pure Rust lazyancestors iterator
Georges Racinet <gracinet@anybox.fr>
parents:
diff changeset
     8
dbc28c91f7ff rust: pure Rust lazyancestors iterator
Georges Racinet <gracinet@anybox.fr>
parents:
diff changeset
     9
[lib]
dbc28c91f7ff rust: pure Rust lazyancestors iterator
Georges Racinet <gracinet@anybox.fr>
parents:
diff changeset
    10
name = "hg"
41692
ee7b7bd432a1 rust: translated random test of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 40271
diff changeset
    11
42302
d1786c1d34fa rust-dirstate: add rust implementation of `parse_dirstate` and `pack_dirstate`
Raphaël Gomès <rgomes@octobus.net>
parents: 41692
diff changeset
    12
[dependencies]
42327
e8f3740cc067 rust-filepatterns: add a Rust implementation of pattern-related utils
Raphaël Gomès <rgomes@octobus.net>
parents: 42302
diff changeset
    13
byteorder = "1.3.1"
44143
7f86426fdd2c rust-node: binary Node ID and conversion utilities
Georges Racinet <georges.racinet@octobus.net>
parents: 43826
diff changeset
    14
hex = "0.4.0"
42327
e8f3740cc067 rust-filepatterns: add a Rust implementation of pattern-related utils
Raphaël Gomès <rgomes@octobus.net>
parents: 42302
diff changeset
    15
lazy_static = "1.3.0"
44305
d8d4fa9a7f18 rust-re2: add wrapper for calling Re2 from Rust
Raphaël Gomès <rgomes@octobus.net>
parents: 44301
diff changeset
    16
libc = { version = "0.2.66", optional = true }
42331
d6c1dd936778 rust: sort dependencies entries in Cargo.toml
Augie Fackler <augie@google.com>
parents: 42327
diff changeset
    17
memchr = "2.2.0"
43236
2f314599d5a2 rust-dependencies: pin the dependencies of hg-core to prevent breakage
Raphaël Gomès <rgomes@octobus.net>
parents: 42737
diff changeset
    18
rand = "0.6.5"
2f314599d5a2 rust-dependencies: pin the dependencies of hg-core to prevent breakage
Raphaël Gomès <rgomes@octobus.net>
parents: 42737
diff changeset
    19
rand_pcg = "0.1.1"
44158
161958ebf73c rust-dependencies: update rayon
Raphaël Gomès <rgomes@octobus.net>
parents: 44143
diff changeset
    20
rayon = "1.3.0"
43236
2f314599d5a2 rust-dependencies: pin the dependencies of hg-core to prevent breakage
Raphaël Gomès <rgomes@octobus.net>
parents: 42737
diff changeset
    21
regex = "1.1.0"
43826
5ac243a92e37 rust-performance: introduce FastHashMap type alias for HashMap
Raphaël Gomès <rgomes@octobus.net>
parents: 43271
diff changeset
    22
twox-hash = "1.5.0"
44301
4caac36c66bc rust-utils: add util for canonical path
Raphaël Gomès <rgomes@octobus.net>
parents: 44266
diff changeset
    23
same-file = "1.0.6"
44265
c18dd48cea4a rust-pathauditor: add Rust implementation of the `pathauditor`
Raphaël Gomès <rgomes@octobus.net>
parents: 44158
diff changeset
    24
c18dd48cea4a rust-pathauditor: add Rust implementation of the `pathauditor`
Raphaël Gomès <rgomes@octobus.net>
parents: 44158
diff changeset
    25
[dev-dependencies]
44386
8f7c6656ac79 rust-nodemap: pure Rust example
Georges Racinet <georges.racinet@octobus.net>
parents: 44305
diff changeset
    26
clap = "*"
8f7c6656ac79 rust-nodemap: pure Rust example
Georges Racinet <georges.racinet@octobus.net>
parents: 44305
diff changeset
    27
memmap = "0.7.0"
8f7c6656ac79 rust-nodemap: pure Rust example
Georges Racinet <georges.racinet@octobus.net>
parents: 44305
diff changeset
    28
pretty_assertions = "0.6.1"
44266
9ab4830e9e3d rust-hg-path: add useful methods to `HgPath`
Raphaël Gomès <rgomes@octobus.net>
parents: 44265
diff changeset
    29
tempfile = "3.1.0"
44305
d8d4fa9a7f18 rust-re2: add wrapper for calling Re2 from Rust
Raphaël Gomès <rgomes@octobus.net>
parents: 44301
diff changeset
    30
d8d4fa9a7f18 rust-re2: add wrapper for calling Re2 from Rust
Raphaël Gomès <rgomes@octobus.net>
parents: 44301
diff changeset
    31
[build-dependencies]
d8d4fa9a7f18 rust-re2: add wrapper for calling Re2 from Rust
Raphaël Gomès <rgomes@octobus.net>
parents: 44301
diff changeset
    32
cc = { version = "1.0.48", optional = true }
d8d4fa9a7f18 rust-re2: add wrapper for calling Re2 from Rust
Raphaël Gomès <rgomes@octobus.net>
parents: 44301
diff changeset
    33
d8d4fa9a7f18 rust-re2: add wrapper for calling Re2 from Rust
Raphaël Gomès <rgomes@octobus.net>
parents: 44301
diff changeset
    34
[features]
d8d4fa9a7f18 rust-re2: add wrapper for calling Re2 from Rust
Raphaël Gomès <rgomes@octobus.net>
parents: 44301
diff changeset
    35
default = []
d8d4fa9a7f18 rust-re2: add wrapper for calling Re2 from Rust
Raphaël Gomès <rgomes@octobus.net>
parents: 44301
diff changeset
    36
with-re2 = ["cc", "libc"]