From 1909e5fa540e11d9fa010dc0b578e45f095dbd15 Mon Sep 17 00:00:00 2001 From: Alex Peterson <26804013+AMZN-alexpete@users.noreply.github.com> Date: Fri, 21 Jan 2022 13:09:09 -0800 Subject: [PATCH] Handle case where engine.json missing or corrupt (#7049) Signed-off-by: Alex Peterson <26804013+AMZN-alexpete@users.noreply.github.com> --- Code/Tools/ProjectManager/Source/Application.cpp | 9 ++++----- Code/Tools/ProjectManager/Source/PythonBindings.cpp | 3 +++ scripts/o3de/o3de/manifest.py | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Code/Tools/ProjectManager/Source/Application.cpp b/Code/Tools/ProjectManager/Source/Application.cpp index 08a812999f..7ccd855b7e 100644 --- a/Code/Tools/ProjectManager/Source/Application.cpp +++ b/Code/Tools/ProjectManager/Source/Application.cpp @@ -196,9 +196,7 @@ namespace O3DE::ProjectManager return true; } - bool forceRegistration = false; - - // check if an engine with this name is already registered + // check if an engine with this name is already registered and has a valid engine.json auto existingEngineResult = m_pythonBindings->GetEngineInfo(engineInfo.m_name); if (existingEngineResult) { @@ -230,10 +228,11 @@ namespace O3DE::ProjectManager // user elected not to change the name or force registration return false; } - - forceRegistration = true; } + // always force register in case there is an engine registered in o3de_manifest.json, but + // the engine.json is missing or corrupt in which case GetEngineInfo() fails + constexpr bool forceRegistration = true; auto registerOutcome = m_pythonBindings->SetEngineInfo(engineInfo, forceRegistration); if (!registerOutcome) { diff --git a/Code/Tools/ProjectManager/Source/PythonBindings.cpp b/Code/Tools/ProjectManager/Source/PythonBindings.cpp index 00ece7396d..13fa73625c 100644 --- a/Code/Tools/ProjectManager/Source/PythonBindings.cpp +++ b/Code/Tools/ProjectManager/Source/PythonBindings.cpp @@ -459,6 +459,9 @@ namespace O3DE::ProjectManager if (!pybind11::isinstance(enginePathResult)) { engineInfo = EngineInfoFromPath(enginePathResult); + + // it is possible an engine is registered in o3de_manifest.json but the engine.json is + // missing or corrupt in which case we do not consider it a registered engine } }); diff --git a/scripts/o3de/o3de/manifest.py b/scripts/o3de/o3de/manifest.py index c06a4d12fc..51b6eaf226 100644 --- a/scripts/o3de/o3de/manifest.py +++ b/scripts/o3de/o3de/manifest.py @@ -608,7 +608,7 @@ def get_registered(engine_name: str = None, except json.JSONDecodeError as e: logger.warning(f'{engine_json} failed to load: {str(e)}') else: - this_engines_name = engine_json_data['engine_name'] + this_engines_name = engine_json_data.get('engine_name','') if this_engines_name == engine_name: return engine_path engines_path = json_data.get('engines_path', {})