diff options
author | Michał Górny <mgorny@gentoo.org> | 2023-06-15 17:31:16 +0200 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2023-06-18 16:57:46 +0200 |
commit | ac817be5fd5756bcd017e41321cf5731cd291c54 (patch) | |
tree | 11d6e77bfe8841d9f0de426e6e7274a9f7f8672b /eclass | |
parent | cargo.eclass: Optimize GIT_CRATES check (diff) | |
download | gentoo-ac817be5fd5756bcd017e41321cf5731cd291c54.tar.gz gentoo-ac817be5fd5756bcd017e41321cf5731cd291c54.tar.bz2 gentoo-ac817be5fd5756bcd017e41321cf5731cd291c54.zip |
cargo.eclass: Support separating crate names/versions via `@`
Support specifying crate names and versions separated by `@` character
rather than `-`. Since `@` are not valid in crate names, this
makes splitting the tokens trivial and free of regular expressions.
Effectively, the `@` variant is roughly 180% faster:
```
* CRATES with '@' separator
real 952 it/s
user 952 it/s
* CRATES with '-' separator
real 339 it/s
user 339 it/s
```
Signed-off-by: Michał Górny <mgorny@gentoo.org>
Diffstat (limited to 'eclass')
-rw-r--r-- | eclass/cargo.eclass | 24 | ||||
-rwxr-xr-x | eclass/tests/cargo-bench.sh | 111 |
2 files changed, 75 insertions, 60 deletions
diff --git a/eclass/cargo.eclass b/eclass/cargo.eclass index d97bb0df9348..8618c90bd986 100644 --- a/eclass/cargo.eclass +++ b/eclass/cargo.eclass @@ -59,12 +59,16 @@ ECARGO_VENDOR="${ECARGO_HOME}/gentoo" # Bash string containing all crates that are to be downloaded. # It is used by cargo_crate_uris. # +# Ideally, crate names and versions should be separated by a `@` +# character. A legacy syntax using hyphen is also supported but it is +# much slower. +# # Example: # @CODE # CRATES=" -# metal-1.2.3 -# bar-4.5.6 -# iron_oxide-0.0.1 +# metal@1.2.3 +# bar@4.5.6 +# iron_oxide@0.0.1 # " # inherit cargo # ... @@ -182,10 +186,16 @@ _cargo_set_crate_uris() { CARGO_CRATE_URIS= for crate in ${crates}; do local name version url - [[ $crate =~ $regex ]] || die "Could not parse name and version from crate: $crate" - name="${BASH_REMATCH[1]}" - version="${BASH_REMATCH[2]}" - url="https://crates.io/api/v1/crates/${name}/${version}/download -> ${crate}.crate" + if [[ ${crate} == *@* ]]; then + name=${crate%@*} + version=${crate##*@} + else + [[ ${crate} =~ ${regex} ]] || + die "Could not parse name and version from crate: ${crate}" + name="${BASH_REMATCH[1]}" + version="${BASH_REMATCH[2]}" + fi + url="https://crates.io/api/v1/crates/${name}/${version}/download -> ${name}-${version}.crate" CARGO_CRATE_URIS+="${url} " done diff --git a/eclass/tests/cargo-bench.sh b/eclass/tests/cargo-bench.sh index 11b740f8dfcd..d30b04569905 100755 --- a/eclass/tests/cargo-bench.sh +++ b/eclass/tests/cargo-bench.sh @@ -47,63 +47,68 @@ timeit() { # taken from cryptograpy-41.0.1 CRATES=" - Inflector-0.11.4 - aliasable-0.1.3 - asn1-0.15.2 - asn1_derive-0.15.2 - autocfg-1.1.0 - base64-0.13.1 - bitflags-1.3.2 - cc-1.0.79 - cfg-if-1.0.0 - foreign-types-0.3.2 - foreign-types-shared-0.1.1 - indoc-1.0.9 - libc-0.2.144 - lock_api-0.4.9 - memoffset-0.8.0 - once_cell-1.17.2 - openssl-0.10.54 - openssl-macros-0.1.1 - openssl-sys-0.9.88 - ouroboros-0.15.6 - ouroboros_macro-0.15.6 - parking_lot-0.12.1 - parking_lot_core-0.9.7 - pem-1.1.1 - pkg-config-0.3.27 - proc-macro-error-1.0.4 - proc-macro-error-attr-1.0.4 - proc-macro2-1.0.59 - pyo3-0.18.3 - pyo3-build-config-0.18.3 - pyo3-ffi-0.18.3 - pyo3-macros-0.18.3 - pyo3-macros-backend-0.18.3 - quote-1.0.28 - redox_syscall-0.2.16 - scopeguard-1.1.0 - smallvec-1.10.0 - syn-1.0.109 - syn-2.0.18 - target-lexicon-0.12.7 - unicode-ident-1.0.9 - unindent-0.1.11 - vcpkg-0.2.15 - version_check-0.9.4 - windows-sys-0.45.0 - windows-targets-0.42.2 - windows_aarch64_gnullvm-0.42.2 - windows_aarch64_msvc-0.42.2 - windows_i686_gnu-0.42.2 - windows_i686_msvc-0.42.2 - windows_x86_64_gnu-0.42.2 - windows_x86_64_gnullvm-0.42.2 - windows_x86_64_msvc-0.42.2 + Inflector@0.11.4 + aliasable@0.1.3 + asn1@0.15.2 + asn1_derive@0.15.2 + autocfg@1.1.0 + base64@0.13.1 + bitflags@1.3.2 + cc@1.0.79 + cfg-if@1.0.0 + foreign-types@0.3.2 + foreign-types-shared@0.1.1 + indoc@1.0.9 + libc@0.2.144 + lock_api@0.4.9 + memoffset@0.8.0 + once_cell@1.17.2 + openssl@0.10.54 + openssl-macros@0.1.1 + openssl-sys@0.9.88 + ouroboros@0.15.6 + ouroboros_macro@0.15.6 + parking_lot@0.12.1 + parking_lot_core@0.9.7 + pem@1.1.1 + pkg-config@0.3.27 + proc-macro-error@1.0.4 + proc-macro-error-attr@1.0.4 + proc-macro2@1.0.59 + pyo3@0.18.3 + pyo3-build-config@0.18.3 + pyo3-ffi@0.18.3 + pyo3-macros@0.18.3 + pyo3-macros-backend@0.18.3 + quote@1.0.28 + redox_syscall@0.2.16 + scopeguard@1.1.0 + smallvec@1.10.0 + syn@1.0.109 + syn@2.0.18 + target-lexicon@0.12.7 + unicode-ident@1.0.9 + unindent@0.1.11 + vcpkg@0.2.15 + version_check@0.9.4 + windows-sys@0.45.0 + windows-targets@0.42.2 + windows_aarch64_gnullvm@0.42.2 + windows_aarch64_msvc@0.42.2 + windows_i686_gnu@0.42.2 + windows_i686_msvc@0.42.2 + windows_x86_64_gnu@0.42.2 + windows_x86_64_gnullvm@0.42.2 + windows_x86_64_msvc@0.42.2 " inherit cargo +einfo "CRATES with '@' separator" +timeit + +einfo "CRATES with '-' separator" +CRATES=${CRATES//@/-} timeit texit |