# displace.sh.in: diversion helpers for maintainer scripts # # displace_link # # Ensures that the file is properly diverted to # .divert-orig by this package, and becomes a # symbolic link to either .divert (default) or # .divert-orig. # # undisplace_unlink # # Undoes the action of displace_link specified # above. # # Version: 4.0 # # Copyright © 2008–2012 Tim Abbott and Anders # Kaseorg # # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation files # (the “Software”), to deal in the Software without restriction, # including without limitation the rights to use, copy, modify, merge, # publish, distribute, sublicense, and/or sell copies of the Software, # and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # package=#PACKAGE# ours=#DEB_DISPLACE_EXTENSION# theirs=#DEB_DISPLACE_EXTENSION#-orig displace_link_displace() { file=$1 ourfile=$2 theirfile=$3 if ! LC_ALL=C dpkg-divert --list "$package" | \ grep -xFq "diversion of $file to $theirfile by $package"; then dpkg-divert --divert "$theirfile" --rename --package "$package" --add "$file" fi } displace_link_symlink() { file=$1 ourfile=$2 theirfile=$3 if [ ! -L "$file" ] && [ ! -e "$file" ]; then ln -s "$(basename "$ourfile")" "$file" elif [ ! -L "$file" ] || \ [ "$(readlink "$file")" != "$(basename "$ourfile")" -a \ "$(readlink "$file")" != "$(basename "$theirfile")" ]; then echo "*** OMINOUS WARNING ***: $file is not linked to either $(basename "$ourfile") or $(basename "$theirfile")" >&2 fi } displace_link() { prefix=$1 suffix=$2 file=$prefix$suffix ourfile=$prefix$ours$suffix theirfile=$prefix$theirs$suffix displace_link_displace "$file" "$ourfile" "$theirfile" displace_link_symlink "$file" "$ourfile" "$theirfile" } displace_hide() { file=$1 ourfile="" theirfile=$2 displace_link_displace "$file" "$ourfile" "$theirfile" } undisplace_unlink_symlink() { file="$1" ourfile="$2" theirfile="$3" if [ ! -L "$file" ] || \ [ "$(readlink "$file")" != "$(basename "$ourfile")" -a \ "$(readlink "$file")" != "$(basename "$theirfile")" ]; then echo "*** OMINOUS WARNING ***: $file is not linked to either $(basename "$ourfile") or $(basename "$theirfile")" >&2 else rm -f "$file" fi } undisplace_unlink_displace() { file="$1" if [ ! -L "$file" ] && [ ! -e "$file" ]; then dpkg-divert --remove --rename --package "$package" "$file" else echo "Not removing diversion of $file by $package" >&2 fi } undisplace_unlink() { prefix=$1 suffix=$2 file=$prefix$suffix ourfile=$prefix$ours$suffix theirfile=$prefix$theirs$suffix undisplace_unlink_symlink "$file" "$ourfile" "$theirfile" undisplace_unlink_displace "$file" } undisplace_unhide() { file=$1 undisplace_unlink_displace "$file" } check_undisplace_unlink() { prefix=$1 suffix=$2 file=$prefix$suffix ourfile=$prefix$ours$suffix theirfile=$prefix$theirs$suffix if LC_ALL=C dpkg-divert --list "$package" | \ grep -xFq "diversion of $file to $theirfile by $package"; then undisplace_unlink "$prefix" "$suffix" fi } check_undisplace_unhide() { file=$1 hiddenfile=$2 if LC_ALL=C dpkg-divert --list "$package" | \ grep -xFq "diversion of $file to $hiddenfile by $package"; then undisplace_unhide "$file" fi } # End of divert.sh.in