public ReEncodeCommitMessage ( string s, string toEncodingName ) : string | ||
s | string | |
toEncodingName | string | |
return | string |
public string ReEncodeCommitMessage(string s, string toEncodingName)
{
bool isABug = true;
Encoding encoding;
try
{
if (isABug)
{
if (toEncodingName.IsNullOrEmpty())
encoding = Encoding.UTF8;
else if (toEncodingName.Equals(LosslessEncoding.HeaderName, StringComparison.InvariantCultureIgnoreCase))
encoding = null; //no recoding is needed
else if (CpEncodingPattern.IsMatch(toEncodingName)) // Encodings written as e.g. "cp1251", which is not a supported encoding string
encoding = Encoding.GetEncoding(int.Parse(toEncodingName.Substring(2)));
else
encoding = Encoding.GetEncoding(toEncodingName);
}
else//if bug will be fixed, git should recode commit message to LogOutputEncoding
encoding = LogOutputEncoding;
}
catch (Exception)
{
return s + "\n\n! Unsupported commit message encoding: " + toEncodingName + " !";
}
return ReEncodeStringFromLossless(s, encoding);
}
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; }