Merge pull request #1610 from aws-lumberyard-dev/LYN-4507

Remove deleted projects from project manager
This commit is contained in:
AMZN-Phil
2021-07-02 10:16:06 -07:00
committed by GitHub
6 changed files with 66 additions and 23 deletions
@@ -115,6 +115,8 @@ namespace O3DE::ProjectManager
QFrame* ProjectsScreen::CreateProjectsContent(QString buildProjectPath, ProjectButton** projectButton)
{
RemoveInvalidProjects();
QFrame* frame = new QFrame(this);
frame->setObjectName("projectsContent");
{
@@ -495,6 +497,11 @@ namespace O3DE::ProjectManager
return displayFirstTimeContent;
}
bool ProjectsScreen::RemoveInvalidProjects()
{
return PythonBindingsInterface::Get()->RemoveInvalidProjects();
}
bool ProjectsScreen::StartProjectBuild(const ProjectInfo& projectInfo)
{
if (ProjectUtils::IsVS2019Installed())
@@ -62,6 +62,7 @@ namespace O3DE::ProjectManager
ProjectButton* CreateProjectButton(ProjectInfo& project, QLayout* flowLayout, bool processing = false);
void ResetProjectsContent();
bool ShouldDisplayFirstTimeContent();
bool RemoveInvalidProjects();
bool StartProjectBuild(const ProjectInfo& projectInfo);
QList<ProjectInfo>::iterator RequiresBuildProjectIterator(const QString& projectPath);
@@ -755,6 +755,21 @@ namespace O3DE::ProjectManager
});
}
bool PythonBindings::RemoveInvalidProjects()
{
bool removalResult = false;
bool result = ExecuteWithLock(
[&]
{
auto pythonRemovalResult = m_register.attr("remove_invalid_o3de_projects")();
// Returns an exit code so boolify it then invert result
removalResult = !pythonRemovalResult.cast<bool>();
});
return result && removalResult;
}
AZ::Outcome<void, AZStd::string> PythonBindings::UpdateProject(const ProjectInfo& projectInfo)
{
bool updateProjectSucceeded = false;
@@ -50,6 +50,7 @@ namespace O3DE::ProjectManager
AZ::Outcome<void, AZStd::string> UpdateProject(const ProjectInfo& projectInfo) override;
AZ::Outcome<void, AZStd::string> AddGemToProject(const QString& gemPath, const QString& projectPath) override;
AZ::Outcome<void, AZStd::string> RemoveGemFromProject(const QString& gemPath, const QString& projectPath) override;
bool RemoveInvalidProjects() override;
// ProjectTemplate
AZ::Outcome<QVector<ProjectTemplateInfo>> GetProjectTemplates(const QString& projectPath = {}) override;
@@ -141,6 +141,11 @@ namespace O3DE::ProjectManager
*/
virtual AZ::Outcome<void, AZStd::string> RemoveGemFromProject(const QString& gemPath, const QString& projectPath) = 0;
/**
* Removes invalid projects from the manifest
*/
virtual bool RemoveInvalidProjects() = 0;
// Project Templates
+37 -23
View File
@@ -404,26 +404,27 @@ def register_project_path(json_data: dict,
if result != 0:
return result
# registering a project has the additional step of setting the project.json 'engine' field
this_engine_json = manifest.get_engine_json_data(engine_path=manifest.get_this_engine_path())
if not this_engine_json:
return 1
project_json_data = manifest.get_project_json_data(project_path=project_path)
if not project_json_data:
return 1
update_project_json = False
try:
update_project_json = project_json_data['engine'] != this_engine_json['engine_name']
except KeyError as e:
update_project_json = True
if update_project_json:
project_json_path = project_path / 'project.json'
project_json_data['engine'] = this_engine_json['engine_name']
utils.backup_file(project_json_path)
if not manifest.save_o3de_manifest(project_json_data, project_json_path):
if not remove:
# registering a project has the additional step of setting the project.json 'engine' field
this_engine_json = manifest.get_engine_json_data(engine_path=manifest.get_this_engine_path())
if not this_engine_json:
return 1
project_json_data = manifest.get_project_json_data(project_path=project_path)
if not project_json_data:
return 1
update_project_json = False
try:
update_project_json = project_json_data['engine'] != this_engine_json['engine_name']
except KeyError as e:
update_project_json = True
if update_project_json:
project_json_path = project_path / 'project.json'
project_json_data['engine'] = this_engine_json['engine_name']
utils.backup_file(project_json_path)
if not manifest.save_o3de_manifest(project_json_data, project_json_path):
return 1
return 0
@@ -656,6 +657,22 @@ def register(engine_path: pathlib.Path = None,
return result
def remove_invalid_o3de_projects(manifest_path: pathlib.Path = None) -> int:
if not manifest_path:
manifest_path = manifest.get_o3de_manifest()
json_data = manifest.load_o3de_manifest(manifest_path)
result = 0
for project in json_data['projects']:
if not validation.valid_o3de_project_json(pathlib.Path(project).resolve() / 'project.json'):
logger.warn(f"Project path {project} is invalid.")
# Attempt to unregister all invalid projects even if previous projects failed to unregister
# but combine the result codes of each command.
result = register(project_path=pathlib.Path(project), remove=True) or result
return result
def remove_invalid_o3de_objects() -> None:
json_data = manifest.load_o3de_manifest()
@@ -666,10 +683,7 @@ def remove_invalid_o3de_objects() -> None:
logger.warn(f"Engine path {engine_path} is invalid.")
register(engine_path=engine_path, remove=True)
for project in json_data['projects']:
if not validation.valid_o3de_project_json(pathlib.Path(project).resolve() / 'project.json'):
logger.warn(f"Project path {project} is invalid.")
register(project_path=project, remove=True)
remove_invalid_o3de_projects()
for gem in json_data['gems']:
if not validation.valid_o3de_gem_json(pathlib.Path(gem).resolve() / 'gem.json'):