private void DumpPip(Pip pip, AnalysisInput analysisInput, string dumpPath) { var dumpPipAnalyzer = new DumpPipAnalyzer(analysisInput, dumpPath, pip.SemiStableHash, true, false); var result = dumpPipAnalyzer.Analyze(); if (result != 0) { throw new Exception($"DumpPip failed for {pip.FormattedSemiStableHash}"); } }
public Analyzer InitializeDumpPipAnalyzer() { string outputFilePath = null; long semiStableHash = 0; bool useOriginalPaths = false; DirectoryArtifact outputDirectory = default; foreach (var opt in AnalyzerOptions) { if (opt.Name.Equals("outputFile", StringComparison.OrdinalIgnoreCase) || opt.Name.Equals("o", StringComparison.OrdinalIgnoreCase)) { outputFilePath = ParseSingletonPathOption(opt, outputFilePath); } else if (opt.Name.Equals("pip", StringComparison.OrdinalIgnoreCase) || opt.Name.Equals("p", StringComparison.OrdinalIgnoreCase)) { semiStableHash = ParseSemistableHash(opt); } else if (opt.Name.Equals("useOriginalPaths", StringComparison.OrdinalIgnoreCase) || opt.Name.Equals("u", StringComparison.OrdinalIgnoreCase)) { useOriginalPaths = ParseBooleanOption(opt); } else if (opt.Name.Equals("directory", StringComparison.OrdinalIgnoreCase) || opt.Name.Equals("d", StringComparison.OrdinalIgnoreCase)) { outputDirectory = parseDirectoryArtifact(opt); } else { throw Error("Unknown option for dump pip analysis: {0}", opt.Name); } } if ((semiStableHash == 0) == (!outputDirectory.IsValid)) { throw Error("Either /pip or /directory parameter must be specified"); } return(new DumpPipAnalyzer(GetAnalysisInput(), outputFilePath, semiStableHash, outputDirectory, useOriginalPaths)); DirectoryArtifact parseDirectoryArtifact(Option opt) { if (!DumpPipAnalyzer.TryDeserializeDirectoryArtifact(opt.Value, out DirectoryArtifact directory) || !directory.IsValid) { throw Error("Invalid directory artifact: {0}.", opt.Value); } return(directory); } }