private void WriteSummary(SummaryAnalyzer otherAnalyzer, StreamWriter writer) { writer.WriteLine("Current Execution Log = {0}", m_analyzer.ExecutionLogPath); writer.WriteLine("Previous Execution Log: {0}", otherAnalyzer.ExecutionLogPath); writer.WriteLine("Number of Process Pips : {0}", m_analyzer.GetProcessPipCount()); writer.WriteLine("Number of executed Process Pips : {0}", m_analyzer.GetExecutedProcessPipCount()); var fileDependencyDiff = SummaryAnalyzer.GetFileDependencyDiff(m_analyzer.Summary.FileArtifactSummary, otherAnalyzer.Summary.FileArtifactSummary); writer.WriteLine("Number of dependency files with mismatch hash : {0}", fileDependencyDiff.Count()); var observedDiff = SummaryAnalyzer.GetFileDependencyDiff(m_analyzer.Summary.ObservedSummary, otherAnalyzer.Summary.ObservedSummary); writer.WriteLine("Number of observed inputs with mismatch hash : {0}", observedDiff.Count()); if (m_analyzer.Summary.DirectoryMembership.Count == 0 || otherAnalyzer.Summary.DirectoryMembership.Count == 0) { var fileName = m_analyzer.Summary.DirectoryMembership.Count == 0 ? m_analyzer.ExecutionLogPath : otherAnalyzer.ExecutionLogPath; writer.WriteLine("No directory membership event in execution log : {0}", fileName); } else { var directoryMembershipNotInTwo = SummaryAnalyzer.GetDirectoryMembershipDiff(m_analyzer.Summary.DirectoryMembership, otherAnalyzer.Summary.DirectoryMembership); var directoryMembershipNotInOne = SummaryAnalyzer.GetDirectoryMembershipDiff(otherAnalyzer.Summary.DirectoryMembership, m_analyzer.Summary.DirectoryMembership); writer.WriteLine("Number of directory membership differences : {0}", directoryMembershipNotInTwo.Count() + directoryMembershipNotInOne.Count); } int produced = m_analyzer.GetProducedFileCount(); var cached = m_analyzer.GetCachedFileCount(); var upToDate = m_analyzer.GetUpToDateFileCount(); writer.WriteLine("Current XLG Output Files : {0}/{1}/{2}(Produced/FromCache/UpToDate)", produced, cached, upToDate); produced = otherAnalyzer.GetProducedFileCount(); cached = otherAnalyzer.GetCachedFileCount(); upToDate = otherAnalyzer.GetUpToDateFileCount(); writer.WriteLine("Previous XLG Output Files : {0}/{1}/{2}(Produced/FromCache/UpToDate)", produced, cached, upToDate); writer.WriteLine(); }
/// <summary> /// Summary of directory membership differences /// </summary> internal string CompareDirectoryMembership(SummaryAnalyzer otherSummaryAnalyzer) { var directoryMembership = otherSummaryAnalyzer.Summary.DirectoryMembership; var otherLogPath = otherSummaryAnalyzer.ExecutionLogPath; if (m_analyzer.Summary.DirectoryMembership.Count == 0 || otherSummaryAnalyzer.Summary.DirectoryMembership.Count == 0) { var fileName = m_analyzer.Summary.DirectoryMembership.Count == 0 ? m_analyzer.ExecutionLogPath : otherLogPath; return(string.Format(CultureInfo.InvariantCulture, "No directory membership events in execution log : {0}", fileName)); } // Find the top observed imput directories that have changed and make sure the enumeration is listed var observedDiff = SummaryAnalyzer.GetFileDependencyDiff(m_analyzer.Summary.ObservedSummary, otherSummaryAnalyzer.Summary.ObservedSummary).ToList(); var count = 0; var directoriesToEnumerate = new HashSet <string>(); foreach (var entry in observedDiff) { if (m_analyzer.Summary.DirectoryMembership.ContainsKey(entry.Name)) { directoriesToEnumerate.Add(entry.Name); } if (count++ > m_analyzer.MaxDifferenceReportCount) { break; } } var directoryMembershipNotInTwo = SummaryAnalyzer.GetDirectoryMembershipDiff(m_analyzer.Summary.DirectoryMembership, directoryMembership); var directoryMembershipNotInOne = SummaryAnalyzer.GetDirectoryMembershipDiff(directoryMembership, m_analyzer.Summary.DirectoryMembership); using (var output = new StringWriter(CultureInfo.InvariantCulture)) { var hadOutput = false; output.WriteLine("Top Directory Membership Differences:"); output.WriteLine("Current Execution Log = {0}", m_analyzer.ExecutionLogPath); output.WriteLine("Previous Execution Log = {0}", otherLogPath); output.WriteLine("Directory | Current Execution Log | Previous Execution Log"); int outReportCount = 0; // Enumerate changes in observed inputs first to show those relevant changes foreach (var directory in directoriesToEnumerate) { List <string> entry; if (directoryMembershipNotInTwo.TryGetValue(directory, out entry)) { hadOutput = PrintDirectoryEnumeration(output, directory, entry); if (outReportCount++ > m_analyzer.MaxDifferenceReportCount) { break; } } } foreach (var s in directoryMembershipNotInTwo) { if (directoriesToEnumerate.Contains(s.Key)) { continue; } hadOutput = PrintDirectoryEnumeration(output, s.Key, s.Value); if (outReportCount++ > m_analyzer.MaxDifferenceReportCount) { break; } } foreach (var s in directoryMembershipNotInOne) { hadOutput = PrintDirectoryEnumeration(output, s.Key, s.Value); if (outReportCount++ > m_analyzer.MaxDifferenceReportCount) { break; } } return(hadOutput ? output.ToString() : "Directory Membership Differences: none"); } }