Subversion Repositories DevTools

Rev

Rev 1050 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#
#   Delete a package version from dpkg_archive
#   Script run by ssh to delete a package
#   Works in bash and dash
#
#set -x
set -e

error() {
    echo ERROR: $*
    exit 1;
}

delete_dir() {
    if [ -e "$1" ] ; then
        chmod -R u+w "$1"
        rm -rf "$1"
    fi
    
    if [ -L "$1" ] ; then
        rm -rf "$1"
    fi
}

# User options
tagForDeletion=""
removeTag=""
while getopts DTK arg ; do
    case $arg in
        D) set -x ;;
        T) tagForDeletion=1 ;;
        K) removeTag=1 ;;
        *) error Unknown option: $arg ;;
    esac
done
shift $(($OPTIND - 1))

# User arguments
pname=${1:?Need package name}
pver=${2:?Need package version}

dpkg="$HOME/dpkg_archive"
[ -d $dpkg ] || error dpkg_archive not found

#
#   Names of working directories
#
olddir="$dpkg/${pname}/${pver}.DELETE.TMPDIR"
realdir="$dpkg/${pname}/${pver}"
pkgdir="$dpkg/${pname}"

if [ -n "${tagForDeletion}" ] ; then
    #
    #   Tag for delayed deletion
    #   Touch a tagfile - the creation stamp will be used
    #
    tagFile="$realdir/.deletepkg"
    if [ -d "$realdir" ] ; then
        chmod u+w "$realdir"
        rm -f "$tagFile"
        touch "$tagFile" 
        chmod u-w "$realdir"
    fi
elif  [ -n "${removeTag}" ] ; then
    #
    #   Remove any tag thats present
    #
    tagFile="$realdir/.deletepkg"
    if [ -d "$realdir" ] ; then
        chmod u+w "$realdir"
        rm -f "$tagFile"
        chmod u-w "$realdir"
    fi
else
    #
    #   Create package directory
    #   Ensure its writable
    mkdir -p "$pkgdir"
    chmod u+w "$pkgdir"

    #
    #   Delete possible tmp directory
    delete_dir "$olddir"

    #
    #   Rename and then delete - minimize diruption
    #   Then delete the old
    #
    if [ -e "$realdir" ] ; then
        mv "$realdir" "$olddir"
        delete_dir "$olddir"
    elif [ -L "$realdir" ] ; then
        delete_dir "$realdir"
    fi
    
    #
    #   Try to remove package directory too
    #
    rmdir --ignore-fail-on-non-empty -p "$pkgdir" 2>/dev/null || true
    

    # Fix up permissions on the package and package-version
    if [ -d "$pkgdir" ] ; then
        chmod a-w "$pkgdir"
    fi    
fi