Beschreibung:
Hier ist ein
kleines Werkzeug für Subversion (SVN).
Es bezieht sich auf das Datenformat von Subversion 1.7 (SQLite).
Quellcode zum Auslesen des alten Formats findet man in
Reading the revision number of a local copy of a SVN repository.
Mein Code kann folgendes:
Auslesen der aktuellen Revisionsnummer:
C#-Code: |
SvnTool.GetRevisionNumber(String svnDirectory)
|
Aktualisierung der Datei "ApplicationInfo.cs".
Dabei wird die letzte Stelle der Versionnummer durch die aktuelle SVN Revisionnummer ersetzt.
Ergebnis: Die Versionsnummer der Anwendung (oder Bibliothek) beinhaltet die SVN-Revisionsnummer (z.B. 1.0.0.0 wird zu 1.0.0.666)
C#-Code: |
UpdateAssemblyInfo(String svnDirectory, String assemblyInfoPath)
|
Thanks to Wiktor Zychla, who published a demo code how to read out the the revision information from the Subversion database.
Quellcode:
C#-Code: |
using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Linq;
using System.IO;
namespace SubversionTool
{
private class SvnTool
{
private const String databaseFile = "wc.db";
private const String pattern = "/!svn/ver/(?'version'[0-9]*)/";
public static String GetRevisionNumber(String svnDirectory)
{
String SvnSubfolder = svnDirectory;
if (Directory.Exists(SvnSubfolder))
{
Int32 maxVer = 0;
String EntriesFile = Directory.GetFiles(SvnSubfolder, databaseFile).FirstOrDefault();
if (!String.IsNullOrEmpty(EntriesFile))
{
Byte[] fileData;
try
{
fileData = File.ReadAllBytes(EntriesFile);
}
catch (Exception)
{
return String.Empty;
}
String fileDataString = Encoding.Default.GetString(fileData);
Regex regex = new Regex(pattern);
foreach (Match match in regex.Matches(fileDataString))
{
String version = match.Groups["version"].Value;
Int32 curVer;
if (Int32.TryParse(version, out curVer) == true)
if (curVer > maxVer)
maxVer = curVer;
}
if (maxVer > 0)
return maxVer.ToString();
}
}
return String.Empty;
}
public static Boolean UpdateAssemblyInfo(String svnDirectory, String assemblyInfoPath)
{
String revision = GetRevisionNumber(svnDirectory);
if (revision == "")
{
Console.WriteLine("WARNING: Can't update information about Subversion revision."
+ " (Failed to grabb from SVN database)");
return false;
}
try
{
if (File.Exists(assemblyInfoPath) == false)
{
Console.WriteLine("WARNING: Can't update information about Subversion revision. "
+ "(File 'AssemblyInfo.cs' not found)");
return false;
}
Boolean doUpdate = false;
FileStream assFileStream = new FileStream(assemblyInfoPath, FileMode.Open, FileAccess.Read);
StreamReader assFileReader = new StreamReader(assFileStream);
Encoding encodingType = assFileReader.CurrentEncoding;
String assemblyInfoFileContent = assFileReader.ReadToEnd();
assFileReader.Close();
assFileStream.Close();
String assemblyPattern_1 = @"(\[assembly: AssemblyVersion\(#\d+\.\d+\.\d+\.)\d+(#\)\])";
assemblyPattern_1 = Regex.Replace(assemblyPattern_1, "#", "\"");
Match match_1 = Regex.Match(assemblyInfoFileContent, assemblyPattern_1);
if (match_1.Success)
{
String replacement_1 = match_1.Groups[1] + revision + match_1.Groups[2];
if (match_1.Value != replacement_1)
{
assemblyInfoFileContent = assemblyInfoFileContent.Replace(match_1.Value, replacement_1);
doUpdate = true;
}
}
String assemblyPattern_2 = @"(\[assembly: AssemblyFileVersion\(#\d+\.\d+\.\d+\.)\d+(#\)\])";
assemblyPattern_2 = Regex.Replace(assemblyPattern_2, "#", "\"");
Match match_2 = Regex.Match(assemblyInfoFileContent, assemblyPattern_2);
if (match_2.Success)
{
String replacement_2 = match_2.Groups[1] + revision + match_2.Groups[2];
if (match_2.Value != replacement_2)
{
assemblyInfoFileContent = assemblyInfoFileContent.Replace(match_2.Value, replacement_2);
doUpdate = true;
}
}
if (doUpdate)
{
FileStream assFileStream2 = new FileStream(assemblyInfoPath, FileMode.Truncate, FileAccess.Write);
StreamWriter assFileWriter = new StreamWriter(assFileStream2, encodingType);
assFileWriter.Close();
assFileStream2.Close();
}
}
catch (IOException e)
{
Console.WriteLine("WARNING: Can't update information about Subversion revision. "
+ "(Problem at access to file 'AssemblyInfo.cs')\n " + e.Message);
return false;
}
return true;
}
}
}
|
Schlagwörter: SVN, Subversion, number, version, versionnumber revision, application, Versionsnummer, Programmversion, auslesen,
csharp, cs, csharp, C#, code, snippet, class