/// <summary>
        /// Calls perforce server to recieve destination data.
        /// </summary>
        /// <param name="p2"></param>
        /// <returns></returns>
        public string CreateDestinationData(P4Path p2)
        {
            P4Execute             executer = new P4Execute();
            P4ExecutingParameters exePar;

            //Use below code if source and destination are not of depot but are local workspace locations.
            exePar = new P4ExecutingParameters("CMD.exe", "where", "\"" + p2.FilePath + "\"", new List <string> {
                "\"" + @p2.FilePath.ToString() + "\""
            });
            //Parse output from where and then do p4 files.
            string data     = executer.ExecuteCommand(exePar);
            string location = "";

            if (ValidateReceivedData(data, new[] { "..." }))
            {
                location = GetDepotLocation(data, p2.FilePath);
            }
            else
            {
                return(null);
            }

            location = ParseLocation(p2);
            exePar   = new P4ExecutingParameters("CMD.exe", "files", "\"" + p2.FilePath + "\"", new List <string> {
                "\"" + location + "\""
            });
            data = executer.ExecuteCommand(exePar);
            if (ValidateReceivedData(data, new[] { "change" }))
            {
                return(data);
            }
            return(null);
        }
 /// <summary>
 /// Parses path values.
 /// </summary>
 /// <param name="p2"></param>
 /// <returns></returns>
 private string ParseLocation(P4Path p2)
 {
     if (p2.FilePath.EndsWith("/"))
     {
         return(string.Concat(p2.FilePath, "..."));
     }
     return(p2.FilePath);
 }
        /// <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);
        }