From 8d1cb6da6e21302c654da3f09de3975af7e4a11f Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 6 Jun 2016 17:58:00 +0200 Subject: eipp: add Allow-Temporary-Remove-of-Essentials A rather special need option, but the internal planer supports this and we have a testcase for it & sometimes it is hit (as a bug through). The option itself mostly serves as a reminder for implementors that they should be careful with removes and especially temporary removes if they perform any. --- apt-pkg/edsp.cc | 4 ++++ apt-pkg/edsp.h | 1 + apt-pkg/packagemanager.cc | 2 ++ 3 files changed, 7 insertions(+) (limited to 'apt-pkg') diff --git a/apt-pkg/edsp.cc b/apt-pkg/edsp.cc index e79bb804c..1c6be8afe 100644 --- a/apt-pkg/edsp.cc +++ b/apt-pkg/edsp.cc @@ -1155,6 +1155,8 @@ bool EIPP::WriteRequest(pkgDepCache &Cache, FileFd &output, /*{{{*/ WriteOkay(Okay, output, "Immediate-Configuration: yes\n"); else if ((flags & Request::NO_IMMEDIATE_CONFIGURATION) != 0) WriteOkay(Okay, output, "Immediate-Configuration: no\n"); + else if ((flags & Request::ALLOW_TEMPORARY_REMOVE_OF_ESSENTIALS) != 0) + WriteOkay(Okay, output, "Allow-Temporary-Remove-of-Essentials: yes\n"); return WriteOkay(Okay, output, "\n"); } /*}}}*/ @@ -1389,6 +1391,8 @@ bool EIPP::ReadRequest(int const input, std::listWarning("Unknown line in EIPP Request stanza: %s", line.c_str()); diff --git a/apt-pkg/edsp.h b/apt-pkg/edsp.h index e1ffdf598..4adfc95e9 100644 --- a/apt-pkg/edsp.h +++ b/apt-pkg/edsp.h @@ -245,6 +245,7 @@ namespace EIPP /*{{{*/ { IMMEDIATE_CONFIGURATION_ALL = (1 << 0), /*!< try to keep the least amount of packages unconfigured as possible at all times */ NO_IMMEDIATE_CONFIGURATION = (1 << 1), /*!< do not perform immediate configuration at all */ + ALLOW_TEMPORARY_REMOVE_OF_ESSENTIALS = (1 << 2), /*!< just as the name suggests, very special case and dangerous! */ }; } diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index d5afceb6d..a61c5f7a9 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -1045,6 +1045,8 @@ pkgPackageManager::OrderResult pkgPackageManager::OrderInstall() flags |= EIPP::Request::NO_IMMEDIATE_CONFIGURATION; else if (_config->FindB("APT::Immediate-Configure-All", false)) flags |= EIPP::Request::IMMEDIATE_CONFIGURATION_ALL; + else if (_config->FindB("APT::Force-LoopBreak", false)) + flags |= EIPP::Request::ALLOW_TEMPORARY_REMOVE_OF_ESSENTIALS; if (EIPP::OrderInstall(planer.c_str(), this, flags, nullptr)) return Completed; -- cgit v1.2.3