/// <nodoc /> public static Xldb.Proto.Pip ToPip(this Pip pip, CachedGraph cachedGraph) { var xldbPip = new Xldb.Proto.Pip() { SemiStableHash = pip.SemiStableHash, PipId = pip.PipId.Value, }; foreach (var incomingEdge in cachedGraph.DataflowGraph.GetIncomingEdges(pip.PipId.ToNodeId())) { var pipType = cachedGraph.PipTable.HydratePip(incomingEdge.OtherNode.ToPipId(), Pips.PipQueryContext.Explorer).PipType; if (pipType != PipType.Value && pipType != PipType.HashSourceFile && pipType != PipType.SpecFile && pipType != PipType.Module) { xldbPip.IncomingEdges.Add(incomingEdge.OtherNode.Value); } } foreach (var outgoingEdge in cachedGraph.DataflowGraph.GetOutgoingEdges(pip.PipId.ToNodeId())) { var pipType = cachedGraph.PipTable.HydratePip(outgoingEdge.OtherNode.ToPipId(), Pips.PipQueryContext.Explorer).PipType; if (pipType != PipType.Value && pipType != PipType.HashSourceFile && pipType != PipType.SpecFile && pipType != PipType.Module) { xldbPip.OutgoingEdges.Add(outgoingEdge.OtherNode.Value); } } return(xldbPip); }
/// <nodoc /> public static Xldb.Proto.IpcPip ToIpcPip(this IpcPip pip, PathTable pathTable, Xldb.Proto.Pip parentPip, NameExpander nameExpander) { var xldbIpcPip = new Xldb.Proto.IpcPip() { GraphInfo = parentPip, IpcInfo = new IpcClientInfo() { IpcMonikerId = pip.IpcInfo.IpcMonikerId.ToString(pathTable), }, MessageBody = pip.MessageBody.IsValid ? pip.MessageBody.ToString(pathTable) : "", IsServiceFinalization = pip.IsServiceFinalization, Provenance = pip.Provenance.ToPipProvenance(pathTable), }; if (pip.Tags.IsValid) { xldbIpcPip.Tags.AddRange(pip.Tags.Select(key => key.ToString(pathTable))); } xldbIpcPip.ServicePipDependencies.AddRange(pip.ServicePipDependencies.Select(pipId => pipId.Value)); xldbIpcPip.FileDependencies.AddRange(pip.FileDependencies.Select(file => file.ToFileArtifact(pathTable, nameExpander))); xldbIpcPip.DirectoryDependencies.AddRange(pip.DirectoryDependencies.Select(directory => directory.ToDirectoryArtifact(pathTable, nameExpander))); xldbIpcPip.LazilyMaterializedDependencies.AddRange(pip.LazilyMaterializedDependencies.Select(dep => dep.ToFileOrDirectoryArtifact(pathTable, nameExpander))); return(xldbIpcPip); }
/// <nodoc /> public static ProcessPip ToProcessPip(this Process pip, PathTable pathTable, Xldb.Proto.Pip parentPip, NameExpander nameExpander) { var xldbProcessPip = new ProcessPip { GraphInfo = parentPip, ProcessOptions = pip.ProcessOptions == Process.Options.None ? Options.None : (Options)((int)pip.ProcessOptions << 1), StandardInputFile = pip.StandardInputFile.ToFileArtifact(pathTable, nameExpander), StandardInputData = pip.StandardInputData.IsValid ? pip.StandardInputData.ToString(pathTable) : "", StandardInput = !pip.StandardInput.IsValid ? null : new Xldb.Proto.StandardInput() { File = pip.StandardInput.File.ToFileArtifact(pathTable, nameExpander), Data = pip.StandardInput.Data.ToString(pathTable), IsFile = pip.StandardInput.IsFile, IsData = pip.StandardInput.IsData }, ResponseFile = pip.ResponseFile.ToFileArtifact(pathTable, nameExpander), ResponseFileData = pip.ResponseFileData.IsValid ? pip.ResponseFileData.ToString(pathTable) : "", Executable = pip.Executable.ToFileArtifact(pathTable, nameExpander), ToolDescription = pip.ToolDescription.ToString(pathTable), WorkingDirectory = pip.WorkingDirectory.ToAbsolutePath(pathTable, nameExpander), Arguments = pip.Arguments.IsValid ? pip.Arguments.ToString(pathTable) : "", TempDirectory = pip.TempDirectory.ToAbsolutePath(pathTable, nameExpander), Provenance = pip.Provenance.ToPipProvenance(pathTable), }; if (pip.ServiceInfo.IsValid) { var serviceInfo = new ServiceInfo { Kind = (ServicePipKind)(pip.ServiceInfo.Kind + 1), ShutdownPipId = pip.ServiceInfo.ShutdownPipId.Value, IsStartOrShutdownKind = pip.ServiceInfo.IsStartOrShutdownKind }; serviceInfo.ServicePipDependencies.AddRange(pip.ServiceInfo.ServicePipDependencies.Select(key => key.Value)); serviceInfo.FinalizationPipIds.AddRange(pip.ServiceInfo.FinalizationPipIds.Select(key => key.Value)); xldbProcessPip.ServiceInfo = serviceInfo; } xldbProcessPip.EnvironmentVariable.AddRange(pip.EnvironmentVariables.Select( envVar => new EnvironmentVariable() { Name = envVar.Name.ToString(pathTable), Value = envVar.Value.IsValid ? envVar.Value.ToString(pathTable) : "", IsPassThrough = envVar.IsPassThrough })); xldbProcessPip.Dependencies.AddRange(pip.Dependencies.Select(file => file.ToFileArtifact(pathTable, nameExpander))); xldbProcessPip.DirectoryDependencies.AddRange(pip.DirectoryDependencies.Select(dir => dir.ToDirectoryArtifact(pathTable, nameExpander))); xldbProcessPip.UntrackedPaths.AddRange(pip.UntrackedPaths.Select(path => path.ToAbsolutePath(pathTable, nameExpander))); xldbProcessPip.UntrackedScopes.AddRange(pip.UntrackedScopes.Select(path => path.ToAbsolutePath(pathTable, nameExpander))); xldbProcessPip.FileOutputs.AddRange(pip.FileOutputs.Select(output => !output.IsValid ? null : new Xldb.Proto.FileArtifactWithAttributes() { Path = output.Path.ToAbsolutePath(pathTable, nameExpander), RewriteCount = output.RewriteCount, FileExistence = (Xldb.Proto.FileExistence)(output.FileExistence + 1) })); xldbProcessPip.DirectoryOutputs.AddRange(pip.DirectoryOutputs.Select(dir => dir.ToDirectoryArtifact(pathTable, nameExpander))); xldbProcessPip.AdditionalTempDirectories.AddRange(pip.AdditionalTempDirectories.Select(dir => dir.ToAbsolutePath(pathTable, nameExpander))); xldbProcessPip.PreserveOutputWhitelist.AddRange(pip.PreserveOutputWhitelist.Select(path => path.ToAbsolutePath(pathTable, nameExpander))); if (pip.Tags.IsValid) { xldbProcessPip.Tags.AddRange(pip.Tags.Select(key => key.ToString(pathTable))); } return(xldbProcessPip); }
/// <nodoc /> public static Xldb.Proto.WriteFile ToWriteFile(this WriteFile pip, PathTable pathTable, Xldb.Proto.Pip parentPip, NameExpander nameExpander) { var xldbWriteFile = new Xldb.Proto.WriteFile { GraphInfo = parentPip, Destination = pip.Destination.ToFileArtifact(pathTable, nameExpander), Contents = pip.Contents.IsValid ? pip.Contents.ToString(pathTable) : "", Encoding = (WriteFileEncoding)(pip.Encoding + 1), Provenance = pip.Provenance.ToPipProvenance(pathTable), }; if (pip.Tags.IsValid) { xldbWriteFile.Tags.AddRange(pip.Tags.Select(key => key.ToString(pathTable))); } return(xldbWriteFile); }
/// <nodoc /> public static Xldb.Proto.CopyFile ToCopyFile(this CopyFile pip, PathTable pathTable, Xldb.Proto.Pip parentPip, NameExpander nameExpander) { var xldbCopyFile = new Xldb.Proto.CopyFile { GraphInfo = parentPip, Source = pip.Source.ToFileArtifact(pathTable, nameExpander), Destination = pip.Destination.ToFileArtifact(pathTable, nameExpander), OutputsMustRemainWritable = pip.OutputsMustRemainWritable, Provenance = pip.Provenance.ToPipProvenance(pathTable), }; if (pip.Tags.IsValid) { xldbCopyFile.Tags.AddRange(pip.Tags.Select(key => key.ToString(pathTable))); } return(xldbCopyFile); }
/// <nodoc /> public static Xldb.Proto.SealDirectory ToSealDirectory(this SealDirectory pip, PathTable pathTable, Xldb.Proto.Pip parentPip, NameExpander nameExpander) { var xldbSealDirectory = new Xldb.Proto.SealDirectory { GraphInfo = parentPip, Kind = (SealDirectoryKind)(pip.Kind + 1), IsComposite = pip.IsComposite, Scrub = pip.Scrub, Directory = pip.Directory.ToDirectoryArtifact(pathTable, nameExpander), IsSealSourceDirectory = pip.IsSealSourceDirectory, Provenance = pip.Provenance.ToPipProvenance(pathTable), }; xldbSealDirectory.Patterns.AddRange(pip.Patterns.Select(key => key.ToString(pathTable))); xldbSealDirectory.Contents.AddRange(pip.Contents.Select(file => file.ToFileArtifact(pathTable, nameExpander))); xldbSealDirectory.ComposedDirectories.AddRange(pip.ComposedDirectories.Select(dir => dir.ToDirectoryArtifact(pathTable, nameExpander))); if (pip.Tags.IsValid) { xldbSealDirectory.Tags.AddRange(pip.Tags.Select(key => key.ToString(pathTable))); } return(xldbSealDirectory); }