]> sipb.mit.edu Git - snippets/.git/blob - apt-zephyr/apt-zephyr
3650cc572b915c7d8e22de267e626024245e249a
[snippets/.git] / apt-zephyr / apt-zephyr
1 #!/bin/sh
2 set -e
3
4 # Defaults
5 CLASS=
6 INSTANCE=
7 REALM=
8 RECIPIENTS=
9 SIG="$(hostname -f)"
10 OPCODE=auto
11 ZAUTH=
12
13 # Read configuration
14 . /etc/apt-zephyr.conf
15
16 send_zephyr ()
17 {
18     zwrite \
19         ${CLASS:+-c "$CLASS"} \
20         ${INSTANCE:+-i "$INSTANCE"} \
21         ${REALM:+-r "$REALM"} \
22         ${SIG:+-s "$SIG"} \
23         ${OPCODE:+-O "$OPCODE"} \
24         ${ZAUTH:--d} \
25         ${RECIPIENTS:+$RECIPIENTS}
26 }
27
28 package ()
29 {
30     package=$1
31     oldver=$2
32     cmp=$3
33     newver=$4
34
35     if [ "$newver" = '-' ] && [ "$oldver" = '-' ]; then
36         echo "Purging $package"
37     elif [ "$newver" = '-' ]; then
38         echo "Removing $package $oldver"
39     elif [ "$oldver" = '-' ]; then
40         echo "Installing $package $newver"
41     elif [ "$cmp" = '<' ]; then
42         echo "Upgrading $package $oldver to $newver"
43     elif [ "$cmp" = '=' ]; then
44         echo "Reinstalling $package $newver"
45     elif [ "$cmp" = '>' ]; then
46         echo "Downgrading $package $oldver to $newver"
47     else
48         echo "I'm confused: $*"
49     fi
50 }
51
52 parse_v1 ()
53 {
54     oldpkgs=$(mktemp -t "apt-zephyr-old.XXXXXX") || exit $?
55     newpkgs=$(mktemp -t "apt-zephyr-new.XXXXXX") || exit $?
56     xargs -r -d '\n' dpkg-deb -W | sort -o "$newpkgs"
57     cut -f 1 "$newpkgs" | xargs -r -d '\n' dpkg-query -W | \
58         sort -o "$oldpkgs"
59     join -t '   ' -j 1 -e '-' "$oldpkgs" "$newpkgs" | \
60         while IFS='     ' read -r package oldver newver; do
61         if dpkg --compare-versions "$oldver" lt "$newver"; then
62             package "$package" "$oldver" '<' "$newver"
63         elif dpkg --compare-versions "$oldver" eq "$newver"; then
64             package "$package" "$oldver" '=' "$newver"
65         else
66             package "$package" "$oldver" '>' "$newver"
67         fi
68     done
69     rm -f "$oldpkgs" "$newpkgs"
70 }
71
72 read -r line
73 case "$line" in
74     'VERSION 2')
75         while read -r line && [ -n "$line" ]; do :; done
76         while read -r package oldver cmp newver action; do
77             case "$action" in
78                 '**CONFIGURE**' | '**REMOVE**')
79                     package "$package" "$oldver" "$cmp" "$newver"
80                     ;;
81                 '**ERROR**')
82                     echo "ERROR on $package $newver"
83                     ;;
84             esac
85         done
86         ;;
87     'VERSION *')
88         echo "$0: unrecognized version: $line"
89         ;;
90     '')
91         ;;
92     *)
93         (echo "$line"; cat) | parse_v1
94         ;;
95 esac | send_zephyr