[Aptitude-devel] Bug#570377: Aptitude removals
Chris Tillman
toff.tillman at gmail.com
Sun Oct 11 18:28:14 UTC 2015
On Sun, Oct 11, 2015 at 10:07 PM, Vincent Lefevre <vincent at vinc17.net>
wrote:
> On 2015-10-11 21:36:19 +1300, Chris Tillman wrote:
> > I bought a new (used) computer, and installed a new system. This annoying
> > behaviour came back, of course, because I had set the old one up to get
> rid
> > of it.
> >
> > For anyone being affected by these bugs, or annoyed by removals being
> > offered first, I'd suggest trying this in your ~/.aptitude/config file:
> >
> > Aptitude "";
> > Aptitude::ProblemResolver "";
> > Aptitude::ProblemResolver::Remove-Level "10001";
> [...]
>
> In https://lists.debian.org/debian-user/2014/07/msg00398.html
> Andrei POPESCU suggested:
>
> Aptitude::ProblemResolver::SolutionCost "removals";
>
> but this can lead to downgrades:
>
> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=762932
>
> How does your solution behave compared to this one?
>
> --
> Vincent Lefèvre <vincent at vinc17.net> - Web: <https://www.vinc17.net/>
> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)
>
Hi Vincent!
You are over-represented in the list of potentially related bugs I compiled
last night. I sense you are as frustrated as I am about this behaviour.
For the simple example I gave, where my setting offered to upgrade rather
than remove, with your setting substituted it did an "automatic fix" for
broken packages.
[image: Inline image 1]
So the difference there was, it told me to fuggedabout it (my request). It
also canceled that pending action. So I think the Remove-Level "10001"
setting is probably more desirable based on that quick test ... because my
stated intention was to upgrade (I pressed + on the binutils line)..
Grepping the source shows that Remove-Level is a cfg_level, which is
referred in quite a few places, potentially having complex effects:
chris at ctillman:~/eiffel/projects/Eifflix/src/packages/aptitude/pre/aptitude-0.7.2$
ack Remove-Level src
src/generic/apt/aptitude_resolver_universe.cc
878: return parse_levels(aptcfg->Find(PACKAGE
"::ProblemResolver::Remove-Level", ""),
chris at ctillman:~/eiffel/projects/Eifflix/src/packages/aptitude/pre/aptitude-0.7.2$
ack parse_levels src
src/generic/apt/aptitude_resolver_universe.h
1374: static cfg_level parse_levels(const std::string &level1,
src/generic/apt/aptitude_resolver_universe.cc
847:cfg_level aptitude_universe::parse_levels(const std::string &level1,
864: parse_levels(aptcfg->Find(PACKAGE "::ProblemResolver::Safe-Level",
""),
871: return parse_levels(aptcfg->Find(PACKAGE
"::ProblemResolver::Keep-All-Level", ""),
878: return parse_levels(aptcfg->Find(PACKAGE
"::ProblemResolver::Remove-Level", ""),
885: return parse_levels(aptcfg->Find(PACKAGE
"::ProblemResolver::Break-Hold-Level", ""),
892: return parse_levels(aptcfg->Find(PACKAGE
"::ProblemResolver::Non-Default-Level", ""),
899: return parse_levels(aptcfg->Find(PACKAGE
"::ProblemResolver::Remove-Essential-Level", ""),
chris at ctillman:~/eiffel/projects/Eifflix/src/packages/aptitude/pre/aptitude-0.7.2$
ack cfg_level srcsrc/generic/apt/aptitude_resolver_universe.h
1067:class cfg_level
1072: cfg_level(int _level, bool _is_discard)
1078: /** \brief Create a cfg_level that has no effect. */
1079: cfg_level()
1084: static cfg_level make_level(int level)
1086: return cfg_level(level, false);
1089: static cfg_level make_conflict()
1091: return cfg_level(INT_MAX, true);
1097: bool operator<(const cfg_level &other) const
1108:std::ostream &operator<<(std::ostream &out, const cfg_level &level);
1366: static cfg_level parse_level(const std::string &s);
1374: static cfg_level parse_levels(const std::string &level1,
1376: cfg_level default_level);
1379: static cfg_level get_safe_level();
1380: static cfg_level get_keep_all_level();
1381: static cfg_level get_remove_level();
1382: static cfg_level get_break_hold_level();
1383: static cfg_level get_non_default_level();
1384: static cfg_level get_remove_essential_level();
src/generic/apt/aptitude_resolver_universe.cc
813:std::ostream &operator<<(std::ostream &out, const cfg_level &level)
823:cfg_level aptitude_universe::parse_level(const std::string &s)
826: return cfg_level::make_level(cost_limits::maximum_level);
828: return cfg_level::make_level(cost_limits::minimum_level);
830: return cfg_level::make_conflict();
840: return cfg_level::make_level(cost_limits::minimum_level);
843: return cfg_level::make_level(n);
847:cfg_level aptitude_universe::parse_levels(const std::string &level1,
849: cfg_level default_level)
858: return std::max<cfg_level>(parse_level(level1),
parse_level(level2));
861:cfg_level aptitude_universe::get_safe_level()
866: cfg_level::make_level(10000));
869:cfg_level aptitude_universe::get_keep_all_level()
873: cfg_level::make_level(20000));
876:cfg_level aptitude_universe::get_remove_level()
880: cfg_level::make_level(10000));
883:cfg_level aptitude_universe::get_break_hold_level()
887: cfg_level::make_level(40000));
890:cfg_level aptitude_universe::get_non_default_level()
894: cfg_level::make_level(50000));
897:cfg_level aptitude_universe::get_remove_essential_level()
901: cfg_level::make_level(60000));
src/generic/apt/aptitude_resolver.cc
457: cfg_level safety_level;
702: cost apply_cfg_level(const cfg_level &level,
743: cfg_level keep_all_level(aptitude_universe::get_keep_all_level());
744: cost keep_all_cost(apply_cfg_level(keep_all_level, cost_settings,
safety_component));
1173: cfg_level safe_level(aptitude_universe::get_safe_level());
1174: cfg_level keep_all_level(aptitude_universe::get_keep_all_level());
1175: cfg_level remove_level(aptitude_universe::get_remove_level());
1176: cfg_level
break_hold_level(aptitude_universe::get_break_hold_level());
1177: cfg_level
non_default_level(aptitude_universe::get_non_default_level());
1178: cfg_level
remove_essential_level(aptitude_universe::get_remove_essential_level());
1433: apply_cfg_level(safe_level,
cost_settings, safety_component)
1453: apply_cfg_level(remove_level,
cost_settings, safety_component)
1485: apply_cfg_level(safe_level,
cost_settings, safety_component));
1505: apply_cfg_level(non_default_level,
cost_settings, safety_component)
1529: apply_cfg_level(break_hold_level,
cost_settings, safety_component)
1552:
apply_cfg_level(remove_essential_level, cost_settings, safety_component));
... But SolutionCost is more of a fine-tuning feature, which only
influences the final decision:
chris at ctillman:~/eiffel/projects/Eifflix/src/packages/aptitude/pre/aptitude-0.7.2$
ack SolutionCost src
src/generic/apt/resolver_manager.cc
898: std::string cost_configuration = aptcfg->Find(PACKAGE
"::ProblemResolver::SolutionCost",
chris at ctillman:~/eiffel/projects/Eifflix/src/packages/aptitude/pre/aptitude-0.7.2$
ack cost_configuration src
src/generic/apt/resolver_manager.cc
898: std::string cost_configuration = aptcfg->Find(PACKAGE
"::ProblemResolver::SolutionCost",
904: cost_components = parse_cost_settings(cost_configuration);
chris at ctillman:~/eiffel/projects/Eifflix/src/packages/aptitude/pre/aptitude-0.7.2$
ack cost_components src
src/generic/apt/resolver_manager.cc
901: std::shared_ptr<std::vector<cost_component_structure> >
cost_components;
904: cost_components = parse_cost_settings(cost_configuration);
916: cost_components =
std::make_shared<std::vector<cost_component_structure> >();
920:
cost_components->push_back(cost_component_structure(cost_component_structure::combine_none,
level0));
924:
cost_components->push_back(cost_component_structure(cost_component_structure::combine_none,
level1));
928: aptitude_resolver_cost_settings cost_settings(cost_components);
--
Chris Tillman
Developer
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.alioth.debian.org/pipermail/aptitude-devel/attachments/20151012/2221ef17/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 110264 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/aptitude-devel/attachments/20151012/2221ef17/attachment.png>
More information about the Aptitude-devel
mailing list