mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-11-22 11:12:36 +01:00
Refact of UpdateAssemblyInfo
Save with re-try + some refactoring
This commit is contained in:
parent
36faa975d8
commit
6d27d55fbf
@ -36,13 +36,13 @@ namespace UpdateAssemblyInfo
|
|||||||
|
|
||||||
private class VersionInfo : IComparable<VersionInfo>, IEquatable<VersionInfo>
|
private class VersionInfo : IComparable<VersionInfo>, IEquatable<VersionInfo>
|
||||||
{
|
{
|
||||||
public int Major { get; private set; }
|
private int Major { get; }
|
||||||
public int Minor { get; private set; }
|
private int Minor { get; }
|
||||||
public int Maintenance { get; private set; }
|
private int Maintenance { get; }
|
||||||
public int Build { get; private set; }
|
public int Build { get; }
|
||||||
public string RevisionGuid { get; private set; }
|
public string RevisionGuid { get; }
|
||||||
|
|
||||||
public string FullVersion => string.Format(CultureInfo.InvariantCulture, "{0:D}.{1:D}.{2:D}.{3:D} {4}", Major, Minor, Maintenance, Build, RevisionGuid).TrimEnd();
|
public string FullVersion => string.Format(CultureInfo.InvariantCulture, "{0:D}.{1:D}.{2:D}.{3:D} {4}", Major, Minor, Maintenance, Build, RevisionGuid).TrimEnd();
|
||||||
public string ShortVersion => string.Format(CultureInfo.InvariantCulture, "{0:D}.{1:D}.{2:D}", Major, Minor, Maintenance);
|
public string ShortVersion => string.Format(CultureInfo.InvariantCulture, "{0:D}.{1:D}.{2:D}", Major, Minor, Maintenance);
|
||||||
public string MajorMinor => string.Format(CultureInfo.InvariantCulture, "{0:D}.{1:D}", Major, Minor);
|
public string MajorMinor => string.Format(CultureInfo.InvariantCulture, "{0:D}.{1:D}", Major, Minor);
|
||||||
|
|
||||||
@ -125,12 +125,12 @@ namespace UpdateAssemblyInfo
|
|||||||
|
|
||||||
public static bool operator ==(VersionInfo vi1, VersionInfo vi2)
|
public static bool operator ==(VersionInfo vi1, VersionInfo vi2)
|
||||||
{
|
{
|
||||||
return ReferenceEquals(vi2, null) ? ReferenceEquals(vi1, null) : vi2.Equals(vi1);
|
return vi2?.Equals(vi1) ?? ReferenceEquals(vi1, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool operator !=(VersionInfo vi1, VersionInfo vi2)
|
public static bool operator !=(VersionInfo vi1, VersionInfo vi2)
|
||||||
{
|
{
|
||||||
return ReferenceEquals(vi2, null) ? !ReferenceEquals(vi1, null) : !vi2.Equals(vi1);
|
return !vi2?.Equals(vi1) ?? !ReferenceEquals(vi1, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool operator >(VersionInfo vi1, VersionInfo vi2)
|
public static bool operator >(VersionInfo vi1, VersionInfo vi2)
|
||||||
@ -150,7 +150,7 @@ namespace UpdateAssemblyInfo
|
|||||||
// <language-id> "-" <script-id> "-" <region-id> ".xml" (e.g., sr-Cyrl-RS.xml)
|
// <language-id> "-" <script-id> "-" <region-id> ".xml" (e.g., sr-Cyrl-RS.xml)
|
||||||
// <language-id> "-" <script-id> ".xml" (e.g., zh-Hans.xml)
|
// <language-id> "-" <script-id> ".xml" (e.g., zh-Hans.xml)
|
||||||
// <language-id> "-" <region-id> ".xml" (e.g., nb-NO.xml)
|
// <language-id> "-" <region-id> ".xml" (e.g., nb-NO.xml)
|
||||||
var fileNamePattern = string.Format(@"[\{0}\{1}][a-z]{{2,3}}-[A-Z][A-Za-z-]+\.xml\z", Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar);
|
var fileNamePattern = $@"[\{Path.AltDirectorySeparatorChar}\{Path.DirectorySeparatorChar}][a-z]{{2,3}}-[A-Z][A-Za-z-]+\.xml\z";
|
||||||
var fileNameRegex = new Regex(fileNamePattern, RegexOptions.Compiled | RegexOptions.ExplicitCapture | RegexOptions.CultureInvariant);
|
var fileNameRegex = new Regex(fileNamePattern, RegexOptions.Compiled | RegexOptions.ExplicitCapture | RegexOptions.CultureInvariant);
|
||||||
var translation = new XmlDocument { XmlResolver = null };
|
var translation = new XmlDocument { XmlResolver = null };
|
||||||
|
|
||||||
@ -158,8 +158,7 @@ namespace UpdateAssemblyInfo
|
|||||||
{
|
{
|
||||||
translation.Load(fileName);
|
translation.Load(fileName);
|
||||||
|
|
||||||
var node = translation.DocumentElement.SelectSingleNode("General/Version") as XmlElement;
|
if (translation.DocumentElement?.SelectSingleNode("General/Version") is XmlElement node && node.InnerText.Trim() == oldVersion.ShortVersion)
|
||||||
if (node != null && node.InnerText.Trim() == oldVersion.ShortVersion)
|
|
||||||
{
|
{
|
||||||
node.InnerText = newVersion.ShortVersion;
|
node.InnerText = newVersion.ShortVersion;
|
||||||
}
|
}
|
||||||
@ -185,7 +184,7 @@ namespace UpdateAssemblyInfo
|
|||||||
var length = tmx14Match.Groups["version"].Length;
|
var length = tmx14Match.Groups["version"].Length;
|
||||||
tmx14Text = tmx14Text.Remove(index, length).Insert(index, newVersion.MajorMinor);
|
tmx14Text = tmx14Text.Remove(index, length).Insert(index, newVersion.MajorMinor);
|
||||||
|
|
||||||
File.WriteAllText(tmx14FileName, tmx14Text, Encoding.UTF8);
|
SaveWithRetry(tmx14FileName, tmx14Text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -212,17 +211,34 @@ namespace UpdateAssemblyInfo
|
|||||||
length = templateMatch.Groups["year"].Length;
|
length = templateMatch.Groups["year"].Length;
|
||||||
templateText = templateText.Remove(index, length).Insert(index, DateTime.UtcNow.Year.ToString("D4", CultureInfo.InvariantCulture));
|
templateText = templateText.Remove(index, length).Insert(index, DateTime.UtcNow.Year.ToString("D4", CultureInfo.InvariantCulture));
|
||||||
|
|
||||||
File.WriteAllText(templateFileName, templateText, Encoding.UTF8);
|
SaveWithRetry(templateFileName, templateText);
|
||||||
}
|
}
|
||||||
|
|
||||||
var assemblyInfoText = templateText.Replace("[REVNO]", newVersion.Build.ToString(CultureInfo.InvariantCulture)).Replace("[GITHASH]", newVersion.RevisionGuid);
|
var assemblyInfoText = templateText.Replace("[REVNO]", newVersion.Build.ToString(CultureInfo.InvariantCulture)).Replace("[GITHASH]", newVersion.RevisionGuid);
|
||||||
var assemblyInfoFileName = templateFileName.Replace(".template", string.Empty);
|
var assemblyInfoFileName = templateFileName.Replace(".template", string.Empty);
|
||||||
File.WriteAllText(assemblyInfoFileName, assemblyInfoText, Encoding.UTF8);
|
SaveWithRetry(assemblyInfoFileName, assemblyInfoText);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void SaveWithRetry(string fileName, string content)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 10; i++)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
File.WriteAllText(fileName, content, Encoding.UTF8);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
System.Threading.Thread.Sleep(10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
File.WriteAllText(fileName, content, Encoding.UTF8);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void GetRepositoryVersions(out VersionInfo currentRepositoryVersion, out VersionInfo latestRepositoryVersion)
|
private static void GetRepositoryVersions(out VersionInfo currentRepositoryVersion, out VersionInfo latestRepositoryVersion)
|
||||||
{
|
{
|
||||||
var workingDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
|
var workingDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly()?.Location);
|
||||||
var clrHash = new CommandLineRunner();
|
var clrHash = new CommandLineRunner();
|
||||||
var clrTags = new CommandLineRunner();
|
var clrTags = new CommandLineRunner();
|
||||||
var gitPath = GetGitPath();
|
var gitPath = GetGitPath();
|
||||||
@ -267,7 +283,9 @@ namespace UpdateAssemblyInfo
|
|||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
// ignored
|
||||||
}
|
}
|
||||||
|
|
||||||
return new VersionInfo();
|
return new VersionInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -294,7 +312,7 @@ namespace UpdateAssemblyInfo
|
|||||||
private static int Main(string[] args)
|
private static int Main(string[] args)
|
||||||
{
|
{
|
||||||
var myName = Environment.GetCommandLineArgs()[0];
|
var myName = Environment.GetCommandLineArgs()[0];
|
||||||
myName = Path.GetFileNameWithoutExtension(string.IsNullOrWhiteSpace(myName) ? System.Reflection.Assembly.GetEntryAssembly().Location : myName);
|
myName = Path.GetFileNameWithoutExtension(string.IsNullOrWhiteSpace(myName) ? System.Reflection.Assembly.GetEntryAssembly()?.Location : myName);
|
||||||
if (args.Length != 2)
|
if (args.Length != 2)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Usage: " + myName + " <se-assmbly-template> <libse-assmbly-template>");
|
Console.WriteLine("Usage: " + myName + " <se-assmbly-template> <libse-assmbly-template>");
|
||||||
@ -307,11 +325,9 @@ namespace UpdateAssemblyInfo
|
|||||||
{
|
{
|
||||||
var seTemplateFileName = Environment.GetCommandLineArgs()[1];
|
var seTemplateFileName = Environment.GetCommandLineArgs()[1];
|
||||||
var libSeTemplateFileName = Environment.GetCommandLineArgs()[2];
|
var libSeTemplateFileName = Environment.GetCommandLineArgs()[2];
|
||||||
VersionInfo currentRepositoryVersion;
|
|
||||||
VersionInfo latestRepositoryVersion;
|
|
||||||
VersionInfo newVersion;
|
VersionInfo newVersion;
|
||||||
|
|
||||||
GetRepositoryVersions(out currentRepositoryVersion, out latestRepositoryVersion);
|
GetRepositoryVersions(out var currentRepositoryVersion, out var latestRepositoryVersion);
|
||||||
var currentVersion = GetCurrentVersion(seTemplateFileName);
|
var currentVersion = GetCurrentVersion(seTemplateFileName);
|
||||||
var updateTemplateFile = false;
|
var updateTemplateFile = false;
|
||||||
if (latestRepositoryVersion.RevisionGuid.Length > 0 && currentVersion > latestRepositoryVersion && latestRepositoryVersion == currentRepositoryVersion)
|
if (latestRepositoryVersion.RevisionGuid.Length > 0 && currentVersion > latestRepositoryVersion && latestRepositoryVersion == currentRepositoryVersion)
|
||||||
@ -338,9 +354,9 @@ namespace UpdateAssemblyInfo
|
|||||||
if (updateTemplateFile)
|
if (updateTemplateFile)
|
||||||
{
|
{
|
||||||
var oldVersion = GetTemplateVersion(seTemplateFileName);
|
var oldVersion = GetTemplateVersion(seTemplateFileName);
|
||||||
var languagesFolderName = Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(seTemplateFileName)), "Languages");
|
var languagesFolderName = Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(seTemplateFileName)) ?? throw new InvalidOperationException(), "Languages");
|
||||||
UpdateTranslations(languagesFolderName, newVersion, oldVersion);
|
UpdateTranslations(languagesFolderName, newVersion, oldVersion);
|
||||||
var tmx14FileName = Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(libSeTemplateFileName)), "SubtitleFormats", "Tmx14.cs");
|
var tmx14FileName = Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(libSeTemplateFileName)) ?? throw new InvalidOperationException(), "SubtitleFormats", "Tmx14.cs");
|
||||||
UpdateTmx14ToolVersion(tmx14FileName, newVersion, oldVersion);
|
UpdateTmx14ToolVersion(tmx14FileName, newVersion, oldVersion);
|
||||||
}
|
}
|
||||||
UpdateAssemblyInfo(libSeTemplateFileName, newVersion, updateTemplateFile);
|
UpdateAssemblyInfo(libSeTemplateFileName, newVersion, updateTemplateFile);
|
||||||
@ -457,6 +473,5 @@ namespace UpdateAssemblyInfo
|
|||||||
WriteWarning("Might not be able to run Git command line tool!");
|
WriteWarning("Might not be able to run Git command line tool!");
|
||||||
return "git";
|
return "git";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user