aboutsummaryrefslogtreecommitdiffstats
path: root/URPM/Resolve.pm
Commit message (Collapse)AuthorAgeFilesLines
* 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).
* Revert part of the fix for bug #47803 since it breaks upgrades from 2008.1Christophe Fergeau2009-03-271-3/+1
|
* Postpone user choices as much as possibleChristophe Fergeau2009-03-251-36/+28
| | | | | | | | | | Fixes bug #48100, patch from Anssi Hannula Package A requires D and E. Package B provides D and E. Package C provides E. If the require on E happens to be resolved first, then perl-URPM will prompt the user, even though installing B is enough.
* Change format of "rpm sorted by dependencies" stringChristophe Fergeau2009-03-241-1/+1
|
* Don't silently install Suggests:, fixes bug #47934Christophe Fergeau2009-03-231-1/+1
| | | | | | | | | | | | When installing a package which suggests an uninstalled package, urpmi currently installs both packages without asking the user while it asks when installing a package which requires an uninstalled package. This is because we call resolve_requested__no_suggests to find which suggested package to install, but this mark the package as requested as well (and we don't ask for confirmation before installing a requested package). This patch calls resolve_requested__no_suggests_ (with a trailing '_') instead which is the same as resolve_requested__no_suggests but does not mark the packages as requested.
* fix _handle_diff_provides in case of impossible-to-satisfy selected packagesChristophe Fergeau2009-03-231-4/+9
| | | | | | | | | | | | | | | Fixes bug #48223, patch from Anssi Hannula Currently, if _handle_diff_provides finds unsatisfied requires on an already selected package, and cannot find any packages from the repo that satisfy these, it calls resolve_rejected_ (or set_rejected_and_compute_diff_provides after fix to bug #47803) (as it does when those unsatisfied requires are on an installed package, which was always the case before r242656). However, those should be called with installed packages only. Attached patch makes _handle_diff_provides call disable_selected_and_unrequested_dependencies and _set_rejected_from in case of selected packages.
* check rep for another pkg providing X if the prev pkg gets removed due to a ↵Christophe Fergeau2009-03-201-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | conflict Fixes bug #47803, patch from Anssi Hannula Closer look at urpmi revealed it only does this if a provide X is removed from an upgraded package, not when a package providing X has to be removed. i.e. this works: A provides foo B provides foo C requires foo Installed A,C. A is upgraded and Provides:foo is dropped, B gets installed in order to keep C. But this won't: A provides foo A requires dep B provides foo C requires foo D provides dep Installed A,C,D. D is upgraded and Provides:dep is dropped, A gets removed, C gets removed.
* Really fix bug #46874Christophe Fergeau2009-01-161-10/+18
|
* - @unsatisfied is a better var name than @lPascal Rigaux2009-01-091-8/+9
| | | | | - add some comment
* Favour required packages when we have several choices to fulfillChristophe Fergeau2009-01-081-0/+10
| | | | a "requires", fixes bug #46874
* - add some commentPascal Rigaux2009-01-061-4/+33
| | | | | - enhance a comment
* - fix sorting choices on provided version (feature introduced in 3.08, Pascal Rigaux2008-12-151-4/+9
| | | | | but was not working if packages were coming from different repository)
* - revert change introduced in 3.16 (it breaks too much, egPascal Rigaux2008-07-071-1/+1
| | | | | | superuser--priority-upgrade.t test case), and introduce $state->{rejected_already_installed} instead
* add removed_or_obsoleted_packages()Pascal Rigaux2008-07-041-0/+6
|
* - handle $state->{orphans_to_remove} in selected_size() andPascal Rigaux2008-07-041-0/+9
| | | | | build_transaction_set()
* perl_checker compliancePascal Rigaux2008-07-031-3/+3
|
* remove unused varsPascal Rigaux2008-07-031-4/+3
|
* create packages_to_remove() and use it to factorize codePascal Rigaux2008-07-031-10/+13
|
* - when not selecting a package because already installed,Pascal Rigaux2008-06-261-3/+5
| | | | | but it in $state->{rejected} with flags {installed}
* - add is_package_installed() in URPM/Resolve.pmPascal Rigaux2008-05-231-0/+12
| | | | | (to be used in urpmi 5.20)
* - do not ignore dropped provide from updated package (mdvbz#40842)Pascal Rigaux2008-05-191-1/+22
|
* enhance error messagePascal Rigaux2008-05-151-1/+1
|
* - do allow to promoting a pkg even if it has unsatisfied require (since thePascal Rigaux2008-03-071-12/+0
| | | | | | | | | | | | | code will then fix the unsatisfied require). fixes "big transaction" (cf urpmi split-transactions--strict-require.t test_efgh()) this code was introduced long ago (*), the code has changed quite a lot, and it's hard to tell for which reason it was introduced. Maybe the check "obsoletes_overlap" replaces it for good? (*) in "r11064 | fpons | 2002-06-13", search for "try if upgrading the package will be satisfying all the requires"
* - add filesize to synthesis, add ->filesize to get it, and addPascal Rigaux2008-02-251-2/+21
| | | | | selected_size_filesize() to compute the sum
* - allow fixing "using one big transaction" that occurs when using --keep Pascal Rigaux2008-02-251-0/+2
| | | | | | | | (#30198) nb: since build_transaction_set calls resolve_requested, it must use the same options to select the same packages
* - allow urpmi to know a package was not selected because a newer version isPascal Rigaux2008-02-251-3/+15
| | | | | installed (#29838)
* - fix sort choices changed in perl-URPM 3.08Pascal Rigaux2008-02-251-3/+3
|
* - handle new package providing xxx which conflicts with an installed package ↵Pascal Rigaux2008-02-251-1/+1
| | | | (#17106)
* - sort choices on virtual package by provided version (#12645)Pascal Rigaux2008-02-251-6/+25
|
* fix typoPascal Rigaux2008-01-111-1/+1
|
* resolve kmod requires even if first choice is a source dkms (adapted from Pixel)Olivier Blin2008-01-101-1/+3
|
* - much simpler --auto-select algorithm Pascal Rigaux2007-11-221-107/+67
| | | | | | (fixes #35718, ie auto-selecting with strict-arch) (!! DANGEROUS CHANGE !!)
* fix typoOlivier Blin2007-11-051-1/+1
|
* - prefer precompiled kmod packages corresponding to installed kernelsPascal Rigaux2007-10-011-3/+24
|
* move _find_required_package__kernel_source() out ofPascal Rigaux2007-10-011-5/+5
| | | | | _find_required_package__sort() (since it's not really a sort)
* re-indentPascal Rigaux2007-10-011-4/+4
|
* create _find_required_package__kernel_source() out of ↵Pascal Rigaux2007-10-011-25/+28
| | | | _find_required_package__sort()
* - don't resolve suggested virtual packages if already installed (#34376)Pascal Rigaux2007-10-011-0/+8
|
* - also handle promotion via obsolete for conflictsPascal Rigaux2007-09-281-0/+5
|
* create _find_packages_obsoleting() out of _handle_diff_provides()Pascal Rigaux2007-09-281-8/+16
|
* cleanup (and prepare next commit)Pascal Rigaux2007-09-281-6/+8
|