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

4.8 KiB
Raw Permalink Blame History

Автоматическое разрешение зависимостей в ZSVO

Теперь твой пакетный менеджер может автоматически находить и устанавливать зависимости без внешних инструментов!

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

1. Автоматическое разрешение зависимостей

# Установить пакет с автоматическим поиском зависимостей
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)

    • Структурированные ошибки с контекстом
    • Коды ошибок для лучшей обработки
    • Поддержка цепочек ошибок

🧪 Тестирование

Все новые функции покрыты тестами:

go test ./pkg/deps -v          # Тесты зависимостей
go test ./pkg/installer -v     # Тесты установщика  
go test ./pkg/security -v      # Тесты безопасности
go test ./pkg/errors -v        # Тесты ошибок

💡 Использование в коде

// Создать 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
  • Надежность - транзакционная установка с откатом
  • Безопасность - валидация путей и проверка целостности
  • Гибкость - поддержка разных источников пакетов
  • Производительность - кэширование и параллельная обработка

Теперь твой пакетный менеджер может самостоятельно управлять зависимостями без необходимости в сторонних инструментах!