summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2016-04-28 15:03:55 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2016-05-01 10:50:24 +0200
commitd622baeea4828b4bf62d939b7a4a7cd4051f78a5 (patch)
tree65902a4caa3e3e75eafdbc600175b35588f70ae8
parent0264502c2ed8da69358959d6dc7beb67f422b5cf (diff)
show StateCache flags in Pkg debug prettyprint
This basically introduces ~33 flags in the output, but a package can have only ~11 of them displayed at the same time. There is quiet a bit of duplication also (an uninstalled package is by definition a newinstall if its getting installed), but as this is debug output we are better of showing them all in case one of them isn't set in a way it is supposed to be set. Git-Dch: Ignore
-rw-r--r--apt-pkg/prettyprinters.cc93
-rw-r--r--apt-pkg/prettyprinters.h8
-rwxr-xr-xtest/integration/test-bug-549968-install-depends-of-not-installed4
-rwxr-xr-xtest/integration/test-bug-604222-new-and-autoremove14
-rwxr-xr-xtest/integration/test-bug-618848-always-respect-user-requests18
5 files changed, 102 insertions, 35 deletions
diff --git a/apt-pkg/prettyprinters.cc b/apt-pkg/prettyprinters.cc
index a736cabf4..87e78bbde 100644
--- a/apt-pkg/prettyprinters.cc
+++ b/apt-pkg/prettyprinters.cc
@@ -21,19 +21,86 @@ std::ostream& operator<<(std::ostream& os, const APT::PrettyPkg& pp) /*{{{*/
if (pp.Pkg.end() == true)
return os << "invalid package";
- std::string current = (pp.Pkg.CurVersion() == 0 ? "none" : pp.Pkg.CurVersion());
- std::string candidate = (*pp.DepCache)[pp.Pkg].CandVersion;
- std::string newest = (pp.Pkg.VersionList().end() ? "none" : pp.Pkg.VersionList().VerStr());
-
- os << pp.Pkg.Name() << " [ " << pp.Pkg.Arch() << " ] < " << current;
- if (current != candidate)
- os << " -> " << candidate;
- if ( newest != "none" && candidate != newest)
- os << " | " << newest;
- if (pp.Pkg->VersionList == 0)
- os << " > ( none )";
- else
- os << " > ( " << (pp.Pkg.VersionList().Section()==0?"unknown":pp.Pkg.VersionList().Section()) << " )";
+ auto state = (*pp.DepCache)[pp.Pkg];
+ std::string const current = (pp.Pkg.CurVersion() == 0 ? "none" : pp.Pkg.CurVersion());
+ std::string candidate = state.CandVersion;
+ if (candidate.empty())
+ candidate = "none";
+ std::string install = "none";
+ if (state.InstallVer != nullptr)
+ install = state.InstVerIter(*pp.DepCache).VerStr();
+
+ os << pp.Pkg.FullName(false) << " < " << current;
+ if (current != install && install != "none")
+ os << " -> " << install;
+ if (install != candidate && current != candidate)
+ os << " | " << candidate;
+ os << " @";
+ switch (pp.Pkg->SelectedState)
+ {
+ case pkgCache::State::Unknown: os << 'u'; break;
+ case pkgCache::State::Install: os << 'i'; break;
+ case pkgCache::State::Hold: os << 'h'; break;
+ case pkgCache::State::DeInstall: os << 'r'; break;
+ case pkgCache::State::Purge: os << 'p'; break;
+ default: os << 'X';
+ }
+ switch (pp.Pkg->InstState)
+ {
+ case pkgCache::State::Ok: break;
+ case pkgCache::State::ReInstReq: os << 'R'; break;
+ case pkgCache::State::HoldInst: os << 'H'; break;
+ case pkgCache::State::HoldReInstReq: os << "HR"; break;
+ default: os << 'X';
+ }
+ switch (pp.Pkg->CurrentState)
+ {
+ case pkgCache::State::NotInstalled: os << 'n'; break;
+ case pkgCache::State::ConfigFiles: os << 'c'; break;
+ case pkgCache::State::HalfInstalled: os << 'H'; break;
+ case pkgCache::State::UnPacked: os << 'U'; break;
+ case pkgCache::State::HalfConfigured: os << 'F'; break;
+ case pkgCache::State::TriggersAwaited: os << 'W'; break;
+ case pkgCache::State::TriggersPending: os << 'T'; break;
+ case pkgCache::State::Installed: os << 'i'; break;
+ default: os << 'X';
+ }
+ os << ' ';
+ if (state.Protect())
+ os << "p";
+ if (state.ReInstall())
+ os << "r";
+ if (state.Upgradable())
+ os << "u";
+ if (state.Marked)
+ os << "m";
+ if (state.Garbage)
+ os << "g";
+ if (state.NewInstall())
+ os << "N";
+ else if (state.Upgrade())
+ os << "U";
+ else if (state.Downgrade())
+ os << "D";
+ else if (state.Install())
+ os << "I";
+ else if (state.Purge())
+ os << "P";
+ else if (state.Delete())
+ os << "R";
+ else if (state.Held())
+ os << "H";
+ else if (state.Keep())
+ os << "K";
+ if (state.NowBroken())
+ os << " Nb";
+ else if (state.NowPolicyBroken())
+ os << " NPb";
+ if (state.InstBroken())
+ os << " Ib";
+ else if (state.InstPolicyBroken())
+ os << " IPb";
+ os << " >";
return os;
}
/*}}}*/
diff --git a/apt-pkg/prettyprinters.h b/apt-pkg/prettyprinters.h
index 4af0ecebd..51d9f81a0 100644
--- a/apt-pkg/prettyprinters.h
+++ b/apt-pkg/prettyprinters.h
@@ -14,9 +14,9 @@ namespace APT {
*/
struct PrettyPkg
{
- pkgDepCache const * const DepCache;
+ pkgDepCache * const DepCache;
pkgCache::PkgIterator const Pkg;
- PrettyPkg(pkgDepCache const * const depcache, pkgCache::PkgIterator const &pkg) APT_NONNULL(2) : DepCache(depcache), Pkg(pkg) {}
+ PrettyPkg(pkgDepCache * const depcache, pkgCache::PkgIterator const &pkg) APT_NONNULL(2) : DepCache(depcache), Pkg(pkg) {}
};
/** helper to format DepIterator for easier printing in debug messages.
*
@@ -25,9 +25,9 @@ struct PrettyPkg
*/
struct PrettyDep
{
- pkgDepCache const * const DepCache;
+ pkgDepCache * const DepCache;
pkgCache::DepIterator const Dep;
- PrettyDep(pkgDepCache const * const depcache, pkgCache::DepIterator const &dep) APT_NONNULL(2) : DepCache(depcache), Dep(dep) {}
+ PrettyDep(pkgDepCache * const depcache, pkgCache::DepIterator const &dep) APT_NONNULL(2) : DepCache(depcache), Dep(dep) {}
};
}
diff --git a/test/integration/test-bug-549968-install-depends-of-not-installed b/test/integration/test-bug-549968-install-depends-of-not-installed
index a189f9c93..fab67c4e9 100755
--- a/test/integration/test-bug-549968-install-depends-of-not-installed
+++ b/test/integration/test-bug-549968-install-depends-of-not-installed
@@ -16,8 +16,8 @@ setupaptarchive
# prevent it, but to late - its better to fail earlier
testsuccessequal "Reading package lists...
Building dependency tree...
- MarkInstall coolstuff [ i386 ] < none -> 1.0 > ( other ) FU=1
- Ignore MarkInstall of extracoolstuff [ i386 ] < none -> 1.0 > ( other ) as its mode (Keep) is protected
+ MarkInstall coolstuff:i386 < none -> 1.0 @un puN IPb > FU=1
+ Ignore MarkInstall of extracoolstuff:i386 < none | 1.0 @hn puH > as its mode (Keep) is protected
Package 'extracoolstuff' is not installed, so not removed
Recommended packages:
extracoolstuff
diff --git a/test/integration/test-bug-604222-new-and-autoremove b/test/integration/test-bug-604222-new-and-autoremove
index 48d79ea77..b6bb9ddea 100755
--- a/test/integration/test-bug-604222-new-and-autoremove
+++ b/test/integration/test-bug-604222-new-and-autoremove
@@ -76,13 +76,13 @@ rm rootdir/var/lib/apt/extended_states
CONFLICTING='Reading package lists...
Building dependency tree...
- MarkInstall dummy-archive [ i386 ] < none -> 0.invalid.0 > ( admin ) FU=1
- MarkInstall libavcodec52 [ i386 ] < none -> 4:0.5.2-6 > ( libs ) FU=0
- MarkInstall libvtk5-dev [ i386 ] < none -> 5.4.2-8 > ( libdevel ) FU=0
- MarkInstall libvtk5.4 [ i386 ] < none -> 5.4.2-8 > ( libs ) FU=0
- MarkKeep libvtk5-dev [ i386 ] < none -> 5.4.2-8 > ( libdevel ) FU=0
- MarkKeep libvtk5-dev [ i386 ] < none -> 5.4.2-8 > ( libdevel ) FU=0
- MarkDelete libvtk5.4 [ i386 ] < none -> 5.4.2-8 > ( libs ) FU=0
+ MarkInstall dummy-archive:i386 < none -> 0.invalid.0 @un puN Ib > FU=1
+ MarkInstall libavcodec52:i386 < none -> 4:0.5.2-6 @un uN > FU=0
+ MarkInstall libvtk5-dev:i386 < none -> 5.4.2-8 @un uN Ib > FU=0
+ MarkInstall libvtk5.4:i386 < none -> 5.4.2-8 @un uN > FU=0
+ MarkKeep libvtk5-dev:i386 < none -> 5.4.2-8 @un uN > FU=0
+ MarkKeep libvtk5-dev:i386 < none -> 5.4.2-8 @un uN > FU=0
+ MarkDelete libvtk5.4:i386 < none -> 5.4.2-8 @un ugN > FU=0
The following additional packages will be installed:
libavcodec52 libopenal-dev
The following NEW packages will be installed:
diff --git a/test/integration/test-bug-618848-always-respect-user-requests b/test/integration/test-bug-618848-always-respect-user-requests
index 7d2b35f9e..fa190a93d 100755
--- a/test/integration/test-bug-618848-always-respect-user-requests
+++ b/test/integration/test-bug-618848-always-respect-user-requests
@@ -15,18 +15,18 @@ setupaptarchive
testsuccessequal 'Reading package lists...
Building dependency tree...
- MarkDelete libdb4.8 [ i386 ] < 1.0 > ( other ) FU=1
- MarkDelete exim4-daemon-light [ i386 ] < 1.0 > ( other ) FU=0
- MarkInstall exim4-daemon-heavy [ i386 ] < none -> 1.0 > ( other ) FU=0
- Ignore MarkInstall of libdb4.8 [ i386 ] < 1.0 > ( other ) as its mode (Delete) is protected
- MarkDelete exim4-daemon-heavy [ i386 ] < none -> 1.0 > ( other ) FU=0
- MarkDelete exim4 [ i386 ] < 1.0 > ( other ) FU=0
+ MarkDelete libdb4.8:i386 < 1.0 @ii pmK > FU=1
+ MarkDelete exim4-daemon-light:i386 < 1.0 @ii mK Ib > FU=0
+ MarkInstall exim4-daemon-heavy:i386 < none -> 1.0 @un uN Ib > FU=0
+ Ignore MarkInstall of libdb4.8:i386 < 1.0 @ii pmR > as its mode (Delete) is protected
+ MarkDelete exim4-daemon-heavy:i386 < none -> 1.0 @un uN Ib > FU=0
+ MarkDelete exim4:i386 < 1.0 @ii mK Ib > FU=0
The following packages will be REMOVED:
exim4 exim4-daemon-light libdb4.8
- MarkDelete exim4 [ i386 ] < 1.0 > ( other ) FU=1
+ MarkDelete exim4:i386 < 1.0 @ii K > FU=1
0 upgraded, 0 newly installed, 3 to remove and 0 not upgraded.
Remv exim4 [1.0]
- MarkDelete exim4-daemon-light [ i386 ] < 1.0 > ( other ) FU=1
+ MarkDelete exim4-daemon-light:i386 < 1.0 @ii K > FU=1
Remv exim4-daemon-light [1.0]
- MarkDelete libdb4.8 [ i386 ] < 1.0 > ( other ) FU=1
+ MarkDelete libdb4.8:i386 < 1.0 @ii K > FU=1
Remv libdb4.8 [1.0]' aptget remove libdb4.8 -s -o Debug::pkgDepCache::Marker=1