public inbox for gentoo-dev@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-dev] [PATCH v2 0/7] pypi.eclass: optimize, v2
@ 2023-06-14 18:33 Michał Górny
  2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 1/7] pypi.eclass: Move setting globals to a function Michał Górny
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: Michał Górny @ 2023-06-14 18:33 UTC (permalink / raw
  To: gentoo-dev; +Cc: Michał Górny

Hi,

Only small changes:

1) added more test cases to the benchmark and improved the logic
   to generate readable output

2) switched extglob logic to the more readable version suggested by ulm
   (decided to do it after all)


Michał Górny (7):
  pypi.eclass: Move setting globals to a function
  eclass/tests: Add pypi-bench.sh for global scope logic
  pypi.eclass: Translate version once in the default scenario
  pypi.eclass: Normalize names without subshell
  pypi.eclass: Translate version without subshell in common case
  pypi.eclass: Replace pypi_sdist_url in global scope
  pypi.eclass: Avoid subshell for extglob setting

 eclass/pypi.eclass         | 128 ++++++++++++++++++++++++++-----------
 eclass/tests/pypi-bench.sh |  65 +++++++++++++++++++
 2 files changed, 155 insertions(+), 38 deletions(-)
 create mode 100755 eclass/tests/pypi-bench.sh

-- 
2.41.0



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [gentoo-dev] [PATCH v2 1/7] pypi.eclass: Move setting globals to a function
  2023-06-14 18:33 [gentoo-dev] [PATCH v2 0/7] pypi.eclass: optimize, v2 Michał Górny
@ 2023-06-14 18:33 ` Michał Górny
  2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 2/7] eclass/tests: Add pypi-bench.sh for global scope logic Michał Górny
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Michał Górny @ 2023-06-14 18:33 UTC (permalink / raw
  To: gentoo-dev; +Cc: Michał Górny

Signed-off-by: Michał Górny <mgorny@gentoo.org>
---
 eclass/pypi.eclass | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/eclass/pypi.eclass b/eclass/pypi.eclass
index 13dd56fa4fec..732b0c6184ef 100644
--- a/eclass/pypi.eclass
+++ b/eclass/pypi.eclass
@@ -221,12 +221,20 @@ pypi_wheel_url() {
 	fi
 }
 
-if [[ ${PYPI_NO_NORMALIZE} ]]; then
-	SRC_URI="$(pypi_sdist_url --no-normalize)"
-	S="${WORKDIR}/${PYPI_PN}-$(pypi_translate_version "${PV}")"
-else
-	SRC_URI="$(pypi_sdist_url)"
-	S="${WORKDIR}/$(pypi_normalize_name "${PYPI_PN}")-$(pypi_translate_version "${PV}")"
-fi
+# @FUNCTION: _pypi_set_globals
+# @INTERNAL
+# @DESCRIPTION:
+# Set global variables, SRC_URI and S.
+_pypi_set_globals() {
+	if [[ ${PYPI_NO_NORMALIZE} ]]; then
+		SRC_URI="$(pypi_sdist_url --no-normalize)"
+		S="${WORKDIR}/${PYPI_PN}-$(pypi_translate_version "${PV}")"
+	else
+		SRC_URI="$(pypi_sdist_url)"
+		S="${WORKDIR}/$(pypi_normalize_name "${PYPI_PN}")-$(pypi_translate_version "${PV}")"
+	fi
+}
+
+_pypi_set_globals
 
 fi
-- 
2.41.0



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [gentoo-dev] [PATCH v2 2/7] eclass/tests: Add pypi-bench.sh for global scope logic
  2023-06-14 18:33 [gentoo-dev] [PATCH v2 0/7] pypi.eclass: optimize, v2 Michał Górny
  2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 1/7] pypi.eclass: Move setting globals to a function Michał Górny
@ 2023-06-14 18:33 ` Michał Górny
  2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 3/7] pypi.eclass: Translate version once in the default scenario Michał Górny
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Michał Górny @ 2023-06-14 18:33 UTC (permalink / raw
  To: gentoo-dev; +Cc: Michał Górny

The benchmark yield roughly 327 ops / s on my machine.

Signed-off-by: Michał Górny <mgorny@gentoo.org>
---
 eclass/tests/pypi-bench.sh | 65 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)
 create mode 100755 eclass/tests/pypi-bench.sh

