]> git.pld-linux.org Git - packages/rpm-build-tools.git/commitdiff
update-geoip.sh: rewrite for dynamic urls; use smarter fetch (curl with timestamp...
authorElan Ruusamäe <glen@delfi.ee>
Tue, 4 Mar 2014 21:36:12 +0000 (23:36 +0200)
committerElan Ruusamäe <glen@delfi.ee>
Tue, 4 Mar 2014 21:40:09 +0000 (23:40 +0200)
update-geoip.sh

index 7140fb7b9878692b9adf5e06f07a4f76ddd20737..84b33d223ed5515b12e284707f3c17e7c9341694 100755 (executable)
@@ -1,4 +1,10 @@
 #!/bin/sh
+# Update GeoIP packages to new version provided by MaxMind.
+#
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+# 2012-07-04 Created initial version
+# 2014-03-04 Rewritten to be smarter when checking for updates avoiding full download if no changes.
+
 set -e
 
 update=false
@@ -19,53 +25,109 @@ while [ $# -gt 0 ]; do
        esac
 done
 
-dir=$(dirname "$0");
-cd "$dir"
+# get file DATE in GMT timezone
+filedate() {
+       local file="$1"
+       TZ=GMT stat -c '%y' "$file" | awk '{print $1}'
+}
 
-pkgs='GeoIP-db-City GeoIP-db-Country GeoIP-db-IPASNum xtables-geoip'
-for pkg in ${*:-$pkgs}; do
-       $status && continue
+# get package, no sources
+get_package() {
+       local pkg=$1 out
+       out=$(builder -g -ns $pkg 2>&1) || echo "$out"
+}
 
-       out=$(./builder -g -ns $pkg 2>&1) || echo "$out"
-       cd $pkg
+update_urls() {
+       local specfile=$1 t fn z
+       # update urls
+       t=$(mktemp)
+       builder -su $specfile > $t 2>/dev/null
+       while read url; do
+               fn=${url##*/}
+               test -e "$fn" && z= || unset z
+               curl ${z+-z "$fn"} -o "$fn" "$url" -R -s
+       done < $t
+       rm -f $t
+}
 
-       $update && rm -vf *.gz *.zip *.xz
+# set version to $version in $specfile and build the package
+update_version() {
+       local specfile="$1" version="$2" out
 
-       specfile=*.spec
+       # update version
+       sed -i -e "
+               s/^\(Version:[ \t]\+\)[.0-9]\+\$/\1$version/
+               s/^\(Release:[ \t]\+\)[.0-9]\+\$/\11/
+       " $specfile
+
+       # update md5
+       out=$(md5 -p1 $specfile 2>&1) || echo "$out"
 
-       out=$(../md5 -p1 $specfile 2>&1) || echo "$out"
+       # build it
+       out=$(builder -bb $specfile 2>&1) || echo "$out"
+}
 
-       version=$(awk '/^Version:[      ]+/{print $NF}' $specfile)
+# get version from package files
+# set $version variable
+version_from_files() {
+       local pkg=$1 dt4 dt6
        case "$pkg" in
        xtables-geoip)
-               dt4=$(TZ=GMT stat -c '%y' *.zip | awk '{print $1}' | tr -d -)
-               dt6=$(TZ=GMT stat -c '%y' *.gz | awk '{print $1}' | tr -d -)
+               dt4=$(filedate *.zip | tr -d -)
+               dt6=$(filedate *.gz | tr -d -)
                if [ "$dt4" -gt "$dt6" ]; then
-                       dt=$dt4
+                       version=$dt4
                else
-                       dt=$dt6
+                       version=$dt6
                fi
                ;;
        GeoIP-db-City)
-               dt=$(TZ=GMT stat -c %y *.xz | awk '{print $1}' | tr - .)
+               dt4=$(filedate GeoLiteCity-*.dat.xz | tr - .)
+               dt6=$(filedate GeoLiteCityv6-*.dat.gz | tr - .)
+               if [ "$(echo $dt4 | tr -d .)" -gt "$(echo $dt6 | tr -d .)" ]; then
+                       version=$dt4
+               else
+                       version=$dt6
+               fi
+               ;;
+       GeoIP-db-Country)
+               dt4=$(filedate GeoIP-*.dat.gz | tr - .)
+               dt6=$(filedate GeoIPv6-*.dat.gz | tr - .)
+               if [ "$(echo $dt4 | tr -d .)" -gt "$(echo $dt6 | tr -d .)" ]; then
+                       version=$dt4
+               else
+                       version=$dt6
+               fi
                ;;
        *)
-               dt=$(TZ=GMT stat -c %y *.gz | awk '{print $1}' | tr - .)
+               version=$(filedate *.gz | tr - .)
                ;;
        esac
+}
 
-       if [ "$version" != "$dt" ]; then
-               version=$dt
-               sed -i -e "
-                       s/^\(Version:[ \t]\+\)[.0-9]\+\$/\1$version/
-                       s/^\(Release:[ \t]\+\)[.0-9]\+\$/\11/
-               " $specfile
-       fi
+dir=$(dirname "$0")
+APPDIR=$(d=$0; [ -L "$d" ] && d=$(readlink -f "$d"); dirname "$d")
+PATH=$APPDIR:$PATH
+cd "$dir"
 
-       out=$(../builder -bb *.spec 2>&1) || echo "$out"
+pkgs='GeoIP-db-City GeoIP-db-Country GeoIP-db-IPASNum xtables-geoip'
+for pkg in ${*:-$pkgs}; do
+       $status && continue
+
+       get_package $pkg
+       cd $pkg
+       specfile=*.spec
+
+       update_urls $specfile
+       version_from_files $pkg
+       oldvers=$(awk '/^Version:[      ]+/{print $NF}' $specfile)
+       if [ "$oldvers" != "$version" ]; then
+               update_version $specfile $version
+       fi
        cd ..
 done
 
+# report each package git status
 for pkg in ${*:-$pkgs}; do
        cd $pkg
        git status --porcelain
This page took 0.067012 seconds and 4 git commands to generate.