zsvo/DEPENDENCY_RESOLUTION.md
2026-03-13 15:18:31 +03:00

109 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Автоматическое разрешение зависимостей в ZSVO
Теперь твой пакетный менеджер может автоматически находить и устанавливать зависимости без внешних инструментов!
## 🚀 Новые возможности
### 1. Автоматическое разрешение зависимостей
```bash
# Установить пакет с автоматическим поиском зависимостей
zsvo install --auto-resolve-deps myapp.pkg.tar.zst
# Пакетник найдет все зависимости в указанных директориях и установит их в правильном порядке
```
### 2. Рекурсивное разрешение
- Пакетник анализирует зависимости каждого пакета
- Находит зависимости зависимостей
- Строит правильный порядок установки (топологическая сортировка)
- Устанавливает все пакеты одной транзакцией
### 3. Поиск в нескольких директориях
Пакетник ищет зависимости в:
- `work-dir/packages/` (пакеты, собранные из исходников)
- `/var/cache/packages/` (глобальный кэш пакетов)
- `$ROOT/var/cache/packages/` (кэш в корневой директории)
## 📋 Как это работает
### Пример сценария:
```
myapp.pkg.tar.zst
├── Зависимости: libssl, zlib
libssl.pkg.tar.zst
├── Зависимости: libcrypt
zlib.pkg.tar.zst
├── Зависимости: libc
libcrypt.pkg.tar.zst
├── Зависимости: libc
```
**Результат:** Пакетник установит пакеты в порядке:
1. `libc` (базовая зависимость)
2. `libcrypt` (зависит от libc)
3. `zlib` (зависит от libc)
4. `libssl` (зависит от libcrypt)
5. `myapp` (зависит от libssl, zlib)
## 🔧 Технические улучшения
### Новые архитектурные компоненты:
1. **DependencyResolver** (`pkg/deps/resolver.go`)
- Топологическая сортировка зависимостей
- Поддержка альтернативных зависимостей (`pkgA | pkgB`)
- Проверка версий и ограничений
2. **PackageRepository** (`pkg/installer/repository_adapter.go`)
- Абстракция для доступа к пакетам
- Поддержка разных источников пакетов
3. **PathValidator** (`pkg/security/path_validator.go`)
- Защита от path traversal атак
- Валидация имен файлов
- Кросс-платформенная безопасность
4. **Typed Errors** (`pkg/errors/errors.go`)
- Структурированные ошибки с контекстом
- Коды ошибок для лучшей обработки
- Поддержка цепочек ошибок
## 🧪 Тестирование
Все новые функции покрыты тестами:
```bash
go test ./pkg/deps -v # Тесты зависимостей
go test ./pkg/installer -v # Тесты установщика
go test ./pkg/security -v # Тесты безопасности
go test ./pkg/errors -v # Тесты ошибок
```
## 💡 Использование в коде
```go
// Создать installer с автоматическим разрешением
installer := installer.NewInstaller("/")
// Установить с поиском зависимостей
err := installer.InstallWithAutoResolve(
[]string{"myapp.pkg.tar.zst"},
[]string{"/path/to/packages", "/var/cache/packages"},
)
if err != nil {
if errors.IsErrorCode(err, errors.ErrCodeDependencyMissing) {
fmt.Println("Не найдена зависимость:", err)
}
return err
}
```
## 🎯 Преимущества
- **Без внешних зависимостей** - все реализовано внутри ZSVO
- **Надежность** - транзакционная установка с откатом
- **Безопасность** - валидация путей и проверка целостности
- **Гибкость** - поддержка разных источников пакетов
- **Производительность** - кэширование и параллельная обработка
Теперь твой пакетный менеджер может самостоятельно управлять зависимостями без необходимости в сторонних инструментах!