[Aptitude-devel] Bug#576319: Bug#576319: Bug#576319: aptitude: "Cancel pending actions" erase "h - hold" state
Manuel A. Fernandez Montecelo
manuel.montezelo at gmail.com
Fri Jan 22 14:26:49 UTC 2016
Hi,
2016-01-22 09:03 Axel Beckert:
>Hi,
>
>Ralf Jung wrote:
>> > I am going to fix this by making "Cancel pending actions" to reload the
>> > cache, which is roughly equivalent to restart the program without
>> > exiting and starting again (effectively forgetting all what was marked
>> > in this session).
>> >
>> > I think that this is more consistent with "Cancel pending actions" as
>> > described by the original report and other users, than the previous
>> > behaviour -- removing all holds and auto-installed flags of all packages
>> > in the system, even if they had not been changed in this session.
>>
>> Does this mean that if there is an action stored in the cache, that
>> action would not be canceled? I think that would also be confusing.
>
>I agree with Ralf here. Cancel pending actions should also cancel all
>scheduled actions which have been scheduled in previous aptitude runs,
>too.
It looks to me that different people have different ideas in mind about
how it should work, incompatible between them:
1) One is to discard pending actions of the current session, considering
actions previously scheduled (and saved) and not as "pending [to
save/confirm]", but as "confirmed that I want to go ahead with
those".
This, intuitively, is what makes more sense to me, that's why I was
going to fix it in this way and I thought that it was
uncontroversial.
There's no current way to achieve this, other than by quitting
without saving the state (Control-C, unadvisable in general) plus
starting again or Undo-ing one by one all previous actions in the
section. I'd maintain that this is a more
useful/requested/commonly-used feature than reverting previously
confirmed and saved states.
2) Another is to reset all packages's states to "keep", removing holds
and sometimes auto flags, which is what it is currently doing.
This was done intentionally in this way --and documented-- because
"hold" (and I guess that "auto installed" as well, but it doesn't
make much sense in this case) was considered a kind of transient flag
that should not be present in a normal state of the system, thus
"hold" was considered to be a "pending action" in the same way as
"upgrade", "install" or "remove".
What people were complaining about in these bug reports (#537735,
#576319; and probably others where people complain about the loss of
Hold or Auto without having founding out the cause) is essentially
that "Cancel pending actions" is removing a property that they don't
consider "pending" or transient, but permanent (auto-installed and
holds).
Even without "Cancel pending options" working in this way, the
actions which haven't taken place, can be easily reverted by applying
"keep" on the group of packages that change (searchable with
"!~akeep", for example, or going to the "preview" screen and undoing
that), and perhaps selectively (not cancel all actions at the same
time, but only a subset).
3) Another, what Ralf and you are requesting, is to cancel not only
actions pending in this session, but previously confirmed by saving
them in previous sessions.
(Actually, it looks to me that Ralf is experiencing some other
problem, because it is not normal that aptitude often wants to change
the current state of the system the first time that he fires aptitude
up -- that's because it detects some conflict or brokenness with the
current state. Ralf doesn't like the current behaviour #2 either).
This is fundamentally unattaintable. Actions are immediately saved
to several places, including apt and dpkg accessible files, so if you
mark a package for deletion and quit aptitude, "dpkg --pending
--remove" will remove it. If apt, dpkg or other tools install other
packages in the meantime, or update the available packages, upon
starting aptitude it will re-read the state of the system and will
update things accordingly, removing/invalidating part of the
previously scheduled actions. So one will be unable to undo some of
the "saved but not performed actions [within aptitude]", because
actions would have been performed outside of aptitude.
Additionally, there are many other details to sort out in that case.
"On hold" would never be able to be considered as a "pending action"
(even if it's always described as an action in the doc), and if a
package previously marked as "install" and one does "keep" it in the
current session, "Cancel pending actions" will not set it as
installable in any case. In short, the only way to implement this is
basically how it already works, #2.
Same as with #2, even without "Cancel pending options" working in
this way it's possible and easy to revert these actions, so I don't
think that losing this way to achieve a purpose is a deal-breaker.
So, for me, #3 is not the way to go, and it's a fundamentally flawed
approach (it will never work as intended, as long as aptitude cooperates
with other tools of the ecosystem and doesn't override their actions).
As Maggie and others would have it, There is No Alternative [1].
There's no way but to continue in the path of the integration with other
tools of the Debian package ecosystem, because some of this was
requested since the early days of aptitude back in 2000
(e.g. integration of Holds with apt and dpkg, and only fixed in the
recent 0.7 series), and because saving this information in places
accesible to apt and dpkg is the only sensible way to do it.
[1] https://en.wikipedia.org/wiki/There_is_no_alternative
#2 is what happens now, which doesn't leave people happy, as we've seen
in these reports (and the complaints that "keep" also reset holds).
If we're to keep something like #3, I'd say that we should rename it to
the current #2 "keep all", probably removing holds and all.
#1 (in the form of "Cancel pending actions" as described in #1, or other
possible names such as "Undo all", or "Reset/restart session") is a
missing feature that I want to implement, and I'd argue that what most
people really think that they will achieve when invoking "Cancel pending
actions".
>I'm though not sure if by "cache" you mean apt's cache (which would
>include holds, but not aptitude's scheduled actions) or aptitude's
>extended states file (which would include both).
I mean the same effect as restarting aptitude -- which includes apt
cache plus aptitude bits of data.
>In the latter case, please note that such things happen as
>
>1. Start TUI
>2. Schedule some actions
>3. gg -> Start downloading files -- this saves the extended states
>4. q -> Abort download
>5. Cancel pending actions
As I explained above, this has never worked properly to restore previous
states, and cannot be made to work to reliably rever all actions taken.
"Cancel pending actions" is just a "keep-all" removing holds, equivalent
to press ":" in Upgradable + Installed + NotInstalled subtrees.
Cheers.
--
Manuel A. Fernandez Montecelo <manuel.montezelo at gmail.com>
More information about the Aptitude-devel
mailing list