Skip to content

Conversation

@EvilBeaver
Copy link
Member

@EvilBeaver EvilBeaver commented May 22, 2025

Сейчас:

  • Для версий 2 нельзя установить ее по точному номеру с превью (ругается на формат номера версии)
  • Когда v2 выйдет из preview сломается эвристика установки по алиасу ЭтоВерсия2

В данном PR:

  • Исправлена установка версий 2 по точному номеру
  • Для получения ссылки на скачивание используется API сайта
  • Алиасы не привязаны к флагу ЭтоВерсия2

Summary by CodeRabbit

  • Новые возможности

    • Добавлена функция для получения списка доступных дистрибутивов OneScript по версии с подробной информацией о каждом файле.
    • Добавлена функция для получения регулярного выражения, соответствующего формату версионирования SemVer.
  • Исправления ошибок

    • Улучшена проверка корректности номера версии с поддержкой формата SemVer.
  • Рефакторинг

    • Переработана логика выбора и получения ссылки на скачивание дистрибутива OneScript, что повысило надежность при работе с алиасами и разными типами дистрибутивов.
  • Прочее

    • В файл .gitignore добавлено игнорирование файла настроек запуска VSCode.

@coderabbitai
Copy link

coderabbitai bot commented May 22, 2025

## Walkthrough

В проект были внесены изменения, связанные с улучшением обработки версий и скачивания дистрибутивов OneScript. Добавлены новые экспортируемые функции для работы с семантическими версиями и получения списка дистрибутивов, обновлены проверки корректности версий, а логика выбора и скачивания файлов переработана для большей гибкости. В `.gitignore` добавлено исключение для файла настроек отладки.

## Changes

| Файл(ы)                                                    | Краткое описание изменений                                                                                                  |
|------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------|
| .gitignore                                                 | Добавлено правило для игнорирования `.vscode/launch.json`.                                                                  |
| src/core/Классы/ВерсииOneScript.os                         | Упрощена функция `Версия`, удалён второй параметр; удалён fallback-парсер HTML; функция `ПолучитьВерсииПоAPI` теперь возвращает новую таблицу и кидает исключения при ошибках; добавлена экспортируемая функция `ПолучитьДоступныеВидыДистрибутивовВерсии` для получения списка дистрибутивов по версии через API. |
| src/core/Классы/ПараметрыOVM.os                            | Удалена функция `МаскаНомераВерсии()`, добавлена экспортируемая функция `МаскаНомераВерсииSemver()`, возвращающая регулярное выражение, строго соответствующее спецификации semver. |
| src/core/Классы/УстановщикOneScript.os                     | Переименована функция проверки версии с `ЭтоТочныйНомерВерсии` на `ЭтоДопустимыйНомерВерсии` с использованием новой маски semver; переработана логика функции `ПолучитьПутьКСкачиваниюФайла` — теперь дистрибутив выбирается через поиск в списке доступных файлов с учётом типа дистрибутива, архитектуры и режима алиаса; добавлена новая функция `НайтиПодходящийДистрибутив`. |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant User
    participant Installer as УстановщикOneScript
    participant VersionAPI as ВерсииOneScript
    participant Params as ПараметрыOVM

    User->>Installer: ПолучитьПутьКСкачиваниюФайла(версия, x64, fdd)
    Installer->>Params: МаскаНомераВерсииSemver()
    Installer->>Installer: ЭтоДопустимыйНомерВерсии(версия)
    alt Версия допустима
        Installer->>VersionAPI: ПолучитьДоступныеВидыДистрибутивовВерсии(версия)
        VersionAPI->>VersionAPI: HTTP GET api/archive?all=true
        VersionAPI->>VersionAPI: HTTP GET api/archive/<token>
        VersionAPI-->>Installer: Таблица дистрибутивов
        Installer->>Installer: Выбор подходящего дистрибутива
        Installer-->>User: Ссылка на скачивание
    else Версия невалидна
        Installer-->>User: Исключение/Ошибка
    end

Possibly related PRs

  • Обращение к API бэкенда в команде ls -r #37: Добавляет функцию для получения списка доступных версий через API и парсинг HTML, что дополняет изменения в ВерсииOneScript.os по работе с версиями и дистрибутивами.

Poem

В gitignore добавился launch.json,
Семвер теперь ловим мы резон!
Дистрибутивы ищем ловко,
Версии проверяем строго.
Пусть OneScript скачивается без бед,
Кролик кодит — багов нет! 🐇✨


<!-- walkthrough_end -->

<!-- announcements_start -->

