diff options
author | Lucian Branescu Mihaila <lucian.branescu@gmail.com> | 2009-07-20 13:10:30 (GMT) |
---|---|---|
committer | Lucian Branescu Mihaila <lucian.branescu@gmail.com> | 2009-07-20 13:10:30 (GMT) |
commit | 6e85e7decc41e409ed617a7283e93c6d8b632c93 (patch) | |
tree | 70a3414951e3f86128e6db8ca85767c21f147cc5 | |
parent | 7131bdbf0fddae1c50b0b4bc0f6762b5195480b3 (diff) |
Fix userscript overwrite bug, remove dependency on sugar.activity.bundlebuilder.list_files.
-rw-r--r-- | ssb.py | 31 | ||||
-rw-r--r-- | usercode.py | 5 |
2 files changed, 29 insertions, 7 deletions
@@ -23,21 +23,40 @@ import logging import functools from sugar.activity import activity -from sugar.activity import bundlebuilder from sugar.bundle.activitybundle import ActivityBundle from sugar.datastore import datastore from sugar import profile DOMAIN_PREFIX = 'org.sugarlabs.ssb' +IGNORE_DIRS = ['dist', '.git'] +IGNORE_FILES = ['.gitignore', 'MANIFEST', '*.pyc', '*~', '*.bak', + 'pseudo.po', '.DS_STORE'] + def get_is_ssb(activity): '''determine if the activity is an SSB''' return activity.get_bundle_id().startswith(DOMAIN_PREFIX) -# freeze some arguments, equivalent to def list_files(path): ... -list_files = functools.partial(bundlebuilder.list_files, - ignore_dirs=bundlebuilder.IGNORE_DIRS, - ignore_files=bundlebuilder.IGNORE_FILES.append('.DS_STORE')) +def list_files(base_dir, ignore_dirs=None, ignore_files=None): + result = [] + + base_dir = os.path.abspath(base_dir) + + for root, dirs, files in os.walk(base_dir): + if ignore_files: + for pattern in ignore_files: + files = [f for f in files if not fnmatch(f, pattern)] + + rel_path = root[len(base_dir) + 1:] + for f in files: + result.append(os.path.join(rel_path, f)) + + if ignore_dirs and root == base_dir: + for ignore in ignore_dirs: + if ignore in dirs: + dirs.remove(ignore) + + return result def remove_paths(paths, root=None): '''remove all paths in the list, fail silently''' @@ -132,7 +151,7 @@ class SSBCreator(object): root=os.path.join(ssb_data_path, 'gecko')) # create MANIFEST - files = list_files(self.ssb_path) + files = list_files(self.ssb_path, IGNORE_DIRS, IGNORE_FILES) f = open(os.path.join(self.ssb_path, 'MANIFEST'), 'w') for i in files: f.write(i+'\n') diff --git a/usercode.py b/usercode.py index 0b62177..21c2fe6 100644 --- a/usercode.py +++ b/usercode.py @@ -205,7 +205,10 @@ def add_script(location): logging.debug('##### %s -> %s' % (location_uri.spec, file_uri.spec)) - os.remove(file_path) + # make sure the file doesn't already exist + try: os.remove(file_path) + except OSError: pass + browser_persist.saveURI(location_uri, None, None, None, None, file_uri) def script_exists(location): |