bool TryParseFileChangeSummary(List <string> Lines, ref int LineIdx, out PerforceFileChangeSummary OutChange) { string[] Tokens = Lines[LineIdx].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (Tokens.Length != 10 || !Tokens[0].StartsWith("#") || Tokens[1] != "change" || Tokens[4] != "on" || Tokens[7] != "by") { OutChange = null; return(false); } PerforceFileChangeSummary Change = new PerforceFileChangeSummary(); if (!int.TryParse(Tokens[0].Substring(1), out Change.Revision) || !int.TryParse(Tokens[2], out Change.ChangeNumber) || !DateTime.TryParse(Tokens[5] + " " + Tokens[6], out Change.Date)) { OutChange = null; return(false); } int UserClientIdx = Tokens[8].IndexOf('@'); if (UserClientIdx == -1) { OutChange = null; return(false); } Change.Action = Tokens[3]; Change.Type = Tokens[9].Trim('(', ')'); Change.User = Tokens[8].Substring(0, UserClientIdx); Change.Client = Tokens[8].Substring(UserClientIdx + 1); StringBuilder Description = new StringBuilder(); for (; LineIdx + 1 < Lines.Count; LineIdx++) { if (Lines[LineIdx + 1].Length == 0) { Description.AppendLine(); } else if (Lines[LineIdx + 1].StartsWith("\t")) { Description.AppendLine(Lines[LineIdx + 1].Substring(1)); } else { break; } } Change.Description = Description.ToString().Trim(); OutChange = Change; return(true); }
bool TryParseFileChangeSummary(List<string> Lines, ref int LineIdx, out PerforceFileChangeSummary OutChange) { string[] Tokens = Lines[LineIdx].Split(new char[]{ ' ' }, StringSplitOptions.RemoveEmptyEntries); if(Tokens.Length != 10 || !Tokens[0].StartsWith("#") || Tokens[1] != "change" || Tokens[4] != "on" || Tokens[7] != "by") { OutChange = null; return false; } PerforceFileChangeSummary Change = new PerforceFileChangeSummary(); if(!int.TryParse(Tokens[0].Substring(1), out Change.Revision) || !int.TryParse(Tokens[2], out Change.ChangeNumber) || !DateTime.TryParse(Tokens[5] + " " + Tokens[6], out Change.Date)) { OutChange = null; return false; } int UserClientIdx = Tokens[8].IndexOf('@'); if(UserClientIdx == -1) { OutChange = null; return false; } Change.Action = Tokens[3]; Change.Type = Tokens[9].Trim('(', ')'); Change.User = Tokens[8].Substring(0, UserClientIdx); Change.Client = Tokens[8].Substring(UserClientIdx + 1); StringBuilder Description = new StringBuilder(); for(; LineIdx + 1 < Lines.Count; LineIdx++) { if(Lines[LineIdx + 1].Length == 0) { Description.AppendLine(); } else if(Lines[LineIdx + 1].StartsWith("\t")) { Description.AppendLine(Lines[LineIdx + 1].Substring(1)); } else { break; } } Change.Description = Description.ToString().Trim(); OutChange = Change; return true; }