--- a/bin/update Mon Mar 19 13:11:30 2012 +0200
+++ b/bin/update Mon Mar 19 13:39:53 2012 +0200
@@ -8,7 +8,13 @@
# resolve $0
self=$0
while [ -L $self ]; do
- self=$(dirname $self)/$(readlink $self)
+ tgt=$(readlink $self)
+
+ if [ "${tgt:0:1}" == "/" ]; then
+ self=$tgt
+ else
+ self=$(dirname $self)/$tgt
+ fi
done
# bin dir
@@ -21,6 +27,7 @@
DATA=settings
ZONES=zones
SERIALS=$DATA
+REPO=$DATA
# data args
PROCESS_ARGS='--input-charset latin-1'
@@ -31,12 +38,13 @@
# external progs
NAMED_CHECKZONE=/usr/sbin/named-checkzone
-HG=hg
+HG=/usr/bin/hg
RNDC=/usr/sbin/rndc
## options
IS_TTY=
+LOG_WARN=y
LOG=y
LOG_INFO=
LOG_DEBUG=
@@ -93,7 +101,11 @@
d) ROOT="$OPTARG" ;;
- q) LOG= ;;
+ q)
+ LOG=
+ LOG_WARN=
+ ;;
+
v) LOG_INFO=y ;;
D)
LOG_DEBUG=y
@@ -145,6 +157,10 @@
log_color 31 "$*"
}
+function log_warn {
+ [ $LOG_WARN ] && log_color 33 "$*" || true
+}
+
function log {
[ $LOG ] && log_msg "$*" || true
}
@@ -207,6 +223,8 @@
log_cmd "$@"
"$@" | sed "s/^/$indent/"
+
+ return ${PIPESTATUS[0]}
}
function abspath () {
@@ -215,9 +233,9 @@
## hg
function hg {
- local repo=$r
+ local repo=$1; shift
- $HG -R $ROOT/$repo "$@"
+ cmd $HG -R $ROOT/$repo "$@"
}
function hg_modified {
@@ -251,7 +269,7 @@
local user_opt=$(hg_user)
log_debug "commit: $user_opt: $msg"
- cmd hg $repo commit $user_opt -m "$msg"
+ hg $repo commit $user_opt -m "$msg"
}
@@ -425,8 +443,17 @@
local base=$3
local lnk=$ZONES/$view/$zone.zone
- local tgt=$ZONES/$view/$base.zone
-
+ local tgt
+
+ if [ $zone == $base ]; then
+ # out of view
+ log_debug "$view/$zone: base $base from root"
+ tgt=$ZONES/$base.zone
+ else
+ log_debug "$view/$zone: base $base from view"
+ tgt=$ZONES/$view/$base.zone
+ fi
+
if [ -e $ROOT/$lnk ] && [ $(readlink $ROOT/$lnk) == $ROOT/$tgt ]; then
log_info "Linking $lnk -> $tgt: not changed"
@@ -505,12 +532,12 @@
# deploy new zone data to bind
function deploy_zones {
- cmd $RNDC reload
+ indent " rndc: " $RNDC reload
}
# commit data changes
function commit_data {
- local repo=$DATA
+ local repo=$1
if hg_modified $repo; then
log_info "Commit changes in $repo:"
@@ -523,16 +550,31 @@
fi
}
+function ensure_dir {
+ local dir=$1
+
+ if [ ! -d $ROOT/$dir ]; then
+ log_warn "Creating output dir: $dir"
+ cmd mkdir $ROOT/$dir
+ fi
+}
+
function main {
# test tty
[ -t 1 ] && IS_TTY=y
+
+ local views=(internal external)
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"
+ ensure_dir $ZONES
+
+ # views
+ for view in "${views[@]}"; do
+ ensure_dir $ZONES/$view
+ done
## hosts
# test
@@ -577,7 +619,6 @@
check_zone 235.197.194.in-addr.arpa $ZONES/paivola-reverse.zone
# extra zones...
- local views=(internal external)
local base_zone=paivola
local link_zones=(paivola.fi paivola.net paivola.org paivola.info paivola.mobi xn--pivl-load8j.fi)
@@ -587,6 +628,9 @@
link_zone_view $zone $view $base_zone
check_zone $zone $ZONES/$view/$zone.zone
done
+
+ # reverse
+ link_zone_view paivola-reverse $view paivola-reverse
done
## deploy
@@ -605,7 +649,7 @@
else
log "Commit data..."
- commit_data
+ commit_data $REPO
fi
}