Добавьте файлы проекта.
This commit is contained in:
43
ReleaseUpdater/SemVerService.cs
Normal file
43
ReleaseUpdater/SemVerService.cs
Normal file
@@ -0,0 +1,43 @@
|
||||
namespace ReleaseUpdater;
|
||||
|
||||
/// <summary>
|
||||
/// Сервис для работы с семантическими версиями.
|
||||
/// </summary>
|
||||
public sealed class SemVerService
|
||||
{
|
||||
/// <summary>
|
||||
/// Пытается распарсить строку версии в объект <see cref="Version"/>.
|
||||
/// </summary>
|
||||
/// <param name="version">Строка версии (например, "3.5.2").</param>
|
||||
/// <param name="parsed">Результат парсинга.</param>
|
||||
/// <returns>true, если парсинг успешен.</returns>
|
||||
public bool TryParse(string version, out Version parsed)
|
||||
{
|
||||
var v = version.Trim().TrimStart('v');
|
||||
return Version.TryParse(Normalize(v), out parsed);
|
||||
|
||||
static string Normalize(string v)
|
||||
{
|
||||
var parts = v.Split('.', StringSplitOptions.RemoveEmptyEntries);
|
||||
return parts.Length switch
|
||||
{
|
||||
1 => $"{parts[0]}.0.0",
|
||||
2 => $"{parts[0]}.{parts[1]}.0",
|
||||
_ => $"{parts[0]}.{parts[1]}.{parts[2]}"
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Сравнивает две версии.
|
||||
/// </summary>
|
||||
/// <param name="v1">Первая версия.</param>
|
||||
/// <param name="v2">Вторая версия.</param>
|
||||
/// <returns>-1 если v1 < v2, 0 если равны, 1 если v1 > v2.</returns>
|
||||
public int Compare(string v1, string v2)
|
||||
{
|
||||
TryParse(v1, out var a);
|
||||
TryParse(v2, out var b);
|
||||
return a.CompareTo(b);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user