Rewrite depsolver to use a series of passes over all packages.
The big change is that we follow one step of the depedency chain for
each package to resolve in each iteration, and repeat until there are
no more possible moves. In contrast the old depsolver would try to
follow the dependency chain completely for one package at a time.
This new approach is simpler and faster, and at the same time more
roboust. Instead of knowing how one newly installed package may
affect other packages (obsoleting, pulling in new packages etc), the
new algorithm just looks at the total list of requires, provides,
obsoletes and conflicts after installing new packages.
3 <test name="testEmpty">
6 <package name="zsh" version="1-1" arch="i386"/>
17 <test name="testInstallSinglePackageNoRequires">
20 <package name="zsh" version="1-1" arch="i386"/>
27 <package name="zsh" version="1-1" arch="i386"/>
32 <test name="testInstallSinglePackageRequireNotProvided">
35 <package name="zsh" version="1-1" arch="i386">
36 <requires name="zip"/>
44 <requires name="zip"/>
49 <test name="testInstallSinglePackageRequireInstalled">
51 <package name="zip" version="1-1" arch="i386"/>
54 <package name="zsh" version="1-1" arch="i386">
55 <requires name="zip"/>
63 <package name="zip" version="1-1" arch="i386"/>
64 <package name="zsh" version="1-1" arch="i386"/>
69 <test name="testInstallSinglePackageRequireInstalledRequireNotProvided">
71 <package name="zip" version="1-2" arch="i386"/>
74 <package name="zsh" version="1-1" arch="i386">
75 <requires name="zip"/>
76 <!-- This may be a bug in the python test: it looks
77 like they meant to have zip require zap, not zsh.
78 But the install succeeds if you do that...
80 <requires name="zap"/>
88 <requires name="zap"/>
93 <test name="testInstallSinglePackageRequireInstalledRequireInstall">
95 <package name="zip" version="1-3" arch="i386">
96 <requires name="zap"/>
100 <package name="zsh" version="1-1" arch="i386">
101 <requires name="zip"/>
103 <package name="zap" version="1-2" arch="i386"/>
106 <install name="zsh"/>
107 <install name="zap"/>
111 <package name="zap" version="1-2" arch="i386"/>
112 <package name="zip" version="1-3" arch="i386"/>
113 <package name="zsh" version="1-1" arch="i386"/>
118 <test name="testInstallSinglePackageRequireVer1NotProvided">
120 <package name="zip" version="1.0-2" arch="i386"/>
123 <package name="zsh" version="1-1" arch="i386">
124 <requires name="zip" relation="EQ" version="1.3-2"/>
128 <install name="zsh"/>
132 <requires name="zip" relation="EQ" version="1.3-2"/>
137 <test name="testInstallSinglePackageRequireVer1Installed">
139 <package name="zip" version="1.3-2" arch="i386"/>
142 <package name="zsh" version="1-1" arch="i386">
143 <requires name="zip" relation="EQ" version="1.3-2"/>
147 <install name="zsh"/>
151 <package name="zip" version="1.3-2" arch="i386"/>
152 <package name="zsh" version="1-1" arch="i386"/>
157 <test name="testInstallSinglePackageRequireVer2NotProvided">
159 <package name="zip" version="1.3-2" arch="i386"/>
162 <package name="zsh" version="1-1" arch="i386">
163 <requires name="zip" relation="EQ" version="1.3-4"/>
167 <install name="zsh"/>
171 <requires name="zip" relation="EQ" version="1.3-4"/>
176 <test name="testInstallSinglePackageRequireVer2Installed">
178 <package name="zip" version="1.3-4" arch="i386"/>
181 <package name="zsh" version="1-1" arch="i386">
182 <requires name="zip" relation="EQ" version="1.3-4"/>
186 <install name="zsh"/>
190 <package name="zip" version="1.3-4" arch="i386"/>
191 <package name="zsh" version="1-1" arch="i386"/>
196 <test name="testInstallSinglePackageRequireVer3NotProvided">
198 <package name="zip" version="0:1.3-4" arch="i386"/>
201 <package name="zsh" version="1-1" arch="i386">
202 <requires name="zip" relation="GE" version="1:1.3-4"/>
206 <install name="zsh"/>
210 <requires name="zip" relation="GE" version="1:1.3-4"/>
215 <test name="testInstallSinglePackageRequireVer3Installed">
217 <package name="zip" version="2:1.3-4" arch="i386"/>
220 <package name="zsh" version="1-1" arch="i386">
221 <requires name="zip" relation="GE" version="2:1.3-4"/>
225 <install name="zsh"/>
229 <package name="zip" version="2:1.3-4" arch="i386"/>
230 <package name="zsh" version="1-1" arch="i386"/>
235 <test name="testInstallSinglePackageRequireVer4NotProvided">
237 <package name="zip" version="2:1.3-4" arch="i386"/>
240 <package name="zsh" version="1-1" arch="i386">
241 <requires name="zip" relation="LT" version="2:1.3-4"/>
245 <install name="zsh"/>
249 <requires name="zip" relation="LT" version="2:1.3-4"/>
254 <test name="testInstallSinglePackageRequireVer4_1Installed">
256 <package name="zip" version="2:1.0-4" arch="i386"/>
259 <package name="zsh" version="1-1" arch="i386">
260 <requires name="zip" relation="LT" version="2:1.3-4"/>
264 <install name="zsh"/>
268 <package name="zip" version="2:1.0-4" arch="i386"/>
269 <package name="zsh" version="1-1" arch="i386"/>
274 <test name="testInstallSinglePackageRequireVer4_2Installed">
276 <package name="zip" version="2:1.3-3" arch="i386"/>
279 <package name="zsh" version="1-1" arch="i386">
280 <requires name="zip" relation="LT" version="2:1.3-4"/>
284 <install name="zsh"/>
288 <package name="zip" version="2:1.3-3" arch="i386"/>
289 <package name="zsh" version="1-1" arch="i386"/>
294 <test name="testInstallSinglePackageRequireVer4_3Installed">
296 <package name="zip" version="1.3-4" arch="i386"/>
299 <package name="zsh" version="1-1" arch="i386">
300 <requires name="zip" relation="LT" version="2:1.3-4"/>
304 <install name="zsh"/>
308 <package name="zip" version="1.3-4" arch="i386"/>
309 <package name="zsh" version="1-1" arch="i386"/>
314 <test name="testInstallSinglePackageRequireVer4_4Installed">
316 <package name="zip" version="1:1.3-4" arch="i386"/>
319 <package name="zsh" version="1-1" arch="i386">
320 <requires name="zip" relation="LT" version="2:1.3-4"/>
324 <install name="zsh"/>
328 <package name="zip" version="1:1.3-4" arch="i386"/>
329 <package name="zsh" version="1-1" arch="i386"/>
334 <test name="testInstallSinglePackageRequireVer4_5Installed">
336 <package name="zip" version="2:0.3-4" arch="i386"/>
339 <package name="zsh" version="1-1" arch="i386">
340 <requires name="zip" relation="LT" version="2:1.3-4"/>
344 <install name="zsh"/>
348 <package name="zip" version="2:0.3-4" arch="i386"/>
349 <package name="zsh" version="1-1" arch="i386"/>
354 <test name="testInstallSinglePackageRequireXtraBadVer">
356 <package name="zip" version="2:1.3-4" arch="i386"/>
359 <package name="zsh" version="1-1" arch="i386">
360 <requires name="zip" relation="EQ" version="2:1.3-4"/>
361 <requires name="zap" relation="EQ" version="2:1.3-4"/>
363 <package name="zap" version="0:1.3-4" arch="i386"/>
366 <install name="zsh"/>
370 <requires name="zap" relation="EQ" version="2:1.3-4"/>
375 <test name="testInstallSinglePackageRequireXtra">
377 <package name="zip" version="2:1.3-4" arch="i386"/>
380 <package name="zsh" version="1-1" arch="i386">
381 <requires name="zip" relation="EQ" version="2:1.3-4"/>
382 <requires name="zap" relation="EQ" version="4:2.6-8"/>
384 <package name="zap" version="4:2.6-8" arch="i386"/>
387 <install name="zsh"/>
391 <package name="zap" version="4:2.6-8" arch="i386"/>
392 <package name="zip" version="2:1.3-4" arch="i386"/>
393 <package name="zsh" version="1-1" arch="i386"/>
398 <test name="testInstallSinglePackageRequireInstalledRequireXtra">
400 <package name="zip" version="2:1.3-4" arch="i386">
401 <requires name="zap" relation="EQ" version="4:2.6-8"/>
405 <package name="zsh" version="1-1" arch="i386">
406 <requires name="zip" relation="EQ" version="2:1.3-4"/>
408 <!-- This may be a bug in the python test; it doesn't
409 actually matter whether or not zap is available
411 <package name="zap" version="4:2.6-8" arch="i386"/>
414 <install name="zsh"/>
418 <package name="zip" version="2:1.3-4" arch="i386"/>
419 <package name="zsh" version="1-1" arch="i386"/>
424 <test name="testInstallSinglePackageRequireUpgradeRequireXtraErr">
426 <package name="zip" version="2:1.3-4" arch="i386">
427 <requires name="zap" relation="EQ" version="2:1.3-3"/>
431 <package name="zsh" version="1-1" arch="i386">
432 <requires name="zip" relation="EQ" version="4:2.6-8"/>
434 <package name="zip" version="4:2.6-8" arch="i386">
435 <requires name="zap" relation="EQ" version="2:1.3-4"/>
437 <package name="zap" version="2:1.3-4" arch="i386">
438 <requires name="zsh" relation="EQ" version="2:4-8"/>
442 <install name="zsh"/>
446 <requires name="zsh" relation="EQ" version="2:4-8"/>
451 <test name="testInstallSinglePackageRequireUpgradeRequireXtraOk">
453 <package name="zip" version="2:1.3-4" arch="i386">
454 <requires name="zap" relation="EQ" version="2:1.3-3"/>
458 <package name="zsh" version="1-1" arch="i386">
459 <requires name="zip" relation="EQ" version="4:2.6-8"/>
461 <package name="zip" version="4:2.6-8" arch="i386">
462 <requires name="zap" relation="EQ" version="2:1.3-4"/>
464 <package name="zap" version="2:1.3-4" arch="i386"/>
467 <install name="zsh"/>
471 <package name="zap" version="2:1.3-4" arch="i386"/>
472 <package name="zip" version="4:2.6-8" arch="i386"/>
473 <package name="zsh" version="1-1" arch="i386"/>
478 <test name="testInstallSinglePackageRequireMultiXtra">
481 <package name="zsh" version="1-1" arch="i386">
482 <requires name="zip" relation="EQ" version="4:2.6-8"/>
484 <package name="zip" version="4:2.6-8" arch="i386">
485 <requires name="zap" relation="EQ" version="2:1.3-4"/>
487 <package name="zap" version="2:1.3-4" arch="i386"/>
490 <install name="zsh"/>
494 <package name="zap" version="2:1.3-4" arch="i386"/>
495 <package name="zip" version="4:2.6-8" arch="i386"/>
496 <package name="zsh" version="1-1" arch="i386"/>
501 <test name="testInstallSinglePackageRequireInstalledMultiLib">
503 <package name="zip" version="1-3" arch="i386"/>
506 <package name="zsh" version="1-1" arch="x86_64">
507 <requires name="zip"/>
509 <package name="zip" version="1-3" arch="x86_64"/>
512 <install name="zsh"/>
516 <package name="zip" version="1-3" arch="i386"/>
517 <package name="zsh" version="1-1" arch="x86_64"/>
522 <test name="testInstallSinglePackageRequireXtra1MultiLib">
525 <package name="zsh" version="1-1" arch="x86_64">
526 <requires name="zip"/>
528 <package name="zip" version="1-3" arch="i386"/>
531 <install name="zsh"/>
535 <package name="zip" version="1-3" arch="i386"/>
536 <package name="zsh" version="1-1" arch="x86_64"/>
541 <test name="testInstallSinglePackageRequireXtra2_64MultiLib">
544 <package name="zsh" version="1-1" arch="x86_64">
545 <requires name="zip"/>
547 <package name="zip" version="1-3" arch="i386"/>
548 <package name="zip" version="1-3" arch="x86_64"/>
551 <install name="zsh"/>
555 <package name="zsh" version="1-1" arch="x86_64"/>
556 <package name="zip" version="1-3" arch="x86_64"/>
561 <test name="testInstallSinglePackageRequireXtra2_32MultiLib">
564 <package name="zsh" version="1-1" arch="i386">
565 <requires name="zip"/>
567 <package name="zip" version="1-3" arch="i386"/>
568 <package name="zip" version="1-3" arch="x86_64"/>
571 <install name="zsh"/>
575 <package name="zip" version="1-3" arch="i386"/>
576 <package name="zsh" version="1-1" arch="i386"/>
581 <test name="testUpdateSinglePackage">
583 <package name="zsh" version="1-1" arch="i386"/>
586 <package name="zsh" version="1-3" arch="i386"/>
589 <install name="zsh"/>
593 <package name="zsh" version="1-3" arch="i386"/>
598 <test name="testUpdateForDependency">
600 <package name="zip" version="0:1-1" arch="i386"/>
603 <package name="zsh" version="0:1-1" arch="i386">
604 <requires name="zip" relation="EQ" version="0:2-1"/>
606 <package name="zip" version="0:2-1" arch="i386"/>
609 <install name="zsh"/>
613 <package name="zip" version="0:2-1" arch="i386"/>
614 <package name="zsh" version="0:1-1" arch="i386"/>
619 <test name="testUpdateSplitPackage">
621 <package name="zip" version="0:1-1" arch="i386">
622 <provides name="libzip" relation="EQ" version="0:1-1"/>
626 <package name="zsh" version="0:1-1" arch="i386">
627 <requires name="libzip" relation="EQ" version="0:2-1"/>
629 <package name="zip" version="0:2-1" arch="i386">
630 <requires name="zip-libs" relation="EQ" version="0:2-1"/>
632 <package name="zip-libs" version="0:2-1" arch="i386">
633 <provides name="libzip" relation="EQ" version="0:2-1"/>
637 <install name="zsh"/>
641 <package name="zip" version="0:1-1" arch="i386"/>
642 <package name="zip-libs" version="0:2-1" arch="i386"/>
643 <package name="zsh" version="0:1-1" arch="i386"/>
648 <test name="testUpdateSinglePackageNewRequires">
650 <package name="zsh" version="1-1" arch="i386"/>
653 <package name="zsh" version="1-3" arch="i386">
654 <requires name="zip"/>
656 <package name="zip" version="1-3" arch="x86_64"/>
659 <install name="zsh"/>
663 <package name="zsh" version="1-3" arch="i386"/>
664 <package name="zip" version="1-3" arch="x86_64"/>
669 <test name="testUpdateSinglePackageOldRequires">
671 <package name="zsh" version="1-1" arch="i386">
672 <requires name="zip"/>
674 <package name="zip" version="1-3" arch="x86_64"/>
677 <package name="zsh" version="1-3" arch="i386">
678 <requires name="zip"/>
682 <install name="zsh"/>
686 <package name="zip" version="1-3" arch="x86_64"/>
687 <package name="zsh" version="1-3" arch="i386"/>
692 <test name="testUpdateSinglePackageOldRequiresGone">
694 <package name="zsh" version="1-1" arch="i386">
695 <requires name="zip"/>
697 <package name="zip" version="1-3" arch="x86_64"/>
700 <package name="zsh" version="1-3" arch="i386"/>
703 <install name="zsh"/>
707 <package name="zip" version="1-3" arch="x86_64"/>
708 <package name="zsh" version="1-3" arch="i386"/>
713 <test name="testUpdateSinglePackageObsoletesOldRequirement">
715 <package name="zsh" version="1-1" arch="i386">
716 <requires name="zip"/>
718 <package name="zip" version="1-1" arch="i386"/>
721 <package name="zsh" version="1-3" arch="i386">
722 <!-- depsolvetests.py actually adds the obsoletes
723 to the installed zsh rather than the new zsh,
724 but I'm assuming that's a bug -->
725 <obsoletes name="zip"/>
729 <install name="zsh"/>
733 <package name="zsh" version="1-3" arch="i386"/>
738 <test name="testUpdateForConflict">
740 <package name="zip" version="0:1-1" arch="i386"/>
743 <package name="zsh" version="0:1-1" arch="i386">
744 <conflicts name="zip" relation="LE" version="0:1-1"/>
746 <package name="zip" version="0:2-1" arch="i386"/>
749 <install name="zsh"/>
753 <package name="zip" version="0:2-1" arch="i386"/>
754 <package name="zsh" version="0:1-1" arch="i386"/>
759 <test name="testUpdateForConflict2">
761 <package name="zip" version="0:1-1" arch="i386">
762 <conflicts name="zsh" relation="LE" version="0:1-1"/>
766 <package name="zsh" version="0:1-1" arch="i386"/>
767 <package name="zip" version="0:2-1" arch="i386"/>
770 <install name="zsh"/>
774 <package name="zsh" version="0:1-1" arch="i386"/>
775 <package name="zip" version="0:2-1" arch="i386"/>
780 <test name="testUpdateForConflictProvide">
782 <package name="zip" version="0:1-1" arch="i386">
783 <provides name="zippy" relation="EQ" version="0:1-1"/>
787 <package name="zsh" version="0:1-1" arch="i386">
788 <conflicts name="zippy" relation="LE" version="0:1-1"/>
790 <package name="zip" version="0:2-1" arch="i386"/>
793 <install name="zsh"/>
797 <package name="zip" version="0:2-1" arch="i386"/>
798 <package name="zsh" version="0:1-1" arch="i386"/>
803 <test name="testUpdateForConflictProvide2">
805 <package name="zip" version="0:1-1" arch="i386">
806 <conflicts name="zippy" relation="GT" version="0:1-1"/>
807 <conflicts name="zippy" relation="LT" version="0:1-1"/>
811 <package name="zsh" version="0:1-1" arch="i386">
812 <provides name="zippy" relation="EQ" version="0:2-1"/>
814 <package name="zip" version="0:2-1" arch="i386">
815 <conflicts name="zippy" relation="GT" version="0:2-1"/>
816 <conflicts name="zippy" relation="LT" version="0:2-1"/>
820 <install name="zsh"/>
824 <package name="zip" version="0:2-1" arch="i386"/>
825 <package name="zsh" version="0:1-1" arch="i386"/>
830 <test name="testEraseSinglePackage">
832 <package name="zsh" version="0:1-1" arch="i386"/>
843 <test name="testEraseSinglePackageRequiredByOneInstalled">
845 <package name="zippy" version="0:1-1" arch="i386">
846 <requires name="zsh"/>
848 <package name="zsh" version="0:1-1" arch="i386"/>