update-conf.in 1.87 KB
Newer Older
Natanael Copa's avatar
Natanael Copa committed
1 2 3 4 5 6 7 8 9 10 11 12
#!/bin/sh


PREFIX=
. $PREFIX/lib/libalpine.sh

# set up temp dir
init_tmpdir TMPD

LBUCACHE="$TMPD/lbucache"

usage() {
Dubiousjim's avatar
Dubiousjim committed
13 14 15 16 17 18 19 20
	cat >&2 << __EOF__
$PROGRAM $VERSION
Usage: $PROGRAM [-a|--all] [-i|--initd] [-l|--list] [-h|--help]
Options:
  -a, --all    Select all updated files
  -i, --initd  Use all new init.d scripts
  -l, --list   List updated files
  -h, --help   Show this help
Natanael Copa's avatar
Natanael Copa committed
21

Dubiousjim's avatar
Dubiousjim committed
22
__EOF__
Natanael Copa's avatar
Natanael Copa committed
23 24 25 26 27 28 29 30
}


is_modified() {
	[ -f "$LBUCACHE" ] || lbu status -a | awk '{print $2}' > "$LBUCACHE"
	test -n "`( echo \"$1\" ; cat \"$LBUCACHE\" ) | sort | uniq -d`"
}

31 32 33 34 35

is_initd() {
	echo "$1" | grep etc/init.d/ > /dev/null
}

Dubiousjim's avatar
Dubiousjim committed
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
args=`getopt -o ailh --long all,initd,list,help -n "$PROGRAM" -- "$@"`
if [ $? -ne 0 ]; then
	usage
	exit 2
fi
eval set -- "$args"
while true; do
	case $1 in
		-a|--all) aflag="-a";;
		-i|--initd) iflag="-i";;
		-l|--list) lflag="-l";;
		-h|--help) usage; exit;;
		--) shift; break;;
		*) exit 1;; # getopt error
	esac
	shift
Natanael Copa's avatar
Natanael Copa committed
52 53
done

54
for apknew in $(find "$ROOT/etc" -name '*.apk-new') ; do
Natanael Copa's avatar
Natanael Copa committed
55 56 57 58 59 60 61 62 63 64 65 66
	p="${apknew%.apk-new}"
	f="${p#${ROOT}/}"
	unset choice

	if [ "$lflag" ] ; then
	
		# just list the file
		if [ "$aflag" ] || is_modified "$f" ; then
			echo "$p"
		fi
		
	elif [ "$aflag" ] || is_modified "$f" ; then
67 68 69 70 71 72 73 74
		if [ "$iflag" ] && is_initd "$f" ; then
			echo "Autoupdating $p"
			mv "$apknew" "$p"
			continue
		fi
			
		diff -u "$p" "$apknew"

Natanael Copa's avatar
Natanael Copa committed
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
		# ask user what to do with the file
		while [ -z "$choice" ] ; do
			echo "New $p available:"
			echon "Quit, Next, Show diff, Edit new, Zap new, Use new (q/n/s/e/z/u) [s]: "
			default_read choice "s" </dev/tty
			case "$choice" in
				q) exit;;
				n) continue;;
				s) diff -u "$p" "$apknew" | ${PAGER:-less}
				   unset choice
				   ;;	
				e) ${EDITOR:-vi} "$apknew" ; unset choice;;
				z) rm "$apknew";;
				u) mv "$apknew" "$p";;
				*) unset choice;;
			esac
		done
	else
		# auto update
		echo "Autoupdating unchanged $p"
		mv "$apknew" "$p"
	fi
done