]> sipb.mit.edu Git - snippets/.git/blobdiff - apt-zephyr/apt-zephyr
apt-zephyr: Don’t send empty zephyrs for no changes.
[snippets/.git] / apt-zephyr / apt-zephyr
index 54300bdb5f6cd89b293dc5ad58be332b8f78645d..11a9bb7a3b385b4dce57a59cf17f63b89272eb77 100755 (executable)
@@ -13,6 +13,18 @@ ZAUTH=
 # Read configuration
 . /etc/apt-zephyr.conf
 
+send_zephyr ()
+{
+    zwrite \
+       ${CLASS:+-c "$CLASS"} \
+       ${INSTANCE:+-i "$INSTANCE"} \
+       ${REALM:+-r "$REALM"} \
+       ${SIG:+-s "$SIG"} \
+       ${OPCODE:+-O "$OPCODE"} \
+       ${ZAUTH:--d} \
+       ${RECIPIENTS:+$RECIPIENTS}
+}
+
 package ()
 {
     package=$1
@@ -37,43 +49,52 @@ package ()
     fi
 }
 
+parse_v1 ()
+{
+    oldpkgs=$(mktemp -t "apt-zephyr-old.XXXXXX") || exit $?
+    newpkgs=$(mktemp -t "apt-zephyr-new.XXXXXX") || exit $?
+    xargs -r -d '\n' dpkg-deb -W | sort -o "$newpkgs"
+    cut -f 1 "$newpkgs" | xargs -r -d '\n' dpkg-query -W | \
+       sort -o "$oldpkgs"
+    join -t '  ' -j 1 -e '-' "$oldpkgs" "$newpkgs" | \
+       while IFS='     ' read -r package oldver newver; do
+       if dpkg --compare-versions "$oldver" lt "$newver"; then
+           package "$package" "$oldver" '<' "$newver"
+       elif dpkg --compare-versions "$oldver" eq "$newver"; then
+           package "$package" "$oldver" '=' "$newver"
+       else
+           package "$package" "$oldver" '>' "$newver"
+       fi
+    done
+    rm -f "$oldpkgs" "$newpkgs"
+}
+
+parse_v2 ()
+{
+    while read -r line && [ -n "$line" ]; do :; done
+    while read -r package oldver cmp newver action; do
+       case "$action" in
+           '**CONFIGURE**' | '**REMOVE**')
+               package "$package" "$oldver" "$cmp" "$newver"
+               ;;
+           '**ERROR**')
+               echo "ERROR on $package $newver"
+               ;;
+       esac
+    done
+}
+
 read -r line
 case "$line" in
     'VERSION 2')
-       while read -r line && [ -n "$line" ]; do :; done
-       while read -r package oldver cmp newver action; do
-           case "$action" in
-               '**CONFIGURE**' | '**REMOVE**')
-                   package "$package" "$oldver" "$cmp" "$newver"
-                   ;;
-               '**ERROR**')
-                   echo "ERROR on $package $newver"
-                   ;;
-           esac
-       done
+       parse_v2 | send_zephyr
        ;;
     'VERSION *')
-       echo "$0: unrecognized version: $line"
+       echo "$0: unrecognized version: $line" | send-zephyr
        ;;
     '')
        ;;
     *)
-       oldpkgs=$(mktemp -t "apt-zephyr-old.XXXXXX") || exit $?
-       newpkgs=$(mktemp -t "apt-zephyr-new.XXXXXX") || exit $?
-       (echo "$line"; cat) | xargs -r -d '\n' dpkg-deb -W | sort -o "$newpkgs"
-       cut -f 1 "$newpkgs" | xargs -r -d '\n' dpkg-query -W | \
-           sort -o "$oldpkgs"
-       join -t '       ' -j 1 -e '-' "$oldpkgs" "$newpkgs" | \
-           while IFS=' ' read -r package oldver newver; do
-           if dpkg --compare-versions "$oldver" lt "$newver"; then
-               package "$package" "$oldver" '<' "$newver"
-           elif dpkg --compare-versions "$oldver" eq "$newver"; then
-               package "$package" "$oldver" '=' "$newver"
-           else
-               package "$package" "$oldver" '>' "$newver"
-           fi
-       done
-       rm -f "$oldpkgs" "$newpkgs"
+       (echo "$line"; cat) | parse_v1 | send_zephyr
        ;;
-esac | \
-    zwrite ${CLASS:+-c "$CLASS"} ${INSTANCE:+-i "$INSTANCE"} ${REALM:+-r "$REALM"} ${SIG:+-s "$SIG"} ${OPCODE:+-O "$OPCODE"} ${ZAUTH:--d} ${RECIPIENTS:+$RECIPIENTS}
+esac