summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/deb/debmetaindex.cc42
1 files changed, 22 insertions, 20 deletions
diff --git a/apt-pkg/deb/debmetaindex.cc b/apt-pkg/deb/debmetaindex.cc
index f756cdb1f..c70c39a45 100644
--- a/apt-pkg/deb/debmetaindex.cc
+++ b/apt-pkg/deb/debmetaindex.cc
@@ -80,20 +80,19 @@ std::string debReleaseIndex::MetaIndexFile(const char *Type) const
return _config->FindDir("Dir::State::lists") +
URItoFileName(MetaIndexURI(Type));
}
-
-std::string debReleaseIndex::MetaIndexURI(const char *Type) const
+static std::string constructMetaIndexURI(std::string URI, std::string const &Dist, char const * const Type)
{
- std::string Res;
-
if (Dist == "/")
- Res = URI;
+ ;
else if (Dist[Dist.size()-1] == '/')
- Res = URI + Dist;
+ URI += Dist;
else
- Res = URI + "dists/" + Dist + "/";
-
- Res += Type;
- return Res;
+ URI += "dists/" + Dist + "/";
+ return URI + Type;
+}
+std::string debReleaseIndex::MetaIndexURI(const char *Type) const
+{
+ return constructMetaIndexURI(URI, Dist, Type);
}
/*}}}*/
// ReleaseIndex Con- and Destructors /*{{{*/
@@ -919,27 +918,30 @@ class APT_HIDDEN debSLTypeDebian : public pkgSourceList::Type /*{{{*/
std::string const &Dist, std::string const &Section,
bool const &IsSrc, std::map<std::string, std::string> const &Options) const
{
- debReleaseIndex *Deb = NULL;
- for (std::vector<metaIndex *>::const_iterator I = List.begin();
- I != List.end(); ++I)
+ debReleaseIndex * Deb = nullptr;
+ std::string const FileName = URItoFileName(constructMetaIndexURI(URI, Dist, "Release"));
+ for (auto const &I: List)
{
// We only worry about debian entries here
- if (strcmp((*I)->GetType(), "deb") != 0)
+ if (strcmp(I->GetType(), "deb") != 0)
+ continue;
+
+ auto const D = dynamic_cast<debReleaseIndex*>(I);
+ if (unlikely(D == nullptr))
continue;
- /* This check insures that there will be only one Release file
+ /* This check ensures that there will be only one Release file
queued for all the Packages files and Sources files it
corresponds to. */
- if ((*I)->GetURI() == URI && (*I)->GetDist() == Dist)
+ if (URItoFileName(D->MetaIndexURI("Release")) == FileName)
{
- Deb = dynamic_cast<debReleaseIndex*>(*I);
- if (Deb != NULL)
- break;
+ Deb = D;
+ break;
}
}
// No currently created Release file indexes this entry, so we create a new one.
- if (Deb == NULL)
+ if (Deb == nullptr)
{
Deb = new debReleaseIndex(URI, Dist);
List.push_back(Deb);