Florian Schmaus <f...@gentoo.org> writes:

> The only call site of _go-module_gomod_encode() was using $() in a loop
> over EGO_SUM. This caused bash to fork() for every loop iteration, which
> significantly affected the time it takes to "source" an ebuild using
> EGO_SUM.
>
> For example, "pkg pkg source =sys-cluster/k3s-1.23.3_p1" previously took
> 2.4 seconds. Inlining _go-module_gomod_encode() reduces this to
> 236 milliseconds.
>
> This also adds missing 'local' declarations for some variables.

Nice one & lgtm, thanks!

But please remember to CC eclass maintainers (done now). If you did and
I missed it, apologies.

>
> Signed-off-by: Florian Schmaus <f...@gentoo.org>
> ---
>  eclass/go-module.eclass | 44 +++++++++++++++--------------------------
>  1 file changed, 16 insertions(+), 28 deletions(-)
>
> diff --git a/eclass/go-module.eclass b/eclass/go-module.eclass
> index f97b69f591c8..6c58d7f26f07 100644
> --- a/eclass/go-module.eclass
> +++ b/eclass/go-module.eclass
> @@ -262,7 +262,22 @@ go-module_set_globals() {
>                       continue
>               fi
>  
> -             _dir=$(_go-module_gomod_encode "${module}")
> +             # Encode the name(path) of a Golang module in the format 
> expected by Goproxy.
> +             # Upper letters are replaced by their lowercase version with a 
> '!' prefix.
> +             # The transformed result of 'module' is stored in the '_dir' 
> variable.
> +             #
> +             ## Python:
> +             # return re.sub('([A-Z]{1})', r'!\1', s).lower()
> +             ## Sed:
> +             ## This uses GNU Sed extension \l to downcase the match
> +             # echo "${module}" |sed 's,[A-Z],!\l&,g'
> +             local re _dir lower
> +             _dir="${module}"
> +             re='(.*)([A-Z])(.*)'
> +             while [[ ${_dir} =~ ${re} ]]; do
> +                     lower='!'"${BASH_REMATCH[2],}"
> +                     _dir="${BASH_REMATCH[1]}${lower}${BASH_REMATCH[3]}"
> +             done
>  
>               for _ext in "${exts[@]}" ; do
>                       # Relative URI within a GOPROXY for a file
> @@ -496,33 +511,6 @@ go-module_live_vendor() {
>       popd >& /dev/null || die
>  }
>  
> -# @FUNCTION: _go-module_gomod_encode
> -# @DEPRECATED: none
> -# @DESCRIPTION:
> -# Encode the name(path) of a Golang module in the format expected by Goproxy.
> -#
> -# Upper letters are replaced by their lowercase version with a '!' prefix.
> -#
> -_go-module_gomod_encode() {
> -     ## Python:
> -     # return re.sub('([A-Z]{1})', r'!\1', s).lower()
> -
> -     ## Sed:
> -     ## This uses GNU Sed extension \l to downcase the match
> -     #echo "${module}" |sed 's,[A-Z],!\l&,g'
> -     #
> -     # Bash variant:
> -     debug-print-function "${FUNCNAME}" "$@"
> -     #local re input lower
> -     re='(.*)([A-Z])(.*)'
> -     input="${1}"
> -     while [[ ${input} =~ ${re} ]]; do
> -             lower='!'"${BASH_REMATCH[2],}"
> -             input="${BASH_REMATCH[1]}${lower}${BASH_REMATCH[3]}"
> -     done
> -     echo "${input}"
> -}
> -
>  fi
>  
>  if [[ ! ${GO_OPTIONAL} ]]; then

Attachment: signature.asc
Description: PGP signature

Reply via email to