forked from alpinelinux/alpine-conf
-
Notifications
You must be signed in to change notification settings - Fork 0
/
update-conf.in
105 lines (89 loc) · 2.04 KB
/
update-conf.in
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/bin/sh
VERSION=@VERSION@
PREFIX=@PREFIX@
: ${LIBDIR=$PREFIX/lib}
. "$LIBDIR/libalpine.sh"
# set up temp dir
init_tmpdir TMPD
LBUCACHE="$TMPD/lbucache"
usage() {
cat <<-__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
__EOF__
exit $1
}
is_modified() {
[ -f "$LBUCACHE" ] || lbu status -a | awk '{print $2}' > "$LBUCACHE"
test -n "$( ( echo "$1" ; cat "$LBUCACHE" ) | sort | uniq -d)"
}
is_initd() {
echo "$1" | grep etc/init.d/ > /dev/null
}
args=$(getopt -o ailh --long all,initd,list,help -n "$PROGRAM" -- "$@")
if [ $? -ne 0 ]; then
usage "1" >&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 0;;
--) shift; break;;
'?') usage "1" >&2;;
esac
shift
done
if which vimdiff >/dev/null; then
vflag=", Vimdiff old new"
vflag2="/v"
fi
for apknew in $(find "$ROOT/etc" -name '*.apk-new') ; do
p="${apknew%.apk-new}"
f="${p#${ROOT}/}"
if [ "$lflag" ] ; then
# just list the file
if [ "$aflag" ] || is_modified "$f" ; then
echo "$p"
fi
elif [ "$aflag" ] || is_modified "$f" ; then
if [ "$iflag" ] && is_initd "$f" ; then
echo "Autoupdating $p"
mv "$apknew" "$p"
continue
fi
diff -u "$p" "$apknew"
# ask user what to do with the file
unset resp
while [ -z "$resp" ] ; do
echo "New $p available:"
ask "Quit, Next, Show diff, Edit new${vflag}, Zap new, Use new (q/n/s/e${vflag2}/z/u)" s
case "$resp" in
q) exit;;
n) continue;;
s) diff -u "$p" "$apknew" | ${PAGER:-less}
unset resp
;;
e) ${EDITOR:-vi} "$apknew" ; unset resp;;
v) if [ "$vflag" ]; then
vimdiff "$p" "$apknew"
fi
unset resp;;
z) rm "$apknew";;
u) mv "$apknew" "$p";;
*) unset resp;;
esac
done
else
# auto update
echo "Autoupdating unchanged $p"
mv "$apknew" "$p"
fi
done