diff --git a/eclass/tests/pypi-bench.sh b/eclass/tests/pypi-bench.sh
new file mode 100755
index 000000000000..7ea596edc0b5
--- /dev/null
+++ b/eclass/tests/pypi-bench.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+# Copyright 2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+source tests-common.sh || exit
+
+export LC_ALL=C
+
+doit() {
+	for (( i = 0; i < 1000; i++ )); do
+		_pypi_set_globals
+	done
+}
+
+timeit() {
+	einfo "Timing PYPI_PN=\"${PYPI_PN}\" PV=\"${PV}\" PYPI_NO_NORMALIZE=${PYPI_NO_NORMALIZE}"
+
+	local real=()
+	local user=()
+	local x vr avg
+
+	for x in {1..3}; do
+		while read tt tv; do
+			case ${tt} in
+				real) real+=( ${tv} );;
+				user) user+=( ${tv} );;
+			esac
+		done < <( ( time -p doit ) 2>&1 )
+	done
+
+	[[ ${#real[@]} == 3 ]] || die "Did not get 3 real times"
+	[[ ${#user[@]} == 3 ]] || die "Did not get 3 user times"
+
+	local xr avg
+	for x in real user; do
+		xr="${x}[*]"
+		avg=$(dc -S 3 -e "3000 ${!xr} + + / p")
+
+		printf '%s %4.0f it/s\n' "${x}" "${avg}"
+	done
+}
+
+PN=foo-bar
+PYPI_PN=Foo.Bar
+PV=1.2.3_beta2
+WORKDIR='<WORKDIR>'
+
+inherit pypi
+timeit
+
+PV=1.2.3
+timeit
+PYPI_NO_NORMALIZE=1 timeit
+
+PN=foobar
+PYPI_PN=FooBar
+timeit
+PYPI_NO_NORMALIZE=1 timeit
+
+PYPI_PN=foobar
+timeit
+PYPI_NO_NORMALIZE=1 timeit
+
+texit
-- 
2.41.0



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [gentoo-dev] [PATCH v2 3/7] pypi.eclass: Translate version once in the default scenario
  2023-06-14 18:33 [gentoo-dev] [PATCH v2 0/7] pypi.eclass: optimize, v2 Michał Górny
  2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 1/7] pypi.eclass: Move setting globals to a function Michał Górny
  2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 2/7] eclass/tests: Add pypi-bench.sh for global scope logic Michał Górny
@ 2023-06-14 18:33 ` Michał Górny
  2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 4/7] pypi.eclass: Normalize names without subshell Michał Górny
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Michał Górny @ 2023-06-14 18:33 UTC (permalink / raw
  To: gentoo-dev; +Cc: Michał Górny

Instead of translating version two times, once in pypi_sdist_url
and then when setting S, do it once and store the result.  This gives
roughly 371 ops / s, i.e. a 13% speedup.

Signed-off-by: Michał Górny <mgorny@gentoo.org>
---
 eclass/pypi.eclass | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/eclass/pypi.eclass b/eclass/pypi.eclass
index 732b0c6184ef..a8a179d5a3a4 100644
--- a/eclass/pypi.eclass
+++ b/eclass/pypi.eclass
@@ -226,12 +226,14 @@ pypi_wheel_url() {
 # @DESCRIPTION:
 # Set global variables, SRC_URI and S.
 _pypi_set_globals() {
+	local version=$(pypi_translate_version "${PV}")
+
 	if [[ ${PYPI_NO_NORMALIZE} ]]; then
-		SRC_URI="$(pypi_sdist_url --no-normalize)"
-		S="${WORKDIR}/${PYPI_PN}-$(pypi_translate_version "${PV}")"
+		SRC_URI="$(pypi_sdist_url --no-normalize "${PYPI_PN}" "${version}")"
+		S="${WORKDIR}/${PYPI_PN}-${version}"
 	else
-		SRC_URI="$(pypi_sdist_url)"
-		S="${WORKDIR}/$(pypi_normalize_name "${PYPI_PN}")-$(pypi_translate_version "${PV}")"
+		SRC_URI="$(pypi_sdist_url "${PYPI_PN}" "${version}")"
+		S="${WORKDIR}/$(pypi_normalize_name "${PYPI_PN}")-${version}"
 	fi
 }
 
-- 
2.41.0



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [gentoo-dev] [PATCH v2 4/7] pypi.eclass: Normalize names without subshell
  2023-06-14 18:33 [gentoo-dev] [PATCH v2 0/7] pypi.eclass: optimize, v2 Michał Górny
                   ` (2 preceding siblings ...)
  2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 3/7] pypi.eclass: Translate version once in the default scenario Michał Górny
@ 2023-06-14 18:33 ` Michał Górny
  2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 5/7] pypi.eclass: Translate version without subshell in common case Michał Górny
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Michał Górny @ 2023-06-14 18:33 UTC (permalink / raw
  To: gentoo-dev; +Cc: Michał Górny

Provide an internal helper to normalize names without a subshell.
This gives 535 ops / s, so a further 44% speedup.

Signed-off-by: Michał Górny <mgorny@gentoo.org>
---
 eclass/pypi.eclass | 39 +++++++++++++++++++++++++++------------
 1 file changed, 27 insertions(+), 12 deletions(-)

diff --git a/eclass/pypi.eclass b/eclass/pypi.eclass
index a8a179d5a3a4..d79e6f06fc1b 100644
--- a/eclass/pypi.eclass
+++ b/eclass/pypi.eclass
@@ -63,6 +63,21 @@ _PYPI_ECLASS=1
 # @CODE
 : "${PYPI_PN:=${PN}}"
 
+# @FUNCTION: _pypi_normalize_name
+# @INTERNAL
+# @USAGE: <name>
+# @DESCRIPTION:
+# Internal normalization function, returns the result
+# via _PYPI_NORMALIZED_NAME variable.
+_pypi_normalize_name() {
+	local name=${1}
+	local shopt_save=$(shopt -p extglob)
+	shopt -s extglob
+	name=${name//+([._-])/_}
+	${shopt_save}
+	_PYPI_NORMALIZED_NAME="${name,,}"
+}
+
 # @FUNCTION: pypi_normalize_name
 # @USAGE: <name>
 # @DESCRIPTION:
@@ -75,12 +90,9 @@ _PYPI_ECLASS=1
 pypi_normalize_name() {
 	[[ ${#} -ne 1 ]] && die "Usage: ${FUNCNAME} <name>"
 
-	local name=${1}
-	local shopt_save=$(shopt -p extglob)
-	shopt -s extglob
-	name=${name//+([._-])/_}
-	${shopt_save}
-	echo "${name,,}"
+	local _PYPI_NORMALIZED_NAME
+	_pypi_normalize_name "${@}"
+	echo "${_PYPI_NORMALIZED_NAME}"
 }
 
 # @FUNCTION: pypi_translate_version
@@ -137,10 +149,10 @@ pypi_sdist_url() {
 	local project=${1-"${PYPI_PN}"}
 	local version=${2-"$(pypi_translate_version "${PV}")"}
 	local suffix=${3-.tar.gz}
-	local fn_project=${project}
-	[[ ${normalize} ]] && fn_project=$(pypi_normalize_name "${project}")
+	local _PYPI_NORMALIZED_NAME=${project}
+	[[ ${normalize} ]] && _pypi_normalize_name "${_PYPI_NORMALIZED_NAME}"
 	printf "https://files.pythonhosted.org/packages/source/%s" \
-		"${project::1}/${project}/${fn_project}-${version}${suffix}"
+		"${project::1}/${project}/${_PYPI_NORMALIZED_NAME}-${version}${suffix}"
 }
 
 # @FUNCTION: pypi_wheel_name
@@ -167,11 +179,12 @@ pypi_wheel_name() {
 		die "Usage: ${FUNCNAME} <project> [<version> [<python-tag> [<abi-platform-tag>]]]"
 	fi
 
-	local project=$(pypi_normalize_name "${1-"${PYPI_PN}"}")
+	local _PYPI_NORMALIZED_NAME
+	_pypi_normalize_name "${1:-"${PYPI_PN}"}"
 	local version=${2-"$(pypi_translate_version "${PV}")"}
 	local pytag=${3-py3}
 	local abitag=${4-none-any}
-	echo "${project}-${version}-${pytag}-${abitag}.whl"
+	echo "${_PYPI_NORMALIZED_NAME}-${version}-${pytag}-${abitag}.whl"
 }
 
 # @FUNCTION: pypi_wheel_url
@@ -232,8 +245,10 @@ _pypi_set_globals() {
 		SRC_URI="$(pypi_sdist_url --no-normalize "${PYPI_PN}" "${version}")"
 		S="${WORKDIR}/${PYPI_PN}-${version}"
 	else
+		local _PYPI_NORMALIZED_NAME
+		_pypi_normalize_name "${PYPI_PN}"
 		SRC_URI="$(pypi_sdist_url "${PYPI_PN}" "${version}")"
-		S="${WORKDIR}/$(pypi_normalize_name "${PYPI_PN}")-${version}"
+		S="${WORKDIR}/${_PYPI_NORMALIZED_NAME}-${version}"
 	fi
 }
 
-- 
2.41.0



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [gentoo-dev] [PATCH v2 5/7] pypi.eclass: Translate version without subshell in common case
  2023-06-14 18:33 [gentoo-dev] [PATCH v2 0/7] pypi.eclass: optimize, v2 Michał Górny
                   ` (3 preceding siblings ...)
  2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 4/7] pypi.eclass: Normalize names without subshell Michał Górny
@ 2023-06-14 18:33 ` Michał Górny
  2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 6/7] pypi.eclass: Replace pypi_sdist_url in global scope Michał Górny
  2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 7/7] pypi.eclass: Avoid subshell for extglob setting Michał Górny
  6 siblings, 0 replies; 8+ messages in thread
From: Michał Górny @ 2023-06-14 18:33 UTC (permalink / raw
  To: gentoo-dev; +Cc: Michał Górny

Provide an internal helper to translate versions without a subshell,
and use it in the common case.  Now the benchmark gives 685 ops / s,
which means it's another 28% speedup.

Signed-off-by: Michał Górny <mgorny@gentoo.org>
---
 eclass/pypi.eclass | 33 ++++++++++++++++++++++-----------
 1 file changed, 22 insertions(+), 11 deletions(-)

diff --git a/eclass/pypi.eclass b/eclass/pypi.eclass
index d79e6f06fc1b..04fe5e51bcee 100644
--- a/eclass/pypi.eclass
+++ b/eclass/pypi.eclass
@@ -95,6 +95,19 @@ pypi_normalize_name() {
 	echo "${_PYPI_NORMALIZED_NAME}"
 }
 
+# @FUNCTION: _pypi_translate_version
+# @USAGE: <version>
+# @DESCRIPTION:
+# Internal version translation function, returns the result
+# via _PYPI_TRANSLATED_VERSION variable.
+_pypi_translate_version() {
+	local version=${1}
+	version=${version/_alpha/a}
+	version=${version/_beta/b}
+	version=${version/_rc/rc}
+	_PYPI_TRANSLATED_VERSION=${version/_p/.post}
+}
+
 # @FUNCTION: pypi_translate_version
 # @USAGE: <version>
 # @DESCRIPTION:
@@ -106,12 +119,9 @@ pypi_normalize_name() {
 pypi_translate_version() {
 	[[ ${#} -ne 1 ]] && die "Usage: ${FUNCNAME} <version>"
 
-	local version=${1}
-	version=${version/_alpha/a}
-	version=${version/_beta/b}
-	version=${version/_rc/rc}
-	version=${version/_p/.post}
-	echo "${version}"
+	local _PYPI_TRANSLATED_VERSION
+	_pypi_translate_version "${@}"
+	echo "${_PYPI_TRANSLATED_VERSION}"
 }
 
 # @FUNCTION: pypi_sdist_url
@@ -239,16 +249,17 @@ pypi_wheel_url() {
 # @DESCRIPTION:
 # Set global variables, SRC_URI and S.
 _pypi_set_globals() {
-	local version=$(pypi_translate_version "${PV}")
+	local _PYPI_TRANSLATED_VERSION
+	_pypi_translate_version "${PV}"
 
 	if [[ ${PYPI_NO_NORMALIZE} ]]; then
-		SRC_URI="$(pypi_sdist_url --no-normalize "${PYPI_PN}" "${version}")"
-		S="${WORKDIR}/${PYPI_PN}-${version}"
+		SRC_URI="$(pypi_sdist_url --no-normalize "${PYPI_PN}" "${_PYPI_TRANSLATED_VERSION}")"
+		S="${WORKDIR}/${PYPI_PN}-${_PYPI_TRANSLATED_VERSION}"
 	else
 		local _PYPI_NORMALIZED_NAME
 		_pypi_normalize_name "${PYPI_PN}"
-		SRC_URI="$(pypi_sdist_url "${PYPI_PN}" "${version}")"
-		S="${WORKDIR}/${_PYPI_NORMALIZED_NAME}-${version}"
+		SRC_URI="$(pypi_sdist_url "${PYPI_PN}" "${_PYPI_TRANSLATED_VERSION}")"
+		S="${WORKDIR}/${_PYPI_NORMALIZED_NAME}-${_PYPI_TRANSLATED_VERSION}"
 	fi
 }
 
-- 
2.41.0



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [gentoo-dev] [PATCH v2 6/7] pypi.eclass: Replace pypi_sdist_url in global scope
  2023-06-14 18:33 [gentoo-dev] [PATCH v2 0/7] pypi.eclass: optimize, v2 Michał Górny
                   ` (4 preceding siblings ...)
  2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 5/7] pypi.eclass: Translate version without subshell in common case Michał Górny
