summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/deb/dpkgpm.cc57
1 files changed, 42 insertions, 15 deletions
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc
index 0c61a5e36..c1b9a28f4 100644
--- a/apt-pkg/deb/dpkgpm.cc
+++ b/apt-pkg/deb/dpkgpm.cc
@@ -698,28 +698,55 @@ void pkgDPkgPM::ProcessDpkgStatusLine(char *line)
if (prefix == "status")
{
- vector<struct DpkgState> const &states = PackageOps[pkg];
- if(PackageOpsDone[pkg] < states.size())
+ std::vector<struct DpkgState> &states = PackageOps[pkg];
+ if (action == "triggers-pending")
{
- char const * const next_action = states[PackageOpsDone[pkg]].state;
- if (next_action && Debug == true)
+ if (Debug == true)
std::clog << "(parsed from dpkg) pkg: " << short_pkgname
- << " action: " << action << " (expected: '" << next_action << "' "
+ << " action: " << action << " (prefix 2 to "
<< PackageOpsDone[pkg] << " of " << states.size() << ")" << endl;
- // check if the package moved to the next dpkg state
- if(next_action && (action == next_action))
+ states.insert(states.begin(), {"installed", N_("Installed %s")});
+ states.insert(states.begin(), {"half-configured", N_("Configuring %s")});
+ PackagesTotal += 2;
+ }
+ else if(PackageOpsDone[pkg] < states.size())
+ {
+ char const * next_action = states[PackageOpsDone[pkg]].state;
+ if (next_action)
{
- // only read the translation if there is actually a next action
- char const * const translation = _(states[PackageOpsDone[pkg]].str);
+ /*
+ if (action == "half-installed" && strcmp("half-configured", next_action) == 0 &&
+ PackageOpsDone[pkg] + 2 < states.size() && action == states[PackageOpsDone[pkg] + 2].state)
+ {
+ if (Debug == true)
+ std::clog << "(parsed from dpkg) pkg: " << short_pkgname << " action: " << action
+ << " pending trigger defused by unpack" << std::endl;
+ // unpacking a package defuses the pending trigger
+ PackageOpsDone[pkg] += 2;
+ PackagesDone += 2;
+ next_action = states[PackageOpsDone[pkg]].state;
+ }
+ */
+ if (Debug == true)
+ std::clog << "(parsed from dpkg) pkg: " << short_pkgname
+ << " action: " << action << " (expected: '" << next_action << "' "
+ << PackageOpsDone[pkg] << " of " << states.size() << ")" << endl;
+
+ // check if the package moved to the next dpkg state
+ if(action == next_action)
+ {
+ // only read the translation if there is actually a next action
+ char const * const translation = _(states[PackageOpsDone[pkg]].str);
- // we moved from one dpkg state to a new one, report that
- ++PackageOpsDone[pkg];
- ++PackagesDone;
+ // we moved from one dpkg state to a new one, report that
+ ++PackageOpsDone[pkg];
+ ++PackagesDone;
- std::string msg;
- strprintf(msg, translation, i18n_pkgname.c_str());
- d->progress->StatusChanged(pkgname, PackagesDone, PackagesTotal, msg);
+ std::string msg;
+ strprintf(msg, translation, i18n_pkgname.c_str());
+ d->progress->StatusChanged(pkgname, PackagesDone, PackagesTotal, msg);
+ }
}
}
}