-
Notifications
You must be signed in to change notification settings - Fork 33
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
base: master
Are you sure you want to change the base?
OPM в оффлайне #238
Conversation
Рекурсивное скачивание пакета с зависимостями.
WalkthroughВ проект добавлена новая команда "dl download" для загрузки пакетов и их зависимостей, реализованная через новый обработчик. В ядре системы поддержан режим установки "Скачивание", добавлена поддержка файловых серверов пакетов (через file://), расширена логика работы с метаданными пакетов и кэшем. Внесены сопутствующие изменения в обработку установки, зависимости и конфигурацию серверов. Changes
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): Сообщает об успешной загрузке
Poem
📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (4)
🚧 Files skipped from review as they are similar to previous changes (2)
🧰 Additional context used🧠 Learnings (1)src/core/Классы/КэшУстановленныхПакетов.os (3)
⏰ Context from checks skipped due to timeout of 90000ms (6)
🔇 Additional comments (5)
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed 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)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this 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
📒 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
: Правильный выбор типа кэша в зависимости от режима установки.Логика корректно выбирает специализированный кэш скачанных пакетов для режима скачивания и обычный кэш для других режимов. Это обеспечивает правильное отслеживание состояния пакетов.
ФайлыПоМаске = НайтиФайлы(Путь, Маска); | ||
Для Каждого ФайлПакета Из ФайлыПоМаске Цикл | ||
|
||
РаботаСПакетами.УстановитьПакетИзФайла(ФайлПакета.ПолноеИмя, РежимУстановки, ЦелевойКаталог, НастройкаУстановки); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я не очень понял, какое отношение команда download имеет к установке из локального файла...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я не очень понял, какое отношение команда download имеет к установке из локального файла...
зависимости тащить
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А она вытащит все версии пакета зависимости или какую-то конкретную, собственно, от которой зависит?
There was a problem hiding this comment.
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
Кажется нужны описания других кейсов, например, с установкой из file:// Как это должно работать? |
@EvilBeaver ровно так же, как и с http:// - будет тащить файл по определённому пути. |
@nixel2007 FYI |
КомандаПриложения.Опция("u url", "", "Указать прямую интернет-ссылку на файл *.ospx из которого нужно установить пакет"); | ||
|
||
КомандаПриложения.Опция("dev", Ложь, "Признак установки пакетов для разработки"); | ||
КомандаПриложения.Опция("s skip-install-deps", Ложь, "признак пропуска установки зависимых пакетов"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я бы предложил имя ключа --no-deps
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я бы предложил имя ключа --no-deps
названия ключей оставил для совместимости с командой install
Как работает:
в каталоге
/my/hub
будет создана структура, как в хабе:.
opm install essentialpackage1
Summary by CodeRabbit
Новые возможности
Исправления
Документация