Merge pull request #3964 from aws-lumberyard-dev/carlitosan/development
Upgrades and stability fixes for version explorer
This commit is contained in:
@@ -92,7 +92,7 @@ namespace ScriptCanvasEditor
|
||||
|
||||
void UpgradeTool::closeEvent(QCloseEvent* event)
|
||||
{
|
||||
m_keepEditorAlive.reset();
|
||||
// m_keepEditorAlive.reset();
|
||||
|
||||
DisconnectBuses();
|
||||
|
||||
@@ -110,7 +110,7 @@ namespace ScriptCanvasEditor
|
||||
{
|
||||
setWindowFlag(Qt::WindowCloseButtonHint, false);
|
||||
|
||||
m_keepEditorAlive = AZStd::make_unique<EditorKeepAlive>();
|
||||
// m_keepEditorAlive = AZStd::make_unique<EditorKeepAlive>();
|
||||
|
||||
UpdateSettings();
|
||||
|
||||
@@ -581,74 +581,6 @@ namespace ScriptCanvasEditor
|
||||
accept();
|
||||
}
|
||||
|
||||
template <typename AssetType>
|
||||
AZ::Entity* UpgradeGraph(AZ::Data::Asset<AZ::Data::AssetData>& asset, UpgradeTool* upgradeTool)
|
||||
{
|
||||
AssetType* scriptCanvasAsset = asset.GetAs<AssetType>();
|
||||
AZ_Assert(scriptCanvasAsset, "Unable to get the asset of type: %s", azrtti_typeid<AssetType>().template ToString<AZStd::string>().c_str());
|
||||
|
||||
if (!scriptCanvasAsset)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
AZ::Entity* scriptCanvasEntity = scriptCanvasAsset->GetScriptCanvasEntity();
|
||||
AZ_Assert(scriptCanvasEntity, "The Script Canvas asset must have a valid entity");
|
||||
if (!scriptCanvasEntity)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto graphComponent = scriptCanvasEntity->FindComponent<ScriptCanvasEditor::Graph>();
|
||||
AZ_Assert(graphComponent, "The Script Canvas entity must have a Graph component");
|
||||
|
||||
bool isLatest = graphComponent->GetVersion().IsLatest();
|
||||
if (isLatest)
|
||||
{
|
||||
++upgradeTool->SkippedGraphCount();
|
||||
|
||||
// No need to upgrade
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
AZ::Entity* queryEntity = nullptr;
|
||||
AZ::ComponentApplicationBus::BroadcastResult(queryEntity, &AZ::ComponentApplicationRequests::FindEntity, scriptCanvasEntity->GetId());
|
||||
if (queryEntity)
|
||||
{
|
||||
if (queryEntity->GetState() == AZ::Entity::State::Active)
|
||||
{
|
||||
queryEntity->Deactivate();
|
||||
}
|
||||
|
||||
scriptCanvasEntity = queryEntity;
|
||||
}
|
||||
|
||||
if (scriptCanvasEntity->GetState() == AZ::Entity::State::Constructed)
|
||||
{
|
||||
scriptCanvasEntity->Init();
|
||||
}
|
||||
|
||||
if (scriptCanvasEntity->GetState() == AZ::Entity::State::Init)
|
||||
{
|
||||
scriptCanvasEntity->Activate();
|
||||
}
|
||||
|
||||
if (graphComponent)
|
||||
{
|
||||
if (!graphComponent->UpgradeGraph(asset))
|
||||
{
|
||||
++upgradeTool->SkippedGraphCount();
|
||||
}
|
||||
else
|
||||
{
|
||||
++upgradeTool->UpgradedGraphCount();
|
||||
}
|
||||
}
|
||||
|
||||
return scriptCanvasEntity;
|
||||
}
|
||||
|
||||
void UpgradeTool::SaveLog()
|
||||
{
|
||||
AZStd::string outputFileName = AZStd::string::format("@devroot@/ScriptCanvasUpgradeReport.html");
|
||||
@@ -688,29 +620,9 @@ namespace ScriptCanvasEditor
|
||||
outputFile.Close();
|
||||
}
|
||||
|
||||
AZ::Entity* UpgradeTool::AssetUpgradeJob(AZ::Data::Asset<AZ::Data::AssetData>& asset)
|
||||
AZ::Entity* UpgradeTool::AssetUpgradeJob(AZ::Data::Asset<AZ::Data::AssetData>&)
|
||||
{
|
||||
using namespace ScriptCanvasEditor;
|
||||
|
||||
AZ_Assert(asset.IsReady(), "The asset must be ready by now");
|
||||
|
||||
AZStd::lock_guard<AZStd::recursive_mutex> myLocker(m_mutex);
|
||||
|
||||
AZ::Entity* scriptCanvasEntity = nullptr;
|
||||
if (asset.GetType() == azrtti_typeid<ScriptCanvasAsset>())
|
||||
{
|
||||
scriptCanvasEntity = UpgradeGraph<ScriptCanvasAsset>(asset, this);
|
||||
}
|
||||
|
||||
if (!scriptCanvasEntity)
|
||||
{
|
||||
// This may happen if the graph failed or did not need to upgrade
|
||||
AZ_TracePrintf("Script Canvas", "%s .. up to date!\n", asset.GetHint().c_str());
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// The rest will happen when we get notified that the graph is done.
|
||||
return scriptCanvasEntity;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void UpgradeTool::RetryMove(AZ::Data::Asset<AZ::Data::AssetData>& asset, const AZStd::string& source, const AZStd::string& target)
|
||||
@@ -780,28 +692,6 @@ namespace ScriptCanvasEditor
|
||||
return false;
|
||||
}
|
||||
|
||||
ScriptCanvasEditor::EditorKeepAlive::EditorKeepAlive()
|
||||
{
|
||||
ISystem* system = nullptr;
|
||||
CrySystemRequestBus::BroadcastResult(system, &CrySystemRequestBus::Events::GetCrySystem);
|
||||
|
||||
m_edKeepEditorActive = system->GetIConsole()->GetCVar("ed_KeepEditorActive");
|
||||
|
||||
if (m_edKeepEditorActive)
|
||||
{
|
||||
m_keepEditorActive = m_edKeepEditorActive->GetIVal();
|
||||
m_edKeepEditorActive->Set(1);
|
||||
}
|
||||
}
|
||||
|
||||
ScriptCanvasEditor::EditorKeepAlive::~EditorKeepAlive()
|
||||
{
|
||||
if (m_edKeepEditorActive)
|
||||
{
|
||||
m_edKeepEditorActive->Set(m_keepEditorActive);
|
||||
}
|
||||
}
|
||||
|
||||
#include <Editor/View/Windows/Tools/UpgradeTool/moc_UpgradeTool.cpp>
|
||||
|
||||
}
|
||||
|
||||
@@ -38,18 +38,7 @@ namespace Ui
|
||||
|
||||
namespace ScriptCanvasEditor
|
||||
{
|
||||
//! Scoped utility to set and restore the "ed_KeepEditorActive" CVar in order to allow
|
||||
//! the upgrade tool to work even if the editor is not in the foreground
|
||||
class EditorKeepAlive
|
||||
{
|
||||
public:
|
||||
EditorKeepAlive();
|
||||
~EditorKeepAlive();
|
||||
|
||||
private:
|
||||
int m_keepEditorActive;
|
||||
ICVar* m_edKeepEditorActive;
|
||||
};
|
||||
class KeepEditorAlive;
|
||||
|
||||
//! A tool that collects and upgrades all Script Canvas graphs in the asset catalog
|
||||
class UpgradeTool
|
||||
@@ -140,7 +129,7 @@ namespace ScriptCanvasEditor
|
||||
AZStd::unique_ptr<Ui::UpgradeTool> m_ui;
|
||||
AZStd::recursive_mutex m_mutex;
|
||||
|
||||
AZStd::unique_ptr<EditorKeepAlive> m_keepEditorAlive;
|
||||
// AZStd::unique_ptr<EditorKeepAlive> m_keepEditorAlive;
|
||||
|
||||
AZStd::vector<AZStd::string> m_logs;
|
||||
|
||||
|
||||
+408
-332
File diff suppressed because it is too large
Load Diff
@@ -20,11 +20,11 @@ AZ_POP_DISABLE_WARNING
|
||||
#include <AzQtComponents/Components/StyledDialog.h>
|
||||
|
||||
#include <ScriptCanvas/Bus/EditorScriptCanvasBus.h>
|
||||
#include <ScriptCanvas/Core/Core.h>
|
||||
|
||||
#include <ISystem.h>
|
||||
#include <IConsole.h>
|
||||
#include <AzCore/Debug/TraceMessageBus.h>
|
||||
#include "UpgradeTool.h"
|
||||
#endif
|
||||
|
||||
class QPushButton;
|
||||
@@ -41,6 +41,19 @@ namespace AzQtComponents
|
||||
|
||||
namespace ScriptCanvasEditor
|
||||
{
|
||||
//! Scoped utility to set and restore the "ed_KeepEditorActive" CVar in order to allow
|
||||
//! the upgrade tool to work even if the editor is not in the foreground
|
||||
class EditorKeepAlive
|
||||
{
|
||||
public:
|
||||
EditorKeepAlive();
|
||||
~EditorKeepAlive();
|
||||
|
||||
private:
|
||||
int m_keepEditorActive;
|
||||
ICVar* m_edKeepEditorActive;
|
||||
};
|
||||
|
||||
//! A tool that collects and upgrades all Script Canvas graphs in the asset catalog
|
||||
class VersionExplorer
|
||||
: public AzQtComponents::StyledDialog
|
||||
@@ -71,14 +84,10 @@ namespace ScriptCanvasEditor
|
||||
Inactive,
|
||||
Backup,
|
||||
Scan,
|
||||
Upgrade
|
||||
Upgrade,
|
||||
};
|
||||
ProcessState m_state = ProcessState::Inactive;
|
||||
|
||||
bool DoBackup();
|
||||
void BackupAsset(const AZ::Data::AssetInfo& assetInfo);
|
||||
void BackupComplete();
|
||||
|
||||
void DoScan();
|
||||
void ScanComplete(const AZ::Data::Asset<AZ::Data::AssetData>&);
|
||||
|
||||
@@ -97,24 +106,21 @@ namespace ScriptCanvasEditor
|
||||
bool OnPreWarning(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override;
|
||||
//
|
||||
|
||||
void CaptureLogFromTraceBus(const char* window, const char* message);
|
||||
bool CaptureLogFromTraceBus(const char* window, const char* message);
|
||||
|
||||
enum class OperationResult
|
||||
{
|
||||
Success,
|
||||
SkipBackup,
|
||||
BackupSuccess,
|
||||
BackupFail,
|
||||
BackupFail_CreateFolder,
|
||||
BackupFail_FileNotFound
|
||||
Failure,
|
||||
};
|
||||
|
||||
void GraphUpgradeComplete(const AZ::Data::Asset<AZ::Data::AssetData>&, OperationResult result = OperationResult::Success);
|
||||
void GraphUpgradeComplete(const AZ::Data::Asset<AZ::Data::AssetData>, OperationResult result, AZStd::string_view message);
|
||||
|
||||
bool IsUpgrading() const;
|
||||
|
||||
bool m_inProgress = false;
|
||||
size_t m_currentAssetIndex = 0;
|
||||
// scan fields
|
||||
size_t m_currentAssetRowIndex = 0;
|
||||
size_t m_inspectedAssets = 0;
|
||||
size_t m_failedAssets = 0;
|
||||
size_t m_discoveredAssets = 0;
|
||||
@@ -129,7 +135,16 @@ namespace ScriptCanvasEditor
|
||||
|
||||
AZStd::unique_ptr<Ui::VersionExplorer> m_ui;
|
||||
|
||||
AZStd::unique_ptr<ScriptCanvas::Grammar::SettingsCache> m_settingsCache;
|
||||
|
||||
// upgrade fields
|
||||
AZStd::recursive_mutex m_mutex;
|
||||
bool m_upgradeComplete = false;
|
||||
AZ::Data::Asset<AZ::Data::AssetData> m_upgradeAsset;
|
||||
int m_upgradeAssetIndex = 0;
|
||||
OperationResult m_upgradeResult;
|
||||
AZStd::string m_upgradeMessage;
|
||||
AZStd::string m_tmpFileName;
|
||||
|
||||
AZStd::unique_ptr<EditorKeepAlive> m_keepEditorAlive;
|
||||
|
||||
@@ -146,18 +161,19 @@ namespace ScriptCanvasEditor
|
||||
void FinalizeUpgrade();
|
||||
void FinalizeScan();
|
||||
|
||||
OperationResult BackupGraph(const AZ::Data::Asset<AZ::Data::AssetData>&);
|
||||
void BackupComplete();
|
||||
AZStd::string BackupGraph(const AZ::Data::Asset<AZ::Data::AssetData>&);
|
||||
void UpgradeGraph(const AZ::Data::Asset<AZ::Data::AssetData>&);
|
||||
|
||||
void RetryMove(const AZ::Data::Asset<AZ::Data::AssetData>& asset, const AZStd::string& source, const AZStd::string& target);
|
||||
|
||||
void GraphUpgradeCompleteUIUpdate(const AZ::Data::Asset<AZ::Data::AssetData>& asset, OperationResult result = OperationResult::Success);
|
||||
void GraphUpgradeCompleteUIUpdate(const AZ::Data::Asset<AZ::Data::AssetData> asset, OperationResult result, AZStd::string_view message);
|
||||
void OnGraphUpgradeComplete(AZ::Data::Asset<AZ::Data::AssetData>&, bool skipped = false) override;
|
||||
|
||||
void OnSourceFileReleased(AZ::Data::Asset<AZ::Data::AssetData> asset);
|
||||
|
||||
void closeEvent(QCloseEvent* event) override;
|
||||
|
||||
bool m_overwriteAll = false;
|
||||
void PerformMove(AZ::Data::Asset<AZ::Data::AssetData>& asset, const AZStd::string& source, const AZStd::string& target);
|
||||
void PerformMove(AZ::Data::Asset<AZ::Data::AssetData> asset, AZStd::string source, AZStd::string target, size_t remainingAttempts);
|
||||
|
||||
void Log(const char* format, ...);
|
||||
};
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>747</width>
|
||||
<height>687</height>
|
||||
<width>1363</width>
|
||||
<height>770</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
@@ -261,10 +261,10 @@
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="verticalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAlwaysOn</enum>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<property name="verticalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAlwaysOn</enum>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
@@ -273,6 +273,16 @@
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="5" column="0">
|
||||
<widget class="QCheckBox" name="makeBackupCheckbox">
|
||||
<property name="text">
|
||||
<string>Backup before upgrade</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="2">
|
||||
<widget class="QPushButton" name="scanButton">
|
||||
<property name="sizePolicy">
|
||||
@@ -311,36 +321,16 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QCheckBox" name="onlyShowOutdated">
|
||||
<item row="5" column="7">
|
||||
<widget class="QCheckBox" name="verbose">
|
||||
<property name="text">
|
||||
<string>Only show outdated graphs</string>
|
||||
<string>Verbose</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="6">
|
||||
<widget class="QCheckBox" name="forceUpgrade">
|
||||
<property name="text">
|
||||
<string>Force Upgrade</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="7">
|
||||
<widget class="QCheckBox" name="verbose">
|
||||
<property name="text">
|
||||
<string>Verbose</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="4">
|
||||
<widget class="QPushButton" name="closeButton">
|
||||
<property name="sizePolicy">
|
||||
@@ -354,16 +344,36 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QCheckBox" name="makeBackupCheckbox">
|
||||
<item row="5" column="1">
|
||||
<widget class="QCheckBox" name="onlyShowOutdated">
|
||||
<property name="text">
|
||||
<string>Backup before upgrade</string>
|
||||
<string>Only show outdated graphs</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="6">
|
||||
<widget class="QCheckBox" name="forceUpgrade">
|
||||
<property name="text">
|
||||
<string>Force Upgrade</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="8">
|
||||
<widget class="QCheckBox" name="updateReportingOnly">
|
||||
<property name="text">
|
||||
<string>Update Reporting Only</string>
|
||||
</property>
|
||||
<property name="tristate">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
|
||||
Reference in New Issue
Block a user