You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.8 KiB
3.8 KiB
ADDED Requirements
Requirement: Batch package resolution from local, sync, and AUR databases
The system SHALL resolve packages in a single pass through local DB → sync DBs → AUR using batch operations to minimize subprocess/API calls.
Scenario: Package exists in local DB
- WHEN a package from collected state exists in the local database
- THEN the system SHALL mark it as found, set
Installed=true, and exclude it from AUR queries
Scenario: Package exists in sync DB
- WHEN a package from collected state does NOT exist in local DB but exists in ANY enabled sync database
- THEN the system SHALL mark it as found, set
Installed=false, and exclude it from AUR queries
Scenario: Package exists only in AUR
- WHEN a package from collected state does NOT exist in local or sync databases but exists in AUR
- THEN the system SHALL mark it as found with
InAUR=true, setInstalled=false, and use the cached AUR info
Scenario: Package not found anywhere
- WHEN a package from collected state is NOT in local DB, NOT in any sync DB, and NOT in AUR
- THEN the system SHALL return an error listing the unfound package(s)
Scenario: Batch AUR query
- WHEN multiple packages need AUR lookup
- THEN the system SHALL make a SINGLE HTTP request to AUR RPC with all package names (existing behavior preserved)
Requirement: Efficient local DB lookup using dyalpm
The system SHALL use dyalpm's PkgCache() iterator to build a lookup map in O(n) time, where n is total packages in local DB, instead of O(n*m) subprocess calls.
Scenario: Build local package map
- WHEN initializing package resolution
- THEN the system SHALL iterate localDB.PkgCache() once and store all package names in a map for O(1) lookups
Scenario: Check package in local map
- WHEN checking if a package exists in local DB
- THEN the system SHALL perform an O(1) map lookup instead of spawning a subprocess
Requirement: Efficient sync DB lookup using dyalpm
The system SHALL use each sync DB's PkgCache() iterator to check packages across all enabled repositories.
Scenario: Check package in sync DBs
- WHEN a package is not found in local DB
- THEN the system SHALL check all enabled sync databases using their iterators
Scenario: Package found in multiple sync repos
- WHEN a package exists in more than one sync repository (e.g., core and community)
- THEN the system SHALL use the first match found
Requirement: Track installed status in PackageInfo
The system SHALL include an Installed bool field in PackageInfo to indicate whether the package is currently installed.
Scenario: Package is installed
- WHEN a package exists in the local database
- THEN
PackageInfo.InstalledSHALL betrue
Scenario: Package is not installed
- WHEN a package exists only in sync DB or AUR (not in local DB)
- THEN
PackageInfo.InstalledSHALL befalse
Requirement: Mark installed packages as deps, then state packages as explicit
After package sync completes, the system SHALL mark all installed packages as dependencies, then override the collected state packages to be explicit. This avoids diffing before/after states.
Scenario: Mark all installed as deps
- WHEN package sync has completed (non-dry-run)
- THEN the system SHALL run
pacman -D --asdepsto mark ALL currently installed packages as dependencies
Scenario: Override state packages to explicit
- WHEN all installed packages have been marked as deps
- THEN the system SHALL run
pacman -D --asexpliciton the collected state packages, overriding their dependency status
Scenario: Dry-run skips marking
- WHEN operating in dry-run mode
- THEN the system SHALL NOT execute any
pacman -Dmarking operations