summaryrefslogtreecommitdiffstats
path: root/apt-private
diff options
context:
space:
mode:
Diffstat (limited to 'apt-private')
-rw-r--r--apt-private/private-cmndline.cc2
-rw-r--r--apt-private/private-install.cc20
-rw-r--r--apt-private/private-main.cc2
-rw-r--r--apt-private/private-output.cc10
-rw-r--r--apt-private/private-output.h2
5 files changed, 34 insertions, 2 deletions
diff --git a/apt-private/private-cmndline.cc b/apt-private/private-cmndline.cc
index 592ebd9..ac792cb 100644
--- a/apt-private/private-cmndline.cc
+++ b/apt-private/private-cmndline.cc
@@ -353,11 +353,13 @@ static bool addArgumentsAPT(std::vector<CommandLine::Args> &Args, char const * c
addArg(0,"manual-installed","APT::Cmd::Manual-Installed",0);
addArg('v', "verbose", "APT::Cmd::List-Include-Summary", 0);
addArg('a', "all-versions", "APT::Cmd::All-Versions", 0);
+ addArg('S', "snapshot", "APT::Snapshot", CommandLine::HasArg);
}
else if (CmdMatches("show") || CmdMatches("info"))
{
addArg('a', "all-versions", "APT::Cache::AllVersions", 0);
addArg('f', "full", "APT::Cache::ShowFull", 0);
+ addArg('S', "snapshot", "APT::Snapshot", CommandLine::HasArg);
}
else if (addArgumentsAPTGet(Args, Cmd) || addArgumentsAPTCache(Args, Cmd))
{
diff --git a/apt-private/private-install.cc b/apt-private/private-install.cc
index 4f71f18..57b5c0d 100644
--- a/apt-private/private-install.cc
+++ b/apt-private/private-install.cc
@@ -658,6 +658,24 @@ bool DoAutomaticRemove(CacheFile &Cache)
if (not Cache->VS().CheckDep(PVerStr, R->CompareOp, R.TargetVer()))
continue;
}
+ // ignore new providers if we have installed providers
+ if (Pkg->CurrentVer == 0)
+ {
+ std::unique_ptr<pkgCache::Version *[]> VList(R.AllTargets());
+ bool has_installed_alt_prov = false;
+ for (pkgCache::Version **V = VList.get(); *V != 0; ++V)
+ {
+ pkgCache::VerIterator Ver(Cache, *V);
+ auto const P = Ver.ParentPkg();
+ if (not P.end() && P->CurrentVer != 0 && Cache[P].InstallVer == *V)
+ {
+ has_installed_alt_prov = true;
+ break;
+ }
+ }
+ if (has_installed_alt_prov)
+ continue;
+ }
if (Debug == true)
std::clog << "Save " << APT::PrettyPkg(Cache, Pkg) << " as another installed package depends on it: " << APT::PrettyPkg(Cache, RP) << std::endl;
Cache->MarkInstall(Pkg, false, 0, false);
@@ -711,7 +729,7 @@ bool DoAutomaticRemove(CacheFile &Cache)
"The following packages were automatically installed and are no longer required:",
autoRemoveCount), Universe,
[&Cache](pkgCache::PkgIterator const &Pkg) { return (*Cache)[Pkg].Garbage == true && (*Cache)[Pkg].Delete() == false; },
- &PrettyFullName, CandidateVersion(&Cache), "", note);
+ &PrettyFullName, CurrentVersion(&Cache), "", note);
}
else
{
diff --git a/apt-private/private-main.cc b/apt-private/private-main.cc
index f28f5cb..39ad07b 100644
--- a/apt-private/private-main.cc
+++ b/apt-private/private-main.cc
@@ -81,6 +81,8 @@ void CheckIfCalledByScript(int argc, const char *argv[]) /*{{{*/
if(!isatty(STDOUT_FILENO) &&
_config->FindB("Apt::Cmd::Disable-Script-Warning", false) == false)
{
+ // NOTE: CLI interface is redundant on the I/interface, this is
+ // intentional to make it easier to read.
std::cerr << std::endl
<< "WARNING: " << flNotDir(argv[0]) << " "
<< "does not have a stable CLI interface. "
diff --git a/apt-private/private-output.cc b/apt-private/private-output.cc
index 2e81095..4a946f2 100644
--- a/apt-private/private-output.cc
+++ b/apt-private/private-output.cc
@@ -596,7 +596,7 @@ void ShowDel(ostream &out,CacheFile &Cache)
str.append("*");
return str;
},
- CandidateVersion(&Cache),
+ CurrentVersion(&Cache),
"action::remove");
}
/*}}}*/
@@ -888,6 +888,14 @@ std::string PrettyFullName(pkgCache::PkgIterator const &Pkg)
{
return Pkg.FullName(true);
}
+std::string CurrentVersion(pkgCacheFile * const Cache, pkgCache::PkgIterator const &Pkg)
+{
+ return (*Cache)[Pkg].CurVersion;
+}
+std::function<std::string(pkgCache::PkgIterator const &)> CurrentVersion(pkgCacheFile * const Cache)
+{
+ return std::bind(static_cast<std::string(*)(pkgCacheFile * const, pkgCache::PkgIterator const&)>(&CurrentVersion), Cache, std::placeholders::_1);
+}
std::string CandidateVersion(pkgCacheFile * const Cache, pkgCache::PkgIterator const &Pkg)
{
return (*Cache)[Pkg].CandVersion;
diff --git a/apt-private/private-output.h b/apt-private/private-output.h
index 0eba6f4..8e1d472 100644
--- a/apt-private/private-output.h
+++ b/apt-private/private-output.h
@@ -132,6 +132,8 @@ APT_PUBLIC bool YnPrompt(char const *const Question, bool Default = true);
bool YnPrompt(char const * const Question, bool const Default, bool const ShowGlobalErrors, std::ostream &c1o, std::ostream &c2o);
APT_PUBLIC std::string PrettyFullName(pkgCache::PkgIterator const &Pkg);
+std::string CurrentVersion(pkgCacheFile * const Cache, pkgCache::PkgIterator const &Pkg);
+std::function<std::string(pkgCache::PkgIterator const &)> CurrentVersion(pkgCacheFile * const Cache);
std::string CandidateVersion(pkgCacheFile * const Cache, pkgCache::PkgIterator const &Pkg);
std::function<std::string(pkgCache::PkgIterator const &)> CandidateVersion(pkgCacheFile * const Cache);
std::string CurrentToCandidateVersion(pkgCacheFile * const Cache, pkgCache::PkgIterator const &Pkg);