changeset 64:ffd5f575edd5

FIX: Work around the bug in "pkg rquery -i" not asking the port's INDEX file. Parse the index file directly.
author Franz Glasner <hg@dom66.de>
date Thu, 21 Mar 2019 15:48:58 +0100
parents 0ae7697702b3
children 29ede570c816
files bin/check-ports
diffstat 1 files changed, 39 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/bin/check-ports	Thu Mar 21 12:34:47 2019 +0100
+++ b/bin/check-ports	Thu Mar 21 15:48:58 2019 +0100
@@ -43,6 +43,14 @@
 #
 : ${PORTS_DIRECT_INSTALLED_REPO:=unknown-repository}
 
+#
+# For the workaround of the bug in pkg rquery -I
+#
+: ${PORTSDIR:=/usr/ports}
+: ${INDEXDIR:=${PORTSDIR}}
+: ${INDEXFILE:=INDEX-11}
+
+
 get_remote_repo_versions() {
     local _repo _data _rv
 
@@ -96,14 +104,39 @@
 }
 
 get_immediate_index_version() {
-    local _name _val _rv
+    local _package _line _fqpn _n _lines
+
+    _package=$1
 
-    _name=$1
+#    _val=$(pkg rquery -I "${_package}" | cut -f 1 -d '|')
+#    _rv=$?
+#    immediate_index_version=${_val##*-}
+#    return ${_rv}
 
-    _val=$(pkg rquery -I "${_name}" | cut -f 1 -d '|')
-    _rv=$?
-    immediate_index_version=${_val##*-}
-    return ${_rv}
+    if [ -r "${INDEXDIR}/${INDEXFILE}" ] ; then
+        #
+        # Note: Direct piping does not set immediate_index_version at return correctly
+        #       "_line" is set correctly and parsing works, but the return 0 seems to kill
+        #       some of the previous effects.
+        #
+        # "grep" does a fast pre-selection, reading, parsing and comparing is done for
+        # exact matching.
+        #
+        _lines=$(egrep '^'"${_package}" "${INDEXDIR}/${INDEXFILE}")
+        while read _line ; do
+            _fqpn="${_line%%|*}"
+            _n=${_fqpn%-*}
+	    if [ "${_package}" = "${_n}" ] ; then
+                immediate_index_version="${_fqpn##*-}"
+                return 0
+            fi
+        done <<EOF1334TGH1
+${_lines}
+EOF1334TGH1
+    fi
+
+    immediate_index_version=""
+    return 1
 }
 
 get_immediate_remote_repo_version() {