function golang_rebuild_check() { # We test whether this is _empty_, so the default is to print something out; # if the caller wants silence, then they'll pass 1 (or anything, really), # and we won't print anything... local -r _silent_run="$1" local -r _orig_ifs="$IFS" local -r _installed_go_version="$(go version | awk '{print $3}')" local _func_rv=0 local _go_binary_version='' local _go_binary_filename='' local _go_binary_portage_pkg='' local -A _invalid_go_pkgs local _line='' IFS=$'\n' for _line in $(go version /usr/bin /bin /sbin); do _go_binary_filename="$(echo "$_line" | awk '{print $1}' | sed -e 's;:$;;')" _go_binary_version="$(echo "$_line" | awk '{print $2}')" if [[ "$_go_binary_version" != "$_installed_go_version" ]]; then _go_binary_portage_pkg="$(equery b "$_go_binary_filename")" _func_rv=1 if [[ -z "${_invalid_go_pkgs["$_go_binary_portage_pkg"]}" ]]; then if [[ -z "$_silent_run" ]]; then echo "Go binary/package mismatch: $_go_binary_portage_pkg ($_go_binary_version)" >&2 fi fi _invalid_go_pkgs["$_go_binary_portage_pkg"]=1 fi done IFS="$_orig_ifs" return $_func_rv }