Author: branden Date: 2003-08-10 23:30:12 -0500 (Sun, 10 Aug 2003) New Revision: 384
Modified: trunk/debian/xserver-common.postinst.in trunk/debian/xserver-common.postrm.in Log: Add technique for deciding when to purge non-conffile configuration files; maintain a roster file corresponding to the config file, for which each interested package adds its name on package configuration, and removes it on package purge. debian/xserver-common.postinst.in: - define the location of the X server wrapper config file's roster in a variable - if the roster file doesn't already list this package on configuration, add it to the roster - (cosmetic) minor edit to a comment debian/xserver-common.postrm.in: - define the location of the X server wrapper config file's roster in a variable - on purge, remove this package's name from the roster file (if that leaves no packages managing the config file, look for a stored MD5 checksum of the config file; if that matches the current config file, remove the config file; finally, remove the checksum file) Modified: trunk/debian/xserver-common.postinst.in ============================================================================== --- trunk/debian/xserver-common.postinst.in 2003-08-11 04:17:18 UTC (rev 383) +++ trunk/debian/xserver-common.postinst.in 2003-08-11 04:30:12 UTC (rev 384) @@ -17,6 +17,7 @@ XWRAPPER_CONFIG=/etc/X11/Xwrapper.config CHECKSUM_DIR=/var/lib/xfree86 XWRAPPER_CONFIG_CHECKSUM="$CHECKSUM_DIR/$(basename "$XWRAPPER_CONFIG").md5sum" +XWRAPPER_CONFIG_ROSTER="$CHECKSUM_DIR/$(basename "$XWRAPPER_CONFIG").roster" # source debconf library . /usr/share/debconf/confmodule @@ -30,14 +31,20 @@ #DEBHELPER# +# register this file as a (potential) handler of the X server wrapper config +# file +if ! fgrep -qsx "$THIS_PACKAGE" "$XWRAPPER_CONFIG_ROSTER" ]; then + echo "$THIS_PACKAGE" >> "$XWRAPPER_CONFIG_ROSTER" +fi + # only mess with config file if it exists; if it does not, assume that's the # way the user wants it if [ -e "$XWRAPPER_CONFIG" ]; then # similarly, check for the existence of the checksum file; if it doesn't # exist, assume that's the way the user wants it if [ -e "$XWRAPPER_CONFIG_CHECKSUM" ]; then - # compare the current and stored checksums; if they do not match, assume - # that's the way the user wants it + # next, compare the current and stored checksums; if they do not match, + # assume that's the way the user wants it CURRENT_MD5SUM=$(md5sum "$XWRAPPER_CONFIG") if [ "$CURRENT_MD5SUM" = "$(cat "$XWRAPPER_CONFIG_CHECKSUM")" ]; then # they match; prepare a new version of the config file Modified: trunk/debian/xserver-common.postrm.in ============================================================================== --- trunk/debian/xserver-common.postrm.in 2003-08-11 04:17:18 UTC (rev 383) +++ trunk/debian/xserver-common.postrm.in 2003-08-11 04:30:12 UTC (rev 384) @@ -17,6 +17,7 @@ XWRAPPER_CONFIG=/etc/X11/Xwrapper.config CHECKSUM_DIR=/var/lib/xfree86 XWRAPPER_CONFIG_CHECKSUM="$CHECKSUM_DIR/$(basename "$XWRAPPER_CONFIG").md5sum" +XWRAPPER_CONFIG_ROSTER="$CHECKSUM_DIR/$(basename "$XWRAPPER_CONFIG").roster" if [ "$1" = "abort-install" -o "$1" = "abort-upgrade" ]; then if [ -d /usr/X11R6/lib/X11/xserver.moved-by-preinst -a -L /usr/X11R6/lib/X11/xserver ]; then @@ -27,16 +28,38 @@ # clean up non-conffile configuration files and related materials on purge if [ "$1" = "purge" ]; then - # remove Xwrapper.config if it was still managed by the package, and remove - # the checksum file in any case - if [ -e "$XWRAPPER_CONFIG_CHECKSUM" ]; then - if [ -e "$XWRAPPER_CONFIG" ]; then - if [ "$(md5sum "$XWRAPPER_CONFIG")" \ - = "$(cat "$XWRAPPER_CONFIG_CHECKSUM")" ]; then - rm -f "$XWRAPPER_CONFIG" + # de-register this file as a handler of the X server wrapper config file + if [ -e "$XWRAPPER_CONFIG_ROSTER" ]; then + # check existing roster file for our package name + if fgrep -qx "$THIS_PACKAGE" "$XWRAPPER_CONFIG_ROSTER"; then + # construct temporary roster file with our package name removed + fgrep -vx "$THIS_PACKAGE" > "$XRAPPER_CONFIG_ROSTER.dpkg-tmp" + # is there anything left? + if [ -n "$(cat "$XRAPPER_CONFIG_ROSTER.dpkg-tmp")" ]; then + # yes, replace the roster file + mv "$XRAPPER_CONFIG_ROSTER.dpkg-tmp" "$XRAPPER_CONFIG_ROSTER" + else + # no; remove both the roster and our temporary copy + rm -f "$XRAPPER_CONFIG_ROSTER" "$XRAPPER_CONFIG_ROSTER.dpkg-tmp" + # remove X server wrapper config file if it was still managed by the + # package + if [ -e "$XWRAPPER_CONFIG_CHECKSUM" ]; then + # does it exist? + if [ -e "$XWRAPPER_CONFIG" ]; then + # does the current MD5 checksum match the stored checksum? + if [ "$(md5sum "$XWRAPPER_CONFIG")" \ + = "$(cat "$XWRAPPER_CONFIG_CHECKSUM")" ]; then + # yes; remove the config file + rm -f "$XWRAPPER_CONFIG" + fi + fi + # remove the checksum file; any remaining X server wrapper config file + # still on the system at this point is no longer being managed (local + # user customization) + rm -f "$XWRAPPER_CONFIG_CHECKSUM" + fi fi fi - rm -f "$XWRAPPER_CONFIG_CHECKSUM" fi # we can take /etc/X11/xserver out of this list one day when dpkg fixes -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]