You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
#lockdown Nick.Penwarden #rb none ===================================== MAJOR FEATURES + CHANGES ===================================== Change 3484422 by Daniel.Eldar [PS4] Playstation Texture lookup code now same as other platform as the PS4 shader compiler now supports switch statements. #JIRA UE-39856 Change 3486871 by Daniel.Eldar [PS4] Added support to visualize the CMask in the vis command in the console. (This also adds support for all other UINT8 textures) Change 3486877 by Daniel.Eldar [PS4] DBuffer decals optimisation is now fixed on PSVR. #JIRA UE-40383 Change 3486935 by Daniel.Eldar [General] Fixed a small compilation bug in the visualize shader for CL 3486871. Change 3487400 by Josh.Adams - Updated the "merge to main CL description maker" script to split the CLs up into multiple files depending on changes being made to NDA platforms directories Change 3488955 by Daniel.Eldar [General] The symbol cache will now be generated for the appropriate platforms. #JIRA UE-44718 #3539 Change 3491593 by Ben.Woodhouse [D3D12] Add some additional pixel formats to ComputeBytesPerPixel. In particular, case DXGI_FORMAT_R32_TYPELESS: case DXGI_FORMAT_R32_FLOAT: Change 3496287 by Josh.Adams - Fixed minor issue where Multi text file would always be opened Change 3498054 by Keith.Judge Make Crash Malloc work if Binned2 is previous Malloc. Fixes callstack issues for non-gamethread crashes. Change 3498188 by Daniel.Eldar [PS4] Fixed an ensure which fires when the -norhithread flag is used. #JIRA UE-41150 Change 3498358 by Keith.Judge Xbox One - Added XboxOnePDBFileUtil.exe to the installed engine filters. Change 3500276 by Daniel.Eldar [PS4] Mesh particle systems now bind the previous transform of the particles which removes the asset of "Resource at slot x, was not bound..." when LCUE debug is on. #JIRA UE-39093 Change 3500531 by Keith.Judge Xbox One - Removed some bad assumptions about GPU memory handing over to the RHI in ContainerAllocationPolicies. Due to how PLATFORM_HAS_UMA is defined, this only affects DX11.x. #jira UE-45867 Change 3503080 by Ben.Woodhouse Fix for slate postprocess issue reported by SebA (copy/dest were the wrong way around in a TransitionResources call) #jira UE-46321 Change 3504554 by Keith.Judge Xbox One - Add a TitleID and Service Config ID to QAGame (along with a backend config) so that save/load works in TM-Gameplay #jira UE-44814 Change 3505443 by Luke.Thatcher [CONSOLE] [!] Fix missing include in LinuxPlatformProcess.cpp [CL 3505715 by Joe Barnes in Main branch]
223 lines
7.4 KiB
C#
223 lines
7.4 KiB
C#
// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
using System.Threading;
|
|
using System.Reflection;
|
|
using System.Linq;
|
|
using AutomationTool;
|
|
using UnrealBuildTool;
|
|
|
|
namespace AutomationTool
|
|
{
|
|
/// <summary>
|
|
/// Generates a changelist description for copying a stream to its parent
|
|
/// </summary>
|
|
[RequireP4]
|
|
public class StreamCopyDescription : BuildCommand
|
|
{
|
|
/// <summary>
|
|
/// Hunts down the list of confidential platforms, based on ConfidentialPlatform.ini in the Engine/Config directory (this way we don't
|
|
/// need to hardcode the platform names!)
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private string[] GetPlatformNames()
|
|
{
|
|
List<string> Platforms = new List<string>();
|
|
|
|
// two special platform names (for non-special, and combined CLs that affect multiple confidential platforms)
|
|
Platforms.Add("");
|
|
Platforms.Add("Multi");
|
|
|
|
foreach (string Dir in Directory.EnumerateDirectories(Path.Combine(EngineDirectory.FullName, "Config")))
|
|
{
|
|
if (File.Exists(Path.Combine(Dir, "ConfidentialPlatform.ini")))
|
|
{
|
|
Platforms.Add(Path.GetFileName(Dir));
|
|
}
|
|
}
|
|
|
|
return Platforms.ToArray();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Execute the command
|
|
/// </summary>
|
|
public override void ExecuteBuild()
|
|
{
|
|
// Get the source and target streams
|
|
string Stream = ParseParamValue("Stream", P4Env.BuildRootP4);
|
|
string Changes = ParseParamValue("Changes", null);
|
|
string Lockdown = ParseParamValue("Lockdown", "Nick.Penwarden");
|
|
bool bPlatformSplit = !ParseParam("CombinePlatforms");
|
|
|
|
// Get changes which haven't been copied up from the current stream
|
|
string AllDescriptions;
|
|
string SourceStream;
|
|
string VerbosityFlag = bPlatformSplit ? "" : "-l";
|
|
int LastCl;
|
|
|
|
string[] Platforms = GetPlatformNames();
|
|
StringBuilder[] DescriptionBuilders = new StringBuilder[Platforms.Length];
|
|
|
|
for (int Index = 0; Index < Platforms.Length; Index++)
|
|
{
|
|
DescriptionBuilders[Index] = new StringBuilder();
|
|
}
|
|
|
|
if (Changes == null)
|
|
{
|
|
IProcessResult Result = P4.P4(String.Format("interchanges {0} -S {1}", VerbosityFlag, Stream), AllowSpew: false);
|
|
AllDescriptions = Result.Output;
|
|
SourceStream = Stream;
|
|
|
|
// Get the last submitted change in the source stream
|
|
List<P4Connection.ChangeRecord> ChangeRecords;
|
|
if (!P4.Changes(out ChangeRecords, String.Format("-m1 {0}/...", SourceStream), AllowSpew: false))
|
|
{
|
|
throw new AutomationException("Couldn't get changes for this branch");
|
|
}
|
|
LastCl = ChangeRecords[0].CL;
|
|
}
|
|
else
|
|
{
|
|
IProcessResult Result = P4.P4(String.Format("changes {0} {1}", VerbosityFlag, Changes), AllowSpew: false);
|
|
AllDescriptions = Result.Output;
|
|
SourceStream = Regex.Replace(Changes, @"(\/(?:\/[^\/]*){2}).*", "$1");
|
|
LastCl = Int32.Parse(Regex.Replace(Changes, ".*,", ""));
|
|
}
|
|
|
|
if (bPlatformSplit)
|
|
{
|
|
string[] Lines = AllDescriptions.Split("\n".ToCharArray());
|
|
foreach (string Line in Lines)
|
|
{
|
|
// @todo replace with regexes!!
|
|
string[] Tokens = Line.Split(" ".ToCharArray());
|
|
if (Tokens.Length > 2 && Tokens[0] == "Change")
|
|
{
|
|
IProcessResult Result = P4.P4(String.Format("describe -s {0}", Tokens[1]), AllowSpew: false);
|
|
|
|
// Affected files ... is the splitting point
|
|
int AffectedFilesPos = Result.Output.IndexOf("Affected files ...");
|
|
string Description = Result.Output.Substring(0, AffectedFilesPos);
|
|
string Files = Result.Output.Substring(AffectedFilesPos);
|
|
|
|
// look for the NDA platforms in the list of files (skipping over the "no" and "multi" platforms
|
|
int WhichPlatform = 0;
|
|
for (int Index = 2; Index < Platforms.Length; Index++)
|
|
{
|
|
// we search by directory in the form of /Platform/
|
|
if (Files.Contains("/" + Platforms[Index] + "/"))
|
|
{
|
|
// if we contained multiple files, then we put into the Multi file, and someone will have to manually deal with it!!
|
|
if (WhichPlatform == 0)
|
|
{
|
|
WhichPlatform = Index;
|
|
}
|
|
else
|
|
{
|
|
WhichPlatform = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
// add this description to the proper platform
|
|
DescriptionBuilders[WhichPlatform].AppendLine(Description);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DescriptionBuilders[0].Append(AllDescriptions);
|
|
}
|
|
|
|
|
|
for (int PlatformIndex = 0; PlatformIndex < Platforms.Length; PlatformIndex++)
|
|
{
|
|
string Desc = DescriptionBuilders[PlatformIndex].ToString().Replace("\r\n", "\n");
|
|
|
|
// Clean any workspace names that may reveal internal information
|
|
Desc = Regex.Replace(Desc, "(Change[^@]*)@.*", "$1", RegexOptions.Multiline);
|
|
|
|
// Remove changes by the build machine
|
|
Desc = Regex.Replace(Desc, "[^\n]*buildmachine\n(\n|\t[^\n]*\n)*", "");
|
|
|
|
// Remove all the tags we don't care about
|
|
Desc = Regex.Replace(Desc, "^[ \t]*#(rb|fyi|codereview|lockdown)\\s.*$", "", RegexOptions.Multiline);
|
|
|
|
// Empty out lines which just contain whitespace
|
|
Desc = Regex.Replace(Desc, "^[ \t]+$", "", RegexOptions.Multiline);
|
|
|
|
// Remove multiple consecutive blank lines
|
|
Desc = Regex.Replace(Desc, "\n\n+", "\n\n");
|
|
|
|
// Only include one newline at the end of each description
|
|
Desc = Regex.Replace(Desc, "\n+Change", "\n\nChange");
|
|
|
|
// Remove merge-only changelists
|
|
Desc = Regex.Replace(Desc, "(?<=(^|\\n))Change .*\\s*Merging .* to .*\\s*\\n(?=(Change|$))", "");
|
|
|
|
if (string.IsNullOrEmpty(Desc))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
// Figure out the target stream
|
|
IProcessResult StreamResult = P4.P4(String.Format("stream -o {0}", Stream), AllowSpew: false);
|
|
if (StreamResult.ExitCode != 0)
|
|
{
|
|
throw new AutomationException("Couldn't get stream description for {0}", Stream);
|
|
}
|
|
string Target = P4Spec.FromString(StreamResult.Output).GetField("Parent");
|
|
if (Target == null)
|
|
{
|
|
throw new AutomationException("Couldn't get parent stream for {0}", Stream);
|
|
}
|
|
|
|
// Write the output file
|
|
string OutputDirName = Path.Combine(CommandUtils.CmdEnv.LocalRoot, "Engine", "Intermediate");
|
|
CommandUtils.CreateDirectory(OutputDirName);
|
|
string OutputFileName = Path.Combine(OutputDirName, string.Format("Changes{0}.txt", Platforms[PlatformIndex]));
|
|
using (StreamWriter Writer = new StreamWriter(OutputFileName))
|
|
{
|
|
if (PlatformIndex == 1)
|
|
{
|
|
Writer.WriteLine("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
|
|
Writer.WriteLine("CHANGES WITH MULTIPLE PLATFORMS!!! YOU MUST COPY THESE INTO THE OTHER ONES AS MAKES SENSE!!");
|
|
Writer.WriteLine("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
|
|
Writer.WriteLine();
|
|
Writer.WriteLine();
|
|
}
|
|
else
|
|
{
|
|
Writer.WriteLine("Copying {0} to {1} (Source: {2} @ {3})", Stream, Target.Trim(), SourceStream, LastCl);
|
|
Writer.WriteLine("#lockdown {0}", Lockdown);
|
|
Writer.WriteLine();
|
|
Writer.WriteLine("=====================================");
|
|
Writer.WriteLine("{0} MAJOR FEATURES + CHANGES", Platforms[PlatformIndex]);
|
|
Writer.WriteLine("=====================================");
|
|
Writer.WriteLine();
|
|
}
|
|
|
|
foreach (string Line in Desc.Split('\n'))
|
|
{
|
|
Writer.WriteLine(Line);
|
|
}
|
|
|
|
Writer.WriteLine("DONE!");
|
|
|
|
}
|
|
Log("Written {0}.", OutputFileName);
|
|
|
|
// Open it with the default text editor
|
|
Process.Start(OutputFileName);
|
|
}
|
|
}
|
|
}
|
|
}
|