> [!NOTE]
> <details>
> <summary>⚡️ AI Code Reviews for VS Code, Cursor, Windsurf</summary>
> 
> CodeRabbit now has a plugin for VS Code, Cursor and Windsurf. This brings AI code reviews directly in the code editor. Each commit is reviewed immediately, finding bugs before the PR is raised. Seamless context handoff to your AI code agent ensures that you can easily incorporate review feedback.
> Learn more [here](http://coderabbit.ai/ide).
> 
> </details>

<!-- announcements_end -->

---

<details>
<summary>📜 Recent review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**


<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 37ef620b37abad33d55220a45f525d22008501ba and c1aa46c63a5a741ee779becc6740c352b36d5e65.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `src/core/Классы/УстановщикOneScript.os` (3 hunks)

</details>

<details>
<summary>🚧 Files skipped from review as they are similar to previous changes (1)</summary>

* src/core/Классы/УстановщикOneScript.os

</details>

</details>
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=oscript-library/ovm&utm_content=41):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Explain this complex logic.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai explain this code block.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and explain its main purpose.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->

@EvilBeaver EvilBeaver assigned nixel2007 and unassigned nixel2007 May 22, 2025
@EvilBeaver EvilBeaver requested a review from nixel2007 May 22, 2025 17:13
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🔭 Outside diff range comments (1)
src/core/Классы/УстановщикOneScript.os (1)

326-351: ⚠️ Potential issue

Определение «версии 2» не работает для prerelease-тегов

Сравнение СтроковыеФункции.СравнитьВерсии(ВерсияКУстановке, "2.0") упадёт, если в строке присутствует суффикс -preview, -rc1 и т. д. – функция ожидает числовые части. В результате prerelease-сборки 2.0* будут обрабатываться как alias-версии, что нарушает логику выбора дистрибутива.

Предлагаемый надёжный способ:

-ЭтоВерсия2 = СтроковыеФункции.СравнитьВерсии(ВерсияКУстановке, "2.0") >= 0;
+// major >= 2 независимо от суффиксов
+РВМажор = Новый РегулярноеВыражение("^(\d+)");
+ЭтоВерсия2 = (РВМажор.Совпадает(ВерсияКУстановке)
+    И Число(РВМажор.НайтиСовпадения(ВерсияКУстановке)[0].Группы[1].Значение) >= 2);

Так мы корректно определим мажорную версию даже при наличии -preview.

🧹 Nitpick comments (5)
src/core/Классы/ПараметрыOVM.os (1)

66-79: Добавить пометку устаревания и централизовать работу с масками версий

Теперь в модуле присутствуют две функции, возвращающие регулярное выражение версии – МаскаНомераВерсии() и новая МаскаНомераВерсииSemver(). Поддержка двух разных масок без чёткой иерархии создаёт риск того, что разработчики будут случайно пользоваться упрощённой маской и получать «тихие» ошибки при работе с prerelease-тегами.

