From 89da73a86152b5756a2d077be3cccb1c5dbf92cd Mon Sep 17 00:00:00 2001
From: Evan Broder <broder@mit.edu>
Date: Wed, 27 Jan 2010 21:53:16 -0500
Subject: [PATCH] Add code to invirt-reload to de-duplicate multiple
 invocations. (LP: #439426)

This uses the dpkg triggers mechanism to de-duplicate multiple
invocations of invirt-reload over the course of a single dpkg run.

The code is largely lifted from Ubuntu's update-initramfs.

svn path=/trunk/packages/invirt-base/; revision=2941
---
 debian/changelog            |    7 ++++++-
 debian/invirt-base.postinst |    6 +++++-
 scripts/invirt-reload       |    9 +++++++++
 3 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index dda2cdb..3d3f987 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,13 @@
 invirt-base (0.0.29) unstable; urgency=low
 
+  [ Greg Brockman ]
   * Added a safestructs for doing config without raising.
 
- -- Greg Brockman <gdb@mit.edu>  Tue, 19 Jan 2010 23:49:19 -0500
+  [ Evan Broder ]
+  * Support running invirt-reload directly from a package postinst,
+    instead of via triggers. (LP: #439426)
+
+ -- Evan Broder <broder@mit.edu>  Wed, 27 Jan 2010 21:18:07 -0500
 
 invirt-base (0.0.28) unstable; urgency=low
 
diff --git a/debian/invirt-base.postinst b/debian/invirt-base.postinst
index a2ae96f..73ea19b 100755
--- a/debian/invirt-base.postinst
+++ b/debian/invirt-base.postinst
@@ -26,7 +26,11 @@ case "$1" in
     ;;
 
     triggered)
-        invirt-reload
+        if dpkg --compare-versions "$DPKG_RUNNING_VERSION" ge '1.14.5ubuntu10~~'; then
+            invirt-reload
+        else
+            DPKG_MAINTSCRIPT_PACKAGE='' invirt-reload
+        fi
     ;;
 
     *)
diff --git a/scripts/invirt-reload b/scripts/invirt-reload
index 75e9503..84dbe7a 100755
--- a/scripts/invirt-reload
+++ b/scripts/invirt-reload
@@ -1,5 +1,14 @@
 #!/bin/bash
 
+if [ "$DPKG_MAINTSCRIPT_PACKAGE" != '' ] && \
+    [ $# = 0 ] && \
+    dpkg-trigger --check-supported 2>/dev/null; then
+    if dpkg-trigger --no-await invirt-base; then
+        echo "invirt-reload: deferring update (trigger activated)"
+        exit 0
+    fi
+fi
+
 for script in $(run-parts --test /etc/init.d); do
     if [ "${script#/etc/init.d/invirt-}" != "$script" ]; then
 	invoke-rc.d "${script#/etc/init.d/}" force-reload
-- 
1.7.9.5