Skip to content

OPM в оффлайне #238

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 8 commits into
base: master
Choose a base branch
from

Conversation

dmpas
Copy link
Member

@dmpas dmpas commented Jun 26, 2025

Как работает:

  1. качаем пакет с зависимостями
opm download --dest /my/hub essentialpackage1
opm download --dest /my/hub essentialpackage2
opm download --dest /my/hub essentialpackage3

в каталоге /my/hub будет создана структура, как в хабе:
.

  • essentialpackage1/
    • essentialpackage1/essentialpackage1-1.0.1.ospx
    • essentialpackage1/essentialpackage1-1.0.2.ospx
    • essentialpackage1/essentialpackage1-2.0.3.ospx
  • essentialpackage2/
    • essentialpackage2/essentialpackage2-1.0.1.ospx
    • essentialpackage2/essentialpackage2-1.0.2.ospx
    • essentialpackage2/essentialpackage2-2.0.3.ospx
  • essentialpackage3/
    • essentialpackage3/essentialpackage3-1.0.1.ospx
    • essentialpackage3/essentialpackage3-1.0.2.ospx
    • essentialpackage3/essentialpackage3-2.0.3.ospx
  1. Этот каталог можно копировать/РСинкать/резатьНаДиВиДи, тащить во внутренний контур, где у внутреннего opm будет настроен файловый сервер через opm.cfg вида:
{
 "СервераПакетов": [
  {
   "Имя": "Файловый",
   "Сервер": "file:///",
   "ПутьНаСервере": "C:\\some\\local\\hub",
   "Приоритет": 2
  }
 ]
}
  1. После чего можно спокойно выполнять opm install essentialpackage1

