[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32113] trunk/blender/release/scripts: bugfix [#23978] Error installing addon

Campbell Barton ideasman42 at gmail.com
Sat Sep 25 08:36:02 CEST 2010


Revision: 32113
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32113
Author:   campbellbarton
Date:     2010-09-25 08:36:01 +0200 (Sat, 25 Sep 2010)

Log Message:
-----------
bugfix [#23978] Error installing addon

Modified Paths:
--------------
    trunk/blender/release/scripts/modules/bpy/utils.py
    trunk/blender/release/scripts/ui/space_userpref.py

Modified: trunk/blender/release/scripts/modules/bpy/utils.py
===================================================================
--- trunk/blender/release/scripts/modules/bpy/utils.py	2010-09-25 02:47:28 UTC (rev 32112)
+++ trunk/blender/release/scripts/modules/bpy/utils.py	2010-09-25 06:36:01 UTC (rev 32113)
@@ -441,18 +441,19 @@
 
     mod = _sys.modules.get(module_name)
 
-    if mod is None:
-        print("addon_disable", module_name, "not loaded, nothing to do")
-        return
+    # possible this addon is from a previous session and didnt load a module this time.
+    # so even if the module is not found, still disable the addon in the user prefs.
+    if mod:
+        mod.__addon_enabled__ = False
 
-    mod.__addon_enabled__ = False
+        try:
+            _bpy_types._unregister_module(module_name, free=False)  # dont free because we may want to enable again.
+            mod.unregister()
+        except:
+            traceback.print_exc()
+    else:
+        print("addon_disable", module_name, "not loaded")
 
-    try:
-        _bpy_types._unregister_module(module_name, free=False)  # dont free because we may want to enable again.
-        mod.unregister()
-    except:
-        traceback.print_exc()
-
     # could be in more then once, unlikely but better do this just incase.
     addons = _bpy.context.user_preferences.addons
 

Modified: trunk/blender/release/scripts/ui/space_userpref.py
===================================================================
--- trunk/blender/release/scripts/ui/space_userpref.py	2010-09-25 02:47:28 UTC (rev 32112)
+++ trunk/blender/release/scripts/ui/space_userpref.py	2010-09-25 06:36:01 UTC (rev 32113)
@@ -920,8 +920,8 @@
 
         split = layout.split(percentage=0.2)
         col = split.column()
+        col.prop(context.window_manager, "addon_search", text="", icon='VIEWZOOM')
         col.prop(context.window_manager, "addon_filter", text="Filter", expand=True)
-        col.prop(context.window_manager, "addon_search", text="", icon='VIEWZOOM')
 
         col = split.column()
 
@@ -1010,15 +1010,19 @@
             col.column().label(text="Missing script files")
 
             module_names = {mod.__name__ for mod, info in addons}
-            for ext in sorted(missing_modules):
+            for module_name in sorted(missing_modules):
+                is_enabled = module_name in used_ext
                 # Addon UI Code
                 box = col.column().box()
                 colsub = box.column()
                 row = colsub.row()
 
-                row.label(text=ext, icon='ERROR')
-                row.operator("wm.addon_disable").module = ext
+                row.label(text=module_name, icon='ERROR')
 
+                if is_enabled:
+                    row.operator("wm.addon_disable", icon='CHECKBOX_HLT', text="", emboss=False).module = module_name
+
+
 from bpy.props import *
 
 
@@ -1093,6 +1097,7 @@
         pyfile = self.filepath
 
         path_addons = bpy.utils.script_paths("addons")[-1]
+        contents = set(os.listdir(path_addons))
 
         #check to see if the file is in compressed format (.zip)
         if zipfile.is_zipfile(pyfile):
@@ -1121,6 +1126,23 @@
                 traceback.print_exc()
                 return {'CANCELLED'}
 
+        # disable any addons we may have enabled previously and removed.
+        # this is unlikely but do just incase. bug [#23978]
+        addons_new = set(os.listdir(path_addons)) - contents
+        for new_addon in addons_new:
+            bpy.utils.addon_disable(os.path.splitext(new_addon)[0])
+
+        # possible the zip contains multiple addons, we could disallow this
+        # but for now just use the first
+        for mod in USERPREF_PT_addons._addon_list():
+            if mod.__name__ in addons_new:
+                info = addon_info_get(mod)
+
+                # show the newly installed addon.
+                context.window_manager.addon_filter = 'All'
+                context.window_manager.addon_search = info["name"]
+                break
+
         # TODO, should not be a warning.
         # self.report({'WARNING'}, "File installed to '%s'\n" % path_dest)
         return {'FINISHED'}





More information about the Bf-blender-cvs mailing list