/// <summary> /// Async method to get meta data of files from perforce server. /// </summary> /// <param name="fileData"></param> /// <returns></returns> private async Task <P4FileTrunkRevisions> ProcessHistoryCompares(P4File fileData) { P4FileTrunkRevisions revs = null; if (fileData == null) { return(null); } try { revs = new P4FileTrunkRevisions(fileData); } catch (Exception e) { return(null); } P4Execute executer = new P4Execute(); string filePathNoVersion = Path.Combine(fileData.CurrentPath.FilePath.ToString(), fileData.FileName); int highestVersion = Int32.Parse(fileData.FileMetaData.HeadRevision); for (int version = highestVersion; version > 0; version--) { P4ExecutingParameters exePar = new P4ExecutingParameters("CMD.EXE", "fstat", null, new List <string> { "-Osl", "\"" + filePathNoVersion.ToString() + "#" + version + "\"" }); string data = executer.ExecuteCommand(exePar); if (ValidateReceivedData(data, new[] { "...", "depotFile" })) { revs = UpdateFileData(revs, data); } if (version == highestVersion) { revs.CurrentFile = revs.OlderRevisions[0]; } if (!_filters.FindMatch) { break; } //Put to dictionary } return(revs != null ? revs : null); }
/// <summary> /// Stores metadata in meta data object related to a p4File. /// </summary> /// <param name="revs"></param> /// <param name="data"></param> /// <returns></returns> private P4FileTrunkRevisions UpdateFileData(P4FileTrunkRevisions revs, string data) { P4File oldFile = new P4File(); P4Path path = new P4Path(); P4FileMetaData metaData = new P4FileMetaData(); string[] dataArray = data.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < dataArray.Length; i++) { if (dataArray[i].Contains("depotFile")) { string p = dataArray[i].Substring(dataArray[i].IndexOf("/")); metaData.DepotFile = p.Trim(); path.FilePath = Path.GetDirectoryName(p); oldFile.CurrentPath = path; oldFile.FileName = Path.GetFileName(p); continue; } if (dataArray[i].Contains("headAction")) { string p = dataArray[i].Substring(dataArray[i].IndexOf("headAction") + 10); metaData.HeadAction = p.Trim(); } if (dataArray[i].Contains("headType")) { string p = dataArray[i].Substring(dataArray[i].IndexOf("headType") + 8); metaData.HeadType = p.Trim(); continue; } if (dataArray[i].Contains("headTime")) { string p = dataArray[i].Substring(dataArray[i].IndexOf("headTime") + 8); metaData.HeadTime = p.Trim(); continue; } if (dataArray[i].Contains("headRev")) { string p = dataArray[i].Substring(dataArray[i].IndexOf("headRev") + 7); metaData.HeadRevision = p.Trim(); continue; } if (dataArray[i].Contains("headChange")) { string p = dataArray[i].Substring(dataArray[i].IndexOf("headChange") + 10); metaData.HeadChange = p.Trim(); continue; } if (dataArray[i].Contains("headModTime")) { string p = dataArray[i].Substring(dataArray[i].IndexOf("headModTime") + 11); metaData.HeadModTime = p.Trim(); continue; } if (dataArray[i].Contains("haveRev")) { string p = dataArray[i].Substring(dataArray[i].IndexOf("haveRev") + 7); metaData.HaveRevision = p.Trim(); continue; } if (dataArray[i].Contains("fileSize")) { string p = dataArray[i].Substring(dataArray[i].IndexOf("fileSize") + 8); metaData.Filesize = p.Trim(); continue; } if (dataArray[i].Contains("digest")) { string p = dataArray[i].Substring(dataArray[i].IndexOf("digest") + 6); metaData.Digest = p.Trim(); continue; } if (dataArray[i].Contains("isMapped")) { string p = dataArray[i].Substring(dataArray[i].IndexOf("isMapped") + 8); metaData.IsMapped = p.Trim(); continue; } metaData.ExtraHeadProperties = dataArray[i]; } if (string.IsNullOrEmpty(metaData.Digest)) { P4Execute executer = new P4Execute(); P4ExecutingParameters exePar = new P4ExecutingParameters("CMD.EXE", "fstat", null, new List <string> { "-T digest -Ol ", "\"" + metaData.DepotFile + "#" + metaData.HeadRevision + "\"" }); string digest = executer.ExecuteCommand(exePar); if (digest.Contains("digest")) { string p = digest.Substring(digest.IndexOf("digest") + 6); metaData.Digest = p.Trim(); } } oldFile.CurrentPath = path; oldFile.FileMetaData = metaData; revs.OlderRevisions.Add(oldFile); return(revs); }