Summary by CodeRabbit

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

  • Добавлена команда консоли "dl download" для скачивания пакета и его зависимостей из облака, файла или по URL с гибкими опциями установки и выбором зеркала.
  • Реализована поддержка файловых серверов пакетов (локальный протокол file://) и выбор подходящего зеркала из настроек.
  • Введён новый режим установки "Скачивание" с сохранением архива пакета и зависимостей в целевой каталог.

Исправления

  • Улучшена обработка целевого каталога при локальной установке пакетов.

Документация

  • Добавлен пример конфигурации файлового сервера пакетов для тестирования.

dmpas added 2 commits June 26, 2025 17:13
Рекурсивное скачивание пакета с зависимостями.
Copy link

coderabbitai bot commented Jun 26, 2025

Walkthrough

В проект добавлена новая команда "dl download" для загрузки пакетов и их зависимостей, реализованная через новый обработчик. В ядре системы поддержан режим установки "Скачивание", добавлена поддержка файловых серверов пакетов (через file://), расширена логика работы с метаданными пакетов и кэшем. Внесены сопутствующие изменения в обработку установки, зависимости и конфигурацию серверов.

Changes

Файл(ы) Краткое описание изменений
src/cmd/opm.os Добавлена регистрация новой команды "dl download" с обработчиком КомандаOpm_Download.
src/cmd/Классы/КомандаOpm_Download.os Новый обработчик команды: реализованы опции скачивания пакетов из разных источников, поддержка зеркал, аргументов, логирования.
src/core/Классы/МенеджерУстановкиПакетов.os Поддержка режима "Скачивание" при установке: изменены пути зависимостей, работа с кэшем, логика разрешения зависимостей.
src/core/Классы/УстановкаПакета.os В режиме "Скачивание" архив копируется как есть, изменена структура директорий, удалена локальная функция чтения метаданных.
src/core/Классы/ФайловыйСерверОтвет.os Новый класс: обработка ответа файлового сервера, выбор последней версии пакета, возврат бинарных данных.
src/core/Классы/ФайловыйСерверПакетов.os Новый класс: файловый сервер пакетов, поиск, выдача и листинг локальных пакетов, обработка ошибок.
src/core/Модули/РежимУстановкиПакетов.os Добавлен экспортируемый режим "Скачивание".
src/core/Модули/СерверыПакетов.os Фабрика серверов: выбор класса сервера по схеме (file:// → ФайловыйСерверПакетов).
src/core/Классы/КэшУстановленныхПакетов.os Изменена инициализация, удалены локальные функции чтения метаданных, переход на внешний модуль, корректировка путей.
src/core/Модули/РаботаСПакетами.os Добавлена экспортируемая функция для чтения метаданных пакета из XML.
src/cmd/Классы/КомандаOpm_Install.os Скорректировано условие сброса и предупреждения для целевого каталога при локальной установке.
tests/fixtures/opm-servers.cfg Добавлен пример конфигурации файлового сервера пакетов с протоколом file://.

Sequence Diagram(s)

sequenceDiagram
    participant Пользователь
    participant Консоль (opm)
    participant КомандаOpm_Download
    participant МенеджерУстановкиПакетов
    participant СерверПакетов/ФайловыйСерверПакетов

    Пользователь->>Консоль (opm): Вводит "dl download [опции]"
    Консоль (opm)->>КомандаOpm_Download: Передает параметры команды
    КомандаOpm_Download->>МенеджерУстановкиПакетов: Запускает установку (режим "Скачивание")
    МенеджерУстановкиПакетов->>СерверПакетов/ФайловыйСерверПакетов: Запрашивает пакет/зависимости
    СерверПакетов/ФайловыйСерверПакетов-->>МенеджерУстановкиПакетов: Возвращает архив пакета
    МенеджерУстановкиПакетов->>КомандаOpm_Download: Копирует архив в целевой каталог
    КомандаOpm_Download->>Консоль (opm): Сообщает об успешной загрузке
Loading

Poem

Вот команда "dl download"
Пакет скачает — не обманет!
Хоть с file://, хоть из облака,
Все найдёт, что нужно кролику.
Теперь в каталогах не скучно —
Пакеты скачаны послушно!
🐇✨


📜 Recent review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 9a5d2a5 and 4f14dea.

📒 Files selected for processing (4)
  • src/cmd/Классы/КомандаOpm_Install.os (1 hunks)
  • src/core/Классы/КэшУстановленныхПакетов.os (2 hunks)
  • src/core/Классы/МенеджерУстановкиПакетов.os (5 hunks)
  • src/core/Классы/ФайловыйСерверОтвет.os (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/core/Классы/ФайловыйСерверОтвет.os
  • src/core/Классы/МенеджерУстановкиПакетов.os
🧰 Additional context used
🧠 Learnings (1)
src/core/Классы/КэшУстановленныхПакетов.os (3)
Learnt from: sfaqer
PR: oscript-library/opm#235
File: src/core/Классы/КэшУстановленныхПакетов.os:44-44
Timestamp: 2025-05-23T12:07:34.112Z
Learning: В процедуре `ПроверитьВерсиюСреды` в файле `src/core/Модули/РаботаСОписаниемПакета.os` вызов `РаботаСВерсиями.СравнитьВерсии` должен быть сохранен как fallback-механизм для обратной совместимости с ранними версиями среды, которые не используют семантическое версионирование.
Learnt from: sfaqer
PR: oscript-library/opm#235
File: src/core/Модули/РаботаСОписаниемПакета.os:37-37
Timestamp: 2025-05-23T12:04:43.639Z
Learning: В процедуре `ПроверитьВерсиюМанифеста` не требуется fallback механизм для сравнения версий, так как версия манифеста всегда должна соответствовать семантическому версионированию (semver). В то же время, для процедуры `ПроверитьВерсиюСреды` fallback нужен, так как старые версии среды могут не соответствовать формату semver.
Learnt from: sfaqer
PR: oscript-library/opm#235
File: src/core/Классы/КэшУстановленныхПакетов.os:44-44
Timestamp: 2025-05-23T12:07:34.112Z
Learning: В тестовом файле `tests/versions-test.os` должны остаться вызовы `РаботаСВерсиями.СравнитьВерсии`, так как этот файл специально тестирует функциональность модуля `РаботаСВерсиями`.
⏰ Context from checks skipped due to timeout of 90000ms (6)
  • GitHub Check: test (dev) / build (ubuntu-latest, dev)
  • GitHub Check: test (dev) / build (macos-latest, dev)
  • GitHub Check: test (default) / build (ubuntu-latest, default)
  • GitHub Check: test (default) / build (macos-latest, default)
  • GitHub Check: test (stable) / build (ubuntu-latest, stable)
  • GitHub Check: test (stable) / build (macos-latest, stable)
🔇 Additional comments (5)
src/cmd/Классы/КомандаOpm_Install.os (1)

60-63: Логически корректное улучшение условия проверки.

Изменение улучшает пользовательский опыт, выводя предупреждение о игнорировании параметра -dest только когда он действительно указан при локальной установке. Это избегает ненужных предупреждений когда целевой каталог не задан.

src/core/Классы/КэшУстановленныхПакетов.os (4)

29-29: Хорошее решение по централизации логики чтения метаданных.

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


35-38: Полезное дополнение для отладки сравнения версий.

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


100-100: Консистентное использование централизованной функции чтения метаданных.

Аналогично строке 29, здесь также используется внешняя функция РаботаСПакетами.ПрочитатьМетаданныеПакета, что обеспечивает единообразие обработки метаданных по всему коду.


134-151: Хорошая архитектурная доработка конструктора для поддержки гибкой инициализации.

Замена процедуры инициализации на конструктор ПриСозданииОбъекта с опциональным параметром КаталогПоискаБиблиотек позволяет создавать экземпляры кэша для разных сценариев, включая новый режим "Скачивание". Это важно для поддержки офлайн-функциональности OPM.

Логика инициализации корректна:

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

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.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • 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 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 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 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 for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

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 (2)
src/core/Классы/КэшСкачанныхПакетов.os (1)

108-122: Улучшите обработку ошибок при чтении XML.

Блок try/catch правильно закрывает файл при ошибке, но можно улучшить обработку конкретных типов исключений.

Рассмотрите более детальную обработку ошибок:

 Попытка
 	Чтение = Новый ЧтениеXML;
 	Чтение.ОткрытьФайл(ПутьКФайлуМетаданных);
 	Сериализатор = Новый СериализацияМетаданныхПакета;
 	Метаданные = Сериализатор.ПрочитатьXML(Чтение);
 	
 	Чтение.Закрыть();
 Исключение
+	Лог.Ошибка("Ошибка чтения метаданных пакета из файла: " + ПутьКФайлуМетаданных + ". " + ОписаниеОшибки());
 	Чтение.Закрыть();
 	ВызватьИсключение;
 КонецПопытки;
tests/fixtures/opm-servers.cfg (1)

20-25: Конфигурация файлового сервера добавлена корректно.

Новая запись сервера правильно использует протокол "file://" и следует установленному формату конфигурации.

Рассмотрите кроссплатформенную совместимость в тестах.

Жёстко закодированный Windows-путь "C:\opm\hub" может создать проблемы при тестировании на других платформах.

Рассмотрите использование относительных путей или переменных окружения:

-            "ПутьНаСервере": "C:\\opm\\hub",
+            "ПутьНаСервере": "./tests/fixtures/hub",
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between b753afe and 4397e9f.

📒 Files selected for processing (10)
  • src/cmd/opm.os (1 hunks)
  • src/cmd/Классы/КомандаOpm_Download.os (1 hunks)
  • src/core/Классы/КэшСкачанныхПакетов.os (1 hunks)
  • src/core/Классы/МенеджерУстановкиПакетов.os (5 hunks)
  • src/core/Классы/УстановкаПакета.os (3 hunks)
  • src/core/Классы/ФайловыйСерверОтвет.os (1 hunks)
  • src/core/Классы/ФайловыйСерверПакетов.os (1 hunks)
  • src/core/Модули/РежимУстановкиПакетов.os (1 hunks)
  • src/core/Модули/СерверыПакетов.os (1 hunks)
  • tests/fixtures/opm-servers.cfg (1 hunks)
🧰 Additional context used
🧠 Learnings (4)
src/core/Классы/УстановкаПакета.os (3)
Learnt from: sfaqer
PR: oscript-library/opm#235
File: src/core/Классы/КэшУстановленныхПакетов.os:44-44
Timestamp: 2025-05-23T12:07:34.112Z
Learning: В процедуре `ПроверитьВерсиюСреды` в файле `src/core/Модули/РаботаСОписаниемПакета.os` вызов `РаботаСВерсиями.СравнитьВерсии` должен быть сохранен как fallback-механизм для обратной совместимости с ранними версиями среды, которые не используют семантическое версионирование.
Learnt from: sfaqer
PR: oscript-library/opm#235
File: src/core/Модули/РаботаСОписаниемПакета.os:37-37
Timestamp: 2025-05-23T12:04:43.639Z
Learning: В процедуре `ПроверитьВерсиюМанифеста` не требуется fallback механизм для сравнения версий, так как версия манифеста всегда должна соответствовать семантическому версионированию (semver). В то же время, для процедуры `ПроверитьВерсиюСреды` fallback нужен, так как старые версии среды могут не соответствовать формату semver.
Learnt from: sfaqer
PR: oscript-library/opm#235
File: src/core/Классы/КэшУстановленныхПакетов.os:44-44
Timestamp: 2025-05-23T12:07:34.112Z
Learning: В тестовом файле `tests/versions-test.os` должны остаться вызовы `РаботаСВерсиями.СравнитьВерсии`, так как этот файл специально тестирует функциональность модуля `РаботаСВерсиями`.
src/core/Классы/ФайловыйСерверОтвет.os (1)
Learnt from: sfaqer
PR: oscript-library/opm#235
File: src/core/Классы/КэшУстановленныхПакетов.os:44-44
Timestamp: 2025-05-23T12:07:34.112Z
Learning: В процедуре `ПроверитьВерсиюСреды` в файле `src/core/Модули/РаботаСОписаниемПакета.os` вызов `РаботаСВерсиями.СравнитьВерсии` должен быть сохранен как fallback-механизм для обратной совместимости с ранними версиями среды, которые не используют семантическое версионирование.
src/core/Классы/КэшСкачанныхПакетов.os (2)
Learnt from: sfaqer
PR: oscript-library/opm#235
File: src/core/Классы/КэшУстановленныхПакетов.os:44-44
Timestamp: 2025-05-23T12:07:34.112Z
Learning: В процедуре `ПроверитьВерсиюСреды` в файле `src/core/Модули/РаботаСОписаниемПакета.os` вызов `РаботаСВерсиями.СравнитьВерсии` должен быть сохранен как fallback-механизм для обратной совместимости с ранними версиями среды, которые не используют семантическое версионирование.
Learnt from: sfaqer
PR: oscript-library/opm#235
File: src/core/Модули/РаботаСОписаниемПакета.os:37-37
Timestamp: 2025-05-23T12:04:43.639Z
Learning: В процедуре `ПроверитьВерсиюМанифеста` не требуется fallback механизм для сравнения версий, так как версия манифеста всегда должна соответствовать семантическому версионированию (semver). В то же время, для процедуры `ПроверитьВерсиюСреды` fallback нужен, так как старые версии среды могут не соответствовать формату semver.
src/core/Классы/МенеджерУстановкиПакетов.os (1)
Learnt from: sfaqer
PR: oscript-library/opm#235
File: src/core/Классы/КэшУстановленныхПакетов.os:44-44
Timestamp: 2025-05-23T12:07:34.112Z
Learning: В процедуре `ПроверитьВерсиюСреды` в файле `src/core/Модули/РаботаСОписаниемПакета.os` вызов `РаботаСВерсиями.СравнитьВерсии` должен быть сохранен как fallback-механизм для обратной совместимости с ранними версиями среды, которые не используют семантическое версионирование.
⏰ Context from checks skipped due to timeout of 90000ms (7)
  • GitHub Check: test (dev) / build (ubuntu-latest, dev)
  • GitHub Check: test (default) / build (ubuntu-latest, default)
  • GitHub Check: test (dev) / build (macos-latest, dev)
  • GitHub Check: test (dev) / build (windows-latest, dev)
  • GitHub Check: test (stable) / build (macos-latest, stable)
  • GitHub Check: test (default) / build (macos-latest, default)
  • GitHub Check: test (stable) / build (ubuntu-latest, stable)
🔇 Additional comments (26)
src/core/Модули/РежимУстановкиПакетов.os (1)

4-4: Отлично! Новый режим установки добавлен корректно.

Добавление нового режима "Скачивание" следует установленному паттерну и интегрируется с существующими режимами установки.

Also applies to: 10-10

src/core/Классы/КэшСкачанныхПакетов.os (1)

12-50: Хорошая реализация проверки установленного пакета.

Функция правильно обрабатывает проверку версий, включая специальную логику для SNAPSHOT версий. Использование семантического версионирования соответствует современным практикам.

src/cmd/opm.os (1)

41-44: Новая команда скачивания добавлена правильно.

Команда "dl download" корректно зарегистрирована с локализацией и следует установленному паттерну регистрации команд.

src/core/Модули/СерверыПакетов.os (1)

18-24: Отличная реализация фабричного паттерна для серверов.

Логика выбора типа сервера на основе протокола URL реализована корректно. Код поддерживает обратную совместимость и чётко разделяет файловые и сетевые серверы.

src/core/Классы/ФайловыйСерверОтвет.os (4)

1-4: Хорошая структура класса с правильным использованием экспорта.

Правильно используется директива #Использовать semver и экспортируются только необходимые переменные.


6-23: Корректная логика конструктора с автоматическим выбором версии пакета.

Конструктор правильно обрабатывает случаи существования и отсутствия файла, автоматически подбирая подходящий файл пакета при запросе .ospx файла.


33-66: Эффективная реализация выбора версии пакета с семантическим версионированием.

Процедура корректно:

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

Логика обработки версий соответствует лучшим практикам.


25-31: Простая и корректная реализация методов интерфейса.

Методы ПолучитьТелоКакДвоичныеДанные() и Закрыть() реализованы правильно для совместимости с контрактом HTTP-ответов.

src/core/Классы/УстановкаПакета.os (4)

38-38: Правильное извлечение версии пакета из метаданных.

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


40-44: Корректная условная логика для выбора каталога установки.

Правильно реализовано ветвление логики: в режиме скачивания используется версионный каталог, в остальных режимах - обычный. Это обеспечивает правильную изоляцию версий пакетов.


58-68: Отличная реализация разной логики установки для режимов.

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


114-122: Правильное расширение функции для поддержки версионных каталогов.

Функция НайтиСоздатьКаталогУстановки корректно расширена для создания вложенной структуры каталогов с версией при необходимости.

src/core/Классы/ФайловыйСерверПакетов.os (4)

8-22: Корректная инициализация файлового сервера с обработкой URL-схем.

Правильно обрабатывается префикс "file://" и формируется корневой каталог поиска. Логика инициализации понятна и надежна.


40-55: Надежная реализация получения ресурсов с обработкой ошибок.

Метод правильно:

  • Формирует путь к ресурсу
  • Обрабатывает исключения с логированием
  • Возвращает соответствующий объект ответа или Неопределено при ошибках

57-82: Эффективная реализация поиска пакетов с обработкой ошибок.

Метод корректно:

  • Ищет файлы .ospx рекурсивно
  • Извлекает имена пакетов из структуры каталогов
  • Обрабатывает ошибки файловой системы с логированием предупреждений

84-99: Правильная реализация метода конфигурации для совместимости.

Метод возвращает полную структуру настроек сервера со значениями по умолчанию, обеспечивая совместимость с интерфейсом серверов пакетов.

src/cmd/Классы/КомандаOpm_Download.os (5)

4-30: Всесторонне описание команды с поддержкой множественных опций.

Команда правильно определяет все необходимые опции для гибкой работы с пакетами: файлы, URL, зеркала, зависимости. Интеграция с переменными окружения и перечислениями добавляет удобства использования.


32-66: Корректное извлечение и настройка параметров команды.

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


67-130: Комплексная логика обработки различных сценариев установки.

Правильно реализованы все сценарии:

  • Установка всех пакетов из облака
  • Установка по описанию пакета
  • Установка из файлов с поддержкой масок
  • Установка по URL с временной загрузкой
  • Установка отдельных пакетов из файлов или облака

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


133-137: Простая и корректная функция определения файлов пакетов.

Функция правильно определяет файлы пакетов по расширению .ospx с игнорированием регистра.


91-111: Проверить обработку HTTPS соединений.

Логика определения порта для HTTPS/HTTP выглядит упрощенной. Убедитесь, что HTTPСоединение корректно обрабатывает HTTPS соединения и сертификаты.

#!/bin/bash
# Поиск использования HTTPСоединение для HTTPS в кодовой базе
rg -A 5 -B 5 "HTTPСоединение.*443|HTTPS.*HTTPСоединение"
src/core/Классы/МенеджерУстановкиПакетов.os (5)

48-49: Правильная настройка каталога зависимостей для режима скачивания.

В режиме скачивания каталог зависимостей корректно устанавливается в целевой каталог установки, что обеспечивает правильную изоляцию скачанных пакетов.


88-89: Корректная обработка изменения режима установки.

При переключении в режим скачивания каталог зависимостей правильно обновляется на целевой каталог установки.


151-153: Правильное переопределение пути локальных зависимостей.

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


219-220: Логичное пропуск копирования локальных зависимостей в режиме скачивания.

Условие правильно исключает копирование локальных зависимостей в режиме скачивания, так как в этом режиме пакеты обрабатываются по-другому.


239-243: Правильный выбор типа кэша в зависимости от режима установки.

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

ФайлыПоМаске = НайтиФайлы(Путь, Маска);
Для Каждого ФайлПакета Из ФайлыПоМаске Цикл

РаботаСПакетами.УстановитьПакетИзФайла(ФайлПакета.ПолноеИмя, РежимУстановки, ЦелевойКаталог, НастройкаУстановки);
Copy link
Member

Choose a reason for hiding this comment

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

Я не очень понял, какое отношение команда download имеет к установке из локального файла...

Copy link
Member Author

Choose a reason for hiding this comment

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

Я не очень понял, какое отношение команда download имеет к установке из локального файла...

зависимости тащить

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.

вытащит конкретную. НО, если другие пакеты по цепочке зависимостей хотят другую версию - вытащит и другую конкретную тоже.

Например, при скачивании зависимостей ванесса-раннера у меня по итогу три версии ассертсов: 0.4.0, 1.3.0 и 1.4.0

@EvilBeaver
Copy link
Member

Кажется нужны описания других кейсов, например, с установкой из file:// Как это должно работать?

@dmpas
Copy link
Member Author

dmpas commented Jun 27, 2025

Кажется нужны описания других кейсов, например, с установкой из file:// Как это должно работать?

@EvilBeaver ровно так же, как и с http:// - будет тащить файл по определённому пути.

@dmpas dmpas requested a review from EvilBeaver June 27, 2025 13:45
@EvilBeaver
Copy link
Member

@nixel2007 FYI

КомандаПриложения.Опция("u url", "", "Указать прямую интернет-ссылку на файл *.ospx из которого нужно установить пакет");

КомандаПриложения.Опция("dev", Ложь, "Признак установки пакетов для разработки");
КомандаПриложения.Опция("s skip-install-deps", Ложь, "признак пропуска установки зависимых пакетов");
Copy link
Member

Choose a reason for hiding this comment

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

Я бы предложил имя ключа --no-deps

Copy link
Member Author

Choose a reason for hiding this comment

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

Я бы предложил имя ключа --no-deps

названия ключей оставил для совместимости с командой install

https://github.com/oscript-library/opm/blob/master/src/cmd/%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B/%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0Opm_Install.os#L12

@dmpas dmpas requested a review from EvilBeaver July 1, 2025 14:24
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.

2 participants