GUBP High Level
* Temp Storage is zipped into a single archive per node now. This results in ~75% reduction in temp storage usage and network traffic, not to mention the per-file overhead.
* Temp Storage is in P:\\Builds\\{Game}\\TmpStore instead of P:\\Builds\\{Game}\\GUBP (to facilitate easier cleaning of this new structure).
* Temp Storage nodes are in subdirectories of {Branch}\\{CL}\\{NodeName} now instead of a flat directory structure that was hard to manually sift through.
GUBP Mid Level
* Removed -Store= and -StoreSuffix= test parameters.
* Added -NoZipTempStorage parameter to turn off temp storage zipping if necessary.
* Created GUBP.JobInfo class that collects info about the job as a whole to be passed around by GUBP. Mostly used by any code that need to interact with TempStorage.
* Created TempStorageNodeInfo that describes the necessary parameters to find the temp storage location for a node.
* Fully XML commented TempStorage.cs, and commented internals all major functions.
* Added a bunch of telemetry data for storing, retrieving, and cleaning shared temp storage.
UAT Mid Level
* Fixed a bug in Ionic.Zip that make ExtractAll() not work on Mono, checked in new DLLs.
* Added UAT parameter -UseLocalBuildStorage that allows you to test build storage stuff completely locally. Writes to Engine\\Saved\\LocalBuilds\\...
GUBP Low Level
* Refactored some GUBP startup code so temp vars would be limited in scope. Makes it easier to track the impact of refactoring these things.
* CullNodesForPreflight is only called for preflight builds.
* Refactored TempStorage.FindTempStorageManifests to use new TmpStore structure and harden the brittle string/path parsing it was doing. See the new TempStorage FindMatchingSharedTempStorageNodeCLs().
* Refactored TempStorage Saving and Loading to use XDocument instead of older XmlDocument. Removed a bunch of redundant checks.
* Use StripBaseDirectory and MakeRerootedFilePath to remove the brittle directory manipulation code. Directories no longer require a '/' at the end.
* Removed a few redundant caching layers in cleaning temp storage that try to ensure we don't clean a folder twice. None of them were necessary.
* Removed unused single-threaded copy code from temp storage.
* Updated Temp Storage unit test, and fully commented the logic behind it.
UAT Low Level
* UAT top level exception handler is now a single log line now to help parsers find the error.
* Removed several uses of FormatException as it doesn't display the entire exception chain, and is not as good as the default exception formatter.
* Removed ExceptionToString as it used FormatException, which was not a good precedent.
* Fixed several cases of exception propagation that was not properly chaining the inner exception.
* Refactored ThreadedCopyFiles to use Parallel.For because it was just as fast (if not faster) and much simpler to maintain.
* Removed the suffix from Robust_FileExists_NoExceptions because it's sole purpose in life WAS to throw exceptions!
* Added a bunch of XML doc comments to CommandUtils.
* Modernized some container manipulation and iteration to use IEnumerable and extension methods more appropriately.
* Added several @todos for other minor cleanup stuff that should happen eventually.
* Fixed some uses of String.Compare to use invariant culture.
#codereview:ben.marsh
[CL 2644846 by Wes Hunt in Main branch]
Re-added ambiguous Automation ctor that was removed in CL2605826. It is now marked with [Obsolete], and will be removed in the future. CL2643334 already fixed the instances that were mistakenly being routed to the varargs version.
#codereview:richard.fawcett, leigh.swift, ben.marsh
[CL 2643482 by Wes Hunt in Main branch]
The overloaded constructor was removed in CL 2605826, so all existing calls are being interpreted as AutomationException(string Message, object[] Params), causing runtime failures when Message does not contain a replacement placeholder "{0}", and potential unwanted behavior if it does.
#jira OPP-3951
#codereview Wes.Hunt, Leigh.Swift
[CL 2643334 by Richard Fawcett in Main branch]
* ie: UAT.StoreToTempStorage.5.1024
* this can be pulled about by downstream telemetry to measure temp storage performance across the system, and how it's being used in general.
Misc
* Fixed CommanUtils.WriteToFile to add a Newline to match old behavior.
* Added a new feature to the telemetry stopwatch to allow setting a dynamically generated string when finishing the timing.
#codereview:ben.marsh
[CL 2640845 by Wes Hunt in Main branch]
Creating an app bundle when archiving for mac is now optional.
--------
Integrated using branch Ue4-To-UE4-Fortnite-Simple (reversed) of change#2637748 by Bob.Tellez on 2015/07/29 17:46:21.
[CL 2637750 by Bob Tellez in Main branch]
* As of .NET 4.5, the default for Any CPU is to "prefer 32-bit process", and you need to explicitly turn this off to require the process be run as 64-bit.
* See http://blogs.microsoft.co.il/sasha/2012/04/04/what-anycpu-really-means-as-of-net-45-and-visual-studio-11/ for details.
* UAT will now assert when Environment.Is64BitProcess is false on startup, as we essentially require 64-bit for certain scripts, and that's how we ran it before upgrading to .NET4.5.
* Also set default optimization options for the project, which were changed at some point.
* Finally, rolled back CL#2633880, which was trying to work around the fact that UAT was running 32-bit.
#codereview:richard.fawcett, ben.marsh
[CL 2634273 by Wes Hunt in Main branch]