コード例 #1
0
        /// <summary>
        /// Creates an IpcPip from a single string representing IPC operation payload.
        ///
        /// The standard output property of the created pip is set to <paramref name="workingDir"/>\stdout.txt
        /// </summary>
        internal static IpcPip CreateFromStringPayload(
            PipExecutionContext context,
            AbsolutePath workingDir,
            IpcClientInfo ipcInfo,
            string operationPayload,
            PipProvenance provenance,
            FileArtifact outputFile = default(FileArtifact),
            IEnumerable <PipId> servicePipDependencies            = null,
            IEnumerable <FileArtifact> fileDependencies           = null,
            IEnumerable <DirectoryArtifact> directoryDependencies = null,
            IEnumerable <StringId> tags = null,
            bool isServiceFinalization  = false,
            bool mustRunOnMaster        = false)
        {
            var stdoutPath = workingDir.Combine(context.PathTable, PathAtom.Create(context.StringTable, "stdout.txt"));
            var stdoutFile = outputFile.IsValid ? outputFile : FileArtifact.CreateOutputFile(stdoutPath);

            var pipDataBuilder = new PipDataBuilder(context.StringTable);

            pipDataBuilder.Add(operationPayload);

            return(new IpcPip(
                       ipcInfo,
                       arguments: pipDataBuilder.ToPipData(" ", PipDataFragmentEscaping.NoEscaping),
                       outputFile: stdoutFile,
                       servicePipDependencies: ToReadOnlyArray(servicePipDependencies),
                       fileDependencies: ToReadOnlyArray(fileDependencies),
                       directoryDependencies: ToReadOnlyArray(directoryDependencies),
                       skipMaterializationFor: ReadOnlyArray <FileOrDirectoryArtifact> .Empty,
                       tags: ToReadOnlyArray(tags),
                       isServiceFinalization: isServiceFinalization,
                       mustRunOnMaster: mustRunOnMaster,
                       provenance: provenance));
        }
コード例 #2
0
 /// <summary>
 /// Clone and override select properties.
 /// </summary>
 public IpcPip Override(
     IpcClientInfo ipcInfo   = null,
     PipData?messageBody     = null,
     FileArtifact?outputFile = null,
     ReadOnlyArray <PipId>?servicePipDependencies            = null,
     ReadOnlyArray <FileArtifact>?fileDependencies           = null,
     ReadOnlyArray <DirectoryArtifact>?directoryDependencies = null,
     ReadOnlyArray <FileOrDirectoryArtifact>?lazilyMaterializedDependencies = null,
     ReadOnlyArray <StringId>?tags = null,
     bool?isServiceFinalization    = null,
     bool?mustRunOnMaster          = null,
     PipProvenance provenance      = null)
 {
     return(new IpcPip(
                ipcInfo ?? IpcInfo,
                messageBody ?? MessageBody,
                outputFile ?? OutputFile,
                servicePipDependencies ?? ServicePipDependencies,
                fileDependencies ?? FileDependencies,
                directoryDependencies ?? DirectoryDependencies,
                lazilyMaterializedDependencies ?? LazilyMaterializedDependencies,
                tags ?? Tags,
                isServiceFinalization ?? IsServiceFinalization,
                mustRunOnMaster ?? MustRunOnMaster,
                provenance ?? Provenance));
 }
コード例 #3
0
        internal static IpcPip InternalDeserialize(PipReader reader)
        {
            bool hasProvenance = reader.ReadBoolean();

            return(new IpcPip(
                       ipcInfo: IpcClientInfo.Deserialize(reader),
                       arguments: reader.ReadPipData(),
                       outputFile: reader.ReadFileArtifact(),
                       servicePipDependencies: reader.ReadReadOnlyArray(reader1 => ((PipReader)reader1).ReadPipId()),
                       fileDependencies: reader.ReadReadOnlyArray(reader1 => reader1.ReadFileArtifact()),
                       directoryDependencies: reader.ReadReadOnlyArray(reader1 => reader1.ReadDirectoryArtifact()),
                       skipMaterializationFor: reader.ReadReadOnlyArray(reader1 => reader1.ReadFileOrDirectoryArtifact()),
                       tags: reader.ReadReadOnlyArray(reader1 => reader1.ReadStringId()),
                       isServiceFinalization: reader.ReadBoolean(),
                       mustRunOnMaster: reader.ReadBoolean(),
                       provenance: hasProvenance ? reader.ReadPipProvenance() : null));
        }
コード例 #4
0
        /// <nodoc />
        public IpcPip(
            IpcClientInfo ipcInfo,
            PipData arguments,
            FileArtifact outputFile,
            ReadOnlyArray <PipId> servicePipDependencies,
            ReadOnlyArray <FileArtifact> fileDependencies,
            ReadOnlyArray <DirectoryArtifact> directoryDependencies,
            ReadOnlyArray <FileOrDirectoryArtifact> skipMaterializationFor,
            ReadOnlyArray <StringId> tags,
            bool isServiceFinalization,
            bool mustRunOnMaster,
            PipProvenance provenance)
        {
            Contract.Requires(ipcInfo != null);
            Contract.Requires(arguments.IsValid);
            Contract.Requires(outputFile.IsValid);
            Contract.Requires(servicePipDependencies.IsValid);
            Contract.Requires(fileDependencies.IsValid);
            Contract.Requires(directoryDependencies.IsValid);
            Contract.Requires(skipMaterializationFor.IsValid);
            Contract.RequiresForAll(servicePipDependencies, dependency => dependency.IsValid);
            Contract.RequiresForAll(fileDependencies, dependency => dependency.IsValid);
            Contract.RequiresForAll(directoryDependencies, dependency => dependency.IsValid);

            IpcInfo                        = ipcInfo;
            MessageBody                    = arguments;
            OutputFile                     = outputFile;
            ServicePipDependencies         = servicePipDependencies;
            FileDependencies               = fileDependencies;
            LazilyMaterializedDependencies = skipMaterializationFor;
            Tags = tags;
            IsServiceFinalization = isServiceFinalization;
            MustRunOnMaster       = mustRunOnMaster;
            Provenance            = provenance;
            DirectoryDependencies = directoryDependencies;
        }