~ubuntu-branches/ubuntu/precise/config-package-dev/precise

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#
# divert_link <prefix> <suffix>
#
#   Ensures that the file <prefix><suffix> is properly diverted to
#   <prefix>.divert-orig<suffix> by this package, and becomes a
#   symbolic link to either <prefix>.divert<suffix> (default) or
#   <prefix>.divert-orig<suffix>.
#
# undivert_unlink <prefix> <suffix>
#
#   Undoes the action of divert_link <prefix> <suffix> specified
#   above.
#
# Version: 4.0
#

package=#PACKAGE#

ours=#DEB_DIVERT_EXTENSION#
theirs=#DEB_DIVERT_EXTENSION#-orig

divert_link_divert()
{
    file=$1
    ourfile=$2
    theirfile=$3
    if ! dpkg-divert --list "$package" | \
	grep -xFq "diversion of $file to $theirfile by $package"; then
	dpkg-divert --divert "$theirfile" --rename --package "$package" --add "$file"
    fi
}

divert_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
}

divert_link()
{
    prefix=$1
    suffix=$2

    file=$prefix$suffix
    ourfile=$prefix$ours$suffix
    theirfile=$prefix$theirs$suffix
    divert_link_divert "$file" "$ourfile" "$theirfile"
    divert_link_symlink "$file" "$ourfile" "$theirfile"
}

divert_remove()
{
    file=$1
    ourfile=""
    theirfile=$2
    divert_link_divert "$file" "$ourfile" "$theirfile"
}

undivert_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
}

undivert_unlink_divert()
{
    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
}

undivert_unlink()
{
    prefix=$1
    suffix=$2

    file=$prefix$suffix
    ourfile=$prefix$ours$suffix
    theirfile=$prefix$theirs$suffix

    undivert_unlink_symlink "$file" "$ourfile" "$theirfile"
    undivert_unlink_divert "$file" "$package"
}

undivert_unremove()
{
    file=$1
    undivert_unlink_divert "$file"
}