/// <summary> /// Format the LogReport into a change log /// which will be written to textWriter /// </summary> private void FormatReport(XmlTextWriter textWriter, LogReport logReport) { LogRevision logRevision; // This is where we accumulate information on all the entries from the log command SortedList entries = new SortedList(); LogEntry entry; string prevRevision; // now collect together revisions that were checked-in together foreach (LogFile logFile in logReport) { // foreach (LogRevision logRevision in logFile) // traverse revisions in reverse order so we look at oldest first // which simplifies the remembering the previous revision prevRevision = ""; for (int idx = logFile.Count - 1; idx >= 0; idx--) { logRevision = logFile[idx]; entry = new LogEntry(logRevision.Timestamp, logRevision.Author, logRevision.Comment); // determine if this entry already exists if (entries.ContainsKey(entry.Key)) { // need to update an existing entry entry = (LogEntry)entries[entry.Key]; } else { // add new entry entries.Add(entry.Key, entry); } // finally add details about the file/revision entry.AddFileRevision(logFile.WorkingFnm, logRevision.Revision, prevRevision); prevRevision = logRevision.Revision; } } // now finally produce the XML report // try { textWriter.Formatting = Formatting.Indented; textWriter.WriteStartDocument(); textWriter.WriteStartElement("changelog"); // add the entries ... foreach (DictionaryEntry de in entries) { LogEntry logEntry = (LogEntry)de.Value; logEntry.ExportToXml(textWriter, nameMap); } // finish off textWriter.WriteEndElement(); // changelog textWriter.WriteEndDocument(); textWriter.Close(); // } catch (Exception e) { // System.Console.WriteLine("XML write error: {0}", e.Message); // throw e; // } }