[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#827930: apt: Make apt-daily leverage the ConditionACPower feature of systemd



Sorry,

First patch was flawed, I've moved the check_power() function without
seeing it was using debug_echo() internally. Fixed now.
I've followed what was done when moving random_sleep() from the script
to the cron job, i.e. remove calls to debug_echo(), see 14669d4b.
Second patch has not been touched.

regards,
Nicolas
From 2a7e2b1552f15f72a0bb1b8992227bb1b5e44355 Mon Sep 17 00:00:00 2001
From: Nicolas Le Cam <niko.lecam@gmail.com>
Date: Wed, 22 Jun 2016 21:39:38 +0200
Subject: Use the ConditionACPower feature of systemd in the apt-daily service

.. instead of hardcoding the functionnality in the apt.systemd.daily
script.

Also make the compatibility cron job provide the same functionnality
for systems that do not use systemd.
---
 debian/apt-daily.service         |  1 +
 debian/apt.apt-compat.cron.daily | 20 ++++++++++++++++++++
 debian/apt.systemd.daily         | 26 --------------------------
 3 files changed, 21 insertions(+), 26 deletions(-)

diff --git a/debian/apt-daily.service b/debian/apt-daily.service
index 941263d..904ed5d 100644
--- a/debian/apt-daily.service
+++ b/debian/apt-daily.service
@@ -1,6 +1,7 @@
 [Unit]
 Description=Daily apt activities
 Documentation=man:apt(8)
+ConditionACPower=true
 
 [Service]
 Type=oneshot
diff --git a/debian/apt.apt-compat.cron.daily b/debian/apt.apt-compat.cron.daily
index 1ea8430..e7d76d2 100644
--- a/debian/apt.apt-compat.cron.daily
+++ b/debian/apt.apt-compat.cron.daily
@@ -11,6 +11,23 @@ if [ -d /run/systemd/system ]; then
     exit 0
 fi
 
+check_power()
+{
+    # laptop check, on_ac_power returns:
+    #       0 (true)    System is on main power
+    #       1 (false)   System is not on main power
+    #       255 (false) Power status could not be determined
+    # Desktop systems always return 255 it seems
+    if which on_ac_power >/dev/null 2>&1; then
+        on_ac_power
+        POWER=$?
+        if [ $POWER -eq 1 ]; then
+            return 1
+        fi
+    fi
+    return 0
+}
+
 # sleep for a random interval of time (default 30min)
 # (some code taken from cron-apt, thanks)
 random_sleep()
@@ -28,6 +45,9 @@ random_sleep()
     sleep $TIME
 }
 
+# ensure we don't do this on battery
+check_power || exit 0
+
 # run daily job
 random_sleep
 exec /usr/lib/apt/apt.systemd.daily
diff --git a/debian/apt.systemd.daily b/debian/apt.systemd.daily
index 15024c8..d034d8c 100644
--- a/debian/apt.systemd.daily
+++ b/debian/apt.systemd.daily
@@ -290,27 +290,6 @@ debug_echo()
     fi
 }
 
-check_power()
-{
-    # laptop check, on_ac_power returns:
-    #       0 (true)    System is on main power
-    #       1 (false)   System is not on main power
-    #       255 (false) Power status could not be determined
-    # Desktop systems always return 255 it seems
-    if which on_ac_power >/dev/null 2>&1; then
-        on_ac_power
-        POWER=$?
-        if [ $POWER -eq 1 ]; then
-	    debug_echo "exit: system NOT on main power"
-	    return 1
-        elif [ $POWER -ne 0 ]; then
-	    debug_echo "power status ($POWER) undetermined, continuing"
-        fi
-        debug_echo "system is on main power."
-    fi
-    return 0
-}
-
 # ------------------------ main ----------------------------
 
 if test -r /var/lib/apt/extended_states; then
@@ -358,8 +337,6 @@ if [ "$VERBOSE" -ge 3 ]; then
     set -x
 fi
 
-check_power || exit 0
-
 # check if we can lock the cache and if the cache is clean
 if which apt-get >/dev/null 2>&1 && ! eval apt-get check $XAPTOPT $XSTDERR ; then
     debug_echo "error encountered in cron job with \"apt-get check\"."
@@ -410,9 +387,6 @@ fi
 # deal with BackupArchiveInterval
 do_cache_backup $BackupArchiveInterval
 
-# ensure we don't do this on battery
-check_power || exit 0
-
 # include default system language so that "apt-get update" will
 # fetch the right translated package descriptions
 if [ -r /etc/default/locale ]; then
-- 
2.8.1


Reply to: