]> git.pld-linux.org Git - packages/rpm-build-tools.git/blame - update-geoip.sh
- man.szczecin.pl unresponsive
[packages/rpm-build-tools.git] / update-geoip.sh
CommitLineData
49cd827a 1#!/bin/sh
b10dfc6f
ER
2# Update GeoIP packages to new version provided by MaxMind.
3#
4# Author: Elan Ruusamäe <glen@pld-linux.org>
5# 2012-07-04 Created initial version
6# 2014-03-04 Rewritten to be smarter when checking for updates avoiding full download if no changes.
38fa7194 7# 2014-06-06 Fix finding new versions if multiple previous archives were present
b10dfc6f 8
49cd827a 9set -e
3fb11b3b
ER
10
11update=false
12status=false
13while [ $# -gt 0 ]; do
14 case "$1" in
c40b0b82 15 update|-u|-update|--update)
3fb11b3b
ER
16 update=true
17 shift
18 ;;
c40b0b82 19 status|-s|-status|--status)
3fb11b3b
ER
20 status=true
21 shift
22 ;;
23 *)
24 break
25 ;;
26 esac
27done
28
b10dfc6f
ER
29# get file DATE in GMT timezone
30filedate() {
31 local file="$1"
32 TZ=GMT stat -c '%y' "$file" | awk '{print $1}'
33}
431811ea 34
b10dfc6f
ER
35# get package, no sources
36get_package() {
37 local pkg=$1 out
38 out=$(builder -g -ns $pkg 2>&1) || echo "$out"
39}
3fb11b3b 40
38fa7194
ER
41get_urls() {
42 local specfile=$1 t url
43
b10dfc6f 44 t=$(mktemp)
38fa7194
ER
45 builder -su $specfile 2>/dev/null > $t
46
b10dfc6f 47 while read url; do
38fa7194
ER
48 # skip non-archives
49 case "$url" in
50 *.zip|*.gz|*.xz)
51 echo "$url"
52 ;;
53 esac
54 done < $t
55 rm -f $t
56}
57
58update_urls() {
59 local specfile=$1 url fn z
60
61 for url in "$@"; do
68062e54 62 # take output filename (anything after last slash)
b10dfc6f 63 fn=${url##*/}
68062e54
ER
64 # remove querystring for mtime match to work
65 url=${url%\?*}
b10dfc6f
ER
66 test -e "$fn" && z= || unset z
67 curl ${z+-z "$fn"} -o "$fn" "$url" -R -s
38fa7194 68 done
b10dfc6f 69}
3fb11b3b 70
b10dfc6f
ER
71# set version to $version in $specfile and build the package
72update_version() {
73 local specfile="$1" version="$2" out
3fb11b3b 74
b10dfc6f
ER
75 # update version
76 sed -i -e "
77 s/^\(Version:[ \t]\+\)[.0-9]\+\$/\1$version/
78 s/^\(Release:[ \t]\+\)[.0-9]\+\$/\11/
79 " $specfile
80
81 # update md5
82 out=$(md5 -p1 $specfile 2>&1) || echo "$out"
3fb11b3b 83
b10dfc6f
ER
84 # build it
85 out=$(builder -bb $specfile 2>&1) || echo "$out"
86}
3fb11b3b 87
b10dfc6f
ER
88# get version from package files
89# set $version variable
90version_from_files() {
38fa7194
ER
91 local pkg=$1 url fn dt d
92 shift
93
94 for url in "$@"; do
95 # take output filename (anything after last slash)
96 fn=${url##*/}
97 # skip inexistent files
98 test -e "$fn" || continue
99
100 d=$(filedate "$fn")
101 if [ "$(echo $d | tr -d -)" -gt "$(echo $dt | tr -d -)" ]; then
102 dt=$d
103 fi
104 done
105
4a8bd840
ER
106 case "$pkg" in
107 xtables-geoip)
38fa7194 108 version=$(echo "$dt" | tr -d -)
4a8bd840
ER
109 ;;
110 *)
38fa7194 111 version=$(echo "$dt" | tr - .)
4a8bd840
ER
112 ;;
113 esac
b10dfc6f 114}
4a8bd840 115
b10dfc6f
ER
116dir=$(dirname "$0")
117APPDIR=$(d=$0; [ -L "$d" ] && d=$(readlink -f "$d"); dirname "$d")
118PATH=$APPDIR:$PATH
119cd "$dir"
49cd827a 120
b10dfc6f
ER
121pkgs='GeoIP-db-City GeoIP-db-Country GeoIP-db-IPASNum xtables-geoip'
122for pkg in ${*:-$pkgs}; do
b124f896 123 pkg=${pkg%.spec}
b10dfc6f
ER
124 $status && continue
125
126 get_package $pkg
127 cd $pkg
128 specfile=*.spec
129
38fa7194
ER
130 urls=$(get_urls $specfile)
131 update_urls $urls
132 version_from_files $pkg $urls
b10dfc6f
ER
133 oldvers=$(awk '/^Version:[ ]+/{print $NF}' $specfile)
134 if [ "$oldvers" != "$version" ]; then
135 update_version $specfile $version
136 fi
49cd827a
ER
137 cd ..
138done
3fb11b3b 139
b10dfc6f 140# report each package git status
3fb11b3b 141for pkg in ${*:-$pkgs}; do
b124f896 142 pkg=${pkg%.spec}
3fb11b3b 143 cd $pkg
37fd5f8b 144 git status --porcelain
3fb11b3b
ER
145 cd ..
146done
This page took 0.072937 seconds and 4 git commands to generate.