Merge pull request #2250 from aws-lumberyard-dev/SettingsRegistryBuilderGemRegistryFix
Fixed the SettingsRegistryBuilder not merging the Registry directories within Gems
This commit is contained in:
@@ -263,9 +263,15 @@ namespace AssetProcessor
|
||||
return;
|
||||
}
|
||||
|
||||
using FixedValueString = AZ::SettingsRegistryInterface::FixedValueString;
|
||||
// Placeholder Key used by the local Settings Registry for storing all Gems SourcePaths
|
||||
// array entries.
|
||||
constexpr auto PlaceholderGemKey = FixedValueString(AZ::SettingsRegistryMergeUtils::OrganizationRootKey)
|
||||
+ "/Gems/__SettingsRegistryBuilderPlaceholder";
|
||||
|
||||
AZ::SettingsRegistryImpl registry;
|
||||
|
||||
// Seed the local settings registry using the AssetProcessor settings registry
|
||||
// Seed the local settings registry using the AssetProcessor Settings Registry
|
||||
if (auto settingsRegistry = AZ::Interface<AZ::SettingsRegistryInterface>::Get(); settingsRegistry != nullptr)
|
||||
{
|
||||
AZStd::array settingsToCopy{
|
||||
@@ -279,18 +285,55 @@ namespace AssetProcessor
|
||||
|
||||
for (const auto& settingsKey : settingsToCopy)
|
||||
{
|
||||
AZ::SettingsRegistryInterface::FixedValueString settingsValue;
|
||||
FixedValueString settingsValue;
|
||||
[[maybe_unused]] bool settingsCopied = settingsRegistry->Get(settingsValue, settingsKey)
|
||||
&& registry.Set(settingsKey, settingsValue);
|
||||
AZ_Warning("Settings Registry Builder", settingsCopied, "Unable to copy setting %s from AssetProcessor settings registry"
|
||||
" to local settings registry", settingsKey.c_str());
|
||||
}
|
||||
|
||||
// The purpose of this section is to copy the Gem's SourcePaths from the Global Settings Registry
|
||||
// the local SettingsRegistry. The reason this is needed is so that the call to
|
||||
// `MergeSettingsToRegistry_GemRegistries` below is able to locate each gem's "<gem-root>/Registry" folder
|
||||
// that will be merged into the bootstrap.game.<configuration>.<platform>.setreg file
|
||||
// This is used by the GameLauncher applications to read from a single merged .setreg file
|
||||
// containing the settings needed to run a game/simulation without have access to the source code base registry
|
||||
AZStd::vector<AzFramework::GemInfo> gemInfos;
|
||||
size_t pathIndex{};
|
||||
if (AzFramework::GetGemsInfo(gemInfos, *settingsRegistry))
|
||||
{
|
||||
AZStd::vector<AZ::IO::PathView> sourcePaths;
|
||||
for (const AzFramework::GemInfo& gemInfo : gemInfos)
|
||||
{
|
||||
for (const AZ::IO::Path& absoluteSourcePath : gemInfo.m_absoluteSourcePaths)
|
||||
{
|
||||
if (auto foundIt = AZStd::find(sourcePaths.begin(), sourcePaths.end(), absoluteSourcePath);
|
||||
foundIt == sourcePaths.end())
|
||||
{
|
||||
sourcePaths.emplace_back(absoluteSourcePath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const AZ::IO::Path& sourcePath : sourcePaths)
|
||||
{
|
||||
// Use JSON Pointer to append elements to the SourcePaths array
|
||||
registry.Set(FixedValueString::format("%s/SourcePaths/%zu", PlaceholderGemKey.c_str(), pathIndex++),
|
||||
sourcePath.Native());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_EngineRegistry(registry, platform, specialization, &scratchBuffer);
|
||||
// This function iterates over each path for each the "/Amazon/Gems/<gem-name>/SourcePaths" key and attempts
|
||||
// to merge the "Registry" directory in each path.
|
||||
AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_GemRegistries(registry, platform, specialization, &scratchBuffer);
|
||||
AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_ProjectRegistry(registry, platform, specialization, &scratchBuffer);
|
||||
|
||||
// The Placeholder Key is removed now that each gem's "<gem-root>/Registry" directory have been merged to
|
||||
// the local Settings Registry instance via `MergeSettingsToRegistry_GemRegistries`
|
||||
registry.Remove(PlaceholderGemKey);
|
||||
|
||||
// Merge the Project User and User home settings registry only in non-release builds
|
||||
constexpr bool executeRegDumpCommands = false;
|
||||
AZ::CommandLine* commandLine{};
|
||||
|
||||
Reference in New Issue
Block a user