[Sugar-devel] [PATCH] Avoid popping an empty list in the software updater.

James Cameron quozl at laptop.org
Mon May 24 23:37:29 EDT 2010


On Sun, May 23, 2010 at 02:50:16PM -0400, Michael Stone wrote:
> When you run Sugar with no activities installed,
> UpdateModel._bundles_to_check is empty. Attempting to unconditionally
> pop this list results in an IndexError.  Instead, the updater should
> stop trying to update bundles when it determines that it has no more
> bundles to check.
> 
> Signed-off-by: Michael Stone <michael at laptop.org>

It will work where it is, but the check could go another two lines
higher up, or even in check_updates.

It's also odd that you're returning False and the function otherwise
returns None.  gobject.idle_add is specified as removing the function
from the main loop when False is returned, but I've tested and it is
doing so with a None return as well.

The patch below (on top of your two patches) implements what I mean:

diff --git a/main/extensions/cpsection/updater/model.py b/main/extensions/cpsection/updater/model.py
index 5bb8cf4..9bf0330 100755
--- a/main/extensions/cpsection/updater/model.py
+++ b/main/extensions/cpsection/updater/model.py
@@ -64,14 +64,13 @@ class UpdateModel(gobject.GObject):
     def check_updates(self):
         self.updates = []
         self._bundles_to_check = list(bundleregistry.get_registry())
-        self._check_next_update()
+        if len(self._bundles_to_check) > 0:
+            self._check_next_update()
 
     def _check_next_update(self):
         total = len(bundleregistry.get_registry())
         current = total - len(self._bundles_to_check)
 
-        if len(self._bundles_to_check) == 0:
-            return False
         bundle = self._bundles_to_check.pop()
         self.emit('progress', UpdateModel.ACTION_CHECKING, bundle.get_name(),
                   current, total)
-- 
James Cameron
http://quozl.linux.org.au/


More information about the Sugar-devel mailing list