using System.Globalization; using System.IO; using System.Reflection; using LibGit2Sharp.Core; namespace LibGit2Sharp { /// /// Gets the current LibGit2Sharp version. /// public class Version { private readonly Assembly assembly = typeof(Repository).Assembly; /// /// Needed for mocking purposes. /// protected Version() { } internal static Version Build() { return new Version(); } /// /// Returns the of the /// the LibGit2Sharp library. /// public virtual System.Version MajorMinorPatch { get { return assembly.GetName().Version; } } /// /// Returns all the optional features that were compiled into /// libgit2. /// /// A enumeration. public virtual BuiltInFeatures Features { get { return Proxy.git_libgit2_features(); } } /// /// Returns the SHA hash for the libgit2 library. /// public virtual string LibGit2CommitSha { get { return ReadContentFromResource(assembly, "libgit2_hash.txt").Substring(0, 7); } } /// /// Returns the SHA hash for the LibGit2Sharp library. /// public virtual string LibGit2SharpCommitSha { get { return ReadContentFromResource(assembly, "libgit2sharp_hash.txt").Substring(0, 7); } } /// /// Returns a string representing the LibGit2Sharp version. /// /// /// The format of the version number is as follows: /// Major.Minor.Patch-LibGit2Sharp_abbrev_hash-libgit2_abbrev_hash (x86|amd64 - features) /// /// public override string ToString() { return RetrieveVersion(); } private string RetrieveVersion() { string features = Features.ToString(); return string.Format( CultureInfo.InvariantCulture, "{0}-{1}-{2} ({3} - {4})", MajorMinorPatch.ToString(3), LibGit2SharpCommitSha, LibGit2CommitSha, NativeMethods.ProcessorArchitecture, features); } private string ReadContentFromResource(Assembly assembly, string partialResourceName) { string name = string.Format(CultureInfo.InvariantCulture, "LibGit2Sharp.{0}", partialResourceName); using (var sr = new StreamReader(assembly.GetManifestResourceStream(name))) { return sr.ReadLine(); } } } }