diff bin/check-ports @ 34:36a10ff20355

Implemented a -s (short) flag that filters output if the repo is FreeBSD and only the local portstree INDEX has a newer version
author Franz Glasner <hg@dom66.de>
date Sat, 18 Nov 2017 13:18:10 +0100
parents 1537aff795c5
children ace5d471abbd
line wrap: on
line diff
--- a/bin/check-ports	Sat Nov 18 12:30:52 2017 +0100
+++ b/bin/check-ports	Sat Nov 18 13:18:10 2017 +0100
@@ -116,9 +116,10 @@
 alldata_flag=""
 alldata_LocalBSDPorts_flag=""
 alldata_LocalRepo_flag=""
+short_flag=""
 verbose_flag=""
 
-while getopts "Aav" _opt ; do
+while getopts "Aasv" _opt ; do
     case ${_opt} in
         A)
             # print for every package the status of all repositories
@@ -130,6 +131,11 @@
             # print the data of all repos that have the package
             alldata_flag=1
             ;;
+        s)
+            # "short" output: if installed from FreeBSD repo: don't
+            # report if only the index is newer
+            short_flag=1
+            ;;
         v)
             # print all titles and repo of every installed always
             verbose_flag=1
@@ -144,6 +150,11 @@
     esac
 done
 
+if [ -n "${short_flag}" -a -n "${alldata_flag}" ]; then
+    echo "the -s option cannot be combined with -A or -a" >&2
+    exit 2
+fi
+
 installed_packages=$(pkg query '%n')
 installed_data="$(pkg query '%n %v %R' $installed_packages)"
 
@@ -168,14 +179,28 @@
     get_remote_repo_data ${LOCALBSDPORTS_REPO} ${_installed_name}
     get_remote_repo_data ${FREEBSD_REPO} ${_installed_name}
     if [ \( -n "${alldata_flag}" \) -o \( "${llabel}" != '?' -a "${llabel}" != '=' \) -o \( "${remote_FreeBSD_label}" != '?' -a "${remote_FreeBSD_label}" != '=' \) -o \( "${remote_LocalBSDPorts_label}" != '?' -a "${remote_LocalBSDPorts_label}" != '=' \) -o \( "${remote_LocalRepo_label}" != '?' -a "${remote_LocalRepo_label}" != '=' \) ] ; then
-        print_title "${lfqp}" "${repository}"
-        echo "   INDEX: ${llabel} ${ldescr}"
-        echo "   FreeBSD: ${remote_FreeBSD_label} ${remote_FreeBSD_descr}"
-        if [ \( -n "${alldata_LocalBSDPorts_flag}" \) -o \( "${remote_LocalBSDPorts_label}" != '?' \) ] ; then
-            echo "   LocalBSDPorts: ${remote_LocalBSDPorts_label} ${remote_LocalBSDPorts_descr}"
+        _print_detail=""
+        if [ -n "${short_flag}" ]; then
+            #
+            # NOTE: -s and -A/-a are incompatible: so "alldata_XXX" needs not
+            #       to be checked!
+            #
+            if [ "${repository}" != "${FREEBSD_REPO}" -o "${llabel}" != '<' -o "${remote_FreeBSD_label}" != '=' -o "${remote_LocalRepo_label}" != '?' -o "${remote_LocalBSDPorts_label}" != '?' ]; then
+                _print_detail=1
+            fi
+        else
+            _print_detail=1
         fi
-        if [ \( -n "${alldata_LocalRepo_flag}" \) -o \( "${remote_LocalRepo_label}" != '?' \) ] ; then
-            echo "   LocalRepo: ${remote_LocalRepo_label} ${remote_LocalRepo_descr}"
+        if [ -n "${_print_detail}" ]; then
+            print_title "${lfqp}" "${repository}"
+            echo "   INDEX: ${llabel} ${ldescr}"
+            echo "   FreeBSD: ${remote_FreeBSD_label} ${remote_FreeBSD_descr}"
+            if [ \( -n "${alldata_LocalBSDPorts_flag}" \) -o \( "${remote_LocalBSDPorts_label}" != '?' \) ] ; then
+                echo "   LocalBSDPorts: ${remote_LocalBSDPorts_label} ${remote_LocalBSDPorts_descr}"
+            fi
+            if [ \( -n "${alldata_LocalRepo_flag}" \) -o \( "${remote_LocalRepo_label}" != '?' \) ] ; then
+                echo "   LocalRepo: ${remote_LocalRepo_label} ${remote_LocalRepo_descr}"
+            fi
         fi
     fi
 done <<EOF856661111299999