summaryrefslogtreecommitdiff
path: root/apt-pkg/deb
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2009-09-15 23:52:04 +0200
committerDavid Kalnischkies <kalnischkies@gmail.com>2009-09-15 23:52:04 +0200
commit5e312de78360736fa3ef505909ef84da211362ca (patch)
treee2ba262292d5ad06f7f6edcd43c1966aa0904146 /apt-pkg/deb
parent3e9c4f702ed45f6201bae44b628c84db69436b05 (diff)
Add even more config options and try to handle configuration problems
arising if we upgrade essential or predependencies which need to be configured before even unpacking packages depending on them.
Diffstat (limited to 'apt-pkg/deb')
-rw-r--r--apt-pkg/deb/dpkgpm.cc28
-rw-r--r--apt-pkg/deb/dpkgpm.h2
2 files changed, 22 insertions, 8 deletions
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc
index 04e257b1b..5edab5ac7 100644
--- a/apt-pkg/deb/dpkgpm.cc
+++ b/apt-pkg/deb/dpkgpm.cc
@@ -135,9 +135,12 @@ bool pkgDPkgPM::Configure(PkgIterator Pkg)
if (Pkg.end() == true)
return false;
- bool static const NoConfigure = _config->FindB("DPkg::NoConfigure",false);
- if (NoConfigure == false)
- List.push_back(Item(Item::Configure,Pkg));
+ List.push_back(Item(Item::Configure, Pkg));
+
+ // Use triggers for config calls if we configure "smart"
+ // as otherwise Pre-Depends will not be satisfied, see #526774
+ if (_config->FindB("DPkg::TriggersPending", false) == true)
+ List.push_back(Item(Item::TriggersPending, PkgIterator()));
return true;
}
@@ -627,7 +630,8 @@ bool pkgDPkgPM::Go(int OutStatusFd)
unsigned int const MaxArgs = _config->FindI("Dpkg::MaxArgs",8*1024);
unsigned int const MaxArgBytes = _config->FindI("Dpkg::MaxArgBytes",32*1024);
- bool const NoTriggers = _config->FindB("DPkg::NoTriggers",false);
+ bool const NoTriggers = _config->FindB("DPkg::NoTriggers", false);
+ bool const NoConfTriggers = _config->FindB("DPkg::NoConfTriggers", NoTriggers);
if (RunScripts("DPkg::Pre-Invoke") == false)
return false;
@@ -637,8 +641,9 @@ bool pkgDPkgPM::Go(int OutStatusFd)
// support subpressing of triggers processing for special
// cases like d-i that runs the triggers handling manually
- if(_config->FindB("DPkg::ConfigurePending",_config->FindB("DPkg::NoConfigure",false)) == true)
- List.push_back(Item(Item::ConfigurePending,PkgIterator()));
+ bool const SmartConf = (_config->Find("PackageManager::Configure", "all") != "all");
+ if (_config->FindB("DPkg::ConfigurePending", SmartConf) == true)
+ List.push_back(Item(Item::ConfigurePending, PkgIterator()));
// map the dpkg states to the operations that are performed
// (this is sorted in the same way as Item::Ops)
@@ -776,6 +781,13 @@ bool pkgDPkgPM::Go(int OutStatusFd)
Size += strlen(Args[n-1]);
break;
+ case Item::TriggersPending:
+ Args[n++] = "--triggers-only";
+ Size += strlen(Args[n-1]);
+ Args[n++] = "--pending";
+ Size += strlen(Args[n-1]);
+ break;
+
case Item::Install:
Args[n++] = "--unpack";
Size += strlen(Args[n-1]);
@@ -784,7 +796,9 @@ bool pkgDPkgPM::Go(int OutStatusFd)
break;
}
- if (NoTriggers == true && I->Op != Item::ConfigurePending)
+ if (NoTriggers == true && I->Op != Item::TriggersPending &&
+ I->Op != Item::ConfigurePending &&
+ (I->Op != Item::Configure || NoConfTriggers == true))
{
Args[n++] = "--no-triggers";
Size += strlen(Args[n-1]);
diff --git a/apt-pkg/deb/dpkgpm.h b/apt-pkg/deb/dpkgpm.h
index 0c266605a..43e5c7d45 100644
--- a/apt-pkg/deb/dpkgpm.h
+++ b/apt-pkg/deb/dpkgpm.h
@@ -53,7 +53,7 @@ class pkgDPkgPM : public pkgPackageManager
struct Item
{
- enum Ops {Install, Configure, Remove, Purge, ConfigurePending} Op;
+ enum Ops {Install, Configure, Remove, Purge, ConfigurePending, TriggersPending} Op;
string File;
PkgIterator Pkg;
Item(Ops Op,PkgIterator Pkg,string File = "") : Op(Op),