GetProjectProperties uses PropertiesCache collection (hashmap) to store project properties indexed by PropertyCacheKey struct (.uproject path + platforms + configurations). However, it didn't work as expected because PropertyCacheKey has array members that are reference types. Without a custom hashing implemented, this key would generate different hash codes even if elements stored in the arrays were the same. As a result, querying the same properties multiple times would generate multiple entries in the cache e.g.
GetProjectProperties("foo.uproject", {UnrealTargetPlatform.PC}, {UnrealTargetConfiguration.Debug})
GetProjectProperties("foo.uproject", {UnrealTargetPlatform.PC}, {UnrealTargetConfiguration.Debug})
would create two entries for PC/Debug.
Resolved by implementing the full set of Equals, GetHashCode and comparison operators.
#preflight 630e8d14556fc14dce7d11c5
#rb David.Harvey
#jira UE-162001
#rnx
[CL 21720344 by Wojciech Krywult in ue5-main branch]
The problem was that blueprint-only projects would return true for IsCodeBasedUProjectFile during staging. The issue was triggered by CL 21214930 where PropertyCacheKey (ProjectUtils.cs) was added. Before this change GetProjectProperties worked based only on the path to .uproject. After the change, it also takes the platform and configurations into account. It means that:
GetProjectProperties("...", SomePlatform, Debug)
GetProjectProperties("...", null, Debug)
may return different results. While it's probably the core or the fix this change implemented, it may given unexpected results because when null is passed as a list of platforms, internally all available platforms are taken into account and if only one of them requires the project to be compiled IsCodeBasedUProjectFile will return true, which may not be what our code is expected to see. That's what happened during staging - IsCodeBasedUProjectFile was invoked two times in a slightly different way leading to the automation code handling blueprint-only projects in an inconsistent-way during the whole process.
Fixed by modifying DeploymentContext to initialize IsCodeBasedProject by passing both the current platform and configurations.
#preflight 630e6bd0501b64ba334c3c2a
#rb none
#jira UE-162001
#rnx
[CL 21711241 by Wojciech Krywult in ue5-main branch]
Extended ParamHelp attribute for BuildCommand to better describe the metadata of parameters for UAT scripts.
Update BuildGraph with ParamHelp attributes.
#rb: Eric.Knapik
#preflight: 6303e331c00af5e294fbb7e9
[CL 21525146 by gary yuan in ue5-main branch]
Move list of extensions treated as code to common location
#rnx
#rb ben.marsh
#preflight 63052cb8a45b007ea2836cc7
[CL 21518406 by Joe Kirchoff in ue5-main branch]
Improvements to BenchmarkBuild script.
- Added -editor-startup and -editor-game options to measure startup and startup time with -game
- Renamed -pie to -editor-pie to match other editor options-
- Allow different editor tests to use different sets of maps via -editor-startup=map2+map2, -editor-pie=map1+map2 etc
- Added AllEditor option to run all editor benchmarking
- Added -coldddc-noshared DDC option
- BenchmarkBuild now defaults to cleaning each targets after benchmarking its build time to save disk space (disable with -nopostclean)
- Moved Editor benchmark tests into separate files and reduced some duplicated code
- Updated help info
Other
- Fixed UAT GetProjectProperties returning inaccurate values if called twice with different platforms
- Doubled number of UBT logs that can be generated from a single UAT script
- Allow scripts to call UnrealBuild.CleanWithUBT to perform cleanup
- Simplified a lot of code
#rb na
#ROBOMERGE-AUTHOR: andrew.grant
#ROBOMERGE-SOURCE: CL 21213895 via CL 21213903 via CL 21213910 via CL 21214414 via CL 21214472
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v972-20964824)
[CL 21214930 by andrew grant in ue5-main branch]
- Added -editor-startup and -editor-game options to measure startup and startup time with -game
- Renamed -pie to -editor-pie to match other editor options
- Allow different editor tests to use different sets of maps via -editor-startup=map2+map2, -editor-pie=map1+map2 etc
- Added AllEditor option to run all editor benchmarking
- Added -coldddc-noshared DDC option
- BenchmarkBuild now defaults to cleaning each targets after benchmarking its build time to save disk space (disable with -nopostclean)
- Moved Editor benchmark tests into separate files and reduced some duplicated code
- Updated help info
Other
- Fixed UAT GetProjectProperties returning inaccurate values if called twice with different platforms
- Doubled number of UBT logs that can be generated from a single UAT script
- Allow scripts to call UnrealBuild.CleanWithUBT to perform cleanup
- Simplified a lot of code
#rb na
#ROBOMERGE-AUTHOR: andrew.grant
#ROBOMERGE-SOURCE: CL 21213169 via CL 21213174 via CL 21213179 via CL 21214155 via CL 21214226
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v972-20964824)
[CL 21214663 by andrew grant in ue5-main branch]
Added a SafeRenameDirectory similar to SafeReaname file that uses Directory.Move
#rnx
#jira none
#rb none
#preflight 62bf48388d5e6787591b3f8e
[CL 20922943 by Ryan Hummer in ue5-main branch]
comodoca isn't preforming very well resulting in over an hour to sign editor files, changing the order results in ~10 minute or less sign time
#rnx
#jira UE-144557
#preflight 62b5b4157c36e1309750a808
#rb none
[CL 20809284 by Ryan Hummer in ue5-main branch]
Fix DLCOverrideCookedSubDir param being used for DLCOverrideStagedSubDir if DLCOverrideStagedSubDir was not specified via commandline.
Don't allow TargetPlatformDescriptor.CookFlavor to be null - it needs to be empty string to be a valid key.
[REVIEW] [at]Graeme.Thornton [at]Daniel.Lamb
#ROBOMERGE-AUTHOR: justin.marcus
#ROBOMERGE-SOURCE: CL 20626127 via CL 20626141 via CL 20626144 via CL 20626147
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v955-20579017)
[CL 20627099 by justin marcus in ue5-main branch]