diff --git a/cdist/conf/type/__package_update_index/explorer/currage b/cdist/conf/type/__package_update_index/explorer/currage new file mode 100644 index 00000000..bd53a789 --- /dev/null +++ b/cdist/conf/type/__package_update_index/explorer/currage @@ -0,0 +1,15 @@ +#!/bin/sh -e + +os="$("$__explorer/os")" + +case "$os" in + debian|ubuntu|devuan) + if [ -f "/var/cache/apt/pkgcache.bin" ]; then + echo $(($(date +"%s")-$(stat --format '%Y' /var/cache/apt/pkgcache.bin))) + else + echo 0 + fi + ;; + *) ## not supported $os + ;; +esac diff --git a/cdist/conf/type/__package_update_index/gencode-remote b/cdist/conf/type/__package_update_index/gencode-remote index 20beed5b..d84e7953 100755 --- a/cdist/conf/type/__package_update_index/gencode-remote +++ b/cdist/conf/type/__package_update_index/gencode-remote @@ -22,6 +22,10 @@ # type="$__object/parameter/type" +if [ -f "$__object/parameter/maxage" ]; then + maxage="$(cat "$__object/parameter/maxage")" + currage="$(cat "$__object/explorer/currage")" +fi if [ -f "$type" ]; then type="$(cat "$type")" @@ -39,9 +43,23 @@ else esac fi +if [ -n "$maxage" ] && [ "$type" != "apt" ]; then + echo "ERROR: \"--maxage\" only supported for \"apt\" pkg-manager." >&2 + exit 1 +fi + case "$type" in yum) ;; - apt) echo "apt-get --quiet update" ;; + apt) if [ -n "$maxage" ]; then + ## check if we need to update: + if [ $currage -ge $maxage ]; then + echo "apt-get --quiet update" + fi + else + echo "apt-get --quiet update" + fi + echo "apt-cache updated (age was: $currage)" >> "$__messages_out" + ;; pacman) echo "pacman --noprogressbar --sync --refresh" ;; *) echo "Don't know how to manage packages on: $os" >&2 diff --git a/cdist/conf/type/__package_update_index/man.rst b/cdist/conf/type/__package_update_index/man.rst index 454aa05b..ac954faa 100644 --- a/cdist/conf/type/__package_update_index/man.rst +++ b/cdist/conf/type/__package_update_index/man.rst @@ -27,6 +27,9 @@ type * yum for Red Hat * pacman for Arch Linux +maxage + Available for package manager apt, max time in seconds since last update. + Repo update is skipped if maxage is not reached yet. EXAMPLES -------- @@ -39,10 +42,15 @@ EXAMPLES # Force use of a specific package manager __package_update_index --type apt + # Only update every hour: + __package_update_index --maxage 3600 --type apt + # same as avove (on apt-type systems): + __package_update_index --maxage 3600 AUTHORS ------- -Ricardo Catalinas Jiménez +| Ricardo Catalinas Jiménez +| Thomas Eckert COPYING diff --git a/cdist/conf/type/__package_update_index/parameter/optional b/cdist/conf/type/__package_update_index/parameter/optional index aa80e646..7a0be716 100644 --- a/cdist/conf/type/__package_update_index/parameter/optional +++ b/cdist/conf/type/__package_update_index/parameter/optional @@ -1 +1,2 @@ type +maxage