Extensions: development functionality to mark all & clear marks

- Disable enabling on install when installing marked.
  This simplifies installing many packages from a repository which can
  be useful for testing.
- Fix an error installing marked when a local-only package was marked.
This commit is contained in:
Campbell Barton 2024-06-22 22:59:22 +10:00
parent 1ba06956e7
commit fc3e0507cc
3 changed files with 54 additions and 6 deletions

@ -675,8 +675,9 @@ def _pkg_marked_by_repo(pkg_manifest_all):
# While this should be prevented, any marked packages out of the range will cause problems, skip them.
if repo_index >= len(pkg_manifest_all):
continue
if (pkg_manifest := pkg_manifest_all[repo_index]) is None:
continue
pkg_manifest = pkg_manifest_all[repo_index]
item = pkg_manifest.get(pkg_id)
if item is None:
continue
@ -2713,7 +2714,7 @@ class EXTENSIONS_OT_package_mark_set(Operator):
class EXTENSIONS_OT_package_mark_clear(Operator):
bl_idname = "extensions.package_mark_clear"
bl_label = "Mark Package"
bl_label = "Clear Marked Package"
pkg_id: rna_prop_pkg_id
repo_index: rna_prop_repo_index
@ -2725,6 +2726,37 @@ class EXTENSIONS_OT_package_mark_clear(Operator):
return {'FINISHED'}
class EXTENSIONS_OT_package_mark_set_all(Operator):
bl_idname = "extensions.package_mark_set_all"
bl_label = "Mark All Packages"
def execute(self, _context):
repo_cache_store = repo_cache_store_ensure()
for repo_index, (
pkg_manifest_remote,
pkg_manifest_local,
) in enumerate(zip(
repo_cache_store.pkg_manifest_from_remote_ensure(error_fn=print),
repo_cache_store.pkg_manifest_from_local_ensure(error_fn=print),
)):
if pkg_manifest_remote is not None:
for pkg_id in pkg_manifest_remote.keys():
blender_extension_mark.add((pkg_id, repo_index))
if pkg_manifest_local is not None:
for pkg_id in pkg_manifest_local.keys():
blender_extension_mark.add((pkg_id, repo_index))
_preferences_ui_redraw()
return {'FINISHED'}
class EXTENSIONS_OT_package_mark_clear_all(Operator):
bl_idname = "extensions.package_mark_clear_all"
bl_label = "Clear All Marked Packages"
def execute(self, _context):
blender_extension_mark.clear()
class EXTENSIONS_OT_package_show_set(Operator):
bl_idname = "extensions.package_show_set"
bl_label = "Show Package Set"
@ -3048,6 +3080,8 @@ classes = (
EXTENSIONS_OT_package_show_clear,
EXTENSIONS_OT_package_mark_set,
EXTENSIONS_OT_package_mark_clear,
EXTENSIONS_OT_package_mark_set_all,
EXTENSIONS_OT_package_mark_clear_all,
EXTENSIONS_OT_package_show_settings,
EXTENSIONS_OT_package_obselete_marked,

@ -1202,8 +1202,22 @@ class USERPREF_MT_extensions_settings(Menu):
layout.separator()
layout.operator("extensions.package_install_marked", text="Install Marked", icon='IMPORT')
layout.operator("extensions.package_uninstall_marked", text="Uninstall Marked", icon='X')
layout.operator("extensions.package_mark_set_all", text="Mark All")
layout.operator("extensions.package_mark_clear_all", text="Unmark All")
layout.separator()
layout.operator(
"extensions.package_install_marked",
text="Install Marked",
icon='IMPORT',
).enable_on_install = False
layout.operator(
"extensions.package_uninstall_marked",
text="Uninstall Marked",
icon='X',
)
layout.operator("extensions.package_obsolete_marked")
layout.separator()

@ -2271,7 +2271,7 @@ def arg_handle_str_as_package_names(value: str) -> Sequence[str]:
# -----------------------------------------------------------------------------
# Argument Handlers ("build" command)
def generic_arg_built_split_platforms(subparse: argparse.ArgumentParser) -> None:
def generic_arg_build_split_platforms(subparse: argparse.ArgumentParser) -> None:
subparse.add_argument(
"--split-platforms",
dest="split_platforms",
@ -3864,7 +3864,7 @@ def argparse_create_author_build(
generic_arg_package_source_dir(subparse)
generic_arg_package_output_dir(subparse)
generic_arg_package_output_filepath(subparse)
generic_arg_built_split_platforms(subparse)
generic_arg_build_split_platforms(subparse)
generic_arg_verbose(subparse)
if args_internal: