Files
git-tfs/GitTfs/Core/GitTfsVersionProvider.cs
T

58 lines
1.8 KiB
C#

using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Text.RegularExpressions;
using Sep.Git.Tfs.Core.TfsInterop;
namespace Sep.Git.Tfs.Core
{
public class GitTfsVersionProvider : IGitTfsVersionProvider
{
private ITfsHelper tfsHelper;
public GitTfsVersionProvider(ITfsHelper tfsHelper)
{
this.tfsHelper = tfsHelper;
}
public string GetVersionString()
{
var versionString = "git-tfs version";
versionString += " " + GetType().Assembly.GetName().Version;
versionString += GetGitCommitForVersionString();
versionString += " (TFS client library " + tfsHelper.TfsClientLibraryVersion + ")";
versionString += " (" + (Environment.Is64BitProcess ? "64-bit" : "32-bit") + ")";
versionString += Environment.NewLine + " " + Assembly.GetExecutingAssembly().Location;
return versionString;
}
private string GetGitCommitForVersionString()
{
try
{
return " (" + GetGitCommit().Substring(0, 8) + ")";
}
catch (Exception e)
{
Trace.WriteLine("Unable to get git version: " + e);
return "";
}
}
private string GetGitCommit()
{
var gitTfsAssembly = GetType().Assembly;
using (var head = gitTfsAssembly.GetManifestResourceStream("Sep.Git.Tfs.GitVersionInfo"))
{
var commitRegex = new Regex(@"commit (?<sha>[a-f0-9]{8})", RegexOptions.IgnoreCase);
return commitRegex.Match(ReadAllText(head)).Groups["sha"].Value;
}
}
private string ReadAllText(Stream stream)
{
return new StreamReader(stream).ReadToEnd().Trim();
}
}
}