aboutsummaryrefslogtreecommitdiffstats
path: root/URPM/Resolve.pm
Commit message (Collapse)AuthorAgeFilesLines
* (resolve_requested__no_suggests_) prevent urpmi from looping forever when ↵Thierry Vignaud2012-11-161-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | some packages are broken alternatively, we could try detecting if diff_provides doesn't change for a couple loops or not going over already rejected packages (selecting/promoting/rejecting the same package forever) eg: gtk+3.0-3.6.1-3.mga3.x86_64 is on the mirrors but not lib64gtk+3_0-3.6.1-3.mga3.x86_64 we will then loop forever: set_rejected: gtk+3.0-3.6.1-2.mga3.x86_64 installed lib64gtk+3_0-3.6.1-2.mga3.x86_64 is conflicting because of unsatisfied gtk+3.0[== 3.6.1-2.mga3] gtk+3.0[*][== 3.6.1-2.mga3] set_rejected: lib64gtk+3_0-3.6.1-2.mga3.x86_64 installed lib64gtk+3.0-devel-3.6.1-2.mga3.x86_64 is conflicting because of unsatisfied lib64gtk+3_0[== 3.6.1] set_rejected: lib64gtk+3.0-devel-3.6.1-2.mga3.x86_64 installed lib64gtk-gir3.0-3.6.1-2.mga3.x86_64 is conflicting because of unsatisfied lib64gtk+3_0[== 3.6.1-2.mga3] set_rejected: lib64gtk-gir3.0-3.6.1-2.mga3.x86_64 installed gtk+3.0-3.6.1-2.mga3.x86_64 is conflicting because of unsatisfied lib64gtk+3_0[== 3.6.1] promoting gtk+3.0-3.6.1-3.mga3.x86_64 because of conflict above unselecting gtk+3.0-3.6.1-3.mga3.x86_64 set_rejected: gtk+3.0-3.6.1-2.mga3.x86_64 (...)
* rename find_candidate_packages_() as find_candidate_packages()Thierry Vignaud2012-09-261-7/+7
|
* remove deprecated find_chosen_packages() & find_candidate_packages()Thierry Vignaud2012-09-261-16/+0
|
* (strict_arch_check,strict_arch_check_installed) simplifyThierry Vignaud2012-09-261-5/+8
|
* introduce any() from MDK::Common and resuse itThierry Vignaud2012-09-261-3/+8
|
* (_find_required_package__kmod) simplifyThierry Vignaud2012-09-261-1/+1
|
* (_handle_conflicts_with_selected) simplifyThierry Vignaud2012-09-261-1/+1
|
* (resolve_requested_suggests) micro-optimizationThierry Vignaud2012-09-171-1/+1
|
* (resolve_requested_suggests) split it out of resolve_requested()Thierry Vignaud2012-09-171-4/+11
|
* (compute_flags) drop compatibility with urpmi <= 4.5-13mdk (2004-07-09)Thierry Vignaud2012-08-101-1/+0
|
* light speedupsThierry Vignaud2012-06-281-3/+3
|
* (_selected_size_filesize) simplifyThierry Vignaud2012-06-221-5/+1
|
* minor style enhancementsThierry Vignaud2012-06-221-7/+3
|
* provides_overlap() defaults to direction=1Thierry Vignaud2012-06-181-2/+2
|
* (ranges_overlap,obsoletes_overlap) drop unused no_promote parameterThierry Vignaud2012-06-151-1/+1
| | | | | | | | rationale: it was never set to 0 for nearly a decade this should have been ripped rigth after commit r227323 by pixel on Sep 7 2007: "simplify: nopromoteepoch is always 1 (no caller ever define it)"
* Revert "(backtrack_selected) help perl_checker"Thierry Vignaud2012-03-191-1/+1
| | | | | This reverts commit 2873 from Feb 1 2012 (perl_checker has better fake packages now)
* (min) kill unused functionThierry Vignaud2012-03-161-1/+0
|
* (listlenght,uniq) enable perl_checker to see how many arguments are expectedThierry Vignaud2012-03-161-2/+10
|
* (find_required_package) perl_checker cleanupThierry Vignaud2012-03-161-1/+1
|
* (property2name,property2name_range,property2name_op_version) enable ↵Thierry Vignaud2012-03-161-3/+8
| | | | perl_checker to see how many arguments are expected
* (_find_packages_obsoleting) fix for a rare unreproductable crash (mga#4425)Thierry Vignaud2012-02-151-0/+1
|
* (find_required_package) really prefer packages from first media, thusThierry Vignaud2012-02-071-1/+1
| | | | fixing downloading noarch packages from 32 bit repository (mga#1603)
* (_selected_size_filesize) fix computing size of added/freed disk spaceThierry Vignaud2012-02-071-1/+5
| | | | | | when updating involves removing some packages (mga#4427) (bug introduced by fpons in r11176 on Jun 26 2003 ("0.91-7mdk"))
* (backtrack_selected) help perl_checkerThierry Vignaud2012-02-011-1/+1
|
* remove some perl_checker hints, better managed in fake packagesThierry Vignaud2012-01-301-1/+0
|
* support kernel 3.x in kmod resolutionOlivier Blin2012-01-151-2/+2
|
* reduce even more perl_checker SNR by also checking against URPM's perlThierry Vignaud2011-09-211-0/+1
| | | | methods instead of only the XS ones
* perl_checker cleanupThierry Vignaud2011-09-211-1/+1
|
* (compute_flags) fix slow matching of individual regexes for skippingThierry Vignaud2011-09-201-2/+4
| | | | | dependencies by creating a large regex to match them all at once (mdv#61389, Shlomi Fish)
* add perl_checker hintsThierry Vignaud2011-09-201-0/+1
|
* perl_checker cleanupsThierry Vignaud2011-09-201-5/+5
|
* (request_packages_to_upgrade) fix calling method in stringThierry Vignaud2011-09-171-1/+1
| | | | | (spoted by perl_checker, introduced in revision mga#267800 ("honour search medias when using --auto-select") but teuf on Fri Apr 23 2010
* Synthesized commit during git-svn import combining previous Mandriva history ↵Mageia SVN-Git Migration2011-02-041-2/+2
| | | | | | | | | | | | with Magiea. This commit consitsts of the following subversion commits: ------------------------------------------------------------------------ r419 | dmorgan | 2011-02-04 13:41:50 +0000 (Fri, 04 Feb 2011) | 1 line Import cleaned perl-URPM ------------------------------------------------------------------------
* - enable 'use warnings'Olivier Thauvin2010-07-301-1/+3
| | | | - fix some warnings
* - fix warning on perl 5.12, spotted by olivier thauvin ( Odd number of ↵Michael Scherer2010-07-301-1/+1
| | | | elements in anonymous hash at URPM/Resolve.pm line 1192. )
* - fix deferencement on hash (instead hashref), warning triggered by perl 5.12Olivier Thauvin2010-07-231-1/+1
|
* only print debug message if debug callback is definedChristophe Fergeau2010-04-231-1/+1
|
* honour search medias when using --auto-selectChristophe Fergeau2010-04-231-1/+4
|
* check selected packages for unsatisfied requires when a promoted package is ↵Christophe Fergeau2010-03-231-0/+5
| | | | | | backtracked and no replacement is found (#57224, Anssi Hannula)
* check for conflicting selected packages before selecting a packageChristophe Fergeau2010-02-121-4/+5
| | | | | | | | | | | | | | | | check for conflicting selected packages before selecting a package instead of after selecting it, to avoid having to unselect package in case of conflict (which incorrectly unselected packages with unsatisfied dependencies as well, making the following backtrack_selected call behave wrongly as it simply noticed that the package is no longer required) Here's the second patch again, now with the function comment updated and added _remove_all_rejected_from() call so that prerejections are still cleared (this was previously called from the removed disable_selected() call). Testsuites pass. Patch by Anssi Hannula, fixes #57224
* use set_rejected_and_compute_diff_provides for package removalChristophe Fergeau2009-08-101-10/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Patch by Anssi Hannula, fixes bug #52667 k1-1 provides k, but not k1-2 l-1 and l-2 requires k m-1 requires k but not m-2 n requires m User has l-1, m-1, n-1, k1-1. There is only one upgrade path: k1-1 -> k1-2 m-1 -> m-2 removal of l-1 When transaction is created with all of them (e.g. what --auto-select does first), the path is resolved correctly. However, when the upgrade is triggered with the upgrade of k1, and l is in RPM db before n, resolving proceeds as follows: 1. k1 selected and old version rejected 2. l is promoted 3. m is promoted 4. l-2 is therefore selected 5. no packages are found for k (as k1-1 was rejected in step 1) 6. backtrack_selected calls resolve_rejected to reject the chain 7. rejection process rejects l, m, n 8. m-2 is selected because of step 3 End result: n is wrongly removed. Therefore, when using --auto-select (with --split-length 1 --split-level 1 in this small case, to force splitting) to trigger the upgrade, the early resolve is done correctly, but the first splitted transaction ("rpms sorted by dependencies" has k1 and m separately, so split is tried) tries to remove n and URPM fallbacks to single big transaction. In reverse, when using "urpmi k1" to trigger the upgrade, urpmi asks user confirmation for n removal, but the transaction is created with both k1 and m ("rpms sorted by dependencies" has k1+m, so they are put in same transaction), thus triggering the correct behaviour and n is not really removed after all, even if user agreed to it. Attached patch fixes this by switching backtrack_selected() to use set_rejected_and_compute_diff_provides() for package removal instead of resolve_rejected_(). The code already contained a comment indicating that diff_provides code should be applied. The patch introduces no regression in the urpmi and perl-URPM testsuites.
* Obey options (keep, nodeps) when unselecting current package in the caseAnssi Hannula2009-08-051-3/+3
| | | | | | that was added in 3.31 (Anssi Hannula). In a simple mistake, %options was not passed to backtrack_selected.
* add a backtrack entry "conflicts" for avoided packages in backtrack_selectedChristophe Fergeau2009-07-281-1/+6
| | | | Patch from Anssi Hannula, fixes part of bug #52153
* do not try to promote to an older packageChristophe Fergeau2009-07-281-1/+1
| | | | | | | | | | | | | | | | | Patch by Anssi Hannula, fixes bug #52460 When searching for possible promotions, _handle_diff_provides() allows downgrade as well as upgrade. However, downgrade is not currently supported, and will fail early in _no_more_recent_installed_and_providing(), called from resolve_requested__no_suggests_(). As no backtracking is done for early failures in this function (should it be? dunno), the promotion gets forgotten and a failing transaction will occur. Simple fix is to only allow upgrade before doing the promotion. Patch attached. It introduces no regressions in urpmi or perl-URPM testsuite.
* unselect current package if an avoided package is already selectedChristophe Fergeau2009-07-281-3/+14
| | | | | | | | | | | | | | | | Patch by Anssi Hannula, fixes bug #52145 If package 'a' Conflicts on 'b', and user (or a dependency chain) tries to install both at the same time, perl-URPM will only detect the conflict if package 'a' gets selected first (this depends on hdlist order), as _set_rejected_from is only called in one direction from _handle_conflicts and it does not detect that a package it is about to reject_from is already selected. This bug currently causes a failure in urpmi handle-conflict-deps2 testcase. This commit checks if avoided package is already selected, and unselects current package in such a case
* move part of _handle_conflicts to _handle_conflicts_with_selectedChristophe Fergeau2009-07-281-8/+17
| | | | | | | | | | | | | | Patch by Anssi Hannula, first step toward fixing bug #52145 If package 'a' Conflicts on 'b', and user (or a dependency chain) tries to install both at the same time, perl-URPM will only detect the conflict if package 'a' gets selected first (this depends on hdlist order), as _set_rejected_from is only called in one direction from _handle_conflicts and it does not detect that a package it is about to reject_from is already selected. This patch moves part of _handle_conflicts to _handle_conflicts_with_selected to be called before dependencies get added, needed by next patch
* _handle_conflicts: check all provides for conflicts, not just package nameChristophe Fergeau2009-07-281-1/+1
| | | | | | | | | | | | | Patch by Anssi Hannula, fixes bug #52135 If package a has "Conflicts: x" and b has "Provides: x", installing both at the same time creates a failing transaction (instead of producing the "cannot install a (or b), continue?") as perl-URPM does not detect the conflict, as it just checks the conflicts on the package name (it does the correct thing with installed packages, though). _handle_conflicts: call _set_rejected_from if any provides match the conflict, instead of just package name
* keep psel/promote info and remove deadlocked pkg instead of aborting upgradeChristophe Fergeau2009-07-281-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | Patch from Anssi Hannula, fixes bug #52105 lib64gcj9 has to be removed (conflicts), therefore so does libgcj9-src (x86_64) that depends on it. Installed java-1.5.0-gcj-src depends on libgcj9-src, so perl-URPM tries to promote the i586 libgcj9-src for it. However, strict_arch check prohibits changing the arch, so it falls back to backtracking. Backtracking finds libgcj9-src again and tries to select it; however, it drops $dep->{psel} and $dep->{promote}, so when it fails again, perl-URPM does not know java-1.5.0-gcj-src should also be removed due to the failed promotion. This patch changes the code in backtrack_selected in two ways: 1) When a replacement package is found, keep {promote} and {psel} info, so that when backtrack_selected is run the second time it correctly handles the failed promotion. 2) When such a replacement fails as well and the deadlock protection is triggered, do not switch to keep mode for the package that caused the promotion (it would unselect all the packages involved in the update that caused the promotion). Instead proceed to remove it as usual. The patch introduces no failures on the urpmi testsuite.
* keep track of sources for obsoleted/removed levelsChristophe Fergeau2009-07-281-2/+15
| | | | | | | | | | | | | | | | | | | | | | Patch by Anssi Hannula, fixes bug #50666 removed/obsoleted levels are set in set_rejected() when a package is rejected (i.e. removed) or a rejection reason is added. They keep track on whether the package is removed and/or obsoleted. When the package has both flags and one of the rejection reasons is removed by _remove_rejected_from(), appropriate flags do not get removed. The case I encountered: the package is set for removal when a package it depends on fails upgrade due to unsatisfied dependency and has to be removed (backtrack_selected => resolve_rejected, causing removed=1), and the package is then promoted (causing obsoleted=1). However, the promotion fails due to the same unsatisfied dependency and backtrack_selected => disable_selected_and_unrequested_dependencies => disable_selected => _remove_all_rejected_from => _remove_rejected_from gets called. This removes the latter rejection reason, but leaves flags, including the now wrong obsoleted=1. Thus the package is not explicitely removed as an obsoletion is assumed, therefore failing the transaction.
* Fix regression introduced in fix for bug #47803Christophe Fergeau2009-03-271-2/+8
| | | | | | | | | | | | This reverts the previous commit only compute diff_provides when the package is newly rejected, in set_rejected_and_compute_diff_provides Try this incremental patch. It fixes set_rejected_and_compute_diff_provides to not compute diff_provides if package was already rejected (and thus the dependencies properly handled already).