public void TestRevisions() { LogFile logFile = new LogFile(settings.GetCvsRoot()); LogRevision logRevision1 = new LogRevision(); logRevision1.Revision = "1.1"; logFile.AddRevision(logRevision1); LogRevision logRevision2 = new LogRevision(); logRevision2.Revision = "1.2"; logFile.AddRevision(logRevision2); LogRevision logRevision3 = new LogRevision(); logRevision3.Revision = "1.3"; logFile.AddRevision(logRevision3); Assert.AreEqual(3, logFile.Count); // Test indexer Assert.AreEqual("1.1", logFile[0].Revision); Assert.AreEqual("1.2", logFile[1].Revision); Assert.AreEqual("1.3", logFile[2].Revision); // Test foreach int nIndex = 0; foreach (LogRevision logRevision in logFile) { Assert.IsTrue(nIndex <= 2); if (nIndex == 0) { Assert.AreEqual("1.1", logRevision.Revision); } else if (nIndex == 1) { Assert.AreEqual("1.2", logRevision.Revision); } else if (nIndex == 2) { Assert.AreEqual("1.3", logRevision.Revision); } nIndex++; } }
/// <summary> /// This is called for each Message response we receive from the cvs server. /// </summary> public void OnMessage(string message) { // System.Console.WriteLine(message); // for some reason the message handler is now preceeding // each message with "cvs server: " so we need to strip this off first if (message.StartsWith("cvs server: ")) { message = message.Substring(12); } // only process the lines starting with "M " if (message.StartsWith("M ")) { // Strip of the leading "M " message = message.Substring(2); if (message.StartsWith(revisionEndPrefix)) { // seperator between file and revision or between revisions if (logState == LogState.WANT_FILE_HEADER_START) { // ignore this (shouldn't happen) } else if (logState == LogState.WANT_FILE_HEADER || logState == LogState.WANT_FILE_DESCRIPTION) { // this is the seperator between te file header and the first revision } else { // seperator between revisions curLogFile.AddRevision(curLogRevision); } curLogRevision = new LogRevision(); logState = LogState.WANT_REVISION; } else if (message.StartsWith(fileEndPrefix)) { // seperator between files if (logState == LogState.WANT_FILE_HEADER_START) { // ignore this (shouldn't happen) } else if (logState == LogState.WANT_FILE_HEADER || logState == LogState.WANT_FILE_DESCRIPTION) { // file with no revisions curLogReport.AddFile(curLogFile); } else { // first add the revision curLogFile.AddRevision(curLogRevision); curLogRevision = new LogRevision(); // and now the file curLogReport.AddFile(curLogFile); } curLogFile = new LogFile(this.cvsRoot); logState = LogState.WANT_FILE_HEADER_START; } else { switch (logState) { case LogState.WANT_FILE_HEADER_START: // drop into WANT_FILE_HEADER case LogState.WANT_FILE_HEADER_SYMBOLIC_NAMES: // drop into WANT_FILE_HEADER case LogState.WANT_FILE_HEADER: OnMessageHeader(message); break; case LogState.WANT_FILE_DESCRIPTION: OnMessageDescription(message); break; case LogState.WANT_REVISION: OnMessageRevision(message); break; } } } }