Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLucian 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)
commit6e85e7decc41e409ed617a7283e93c6d8b632c93 (patch)
tree70a3414951e3f86128e6db8ca85767c21f147cc5
parent7131bdbf0fddae1c50b0b4bc0f6762b5195480b3 (diff)
Fix userscript overwrite bug, remove dependency on sugar.activity.bundlebuilder.list_files.
-rw-r--r--ssb.py31
-rw-r--r--usercode.py5
2 files changed, 29 insertions, 7 deletions
diff --git a/ssb.py b/ssb.py
index d75a89d..7758b91 100644
--- a/ssb.py
+++ b/ssb.py
@@ -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):