-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGitVersion.cs
68 lines (53 loc) · 1.66 KB
/
GitVersion.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
namespace GitVersion;
using System.Reflection;
public class VersionInfo
{
/// <summary>
/// Version string eg "1.0.0.0"
/// </summary>
public string? Version { get; init; }
/// <summary>
/// Git hash eg "a1b2c3d4e5f6"
/// </summary>
public string? GitHash { get; private set; }
/// <summary>
/// Git modified flag
/// </summary>
public bool GitModified { get; private set; }
/// <summary>
/// An empty version info
/// </summary>
public static readonly VersionInfo Empty = new() { Version = string.Empty, GitHash = string.Empty };
public string GetHash(int? len = null)
{
if (string.IsNullOrEmpty(Version) && string.IsNullOrEmpty(GitHash)) {
return "(unknown)";
}
GitHash ??= string.Empty;
return len == null ? GitHash : $"{GitHash[..len.Value]}{(GitModified ? "+" : string.Empty)}";
}
public string GetVersionHash(int? len = null)
{
if (string.IsNullOrEmpty(Version) && string.IsNullOrEmpty(GitHash)) {
return "(unknown)";
}
GitHash ??= string.Empty;
return len == null ? $"v{Version} - {GitHash}" : $"v{Version} - {GitHash[..len.Value]}{(GitModified ? "+" : string.Empty)}";
}
public static VersionInfo Get()
{
var assembly = Assembly.GetExecutingAssembly();
if (assembly == null) {
return VersionInfo.Empty;
}
var verinfo = assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>();
if (verinfo == null) {
return VersionInfo.Empty;
}
var items = verinfo.InformationalVersion.Split('+', 2);
var version = items[0];
var hash = items.Length > 1 ? items[1] : string.Empty;
var modified = hash[^1] == '+';
return new VersionInfo { Version = version, GitHash = hash, GitModified = modified };
}
}