From f5d45d6acd96b6324547accd138ca80fa20ff962 Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Fri, 17 Oct 2008 13:29:35 +0000 Subject: Make sure that manifests in bundles are only called at install and deployment time, so it doesnt impact shell startup performance --- (limited to 'src') diff --git a/src/sugar/bundle/activitybundle.py b/src/sugar/bundle/activitybundle.py index 65aa8fe..e74f471 100644 --- a/src/sugar/bundle/activitybundle.py +++ b/src/sugar/bundle/activitybundle.py @@ -21,12 +21,11 @@ from ConfigParser import ConfigParser import locale import os import tempfile +import logging from sugar.bundle.bundle import Bundle, \ MalformedBundleException, NotInstalledException -import logging - class ActivityBundle(Bundle): """A Sugar activity bundle @@ -52,6 +51,7 @@ class ActivityBundle(Bundle): self._show_launcher = True self._activity_version = 0 self._installation_time = os.stat(path).st_mtime + self._manifest = None info_file = self.get_file('activity/activity.info') if info_file is None: @@ -62,8 +62,15 @@ class ActivityBundle(Bundle): if linfo_file: self._parse_linfo(linfo_file) - self.manifest = None # This should be replaced by following function - self.read_manifest() + def _get_manifest(self): + if self._manifest is None: + self._manifest = self._read_manifest() + return self._manifest + + manifest = property(_get_manifest, None, None, + "NOTICE: this property is potentially quite slow, so better make sure " + "that it's not called at performance-critical points like shell or " + "activity startup.") def _raw_manifest(self): f = self.get_file("MANIFEST") @@ -75,14 +82,15 @@ class ActivityBundle(Bundle): f.close() return ret - def read_manifest(self): - """read_manifest: sets self.manifest to list of lines in MANIFEST, - with invalid lines replaced by empty lines. + def _read_manifest(self): + """return a list with the lines in MANIFEST, with invalid lines replaced + by empty lines. Since absolute order carries information on file history, it should be preserved. For instance, when renaming a file, you should leave the new name on the same line as the old one. """ + logging.debug('STARTUP: Reading manifest') lines = self._raw_manifest() # Remove trailing newlines, they do not help keep absolute position. @@ -112,7 +120,7 @@ class ActivityBundle(Bundle): logging.warning("Bundle %s: invalid entry in MANIFEST: %s" % (self._name,line)) - self.manifest = lines + return lines def get_files(self, manifest = None): files = [line for line in (manifest or self.manifest) if line] -- cgit v0.9.1