Предлагаю:

  1. Явно пометить МаскаНомераВерсии() как устаревшую (комментарием // DEPRECATED или аналогичной аннотацией).
  2. Во всех местах, где осталась старая маска, перейти на МаскаНомераВерсииSemver().
  3. В описании новой функции указать, что именно она является «единственным источником истины» по допустимому формату версии.
Функция МаскаНомераВерсии() Экспорт
-   Возврат "\d+\.\d+\.\d+(\.rc\d+?)?";
+   // DEPRECATED: используйте МаскаНомераВерсииSemver()
+   Возврат "\d+\.\d+\.\d+(\.rc\d+?)?";

Это позволит избежать дублирования логики и потенциальной рассинхронизации.

src/core/Классы/ВерсииOneScript.os (2)

264-299: Повторяющиеся константы и однотипная обработка ответов HTTP

В пределах одной функции дважды объявляется локальная переменная HTTP_OK = 200, а блоки проверки статуса и формирования исключения практически идентичны (запрос к api/archive?all=true и затем к api/archive/<token>). Это небольшое дублирование:

  1. Усложняет чтение;
  2. Увеличивает риск несогласованности изменений (например, если код состояния изменится или появятся дополнительные проверки заголовков).

Рекомендации:

-HTTP_OK = 200;
+Перем HTTP_OK;  // объявить однажды в начале функции
+HTTP_OK = 200;

и вынести проверку ответа в небольшую вспомогательную подфункцию внутри модуля:

Процедура ПроверитьОтвет(Ответ, ОписаниеОшибки)
    Если Ответ.КодСостояния <> HTTP_OK Тогда
        ВызватьИсключение СтрШаблон(
            "%1: Статус %2, Ответ: %3",
            ОписаниеОшибки,
            Ответ.КодСостояния,
            Ответ.ПолучитьТелоКакСтроку());
    КонецЕсли;
КонецПроцедуры

Тем самым код станет короче и поддерживать его будет легче.


278-285: Можно прервать перебор после нахождения первого совпадения

После того как найден ИскомыйТокенВерсии, цикл продолжает проходить оставшиеся элементы массива, хотя это уже не требуется.

Для Каждого ОписаниеВерсии Из МассивВерсий Цикл
    Если НомерВерсии = ОписаниеВерсии.presentation Тогда
        ИскомыйТокенВерсии = ОписаниеВерсии.token;
+       Прервать;
    КонецЕсли;
КонецЦикла;

Это не критично по производительности, но улучшит читаемость и устраняет лишние итерации.

src/core/Классы/УстановщикOneScript.os (1)

315-322: Сообщение об ошибке стоит сделать более информативным

Сейчас при невалидной версии генерируется исключение с текстом, равным самой версии. Позднее по логам трудно понять причину.

-ВызватьИсключение ВерсияКУстановке;
+ВызватьИсключение СтрШаблон("Недопустимый форм-фактор версии «%1»", ВерсияКУстановке);

Это улучшит диагностику и юзабилити CLI-утилиты.

.gitignore (1)

2-2: Рассмотрите игнорирование всего каталога .vscode/
Чтобы автоматически исключать не только launch.json, но и любые другие локальные настройки VSCode (расширения, параметры и т.д.), можно игнорировать весь каталог:

-.vscode/launch.json
+.vscode/
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between bad3fac and b1d854d.

📒 Files selected for processing (4)
  • .gitignore (1 hunks)
  • src/core/Классы/ВерсииOneScript.os (1 hunks)
  • src/core/Классы/ПараметрыOVM.os (1 hunks)
  • src/core/Классы/УстановщикOneScript.os (3 hunks)
🔇 Additional comments (4)
src/core/Классы/ВерсииOneScript.os (1)

301-321: Уточнить типы колонок и защититься от отсутствия полей в JSON

Колонки создаются без явного описания типов. При дальнейшей обработке может оказаться, что одно из полей id, filename, arch, link отсутствует (например, API изменилось), и тогда будет записано Неопределено. Желательно:

  1. Задать тип Строка для всех колонок, чтобы на ранней стадии отловить несоответствия.
  2. Перед добавлением строки проверять наличие полей.
-ТаблицаРезультата.Колонки.Добавить("Вид");
+ТаблицаРезультата.Колонки.Добавить("Вид", Новый ОписаниеТипов("Строка"));

и аналогично для остальных колонок.

src/core/Классы/УстановщикOneScript.os (2)

307-312: Проверка семантической версии реализована корректно

Функция аккуратно использует новую маску semver и не игнорирует регистр, что соответствует спецификации (пре-релизные и build-метки чувствительны к регистру). Замечаний нет.


379-380: Хорошо, что ссылка возвращается напрямую

Возврат прямой ссылки без дальнейших вычислений уменьшает связанность и упрощает тестирование. 👍

.gitignore (1)

2-2: Добавление локальной VSCode конфигурации в игнор
Добавление строки .vscode/launch.json в .gitignore соответствует лучшим практикам по исключению локальных настроек разработчика из репозитория.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Кандидат на распил в детальки, кстати...

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не понимаю, как текст исключения связан с тем, что делает функция. Вроде бы этот кусок просто получает все доступные версии, а есть ли среди них запрашиваемая или нет проверяется уже позже.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вся функция в целом ищет версию на сайте. Текст исключения относится к ней (может это только мне так кажется...)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не обязательно в этот пр, но задумываюсь над тем, чтобы сюда 1connector затянуть

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
src/core/Классы/УстановщикOneScript.os (1)

359-385: Хорошая инкапсуляция логики поиска дистрибутива

Функция корректно реализует поиск с учётом всех нюансов:

  • Фильтр по архитектуре применяется правильно (согласно API все типы, включая zip, имеют поле arch)
  • Fallback логика для алиасов корректно сохраняет критерий архитектуры

Для улучшения читаемости можно добавить комментарий, объясняющий логику двойного поиска.

Рекомендую добавить пояснительный комментарий:

 	НайденныеСтроки = ПереченьФайлов.НайтиСтроки(КритерийПоиска);
 	Если НайденныеСтроки.Количество() <> 1 Тогда
-		// Это может быть установка по алиасу и тогда есть шанс у дистрибутива zip для версии 1
+		// При установке по алиасу (stable/dev) мы не знаем точную версию.
+		// Если платформенный дистрибутив не найден, пробуем универсальный zip (для v1.x)
 		Если РежимАлиаса Тогда
 			КритерийПоиска.Вид = "zip";
 		КонецЕсли;
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 29fbcad and 97c6499.

📒 Files selected for processing (3)
  • src/core/Классы/ВерсииOneScript.os (4 hunks)
  • src/core/Классы/ПараметрыOVM.os (1 hunks)
  • src/core/Классы/УстановщикOneScript.os (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/core/Классы/ПараметрыOVM.os
  • src/core/Классы/ВерсииOneScript.os
🧰 Additional context used
🧠 Learnings (1)
src/core/Классы/УстановщикOneScript.os (2)
Learnt from: EvilBeaver
PR: oscript-library/ovm#41
File: src/core/Классы/УстановщикOneScript.os:358-364
Timestamp: 2025-05-22T17:24:02.028Z
Learning: При работе с API OneScript (oscript.io) для получения дистрибутивов, все типы архивов, включая `zip`, имеют корректно заполненное поле `arch` со значениями "x86" или "x64", поэтому фильтрация по архитектуре должна применяться ко всем типам дистрибутивов.
Learnt from: EvilBeaver
PR: oscript-library/ovm#41
File: src/core/Классы/УстановщикOneScript.os:366-377
Timestamp: 2025-05-22T17:19:26.197Z
Learning: В функции ПолучитьПутьКСкачиваниюФайла класса УстановщикOneScript при поиске дистрибутива через алиас сначала выполняется поиск по типу дистрибутива текущей платформы, а затем в случае неудачи - по типу дистрибутива "zip", при этом критерий архитектуры (x86/x64) должен сохраняться неизменным в обоих поисках.
🔇 Additional comments (2)
src/core/Классы/УстановщикOneScript.os (2)

307-312: Хорошее улучшение именования и централизация паттерна валидации

Переименование функции с ЭтоТочныйНомерВерсии на ЭтоДопустимыйНомерВерсии более точно отражает её назначение. Использование централизованного паттерна semver из ПараметрыOVM.МаскаНомераВерсииSemver() улучшает поддерживаемость кода.


326-357: Отличный рефакторинг с улучшенной обработкой версий

Рефакторинг функции значительно улучшает надёжность:

  • Трёхзначная логика для определения версии 2 корректно обрабатывает неопределённость при использовании алиасов
  • Переход на API-подход вместо ручного построения путей повышает надёжность
  • Явное разделение логики выбора типа дистрибутива улучшает читаемость

Хорошее архитектурное решение с делегированием поиска в отдельную функцию.

@nixel2007 nixel2007 requested a review from sfaqer May 23, 2025 07:37
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
src/core/Классы/УстановщикOneScript.os (1)

381-387: Отличное улучшение диагностики ошибок

Детализированное сообщение об ошибке с указанием критериев поиска и количества найденных файлов значительно упрощает диагностику проблем при установке.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 97c6499 and eddbb97.

📒 Files selected for processing (1)
  • src/core/Классы/УстановщикOneScript.os (3 hunks)
🧰 Additional context used
🧠 Learnings (1)
src/core/Классы/УстановщикOneScript.os (2)
Learnt from: EvilBeaver
PR: oscript-library/ovm#41
File: src/core/Классы/УстановщикOneScript.os:358-364
Timestamp: 2025-05-22T17:24:02.028Z
Learning: При работе с API OneScript (oscript.io) для получения дистрибутивов, все типы архивов, включая `zip`, имеют корректно заполненное поле `arch` со значениями "x86" или "x64", поэтому фильтрация по архитектуре должна применяться ко всем типам дистрибутивов.
Learnt from: EvilBeaver
PR: oscript-library/ovm#41
File: src/core/Классы/УстановщикOneScript.os:366-377
Timestamp: 2025-05-22T17:19:26.197Z
Learning: В функции ПолучитьПутьКСкачиваниюФайла класса УстановщикOneScript при поиске дистрибутива через алиас сначала выполняется поиск по типу дистрибутива текущей платформы, а затем в случае неудачи - по типу дистрибутива "zip", при этом критерий архитектуры (x86/x64) должен сохраняться неизменным в обоих поисках.
🔇 Additional comments (3)
src/core/Классы/УстановщикOneScript.os (3)

307-312: Корректное использование semver маски для валидации версий

Переименование функции и использование МаскаНомераВерсииSemver() улучшает валидацию версий, позволяя корректно обрабатывать preview-версии и другие семантические версии.


315-315: Корректное обновление вызова переименованной функции


324-357: Отличная реализация гибкой логики определения версии и типа дистрибутива

Трёхзначная логика для ЭтоВерсия2 элегантно решает проблему неопределённости при работе с алиасами. Использование API для получения списка дистрибутивов вместо ручного конструирования путей значительно повышает надёжность.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Кажется мы в этом случае при установке ovm i dev --fdd поставим таки scd а не fdd, потому что флаг мы обрабатываем только для "номерных" версий

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да, исправил.

Copy link
Member

@nixel2007 nixel2007 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lgtm

@nixel2007
Copy link
Member

@sfaqer у меня больше нет вопросов

@sfaqer sfaqer self-requested a review May 23, 2025 23:34
Copy link
Member

@sfaqer sfaqer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@EvilBeaver EvilBeaver merged commit 20b2ab7 into develop May 24, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants