Exemple #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));
        }
Exemple #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));
 }
Exemple #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));
        }
Exemple #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;
        }