--- a/bin/update Mon Mar 19 12:18:52 2012 +0200
+++ b/bin/update Mon Mar 19 12:47:26 2012 +0200
@@ -5,22 +5,31 @@
ROOT=$(pwd)
-BIN=bin
+# resolve $0
+self=$0
+while [ -L $self ]; do
+ self=$(dirname $self)/$(readlink $self)
+done
+
+# bin dir
+BIN=$(dirname $self)
PROCESS_ZONE=$BIN/process-zone
EXPAND_ZONE=$BIN/expand-zone
UPDATE_SERIAL=$BIN/update-serial
+# data files
DATA=settings
ZONES=zones
SERIALS=$DATA
+# data args
PROCESS_ARGS='--input-charset latin-1'
FORWARD_MX=mail
REVERSE_ZONE=194.197.235
REVERSE_DOMAIN=paivola.fi
-
+# external progs
NAMED_CHECKZONE=/usr/sbin/named-checkzone
HG=hg
RNDC=/usr/sbin/rndc
@@ -51,6 +60,7 @@
General:
-h display this help text
+ -d DIR datadir
Logging:
-q quiet
@@ -67,20 +77,22 @@
Commit
-C do not commit changes
-c commit changes
- -m commit message
+ -m MSG commit message
END
}
function parse_args {
OPTIND=1
- while getopts 'hqvDVpFSnCcm:' opt "$@"; do
+ while getopts 'hd:qvDVpFSnCcm:' opt "$@"; do
case $opt in
h)
help_args $0
exit 0
;;
+ d) ROOT="$OPTARG" ;;
+
q) LOG= ;;
v) LOG_INFO=y ;;
D)
@@ -201,10 +213,47 @@
echo "$ROOT/$1"
}
-## test
-[ -d $DATA ] || die "Missing settings: $DATA"
-[ -d $SERIALS ] || die "Missing serials: $SERIALS"
-[ -d $ZONES ] || die "Missing zones: $ZONES"
+## hg
+function hg {
+ local repo=$r
+
+ $HG -R $ROOT/$repo "$@"
+}
+
+function hg_modified {
+ local repo=$1
+
+ hg $repo id | grep -q '+'
+}
+
+function hg_user {
+ if [ ${SUDO_USER:-} ]; then
+ echo '-u' "$SUDO_USER"
+
+ elif [ $HOME ] && [ -e $HOME/.hgrc ]; then
+ log_debug "using .hgrc user"
+ echo ''
+
+ else
+ echo '-u' "$USER"
+ fi
+}
+
+function hg_diff {
+ local repo=$1
+
+ hg $repo diff
+}
+
+function hg_commit {
+ local repo=$1
+ local msg=$2
+ local user_opt=$(hg_user)
+
+ log_debug "commit: $user_opt: $msg"
+ cmd hg $repo commit $user_opt -m "$msg"
+}
+
## functions
function check_update {
@@ -228,7 +277,7 @@
# check
- if [ $dst -ot $dep ]; then
+ if [ $ROOT/$dst -ot $ROOT/$dep ]; then
log_debug " changed: $dep"
update=y
fi
@@ -245,26 +294,26 @@
local tmp=$dst.new
log_debug "update: $dst"
- cmd "$@" > $tmp
+ cmd "$@" > $ROOT/$tmp
# compare
- if [ -e $dst ] && [ $UPDATE_DIFF ]; then
+ if [ -e $ROOT/$dst ] && [ $UPDATE_DIFF ]; then
log_debug " changes:"
# terse
- indent " " diff --unified=1 $dst $tmp
+ indent " " diff --unified=1 $ROOT/$dst $ROOT/$tmp
fi
if [ $UPDATE_NOOP ]; then
# cleanup
log_debug " no-op"
- cmd rm $tmp
+ cmd rm $ROOT/$tmp
else
# commit
log_debug " update"
- cmd mv $tmp $dst
+ cmd mv $ROOT/$tmp $ROOT/$dst
fi
}
@@ -297,13 +346,13 @@
local name=$1; shift
local file=$SERIALS/$name.serial
- local old=$(test -e $file && cat $file || echo '')
+ local old=$(test -e $ROOT/$file && cat $ROOT/$file || echo '')
log_info "Updating $file..."
- cmd $UPDATE_SERIAL $* $file
+ cmd $UPDATE_SERIAL $* $ROOT/$file
- local new=$(cat $file)
+ local new=$(cat $ROOT/$file)
log_debug " $old -> $new"
}
@@ -320,7 +369,7 @@
if check_update $dst $src; then
log_info "Copying zones/$name..."
- do_update $dst cat $src
+ do_update $dst cat $ROOT/$src
else
log_info "Copying zones/$name: not changed"
fi
@@ -339,8 +388,8 @@
log_info "Generating $out..."
do_update $out \
- $EXPAND_ZONE $DATA/$zone.zone \
- --serial $SERIALS/$zone.serial \
+ $EXPAND_ZONE $ROOT/$DATA/$zone.zone \
+ --serial $ROOT/$SERIALS/$zone.serial \
--expand zones=$(abspath $ZONES)
else
log_info "Generating $out: not changed"
@@ -361,8 +410,8 @@
log_info "Generating $out..."
do_update $out \
- $EXPAND_ZONE $DATA/$zone.zone \
- --serial $SERIALS/$zone.serial \
+ $EXPAND_ZONE $ROOT/$DATA/$zone.zone \
+ --serial $ROOT/$SERIALS/$zone.serial \
--expand zones=$(abspath $ZONES) \
--expand view=$view
else
@@ -378,7 +427,7 @@
if check_update $dst $src; then
log_info "Generating $dst..."
- do_update $dst $PROCESS_ZONE $PROCESS_ARGS $src "$@"
+ do_update $dst $PROCESS_ZONE $PROCESS_ARGS $ROOT/$src "$@"
else
log_info "Generating $dst: not changed"
fi
@@ -394,7 +443,7 @@
log_info "Generating $dst..."
# via stdin
- $HG -R $DATA annotate -qd $src | \
+ $hg $DATA annotate -qd $ROOT/$src | \
do_update $dst $PROCESS_ZONE $PROCESS_ARGS --input-line-date --meta-zone "$@"
else
log_info "Generating $dst: not changed"
@@ -404,7 +453,7 @@
function check_hosts {
local hosts=$1; shift 1
- local cmd=($PROCESS_ZONE $PROCESS_ARGS $hosts --check-hosts "$@")
+ local cmd=($PROCESS_ZONE $PROCESS_ARGS $ROOT/$hosts --check-hosts "$@")
if "${cmd[@]}" -q; then
log_info "Check $hosts: OK"
@@ -421,11 +470,11 @@
local name=$1
local file=$2
- local cmd=($NAMED_CHECKZONE $name $file)
+ local cmd=($NAMED_CHECKZONE $name $ROOT/$file)
# test
# XXX: checkzone is very specific about the order of arguments, -q must be first
- if $NAMED_CHECKZONE -q $name $file; then
+ if $NAMED_CHECKZONE -q $name $ROOT/$file; then
log_info "Check $file($name): OK"
else
log_error " Check $file($name): Failed:"
@@ -442,51 +491,17 @@
}
# commit data changes
-function hg_modified {
- local repo=$1
-
- $HG -R $repo id | grep -q '+'
-}
-
-function hg_user {
- if [ ${SUDO_USER:-} ]; then
- echo '-u' "$SUDO_USER"
-
- elif [ $HOME ] && [ -e $HOME/.hgrc ]; then
- log_debug "using .hgrc user"
- echo ''
-
- else
- echo '-u' "$USER"
- fi
-}
-
-function hg_diff {
- local repo=$1
+function commit_data {
+ local repo=$DATA
- $HG -R $repo diff
-}
+ if hg_modified $repo; then
+ log_info "Commit changes in $repo:"
-function hg_commit {
- local repo=$1
- local msg=$2
- local user_opt=$(hg_user)
-
- log_debug "commit: $user_opt: $msg"
- cmd $HG -R $repo commit $user_opt -m "$msg"
-}
+ indent " " hg_diff $repo
-function commit_data {
- local data=$DATA
-
- if hg_modified $data; then
- log_info "Commit changes in $data:"
-
- indent " " hg_diff $data
-
- hg_commit $data "$COMMIT_MSG"
+ hg_commit $repo "$COMMIT_MSG"
else
- log_info "Commit changes in $data: no changes"
+ log_info "Commit changes in $repo: no changes"
fi
}
@@ -496,6 +511,11 @@
parse_args "$@"
+ ## test env
+ [ -d $ROOT/$DATA ] || die "Missing data: $ROOT/$DATA"
+ [ -d $ROOT/$SERIALS ] || die "Missing serials: $ROOT/$SERIALS"
+ [ -d $ROOT/$ZONES ] || die "Missing zones: $ROOT/$ZONES"
+
## hosts
# test
log "Testing hosts..."