On 5/20/21 9:03 AM, William Hubbs wrote: > On Wed, May 19, 2021 at 01:57:38PM -0700, Zac Medico wrote: >> On 5/19/21 1:45 PM, Zac Medico wrote: >>>> +# @FUNCTION: go-module_setup_proxy >>>> +# @DESCRIPTION: >>>> +# If your ebuild redefines src_unpack and uses EGO_SUM you need to call >>>> +# this function in src_unpack. >>>> +# It sets up the go module proxy in the appropriate location and exports >>>> +# the GOPROXY environment variable so that go calls will be able to >>>> +# locate the proxy directory. >>>> +go-module_setup_proxy() { >>>> + # shellcheck disable=SC2120 >>>> + debug-print-function "${FUNCNAME}" "$@" >>>> + >>>> + if [[ ! ${_GO_MODULE_SET_GLOBALS_CALLED} ]]; then >>>> + die "go-module_set_globals must be called in global scope" >>>> + fi >>>> + >>>> + local goproxy_dir="${T}/go-proxy" >>>> + mkdir -p "${goproxy_dir}" || die >>>> + >>>> + # For each Golang module distfile, look up where it's supposed to go and >>>> + # symlink it into place. >>>> + local f >>>> + local goproxy_mod_dir >>>> + for f in ${A}; do >>>> + goproxy_mod_path="${_GOMODULE_GOSUM_REVERSE_MAP["${f}"]}" >>>> + if [[ -n "${goproxy_mod_path}" ]]; then >>>> + debug-print-function "Populating go proxy for >>>> ${goproxy_mod_path}" >>>> + # Build symlink hierarchy >>>> + goproxy_mod_dir=$( dirname >>>> "${goproxy_dir}"/"${goproxy_mod_path}" ) >>>> + mkdir -p "${goproxy_mod_dir}" || die >>>> + ln -sf "${DISTDIR}"/"${f}" >>>> "${goproxy_dir}/${goproxy_mod_path}" || >>>> + die "Failed to ln" >>>> + local v=${goproxy_mod_path} >>>> + v="${v%.mod}" >>>> + v="${v%.zip}" >>>> + v="${v//*\/}" >>>> + _go-module_gosum_synthesize_files "${goproxy_mod_dir}" >>>> "${v}" >>>> + fi >>>> + done >>>> + export GOPROXY="file://${goproxy_dir}" >>>> + >>>> + # Validate the gosum now >>>> + _go-module_src_unpack_verify_gosum >>>> +} >>>> + >>>> # @FUNCTION: go-module_src_unpack >>>> # @DESCRIPTION: >>>> # If EGO_SUM is set, unpack the base tarball(s) and set up the >>>> >>> >>> The go-module_setup_proxy function solves bug 790851 nicely, since >>> sys-cluster/k3s ebuilds can call that instead of go-module_src_unpack. >> >> I do have one criticism of the go-module_setup_proxy, which is that it >> relies on the side-effect of the GOPROXY export for its operation. We >> can instead echo the GOPROXY value to stdout and force the caller to >> export it themselves, and provide a convenience wrapper function which >> works based on side-effects. > > You really only need GOPROXY if you use EGO_SUM in your ebuild, so I > could probably export GOPROXY in go-module_set_globals. > > William >
Yes, go-module_set_globals is a nice place to consolidate all of the exports. Great idea! -- Thanks, Zac
signature.asc
Description: OpenPGP digital signature