示例#1
0
        /// <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)));
        }
示例#2
0
        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 _));
        }
示例#3
0
        /// <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))));
        }
示例#4
0
 private Task <IIpcResult> ExecuteGenerateBuildManifestFileListAsync(GenerateBuildManifestFileListCommand cmd)
 => Task.FromResult(ExecuteGenerateBuildManifestFileList(cmd));