|
|
@@ -164,15 +164,26 @@ static std::string GetVersion(pkgCacheFile &/*CacheFile*/, pkgCache::VerIterator
|
|
|
/*}}}*/
|
|
|
static std::string GetArchitecture(pkgCacheFile &CacheFile, pkgCache::PkgIterator P)/*{{{*/
|
|
|
{
|
|
|
- pkgPolicy *policy = CacheFile.GetPolicy();
|
|
|
- pkgCache::VerIterator inst = P.CurrentVer();
|
|
|
- pkgCache::VerIterator cand = policy->GetCandidateVer(P);
|
|
|
-
|
|
|
- // this may happen for packages in dpkg "deinstall ok config-file" state
|
|
|
- if (inst.IsGood() == false && cand.IsGood() == false)
|
|
|
- return P.VersionList().Arch();
|
|
|
-
|
|
|
- return inst ? inst.Arch() : cand.Arch();
|
|
|
+ if (P->CurrentVer == 0)
|
|
|
+ {
|
|
|
+ pkgDepCache * const DepCache = CacheFile.GetDepCache();
|
|
|
+ pkgDepCache::StateCache const &state = (*DepCache)[P];
|
|
|
+ if (state.CandidateVer != NULL)
|
|
|
+ {
|
|
|
+ pkgCache::VerIterator const CandV(CacheFile, state.CandidateVer);
|
|
|
+ return CandV.Arch();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ pkgCache::VerIterator const V = P.VersionList();
|
|
|
+ if (V.end() == false)
|
|
|
+ return V.Arch();
|
|
|
+ else
|
|
|
+ return P.Arch();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ return P.CurrentVer().Arch();
|
|
|
}
|
|
|
/*}}}*/
|
|
|
static std::string GetShortDescription(pkgCacheFile &CacheFile, pkgRecords &records, pkgCache::PkgIterator P)/*{{{*/
|
|
|
@@ -200,77 +211,69 @@ void ListSingleVersion(pkgCacheFile &CacheFile, pkgRecords &records, /*{{{*/
|
|
|
pkgCache::VerIterator V, std::ostream &out,
|
|
|
bool include_summary)
|
|
|
{
|
|
|
- pkgCache::PkgIterator P = V.ParentPkg();
|
|
|
-
|
|
|
- pkgDepCache *DepCache = CacheFile.GetDepCache();
|
|
|
- pkgDepCache::StateCache &state = (*DepCache)[P];
|
|
|
-
|
|
|
- std::string suite = GetArchiveSuite(CacheFile, V);
|
|
|
- std::string name_str = P.Name();
|
|
|
+ pkgCache::PkgIterator const P = V.ParentPkg();
|
|
|
+ pkgDepCache * const DepCache = CacheFile.GetDepCache();
|
|
|
+ pkgDepCache::StateCache const &state = (*DepCache)[P];
|
|
|
|
|
|
+ std::string output;
|
|
|
if (_config->FindB("APT::Cmd::use-format", false))
|
|
|
+ output = _config->Find("APT::Cmd::format", "${db::Status-Abbrev} ${Package} ${Version} ${Origin} ${Description}");
|
|
|
+ else
|
|
|
{
|
|
|
- std::string format = _config->Find("APT::Cmd::format", "${db::Status-Abbrev} ${Package} ${Version} ${Origin} ${Description}");
|
|
|
- std::string output = format;
|
|
|
-
|
|
|
- output = SubstVar(output, "${db::Status-Abbrev}", GetFlagsStr(CacheFile, P));
|
|
|
- output = SubstVar(output, "${Package}", name_str);
|
|
|
- output = SubstVar(output, "${installed:Version}", GetInstalledVersion(CacheFile, P));
|
|
|
- output = SubstVar(output, "${candidate:Version}", GetCandidateVersion(CacheFile, P));
|
|
|
- output = SubstVar(output, "${Version}", GetVersion(CacheFile, V));
|
|
|
- output = SubstVar(output, "${Description}", GetShortDescription(CacheFile, records, P));
|
|
|
- output = SubstVar(output, "${Origin}", GetArchiveSuite(CacheFile, V));
|
|
|
- out << output;
|
|
|
- } else {
|
|
|
- // raring/linux-kernel version [upradable: new-version]
|
|
|
+ // linux-kernel/unstable version [installed,upradable to: new-version]
|
|
|
// description
|
|
|
- pkgPolicy *policy = CacheFile.GetPolicy();
|
|
|
- std::string VersionStr = GetVersion(CacheFile, V);
|
|
|
- std::string CandidateVerStr = GetCandidateVersion(CacheFile, P);
|
|
|
- std::string InstalledVerStr = GetInstalledVersion(CacheFile, P);
|
|
|
- std::string StatusStr;
|
|
|
- if(P.CurrentVer() == V && state.Upgradable())
|
|
|
+ output = "${color:highlight}${Package}${color:neutral}/${Origin} ${Version} ${Architecture} ${apt:Status}";
|
|
|
+ }
|
|
|
+
|
|
|
+ // FIXME: some of these names are really icky – and all is nowhere documented
|
|
|
+ output = SubstVar(output, "${db::Status-Abbrev}", GetFlagsStr(CacheFile, P));
|
|
|
+ output = SubstVar(output, "${Package}", P.Name());
|
|
|
+ std::string const ArchStr = GetArchitecture(CacheFile, P);
|
|
|
+ output = SubstVar(output, "${Architecture}", ArchStr);
|
|
|
+ std::string const InstalledVerStr = GetInstalledVersion(CacheFile, P);
|
|
|
+ output = SubstVar(output, "${installed:Version}", InstalledVerStr);
|
|
|
+ std::string const CandidateVerStr = GetCandidateVersion(CacheFile, P);
|
|
|
+ output = SubstVar(output, "${candidate:Version}", CandidateVerStr);
|
|
|
+ std::string const VersionStr = GetVersion(CacheFile, V);
|
|
|
+ output = SubstVar(output, "${Version}", VersionStr);
|
|
|
+ output = SubstVar(output, "${Origin}", GetArchiveSuite(CacheFile, V));
|
|
|
+
|
|
|
+ std::string StatusStr = "";
|
|
|
+ if (P->CurrentVer != 0)
|
|
|
+ {
|
|
|
+ if (P.CurrentVer() == V)
|
|
|
{
|
|
|
- strprintf(StatusStr, _("[installed,upgradable to: %s]"),
|
|
|
- CandidateVerStr.c_str());
|
|
|
- } else if (P.CurrentVer() == V) {
|
|
|
- if(!V.Downloadable())
|
|
|
- StatusStr = _("[installed,local]");
|
|
|
- else
|
|
|
- if(V.Automatic() && state.Garbage)
|
|
|
- StatusStr = _("[installed,auto-removable]");
|
|
|
- else if (state.Flags & pkgCache::Flag::Auto)
|
|
|
- StatusStr = _("[installed,automatic]");
|
|
|
- else
|
|
|
- StatusStr = _("[installed]");
|
|
|
- } else if (P.CurrentVer() &&
|
|
|
- policy->GetCandidateVer(P) == V &&
|
|
|
- state.Upgradable()) {
|
|
|
- strprintf(StatusStr, _("[upgradable from: %s]"),
|
|
|
- InstalledVerStr.c_str());
|
|
|
- } else {
|
|
|
- if (V.ParentPkg()->CurrentState == pkgCache::State::ConfigFiles)
|
|
|
- StatusStr = _("[residual-config]");
|
|
|
- else
|
|
|
- StatusStr = "";
|
|
|
+ if (state.Upgradable() && state.CandidateVer != NULL)
|
|
|
+ strprintf(StatusStr, _("[installed,upgradable to: %s]"),
|
|
|
+ CandidateVerStr.c_str());
|
|
|
+ else if (V.Downloadable() == false)
|
|
|
+ StatusStr = _("[installed,local]");
|
|
|
+ else if(V.Automatic() == true && state.Garbage == true)
|
|
|
+ StatusStr = _("[installed,auto-removable]");
|
|
|
+ else if ((state.Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto)
|
|
|
+ StatusStr = _("[installed,automatic]");
|
|
|
+ else
|
|
|
+ StatusStr = _("[installed]");
|
|
|
}
|
|
|
- out << std::setiosflags(std::ios::left)
|
|
|
- << _config->Find("APT::Color::Highlight", "")
|
|
|
- << name_str
|
|
|
- << _config->Find("APT::Color::Neutral", "")
|
|
|
- << "/" << suite
|
|
|
- << " "
|
|
|
- << VersionStr << " "
|
|
|
- << GetArchitecture(CacheFile, P);
|
|
|
- if (StatusStr != "")
|
|
|
- out << " " << StatusStr;
|
|
|
+ else if (state.CandidateVer == V && state.Upgradable())
|
|
|
+ strprintf(StatusStr, _("[upgradable from: %s]"),
|
|
|
+ InstalledVerStr.c_str());
|
|
|
+ }
|
|
|
+ else if (V.ParentPkg()->CurrentState == pkgCache::State::ConfigFiles)
|
|
|
+ StatusStr = _("[residual-config]");
|
|
|
+ output = SubstVar(output, "${apt:Status}", StatusStr);
|
|
|
+ output = SubstVar(output, "${color:highlight}", _config->Find("APT::Color::Highlight", ""));
|
|
|
+ output = SubstVar(output, "${color:neutral}", _config->Find("APT::Color::Neutral", ""));
|
|
|
+
|
|
|
+ output = APT::String::Strip(output);
|
|
|
+ if (_config->FindB("APT::Cmd::use-format", false) == false)
|
|
|
+ {
|
|
|
if (include_summary)
|
|
|
- {
|
|
|
- out << std::endl
|
|
|
- << " " << GetShortDescription(CacheFile, records, P)
|
|
|
- << std::endl;
|
|
|
- }
|
|
|
+ output += "\n ${Description}\n";
|
|
|
}
|
|
|
+ output = SubstVar(output, "${Description}", GetShortDescription(CacheFile, records, P));
|
|
|
+
|
|
|
+ out << output;
|
|
|
}
|
|
|
/*}}}*/
|
|
|
// ShowList - Show a list /*{{{*/
|