[Bf-blender-cvs] [94c48c8f923] soc-2017-package_manager: Simplify package list refreshing

gandalf3 noreply at git.blender.org
Tue Aug 29 11:45:40 CEST 2017


Commit: 94c48c8f9238901589e801f5bf4b8c28fc0f6049
Author: gandalf3
Date:   Mon Aug 28 21:49:16 2017 -0700
Branches: soc-2017-package_manager
https://developer.blender.org/rB94c48c8f9238901589e801f5bf4b8c28fc0f6049

Simplify package list refreshing

Currently no need for caching system, just regenerate it when asked

===================================================================

M	release/scripts/modules/bpkg/__init__.py
M	release/scripts/startup/bl_operators/package.py
M	release/scripts/startup/bl_ui/space_userpref.py

===================================================================

diff --git a/release/scripts/modules/bpkg/__init__.py b/release/scripts/modules/bpkg/__init__.py
index 4b1ef156c68..1971ae18ad1 100644
--- a/release/scripts/modules/bpkg/__init__.py
+++ b/release/scripts/modules/bpkg/__init__.py
@@ -11,8 +11,8 @@ from pathlib import Path
 from collections import OrderedDict
 import logging
 
-_tag_reindex = True
-_packages = {}
+# global package list, use refresh_packages() to refresh
+packages = {}
 
 def get_repo_storage_path() -> Path:
     """Return Path to the directory in which downloaded repository indices are
@@ -68,8 +68,8 @@ def _build_packagelist() -> dict: # {{{
 
     masterlist = {}
     display.pkg_errors.clear()
-    installed_packages = get_installed_packages(refresh=True)
-    known_repositories = get_repositories()
+    installed_packages = get_installed_packages(refresh=True)# {{{
+    known_repositories = get_repositories()# }}}
 
     for repo in known_repositories:
         for pkg in repo.packages:
@@ -90,17 +90,8 @@ def _build_packagelist() -> dict: # {{{
     return masterlist
 # }}}
 
-def tag_reindex():
-    """Set flag for rebuilding package list"""
-    global _tag_reindex
-    _tag_reindex = True
-
-def list_packages():
-    """Return same dict as _build_packagelist, but only re-build it when tag_reindex == True"""
-    global _packages
-    global _tag_reindex
-    if _tag_reindex:
-        _packages = _build_packagelist()
-        _tag_reindex = False
-
-    return _packages
+def refresh_packages():
+    """Update bpkg.packages"""
+    global packages
+    packages = _build_packagelist()
+    return packages
diff --git a/release/scripts/startup/bl_operators/package.py b/release/scripts/startup/bl_operators/package.py
index ee32c31dac1..233f31b5992 100644
--- a/release/scripts/startup/bl_operators/package.py
+++ b/release/scripts/startup/bl_operators/package.py
@@ -189,7 +189,7 @@ else:
                 messages.Aborted: self._subproc_aborted,
             }
 
-            package = bpkg.list_packages()[self.package_name].get_latest_version()
+            package = bpkg.packages[self.package_name].get_latest_version()
 
             import pathlib
 
@@ -216,7 +216,7 @@ else:
 
         def _subproc_success(self, success: messages.Success):
             self.report({'INFO'}, 'Package installed successfully')
-            bpkg.tag_reindex()
+            bpkg.refresh_packages()
             bpy.context.area.tag_redraw()
             self.quit()
 
@@ -262,7 +262,7 @@ else:
             import pathlib
             install_path = pathlib.Path(bpy.utils.user_resource('SCRIPTS', 'addons', create=True))
 
-            package = bpkg.list_packages()[self.package_name].get_latest_version()
+            package = bpkg.packages[self.package_name].get_latest_version()
 
             proc = mp_context.Process(target=subproc.uninstall_package,
                                            args=(self.pipe_subproc, package, install_path))
@@ -275,8 +275,8 @@ else:
 
         def _subproc_success(self, success: messages.Success):
             self.report({'INFO'}, 'Package uninstalled successfully')
+            bpkg.refresh_packages()
             bpy.context.area.tag_redraw()
-            bpkg.tag_reindex()
             self.quit()
 
         def report_process_died(self):
@@ -301,8 +301,8 @@ else:
             wm = context.window_manager
             self.repositories = wm.package_repositories
             if len(self.repositories) == 0:
-                bpkg.tag_reindex()
-                return {'CANCELLED'}
+                bpkg.refresh_packages()
+                return {'FINISHED'}
 
             PACKAGE_OT_refresh._running = True
             return super().invoke(context, event)
@@ -362,7 +362,7 @@ else:
         def _subproc_success(self, success: messages.Success):
             self.report({'INFO'}, 'Finished refreshing lists')
             bpkg.refresh_repository_props()
-            bpkg.tag_reindex()
+            bpkg.refresh_packages()
             self.quit()
 
         def _subproc_aborted(self, aborted: messages.Aborted):
@@ -522,7 +522,7 @@ else:
 
         def execute(self, context):
             import addon_utils
-            metapkg = bpkg.list_packages()[self.package_name]
+            metapkg = bpkg.packages[self.package_name]
 
 
             if not metapkg.installed:
@@ -561,7 +561,7 @@ else:
                 )
 
         def execute(self, context):
-            package = bpkg.list_packages()[self.package_name].get_display_version()
+            package = bpkg.packages[self.package_name].get_display_version()
 
             if not package.module_name:
                 self.log.error("Can't disable package without a module name")
@@ -569,7 +569,7 @@ else:
 
             ret = bpy.ops.wm.addon_disable(package.module_name)
             if ret == {'FINISHED'}:
-                bpkg.list_packages()[self.package_name].enabled = False
+                bpkg.packages[self.package_name].enabled = False
             return ret
 
 classes = (
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index 5528e4a1469..b26f7bf5abc 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -1637,15 +1637,17 @@ class USERPREF_PT_packages(Panel):
             row.scale_y = 10
 
 
+        # Things which only should be run once; initialize repository props and
+        # packages TODO: keeping it here in draw() means it's lazy loaded,
+        # perhaps it might be better to do asynchronously on startup
         if not USERPREF_PT_packages._started:
             USERPREF_PT_packages._started = True
             bpkg.refresh_repository_props()
+            bpkg.refresh_packages()
+            # Enable all repositories by default
             wm.package_repository_filter = set(repo['name'] for repo in wm.package_repositories)
 
-        # TODO: read repositories and installed packages synchronously for now
-        packages = bpkg.list_packages()
-
-        if len(packages) == 0:
+        if len(bpkg.packages) == 0:
             center_message(pkgzone, "No packages found")
             return
 
@@ -1665,11 +1667,11 @@ class USERPREF_PT_packages(Panel):
                 'repository': wm.package_repository_filter,
                 'installstate': wm.package_state_filter,
                 }
-        bpkg.display.displayed_packages = filter_packages(filters, packages)
+        bpkg.display.displayed_packages = filter_packages(filters, bpkg.packages)
 
         for pkgname in bpkg.display.displayed_packages:
             row = pkgzone.row()
-            draw_package(packages[pkgname], row)
+            draw_package(bpkg.packages[pkgname], row)
 
 
 class USERPREF_PT_addons(Panel):



More information about the Bf-blender-cvs mailing list