Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
        /// <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);
        }