summaryrefslogtreecommitdiffstats
path: root/usr.sbin/sysmerge/sysmerge.sh
diff options
context:
space:
mode:
authorajacoutot <ajacoutot@openbsd.org>2015-08-24 11:03:41 +0000
committerajacoutot <ajacoutot@openbsd.org>2015-08-24 11:03:41 +0000
commitd88d873b0fa6e9ee4afab4d41c74608b2890d88c (patch)
tree0af8cafb1327a5766d3569f9d95f6c88c9b9599f /usr.sbin/sysmerge/sysmerge.sh
parent/usr/share/sysmerge -> /var/sysmerge (diff)
downloadwireguard-openbsd-d88d873b0fa6e9ee4afab4d41c74608b2890d88c.tar.xz
wireguard-openbsd-d88d873b0fa6e9ee4afab4d41c74608b2890d88c.zip
Make backup directory of replaced files persistent: /var/sysmerge/backups.
3 rotations so that we have history of modified files. In batch mode, when a file cannot be handled automatically, remove it from the checksum file so that the next interactive sysmerge(8) run will ask to merge the changes. ok rpe@
Diffstat (limited to 'usr.sbin/sysmerge/sysmerge.sh')
-rw-r--r--usr.sbin/sysmerge/sysmerge.sh66
1 files changed, 38 insertions, 28 deletions
diff --git a/usr.sbin/sysmerge/sysmerge.sh b/usr.sbin/sysmerge/sysmerge.sh
index aa75bbb6c56..073cbac2dc6 100644
--- a/usr.sbin/sysmerge/sysmerge.sh
+++ b/usr.sbin/sysmerge/sysmerge.sh
@@ -1,6 +1,6 @@
#!/bin/ksh -
#
-# $OpenBSD: sysmerge.sh,v 1.200 2015/08/24 10:42:08 ajacoutot Exp $
+# $OpenBSD: sysmerge.sh,v 1.201 2015/08/24 11:03:41 ajacoutot Exp $
#
# Copyright (c) 2008-2014 Antoine Jacoutot <ajacoutot@openbsd.org>
# Copyright (c) 1998-2003 Douglas Barton <DougB@FreeBSD.org>
@@ -49,9 +49,7 @@ sm_error() {
fi
done
- # do not empty _WRKDIR, it may still contain our backup files
- rm -rf ${_TMPROOT}
- rmdir ${_WRKDIR} 2>/dev/null
+ rm -rf ${_WRKDIR}
exit 1
}
@@ -79,6 +77,18 @@ sm_extract_sets() {
done
}
+sm_rotate_bak() {
+ local _b
+
+ for _b in $(jot 4 3 0); do
+ [[ -d ${_BKPDIR}.${_b} ]] && \
+ mv ${_BKPDIR}.${_b} ${_BKPDIR}.$((_b+1))
+ done
+ rm -rf ${_BKPDIR}.4
+ [[ -d ${_BKPDIR} ]] && mv ${_BKPDIR} ${_BKPDIR}.0
+ install -d ${_BKPDIR} || return
+}
+
# get pkg @sample information
exec_espie() {
local _tmproot
@@ -178,8 +188,8 @@ sm_init() {
# XXX remove after OPENBSD_6_0
# and remove /usr/share/sysmerge/* from _ignorefiles in sm_init()
- if [[ -d /usr/share/sysmerge && -d /var/sysmerge/ ]]; then
- mv -f /usr/share/sysmerge/*sum /var/sysmerge/
+ if [[ -d /usr/share/sysmerge && -d /var/sysmerge ]]; then
+ mv -f /usr/share/sysmerge/*sum /var/sysmerge/ 2>/dev/null
rm -rf /usr/share/sysmerge
fi
@@ -314,6 +324,7 @@ sm_install() {
fi
if [[ -f ${TARGET} ]]; then
+ sm_rotate_bak || return
mkdir -p ${_BKPDIR}/${_instdir} || return
cp -p ${TARGET} ${_BKPDIR}/${_instdir} || return
fi
@@ -477,19 +488,15 @@ sm_diff_loop() {
fi
else
# file does not exist on the target system
- if ${IS_LINK}; then
- if ${DIFFMODE}; then
- echo && _nonexistent=true
- else
- echo "===> Linking ${TARGET}"
- sm_install && \
- _autoinst="${_autoinst}${TARGET}\n" || \
- sm_warn "problem creating ${TARGET} link"
- return
- fi
- fi
if ${DIFFMODE}; then
- echo && _nonexistent=true
+ _nonexistent=true
+ ${BATCHMODE} || echo "\n===> Missing ${TARGET}\n"
+ elif ${IS_LINK}; then
+ echo "===> Linking ${TARGET}"
+ sm_install && \
+ _autoinst="${_autoinst}${TARGET}\n" || \
+ sm_warn "problem creating ${TARGET} link"
+ return
else
echo -n "===> Installing ${TARGET}"
sm_install && \
@@ -588,17 +595,20 @@ sm_check_an_eg() {
}
sm_post() {
+ local _f
+
cd ${_WRKDIR} && \
find . -type d -depth -empty -exec rmdir -p '{}' + 2>/dev/null
rmdir ${_WRKDIR} 2>/dev/null
- [[ -d ${_BKPDIR} ]] && \
- echo "===> Backup file(s):" && \
- find ${_BKPDIR} -type f -size +0
-
- [[ -d ${_TMPROOT} ]] && \
- sm_warn "file(s) left for comparison:" && \
- find ${_TMPROOT} -type f ! -name \*.merged -size +0
+ if [[ -d ${_TMPROOT} ]]; then
+ sm_warn "file(s) left for comparison:"
+ for _f in $(find ${_TMPROOT} ! -type d ! -name \*.merged -size +0)
+ do
+ echo "${_f}" && ${BATCHMODE} && [[ -f ${_f} ]] && \
+ sed -i "/$(sha256 -q ${_f})/d" /var/sysmerge/*sum
+ done
+ fi
mtree -qdef /etc/mtree/4.4BSD.dist -p / -U >/dev/null
[[ -d /etc/X11 ]] && \
@@ -623,11 +633,11 @@ shift $(( OPTIND -1 ))
[[ $(id -u) -ne 0 ]] && echo "${0##*/}: need root privileges" && usage
# global constants
+_BKPDIR=/var/sysmerge/backups
+_RELINT=$(uname -r | tr -d '.') || exit 1
_WRKDIR=$(mktemp -d -p ${TMPDIR:=/tmp} sysmerge.XXXXXXXXXX) || exit 1
-_BKPDIR=${_WRKDIR}/backups
_TMPROOT=${_WRKDIR}/temproot
-_RELINT=$(uname -r | tr -d '.') || exit 1
-readonly _WRKDIR _BKPDIR _TMPROOT _RELINT
+readonly _BKPDIR _RELINT _TMPROOT _WRKDIR
[[ -z ${VISUAL} ]] && EDITOR=${EDITOR:=/usr/bin/vi} || EDITOR=${VISUAL}
PAGER=${PAGER:=/usr/bin/more}