/// <summary> /// データ解析しコミットログ情報リスト生成 /// </summary> /// <param name="logData">ログデータ</param> /// <param name="extensions">抽出する拡張子</param> /// <param name="filters">抽出するキーワード</param> /// <returns></returns> public static SubversionLogs CreateSubversionLogs(string logData, List <string> extensions, List <string> filters) { SubversionLogs lst = new SubversionLogs(); //コミットログのブロックへ分割 List <string> blocks = SubversionLogs.AnalyzeLogBlock(logData); //ブロックの解析 foreach (String block in blocks) { //リビジョン生成 RevisionInfo ri = new RevisionInfo(block); //作者生成 AuthorInfo ai = new AuthorInfo(block); //日時情報 DateInfo di = new DateInfo(block); //コメント生成 int comS = block.IndexOf("メッセージ:") + "メッセージ:".Length; int comE = block.IndexOf("----", comS); string com = block.Substring(comS, comE - comS); //変更ファイル情報生成 List <ModifyFileInfo> modFis = new List <ModifyFileInfo>(); foreach (String line in block.Substring(comE + "----".Length).Split("\r\n".ToCharArray())) { ModifyFileInfo mdf = new ModifyFileInfo(line); if (mdf.HasValue && (extensions.Count <= 0 || extensions.Contains(mdf.FileExtension))) { modFis.Add(mdf); } } //情報が揃っている if (ri.HasValue && ai.HasValue && di.HasValue && !String.IsNullOrEmpty(com) && modFis.Count > 0) { //フィルタリング if (filters.Count > 0 && !filters.Exists(filter => com.Contains(filter))) { continue; } lst.Add(new SubversionLogInfo(ri, ai, di, com.Trim("\r\n".ToCharArray()), modFis)); } } return(lst); }