mirror of
https://github.com/pentoo/pentoo-overlay
synced 2025-12-06 08:25:01 +01:00
194 lines
4.3 KiB
Bash
Executable file
194 lines
4.3 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
# alternative:
|
|
# go mod vendor && grep "# g" ./vendor/modules.txt | sort >
|
|
# EGO_VENDOR=(
|
|
# )
|
|
# inherit golang-vcs-snapshot
|
|
# SRC_URI="https://github.com/XXX/archive/v${PV}.tar.gz -> ${P}.tar.gz
|
|
# ${EGO_VENDOR_URI}"
|
|
|
|
TARGET="${1:-go.sum}"
|
|
MODULES=()
|
|
WHITELIST=(
|
|
"github.com"
|
|
"bitbucket.org"
|
|
)
|
|
|
|
function in_whitelist() {
|
|
local module="${1}"
|
|
local state=0
|
|
|
|
for w in ${WHITELIST[@]}; do
|
|
[[ "${module}" == ${w}/* ]] && state=1
|
|
done
|
|
|
|
if [ ${state} -eq 0 ]; then
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
function parse_gosum() {
|
|
local gosum_file="${1}"
|
|
local _prefix raw
|
|
|
|
IFS=$'\n'
|
|
for raw in $(cat "${gosum_file}" \
|
|
| awk '{pn[FNR]=$1; pv[$1]=$2}
|
|
END {
|
|
for ( n in pn ) {
|
|
if ( pn[n] != f ) {
|
|
printf("%s %s\n", pn[n], pv[pn[n]])
|
|
f=pn[n]
|
|
}
|
|
}
|
|
}' \
|
|
| sed -E "s/[[:space:]](v?([0-9]{1,}\.)?+[0-9]{1,}((\-r|_rc|_beta|_alpha)[0-9]{1,}?)?)[-+\/]/ \1 \2/")
|
|
do
|
|
module="$(echo ${raw} | cut -d' ' -f1)"
|
|
version="$(echo ${raw} | cut -d' ' -f2)"
|
|
revision="$(echo ${raw} | cut -d' ' -f3 | sed -E "s/^([a-z0-9.]{1,}-)([a-z0-9]{1,7}).*/\2/")"
|
|
|
|
if ! in_whitelist "${module}"; then
|
|
_prefix="(checkme) "
|
|
else
|
|
_prefix=""
|
|
fi
|
|
|
|
if ! [[ -z "${module}" ]]; then
|
|
[[ "${version}" == *0.0.0 ]] \
|
|
&& MODULES+=( "${_prefix}${module} ${revision}" ) \
|
|
|| MODULES+=( "${_prefix}${module} ${version}" )
|
|
fi
|
|
done
|
|
}
|
|
|
|
function parse_gopkglock() {
|
|
local pkglock_file="${1}"
|
|
local _prefix raw
|
|
|
|
IFS=$':'
|
|
for raw in $(cat "${pkglock_file}" \
|
|
| tr -d "[:blank:]\"" \
|
|
| awk -F'=' '$1~/^name$/{printf(":%s ",$2)};$1~/^revision$|^version$/{printf("%s ",$2)}')
|
|
do
|
|
module="$(echo ${raw} | cut -d' ' -f1)"
|
|
version="$(echo ${raw} | cut -d' ' -f3)"
|
|
revision="$(echo ${raw} | cut -d' ' -f2 | cut -c1-7)"
|
|
|
|
if ! in_whitelist "${module}"; then
|
|
_prefix="(checkme) "
|
|
else
|
|
_prefix=""
|
|
fi
|
|
|
|
if ! [[ -z "${module}" ]]; then
|
|
[[ -z "${version}" ]] \
|
|
&& MODULES+=( "${_prefix}${module} ${revision}" ) \
|
|
|| MODULES+=( "${_prefix}${module} ${version}" )
|
|
fi
|
|
done
|
|
}
|
|
|
|
function parse_gopkgtoml() {
|
|
local pkgtoml_file="${1}"
|
|
local _prefix raw
|
|
|
|
IFS=$':'
|
|
for raw in $(cat "${pkgtoml_file}" \
|
|
| tr -d "[:blank:]\"" \
|
|
| awk -F'=' '$1~/^name$/{printf(":%s ",$2)};$1~/^revision$|^version$/{printf("%s ",$2)}')
|
|
do
|
|
module="$(echo ${raw} | cut -d' ' -f1)"
|
|
version="$(echo ${raw} | cut -d' ' -f2)"
|
|
revision="$(echo ${raw} | cut -d' ' -f3)"
|
|
|
|
if ! in_whitelist "${module}"; then
|
|
_prefix="(checkme) "
|
|
else
|
|
_prefix=""
|
|
fi
|
|
|
|
if ! [[ -z "${module}" ]]; then
|
|
[[ -z "${version}" ]] \
|
|
&& MODULES+=( "${_prefix}${module} ${revision}" ) \
|
|
|| MODULES+=( "${_prefix}${module} ${version}" )
|
|
fi
|
|
done
|
|
}
|
|
|
|
function parse_gomod() {
|
|
local gomod_file="${1}"
|
|
local _prefix raw
|
|
|
|
IFS=$'\n'
|
|
for raw in $(cat "${gomod_file}" \
|
|
| awk -v'm=0' '
|
|
m==0&&$1" "$2" "$3~/^require \"?(.*) (.*)\"?/&&$1" "$2!~/^require \($/ { m=1 }
|
|
m==0&&$1" "$2~/^require \($/ { strl=FNR; m=2 }
|
|
m==2&&$1~/^\)$/ { endl=FNR }
|
|
m==1&&$1~/^require$/&&$2!="" { pn[FNR]=$2; pv[$2]=$3 }
|
|
m==2 { pn[FNR]=$1; pv[$1]=$2 }
|
|
END {
|
|
switch (m) {
|
|
case 1:
|
|
for (n in pn)
|
|
printf("%s %s\n", pn[n], pv[pn[n]])
|
|
break
|
|
case 2:
|
|
for (n in pn) {
|
|
if (n > strl) {
|
|
printf("%s %s\n", pn[n], pv[pn[n]])
|
|
if (n < endl) break
|
|
}
|
|
}
|
|
break
|
|
}
|
|
}' \
|
|
| sed -E "s/^[[:blank:]]\"?//;s/[[:space:]](v?([0-9]{1,}\.)?+[0-9]{1,}((\-r|_rc|_beta|_alpha)[0-9]{1,}?)?)[-+\/]/ \1 \2/")
|
|
do
|
|
module="$(echo ${raw} | cut -d' ' -f1)"
|
|
version="$(echo ${raw} | cut -d' ' -f2)"
|
|
revision="$(echo ${raw} | cut -d' ' -f3 | sed -E "s/^([a-z0-9.]{1,}-)([a-z0-9]{1,7}).*/\2/")"
|
|
|
|
if ! in_whitelist "${module}"; then
|
|
_prefix="(checkme) "
|
|
else
|
|
_prefix=""
|
|
fi
|
|
|
|
if ! [[ -z "${module}" ]]; then
|
|
[[ "${version}" == *0.0.0 ]] \
|
|
&& MODULES+=( "${_prefix}${module} ${revision}" ) \
|
|
|| MODULES+=( "${_prefix}${module} ${version}" )
|
|
fi
|
|
done
|
|
}
|
|
|
|
#function parse_golist() {
|
|
# :
|
|
#}
|
|
#
|
|
#function merge() {
|
|
# #sort -k1 -k2 -V -r
|
|
# :
|
|
#}
|
|
|
|
if ! [ -f "${TARGET}" ]; then
|
|
echo "${TARGET} — is not found!"
|
|
exit 1
|
|
fi
|
|
|
|
case "$(basename "${TARGET}")" in
|
|
*.sum) parse_gosum "${TARGET}";;
|
|
*.lock) parse_gopkglock "${TARGET}";;
|
|
*.toml) parse_gopkgtoml "${TARGET}";;
|
|
# *.list) parse_golist "${TARGET}";;
|
|
*.mod) parse_gomod "${TARGET}";;
|
|
esac
|
|
|
|
echo -e "EGO_VENDOR=("
|
|
for mod in ${MODULES[@]}; do
|
|
echo -e "\t\"${mod}\""
|
|
done
|
|
echo -e ")"
|