Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/sugar/bundle/activitybundle.py29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/sugar/bundle/activitybundle.py b/src/sugar/bundle/activitybundle.py
index 268576e..2bec54f 100644
--- a/src/sugar/bundle/activitybundle.py
+++ b/src/sugar/bundle/activitybundle.py
@@ -323,7 +323,7 @@ class ActivityBundle(Bundle):
os.makedirs(mime_pkg_dir)
installed_mime_path = os.path.join(mime_pkg_dir,
'%s.xml' % self._bundle_id)
- os.symlink(mime_path, installed_mime_path)
+ self._symlink(mime_path, installed_mime_path)
os.spawnlp(os.P_WAIT, 'update-mime-database',
'update-mime-database', mime_dir)
@@ -339,16 +339,27 @@ class ActivityBundle(Bundle):
mime_type.replace('/', '-'))
svg_file = mime_icon_base + '.svg'
info_file = mime_icon_base + '.icon'
- if os.path.isfile(svg_file):
- os.symlink(svg_file,
- os.path.join(installed_icons_dir,
- os.path.basename(svg_file)))
- if os.path.isfile(info_file):
- os.symlink(info_file,
- os.path.join(installed_icons_dir,
- os.path.basename(info_file)))
+ self._symlink(svg_file,
+ os.path.join(installed_icons_dir,
+ os.path.basename(svg_file)))
+ self._symlink(info_file,
+ os.path.join(installed_icons_dir,
+ os.path.basename(info_file)))
+
return install_path
+ def _symlink(self, src, dst):
+ if not os.path.isfile(src):
+ return
+ if not os.path.islink(dst) and os.path.exists(dst):
+ raise RuntimeError('Do not remove %s if it was not '
+ 'installed by sugar', dst)
+ logging.debug('Link resource %s to %s', src, dst)
+ if os.path.lexists(dst):
+ logging.debug('Relink %s', dst)
+ os.unlink(dst)
+ os.symlink(src, dst)
+
def uninstall(self, install_path, force=False):
if os.path.islink(install_path):
# Don't remove the actual activity dir if it's a symbolic link