LifePlay-Revival/Tools/AuditScriptDeps.py
2026-10-02 01:47:45 +02:00

35 lines
1.5 KiB
Python

# Lot O1 : modules de code (/Script/...) et paquets de plugins (/<Plugin>/...) dont dependent les assets de /Game.
# Lecture seule. Sortie : Saved/Audit/script_deps.json {module: [assets qui en dependent]}
#
# Usage :
# UnrealEditor-Cmd.exe <projet> -run=pythonscript -script="<projet>/Tools/AuditScriptDeps.py" -unattended -nopause -nosplash
import json
import os
import unreal
registry = unreal.AssetRegistryHelpers.get_asset_registry()
registry.search_all_assets(True)
assets = registry.get_assets_by_path("/Game", recursive=True)
opts = unreal.AssetRegistryDependencyOptions(include_soft_package_references=True, include_hard_package_references=True,
include_searchable_names=False, include_soft_management_references=False,
include_hard_management_references=False)
deps = {}
seen = set()
for a in assets:
pkg = str(a.package_name)
if pkg in seen:
continue
seen.add(pkg)
for d in registry.get_dependencies(a.package_name, opts) or []:
d = str(d)
if d.startswith("/Game/"):
continue
key = d if d.startswith("/Script/") else "/" + d.split("/")[1]
deps.setdefault(key, []).append(pkg)
out = os.path.join(unreal.Paths.project_saved_dir(), "Audit", "script_deps.json")
os.makedirs(os.path.dirname(out), exist_ok=True)
with open(out, "w", encoding="utf-8") as f:
json.dump({k: sorted(set(v)) for k, v in sorted(deps.items())}, f, indent=1)
unreal.log_warning("AuditScriptDeps : {} modules -> {}".format(len(deps), out))