@ 2023-06-14 18:33 ` Michał Górny
  2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 7/7] pypi.eclass: Avoid subshell for extglob setting Michał Górny
  6 siblings, 0 replies; 8+ messages in thread
From: Michał Górny @ 2023-06-14 18:33 UTC (permalink / raw
  To: gentoo-dev; +Cc: Michał Górny

Introduce an internal helper for _pypi_sdist_url that doesn't require
subshell, and therefore eliminate all subshells from global scope.
We're nearing 952 ops / s, further 39% speedup.

Signed-off-by: Michał Górny <mgorny@gentoo.org>
---
 eclass/pypi.eclass | 53 +++++++++++++++++++++++++++++-----------------
 1 file changed, 33 insertions(+), 20 deletions(-)

diff --git a/eclass/pypi.eclass b/eclass/pypi.eclass
index 04fe5e51bcee..8911628994eb 100644
--- a/eclass/pypi.eclass
+++ b/eclass/pypi.eclass
@@ -124,6 +124,31 @@ pypi_translate_version() {
 	echo "${_PYPI_TRANSLATED_VERSION}"
 }
 
+# @FUNCTION: _pypi_sdist_url
+# @INTERNAL
+# @USAGE: [--no-normalize] [<project> [<version> [<suffix>]]]
+# @DESCRIPTION:
+# Internal sdist generated, returns the result via _PYPI_SDIST_URL
+# variable.
+_pypi_sdist_url() {
+	local normalize=1
+	if [[ ${1} == --no-normalize ]]; then
+		normalize=
+		shift
+	fi
+
+	if [[ ${#} -gt 3 ]]; then
+		die "Usage: ${FUNCNAME} [--no-normalize] <project> [<version> [<suffix>]]"
+	fi
+
+	local project=${1-"${PYPI_PN}"}
+	local version=${2-"$(pypi_translate_version "${PV}")"}
+	local suffix=${3-.tar.gz}
+	local _PYPI_NORMALIZED_NAME=${project}
+	[[ ${normalize} ]] && _pypi_normalize_name "${_PYPI_NORMALIZED_NAME}"
+	_PYPI_SDIST_URL="https://files.pythonhosted.org/packages/source/${project::1}/${project}/${_PYPI_NORMALIZED_NAME}-${version}${suffix}"
+}
+
 # @FUNCTION: pypi_sdist_url
 # @USAGE: [--no-normalize] [<project> [<version> [<suffix>]]]
 # @DESCRIPTION:
@@ -146,23 +171,9 @@ pypi_translate_version() {
 # If <format> is unspecified, it defaults to ".tar.gz".  Another valid
 # value is ".zip" (please remember to add a BDEPEND on app-arch/unzip).
 pypi_sdist_url() {
-	local normalize=1
-	if [[ ${1} == --no-normalize ]]; then
-		normalize=
-		shift
-	fi
-
-	if [[ ${#} -gt 3 ]]; then
-		die "Usage: ${FUNCNAME} [--no-normalize] <project> [<version> [<suffix>]]"
-	fi
-
-	local project=${1-"${PYPI_PN}"}
-	local version=${2-"$(pypi_translate_version "${PV}")"}
-	local suffix=${3-.tar.gz}
-	local _PYPI_NORMALIZED_NAME=${project}
-	[[ ${normalize} ]] && _pypi_normalize_name "${_PYPI_NORMALIZED_NAME}"
-	printf "https://files.pythonhosted.org/packages/source/%s" \
-		"${project::1}/${project}/${_PYPI_NORMALIZED_NAME}-${version}${suffix}"
+	local _PYPI_SDIST_URL
+	_pypi_sdist_url "${@}"
+	echo "${_PYPI_SDIST_URL}"
 }
 
 # @FUNCTION: pypi_wheel_name
@@ -249,18 +260,20 @@ pypi_wheel_url() {
 # @DESCRIPTION:
 # Set global variables, SRC_URI and S.
 _pypi_set_globals() {
-	local _PYPI_TRANSLATED_VERSION
+	local _PYPI_SDIST_URL _PYPI_TRANSLATED_VERSION
 	_pypi_translate_version "${PV}"
 
 	if [[ ${PYPI_NO_NORMALIZE} ]]; then
-		SRC_URI="$(pypi_sdist_url --no-normalize "${PYPI_PN}" "${_PYPI_TRANSLATED_VERSION}")"
+		_pypi_sdist_url --no-normalize "${PYPI_PN}" "${_PYPI_TRANSLATED_VERSION}"
 		S="${WORKDIR}/${PYPI_PN}-${_PYPI_TRANSLATED_VERSION}"
 	else
 		local _PYPI_NORMALIZED_NAME
 		_pypi_normalize_name "${PYPI_PN}"
-		SRC_URI="$(pypi_sdist_url "${PYPI_PN}" "${_PYPI_TRANSLATED_VERSION}")"
+		_pypi_sdist_url "${PYPI_PN}" "${_PYPI_TRANSLATED_VERSION}"
 		S="${WORKDIR}/${_PYPI_NORMALIZED_NAME}-${_PYPI_TRANSLATED_VERSION}"
 	fi
+
+	SRC_URI=${_PYPI_SDIST_URL}
 }
 
 _pypi_set_globals
-- 
2.41.0



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [gentoo-dev] [PATCH v2 7/7] pypi.eclass: Avoid subshell for extglob setting
  2023-06-14 18:33 [gentoo-dev] [PATCH v2 0/7] pypi.eclass: optimize, v2 Michał Górny
                   ` (5 preceding siblings ...)
  2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 6/7] pypi.eclass: Replace pypi_sdist_url in global scope Michał Górny
@ 2023-06-14 18:33 ` Michał Górny
  6 siblings, 0 replies; 8+ messages in thread
From: Michał Górny @ 2023-06-14 18:33 UTC (permalink / raw
  To: gentoo-dev; +Cc: Michał Górny

Suggested by Eli Schwartz.  This gives roughly 5260 ops / s, over 550%
speedup.

The complete patch series therefore increases the speed from roughly
326 ops / s to 5260 ops / s, making the common case 16 times faster.

Closes: https://bugs.gentoo.org/908411
Closes: https://github.com/gentoo/gentoo/pull/31404
Signed-off-by: Michał Górny <mgorny@gentoo.org>
---
 eclass/pypi.eclass | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/eclass/pypi.eclass b/eclass/pypi.eclass
index 8911628994eb..8a842c450ebc 100644
--- a/eclass/pypi.eclass
+++ b/eclass/pypi.eclass
@@ -71,10 +71,13 @@ _PYPI_ECLASS=1
 # via _PYPI_NORMALIZED_NAME variable.
 _pypi_normalize_name() {
 	local name=${1}
-	local shopt_save=$(shopt -p extglob)
-	shopt -s extglob
-	name=${name//+([._-])/_}
-	${shopt_save}
+	if shopt -p -q extglob; then
+		name=${name//+([._-])/_}
+	else
+		shopt -s extglob
+		name=${name//+([._-])/_}
+		shopt -u extglob
+	fi
 	_PYPI_NORMALIZED_NAME="${name,,}"
 }
 
-- 
2.41.0



^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2023-06-14 18:37 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-14 18:33 [gentoo-dev] [PATCH v2 0/7] pypi.eclass: optimize, v2 Michał Górny
2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 1/7] pypi.eclass: Move setting globals to a function Michał Górny
2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 2/7] eclass/tests: Add pypi-bench.sh for global scope logic Michał Górny
2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 3/7] pypi.eclass: Translate version once in the default scenario Michał Górny
2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 4/7] pypi.eclass: Normalize names without subshell Michał Górny
2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 5/7] pypi.eclass: Translate version without subshell in common case Michał Górny
2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 6/7] pypi.eclass: Replace pypi_sdist_url in global scope Michał Górny
2023-06-14 18:33 ` [gentoo-dev] [PATCH v2 7/7] pypi.eclass: Avoid subshell for extglob setting Michał Górny

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox