On 11 October 2015 at 13:45, Felipe Sateler <[email protected]> wrote:
> Please implement this helper in dpkg-maintscript-helper;
Please find attached a patch to kickstart the discussion.
Documentation is missing. accept_conffile will move a .dpkg-bak file
left from rm_conffile if upgrading from a version older than the
passed version (or only on first install if empy is passed as
version).
--
Saludos,
Felipe Sateler
diff --git a/scripts/dpkg-maintscript-helper.sh
b/scripts/dpkg-maintscript-helper.sh
index 176920e..438d527 100755
--- a/scripts/dpkg-maintscript-helper.sh
+++ b/scripts/dpkg-maintscript-helper.sh
@@ -229,6 +229,64 @@ abort_mv_conffile() {
}
##
+## Functions to accept a conffile removed with rm_conffile in another package
+##
+accept_conffile() {
+ local CONFFILE="$1"
+ local LASTVERSION="$2"
+ local PACKAGE="$3"
+ if [ "$LASTVERSION" = "--" ]; then
+ LASTVERSION=""
+
PACKAGE="$DPKG_MAINTSCRIPT_PACKAGE${DPKG_MAINTSCRIPT_ARCH:+:$DPKG_MAINTSCRIPT_ARCH}"
+ fi
+ if [ "$PACKAGE" = "--" -o -z "$PACKAGE" ]; then
+
PACKAGE="$DPKG_MAINTSCRIPT_PACKAGE${DPKG_MAINTSCRIPT_ARCH:+:$DPKG_MAINTSCRIPT_ARCH}"
+ fi
+ # Skip remaining parameters up to --
+ while [ "$1" != "--" -a $# -gt 0 ]; do shift; done
+ [ $# -gt 0 ] || badusage "missing arguments after --"
+ shift
+
+ [ -n "$PACKAGE" ] || error "couldn't identify the package"
+ [ -n "$1" ] || error "maintainer script parameters are missing"
+ [ -n "$DPKG_MAINTSCRIPT_NAME" ] || \
+ error "environment variable DPKG_MAINTSCRIPT_NAME is required"
+
+ debug "Executing $0 mv_conffile in $DPKG_MAINTSCRIPT_NAME" \
+ "of $DPKG_MAINTSCRIPT_PACKAGE"
+ debug "CONFFILE=$CONFFILE PACKAGE=$PACKAGE" \
+ "LASTVERSION=$LASTVERSION ACTION=$1 PARAM=$2"
+ case "$DPKG_MAINTSCRIPT_NAME" in
+ postinst)
+ if [ "$1" = "configure" ] &&
+ dpkg --compare-versions -- "$2" le-nl "$LASTVERSION"; then
+ finish_accept_conffile "$CONFFILE" "$PACKAGE"
+ fi
+ ;;
+ *)
+ debug "$0 accept_conffile not required in
$DPKG_MAINTSCRIPT_NAME"
+ ;;
+ esac
+}
+
+
+finish_accept_conffile() {
+ local CONFFILE="$1"
+ local PACKAGE="$2"
+
+ if [ -e "$CONFFILE.dpkg-bak" ]; then
+ local md5sum="$(md5sum $CONFFILE | sed -e 's/ .*//')"
+ local old_md5sum="$(dpkg-query -W -f='${Conffiles}' $PACKAGE | \
+ sed -n -e "\' $CONFFILE ' { s/obsolete$//; s/.* //; p
}")"
+ # Only move if target file has not been modified yet
+ if [ "$md5sum" = "$old_md5sum" ] ; then
+ mv -f "$CONFFILE.dpkg-bak" "$CONFFILE"
+ fi
+ fi
+}
+
+
+##
## Functions to replace a symlink with a directory
##
symlink_to_dir() {
@@ -531,6 +589,9 @@ Commands:
dir_to_symlink <pathname> <new-symlink-target> [<last-version> [<package>]]
Replace a directory with a symlink. Must be called in preinst,
postinst and postrm.
+ accept_conffile <conffile> [<last-version> [<package>]]
+ Accept changes from a conffile that was removed in anothe package.
+ Must be called in postinst.
help
Display this usage information.
END
@@ -555,7 +616,7 @@ shift
case "$command" in
supports)
case "$1" in
- rm_conffile|mv_conffile|symlink_to_dir|dir_to_symlink)
+ rm_conffile|mv_conffile|symlink_to_dir|dir_to_symlink|accept_conffile)
code=0
;;
*)
@@ -575,6 +636,9 @@ supports)
rm_conffile)
rm_conffile "$@"
;;
+accept_conffile)
+ accept_conffile "$@"
+ ;;
mv_conffile)
mv_conffile "$@"
;;