From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 48E6F158008 for ; Fri, 16 Jun 2023 19:22:14 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 1F220E096A; Fri, 16 Jun 2023 19:21:00 +0000 (UTC) Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id D612BE095D for ; Fri, 16 Jun 2023 19:20:59 +0000 (UTC) From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= To: gentoo-dev@lists.gentoo.org Cc: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Subject: [gentoo-dev] [PATCH v2 4/5] cargo.eclass: Support separating crate names/versions via `@` Date: Fri, 16 Jun 2023 21:19:57 +0200 Message-ID: <20230616192050.9828-5-mgorny@gentoo.org> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230616192050.9828-1-mgorny@gentoo.org> References: <20230616192050.9828-1-mgorny@gentoo.org> Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-dev@lists.gentoo.org Reply-to: gentoo-dev@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Archives-Salt: 631b9421-b52d-4f87-b146-8beca4b1d485 X-Archives-Hash: 3c754fcb488e50fddb7bbc23e3018d39 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 --- eclass/cargo.eclass | 24 +++++--- 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 -- 2.41.0