/// <summary> /// Executes <see cref="GenerateBuildManifestFileListCommand"/>. Generates a list of file hashes required for BuildManifest.json file /// for given <see cref="GenerateBuildManifestFileListCommand.DropName"/>. /// </summary> private IIpcResult ExecuteGenerateBuildManifestFileList(GenerateBuildManifestFileListCommand cmd) { Contract.Requires(cmd != null); Contract.Requires(m_buildManifestGenerator != null, "Build Manifest data can only be generated on orchestrator"); if (!m_buildManifestGenerator.TryGenerateBuildManifestFileList(cmd.DropName, out string error, out var buildManifestFileList)) { return(new IpcResult(IpcResultStatus.ExecutionError, error)); } return(IpcResult.Success(cmd.RenderResult(buildManifestFileList))); }
public void TestGenerateBuildManifestFileListCommandParsing() { GenerateBuildManifestFileListCommand cmd = new GenerateBuildManifestFileListCommand("dropName"); XAssert.IsTrue(cmd.TryParseResult("0", out List <BuildManifestFileInfo> temp1)); XAssert.AreEqual(0, temp1.Count); XAssert.IsFalse(cmd.TryParseResult("NaN", out _)); using var stringBuilderPoolInstance = Pools.StringBuilderPool.GetInstance(); var sb = stringBuilderPoolInstance.Instance; sb.AppendLine($"1"); sb.AppendLine($"invalid|count"); XAssert.IsFalse(cmd.TryParseResult(sb.ToString(), out _)); sb.Clear(); sb.AppendLine($"1"); sb.AppendLine($"/path/a|VSO0:000000000000000000000000000000000000000000000000000000000000000000|SHA1:000000000000000000000000000000000beef000|SHA256:000000000000000000000000000000000000000000cafe000000000000000000"); XAssert.IsTrue(cmd.TryParseResult(sb.ToString(), out _)); }
/// <summary> /// Executes <see cref="GenerateBuildManifestFileListCommand"/>. Generates a list of file hashes required for BuildManifest.json file /// for given <see cref="GenerateBuildManifestFileListCommand.DropName"/>. /// </summary> private IIpcResult ExecuteGenerateBuildManifestFileList(GenerateBuildManifestFileListCommand cmd) { Contract.Requires(cmd != null); Contract.Requires(m_buildManifestGenerator != null, "Build Manifest data can only be generated on master"); var duplicateEntries = m_buildManifestGenerator.DuplicateEntries(cmd.DropName); if (duplicateEntries.Count != 0) { StringBuilder sb = new StringBuilder(); sb.Append($"Operation Register BuildManifest Hash for Drop '{cmd.DropName}' failed due to files with different hashes being uploaded to the same path: "); foreach (var entry in duplicateEntries) { sb.Append($"[Path: {entry.relativePath}'. RecordedHash: '{entry.recordedHash}'. RejectedHash: '{entry.rejectedHash}'] "); } return(new IpcResult(IpcResultStatus.ExecutionError, sb.ToString())); } return(IpcResult.Success(cmd.RenderResult(m_buildManifestGenerator.GenerateBuildManifestFileList(cmd)))); }
private Task <IIpcResult> ExecuteGenerateBuildManifestFileListAsync(GenerateBuildManifestFileListCommand cmd) => Task.FromResult(ExecuteGenerateBuildManifestFileList(cmd));