diff options
author | Zac Medico <zmedico@gentoo.org> | 2011-02-04 09:41:30 -0800 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2011-02-04 09:46:24 -0800 |
commit | 320df213972f7ce50e7f2379a3a0d7d0bbbef051 (patch) | |
tree | a23593bdccaa035705b4b4fa51cb6035fdbac50c | |
parent | 51e6dfb76d9051d1f0190a2cdb0e4e7a04a6f5b7 (diff) | |
download | portage-320df213972f7ce50e7f2379a3a0d7d0bbbef051.tar.gz portage-320df213972f7ce50e7f2379a3a0d7d0bbbef051.tar.bz2 portage-320df213972f7ce50e7f2379a3a0d7d0bbbef051.zip |
depgraph: make downgrades trigger complete graph
It's common for downgrades to break dependencies, as in bug #353613, so
automatically trigger complete graph mode when a downgrade is found.
-rw-r--r-- | pym/_emerge/depgraph.py | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index 5380de15b..7b74a265e 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -3408,8 +3408,27 @@ class depgraph(object): return 1 if "complete" not in self._dynamic_config.myparams: - # Skip this to avoid consuming enough time to disturb users. - return 1 + # Automatically enable complete mode if there are any + # downgrades, since they often break dependencies + # (like in bug #353613). + have_downgrade = False + for node in self._dynamic_config.digraph: + if not isinstance(node, Package) or \ + node.operation != "merge": + continue + vardb = self._frozen_config.roots[ + node.root].trees["vartree"].dbapi + inst_pkg = vardb.match_pkgs(node.slot_atom) + if inst_pkg and inst_pkg[0] > node: + have_downgrade = True + break + + if have_downgrade: + self._dynamic_config.myparams["complete"] = True + else: + # Skip complete graph mode, in order to avoid consuming + # enough time to disturb users. + return 1 self._load_vdb() |