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