Beispiel #1
0
        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;
		}