| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
Dependency resolution major rework epkg install --assume-no now uses 'world + resolvo' to work out install plan, the new code is well tested for major distros. Bump version to 0.2.1 Major Features ============== Constraint-Aware Dependency Resolution - **Introduced Alpine 'world' concenpt for top level package specs with version constraints** (e.g., pkgname=version, pkgname>=version, pkgname~=version) - **Implemented resolvo-based dependency solver** that works across all package formats Local Package and URL Support - **Support for local package files** (.rpm, .deb, .apk, .epkg, .conda, .pkg.tar.xz, .pkg.tar.zst, .tar.bz2) - **Support for remote package URLs** (http://, https://, file://) with automatic downloading Testing Infrastructure - **Data-driven test framework** for dependency solver using YAML/JSON test definitions (cargo test solver_tests::tests -- --nocapture) - **Batch package dependency testing script** (test_depends.py) with random package selection and configurable --os/--batch - **Added --assume-no option** for automatic negative prompts in testing scenarios Dependency Parsing Improvements =============================== Operator Parsing Fixes - **Fixed operator parsing order** in parse_operator_from_start() - now checks multi-character operators (>=, <=, ==) before single-character ones (>, <, =) - **Fixed ">>" and "==" parsing** - now correctly parsed instead of being split into ">" and "=" RPM "with" Operator Support - **Added support for RPM "with" operator** to combine multiple constraints on the same package - **Support for parenthesized and unparenthesized "with" clauses** - **Support for OR expressions in "with" clause left side** with De Morgan's law expansion - **Refactored parse_rpm_requires()** into smaller, focused helper functions Conditional Dependencies - **Fixed "if" operator parsing** in conditional dependencies with proper parentheses handling - **Fixed "and" operator handling** in conditional dependencies by normalizing to commas - **Improved conditional dependency resolution** - only checks installed/selected packages, not repository availability Architecture and Capability Parsing - **Support for RPM architecture specifications** in capability names (e.g., wine-cms(x86-32), wine-cms(x86-64)) - **Arch Linux library alias parsing** - distinguishes between version constraints and library aliases (e.g., libfoo=1.0.0 vs libstk-5.0.0.so=libstk-5.0.0.so-64) - **Support for capability tags** (pkgconfig, crate, python3.13dist, etc.) with proper parsing Version Comparison Fixes ======================== Debian Version Comparison - **Fixed Debian revision comparison** for strings with letters (e.g., "0ubuntu8.6" vs "0") - **Fixed parsing of versions with dashes in revision** (e.g., "1.48.0-2-3") - **Fixed alphabetic revision parsing** (e.g., "2.14.14-z" correctly parsed with revision "z") - **Fixed version comparison when string ends with ~** (tilde has lowest precedence) - **Fixed pre-release detection** - only recognized markers (rc, beta, alpha, pre, dev, snapshot) treated as pre-releases - **Strip local version suffixes** for VersionEqual constraints (everything after last '+') - **Strip trailing ~ suffix** for >= and > constraints in Debian format - **Improved trailing ~ handling** for versions with revisions RPM Version Comparison - **Fixed RPM version comparison** for numeric vs alphabetic segments (numbers > letters in RPM) - **Fixed semantic version comparison** - now compares segment-by-segment instead of concatenating - **Fixed revision comparison** - versions with release > versions without release (e.g., "12.0.0-bp160.1.2" > "12.0.0") - **Fixed version matching** for packages with letter-prefixed build numbers (e.g., "9.8.3-bp160.1.34") - **Compare upstream-only when operand has no release/revision** for RPM/Pacman/Apk formats - **Fixed explicit revision "0" handling** - distinguishes between no revision and explicit "0" APK/Alpine Version Comparison - **Fixed APK explicit revision comparison** (e.g., "6.0-r0" < "6.0") - **Fixed VersionCompatible operator** for APK format to ignore revision suffixes - **Fixed dot-separated pre-release version comparison** (e.g., "48.4" > "48.alpha") Wildcard and Pattern Matching - **Implemented VersionEqualStar and VersionNotEqualStar** wildcard matching (e.g., "6.9.*") - **Support for conda version patterns** (e.g., "3.13" matches "3.13.*" in conda format) - **Support for conda 3-part version matching** and underscore handling Dependency Resolution Improvements ================================== Provider Resolution - **Fixed provider constraint checking** - now checks what providers provide, not provider package version - **Filter provider packages by constraints** before version selection - **Try all providers when constraints fail** - fixed to always check mmio providers - **Fixed provider resolution for version-constrained capabilities** (e.g., "php-composer(doctrine/cache) >= 1.6") - **Split Pacman format provides fields** by whitespace for proper SONAME matching - **Split Alpine pkgconfig provides** by whitespace for multiple provides in single string - **Centralized provides parsing** with format-aware version stripping Version Constraint Checking - **Fixed OR condition handling** in version constraint checking - detects mutually exclusive constraints - **Improved OR group detection** for constraints with different operands - **Fixed VersionGreaterThan constraint with ~~ suffix** for versions with revisions - **Implemented VersionCompatible operator** constraint checking - **Refactored constraint checking logic** to shared functions in version.rs - **Ignore RPM constraints with unexpanded macros** (pattern %{xxx}) Conditional Dependencies - **Fixed conditional dependency resolution** - only checks installed/selected packages, not repository - **Proper handling of skipped conditional dependencies** - marks OR groups as satisfied when all are conditional and none satisfied Direct Package Lookup - **Fixed direct package lookup with version constraints** - filters packages before selecting highest version - **Support for package specs with version constraints** in install command Package Format Support ====================== Conda Support - **Added conda repository support** with noarch repos - **Fixed noarch handling** - set arch to "all" at creation time - **Custom deserializer for noarch field** (handles string and boolean values) - **Improved error logging** throughout conda processing pipeline Arch Linux/Pacman - **Added more repositories** for Arch Linux - **Added zstd decoder support** for .tar.zst files - **Skip usr/lib64 symlink** during package installation to prevent overwriting environment symlink - **Fixed library alias parsing** in requires and provides Alpine/APK - **Parse conflicts from requires field** - conflicts with '!' prefix now properly separated - **Fixed pkgconfig dependency resolution** with version constraints for multiple provides Debian/Ubuntu - **Fixed Debian provide version parsing** with parentheses format (e.g., "libgcc1 (= 1:14.2.0-19)") - **Handle ~~ suffix in version constraints** for Debian Rust packages - **Support for python3:any** capability resolution RPM/OpenSUSE/Fedora/OpenEuler - **Fixed RPM provides parsing** with spaces (e.g., ">= 1.0" format) - **Support for RPM files provides** and font provides - **Support for ksym(default:__SCT__cond_resched) provides** - **Fixed openeuler provides parsing** Error Handling and Logging ========================== Logging Improvements - **Improved error logging** in conda processing with full error chains - **Added debug logging** for provider lookup and constraint checking Bug Fixes ========= Dependency Resolution - **Fixed panic when package obsoleted during dependency resolution** - check if package exists before updating dependencies - **Improved version selection** - prefer packages that don't obsolete existing packages - **Fixed self-obsoletes handling** - flip to VersionNotEqual for self-obsoletes - **De-duplicate provides** to avoid redundant entries - **Remove duplicate pkgkeys** from same package in dependency collection Package Indexing - **Fixed last package not saved to index** in RPM repository processing - call on_new_paragraph() in finalize() - **Filter out trivial entries** from provide2pkgnames.yaml (where key == value) - **Fixed cache path collision** for URLs with same filename - include host and path in cache path Package Installation - **Fixed checksum file path resolution** for downloaded files - use resolve_mirror_path() consistently - **Fixed "Text file busy" errors** during package installation Miscellaneous - **Support for pkgkeys like __glibc__2.41__x86_64** - treat leading __ as part of pkgname - **Fixed epkg info command** - support pkgkey format (pkgname__version__arch) for exact package lookup - **Fixed test framework** - ensure constraints test runs even if simple test fails - **Added path-based filtering** to solver tests Documentation and Tests ======================= - **Added comprehensive test cases** for all major features - **Port initial tests** from apk-tools/test/solver/ - **Added test whitelist** for known working packages - **Improved test organization** with data-driven test framework Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 8 个月前 | |
Dependency resolution major rework epkg install --assume-no now uses 'world + resolvo' to work out install plan, the new code is well tested for major distros. Bump version to 0.2.1 Major Features ============== Constraint-Aware Dependency Resolution - **Introduced Alpine 'world' concenpt for top level package specs with version constraints** (e.g., pkgname=version, pkgname>=version, pkgname~=version) - **Implemented resolvo-based dependency solver** that works across all package formats Local Package and URL Support - **Support for local package files** (.rpm, .deb, .apk, .epkg, .conda, .pkg.tar.xz, .pkg.tar.zst, .tar.bz2) - **Support for remote package URLs** (http://, https://, file://) with automatic downloading Testing Infrastructure - **Data-driven test framework** for dependency solver using YAML/JSON test definitions (cargo test solver_tests::tests -- --nocapture) - **Batch package dependency testing script** (test_depends.py) with random package selection and configurable --os/--batch - **Added --assume-no option** for automatic negative prompts in testing scenarios Dependency Parsing Improvements =============================== Operator Parsing Fixes - **Fixed operator parsing order** in parse_operator_from_start() - now checks multi-character operators (>=, <=, ==) before single-character ones (>, <, =) - **Fixed ">>" and "==" parsing** - now correctly parsed instead of being split into ">" and "=" RPM "with" Operator Support - **Added support for RPM "with" operator** to combine multiple constraints on the same package - **Support for parenthesized and unparenthesized "with" clauses** - **Support for OR expressions in "with" clause left side** with De Morgan's law expansion - **Refactored parse_rpm_requires()** into smaller, focused helper functions Conditional Dependencies - **Fixed "if" operator parsing** in conditional dependencies with proper parentheses handling - **Fixed "and" operator handling** in conditional dependencies by normalizing to commas - **Improved conditional dependency resolution** - only checks installed/selected packages, not repository availability Architecture and Capability Parsing - **Support for RPM architecture specifications** in capability names (e.g., wine-cms(x86-32), wine-cms(x86-64)) - **Arch Linux library alias parsing** - distinguishes between version constraints and library aliases (e.g., libfoo=1.0.0 vs libstk-5.0.0.so=libstk-5.0.0.so-64) - **Support for capability tags** (pkgconfig, crate, python3.13dist, etc.) with proper parsing Version Comparison Fixes ======================== Debian Version Comparison - **Fixed Debian revision comparison** for strings with letters (e.g., "0ubuntu8.6" vs "0") - **Fixed parsing of versions with dashes in revision** (e.g., "1.48.0-2-3") - **Fixed alphabetic revision parsing** (e.g., "2.14.14-z" correctly parsed with revision "z") - **Fixed version comparison when string ends with ~** (tilde has lowest precedence) - **Fixed pre-release detection** - only recognized markers (rc, beta, alpha, pre, dev, snapshot) treated as pre-releases - **Strip local version suffixes** for VersionEqual constraints (everything after last '+') - **Strip trailing ~ suffix** for >= and > constraints in Debian format - **Improved trailing ~ handling** for versions with revisions RPM Version Comparison - **Fixed RPM version comparison** for numeric vs alphabetic segments (numbers > letters in RPM) - **Fixed semantic version comparison** - now compares segment-by-segment instead of concatenating - **Fixed revision comparison** - versions with release > versions without release (e.g., "12.0.0-bp160.1.2" > "12.0.0") - **Fixed version matching** for packages with letter-prefixed build numbers (e.g., "9.8.3-bp160.1.34") - **Compare upstream-only when operand has no release/revision** for RPM/Pacman/Apk formats - **Fixed explicit revision "0" handling** - distinguishes between no revision and explicit "0" APK/Alpine Version Comparison - **Fixed APK explicit revision comparison** (e.g., "6.0-r0" < "6.0") - **Fixed VersionCompatible operator** for APK format to ignore revision suffixes - **Fixed dot-separated pre-release version comparison** (e.g., "48.4" > "48.alpha") Wildcard and Pattern Matching - **Implemented VersionEqualStar and VersionNotEqualStar** wildcard matching (e.g., "6.9.*") - **Support for conda version patterns** (e.g., "3.13" matches "3.13.*" in conda format) - **Support for conda 3-part version matching** and underscore handling Dependency Resolution Improvements ================================== Provider Resolution - **Fixed provider constraint checking** - now checks what providers provide, not provider package version - **Filter provider packages by constraints** before version selection - **Try all providers when constraints fail** - fixed to always check mmio providers - **Fixed provider resolution for version-constrained capabilities** (e.g., "php-composer(doctrine/cache) >= 1.6") - **Split Pacman format provides fields** by whitespace for proper SONAME matching - **Split Alpine pkgconfig provides** by whitespace for multiple provides in single string - **Centralized provides parsing** with format-aware version stripping Version Constraint Checking - **Fixed OR condition handling** in version constraint checking - detects mutually exclusive constraints - **Improved OR group detection** for constraints with different operands - **Fixed VersionGreaterThan constraint with ~~ suffix** for versions with revisions - **Implemented VersionCompatible operator** constraint checking - **Refactored constraint checking logic** to shared functions in version.rs - **Ignore RPM constraints with unexpanded macros** (pattern %{xxx}) Conditional Dependencies - **Fixed conditional dependency resolution** - only checks installed/selected packages, not repository - **Proper handling of skipped conditional dependencies** - marks OR groups as satisfied when all are conditional and none satisfied Direct Package Lookup - **Fixed direct package lookup with version constraints** - filters packages before selecting highest version - **Support for package specs with version constraints** in install command Package Format Support ====================== Conda Support - **Added conda repository support** with noarch repos - **Fixed noarch handling** - set arch to "all" at creation time - **Custom deserializer for noarch field** (handles string and boolean values) - **Improved error logging** throughout conda processing pipeline Arch Linux/Pacman - **Added more repositories** for Arch Linux - **Added zstd decoder support** for .tar.zst files - **Skip usr/lib64 symlink** during package installation to prevent overwriting environment symlink - **Fixed library alias parsing** in requires and provides Alpine/APK - **Parse conflicts from requires field** - conflicts with '!' prefix now properly separated - **Fixed pkgconfig dependency resolution** with version constraints for multiple provides Debian/Ubuntu - **Fixed Debian provide version parsing** with parentheses format (e.g., "libgcc1 (= 1:14.2.0-19)") - **Handle ~~ suffix in version constraints** for Debian Rust packages - **Support for python3:any** capability resolution RPM/OpenSUSE/Fedora/OpenEuler - **Fixed RPM provides parsing** with spaces (e.g., ">= 1.0" format) - **Support for RPM files provides** and font provides - **Support for ksym(default:__SCT__cond_resched) provides** - **Fixed openeuler provides parsing** Error Handling and Logging ========================== Logging Improvements - **Improved error logging** in conda processing with full error chains - **Added debug logging** for provider lookup and constraint checking Bug Fixes ========= Dependency Resolution - **Fixed panic when package obsoleted during dependency resolution** - check if package exists before updating dependencies - **Improved version selection** - prefer packages that don't obsolete existing packages - **Fixed self-obsoletes handling** - flip to VersionNotEqual for self-obsoletes - **De-duplicate provides** to avoid redundant entries - **Remove duplicate pkgkeys** from same package in dependency collection Package Indexing - **Fixed last package not saved to index** in RPM repository processing - call on_new_paragraph() in finalize() - **Filter out trivial entries** from provide2pkgnames.yaml (where key == value) - **Fixed cache path collision** for URLs with same filename - include host and path in cache path Package Installation - **Fixed checksum file path resolution** for downloaded files - use resolve_mirror_path() consistently - **Fixed "Text file busy" errors** during package installation Miscellaneous - **Support for pkgkeys like __glibc__2.41__x86_64** - treat leading __ as part of pkgname - **Fixed epkg info command** - support pkgkey format (pkgname__version__arch) for exact package lookup - **Fixed test framework** - ensure constraints test runs even if simple test fails - **Added path-based filtering** to solver tests Documentation and Tests ======================= - **Added comprehensive test cases** for all major features - **Port initial tests** from apk-tools/test/solver/ - **Added test whitelist** for known working packages - **Improved test organization** with data-driven test framework Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 8 个月前 | |
Dependency resolution major rework epkg install --assume-no now uses 'world + resolvo' to work out install plan, the new code is well tested for major distros. Bump version to 0.2.1 Major Features ============== Constraint-Aware Dependency Resolution - **Introduced Alpine 'world' concenpt for top level package specs with version constraints** (e.g., pkgname=version, pkgname>=version, pkgname~=version) - **Implemented resolvo-based dependency solver** that works across all package formats Local Package and URL Support - **Support for local package files** (.rpm, .deb, .apk, .epkg, .conda, .pkg.tar.xz, .pkg.tar.zst, .tar.bz2) - **Support for remote package URLs** (http://, https://, file://) with automatic downloading Testing Infrastructure - **Data-driven test framework** for dependency solver using YAML/JSON test definitions (cargo test solver_tests::tests -- --nocapture) - **Batch package dependency testing script** (test_depends.py) with random package selection and configurable --os/--batch - **Added --assume-no option** for automatic negative prompts in testing scenarios Dependency Parsing Improvements =============================== Operator Parsing Fixes - **Fixed operator parsing order** in parse_operator_from_start() - now checks multi-character operators (>=, <=, ==) before single-character ones (>, <, =) - **Fixed ">>" and "==" parsing** - now correctly parsed instead of being split into ">" and "=" RPM "with" Operator Support - **Added support for RPM "with" operator** to combine multiple constraints on the same package - **Support for parenthesized and unparenthesized "with" clauses** - **Support for OR expressions in "with" clause left side** with De Morgan's law expansion - **Refactored parse_rpm_requires()** into smaller, focused helper functions Conditional Dependencies - **Fixed "if" operator parsing** in conditional dependencies with proper parentheses handling - **Fixed "and" operator handling** in conditional dependencies by normalizing to commas - **Improved conditional dependency resolution** - only checks installed/selected packages, not repository availability Architecture and Capability Parsing - **Support for RPM architecture specifications** in capability names (e.g., wine-cms(x86-32), wine-cms(x86-64)) - **Arch Linux library alias parsing** - distinguishes between version constraints and library aliases (e.g., libfoo=1.0.0 vs libstk-5.0.0.so=libstk-5.0.0.so-64) - **Support for capability tags** (pkgconfig, crate, python3.13dist, etc.) with proper parsing Version Comparison Fixes ======================== Debian Version Comparison - **Fixed Debian revision comparison** for strings with letters (e.g., "0ubuntu8.6" vs "0") - **Fixed parsing of versions with dashes in revision** (e.g., "1.48.0-2-3") - **Fixed alphabetic revision parsing** (e.g., "2.14.14-z" correctly parsed with revision "z") - **Fixed version comparison when string ends with ~** (tilde has lowest precedence) - **Fixed pre-release detection** - only recognized markers (rc, beta, alpha, pre, dev, snapshot) treated as pre-releases - **Strip local version suffixes** for VersionEqual constraints (everything after last '+') - **Strip trailing ~ suffix** for >= and > constraints in Debian format - **Improved trailing ~ handling** for versions with revisions RPM Version Comparison - **Fixed RPM version comparison** for numeric vs alphabetic segments (numbers > letters in RPM) - **Fixed semantic version comparison** - now compares segment-by-segment instead of concatenating - **Fixed revision comparison** - versions with release > versions without release (e.g., "12.0.0-bp160.1.2" > "12.0.0") - **Fixed version matching** for packages with letter-prefixed build numbers (e.g., "9.8.3-bp160.1.34") - **Compare upstream-only when operand has no release/revision** for RPM/Pacman/Apk formats - **Fixed explicit revision "0" handling** - distinguishes between no revision and explicit "0" APK/Alpine Version Comparison - **Fixed APK explicit revision comparison** (e.g., "6.0-r0" < "6.0") - **Fixed VersionCompatible operator** for APK format to ignore revision suffixes - **Fixed dot-separated pre-release version comparison** (e.g., "48.4" > "48.alpha") Wildcard and Pattern Matching - **Implemented VersionEqualStar and VersionNotEqualStar** wildcard matching (e.g., "6.9.*") - **Support for conda version patterns** (e.g., "3.13" matches "3.13.*" in conda format) - **Support for conda 3-part version matching** and underscore handling Dependency Resolution Improvements ================================== Provider Resolution - **Fixed provider constraint checking** - now checks what providers provide, not provider package version - **Filter provider packages by constraints** before version selection - **Try all providers when constraints fail** - fixed to always check mmio providers - **Fixed provider resolution for version-constrained capabilities** (e.g., "php-composer(doctrine/cache) >= 1.6") - **Split Pacman format provides fields** by whitespace for proper SONAME matching - **Split Alpine pkgconfig provides** by whitespace for multiple provides in single string - **Centralized provides parsing** with format-aware version stripping Version Constraint Checking - **Fixed OR condition handling** in version constraint checking - detects mutually exclusive constraints - **Improved OR group detection** for constraints with different operands - **Fixed VersionGreaterThan constraint with ~~ suffix** for versions with revisions - **Implemented VersionCompatible operator** constraint checking - **Refactored constraint checking logic** to shared functions in version.rs - **Ignore RPM constraints with unexpanded macros** (pattern %{xxx}) Conditional Dependencies - **Fixed conditional dependency resolution** - only checks installed/selected packages, not repository - **Proper handling of skipped conditional dependencies** - marks OR groups as satisfied when all are conditional and none satisfied Direct Package Lookup - **Fixed direct package lookup with version constraints** - filters packages before selecting highest version - **Support for package specs with version constraints** in install command Package Format Support ====================== Conda Support - **Added conda repository support** with noarch repos - **Fixed noarch handling** - set arch to "all" at creation time - **Custom deserializer for noarch field** (handles string and boolean values) - **Improved error logging** throughout conda processing pipeline Arch Linux/Pacman - **Added more repositories** for Arch Linux - **Added zstd decoder support** for .tar.zst files - **Skip usr/lib64 symlink** during package installation to prevent overwriting environment symlink - **Fixed library alias parsing** in requires and provides Alpine/APK - **Parse conflicts from requires field** - conflicts with '!' prefix now properly separated - **Fixed pkgconfig dependency resolution** with version constraints for multiple provides Debian/Ubuntu - **Fixed Debian provide version parsing** with parentheses format (e.g., "libgcc1 (= 1:14.2.0-19)") - **Handle ~~ suffix in version constraints** for Debian Rust packages - **Support for python3:any** capability resolution RPM/OpenSUSE/Fedora/OpenEuler - **Fixed RPM provides parsing** with spaces (e.g., ">= 1.0" format) - **Support for RPM files provides** and font provides - **Support for ksym(default:__SCT__cond_resched) provides** - **Fixed openeuler provides parsing** Error Handling and Logging ========================== Logging Improvements - **Improved error logging** in conda processing with full error chains - **Added debug logging** for provider lookup and constraint checking Bug Fixes ========= Dependency Resolution - **Fixed panic when package obsoleted during dependency resolution** - check if package exists before updating dependencies - **Improved version selection** - prefer packages that don't obsolete existing packages - **Fixed self-obsoletes handling** - flip to VersionNotEqual for self-obsoletes - **De-duplicate provides** to avoid redundant entries - **Remove duplicate pkgkeys** from same package in dependency collection Package Indexing - **Fixed last package not saved to index** in RPM repository processing - call on_new_paragraph() in finalize() - **Filter out trivial entries** from provide2pkgnames.yaml (where key == value) - **Fixed cache path collision** for URLs with same filename - include host and path in cache path Package Installation - **Fixed checksum file path resolution** for downloaded files - use resolve_mirror_path() consistently - **Fixed "Text file busy" errors** during package installation Miscellaneous - **Support for pkgkeys like __glibc__2.41__x86_64** - treat leading __ as part of pkgname - **Fixed epkg info command** - support pkgkey format (pkgname__version__arch) for exact package lookup - **Fixed test framework** - ensure constraints test runs even if simple test fails - **Added path-based filtering** to solver tests Documentation and Tests ======================= - **Added comprehensive test cases** for all major features - **Port initial tests** from apk-tools/test/solver/ - **Added test whitelist** for known working packages - **Improved test organization** with data-driven test framework Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 8 个月前 | |
Dependency resolution major rework epkg install --assume-no now uses 'world + resolvo' to work out install plan, the new code is well tested for major distros. Bump version to 0.2.1 Major Features ============== Constraint-Aware Dependency Resolution - **Introduced Alpine 'world' concenpt for top level package specs with version constraints** (e.g., pkgname=version, pkgname>=version, pkgname~=version) - **Implemented resolvo-based dependency solver** that works across all package formats Local Package and URL Support - **Support for local package files** (.rpm, .deb, .apk, .epkg, .conda, .pkg.tar.xz, .pkg.tar.zst, .tar.bz2) - **Support for remote package URLs** (http://, https://, file://) with automatic downloading Testing Infrastructure - **Data-driven test framework** for dependency solver using YAML/JSON test definitions (cargo test solver_tests::tests -- --nocapture) - **Batch package dependency testing script** (test_depends.py) with random package selection and configurable --os/--batch - **Added --assume-no option** for automatic negative prompts in testing scenarios Dependency Parsing Improvements =============================== Operator Parsing Fixes - **Fixed operator parsing order** in parse_operator_from_start() - now checks multi-character operators (>=, <=, ==) before single-character ones (>, <, =) - **Fixed ">>" and "==" parsing** - now correctly parsed instead of being split into ">" and "=" RPM "with" Operator Support - **Added support for RPM "with" operator** to combine multiple constraints on the same package - **Support for parenthesized and unparenthesized "with" clauses** - **Support for OR expressions in "with" clause left side** with De Morgan's law expansion - **Refactored parse_rpm_requires()** into smaller, focused helper functions Conditional Dependencies - **Fixed "if" operator parsing** in conditional dependencies with proper parentheses handling - **Fixed "and" operator handling** in conditional dependencies by normalizing to commas - **Improved conditional dependency resolution** - only checks installed/selected packages, not repository availability Architecture and Capability Parsing - **Support for RPM architecture specifications** in capability names (e.g., wine-cms(x86-32), wine-cms(x86-64)) - **Arch Linux library alias parsing** - distinguishes between version constraints and library aliases (e.g., libfoo=1.0.0 vs libstk-5.0.0.so=libstk-5.0.0.so-64) - **Support for capability tags** (pkgconfig, crate, python3.13dist, etc.) with proper parsing Version Comparison Fixes ======================== Debian Version Comparison - **Fixed Debian revision comparison** for strings with letters (e.g., "0ubuntu8.6" vs "0") - **Fixed parsing of versions with dashes in revision** (e.g., "1.48.0-2-3") - **Fixed alphabetic revision parsing** (e.g., "2.14.14-z" correctly parsed with revision "z") - **Fixed version comparison when string ends with ~** (tilde has lowest precedence) - **Fixed pre-release detection** - only recognized markers (rc, beta, alpha, pre, dev, snapshot) treated as pre-releases - **Strip local version suffixes** for VersionEqual constraints (everything after last '+') - **Strip trailing ~ suffix** for >= and > constraints in Debian format - **Improved trailing ~ handling** for versions with revisions RPM Version Comparison - **Fixed RPM version comparison** for numeric vs alphabetic segments (numbers > letters in RPM) - **Fixed semantic version comparison** - now compares segment-by-segment instead of concatenating - **Fixed revision comparison** - versions with release > versions without release (e.g., "12.0.0-bp160.1.2" > "12.0.0") - **Fixed version matching** for packages with letter-prefixed build numbers (e.g., "9.8.3-bp160.1.34") - **Compare upstream-only when operand has no release/revision** for RPM/Pacman/Apk formats - **Fixed explicit revision "0" handling** - distinguishes between no revision and explicit "0" APK/Alpine Version Comparison - **Fixed APK explicit revision comparison** (e.g., "6.0-r0" < "6.0") - **Fixed VersionCompatible operator** for APK format to ignore revision suffixes - **Fixed dot-separated pre-release version comparison** (e.g., "48.4" > "48.alpha") Wildcard and Pattern Matching - **Implemented VersionEqualStar and VersionNotEqualStar** wildcard matching (e.g., "6.9.*") - **Support for conda version patterns** (e.g., "3.13" matches "3.13.*" in conda format) - **Support for conda 3-part version matching** and underscore handling Dependency Resolution Improvements ================================== Provider Resolution - **Fixed provider constraint checking** - now checks what providers provide, not provider package version - **Filter provider packages by constraints** before version selection - **Try all providers when constraints fail** - fixed to always check mmio providers - **Fixed provider resolution for version-constrained capabilities** (e.g., "php-composer(doctrine/cache) >= 1.6") - **Split Pacman format provides fields** by whitespace for proper SONAME matching - **Split Alpine pkgconfig provides** by whitespace for multiple provides in single string - **Centralized provides parsing** with format-aware version stripping Version Constraint Checking - **Fixed OR condition handling** in version constraint checking - detects mutually exclusive constraints - **Improved OR group detection** for constraints with different operands - **Fixed VersionGreaterThan constraint with ~~ suffix** for versions with revisions - **Implemented VersionCompatible operator** constraint checking - **Refactored constraint checking logic** to shared functions in version.rs - **Ignore RPM constraints with unexpanded macros** (pattern %{xxx}) Conditional Dependencies - **Fixed conditional dependency resolution** - only checks installed/selected packages, not repository - **Proper handling of skipped conditional dependencies** - marks OR groups as satisfied when all are conditional and none satisfied Direct Package Lookup - **Fixed direct package lookup with version constraints** - filters packages before selecting highest version - **Support for package specs with version constraints** in install command Package Format Support ====================== Conda Support - **Added conda repository support** with noarch repos - **Fixed noarch handling** - set arch to "all" at creation time - **Custom deserializer for noarch field** (handles string and boolean values) - **Improved error logging** throughout conda processing pipeline Arch Linux/Pacman - **Added more repositories** for Arch Linux - **Added zstd decoder support** for .tar.zst files - **Skip usr/lib64 symlink** during package installation to prevent overwriting environment symlink - **Fixed library alias parsing** in requires and provides Alpine/APK - **Parse conflicts from requires field** - conflicts with '!' prefix now properly separated - **Fixed pkgconfig dependency resolution** with version constraints for multiple provides Debian/Ubuntu - **Fixed Debian provide version parsing** with parentheses format (e.g., "libgcc1 (= 1:14.2.0-19)") - **Handle ~~ suffix in version constraints** for Debian Rust packages - **Support for python3:any** capability resolution RPM/OpenSUSE/Fedora/OpenEuler - **Fixed RPM provides parsing** with spaces (e.g., ">= 1.0" format) - **Support for RPM files provides** and font provides - **Support for ksym(default:__SCT__cond_resched) provides** - **Fixed openeuler provides parsing** Error Handling and Logging ========================== Logging Improvements - **Improved error logging** in conda processing with full error chains - **Added debug logging** for provider lookup and constraint checking Bug Fixes ========= Dependency Resolution - **Fixed panic when package obsoleted during dependency resolution** - check if package exists before updating dependencies - **Improved version selection** - prefer packages that don't obsolete existing packages - **Fixed self-obsoletes handling** - flip to VersionNotEqual for self-obsoletes - **De-duplicate provides** to avoid redundant entries - **Remove duplicate pkgkeys** from same package in dependency collection Package Indexing - **Fixed last package not saved to index** in RPM repository processing - call on_new_paragraph() in finalize() - **Filter out trivial entries** from provide2pkgnames.yaml (where key == value) - **Fixed cache path collision** for URLs with same filename - include host and path in cache path Package Installation - **Fixed checksum file path resolution** for downloaded files - use resolve_mirror_path() consistently - **Fixed "Text file busy" errors** during package installation Miscellaneous - **Support for pkgkeys like __glibc__2.41__x86_64** - treat leading __ as part of pkgname - **Fixed epkg info command** - support pkgkey format (pkgname__version__arch) for exact package lookup - **Fixed test framework** - ensure constraints test runs even if simple test fails - **Added path-based filtering** to solver tests Documentation and Tests ======================= - **Added comprehensive test cases** for all major features - **Port initial tests** from apk-tools/test/solver/ - **Added test whitelist** for known working packages - **Improved test organization** with data-driven test framework Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 8 个月前 | |
Dependency resolution major rework epkg install --assume-no now uses 'world + resolvo' to work out install plan, the new code is well tested for major distros. Bump version to 0.2.1 Major Features ============== Constraint-Aware Dependency Resolution - **Introduced Alpine 'world' concenpt for top level package specs with version constraints** (e.g., pkgname=version, pkgname>=version, pkgname~=version) - **Implemented resolvo-based dependency solver** that works across all package formats Local Package and URL Support - **Support for local package files** (.rpm, .deb, .apk, .epkg, .conda, .pkg.tar.xz, .pkg.tar.zst, .tar.bz2) - **Support for remote package URLs** (http://, https://, file://) with automatic downloading Testing Infrastructure - **Data-driven test framework** for dependency solver using YAML/JSON test definitions (cargo test solver_tests::tests -- --nocapture) - **Batch package dependency testing script** (test_depends.py) with random package selection and configurable --os/--batch - **Added --assume-no option** for automatic negative prompts in testing scenarios Dependency Parsing Improvements =============================== Operator Parsing Fixes - **Fixed operator parsing order** in parse_operator_from_start() - now checks multi-character operators (>=, <=, ==) before single-character ones (>, <, =) - **Fixed ">>" and "==" parsing** - now correctly parsed instead of being split into ">" and "=" RPM "with" Operator Support - **Added support for RPM "with" operator** to combine multiple constraints on the same package - **Support for parenthesized and unparenthesized "with" clauses** - **Support for OR expressions in "with" clause left side** with De Morgan's law expansion - **Refactored parse_rpm_requires()** into smaller, focused helper functions Conditional Dependencies - **Fixed "if" operator parsing** in conditional dependencies with proper parentheses handling - **Fixed "and" operator handling** in conditional dependencies by normalizing to commas - **Improved conditional dependency resolution** - only checks installed/selected packages, not repository availability Architecture and Capability Parsing - **Support for RPM architecture specifications** in capability names (e.g., wine-cms(x86-32), wine-cms(x86-64)) - **Arch Linux library alias parsing** - distinguishes between version constraints and library aliases (e.g., libfoo=1.0.0 vs libstk-5.0.0.so=libstk-5.0.0.so-64) - **Support for capability tags** (pkgconfig, crate, python3.13dist, etc.) with proper parsing Version Comparison Fixes ======================== Debian Version Comparison - **Fixed Debian revision comparison** for strings with letters (e.g., "0ubuntu8.6" vs "0") - **Fixed parsing of versions with dashes in revision** (e.g., "1.48.0-2-3") - **Fixed alphabetic revision parsing** (e.g., "2.14.14-z" correctly parsed with revision "z") - **Fixed version comparison when string ends with ~** (tilde has lowest precedence) - **Fixed pre-release detection** - only recognized markers (rc, beta, alpha, pre, dev, snapshot) treated as pre-releases - **Strip local version suffixes** for VersionEqual constraints (everything after last '+') - **Strip trailing ~ suffix** for >= and > constraints in Debian format - **Improved trailing ~ handling** for versions with revisions RPM Version Comparison - **Fixed RPM version comparison** for numeric vs alphabetic segments (numbers > letters in RPM) - **Fixed semantic version comparison** - now compares segment-by-segment instead of concatenating - **Fixed revision comparison** - versions with release > versions without release (e.g., "12.0.0-bp160.1.2" > "12.0.0") - **Fixed version matching** for packages with letter-prefixed build numbers (e.g., "9.8.3-bp160.1.34") - **Compare upstream-only when operand has no release/revision** for RPM/Pacman/Apk formats - **Fixed explicit revision "0" handling** - distinguishes between no revision and explicit "0" APK/Alpine Version Comparison - **Fixed APK explicit revision comparison** (e.g., "6.0-r0" < "6.0") - **Fixed VersionCompatible operator** for APK format to ignore revision suffixes - **Fixed dot-separated pre-release version comparison** (e.g., "48.4" > "48.alpha") Wildcard and Pattern Matching - **Implemented VersionEqualStar and VersionNotEqualStar** wildcard matching (e.g., "6.9.*") - **Support for conda version patterns** (e.g., "3.13" matches "3.13.*" in conda format) - **Support for conda 3-part version matching** and underscore handling Dependency Resolution Improvements ================================== Provider Resolution - **Fixed provider constraint checking** - now checks what providers provide, not provider package version - **Filter provider packages by constraints** before version selection - **Try all providers when constraints fail** - fixed to always check mmio providers - **Fixed provider resolution for version-constrained capabilities** (e.g., "php-composer(doctrine/cache) >= 1.6") - **Split Pacman format provides fields** by whitespace for proper SONAME matching - **Split Alpine pkgconfig provides** by whitespace for multiple provides in single string - **Centralized provides parsing** with format-aware version stripping Version Constraint Checking - **Fixed OR condition handling** in version constraint checking - detects mutually exclusive constraints - **Improved OR group detection** for constraints with different operands - **Fixed VersionGreaterThan constraint with ~~ suffix** for versions with revisions - **Implemented VersionCompatible operator** constraint checking - **Refactored constraint checking logic** to shared functions in version.rs - **Ignore RPM constraints with unexpanded macros** (pattern %{xxx}) Conditional Dependencies - **Fixed conditional dependency resolution** - only checks installed/selected packages, not repository - **Proper handling of skipped conditional dependencies** - marks OR groups as satisfied when all are conditional and none satisfied Direct Package Lookup - **Fixed direct package lookup with version constraints** - filters packages before selecting highest version - **Support for package specs with version constraints** in install command Package Format Support ====================== Conda Support - **Added conda repository support** with noarch repos - **Fixed noarch handling** - set arch to "all" at creation time - **Custom deserializer for noarch field** (handles string and boolean values) - **Improved error logging** throughout conda processing pipeline Arch Linux/Pacman - **Added more repositories** for Arch Linux - **Added zstd decoder support** for .tar.zst files - **Skip usr/lib64 symlink** during package installation to prevent overwriting environment symlink - **Fixed library alias parsing** in requires and provides Alpine/APK - **Parse conflicts from requires field** - conflicts with '!' prefix now properly separated - **Fixed pkgconfig dependency resolution** with version constraints for multiple provides Debian/Ubuntu - **Fixed Debian provide version parsing** with parentheses format (e.g., "libgcc1 (= 1:14.2.0-19)") - **Handle ~~ suffix in version constraints** for Debian Rust packages - **Support for python3:any** capability resolution RPM/OpenSUSE/Fedora/OpenEuler - **Fixed RPM provides parsing** with spaces (e.g., ">= 1.0" format) - **Support for RPM files provides** and font provides - **Support for ksym(default:__SCT__cond_resched) provides** - **Fixed openeuler provides parsing** Error Handling and Logging ========================== Logging Improvements - **Improved error logging** in conda processing with full error chains - **Added debug logging** for provider lookup and constraint checking Bug Fixes ========= Dependency Resolution - **Fixed panic when package obsoleted during dependency resolution** - check if package exists before updating dependencies - **Improved version selection** - prefer packages that don't obsolete existing packages - **Fixed self-obsoletes handling** - flip to VersionNotEqual for self-obsoletes - **De-duplicate provides** to avoid redundant entries - **Remove duplicate pkgkeys** from same package in dependency collection Package Indexing - **Fixed last package not saved to index** in RPM repository processing - call on_new_paragraph() in finalize() - **Filter out trivial entries** from provide2pkgnames.yaml (where key == value) - **Fixed cache path collision** for URLs with same filename - include host and path in cache path Package Installation - **Fixed checksum file path resolution** for downloaded files - use resolve_mirror_path() consistently - **Fixed "Text file busy" errors** during package installation Miscellaneous - **Support for pkgkeys like __glibc__2.41__x86_64** - treat leading __ as part of pkgname - **Fixed epkg info command** - support pkgkey format (pkgname__version__arch) for exact package lookup - **Fixed test framework** - ensure constraints test runs even if simple test fails - **Added path-based filtering** to solver tests Documentation and Tests ======================= - **Added comprehensive test cases** for all major features - **Port initial tests** from apk-tools/test/solver/ - **Added test whitelist** for known working packages - **Improved test organization** with data-driven test framework Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 8 个月前 | |
Dependency resolution major rework epkg install --assume-no now uses 'world + resolvo' to work out install plan, the new code is well tested for major distros. Bump version to 0.2.1 Major Features ============== Constraint-Aware Dependency Resolution - **Introduced Alpine 'world' concenpt for top level package specs with version constraints** (e.g., pkgname=version, pkgname>=version, pkgname~=version) - **Implemented resolvo-based dependency solver** that works across all package formats Local Package and URL Support - **Support for local package files** (.rpm, .deb, .apk, .epkg, .conda, .pkg.tar.xz, .pkg.tar.zst, .tar.bz2) - **Support for remote package URLs** (http://, https://, file://) with automatic downloading Testing Infrastructure - **Data-driven test framework** for dependency solver using YAML/JSON test definitions (cargo test solver_tests::tests -- --nocapture) - **Batch package dependency testing script** (test_depends.py) with random package selection and configurable --os/--batch - **Added --assume-no option** for automatic negative prompts in testing scenarios Dependency Parsing Improvements =============================== Operator Parsing Fixes - **Fixed operator parsing order** in parse_operator_from_start() - now checks multi-character operators (>=, <=, ==) before single-character ones (>, <, =) - **Fixed ">>" and "==" parsing** - now correctly parsed instead of being split into ">" and "=" RPM "with" Operator Support - **Added support for RPM "with" operator** to combine multiple constraints on the same package - **Support for parenthesized and unparenthesized "with" clauses** - **Support for OR expressions in "with" clause left side** with De Morgan's law expansion - **Refactored parse_rpm_requires()** into smaller, focused helper functions Conditional Dependencies - **Fixed "if" operator parsing** in conditional dependencies with proper parentheses handling - **Fixed "and" operator handling** in conditional dependencies by normalizing to commas - **Improved conditional dependency resolution** - only checks installed/selected packages, not repository availability Architecture and Capability Parsing - **Support for RPM architecture specifications** in capability names (e.g., wine-cms(x86-32), wine-cms(x86-64)) - **Arch Linux library alias parsing** - distinguishes between version constraints and library aliases (e.g., libfoo=1.0.0 vs libstk-5.0.0.so=libstk-5.0.0.so-64) - **Support for capability tags** (pkgconfig, crate, python3.13dist, etc.) with proper parsing Version Comparison Fixes ======================== Debian Version Comparison - **Fixed Debian revision comparison** for strings with letters (e.g., "0ubuntu8.6" vs "0") - **Fixed parsing of versions with dashes in revision** (e.g., "1.48.0-2-3") - **Fixed alphabetic revision parsing** (e.g., "2.14.14-z" correctly parsed with revision "z") - **Fixed version comparison when string ends with ~** (tilde has lowest precedence) - **Fixed pre-release detection** - only recognized markers (rc, beta, alpha, pre, dev, snapshot) treated as pre-releases - **Strip local version suffixes** for VersionEqual constraints (everything after last '+') - **Strip trailing ~ suffix** for >= and > constraints in Debian format - **Improved trailing ~ handling** for versions with revisions RPM Version Comparison - **Fixed RPM version comparison** for numeric vs alphabetic segments (numbers > letters in RPM) - **Fixed semantic version comparison** - now compares segment-by-segment instead of concatenating - **Fixed revision comparison** - versions with release > versions without release (e.g., "12.0.0-bp160.1.2" > "12.0.0") - **Fixed version matching** for packages with letter-prefixed build numbers (e.g., "9.8.3-bp160.1.34") - **Compare upstream-only when operand has no release/revision** for RPM/Pacman/Apk formats - **Fixed explicit revision "0" handling** - distinguishes between no revision and explicit "0" APK/Alpine Version Comparison - **Fixed APK explicit revision comparison** (e.g., "6.0-r0" < "6.0") - **Fixed VersionCompatible operator** for APK format to ignore revision suffixes - **Fixed dot-separated pre-release version comparison** (e.g., "48.4" > "48.alpha") Wildcard and Pattern Matching - **Implemented VersionEqualStar and VersionNotEqualStar** wildcard matching (e.g., "6.9.*") - **Support for conda version patterns** (e.g., "3.13" matches "3.13.*" in conda format) - **Support for conda 3-part version matching** and underscore handling Dependency Resolution Improvements ================================== Provider Resolution - **Fixed provider constraint checking** - now checks what providers provide, not provider package version - **Filter provider packages by constraints** before version selection - **Try all providers when constraints fail** - fixed to always check mmio providers - **Fixed provider resolution for version-constrained capabilities** (e.g., "php-composer(doctrine/cache) >= 1.6") - **Split Pacman format provides fields** by whitespace for proper SONAME matching - **Split Alpine pkgconfig provides** by whitespace for multiple provides in single string - **Centralized provides parsing** with format-aware version stripping Version Constraint Checking - **Fixed OR condition handling** in version constraint checking - detects mutually exclusive constraints - **Improved OR group detection** for constraints with different operands - **Fixed VersionGreaterThan constraint with ~~ suffix** for versions with revisions - **Implemented VersionCompatible operator** constraint checking - **Refactored constraint checking logic** to shared functions in version.rs - **Ignore RPM constraints with unexpanded macros** (pattern %{xxx}) Conditional Dependencies - **Fixed conditional dependency resolution** - only checks installed/selected packages, not repository - **Proper handling of skipped conditional dependencies** - marks OR groups as satisfied when all are conditional and none satisfied Direct Package Lookup - **Fixed direct package lookup with version constraints** - filters packages before selecting highest version - **Support for package specs with version constraints** in install command Package Format Support ====================== Conda Support - **Added conda repository support** with noarch repos - **Fixed noarch handling** - set arch to "all" at creation time - **Custom deserializer for noarch field** (handles string and boolean values) - **Improved error logging** throughout conda processing pipeline Arch Linux/Pacman - **Added more repositories** for Arch Linux - **Added zstd decoder support** for .tar.zst files - **Skip usr/lib64 symlink** during package installation to prevent overwriting environment symlink - **Fixed library alias parsing** in requires and provides Alpine/APK - **Parse conflicts from requires field** - conflicts with '!' prefix now properly separated - **Fixed pkgconfig dependency resolution** with version constraints for multiple provides Debian/Ubuntu - **Fixed Debian provide version parsing** with parentheses format (e.g., "libgcc1 (= 1:14.2.0-19)") - **Handle ~~ suffix in version constraints** for Debian Rust packages - **Support for python3:any** capability resolution RPM/OpenSUSE/Fedora/OpenEuler - **Fixed RPM provides parsing** with spaces (e.g., ">= 1.0" format) - **Support for RPM files provides** and font provides - **Support for ksym(default:__SCT__cond_resched) provides** - **Fixed openeuler provides parsing** Error Handling and Logging ========================== Logging Improvements - **Improved error logging** in conda processing with full error chains - **Added debug logging** for provider lookup and constraint checking Bug Fixes ========= Dependency Resolution - **Fixed panic when package obsoleted during dependency resolution** - check if package exists before updating dependencies - **Improved version selection** - prefer packages that don't obsolete existing packages - **Fixed self-obsoletes handling** - flip to VersionNotEqual for self-obsoletes - **De-duplicate provides** to avoid redundant entries - **Remove duplicate pkgkeys** from same package in dependency collection Package Indexing - **Fixed last package not saved to index** in RPM repository processing - call on_new_paragraph() in finalize() - **Filter out trivial entries** from provide2pkgnames.yaml (where key == value) - **Fixed cache path collision** for URLs with same filename - include host and path in cache path Package Installation - **Fixed checksum file path resolution** for downloaded files - use resolve_mirror_path() consistently - **Fixed "Text file busy" errors** during package installation Miscellaneous - **Support for pkgkeys like __glibc__2.41__x86_64** - treat leading __ as part of pkgname - **Fixed epkg info command** - support pkgkey format (pkgname__version__arch) for exact package lookup - **Fixed test framework** - ensure constraints test runs even if simple test fails - **Added path-based filtering** to solver tests Documentation and Tests ======================= - **Added comprehensive test cases** for all major features - **Port initial tests** from apk-tools/test/solver/ - **Added test whitelist** for known working packages - **Improved test organization** with data-driven test framework Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 8 个月前 | |
Dependency resolution major rework epkg install --assume-no now uses 'world + resolvo' to work out install plan, the new code is well tested for major distros. Bump version to 0.2.1 Major Features ============== Constraint-Aware Dependency Resolution - **Introduced Alpine 'world' concenpt for top level package specs with version constraints** (e.g., pkgname=version, pkgname>=version, pkgname~=version) - **Implemented resolvo-based dependency solver** that works across all package formats Local Package and URL Support - **Support for local package files** (.rpm, .deb, .apk, .epkg, .conda, .pkg.tar.xz, .pkg.tar.zst, .tar.bz2) - **Support for remote package URLs** (http://, https://, file://) with automatic downloading Testing Infrastructure - **Data-driven test framework** for dependency solver using YAML/JSON test definitions (cargo test solver_tests::tests -- --nocapture) - **Batch package dependency testing script** (test_depends.py) with random package selection and configurable --os/--batch - **Added --assume-no option** for automatic negative prompts in testing scenarios Dependency Parsing Improvements =============================== Operator Parsing Fixes - **Fixed operator parsing order** in parse_operator_from_start() - now checks multi-character operators (>=, <=, ==) before single-character ones (>, <, =) - **Fixed ">>" and "==" parsing** - now correctly parsed instead of being split into ">" and "=" RPM "with" Operator Support - **Added support for RPM "with" operator** to combine multiple constraints on the same package - **Support for parenthesized and unparenthesized "with" clauses** - **Support for OR expressions in "with" clause left side** with De Morgan's law expansion - **Refactored parse_rpm_requires()** into smaller, focused helper functions Conditional Dependencies - **Fixed "if" operator parsing** in conditional dependencies with proper parentheses handling - **Fixed "and" operator handling** in conditional dependencies by normalizing to commas - **Improved conditional dependency resolution** - only checks installed/selected packages, not repository availability Architecture and Capability Parsing - **Support for RPM architecture specifications** in capability names (e.g., wine-cms(x86-32), wine-cms(x86-64)) - **Arch Linux library alias parsing** - distinguishes between version constraints and library aliases (e.g., libfoo=1.0.0 vs libstk-5.0.0.so=libstk-5.0.0.so-64) - **Support for capability tags** (pkgconfig, crate, python3.13dist, etc.) with proper parsing Version Comparison Fixes ======================== Debian Version Comparison - **Fixed Debian revision comparison** for strings with letters (e.g., "0ubuntu8.6" vs "0") - **Fixed parsing of versions with dashes in revision** (e.g., "1.48.0-2-3") - **Fixed alphabetic revision parsing** (e.g., "2.14.14-z" correctly parsed with revision "z") - **Fixed version comparison when string ends with ~** (tilde has lowest precedence) - **Fixed pre-release detection** - only recognized markers (rc, beta, alpha, pre, dev, snapshot) treated as pre-releases - **Strip local version suffixes** for VersionEqual constraints (everything after last '+') - **Strip trailing ~ suffix** for >= and > constraints in Debian format - **Improved trailing ~ handling** for versions with revisions RPM Version Comparison - **Fixed RPM version comparison** for numeric vs alphabetic segments (numbers > letters in RPM) - **Fixed semantic version comparison** - now compares segment-by-segment instead of concatenating - **Fixed revision comparison** - versions with release > versions without release (e.g., "12.0.0-bp160.1.2" > "12.0.0") - **Fixed version matching** for packages with letter-prefixed build numbers (e.g., "9.8.3-bp160.1.34") - **Compare upstream-only when operand has no release/revision** for RPM/Pacman/Apk formats - **Fixed explicit revision "0" handling** - distinguishes between no revision and explicit "0" APK/Alpine Version Comparison - **Fixed APK explicit revision comparison** (e.g., "6.0-r0" < "6.0") - **Fixed VersionCompatible operator** for APK format to ignore revision suffixes - **Fixed dot-separated pre-release version comparison** (e.g., "48.4" > "48.alpha") Wildcard and Pattern Matching - **Implemented VersionEqualStar and VersionNotEqualStar** wildcard matching (e.g., "6.9.*") - **Support for conda version patterns** (e.g., "3.13" matches "3.13.*" in conda format) - **Support for conda 3-part version matching** and underscore handling Dependency Resolution Improvements ================================== Provider Resolution - **Fixed provider constraint checking** - now checks what providers provide, not provider package version - **Filter provider packages by constraints** before version selection - **Try all providers when constraints fail** - fixed to always check mmio providers - **Fixed provider resolution for version-constrained capabilities** (e.g., "php-composer(doctrine/cache) >= 1.6") - **Split Pacman format provides fields** by whitespace for proper SONAME matching - **Split Alpine pkgconfig provides** by whitespace for multiple provides in single string - **Centralized provides parsing** with format-aware version stripping Version Constraint Checking - **Fixed OR condition handling** in version constraint checking - detects mutually exclusive constraints - **Improved OR group detection** for constraints with different operands - **Fixed VersionGreaterThan constraint with ~~ suffix** for versions with revisions - **Implemented VersionCompatible operator** constraint checking - **Refactored constraint checking logic** to shared functions in version.rs - **Ignore RPM constraints with unexpanded macros** (pattern %{xxx}) Conditional Dependencies - **Fixed conditional dependency resolution** - only checks installed/selected packages, not repository - **Proper handling of skipped conditional dependencies** - marks OR groups as satisfied when all are conditional and none satisfied Direct Package Lookup - **Fixed direct package lookup with version constraints** - filters packages before selecting highest version - **Support for package specs with version constraints** in install command Package Format Support ====================== Conda Support - **Added conda repository support** with noarch repos - **Fixed noarch handling** - set arch to "all" at creation time - **Custom deserializer for noarch field** (handles string and boolean values) - **Improved error logging** throughout conda processing pipeline Arch Linux/Pacman - **Added more repositories** for Arch Linux - **Added zstd decoder support** for .tar.zst files - **Skip usr/lib64 symlink** during package installation to prevent overwriting environment symlink - **Fixed library alias parsing** in requires and provides Alpine/APK - **Parse conflicts from requires field** - conflicts with '!' prefix now properly separated - **Fixed pkgconfig dependency resolution** with version constraints for multiple provides Debian/Ubuntu - **Fixed Debian provide version parsing** with parentheses format (e.g., "libgcc1 (= 1:14.2.0-19)") - **Handle ~~ suffix in version constraints** for Debian Rust packages - **Support for python3:any** capability resolution RPM/OpenSUSE/Fedora/OpenEuler - **Fixed RPM provides parsing** with spaces (e.g., ">= 1.0" format) - **Support for RPM files provides** and font provides - **Support for ksym(default:__SCT__cond_resched) provides** - **Fixed openeuler provides parsing** Error Handling and Logging ========================== Logging Improvements - **Improved error logging** in conda processing with full error chains - **Added debug logging** for provider lookup and constraint checking Bug Fixes ========= Dependency Resolution - **Fixed panic when package obsoleted during dependency resolution** - check if package exists before updating dependencies - **Improved version selection** - prefer packages that don't obsolete existing packages - **Fixed self-obsoletes handling** - flip to VersionNotEqual for self-obsoletes - **De-duplicate provides** to avoid redundant entries - **Remove duplicate pkgkeys** from same package in dependency collection Package Indexing - **Fixed last package not saved to index** in RPM repository processing - call on_new_paragraph() in finalize() - **Filter out trivial entries** from provide2pkgnames.yaml (where key == value) - **Fixed cache path collision** for URLs with same filename - include host and path in cache path Package Installation - **Fixed checksum file path resolution** for downloaded files - use resolve_mirror_path() consistently - **Fixed "Text file busy" errors** during package installation Miscellaneous - **Support for pkgkeys like __glibc__2.41__x86_64** - treat leading __ as part of pkgname - **Fixed epkg info command** - support pkgkey format (pkgname__version__arch) for exact package lookup - **Fixed test framework** - ensure constraints test runs even if simple test fails - **Added path-based filtering** to solver tests Documentation and Tests ======================= - **Added comprehensive test cases** for all major features - **Port initial tests** from apk-tools/test/solver/ - **Added test whitelist** for known working packages - **Improved test organization** with data-driven test framework Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 8 个月前 | |
Dependency resolution major rework epkg install --assume-no now uses 'world + resolvo' to work out install plan, the new code is well tested for major distros. Bump version to 0.2.1 Major Features ============== Constraint-Aware Dependency Resolution - **Introduced Alpine 'world' concenpt for top level package specs with version constraints** (e.g., pkgname=version, pkgname>=version, pkgname~=version) - **Implemented resolvo-based dependency solver** that works across all package formats Local Package and URL Support - **Support for local package files** (.rpm, .deb, .apk, .epkg, .conda, .pkg.tar.xz, .pkg.tar.zst, .tar.bz2) - **Support for remote package URLs** (http://, https://, file://) with automatic downloading Testing Infrastructure - **Data-driven test framework** for dependency solver using YAML/JSON test definitions (cargo test solver_tests::tests -- --nocapture) - **Batch package dependency testing script** (test_depends.py) with random package selection and configurable --os/--batch - **Added --assume-no option** for automatic negative prompts in testing scenarios Dependency Parsing Improvements =============================== Operator Parsing Fixes - **Fixed operator parsing order** in parse_operator_from_start() - now checks multi-character operators (>=, <=, ==) before single-character ones (>, <, =) - **Fixed ">>" and "==" parsing** - now correctly parsed instead of being split into ">" and "=" RPM "with" Operator Support - **Added support for RPM "with" operator** to combine multiple constraints on the same package - **Support for parenthesized and unparenthesized "with" clauses** - **Support for OR expressions in "with" clause left side** with De Morgan's law expansion - **Refactored parse_rpm_requires()** into smaller, focused helper functions Conditional Dependencies - **Fixed "if" operator parsing** in conditional dependencies with proper parentheses handling - **Fixed "and" operator handling** in conditional dependencies by normalizing to commas - **Improved conditional dependency resolution** - only checks installed/selected packages, not repository availability Architecture and Capability Parsing - **Support for RPM architecture specifications** in capability names (e.g., wine-cms(x86-32), wine-cms(x86-64)) - **Arch Linux library alias parsing** - distinguishes between version constraints and library aliases (e.g., libfoo=1.0.0 vs libstk-5.0.0.so=libstk-5.0.0.so-64) - **Support for capability tags** (pkgconfig, crate, python3.13dist, etc.) with proper parsing Version Comparison Fixes ======================== Debian Version Comparison - **Fixed Debian revision comparison** for strings with letters (e.g., "0ubuntu8.6" vs "0") - **Fixed parsing of versions with dashes in revision** (e.g., "1.48.0-2-3") - **Fixed alphabetic revision parsing** (e.g., "2.14.14-z" correctly parsed with revision "z") - **Fixed version comparison when string ends with ~** (tilde has lowest precedence) - **Fixed pre-release detection** - only recognized markers (rc, beta, alpha, pre, dev, snapshot) treated as pre-releases - **Strip local version suffixes** for VersionEqual constraints (everything after last '+') - **Strip trailing ~ suffix** for >= and > constraints in Debian format - **Improved trailing ~ handling** for versions with revisions RPM Version Comparison - **Fixed RPM version comparison** for numeric vs alphabetic segments (numbers > letters in RPM) - **Fixed semantic version comparison** - now compares segment-by-segment instead of concatenating - **Fixed revision comparison** - versions with release > versions without release (e.g., "12.0.0-bp160.1.2" > "12.0.0") - **Fixed version matching** for packages with letter-prefixed build numbers (e.g., "9.8.3-bp160.1.34") - **Compare upstream-only when operand has no release/revision** for RPM/Pacman/Apk formats - **Fixed explicit revision "0" handling** - distinguishes between no revision and explicit "0" APK/Alpine Version Comparison - **Fixed APK explicit revision comparison** (e.g., "6.0-r0" < "6.0") - **Fixed VersionCompatible operator** for APK format to ignore revision suffixes - **Fixed dot-separated pre-release version comparison** (e.g., "48.4" > "48.alpha") Wildcard and Pattern Matching - **Implemented VersionEqualStar and VersionNotEqualStar** wildcard matching (e.g., "6.9.*") - **Support for conda version patterns** (e.g., "3.13" matches "3.13.*" in conda format) - **Support for conda 3-part version matching** and underscore handling Dependency Resolution Improvements ================================== Provider Resolution - **Fixed provider constraint checking** - now checks what providers provide, not provider package version - **Filter provider packages by constraints** before version selection - **Try all providers when constraints fail** - fixed to always check mmio providers - **Fixed provider resolution for version-constrained capabilities** (e.g., "php-composer(doctrine/cache) >= 1.6") - **Split Pacman format provides fields** by whitespace for proper SONAME matching - **Split Alpine pkgconfig provides** by whitespace for multiple provides in single string - **Centralized provides parsing** with format-aware version stripping Version Constraint Checking - **Fixed OR condition handling** in version constraint checking - detects mutually exclusive constraints - **Improved OR group detection** for constraints with different operands - **Fixed VersionGreaterThan constraint with ~~ suffix** for versions with revisions - **Implemented VersionCompatible operator** constraint checking - **Refactored constraint checking logic** to shared functions in version.rs - **Ignore RPM constraints with unexpanded macros** (pattern %{xxx}) Conditional Dependencies - **Fixed conditional dependency resolution** - only checks installed/selected packages, not repository - **Proper handling of skipped conditional dependencies** - marks OR groups as satisfied when all are conditional and none satisfied Direct Package Lookup - **Fixed direct package lookup with version constraints** - filters packages before selecting highest version - **Support for package specs with version constraints** in install command Package Format Support ====================== Conda Support - **Added conda repository support** with noarch repos - **Fixed noarch handling** - set arch to "all" at creation time - **Custom deserializer for noarch field** (handles string and boolean values) - **Improved error logging** throughout conda processing pipeline Arch Linux/Pacman - **Added more repositories** for Arch Linux - **Added zstd decoder support** for .tar.zst files - **Skip usr/lib64 symlink** during package installation to prevent overwriting environment symlink - **Fixed library alias parsing** in requires and provides Alpine/APK - **Parse conflicts from requires field** - conflicts with '!' prefix now properly separated - **Fixed pkgconfig dependency resolution** with version constraints for multiple provides Debian/Ubuntu - **Fixed Debian provide version parsing** with parentheses format (e.g., "libgcc1 (= 1:14.2.0-19)") - **Handle ~~ suffix in version constraints** for Debian Rust packages - **Support for python3:any** capability resolution RPM/OpenSUSE/Fedora/OpenEuler - **Fixed RPM provides parsing** with spaces (e.g., ">= 1.0" format) - **Support for RPM files provides** and font provides - **Support for ksym(default:__SCT__cond_resched) provides** - **Fixed openeuler provides parsing** Error Handling and Logging ========================== Logging Improvements - **Improved error logging** in conda processing with full error chains - **Added debug logging** for provider lookup and constraint checking Bug Fixes ========= Dependency Resolution - **Fixed panic when package obsoleted during dependency resolution** - check if package exists before updating dependencies - **Improved version selection** - prefer packages that don't obsolete existing packages - **Fixed self-obsoletes handling** - flip to VersionNotEqual for self-obsoletes - **De-duplicate provides** to avoid redundant entries - **Remove duplicate pkgkeys** from same package in dependency collection Package Indexing - **Fixed last package not saved to index** in RPM repository processing - call on_new_paragraph() in finalize() - **Filter out trivial entries** from provide2pkgnames.yaml (where key == value) - **Fixed cache path collision** for URLs with same filename - include host and path in cache path Package Installation - **Fixed checksum file path resolution** for downloaded files - use resolve_mirror_path() consistently - **Fixed "Text file busy" errors** during package installation Miscellaneous - **Support for pkgkeys like __glibc__2.41__x86_64** - treat leading __ as part of pkgname - **Fixed epkg info command** - support pkgkey format (pkgname__version__arch) for exact package lookup - **Fixed test framework** - ensure constraints test runs even if simple test fails - **Added path-based filtering** to solver tests Documentation and Tests ======================= - **Added comprehensive test cases** for all major features - **Port initial tests** from apk-tools/test/solver/ - **Added test whitelist** for known working packages - **Improved test organization** with data-driven test framework Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 8 个月前 | |
Dependency resolution major rework epkg install --assume-no now uses 'world + resolvo' to work out install plan, the new code is well tested for major distros. Bump version to 0.2.1 Major Features ============== Constraint-Aware Dependency Resolution - **Introduced Alpine 'world' concenpt for top level package specs with version constraints** (e.g., pkgname=version, pkgname>=version, pkgname~=version) - **Implemented resolvo-based dependency solver** that works across all package formats Local Package and URL Support - **Support for local package files** (.rpm, .deb, .apk, .epkg, .conda, .pkg.tar.xz, .pkg.tar.zst, .tar.bz2) - **Support for remote package URLs** (http://, https://, file://) with automatic downloading Testing Infrastructure - **Data-driven test framework** for dependency solver using YAML/JSON test definitions (cargo test solver_tests::tests -- --nocapture) - **Batch package dependency testing script** (test_depends.py) with random package selection and configurable --os/--batch - **Added --assume-no option** for automatic negative prompts in testing scenarios Dependency Parsing Improvements =============================== Operator Parsing Fixes - **Fixed operator parsing order** in parse_operator_from_start() - now checks multi-character operators (>=, <=, ==) before single-character ones (>, <, =) - **Fixed ">>" and "==" parsing** - now correctly parsed instead of being split into ">" and "=" RPM "with" Operator Support - **Added support for RPM "with" operator** to combine multiple constraints on the same package - **Support for parenthesized and unparenthesized "with" clauses** - **Support for OR expressions in "with" clause left side** with De Morgan's law expansion - **Refactored parse_rpm_requires()** into smaller, focused helper functions Conditional Dependencies - **Fixed "if" operator parsing** in conditional dependencies with proper parentheses handling - **Fixed "and" operator handling** in conditional dependencies by normalizing to commas - **Improved conditional dependency resolution** - only checks installed/selected packages, not repository availability Architecture and Capability Parsing - **Support for RPM architecture specifications** in capability names (e.g., wine-cms(x86-32), wine-cms(x86-64)) - **Arch Linux library alias parsing** - distinguishes between version constraints and library aliases (e.g., libfoo=1.0.0 vs libstk-5.0.0.so=libstk-5.0.0.so-64) - **Support for capability tags** (pkgconfig, crate, python3.13dist, etc.) with proper parsing Version Comparison Fixes ======================== Debian Version Comparison - **Fixed Debian revision comparison** for strings with letters (e.g., "0ubuntu8.6" vs "0") - **Fixed parsing of versions with dashes in revision** (e.g., "1.48.0-2-3") - **Fixed alphabetic revision parsing** (e.g., "2.14.14-z" correctly parsed with revision "z") - **Fixed version comparison when string ends with ~** (tilde has lowest precedence) - **Fixed pre-release detection** - only recognized markers (rc, beta, alpha, pre, dev, snapshot) treated as pre-releases - **Strip local version suffixes** for VersionEqual constraints (everything after last '+') - **Strip trailing ~ suffix** for >= and > constraints in Debian format - **Improved trailing ~ handling** for versions with revisions RPM Version Comparison - **Fixed RPM version comparison** for numeric vs alphabetic segments (numbers > letters in RPM) - **Fixed semantic version comparison** - now compares segment-by-segment instead of concatenating - **Fixed revision comparison** - versions with release > versions without release (e.g., "12.0.0-bp160.1.2" > "12.0.0") - **Fixed version matching** for packages with letter-prefixed build numbers (e.g., "9.8.3-bp160.1.34") - **Compare upstream-only when operand has no release/revision** for RPM/Pacman/Apk formats - **Fixed explicit revision "0" handling** - distinguishes between no revision and explicit "0" APK/Alpine Version Comparison - **Fixed APK explicit revision comparison** (e.g., "6.0-r0" < "6.0") - **Fixed VersionCompatible operator** for APK format to ignore revision suffixes - **Fixed dot-separated pre-release version comparison** (e.g., "48.4" > "48.alpha") Wildcard and Pattern Matching - **Implemented VersionEqualStar and VersionNotEqualStar** wildcard matching (e.g., "6.9.*") - **Support for conda version patterns** (e.g., "3.13" matches "3.13.*" in conda format) - **Support for conda 3-part version matching** and underscore handling Dependency Resolution Improvements ================================== Provider Resolution - **Fixed provider constraint checking** - now checks what providers provide, not provider package version - **Filter provider packages by constraints** before version selection - **Try all providers when constraints fail** - fixed to always check mmio providers - **Fixed provider resolution for version-constrained capabilities** (e.g., "php-composer(doctrine/cache) >= 1.6") - **Split Pacman format provides fields** by whitespace for proper SONAME matching - **Split Alpine pkgconfig provides** by whitespace for multiple provides in single string - **Centralized provides parsing** with format-aware version stripping Version Constraint Checking - **Fixed OR condition handling** in version constraint checking - detects mutually exclusive constraints - **Improved OR group detection** for constraints with different operands - **Fixed VersionGreaterThan constraint with ~~ suffix** for versions with revisions - **Implemented VersionCompatible operator** constraint checking - **Refactored constraint checking logic** to shared functions in version.rs - **Ignore RPM constraints with unexpanded macros** (pattern %{xxx}) Conditional Dependencies - **Fixed conditional dependency resolution** - only checks installed/selected packages, not repository - **Proper handling of skipped conditional dependencies** - marks OR groups as satisfied when all are conditional and none satisfied Direct Package Lookup - **Fixed direct package lookup with version constraints** - filters packages before selecting highest version - **Support for package specs with version constraints** in install command Package Format Support ====================== Conda Support - **Added conda repository support** with noarch repos - **Fixed noarch handling** - set arch to "all" at creation time - **Custom deserializer for noarch field** (handles string and boolean values) - **Improved error logging** throughout conda processing pipeline Arch Linux/Pacman - **Added more repositories** for Arch Linux - **Added zstd decoder support** for .tar.zst files - **Skip usr/lib64 symlink** during package installation to prevent overwriting environment symlink - **Fixed library alias parsing** in requires and provides Alpine/APK - **Parse conflicts from requires field** - conflicts with '!' prefix now properly separated - **Fixed pkgconfig dependency resolution** with version constraints for multiple provides Debian/Ubuntu - **Fixed Debian provide version parsing** with parentheses format (e.g., "libgcc1 (= 1:14.2.0-19)") - **Handle ~~ suffix in version constraints** for Debian Rust packages - **Support for python3:any** capability resolution RPM/OpenSUSE/Fedora/OpenEuler - **Fixed RPM provides parsing** with spaces (e.g., ">= 1.0" format) - **Support for RPM files provides** and font provides - **Support for ksym(default:__SCT__cond_resched) provides** - **Fixed openeuler provides parsing** Error Handling and Logging ========================== Logging Improvements - **Improved error logging** in conda processing with full error chains - **Added debug logging** for provider lookup and constraint checking Bug Fixes ========= Dependency Resolution - **Fixed panic when package obsoleted during dependency resolution** - check if package exists before updating dependencies - **Improved version selection** - prefer packages that don't obsolete existing packages - **Fixed self-obsoletes handling** - flip to VersionNotEqual for self-obsoletes - **De-duplicate provides** to avoid redundant entries - **Remove duplicate pkgkeys** from same package in dependency collection Package Indexing - **Fixed last package not saved to index** in RPM repository processing - call on_new_paragraph() in finalize() - **Filter out trivial entries** from provide2pkgnames.yaml (where key == value) - **Fixed cache path collision** for URLs with same filename - include host and path in cache path Package Installation - **Fixed checksum file path resolution** for downloaded files - use resolve_mirror_path() consistently - **Fixed "Text file busy" errors** during package installation Miscellaneous - **Support for pkgkeys like __glibc__2.41__x86_64** - treat leading __ as part of pkgname - **Fixed epkg info command** - support pkgkey format (pkgname__version__arch) for exact package lookup - **Fixed test framework** - ensure constraints test runs even if simple test fails - **Added path-based filtering** to solver tests Documentation and Tests ======================= - **Added comprehensive test cases** for all major features - **Port initial tests** from apk-tools/test/solver/ - **Added test whitelist** for known working packages - **Improved test organization** with data-driven test framework Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 8 个月前 | |
Dependency resolution major rework epkg install --assume-no now uses 'world + resolvo' to work out install plan, the new code is well tested for major distros. Bump version to 0.2.1 Major Features ============== Constraint-Aware Dependency Resolution - **Introduced Alpine 'world' concenpt for top level package specs with version constraints** (e.g., pkgname=version, pkgname>=version, pkgname~=version) - **Implemented resolvo-based dependency solver** that works across all package formats Local Package and URL Support - **Support for local package files** (.rpm, .deb, .apk, .epkg, .conda, .pkg.tar.xz, .pkg.tar.zst, .tar.bz2) - **Support for remote package URLs** (http://, https://, file://) with automatic downloading Testing Infrastructure - **Data-driven test framework** for dependency solver using YAML/JSON test definitions (cargo test solver_tests::tests -- --nocapture) - **Batch package dependency testing script** (test_depends.py) with random package selection and configurable --os/--batch - **Added --assume-no option** for automatic negative prompts in testing scenarios Dependency Parsing Improvements =============================== Operator Parsing Fixes - **Fixed operator parsing order** in parse_operator_from_start() - now checks multi-character operators (>=, <=, ==) before single-character ones (>, <, =) - **Fixed ">>" and "==" parsing** - now correctly parsed instead of being split into ">" and "=" RPM "with" Operator Support - **Added support for RPM "with" operator** to combine multiple constraints on the same package - **Support for parenthesized and unparenthesized "with" clauses** - **Support for OR expressions in "with" clause left side** with De Morgan's law expansion - **Refactored parse_rpm_requires()** into smaller, focused helper functions Conditional Dependencies - **Fixed "if" operator parsing** in conditional dependencies with proper parentheses handling - **Fixed "and" operator handling** in conditional dependencies by normalizing to commas - **Improved conditional dependency resolution** - only checks installed/selected packages, not repository availability Architecture and Capability Parsing - **Support for RPM architecture specifications** in capability names (e.g., wine-cms(x86-32), wine-cms(x86-64)) - **Arch Linux library alias parsing** - distinguishes between version constraints and library aliases (e.g., libfoo=1.0.0 vs libstk-5.0.0.so=libstk-5.0.0.so-64) - **Support for capability tags** (pkgconfig, crate, python3.13dist, etc.) with proper parsing Version Comparison Fixes ======================== Debian Version Comparison - **Fixed Debian revision comparison** for strings with letters (e.g., "0ubuntu8.6" vs "0") - **Fixed parsing of versions with dashes in revision** (e.g., "1.48.0-2-3") - **Fixed alphabetic revision parsing** (e.g., "2.14.14-z" correctly parsed with revision "z") - **Fixed version comparison when string ends with ~** (tilde has lowest precedence) - **Fixed pre-release detection** - only recognized markers (rc, beta, alpha, pre, dev, snapshot) treated as pre-releases - **Strip local version suffixes** for VersionEqual constraints (everything after last '+') - **Strip trailing ~ suffix** for >= and > constraints in Debian format - **Improved trailing ~ handling** for versions with revisions RPM Version Comparison - **Fixed RPM version comparison** for numeric vs alphabetic segments (numbers > letters in RPM) - **Fixed semantic version comparison** - now compares segment-by-segment instead of concatenating - **Fixed revision comparison** - versions with release > versions without release (e.g., "12.0.0-bp160.1.2" > "12.0.0") - **Fixed version matching** for packages with letter-prefixed build numbers (e.g., "9.8.3-bp160.1.34") - **Compare upstream-only when operand has no release/revision** for RPM/Pacman/Apk formats - **Fixed explicit revision "0" handling** - distinguishes between no revision and explicit "0" APK/Alpine Version Comparison - **Fixed APK explicit revision comparison** (e.g., "6.0-r0" < "6.0") - **Fixed VersionCompatible operator** for APK format to ignore revision suffixes - **Fixed dot-separated pre-release version comparison** (e.g., "48.4" > "48.alpha") Wildcard and Pattern Matching - **Implemented VersionEqualStar and VersionNotEqualStar** wildcard matching (e.g., "6.9.*") - **Support for conda version patterns** (e.g., "3.13" matches "3.13.*" in conda format) - **Support for conda 3-part version matching** and underscore handling Dependency Resolution Improvements ================================== Provider Resolution - **Fixed provider constraint checking** - now checks what providers provide, not provider package version - **Filter provider packages by constraints** before version selection - **Try all providers when constraints fail** - fixed to always check mmio providers - **Fixed provider resolution for version-constrained capabilities** (e.g., "php-composer(doctrine/cache) >= 1.6") - **Split Pacman format provides fields** by whitespace for proper SONAME matching - **Split Alpine pkgconfig provides** by whitespace for multiple provides in single string - **Centralized provides parsing** with format-aware version stripping Version Constraint Checking - **Fixed OR condition handling** in version constraint checking - detects mutually exclusive constraints - **Improved OR group detection** for constraints with different operands - **Fixed VersionGreaterThan constraint with ~~ suffix** for versions with revisions - **Implemented VersionCompatible operator** constraint checking - **Refactored constraint checking logic** to shared functions in version.rs - **Ignore RPM constraints with unexpanded macros** (pattern %{xxx}) Conditional Dependencies - **Fixed conditional dependency resolution** - only checks installed/selected packages, not repository - **Proper handling of skipped conditional dependencies** - marks OR groups as satisfied when all are conditional and none satisfied Direct Package Lookup - **Fixed direct package lookup with version constraints** - filters packages before selecting highest version - **Support for package specs with version constraints** in install command Package Format Support ====================== Conda Support - **Added conda repository support** with noarch repos - **Fixed noarch handling** - set arch to "all" at creation time - **Custom deserializer for noarch field** (handles string and boolean values) - **Improved error logging** throughout conda processing pipeline Arch Linux/Pacman - **Added more repositories** for Arch Linux - **Added zstd decoder support** for .tar.zst files - **Skip usr/lib64 symlink** during package installation to prevent overwriting environment symlink - **Fixed library alias parsing** in requires and provides Alpine/APK - **Parse conflicts from requires field** - conflicts with '!' prefix now properly separated - **Fixed pkgconfig dependency resolution** with version constraints for multiple provides Debian/Ubuntu - **Fixed Debian provide version parsing** with parentheses format (e.g., "libgcc1 (= 1:14.2.0-19)") - **Handle ~~ suffix in version constraints** for Debian Rust packages - **Support for python3:any** capability resolution RPM/OpenSUSE/Fedora/OpenEuler - **Fixed RPM provides parsing** with spaces (e.g., ">= 1.0" format) - **Support for RPM files provides** and font provides - **Support for ksym(default:__SCT__cond_resched) provides** - **Fixed openeuler provides parsing** Error Handling and Logging ========================== Logging Improvements - **Improved error logging** in conda processing with full error chains - **Added debug logging** for provider lookup and constraint checking Bug Fixes ========= Dependency Resolution - **Fixed panic when package obsoleted during dependency resolution** - check if package exists before updating dependencies - **Improved version selection** - prefer packages that don't obsolete existing packages - **Fixed self-obsoletes handling** - flip to VersionNotEqual for self-obsoletes - **De-duplicate provides** to avoid redundant entries - **Remove duplicate pkgkeys** from same package in dependency collection Package Indexing - **Fixed last package not saved to index** in RPM repository processing - call on_new_paragraph() in finalize() - **Filter out trivial entries** from provide2pkgnames.yaml (where key == value) - **Fixed cache path collision** for URLs with same filename - include host and path in cache path Package Installation - **Fixed checksum file path resolution** for downloaded files - use resolve_mirror_path() consistently - **Fixed "Text file busy" errors** during package installation Miscellaneous - **Support for pkgkeys like __glibc__2.41__x86_64** - treat leading __ as part of pkgname - **Fixed epkg info command** - support pkgkey format (pkgname__version__arch) for exact package lookup - **Fixed test framework** - ensure constraints test runs even if simple test fails - **Added path-based filtering** to solver tests Documentation and Tests ======================= - **Added comprehensive test cases** for all major features - **Port initial tests** from apk-tools/test/solver/ - **Added test whitelist** for known working packages - **Improved test organization** with data-driven test framework Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 8 个月前 | |
Dependency resolution major rework epkg install --assume-no now uses 'world + resolvo' to work out install plan, the new code is well tested for major distros. Bump version to 0.2.1 Major Features ============== Constraint-Aware Dependency Resolution - **Introduced Alpine 'world' concenpt for top level package specs with version constraints** (e.g., pkgname=version, pkgname>=version, pkgname~=version) - **Implemented resolvo-based dependency solver** that works across all package formats Local Package and URL Support - **Support for local package files** (.rpm, .deb, .apk, .epkg, .conda, .pkg.tar.xz, .pkg.tar.zst, .tar.bz2) - **Support for remote package URLs** (http://, https://, file://) with automatic downloading Testing Infrastructure - **Data-driven test framework** for dependency solver using YAML/JSON test definitions (cargo test solver_tests::tests -- --nocapture) - **Batch package dependency testing script** (test_depends.py) with random package selection and configurable --os/--batch - **Added --assume-no option** for automatic negative prompts in testing scenarios Dependency Parsing Improvements =============================== Operator Parsing Fixes - **Fixed operator parsing order** in parse_operator_from_start() - now checks multi-character operators (>=, <=, ==) before single-character ones (>, <, =) - **Fixed ">>" and "==" parsing** - now correctly parsed instead of being split into ">" and "=" RPM "with" Operator Support - **Added support for RPM "with" operator** to combine multiple constraints on the same package - **Support for parenthesized and unparenthesized "with" clauses** - **Support for OR expressions in "with" clause left side** with De Morgan's law expansion - **Refactored parse_rpm_requires()** into smaller, focused helper functions Conditional Dependencies - **Fixed "if" operator parsing** in conditional dependencies with proper parentheses handling - **Fixed "and" operator handling** in conditional dependencies by normalizing to commas - **Improved conditional dependency resolution** - only checks installed/selected packages, not repository availability Architecture and Capability Parsing - **Support for RPM architecture specifications** in capability names (e.g., wine-cms(x86-32), wine-cms(x86-64)) - **Arch Linux library alias parsing** - distinguishes between version constraints and library aliases (e.g., libfoo=1.0.0 vs libstk-5.0.0.so=libstk-5.0.0.so-64) - **Support for capability tags** (pkgconfig, crate, python3.13dist, etc.) with proper parsing Version Comparison Fixes ======================== Debian Version Comparison - **Fixed Debian revision comparison** for strings with letters (e.g., "0ubuntu8.6" vs "0") - **Fixed parsing of versions with dashes in revision** (e.g., "1.48.0-2-3") - **Fixed alphabetic revision parsing** (e.g., "2.14.14-z" correctly parsed with revision "z") - **Fixed version comparison when string ends with ~** (tilde has lowest precedence) - **Fixed pre-release detection** - only recognized markers (rc, beta, alpha, pre, dev, snapshot) treated as pre-releases - **Strip local version suffixes** for VersionEqual constraints (everything after last '+') - **Strip trailing ~ suffix** for >= and > constraints in Debian format - **Improved trailing ~ handling** for versions with revisions RPM Version Comparison - **Fixed RPM version comparison** for numeric vs alphabetic segments (numbers > letters in RPM) - **Fixed semantic version comparison** - now compares segment-by-segment instead of concatenating - **Fixed revision comparison** - versions with release > versions without release (e.g., "12.0.0-bp160.1.2" > "12.0.0") - **Fixed version matching** for packages with letter-prefixed build numbers (e.g., "9.8.3-bp160.1.34") - **Compare upstream-only when operand has no release/revision** for RPM/Pacman/Apk formats - **Fixed explicit revision "0" handling** - distinguishes between no revision and explicit "0" APK/Alpine Version Comparison - **Fixed APK explicit revision comparison** (e.g., "6.0-r0" < "6.0") - **Fixed VersionCompatible operator** for APK format to ignore revision suffixes - **Fixed dot-separated pre-release version comparison** (e.g., "48.4" > "48.alpha") Wildcard and Pattern Matching - **Implemented VersionEqualStar and VersionNotEqualStar** wildcard matching (e.g., "6.9.*") - **Support for conda version patterns** (e.g., "3.13" matches "3.13.*" in conda format) - **Support for conda 3-part version matching** and underscore handling Dependency Resolution Improvements ================================== Provider Resolution - **Fixed provider constraint checking** - now checks what providers provide, not provider package version - **Filter provider packages by constraints** before version selection - **Try all providers when constraints fail** - fixed to always check mmio providers - **Fixed provider resolution for version-constrained capabilities** (e.g., "php-composer(doctrine/cache) >= 1.6") - **Split Pacman format provides fields** by whitespace for proper SONAME matching - **Split Alpine pkgconfig provides** by whitespace for multiple provides in single string - **Centralized provides parsing** with format-aware version stripping Version Constraint Checking - **Fixed OR condition handling** in version constraint checking - detects mutually exclusive constraints - **Improved OR group detection** for constraints with different operands - **Fixed VersionGreaterThan constraint with ~~ suffix** for versions with revisions - **Implemented VersionCompatible operator** constraint checking - **Refactored constraint checking logic** to shared functions in version.rs - **Ignore RPM constraints with unexpanded macros** (pattern %{xxx}) Conditional Dependencies - **Fixed conditional dependency resolution** - only checks installed/selected packages, not repository - **Proper handling of skipped conditional dependencies** - marks OR groups as satisfied when all are conditional and none satisfied Direct Package Lookup - **Fixed direct package lookup with version constraints** - filters packages before selecting highest version - **Support for package specs with version constraints** in install command Package Format Support ====================== Conda Support - **Added conda repository support** with noarch repos - **Fixed noarch handling** - set arch to "all" at creation time - **Custom deserializer for noarch field** (handles string and boolean values) - **Improved error logging** throughout conda processing pipeline Arch Linux/Pacman - **Added more repositories** for Arch Linux - **Added zstd decoder support** for .tar.zst files - **Skip usr/lib64 symlink** during package installation to prevent overwriting environment symlink - **Fixed library alias parsing** in requires and provides Alpine/APK - **Parse conflicts from requires field** - conflicts with '!' prefix now properly separated - **Fixed pkgconfig dependency resolution** with version constraints for multiple provides Debian/Ubuntu - **Fixed Debian provide version parsing** with parentheses format (e.g., "libgcc1 (= 1:14.2.0-19)") - **Handle ~~ suffix in version constraints** for Debian Rust packages - **Support for python3:any** capability resolution RPM/OpenSUSE/Fedora/OpenEuler - **Fixed RPM provides parsing** with spaces (e.g., ">= 1.0" format) - **Support for RPM files provides** and font provides - **Support for ksym(default:__SCT__cond_resched) provides** - **Fixed openeuler provides parsing** Error Handling and Logging ========================== Logging Improvements - **Improved error logging** in conda processing with full error chains - **Added debug logging** for provider lookup and constraint checking Bug Fixes ========= Dependency Resolution - **Fixed panic when package obsoleted during dependency resolution** - check if package exists before updating dependencies - **Improved version selection** - prefer packages that don't obsolete existing packages - **Fixed self-obsoletes handling** - flip to VersionNotEqual for self-obsoletes - **De-duplicate provides** to avoid redundant entries - **Remove duplicate pkgkeys** from same package in dependency collection Package Indexing - **Fixed last package not saved to index** in RPM repository processing - call on_new_paragraph() in finalize() - **Filter out trivial entries** from provide2pkgnames.yaml (where key == value) - **Fixed cache path collision** for URLs with same filename - include host and path in cache path Package Installation - **Fixed checksum file path resolution** for downloaded files - use resolve_mirror_path() consistently - **Fixed "Text file busy" errors** during package installation Miscellaneous - **Support for pkgkeys like __glibc__2.41__x86_64** - treat leading __ as part of pkgname - **Fixed epkg info command** - support pkgkey format (pkgname__version__arch) for exact package lookup - **Fixed test framework** - ensure constraints test runs even if simple test fails - **Added path-based filtering** to solver tests Documentation and Tests ======================= - **Added comprehensive test cases** for all major features - **Port initial tests** from apk-tools/test/solver/ - **Added test whitelist** for known working packages - **Improved test organization** with data-driven test framework Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 8 个月前 | |
Dependency resolution major rework epkg install --assume-no now uses 'world + resolvo' to work out install plan, the new code is well tested for major distros. Bump version to 0.2.1 Major Features ============== Constraint-Aware Dependency Resolution - **Introduced Alpine 'world' concenpt for top level package specs with version constraints** (e.g., pkgname=version, pkgname>=version, pkgname~=version) - **Implemented resolvo-based dependency solver** that works across all package formats Local Package and URL Support - **Support for local package files** (.rpm, .deb, .apk, .epkg, .conda, .pkg.tar.xz, .pkg.tar.zst, .tar.bz2) - **Support for remote package URLs** (http://, https://, file://) with automatic downloading Testing Infrastructure - **Data-driven test framework** for dependency solver using YAML/JSON test definitions (cargo test solver_tests::tests -- --nocapture) - **Batch package dependency testing script** (test_depends.py) with random package selection and configurable --os/--batch - **Added --assume-no option** for automatic negative prompts in testing scenarios Dependency Parsing Improvements =============================== Operator Parsing Fixes - **Fixed operator parsing order** in parse_operator_from_start() - now checks multi-character operators (>=, <=, ==) before single-character ones (>, <, =) - **Fixed ">>" and "==" parsing** - now correctly parsed instead of being split into ">" and "=" RPM "with" Operator Support - **Added support for RPM "with" operator** to combine multiple constraints on the same package - **Support for parenthesized and unparenthesized "with" clauses** - **Support for OR expressions in "with" clause left side** with De Morgan's law expansion - **Refactored parse_rpm_requires()** into smaller, focused helper functions Conditional Dependencies - **Fixed "if" operator parsing** in conditional dependencies with proper parentheses handling - **Fixed "and" operator handling** in conditional dependencies by normalizing to commas - **Improved conditional dependency resolution** - only checks installed/selected packages, not repository availability Architecture and Capability Parsing - **Support for RPM architecture specifications** in capability names (e.g., wine-cms(x86-32), wine-cms(x86-64)) - **Arch Linux library alias parsing** - distinguishes between version constraints and library aliases (e.g., libfoo=1.0.0 vs libstk-5.0.0.so=libstk-5.0.0.so-64) - **Support for capability tags** (pkgconfig, crate, python3.13dist, etc.) with proper parsing Version Comparison Fixes ======================== Debian Version Comparison - **Fixed Debian revision comparison** for strings with letters (e.g., "0ubuntu8.6" vs "0") - **Fixed parsing of versions with dashes in revision** (e.g., "1.48.0-2-3") - **Fixed alphabetic revision parsing** (e.g., "2.14.14-z" correctly parsed with revision "z") - **Fixed version comparison when string ends with ~** (tilde has lowest precedence) - **Fixed pre-release detection** - only recognized markers (rc, beta, alpha, pre, dev, snapshot) treated as pre-releases - **Strip local version suffixes** for VersionEqual constraints (everything after last '+') - **Strip trailing ~ suffix** for >= and > constraints in Debian format - **Improved trailing ~ handling** for versions with revisions RPM Version Comparison - **Fixed RPM version comparison** for numeric vs alphabetic segments (numbers > letters in RPM) - **Fixed semantic version comparison** - now compares segment-by-segment instead of concatenating - **Fixed revision comparison** - versions with release > versions without release (e.g., "12.0.0-bp160.1.2" > "12.0.0") - **Fixed version matching** for packages with letter-prefixed build numbers (e.g., "9.8.3-bp160.1.34") - **Compare upstream-only when operand has no release/revision** for RPM/Pacman/Apk formats - **Fixed explicit revision "0" handling** - distinguishes between no revision and explicit "0" APK/Alpine Version Comparison - **Fixed APK explicit revision comparison** (e.g., "6.0-r0" < "6.0") - **Fixed VersionCompatible operator** for APK format to ignore revision suffixes - **Fixed dot-separated pre-release version comparison** (e.g., "48.4" > "48.alpha") Wildcard and Pattern Matching - **Implemented VersionEqualStar and VersionNotEqualStar** wildcard matching (e.g., "6.9.*") - **Support for conda version patterns** (e.g., "3.13" matches "3.13.*" in conda format) - **Support for conda 3-part version matching** and underscore handling Dependency Resolution Improvements ================================== Provider Resolution - **Fixed provider constraint checking** - now checks what providers provide, not provider package version - **Filter provider packages by constraints** before version selection - **Try all providers when constraints fail** - fixed to always check mmio providers - **Fixed provider resolution for version-constrained capabilities** (e.g., "php-composer(doctrine/cache) >= 1.6") - **Split Pacman format provides fields** by whitespace for proper SONAME matching - **Split Alpine pkgconfig provides** by whitespace for multiple provides in single string - **Centralized provides parsing** with format-aware version stripping Version Constraint Checking - **Fixed OR condition handling** in version constraint checking - detects mutually exclusive constraints - **Improved OR group detection** for constraints with different operands - **Fixed VersionGreaterThan constraint with ~~ suffix** for versions with revisions - **Implemented VersionCompatible operator** constraint checking - **Refactored constraint checking logic** to shared functions in version.rs - **Ignore RPM constraints with unexpanded macros** (pattern %{xxx}) Conditional Dependencies - **Fixed conditional dependency resolution** - only checks installed/selected packages, not repository - **Proper handling of skipped conditional dependencies** - marks OR groups as satisfied when all are conditional and none satisfied Direct Package Lookup - **Fixed direct package lookup with version constraints** - filters packages before selecting highest version - **Support for package specs with version constraints** in install command Package Format Support ====================== Conda Support - **Added conda repository support** with noarch repos - **Fixed noarch handling** - set arch to "all" at creation time - **Custom deserializer for noarch field** (handles string and boolean values) - **Improved error logging** throughout conda processing pipeline Arch Linux/Pacman - **Added more repositories** for Arch Linux - **Added zstd decoder support** for .tar.zst files - **Skip usr/lib64 symlink** during package installation to prevent overwriting environment symlink - **Fixed library alias parsing** in requires and provides Alpine/APK - **Parse conflicts from requires field** - conflicts with '!' prefix now properly separated - **Fixed pkgconfig dependency resolution** with version constraints for multiple provides Debian/Ubuntu - **Fixed Debian provide version parsing** with parentheses format (e.g., "libgcc1 (= 1:14.2.0-19)") - **Handle ~~ suffix in version constraints** for Debian Rust packages - **Support for python3:any** capability resolution RPM/OpenSUSE/Fedora/OpenEuler - **Fixed RPM provides parsing** with spaces (e.g., ">= 1.0" format) - **Support for RPM files provides** and font provides - **Support for ksym(default:__SCT__cond_resched) provides** - **Fixed openeuler provides parsing** Error Handling and Logging ========================== Logging Improvements - **Improved error logging** in conda processing with full error chains - **Added debug logging** for provider lookup and constraint checking Bug Fixes ========= Dependency Resolution - **Fixed panic when package obsoleted during dependency resolution** - check if package exists before updating dependencies - **Improved version selection** - prefer packages that don't obsolete existing packages - **Fixed self-obsoletes handling** - flip to VersionNotEqual for self-obsoletes - **De-duplicate provides** to avoid redundant entries - **Remove duplicate pkgkeys** from same package in dependency collection Package Indexing - **Fixed last package not saved to index** in RPM repository processing - call on_new_paragraph() in finalize() - **Filter out trivial entries** from provide2pkgnames.yaml (where key == value) - **Fixed cache path collision** for URLs with same filename - include host and path in cache path Package Installation - **Fixed checksum file path resolution** for downloaded files - use resolve_mirror_path() consistently - **Fixed "Text file busy" errors** during package installation Miscellaneous - **Support for pkgkeys like __glibc__2.41__x86_64** - treat leading __ as part of pkgname - **Fixed epkg info command** - support pkgkey format (pkgname__version__arch) for exact package lookup - **Fixed test framework** - ensure constraints test runs even if simple test fails - **Added path-based filtering** to solver tests Documentation and Tests ======================= - **Added comprehensive test cases** for all major features - **Port initial tests** from apk-tools/test/solver/ - **Added test whitelist** for known working packages - **Improved test organization** with data-driven test framework Signed-off-by: Wu Fengguang <wfg@mail.ustc.edu.cn> | 8 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 8 个月前 | ||
| 8 个月前 | ||
| 8 个月前 | ||
| 8 个月前 | ||
| 8 个月前 | ||
| 8 个月前 | ||
| 8 个月前 | ||
| 8 个月前 | ||
| 8 个月前 | ||
| 8 个月前 | ||
| 8 个月前 | ||
| 8 个月前 |