summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/edsp.cc16
-rw-r--r--apt-pkg/init.cc1
-rw-r--r--apt-pkg/packagemanager.cc27
-rw-r--r--test/integration/framework11
-rwxr-xr-xtest/integration/test-external-installation-planer-protocol48
5 files changed, 79 insertions, 24 deletions
diff --git a/apt-pkg/edsp.cc b/apt-pkg/edsp.cc
index 805a37bb3..49873f243 100644
--- a/apt-pkg/edsp.cc
+++ b/apt-pkg/edsp.cc
@@ -1074,6 +1074,20 @@ bool EDSP::ResolveExternal(const char* const solver, pkgDepCache &Cache,
bool EIPP::OrderInstall(char const * const solver, pkgPackageManager * const PM, /*{{{*/
unsigned int const flags, OpProgress * const Progress)
{
+ if (strcmp(solver, "internal") == 0)
+ {
+ auto const dumpfile = _config->FindFile("Dir::Log::Planer");
+ if (dumpfile.empty())
+ return false;
+ auto const dumpdir = flNotFile(dumpfile);
+ FileFd output;
+ if (CreateAPTDirectoryIfNeeded(dumpdir, dumpdir) == false ||
+ output.Open(dumpfile, FileFd::WriteOnly | FileFd::Exclusive | FileFd::Create, FileFd::Extension, 0644) == false)
+ return _error->WarningE("EIPP::OrderInstall", _("Could not open file '%s'"), dumpfile.c_str());
+ bool Okay = EIPP::WriteRequest(PM->Cache, output, flags, nullptr);
+ return Okay && EIPP::WriteScenario(PM->Cache, output, nullptr);
+ }
+
int solver_in, solver_out;
pid_t const solver_pid = ExecuteExternal("planer", solver, "Dir::Bin::Planers", &solver_in, &solver_out);
if (solver_pid == 0)
@@ -1081,7 +1095,7 @@ bool EIPP::OrderInstall(char const * const solver, pkgPackageManager * const PM,
FileFd output;
if (output.OpenDescriptor(solver_in, FileFd::WriteOnly | FileFd::BufferedWrite, true) == false)
- return _error->Errno("OrderInstall", "Opening planer %s stdin on fd %d for writing failed", solver, solver_in);
+ return _error->Errno("EIPP::OrderInstall", "Opening planer %s stdin on fd %d for writing failed", solver, solver_in);
bool Okay = output.Failed() == false;
if (Progress != NULL)
diff --git a/apt-pkg/init.cc b/apt-pkg/init.cc
index 70a119a6e..0e8d9be8a 100644
--- a/apt-pkg/init.cc
+++ b/apt-pkg/init.cc
@@ -76,6 +76,7 @@ bool pkgInitConfig(Configuration &Cnf)
Cnf.CndSet("Dir::Log","var/log/apt");
Cnf.CndSet("Dir::Log::Terminal","term.log");
Cnf.CndSet("Dir::Log::History","history.log");
+ Cnf.CndSet("Dir::Log::Planer","eipp.log.xz");
Cnf.Set("Dir::Ignore-Files-Silently::", "~$");
Cnf.Set("Dir::Ignore-Files-Silently::", "\\.disabled$");
diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc
index a61c5f7a9..898e5d156 100644
--- a/apt-pkg/packagemanager.cc
+++ b/apt-pkg/packagemanager.cc
@@ -1033,26 +1033,21 @@ pkgPackageManager::OrderResult pkgPackageManager::OrderInstall()
return Failed;
Reset();
-
+
if (Debug == true)
clog << "Beginning to order" << endl;
std::string const planer = _config->Find("APT::Planer", "internal");
+ unsigned int flags = 0;
+ if (_config->FindB("APT::Immediate-Configure", true) == false)
+ 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;
+ auto const ret = EIPP::OrderInstall(planer.c_str(), this, flags, nullptr);
if (planer != "internal")
- {
- unsigned int flags = 0;
- if (_config->FindB("APT::Immediate-Configure", true) == false)
- 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;
- else
- return Failed;
- }
+ return ret ? Completed : Failed;
bool const ordering =
_config->FindB("PackageManager::UnpackAll",true) ?
@@ -1062,7 +1057,7 @@ pkgPackageManager::OrderResult pkgPackageManager::OrderInstall()
_error->Error("Internal ordering error");
return Failed;
}
-
+
if (Debug == true)
clog << "Done ordering" << endl;
diff --git a/test/integration/framework b/test/integration/framework
index 93e17e454..cd8597f80 100644
--- a/test/integration/framework
+++ b/test/integration/framework
@@ -309,8 +309,8 @@ setupenvironment() {
ln -s "${BUILDDIRECTORY}/apt-dump-solver" usr/lib/apt/planers/dump
ln -s "${BUILDDIRECTORY}/apt-internal-solver" usr/lib/apt/solvers/apt
ln -s "${BUILDDIRECTORY}/apt-internal-planer" usr/lib/apt/planers/apt
- echo "Dir::Bin::Solvers \"${TMPWORKINGDIRECTORY}/rootdir/usr/lib/apt/solvers\";" > etc/apt/apt.conf.d/externalsolver.conf
- echo "Dir::Bin::Planers \"${TMPWORKINGDIRECTORY}/rootdir/usr/lib/apt/planers\";" > etc/apt/apt.conf.d/externalplaner.conf
+ echo "Dir::Bin::Solvers \"${TMPWORKINGDIRECTORY}/rootdir/usr/lib/apt/solvers\";" >> ../aptconfig.conf
+ echo "Dir::Bin::Planers \"${TMPWORKINGDIRECTORY}/rootdir/usr/lib/apt/planers\";" >> ../aptconfig.conf
fi
# use the autoremove from the BUILDDIRECTORY if its there, otherwise
# system
@@ -333,7 +333,7 @@ setupenvironment() {
chmod 644 keys/*
ln -s "${TMPWORKINGDIRECTORY}/keys/joesixpack.pub" rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
- echo "Dir \"${TMPWORKINGDIRECTORY}/rootdir\";" > aptconfig.conf
+ echo "Dir \"${TMPWORKINGDIRECTORY}/rootdir\";" >> aptconfig.conf
echo "Dir::state::status \"${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status\";" >> aptconfig.conf
echo "APT::Get::Show-User-Simulation-Note \"false\";" >> aptconfig.conf
echo "Dir::Bin::Methods \"${TMPWORKINGDIRECTORY}/rootdir/usr/lib/apt/methods\";" >> aptconfig.conf
@@ -1571,12 +1571,13 @@ msgfailoutput() {
local MSG="$1"
local OUTPUT="$2"
shift 2
- if [ "$1" = 'grep' ]; then
+ local CMD="$1"
+ if [ "$1" = 'grep' -o "$1" = 'tail' -o "$1" = 'head' ]; then
echo >&2
while [ -n "$2" ]; do shift; done
echo "#### Complete file: $1 ####"
catfile "$1"
- echo '#### grep output ####'
+ echo "#### $CMD output ####"
elif [ "$1" = 'test' ]; then
echo >&2
# doesn't support ! or non-file flags
diff --git a/test/integration/test-external-installation-planer-protocol b/test/integration/test-external-installation-planer-protocol
index 605efcd7b..15ecd23a3 100755
--- a/test/integration/test-external-installation-planer-protocol
+++ b/test/integration/test-external-installation-planer-protocol
@@ -20,12 +20,56 @@ insertinstalledpackage 'unrelated-1' 'all' '1'
setupaptarchive --no-update
+EIPPLOG="${TMPWORKINGDIRECTORY}/rootdir/var/log/apt/eipp.log"
+echo "Dir::Log::Planer \"$EIPPLOG\";" > ./rootdir/etc/apt/apt.conf.d/eipp-logging
+
testsuccess apt update
export APT_EDSP_DUMP_FILENAME="${TMPWORKINGDIRECTORY}/eipp.dump"
+testfailure test -r "$EIPPLOG"
testfailure aptget install foo --planer dump -y
+testfailure test -r "$EIPPLOG"
testfailure grep 'unrelated-2' "$APT_EDSP_DUMP_FILENAME"
testsuccessequal '2' grep -c '^Package: foo$' "$APT_EDSP_DUMP_FILENAME"
testsuccessequal '1' grep -c '^Package: libfoo$' "$APT_EDSP_DUMP_FILENAME"
-#less "$APT_EDSP_DUMP_FILENAME"
+testsuccessequal 'Planer: dump' grep '^Planer: ' "$APT_EDSP_DUMP_FILENAME"
+
+testsuccess aptget install foo -s
+testsuccess aptget install foo -y
+testsuccess test -r "$EIPPLOG"
+testsuccessequal 'Request: EIPP 0.1
+Architecture: amd64
+Architectures: amd64
+Remove: bar:amd64
+Install: libfoo:amd64 foo:amd64
+Planer: internal' head -n 6 "$EIPPLOG"
+aptinternalplaner < "$EIPPLOG" > planer.log || true
+testsuccessequal 'Remove: 6
+Unpack: 2
+Unpack: 4
+Configure: 2
+Configure: 4' grep -e '^Unpack:' -e '^Install:' -e '^Configure:' -e '^Remove:' planer.log
+
+rm -f "$EIPPLOG"
+testsuccess aptget install foo -s --reinstall
+testsuccess aptget install foo -y --reinstall
+testsuccess test -r "$EIPPLOG"
+testsuccessequal 'Request: EIPP 0.1
+Architecture: amd64
+Architectures: amd64
+ReInstall: foo:amd64
+Planer: internal' head -n 5 "$EIPPLOG"
+aptinternalplaner < "$EIPPLOG" > planer.log || true
+testsuccessequal 'Unpack: 4
+Configure: 4' grep -e '^Unpack:' -e '^Install:' -e '^Configure:' -e '^Remove:' planer.log
-aptget install foo -ys #--planer apt
+rm -f "$EIPPLOG"
+testsuccess aptget purge foo -s
+testsuccess aptget purge foo -y
+testsuccess test -r "$EIPPLOG"
+testsuccessequal 'Request: EIPP 0.1
+Architecture: amd64
+Architectures: amd64
+Remove: foo:amd64
+Planer: internal' head -n 5 "$EIPPLOG"
+aptinternalplaner < "$EIPPLOG" > planer.log || true
+testsuccessequal 'Remove: 4' grep -e '^Unpack:' -e '^Install:' -e '^Configure:' -e '^Remove:' planer.log