/// <summary> /// Gets the name of the local temp storage manifest file for the given temp storage node (ie, Engine\Saved\TmpStore\NodeInfoDirectory\NodeInfoFilename.TempManifest) /// </summary> /// <param name="TempStorageNodeInfo">Node info descibing the block of temp storage (essentially used to identify a subdirectory insides the game's temp storage folder).</param> /// <returns>The name of the temp storage manifest file for the given storage block name for the given game.</returns> private static string LocalTempStorageManifestFilename(TempStorageNodeInfo TempStorageNodeInfo) { return CommandUtils.CombinePaths(LocalTempStorageManifestDirectory(), TempStorageNodeInfo.GetManifestFilename()); }
/// <summary> /// Gets the name of the temp storage manifest file for the given temp storage node and game (ie, P:\Builds\GameName\TmpStore\NodeInfoDirectory\NodeInfoFilename.TempManifest) /// </summary> /// <param name="TempStorageNodeInfo">Node info descibing the block of temp storage (essentially used to identify a subdirectory insides the game's temp storage folder).</param> /// <param name="GameName">game name to determine the temp storage folder for. Empty is equivalent to "UE4".</param> /// <returns>The name of the temp storage manifest file for the given storage block name for the given game.</returns> private static string SharedTempStorageManifestFilename(TempStorageNodeInfo TempStorageNodeInfo, string GameName) { return CommandUtils.CombinePaths(SharedTempStorageDirectory(TempStorageNodeInfo, GameName), TempStorageNodeInfo.GetManifestFilename()); }
/// <summary> /// Finds temp storage manifests that match the block name (where the block name has embedded wildcards to find all block names of a given pattern). /// This is used by <see cref="GUBP.FindNodeHistory"/> to search for any temp storage manifests that match a certain GUBP node name. /// This is used to construct a "history" of that node which is then used to log info and generate failure emails. /// This method is used multiple times to find nodes matching a specific name with a suffix of _Started _Failed and _Succeeded. /// The CL# is pulled from those names and used to generate a P4 history. /// Main problem with this is that temp storage is ephemeral, so after a few days, this will typically not find any history for a node. /// /// NOTE: This entire routine is dependent on how TempStorageNodeInfo lays out its directories!!! /// If this layout is changed, this code needs to be changed as well. /// @todo: Someday Make FindNodeHistory query the build database directly to get a true history of the node. /// </summary> /// <param name="TempStorageNodeInfo">Node info descibing the block of temp storage (essentially used to identify a subdirectory insides the game's temp storage folder).</param> /// <param name="GameName">game name to determine the temp storage folder for. Empty is equivalent to "UE4".</param> /// <returns></returns> public static List<int> FindMatchingSharedTempStorageNodeCLs(TempStorageNodeInfo TempStorageNodeInfo, string GameName) { // Find the shared temp storage folder for this game and branch var SharedTempStorageDirectoryForGameAndBranch = CommandUtils.CombinePaths(ResolveSharedTempStorageDirectory(GameName), TempStorageNodeInfo.JobInfo.BranchNameForTempStorage); int dummy; return ( // Look for all folders underneath this, it should be a CL, or CL-PreflightInfo from CLDir in Directory.EnumerateDirectories(SharedTempStorageDirectoryForGameAndBranch) // only accept folders that are plain numbers. Any suffixes ('-') imply preflight builds or something else. let PossibleCL = Path.GetFileName(CLDir) where int.TryParse(PossibleCL, out dummy) let CL = int.Parse(PossibleCL) // if we have a real CL, try to find the node name we are looking for. where File.Exists(CommandUtils.CombinePaths(CLDir, TempStorageNodeInfo.NodeStorageName, TempStorageNodeInfo.GetManifestFilename())) select CL) .OrderBy(CL => CL).ToList(); }