Skip to content

Commit b4ba9c0

Browse files
authored
Merge pull request #326 from Infarh/dev
v0.0.94.3
2 parents 5f3f9de + 6c7f6b2 commit b4ba9c0

40 files changed

Lines changed: 3748 additions & 1027 deletions

.scripts/dependencies.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
..\MathCore.WPF
2+
..\MathCore.DSP
3+
..\MathCore.AI

.scripts/nuget-ver-remote.cs

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
#!/usr/local/bin/dotnet run
2+
// Файл file-based app скрипта для определения текущей версии NuGet пакета из удаленного репозитория.
3+
// Использование: dotnet run .scripts/nuget-ver-remote.cs <package-name>
4+
5+
#nullable enable
6+
7+
#:package NuGet.Protocol@7.0.1
8+
#:package NuGet.Configuration@7.0.1
9+
10+
using System;
11+
using System.Linq;
12+
using System.Threading;
13+
using System.Threading.Tasks;
14+
using NuGet.Common;
15+
using NuGet.Configuration;
16+
using NuGet.Protocol;
17+
using NuGet.Protocol.Core.Types;
18+
using NuGet.Versioning;
19+
20+
if (args.Length < 1)
21+
{
22+
Console.Error.WriteLine("Usage: dotnet run .scripts/nuget-ver-remote.cs <package-name>");
23+
Environment.Exit(1);
24+
}
25+
26+
var package_name = args[0]; // имя пакета из аргумента
27+
if (string.IsNullOrWhiteSpace(package_name))
28+
{
29+
Console.Error.WriteLine("Package name is empty");
30+
Environment.Exit(1);
31+
}
32+
33+
try
34+
{
35+
// Создадим репозиторий NuGet (v3 API)
36+
var source_repo = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
37+
38+
// Получим ресурс метаданных пакета
39+
using var cache = new SourceCacheContext();
40+
var logger = NullLogger.Instance;
41+
var resource = await source_repo.GetResourceAsync<PackageMetadataResource>().ConfigureAwait(false);
42+
43+
// Запросим все метаданные по пакету (включая pre-release), не включая unlisted
44+
var metadata = await resource.GetMetadataAsync(package_name, includePrerelease: true, includeUnlisted: false, cache, logger, CancellationToken.None).ConfigureAwait(false);
45+
46+
var metadata_list = metadata?.ToList() ?? new System.Collections.Generic.List<IPackageSearchMetadata>();
47+
if (metadata_list.Count == 0)
48+
{
49+
Console.Error.WriteLine($"Package not found: {package_name}");
50+
Environment.Exit(2);
51+
}
52+
53+
// Соберём версии и выберем последнюю стабильную, если есть, иначе последнюю доступную
54+
var versions = metadata_list
55+
.Select(m => m.Identity.Version)
56+
.Where(v => v is not null)
57+
.OrderBy(v => v)
58+
.ToArray();
59+
60+
if (versions.Length == 0)
61+
{
62+
Console.Error.WriteLine("No versions found");
63+
Environment.Exit(2);
64+
}
65+
66+
var stable_version = versions
67+
.Where(v => !v.IsPrerelease)
68+
.OrderByDescending(v => v)
69+
.FirstOrDefault()
70+
?? versions.OrderByDescending(v => v).First();
71+
72+
var latest_version = stable_version.ToNormalizedString();
73+
74+
Console.WriteLine(latest_version); // вывод версии в stdout
75+
Environment.Exit(0);
76+
}
77+
catch (Exception ex)
78+
{
79+
Console.Error.WriteLine($"Error: {ex.Message}");
80+
Environment.Exit(2);
81+
}

