summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2025-03-03 10:44:50 +0000
committerJulian Andres Klode <jak@debian.org>2025-03-03 10:44:50 +0000
commit939aa53621fd6b884b1d3d48a7abc55bf6c16ca4 (patch)
tree80062a0bc3aa8c8ac8b248868e77680e4972f92a /apt-pkg
parentc21598657c8e3e7eaf4f3337774878d1463a8711 (diff)
parent45b04762e1990a761a7c308f9e73a286a92f908a (diff)
Merge branch 'edsp-downloadable' into 'main'
Consider 0-size debs not downloadable, set a size in EDSP See merge request apt-team/apt!454
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/cachefilter-patterns.h7
-rw-r--r--apt-pkg/edsp.cc2
-rw-r--r--apt-pkg/edsp/edsplistparser.cc5
-rw-r--r--apt-pkg/pkgcache.cc4
-rw-r--r--apt-pkg/solver3.cc11
5 files changed, 18 insertions, 11 deletions
diff --git a/apt-pkg/cachefilter-patterns.h b/apt-pkg/cachefilter-patterns.h
index 07b7ac61b..8d8a62a9f 100644
--- a/apt-pkg/cachefilter-patterns.h
+++ b/apt-pkg/cachefilter-patterns.h
@@ -249,11 +249,8 @@ struct APT_HIDDEN PackageIsObsolete : public PackageMatcher
// if so return false
for (auto ver = pkg.VersionList(); !ver.end(); ver++)
{
- for (auto file = ver.FileList(); !file.end(); file++)
- {
- if ((file.File()->Flags & pkgCache::Flag::NotSource) == 0)
- return false;
- }
+ if (ver.Downloadable())
+ return false;
}
return true;
diff --git a/apt-pkg/edsp.cc b/apt-pkg/edsp.cc
index 6e02369c9..196f9d307 100644
--- a/apt-pkg/edsp.cc
+++ b/apt-pkg/edsp.cc
@@ -243,6 +243,8 @@ static bool WriteScenarioEDSPVersion(pkgDepCache &Cache, FileFd &output, pkgCach
WriteOkay(Okay, output, "\nPriority: ", Prio);
if (Ver->Section != 0)
WriteOkay(Okay, output, "\nSection: ", Ver.Section());
+ if (Ver->Size != 0)
+ WriteOkay(Okay, output, "\nSize: ", Ver->Size);
if (Pkg.CurrentVer() == Ver)
WriteOkay(Okay, output, "\nInstalled: yes");
if (Pkg->SelectedState == pkgCache::State::Hold ||
diff --git a/apt-pkg/edsp/edsplistparser.cc b/apt-pkg/edsp/edsplistparser.cc
index f591a6a54..a3cdf794f 100644
--- a/apt-pkg/edsp/edsplistparser.cc
+++ b/apt-pkg/edsp/edsplistparser.cc
@@ -56,6 +56,11 @@ bool edspLikeListParser::NewVersion(pkgCache::VerIterator &Ver)
}
}
+ // If we have a Size field, use it, otherwise fake one based on APT-Release to
+ // be able to distinguish downloadable debs from installed ones.
+ Ver->Size = Section.Exists(pkgTagSection::Key::Size)
+ ? Section.FindI(pkgTagSection::Key::Size)
+ : Section.Exists("APT-Release");
return true;
}
/*}}}*/
diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc
index a27b1b054..4101fb4e5 100644
--- a/apt-pkg/pkgcache.cc
+++ b/apt-pkg/pkgcache.cc
@@ -864,6 +864,10 @@ int pkgCache::VerIterator::CompareVer(const VerIterator &B) const
/* */
APT_PURE bool pkgCache::VerIterator::Downloadable() const
{
+ // A zero size deb is not downloadable
+ if (S->Size == 0)
+ return false;
+
VerFileIterator Files = FileList();
for (; Files.end() == false; ++Files)
if (Files.File().Flagged(pkgCache::Flag::NotSource) == false)
diff --git a/apt-pkg/solver3.cc b/apt-pkg/solver3.cc
index 7117296ab..c1a1098b5 100644
--- a/apt-pkg/solver3.cc
+++ b/apt-pkg/solver3.cc
@@ -336,12 +336,11 @@ bool APT::Solver::Obsolete(pkgCache::PkgIterator pkg) const
if (ObsoletedByNewerSourceVersion(ver))
return true;
- for (auto file = ver.FileList(); !file.end(); file++)
- if ((file.File()->Flags & pkgCache::Flag::NotSource) == 0)
- {
- pkgObsolete[pkg] = 1;
- return false;
- }
+ if (ver.Downloadable())
+ {
+ pkgObsolete[pkg] = 1;
+ return false;
+ }
if (debug >= 3)
std::cerr << "Obsolete: " << ver.ParentPkg().FullName() << "=" << ver.VerStr() << " - not installable\n";
pkgObsolete[pkg] = 2;