]> git.ipfire.org Git - ipfire-3.x.git/commitdiff
naoki: Add some caching functions to speed up meta data fetching.
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 14 Dec 2009 18:31:14 +0000 (19:31 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 14 Dec 2009 18:31:14 +0000 (19:31 +0100)
tools/common-constants
tools/common-package-functions

index 9b8e98658a3e0f5ed6897a6dfca960bfcae4178d..871a564d20fd11ad8467b346c4a2595dbcba5dd7 100644 (file)
@@ -24,3 +24,6 @@ DIR_PACKAGES_TOOLCHAIN=${DIR_PACKAGES}_toolchain
 DIR_PATCHES=${DIR_CACHE}/patches
 DIR_PKGS=${BASEDIR}/pkgs
 DIR_TARBALLS=${DIR_CACHE}/tarballs
+
+PACKAGES_CACHE=${DIR_CACHE}/.naoki.packages
+[ -e "${PACKAGES_CACHE}" ] || touch ${PACKAGES_CACHE}
index 5bc707bfc9d9c03945d5fe31c03d5fc41c82cb49..bc658e50e4d0abafcde386658efb3e8be8135139 100644 (file)
@@ -154,16 +154,52 @@ function package_info() {
        fi
 }
 
+function package_cache_update() {
+       local p=$(find_package ${1})
+
+       fingerprint=$(__package_cache_get "${p}" "FINGERPRINT")
+       if [ -n "${fingerprint}" ]; then
+               if [ "$(package_fingerprint ${p})" = "${fingerprint}" ]; then
+                       return
+               fi
+       fi
+
+       log DEBUG "Cache information of ${p} needs update."
+
+       local line object data
+
+       cat ${PACKAGES_CACHE} | grep -v "^${1}.${2}" > ${PACKAGES_CACHE}
+
+       package_info ${p} | \
+               while read line; do
+                       object=${line%%=*}
+                       data=${line##*=}
+
+                       __package_cache_set "${p}" "${object}" "$(tr -d '"' <<<${data})"
+               done
+       __package_cache_set "${p}" "FINGERPRINT" "$(package_fingerprint ${p})"
+}
+
+function __package_cache_set() {
+       echo -e "${1}\t${2}\t${3}" >> ${PACKAGES_CACHE}
+}
+
+function __package_cache_get() {
+       local output=$(grep -e "^${1}.${2}" ${PACKAGES_CACHE})
+       echo "${output:$(( ${#1} + ${#2} + 2))}"
+}
+
 function package_get() {
-       local package=$(find_package ${1})
-       local item=${2}
+       local p=$(find_package ${1})
+       local object=${2}
+
+       # Check if cache data is up2date
+       package_cache_update ${p}
 
-       package_info ${package} | \
-               grep "^${item}" | \
-               awk -F= '{ print $NF }' | \
-               tr -d '"'
+       __package_cache_get "${p}" "${object}"
 }
 
+
 function package_name() {
        package_get ${1} PKG_NAME
 }
@@ -452,3 +488,9 @@ function package_download() {
                fi
        fi
 }
+
+function package_fingerprint() {
+       local p=$(find_package ${1})
+       # time of modification in seconds since Epoch
+       stat --printf="%Y" ${DIR_PKGS}/${p}/${p##*/}.nm
+}