Subversion Repositories DevTools

Rev

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

Rev Author Line No. Line
1038 dpurdie 1
#
2
#   Delete a package version from dpkg_archive
3
#   Script run by ssh to delete a package
1050 dpurdie 4
#   Works in bash and dash
1038 dpurdie 5
#
6
#set -x
7
set -e
8
 
1050 dpurdie 9
error() {
1038 dpurdie 10
    echo ERROR: $*
11
    exit 1;
12
}
13
 
1050 dpurdie 14
delete_dir() {
1042 dpurdie 15
    if [ -e "$1" ] ; then
16
        chmod -R u+w "$1"
17
        rm -rf "$1"
1038 dpurdie 18
    fi
1042 dpurdie 19
 
20
    if [ -L "$1" ] ; then
21
        rm -rf "$1"
22
    fi
1038 dpurdie 23
}
24
 
25
# User options
1042 dpurdie 26
tagForDeletion=""
27
removeTag=""
28
while getopts DTK arg ; do
1038 dpurdie 29
    case $arg in
30
        D) set -x ;;
1042 dpurdie 31
        T) tagForDeletion=1 ;;
32
        K) removeTag=1 ;;
1038 dpurdie 33
        *) error Unknown option: $arg ;;
34
    esac
35
done
36
shift $(($OPTIND - 1))
37
 
38
# User arguments
39
pname=${1:?Need package name}
40
pver=${2:?Need package version}
41
 
1042 dpurdie 42
dpkg="$HOME/dpkg_archive"
1038 dpurdie 43
[ -d $dpkg ] || error dpkg_archive not found
44
 
45
#
46
#   Names of working directories
47
#
48
olddir="$dpkg/${pname}/${pver}.DELETE.TMPDIR"
49
realdir="$dpkg/${pname}/${pver}"
50
pkgdir="$dpkg/${pname}"
51
 
1042 dpurdie 52
if [ -n "${tagForDeletion}" ] ; then
53
    #
54
    #   Tag for delayed deletion
55
    #   Touch a tagfile - the creation stamp will be used
56
    #
57
    tagFile="$realdir/.deletepkg"
58
    if [ -d "$realdir" ] ; then
59
        chmod u+w "$realdir"
60
        rm -f "$tagFile"
61
        touch "$tagFile" 
62
        chmod u-w "$realdir"
63
    fi
64
elif  [ -n "${removeTag}" ] ; then
65
    #
66
    #   Remove any tag thats present
67
    #
68
    tagFile="$realdir/.deletepkg"
69
    if [ -d "$realdir" ] ; then
70
        chmod u+w "$realdir"
71
        rm -f "$tagFile"
72
        chmod u-w "$realdir"
73
    fi
74
else
75
    #
76
    #   Create package directory
77
    #   Ensure its writable
78
    mkdir -p "$pkgdir"
79
    chmod u+w "$pkgdir"
1038 dpurdie 80
 
1042 dpurdie 81
    #
82
    #   Delete possible tmp directory
1038 dpurdie 83
    delete_dir "$olddir"
84
 
1042 dpurdie 85
    #
86
    #   Rename and then delete - minimize diruption
87
    #   Then delete the old
88
    #
89
    if [ -e "$realdir" ] ; then
90
        mv "$realdir" "$olddir"
91
        delete_dir "$olddir"
92
    elif [ -L "$realdir" ] ; then
93
        delete_dir "$realdir"
94
    fi
95
 
96
    #
97
    #   Try to remove package directory too
98
    #
6103 dpurdie 99
    rmdir --ignore-fail-on-non-empty -p "$pkgdir" 2>/dev/null || true
1042 dpurdie 100
 
1038 dpurdie 101
 
1042 dpurdie 102
    # Fix up permissions on the package and package-version
103
    if [ -d "$pkgdir" ] ; then
104
        chmod a-w "$pkgdir"
105
    fi    
106
fi    
107