Running pactest today showed that sync999 test case no longer works. Eventually, pactest return on investment does not seem null anymore :)
It seems the flaw appeared with lib/libalpm/conflict.c:1.15. The same test with conflict.c:1.14 is ok.
Here's the log from pactest:
flow2: PM_OPT_DBPATH set to 'var/lib/pacman' flow2: PM_OPT_CACHEDIR set to 'var/cache/pacman/pkg' debug: opening database 'local' debug: opening database 'sync' :: Starting local database upgrade... flow1: checking for package replacements debug: loading package cache (infolevel=0x3) for repository 'sync' flow1: checking for package upgrades debug: loading package cache (infolevel=0x3) for repository 'local' debug: CACHE: fetching 'sync/pkg1' flow2: pkg1-1.0-1 elected for upgrade (1.0-1 => 1.0-2) debug: CACHE: fetching 'sync/pkg2' flow2: pkg2-1.0-1 elected for upgrade (1.0-1 => 1.0-2) resolving dependencies... flow1: resolving targets dependencies done. looking for inter-conflicts... flow1: looking for unresolvable dependencies debug: CACHE: fetching 'local/pkg1' debug: CACHE: fetching 'local/pkg2' flow1: looking for conflicts debug: targs vs db: found pkg2 as a conflict for pkg1 debug: targs vs targs: found pkg2 as a conflict for pkg1 debug: db vs targs: found pkg1 as a conflict for pkg2 flow2: package 'pkg1' is conflicting with 'pkg2' debug: CACHE: fetching 'local/pkg2' debug: package 'pkg1' provides its own conflict debug: resolving package 'pkg1' conflict flow2: electing 'pkg2' for removal flow2: removing 'pkg2' from target list flow2: package 'pkg2' is conflicting with 'pkg1' debug: CACHE: fetching 'local/pkg1'
When handling conflict pkg1, pkg2 is removed from targets. Then, the library tries to handle pkg2 conflict... but find_pkginsync() returns NULL...
I've committed a fix (sync.c:1.66) to skip conflict resolution in such a case. Thoughts?
The test suite is ok with it ;)