/// <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);
        }