On Apr 26, 2012, at 10:48 PM, Per Øyvind Karlsen wrote: >> >>> But set:versions looks quite useful, and far more effective at reducing the >>> number >>> of dependencies than attempting a "pin-hole" optimizations with boolean >>> expressions, discarding inequalities which are implied by other >>> dependencies, >>> as Per Oyvind has been attempting in Mandriva. >> >> Where can I find more information about this work? > http://svn.mandriva.com/viewvc/packages/cooker/rpm/current/ > > Notice that pretty much all of the work related on this has been done outside > of upstream, with much regard for it in the more experimental patches adding > new functionality like this, hence the code certainly would need to be cleaned > up, refactorized and sanitized before even being considered being pushed > anywhere else than
Well your overlapping dependencies removal checked in upstream is about to get ripped out for lack of generality and bugginess. Here's one failure case: ]$ Xrpm -ba probes-test.spec warning: R diskspace(/tmp) > 1 overlaps R diskspace(/tmp) >= 1Kb, removing R diskspace(/tmp) > 1 warning: R diskspace(/tmp) > 1 overlaps R diskspace(/tmp) >= 1Kb, removing R diskspace(/tmp) > 1 warning: R diskspace(/tmp) > 1 overlaps R diskspace(/tmp) >= 1Kb, removing R diskspace(/tmp) > 1 error: Failed build dependencies: gnupg(/X/probes-test/test1.asc) = 4E23E878D41A0A88EDFCFA5A6E744ACBA9C09E30 is needed by probes-test-1-0.src gnupg(/X/probes-test/test2.asc) = 7D121A8FC05DC18A4329E9EF67042EC961B7AE34 is needed by probes-test-1-0.src gnupg(/X/probes-test/test3.asc) = 7D121A8FC05DC18A4329E9EF67042EC961B7AE34 is needed by probes-test-1-0.src That's a probe, not a string, dependency. The EVR field cannot be simply compared because {K,M,G}b suffixes are permitted and your overlap has just removed a necessary and useful dependency. There are going to be many such failures with probe dependencies because the EVR string and flags are arguments to a probe function, not strings to be compared by rpmvercmp and its ilk. The overlap removal is also going to have issues with set:versions because the dependcies are sorted using strcmp(1), and there is no guarantee that you will find an overlap in adjacent items in the dependency set, or even find *with binary search) what you wish to find. There are even deeper issues with %_use_internal_dependency_generator 0, where the order of the dependencies is UNSPECIFIED and not even de facto "mostly works". A linear search will not scale either. Don't even bother hacking that in. 73 de Jeff______________________________________________________________________ RPM Package Manager http://rpm5.org Developer Communication List rpm-devel@rpm5.org