.scripts/nuget-ver-wait.cs

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
#!/usr/local/bin/dotnet run
2+
// Файл file-based app скрипта для ожидания появления указанной версии NuGet пакета на сервере.
3+
// Использование: dotnet run .scripts/nuget-ver-wait.cs <package-name> <target-version> [-n <tries>] [-t <timeout-ms>]
4+
5+
#nullable enable
6+
7+
#:package NuGet.Protocol@7.0.1
8+
#:package NuGet.Configuration@7.0.1
9+
10+
using System;
11+
using System.Linq;
12+
using System.Threading;
13+
using System.Threading.Tasks;
14+
using NuGet.Common;
15+
using NuGet.Configuration;
16+
using NuGet.Protocol;
17+
using NuGet.Protocol.Core.Types;
18+
using NuGet.Versioning;
19+
20+
if (args.Length < 2)
21+
{
22+
Console.Error.WriteLine("Usage: dotnet run .scripts/nuget-ver-wait.cs <package-name> <target-version> [-n <tries>] [-t <timeout-ms>]");
23+
Environment.Exit(1);
24+
}
25+
26+
var package_name = args[0]; // имя пакета
27+
var target_version_str = args[1]; // требуемая версия
28+
if (string.IsNullOrWhiteSpace(package_name) || string.IsNullOrWhiteSpace(target_version_str))
29+
{
30+
Console.Error.WriteLine("Package name or target version is empty");
31+
Environment.Exit(1);
32+
}
33+
34+
// Значения по умолчанию
35+
var tries = 10; // -n по умолчанию
36+
var timeout_ms = 1000; // -t по умолчанию
37+
38+
// Разбор дополнительных аргументов
39+
for (var i = 2; i < args.Length; i++)
40+
{
41+
var a = args[i];
42+
const StringComparison cmp = StringComparison.OrdinalIgnoreCase;
43+
if (string.Equals(a, "-n", cmp) && i + 1 < args.Length)
44+
{
45+
if (int.TryParse(args[++i], out var v)) tries = v;
46+
}
47+
else if (string.Equals(a, "-t", cmp) && i + 1 < args.Length)
48+
{
49+
if (int.TryParse(args[++i], out var v)) timeout_ms = v;
50+
}
51+
}
52+
53+
if (tries <= 0) tries = 1;
54+
if (timeout_ms < 0) timeout_ms = 0;
55+
56+
if (!NuGetVersion.TryParse(target_version_str, out var target_version))
57+
{
58+
Console.Error.WriteLine($"Невозможно распарсить целевую версию: {target_version_str}");
59+
Environment.Exit(1);
60+
}
61+
62+
Console.WriteLine($"Ожидание версии {target_version} пакета {package_name} на nuget.org ({tries} попыток, таймаут {timeout_ms}ms)");
63+
64+
try
65+
{
66+
var source_repo = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
67+
using var cache = new SourceCacheContext();
68+
var logger = NullLogger.Instance;
69+
var resource = await source_repo.GetResourceAsync<PackageMetadataResource>();
70+
71+
for (var attempt = 1; attempt <= tries; attempt++)
72+
{
73+
// Получим метаданные пакета
74+
var metadata = await resource.GetMetadataAsync(package_name, includePrerelease: true, includeUnlisted: false, cache, logger, CancellationToken.None);
75+
var metadata_list = metadata?.ToList() ?? [];
76+
77+
if (metadata_list.Count == 0)
78+
Console.WriteLine($"[{attempt}/{tries}] Пакет не найден на сервере");
79+
else
80+
{
81+
var versions = metadata_list
82+
.Select(m => m.Identity.Version)
83+
.Where(v => v is not null)
84+
.OrderByDescending(v => v)
85+
.ToArray();
86+
87+
if (versions.Length == 0)
88+
Console.WriteLine($"[{attempt}/{tries}] На сервере нет версий пакета");
89+
else
90+
{
91+
var latest = versions[0];
92+
Console.WriteLine($"[{attempt}/{tries}] Серверная последняя версия: {latest}");
93+
94+
// Сравним последнюю серверную версию с целевой
95+
if (latest < target_version)
96+
Console.WriteLine($"Серверная версия {latest} младше требуемой {target_version}, ожидаем...");
97+
else
98+
{
99+
Console.WriteLine($"Требуемая версия {target_version} доступна на сервере (серверная версия {latest})");
100+
Environment.Exit(0);
101+
}
102+
}
103+
}
104+
105+
if (attempt < tries)
106+
await Task.Delay(timeout_ms);
107+
}
108+
109+
Console.Error.WriteLine($"Не удалось дождаться версии {target_version} для пакета {package_name} после {tries} попыток");
110+
Environment.Exit(2);
111+
}
112+
catch (Exception ex)
113+
{
114+
Console.Error.WriteLine($"Ошибка: {ex.Message}");
115+
Environment.Exit(2);
116+
}

.scripts/xml-xpath.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#!/usr/local/bin/dotnet run
2+
// Файл file-based app скрипта для выполнения XPath запросов к XML файлам.
3+
// запуск через команду: dotnet run .scripts/xml-xpath.cs <xml-file> <xpath-query>
4+
5+
using System;
6+
using System.Xml;
7+
8+
if (args.Length != 2)
9+
{
10+
Console.WriteLine("Usage: dotnet run .scripts/xml-xpath.cs <xml-file> <xpath-query>");
11+
return;
12+
}
13+
14+
var xml_file = args[0];
15+
var xpath_query = args[1];
16+
17+
XmlDocument xml_doc = new XmlDocument();
18+
xml_doc.Load(xml_file);
19+
20+
var nodes = xml_doc.SelectNodes(xpath_query);
21+
if (nodes is null || nodes.Count == 0)
22+
Console.WriteLine("No nodes found."); // нет найденных узлов
23+
else
24+
// используем явный тип XmlNode чтобы не получать object и иметь доступ к OuterXml
25+
foreach (XmlNode node in nodes)
26+
Console.WriteLine(node.OuterXml);

0 commit comments

Comments
 (0)