view bin/check-ports @ 12:fd56d1b7d822

Use extra flag for controlling the printing of the package title
author Franz Glasner <hg@dom66.de>
date Wed, 25 Oct 2017 09:22:56 +0200
parents 5bf2bf962bf0
children c0e2eb5613fe
line wrap: on
line source

#!/bin/sh

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

get_remote_repo_versions() {
    local _repo _data _rv

    _repo=$1

    _data=$(pkg version -U -R -r ${_repo} -v)
    _rv=$?
    eval remote_${_repo}_versions=\"\${_data}\"
    return ${_rv}
}

get_remote_repo_data() {
    local _repo _name _rversions _rfqp _rl _rdescr

    _repo=$1
    _name=$2

    eval _rversions=\"\${remote_${_repo}_versions}\"
    while read _rfqp _rl _rdescr ; do
	if [ ${_rfqp%-*} = ${_name} ] ; then
	    eval remote_${_repo}_label=\${_rl}
	    eval remote_${_repo}_descr=\"\${_rdescr}\"
	    return 0
	fi
    done <<EOF884657
${_rversions}
EOF884657
    eval remote_${_repo}_label=""
    eval remote_${_repo}_descr=""
    return 1
}

get_local_index_versions() {
    local_index_versions=$(pkg version -I -v)
}

get_repo_for_package() {
    local _name _n _v _r

    _name=$1

    while read _n _v _r ; do
	if [ ${_name} = ${_n} ] ; then
	    repository=${_r}
	    return 0
	fi
    done<<EOF223777
${installed_data}
EOF223777
    return 1
}

assert_local_version() {
    local _name _version _n _v _r

    _name=$1
    _version=$2

    while read _n _v _r ; do
	if [ ${_name} = ${_n} ] ; then
	    if [ ${_version} != ${_v} ] ; then
		return 1
	    else
		return 0
	    fi
	fi
    done <<EOF223
${installed_data}
EOF223
    return 2
}

alldata_flag=""
alldata_LocalRepo_flag=""
verbose_flag=""

while getopts "Aav" _opt ; do
    case ${_opt} in
	A)
	    alldata_flag=1
	    alldata_LocalRepo_flag=1
	    ;;
	a)
	    alldata_flag=1
	    ;;
	v)
	    verbose_flag=1
	    ;;
	\?)
	    exit 2
	    ;;
	*)
	    echo "option handling failed" >&2
	    exit 2
	;;
    esac
done

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

get_remote_repo_versions ${LOCAL_REPO}
get_remote_repo_versions ${FREEBSD_REPO}
get_local_index_versions

while read lfqp llabel ldescr ; do
    _installed_name=${lfqp%-*}
    _installed_version=${lfqp##*-}
    _title_printed=""
    if [ -n "${verbose_flag}" ] ; then
	echo "${lfqp}    (${repository})"
	_title_printed=yes
    fi
    if ! assert_local_version ${_installed_name} ${_installed_version} ; then
	echo "Assertion failed: $lfqp ${_installed_name} ${_installed_version} ${llabel}" >&2
	exit 1
    fi
    get_remote_repo_data ${LOCAL_REPO} ${_installed_name}
    get_remote_repo_data ${FREEBSD_REPO} ${_installed_name}
    get_repo_for_package ${_installed_name}
    if [ \( -n "${alldata_flag}" \) -o \( ${llabel} != '?' -a ${llabel} != '=' \) -o \( ${remote_FreeBSD_label} != '?' -a ${remote_FreeBSD_label} != '=' \) -o \( ${remote_LocalRepo_label} != '?' -a ${remote_LocalRepo_label} != '=' \) ] ; then
	if [ -z "${_title_printed}" ] ; then
	    echo "${lfqp}    (${repository})"
	fi
	echo "   INDEX: ${llabel} ${ldescr}"
	echo "   FreeBSD: ${remote_FreeBSD_label} ${remote_FreeBSD_descr}"
	if [ \( -n "${alldata_LocalRepo_flag}" \) -o \( ${remote_LocalRepo_label} != '?' \) ] ; then
	    echo "   LocalRepo: ${remote_LocalRepo_label} ${remote_LocalRepo_descr}"
	fi
    fi
done <<EOF856661111299999
${local_index_versions}
EOF856661111299999