check.d/50.updates: Output the list of updates.
[rcheck] / check.d / 50.updates
index 9eb27a4..947610d 100755 (executable)
@@ -26,9 +26,9 @@ def cache_up_to_date_p():
   return now - last < 86400
 
 def upgradable_packages():
-  """Return a list of packages for which updates are available."""
+  """Return a set of packages for which updates are available."""
   cache = AC.Cache()
-  return [pkg for pkg in cache if pkg.is_upgradable]
+  return set([pkg for pkg in cache if pkg.is_upgradable])
 
 def security_updates_p(pkg):
   """Answer whether any update for PKG is security-relevant."""
@@ -59,10 +59,12 @@ if updates:
   plural = len(updates) != 1
   print 'I: updates available for %d %s' % \
         (len(updates), plural and 'packages' or 'package')
-sec = [pkg for pkg in updates if security_updates_p(pkg)]
+sec = set(pkg for pkg in updates if security_updates_p(pkg))
 if sec:
   plural = len(sec) != 1
   print 'W: security updates available for %d %s' % \
         (len(sec), plural and 'packages' or 'package')
+for pkg in sorted(updates, key = lambda p: p.name):
+  print 'I: %s %s' % (pkg in sec and '!' or ' ', pkg.name)
 
 ###----- That's all, folks --------------------------------------------------