mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-11-22 03:02:35 +01:00
Making version maintaining easier (only update in SubtitleEdit AssemblyInfo.cs - libse auto updated)
This commit is contained in:
parent
a546bdacb1
commit
6e438005b0
@ -38,9 +38,9 @@ IF NOT EXIST "src\UpdateAssemblyInfo\bin\Release\UpdateAssemblyInfo.exe" IF NOT
|
|||||||
)
|
)
|
||||||
|
|
||||||
IF EXIST "src\UpdateAssemblyInfo\bin\Release\UpdateAssemblyInfo.exe" (
|
IF EXIST "src\UpdateAssemblyInfo\bin\Release\UpdateAssemblyInfo.exe" (
|
||||||
"src\UpdateAssemblyInfo\bin\Release\UpdateAssemblyInfo.exe" "src\Properties\AssemblyInfo.cs.template" "src\Properties\AssemblyInfo.cs"
|
"src\UpdateAssemblyInfo\bin\Release\UpdateAssemblyInfo.exe" "src\Properties\AssemblyInfo.cs.template" "libse\Properties\AssemblyInfo.cs.template"
|
||||||
) ELSE (
|
) ELSE (
|
||||||
"src\UpdateAssemblyInfo\bin\Debug\UpdateAssemblyInfo.exe" "src\Properties\AssemblyInfo.cs.template" "src\Properties\AssemblyInfo.cs"
|
"src\UpdateAssemblyInfo\bin\Debug\UpdateAssemblyInfo.exe" "src\Properties\AssemblyInfo.cs.template" "libse\Properties\AssemblyInfo.cs.template"
|
||||||
)
|
)
|
||||||
|
|
||||||
IF %ERRORLEVEL% NEQ 0 (
|
IF %ERRORLEVEL% NEQ 0 (
|
||||||
|
@ -437,6 +437,11 @@
|
|||||||
<Compile Include="ZipExtractor.cs" />
|
<Compile Include="ZipExtractor.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<PreBuildEvent>IF NOT EXIST "$(ProjectDir)Properties\AssemblyInfo.cs" (
|
||||||
|
COPY "$(ProjectDir)Properties\AssemblyInfo.cs.template" "$(ProjectDir)Properties\AssemblyInfo.cs"
|
||||||
|
)</PreBuildEvent>
|
||||||
|
</PropertyGroup>
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
<Target Name="BeforeBuild">
|
<Target Name="BeforeBuild">
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
using System.Reflection;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
|
||||||
// set of attributes. Change these attribute values to modify the information
|
|
||||||
// associated with an assembly.
|
|
||||||
[assembly: AssemblyTitle("libse")]
|
|
||||||
[assembly: AssemblyDescription("")]
|
|
||||||
[assembly: AssemblyConfiguration("")]
|
|
||||||
[assembly: AssemblyCompany("")]
|
|
||||||
[assembly: AssemblyProduct("libse")]
|
|
||||||
[assembly: AssemblyCopyright("Copyright © 2015")]
|
|
||||||
[assembly: AssemblyTrademark("")]
|
|
||||||
[assembly: AssemblyCulture("")]
|
|
||||||
|
|
||||||
// Setting ComVisible to false makes the types in this assembly not visible
|
|
||||||
// to COM components. If you need to access a type in this assembly from
|
|
||||||
// COM, set the ComVisible attribute to true on that type.
|
|
||||||
[assembly: ComVisible(false)]
|
|
||||||
|
|
||||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
|
||||||
[assembly: Guid("eab3b9db-0f82-4843-982b-05a4c51888a2")]
|
|
||||||
|
|
||||||
// Version information for an assembly consists of the following four values:
|
|
||||||
//
|
|
||||||
// Major Version
|
|
||||||
// Minor Version
|
|
||||||
// Build Number
|
|
||||||
// Revision
|
|
||||||
//
|
|
||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
|
||||||
// by using the '*' as shown below:
|
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
|
||||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
15
libse/Properties/AssemblyInfo.cs.template
Normal file
15
libse/Properties/AssemblyInfo.cs.template
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
[assembly: AssemblyTitle("libse")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("libse")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2015")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
[assembly: Guid("eab3b9db-0f82-4843-982b-05a4c51888a2")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
@ -1547,7 +1547,7 @@ namespace Nikse.SubtitleEdit.Core
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return Assembly.GetExecutingAssembly().GetName().Version.ToString();
|
return Assembly.GetEntryAssembly().GetName().Version.ToString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1555,15 +1555,14 @@ namespace Nikse.SubtitleEdit.Core
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
Assembly assy = Assembly.GetExecutingAssembly();
|
var assembly = Assembly.GetEntryAssembly();
|
||||||
String assyName = assy.GetName().Name;
|
string assemblyName = assembly.GetName().Name;
|
||||||
bool isdef = Attribute.IsDefined(assy, typeof(AssemblyDescriptionAttribute));
|
if (Attribute.IsDefined(assembly, typeof(AssemblyDescriptionAttribute)))
|
||||||
if (isdef)
|
|
||||||
{
|
{
|
||||||
Console.WriteLine(assyName);
|
Console.WriteLine(assemblyName);
|
||||||
var adAttr = (AssemblyDescriptionAttribute)Attribute.GetCustomAttribute(assy, typeof(AssemblyDescriptionAttribute));
|
var descriptionAttribute = (AssemblyDescriptionAttribute)Attribute.GetCustomAttribute(assembly, typeof(AssemblyDescriptionAttribute));
|
||||||
if (adAttr != null)
|
if (descriptionAttribute != null)
|
||||||
return adAttr.Description;
|
return descriptionAttribute.Description;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -7,95 +7,170 @@ namespace UpdateAssemblyInfo
|
|||||||
internal class Program
|
internal class Program
|
||||||
{
|
{
|
||||||
|
|
||||||
private class Template
|
private class VersionInfo
|
||||||
{
|
{
|
||||||
private string templateFile;
|
public string Version { get; set; }
|
||||||
private string templateText;
|
public string RevisionGuid { get; set; }
|
||||||
|
public string BuildNumber { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
public Template(string path)
|
private static void UpdateAssemblyInfo(string templateFileName, VersionInfo versionInfo)
|
||||||
|
{
|
||||||
|
var lines = File.ReadAllLines(templateFileName);
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
bool change = false;
|
||||||
|
foreach (var line in lines)
|
||||||
{
|
{
|
||||||
templateFile = path;
|
var original = line;
|
||||||
}
|
var l = line.Trim();
|
||||||
|
while (l.Contains(" "))
|
||||||
public void Replace(string source, string replacement)
|
|
||||||
{
|
|
||||||
if (templateText == null)
|
|
||||||
{
|
{
|
||||||
templateText = File.ReadAllText(templateFile);
|
l = l.Replace(" ", " ");
|
||||||
}
|
}
|
||||||
templateText = templateText.Replace(source, replacement);
|
if (l.StartsWith("[assembly: AssemblyVersion", StringComparison.Ordinal) ||
|
||||||
|
l.StartsWith("[assembly:AssemblyVersion", StringComparison.Ordinal) ||
|
||||||
|
l.StartsWith("[assembly: AssemblyFileVersion", StringComparison.Ordinal) ||
|
||||||
|
l.StartsWith("[assembly:AssemblyFileVersion", StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
int begin = original.IndexOf('"');
|
||||||
|
int end = original.LastIndexOf('"');
|
||||||
|
if (end > begin && begin > 0)
|
||||||
|
{
|
||||||
|
begin++;
|
||||||
|
string oldVersion = original.Substring(begin, end - begin);
|
||||||
|
if (oldVersion != versionInfo.Version)
|
||||||
|
{
|
||||||
|
change = true;
|
||||||
|
original = original.Substring(0, begin) + versionInfo.Version + original.Remove(0, end);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (l.StartsWith("[assembly: AssemblyDescription", StringComparison.Ordinal) ||
|
||||||
|
l.StartsWith("[assembly:AssemblyDescription", StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
int begin = original.IndexOf('"');
|
||||||
|
int end = original.LastIndexOf('"');
|
||||||
|
if (end > begin && begin > 0)
|
||||||
|
{
|
||||||
|
begin++;
|
||||||
|
string oldVersion = original.Substring(begin, end - begin);
|
||||||
|
if (oldVersion != versionInfo.Version)
|
||||||
|
{
|
||||||
|
change = true;
|
||||||
|
original = original.Substring(0, begin) + versionInfo.RevisionGuid + original.Remove(0, end);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sb.AppendLine(original);
|
||||||
}
|
}
|
||||||
|
if (change)
|
||||||
public void Save(string target)
|
|
||||||
{
|
{
|
||||||
File.WriteAllText(target, templateText, Encoding.UTF8);
|
File.WriteAllText(templateFileName.Replace(".template", string.Empty), sb.ToString().Trim());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static VersionInfo GetOldVersionNumber(string subtitleEditTemplateFileName)
|
||||||
|
{
|
||||||
|
var version = new VersionInfo { Version = "1.0.0.0", RevisionGuid = "0" };
|
||||||
|
var lines = File.ReadAllLines(subtitleEditTemplateFileName.Replace(".template", string.Empty));
|
||||||
|
foreach (var line in lines)
|
||||||
|
{
|
||||||
|
var l = line.Trim();
|
||||||
|
while (l.Contains(" "))
|
||||||
|
{
|
||||||
|
l = l.Replace(" ", " ");
|
||||||
|
}
|
||||||
|
if (l.StartsWith("[assembly: AssemblyVersion", StringComparison.Ordinal) ||
|
||||||
|
l.StartsWith("[assembly:AssemblyVersion", StringComparison.Ordinal) ||
|
||||||
|
l.StartsWith("[assembly: AssemblyFileVersion", StringComparison.Ordinal) ||
|
||||||
|
l.StartsWith("[assembly:AssemblyFileVersion", StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
int begin = l.IndexOf('"');
|
||||||
|
int end = l.LastIndexOf('"');
|
||||||
|
if (end > begin && begin > 0)
|
||||||
|
{
|
||||||
|
begin++;
|
||||||
|
version.Version = l.Substring(begin, end - begin);
|
||||||
|
version.BuildNumber = version.Version.Substring(version.Version.LastIndexOf('.') + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (l.StartsWith("[assembly: AssemblyDescription", StringComparison.Ordinal) ||
|
||||||
|
l.StartsWith("[assembly:AssemblyDescription", StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
int begin = l.IndexOf("\"", StringComparison.Ordinal);
|
||||||
|
int end = l.LastIndexOf("\"", StringComparison.Ordinal);
|
||||||
|
if (end > begin && begin > 0)
|
||||||
|
{
|
||||||
|
begin++;
|
||||||
|
version.RevisionGuid = l.Substring(begin, end - begin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (string.IsNullOrWhiteSpace(version.Version))
|
||||||
|
{
|
||||||
|
Console.WriteLine("WARNING: Could not find version number - will use 1.0.0");
|
||||||
|
}
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static VersionInfo GetNewVersion()
|
||||||
|
{
|
||||||
|
var version = new VersionInfo { Version = "1.0.0.0", RevisionGuid = "0", BuildNumber = "9999" };
|
||||||
|
var workingFolder = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
|
||||||
|
var clrHash = new CommandLineRunner();
|
||||||
|
var clrTags = new CommandLineRunner();
|
||||||
|
var gitPath = GetGitPath();
|
||||||
|
if (clrHash.RunCommandAndGetOutput(gitPath, "rev-parse --verify HEAD", workingFolder) && clrTags.RunCommandAndGetOutput(gitPath, "describe --tags", workingFolder))
|
||||||
|
{
|
||||||
|
version.RevisionGuid = clrHash.Result;
|
||||||
|
|
||||||
|
version.Version = clrTags.Result.Substring(0, clrTags.Result.LastIndexOf('-'));
|
||||||
|
version.Version = version.Version.Replace("-", ".");
|
||||||
|
|
||||||
|
version.BuildNumber = version.Version.Remove(0, version.Version.LastIndexOf('.')).Trim('.');
|
||||||
|
}
|
||||||
|
if (version.RevisionGuid == "0" && version.BuildNumber == "9999")
|
||||||
|
{
|
||||||
|
Console.WriteLine("WARNING: Could not run Git - build number will be 9999!");
|
||||||
|
}
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
|
||||||
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)
|
myName = Path.GetFileNameWithoutExtension(string.IsNullOrWhiteSpace(myName) ? System.Reflection.Assembly.GetEntryAssembly().Location : myName);
|
||||||
? System.Reflection.Assembly.GetEntryAssembly().Location
|
|
||||||
: myName);
|
|
||||||
|
|
||||||
if (args.Length != 2)
|
if (args.Length != 2)
|
||||||
{
|
{
|
||||||
Console.Write("Usage: " + myName + @" <template> <target>
|
Console.WriteLine("Usage: " + myName + " <se-assmbly-template> <libse-assmbly-template>");
|
||||||
<template> Path to the template file with [GITHASH] and [REVNO]
|
|
||||||
<target> Path to the target file (AssemblyInfo.cs)
|
|
||||||
");
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine("Updating assembly info...");
|
try
|
||||||
var workingFolder = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
|
{
|
||||||
var templateFile = args[0];
|
var seTemplateFileName = Environment.GetCommandLineArgs()[1];
|
||||||
var targetFile = args[1];
|
var libSeTmplateFileName = Environment.GetCommandLineArgs()[2];
|
||||||
var template = new Template(templateFile);
|
Console.Write("Updating version number... ");
|
||||||
|
var oldSeVersion = GetOldVersionNumber(seTemplateFileName);
|
||||||
|
var oldLibSeVersion = GetOldVersionNumber(libSeTmplateFileName);
|
||||||
|
var newVersion = GetNewVersion();
|
||||||
|
|
||||||
var clrHash = new CommandLineRunner();
|
if (oldSeVersion.RevisionGuid != newVersion.RevisionGuid || oldSeVersion.Version != newVersion.Version ||
|
||||||
var clrTags = new CommandLineRunner();
|
oldLibSeVersion.RevisionGuid != newVersion.RevisionGuid || oldLibSeVersion.Version != newVersion.Version)
|
||||||
var gitPath = GetGitPath();
|
|
||||||
string exceptionMessage;
|
|
||||||
if (clrHash.RunCommandAndGetOutput(gitPath, "rev-parse --verify HEAD", workingFolder) &&
|
|
||||||
clrTags.RunCommandAndGetOutput(gitPath, "describe --tags", workingFolder))
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
template.Replace("[GITHASH]", clrHash.Result);
|
Console.WriteLine("updating version number to " + newVersion.Version + " " + newVersion.RevisionGuid);
|
||||||
if (clrTags.Result.IndexOf('-') < 0)
|
UpdateAssemblyInfo(seTemplateFileName, newVersion);
|
||||||
clrTags.Result += "-0";
|
UpdateAssemblyInfo(libSeTmplateFileName, newVersion);
|
||||||
template.Replace("[REVNO]", clrTags.Result.Split('-')[1]);
|
|
||||||
template.Save(targetFile);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
Console.WriteLine("no changes");
|
||||||
{
|
return 0;
|
||||||
exceptionMessage = ex.Message;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
try
|
Console.WriteLine("Something bad happened when running " + myName + ": " + exception.Message + Environment.NewLine + exception.StackTrace);
|
||||||
{
|
return 0;
|
||||||
// allow to compile without git
|
|
||||||
Console.WriteLine("WARNING: Could not run Git - build number will be 9999!");
|
|
||||||
template.Replace("[GITHASH]", string.Empty);
|
|
||||||
template.Replace("[REVNO]", "9999");
|
|
||||||
template.Save(targetFile);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
exceptionMessage = ex.Message;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Console.WriteLine(myName + ": Could not update AssemblyInfo: " + exceptionMessage);
|
|
||||||
Console.WriteLine(" - Git folder: " + workingFolder);
|
|
||||||
Console.WriteLine(" - Template: " + templateFile);
|
|
||||||
Console.WriteLine(" - Target: " + targetFile);
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string GetGitPath()
|
private static string GetGitPath()
|
||||||
@ -130,6 +205,10 @@ namespace UpdateAssemblyInfo
|
|||||||
}
|
}
|
||||||
|
|
||||||
var envSystemDrive = Environment.GetEnvironmentVariable("SystemDrive");
|
var envSystemDrive = Environment.GetEnvironmentVariable("SystemDrive");
|
||||||
|
if (string.IsNullOrEmpty(envSystemDrive))
|
||||||
|
{
|
||||||
|
throw new Exception("Environment.GetEnvironmentVariable('SystemDrive') returned null!");
|
||||||
|
}
|
||||||
if (!string.IsNullOrWhiteSpace(envSystemDrive))
|
if (!string.IsNullOrWhiteSpace(envSystemDrive))
|
||||||
{
|
{
|
||||||
var path = Path.Combine(envSystemDrive, "Program Files", gitPath);
|
var path = Path.Combine(envSystemDrive, "Program Files", gitPath);
|
||||||
@ -163,8 +242,9 @@ namespace UpdateAssemblyInfo
|
|||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
|
throw new Exception("UpdateAssemblyInfo - GetGitPath: " + exception.Message);
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine("WARNING: Might not be able to run Git command line tool!");
|
Console.WriteLine("WARNING: Might not be able to run Git command line tool!");
|
||||||
|
Loading…
Reference in New Issue
Block a user