view bin/check-ports @ 4:ba95569a12b1 last-query-implementation

Use standars word separators again (i.e. don't change IFS)
author Franz Glasner <hg@dom66.de>
date Sat, 14 Oct 2017 22:07:58 +0200
parents 86209db28490
children 53c3500894d2
line wrap: on
line source

#!/bin/sh

: ${LOCAL_REPO:=LocalRepo}
: ${FREEBSD_REPO:=FreeBSD}
: ${PORTS_DIRECT_INSTALLED_REPO:=unknown-repository}

installed_packages=$(pkg query '%n')

#for p in ${installed_packages} ; do
#    echo -n $p" "
#    pkg query '%v' $p
#    pkg rquery '%v' $p
#done

#pkg query '%n %v %R' $installed_packages |
#    while read vn vv vR ; do#
#	remote_ver=$(pkg rquery -r FreeBSD '%v' $vn)
#	version_compare=$(pkg version --test-version ${vv} ${remote_ver})
#	echo $vn $vv ${remote_ver} ${version_compare} $vR
#    done

do_rquery() {
    _repo="$1"
    _packagage_name="$2"

    remote_ver=$(pkg rquery -U -r ${_repo} '%v' ${_package_name})
}

remote_data() {
    _repo="$1"
    shift

    _temp=$(pkg rquery -U -r "${_repo}" '%n %v' "$@")
    _rv=$?
    eval remote_${_repo}_data="\"\${_temp}\""
    return ${_rv}
}

all_remote_data() {
    _repo="$1"
    _temp=$(pkg rquery -U -r "${_repo}" --all '%n %v')
    _rv=$?
    eval remote_${_repo}_data="\"\${_temp}\""
    return ${_rv}
}

query_repo() {
    _repo="$1"
    _package_name="$2"

    eval _repo_packages="\${remote_${_repo}_data}"
    while read _p _v ; do
	if [ "$_p" = "${_package_name}" ] ; then
	    repo_version="${_v}"
	    return 0
	fi
    done <<EOFABCDEFG43
${_repo_packages}
EOFABCDEFG43
    repo_version=""
    return 1
}

installed_data="$(pkg query '%n %v %R' $installed_packages)"

remote_data FreeBSD ${installed_packages}
remote_data LocalRepo ${installed_packages}

while read vn vv vR ; do
    if [ "${vR}" = "${PORTS_DIRECT_INSTALLED_REPO}" ] ; then
	_local_ver_label="$(pkg version -U -I -n ${vn} | sed -E -e 's/.+[[:space:]]+//')"
	echo ${_local_ver_label}
    elif [ "${vR}" = "${LOCAL_REPO}" ] ; then
	if ! query_repo "${vR}" "${vn}" ; then
	    echo "ERROR: ${vn} ${vR}"
	else
	    echo "REPO: ${repo_version} vs. installed version ${vv}"
	fi
    elif [ "${vR}" = "${FREEBSD_REPO}" ] ; then
	if ! query_repo "${vR}" "${vn}" ; then
	    echo "ERROR 2: ${vn} ${vR}"
	fi
    else
	echo "UNKNOWN REPOSITORY \`${vR}' for packet \`${vn}'" >&2
    fi
done <<EOFEOFEOF687
${installed_data}
EOFEOFEOF687