diff options
Diffstat (limited to 'src/sugar/bundle/activitybundle.py')
-rw-r--r-- | src/sugar/bundle/activitybundle.py | 29 |
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 |