diff options
| author | Julian Andres Klode <jak@debian.org> | 2025-03-03 10:44:50 +0000 |
|---|---|---|
| committer | Julian Andres Klode <jak@debian.org> | 2025-03-03 10:44:50 +0000 |
| commit | 939aa53621fd6b884b1d3d48a7abc55bf6c16ca4 (patch) | |
| tree | 80062a0bc3aa8c8ac8b248868e77680e4972f92a /apt-pkg | |
| parent | c21598657c8e3e7eaf4f3337774878d1463a8711 (diff) | |
| parent | 45b04762e1990a761a7c308f9e73a286a92f908a (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.h | 7 | ||||
| -rw-r--r-- | apt-pkg/edsp.cc | 2 | ||||
| -rw-r--r-- | apt-pkg/edsp/edsplistparser.cc | 5 | ||||
| -rw-r--r-- | apt-pkg/pkgcache.cc | 4 | ||||
| -rw-r--r-- | apt-pkg/solver3.cc | 11 |
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; |
