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 15C7E158008 for ; Fri, 16 Jun 2023 12:09:08 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 33C59E09DB; Fri, 16 Jun 2023 12:07:49 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (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 DFAA4E09C7 for ; Fri, 16 Jun 2023 12:07:48 +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 4/5] cargo.eclass: Support separating crate names/versions via slash Date: Fri, 16 Jun 2023 14:01:07 +0200 Message-ID: <20230616120739.8656-5-mgorny@gentoo.org> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230616120739.8656-1-mgorny@gentoo.org> References: <20230616120739.8656-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: e948757b-3594-43ec-b65a-b3c392147362 X-Archives-Hash: 4e37cbc54780fa1f06fda904a0aef212 Support specifying crate names and versions separated by forward slashes rather than hyphens. Since slashes are not valid in crate names, this makes splitting the tokens trivial and free of regular expressions. Effectively, the slash variant is roughly 180% faster: ``` * CRATES with slashes real 952 it/s user 952 it/s * CRATES with hyphens 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..54a1edd36c28 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 forward +# slash. 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..cb346178f0a2 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 slashes" +timeit + +einfo "CRATES with hyphens" +CRATES=${CRATES//\//-} timeit texit -- 2.41.0