* Sync state is periodically flushed, and stored with an optimized list of paths to conform a workspace back to the same state.
* Writes are automatically queued to run asynchrnously once a bundle of data is ready to be stored, rather than clients having to trigger a write.
* BundleStore supports different contexts for different reads, to prevent hashed blobs being merged together when reading from different sources.
#rb none
#preflight none
[CL 21293876 by Ben Marsh in ue5-main branch]
Only expose ConnectionPool from RedisService to avoid using Database or ConnectionMultiplexer directly.
#preflight 62f2661d3b773d041627aad0
[CL 21286130 by carl bystrom in ue5-main branch]
#rb Daren.Cheng, Patrick.Boutot
#jira FORT-493770
#rnx
#robomerge FNMain
#preflight 62d99972c0180d8071489e9b
[CL 21205364 by Tim Smith in ue5-main branch]
* Added a RefName class for identifying references. Unlike the older RefId class, this supports arbitrary ANSI strings with the exclusion of non-printable and invalid filesystem characters.
* Refactored IBlobStore and ITreeStore to support RefName identifiers.
* Fixed commit replication restarting from a fresh sync whenever a new iteration runs.
* Removed replicated executor and unused content ref id from job task definition.
#preflight none
[CL 21117470 by Ben Marsh in ue5-main branch]
Minor refactor to how valid and invalid build records are tracked.
#rb josh.adams
#preflight 62d15d263b057e7274876325
[CL 21108749 by Tim Smith in ue5-main branch]
* Staged the wrong Dotnet directory when making CW from Windows (it would stage Dotnet/6.20.00/windows)
* The ScriptModule code that used the Automation.json files to discover the precompiled UAT script dlls didn't handle \'s on Linux in the paths, and since Windows wrote out the files, there are \'s aplenty. I fixed up the known issue, but possibly all paths loaded from the json files should be fixed up, but it's not easy to do automatically
* We moved to using RunUAT.sh instead of calling dotnet directly, however because we make the CW on Windows, dotnet was not executable, and the code in RunUAT.sh to find the dotnet executable and make it executable (chmod `which dotnet`) only works if dotnet is already executable! So, I moved the +x code into SetupDotnet.sh, on Linux and Mac
#rb eric.knapik
#preflight 62ccd2009922f7e512b6e51a
#ROBOMERGE-OWNER: josh.adams
#ROBOMERGE-AUTHOR: josh.adams
#ROBOMERGE-SOURCE: CL 21055451 via CL 21055464 via CL 21055478
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v972-20964824)
#ROBOMERGE-CONFLICT from-shelf
[CL 21076349 by josh adams in ue5-main branch]