summaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2023-06-15 17:31:16 +0200
committerMichał Górny <mgorny@gentoo.org>2023-06-18 16:57:46 +0200
commitac817be5fd5756bcd017e41321cf5731cd291c54 (patch)
tree11d6e77bfe8841d9f0de426e6e7274a9f7f8672b /eclass
parentcargo.eclass: Optimize GIT_CRATES check (diff)
downloadgentoo-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.eclass24
-rwxr-xr-xeclass/tests/cargo-bench.sh111
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