Добавьте файлы проекта.

This commit is contained in:
2025-11-25 07:39:25 +03:00
parent ed6a7e1938
commit 5bbcfb1e76
21 changed files with 793 additions and 0 deletions

View 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);
}
}