public static LostObject TryParse(GitModule aModule, string raw)
{
if (string.IsNullOrEmpty(raw))
throw new ArgumentException("Raw source must be non-empty string", raw);
var patternMatch = RawDataRegex.Match(raw);
// show failed assertion for unsupported cases (for developers)
// if you get this message,
// you can implement this format parsing
// or post an issue to https://github.com/gitextensions/gitextensions/issues
Debug.Assert(patternMatch.Success, "Lost object's extracted diagnostics format not implemented", raw);
// skip unsupported raw data format (for end users)
if (!patternMatch.Success)
return null;
var matchedGroups = patternMatch.Groups;
Debug.Assert(matchedGroups[4].Success);
var hash = matchedGroups[4].Value;
var result = new LostObject(GetObjectType(matchedGroups), matchedGroups[1].Value, hash);
if (result.ObjectType == LostObjectType.Commit)
{
var commitLog = GetLostCommitLog(aModule, hash);
var logPatternMatch = LogRegex.Match(commitLog);
if (logPatternMatch.Success)
{
result.Author = aModule.ReEncodeStringFromLossless(logPatternMatch.Groups[1].Value);
string encodingName = logPatternMatch.Groups[2].Value;
result.Subject = aModule.ReEncodeCommitMessage(logPatternMatch.Groups[3].Value, encodingName);
result.Date = DateTimeUtils.ParseUnixTime(logPatternMatch.Groups[4].Value);
}
}
return result;
}