summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/deb/debmetaindex.cc4
-rw-r--r--apt-pkg/deb/debmetaindex.h2
-rw-r--r--apt-pkg/indexfile.cc12
-rw-r--r--apt-pkg/indexfile.h1
-rw-r--r--apt-pkg/metaindex.cc2
-rw-r--r--apt-pkg/metaindex.h2
-rw-r--r--apt-pkg/pkgcachegen.cc4
7 files changed, 20 insertions, 7 deletions
diff --git a/apt-pkg/deb/debmetaindex.cc b/apt-pkg/deb/debmetaindex.cc
index 994b95849..b328fcea8 100644
--- a/apt-pkg/deb/debmetaindex.cc
+++ b/apt-pkg/deb/debmetaindex.cc
@@ -422,7 +422,7 @@ bool debReleaseIndex::Merge(pkgCacheGenerator &Gen,OpProgress * /*Prog*/) const/
}
/*}}}*/
// ReleaseIndex::FindInCache - Find this index /*{{{*/
-pkgCache::RlsFileIterator debReleaseIndex::FindInCache(pkgCache &Cache) const
+pkgCache::RlsFileIterator debReleaseIndex::FindInCache(pkgCache &Cache, bool const ModifyCheck) const
{
std::string ReleaseFile;
bool const releaseExists = ReleaseFileName(this, ReleaseFile);
@@ -434,7 +434,7 @@ pkgCache::RlsFileIterator debReleaseIndex::FindInCache(pkgCache &Cache) const
continue;
// empty means the file does not exist by "design"
- if (releaseExists == false && File->Size == 0)
+ if (ModifyCheck == false || (releaseExists == false && File->Size == 0))
return File;
struct stat St;
diff --git a/apt-pkg/deb/debmetaindex.h b/apt-pkg/deb/debmetaindex.h
index 7e9942710..b448ecc53 100644
--- a/apt-pkg/deb/debmetaindex.h
+++ b/apt-pkg/deb/debmetaindex.h
@@ -51,7 +51,7 @@ class APT_HIDDEN debReleaseIndex : public metaIndex {
virtual std::vector<IndexTarget> GetIndexTargets() const;
virtual std::string Describe() const;
- virtual pkgCache::RlsFileIterator FindInCache(pkgCache &Cache) const;
+ virtual pkgCache::RlsFileIterator FindInCache(pkgCache &Cache, bool const ModifyCheck) const;
virtual bool Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const;
std::string MetaIndexInfo(const char *Type) const;
diff --git a/apt-pkg/indexfile.cc b/apt-pkg/indexfile.cc
index 33fb48e35..605bbeb47 100644
--- a/apt-pkg/indexfile.cc
+++ b/apt-pkg/indexfile.cc
@@ -137,6 +137,18 @@ std::string IndexTarget::Option(OptionKeys const EnumKey) const /*{{{*/
APT_CASE(CREATED_BY);
#undef APT_CASE
case FILENAME: return _config->FindDir("Dir::State::lists") + URItoFileName(URI);
+ case EXISTING_FILENAME:
+ std::string const filename = Option(FILENAME);
+ std::vector<std::string> const types = APT::Configuration::getCompressionTypes();
+ for (std::vector<std::string>::const_iterator t = types.begin(); t != types.end(); ++t)
+ {
+ if (t->empty())
+ continue;
+ std::string const file = (*t == "uncompressed") ? filename : (filename + "." + *t);
+ if (FileExists(file))
+ return file;
+ }
+ return "";
}
std::map<std::string,std::string>::const_iterator const M = Options.find(Key);
if (M == Options.end())
diff --git a/apt-pkg/indexfile.h b/apt-pkg/indexfile.h
index 220c415ac..042e5c2f7 100644
--- a/apt-pkg/indexfile.h
+++ b/apt-pkg/indexfile.h
@@ -81,6 +81,7 @@ class IndexTarget /*{{{*/
CREATED_BY,
TARGET_OF,
FILENAME,
+ EXISTING_FILENAME,
};
std::string Option(OptionKeys const Key) const;
std::string Format(std::string format) const;
diff --git a/apt-pkg/metaindex.cc b/apt-pkg/metaindex.cc
index 35ab6c53b..3c1b696bd 100644
--- a/apt-pkg/metaindex.cc
+++ b/apt-pkg/metaindex.cc
@@ -28,7 +28,7 @@ std::string metaIndex::Describe() const
return "Release";
}
-pkgCache::RlsFileIterator metaIndex::FindInCache(pkgCache &Cache) const
+pkgCache::RlsFileIterator metaIndex::FindInCache(pkgCache &Cache, bool const) const
{
return pkgCache::RlsFileIterator(Cache);
}
diff --git a/apt-pkg/metaindex.h b/apt-pkg/metaindex.h
index 20c879a89..e1810fb27 100644
--- a/apt-pkg/metaindex.h
+++ b/apt-pkg/metaindex.h
@@ -54,7 +54,7 @@ class metaIndex
virtual bool IsTrusted() const = 0;
virtual std::string Describe() const;
- virtual pkgCache::RlsFileIterator FindInCache(pkgCache &Cache) const;
+ virtual pkgCache::RlsFileIterator FindInCache(pkgCache &Cache, bool const ModifyCheck) const;
virtual bool Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const;
metaIndex(std::string const &URI, std::string const &Dist,
diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc
index 2d0e3960d..9db4ef41f 100644
--- a/apt-pkg/pkgcachegen.cc
+++ b/apt-pkg/pkgcachegen.cc
@@ -1224,7 +1224,7 @@ static bool CheckValidity(const string &CacheFile,
{
if (Debug == true)
std::clog << "Checking RlsFile " << (*i)->Describe() << ": ";
- pkgCache::RlsFileIterator const RlsFile = (*i)->FindInCache(Cache);
+ pkgCache::RlsFileIterator const RlsFile = (*i)->FindInCache(Cache, true);
if (RlsFile.end() == true)
{
if (Debug == true)
@@ -1348,7 +1348,7 @@ static bool BuildCache(pkgCacheGenerator &Gen,
{
for (pkgSourceList::const_iterator i = List->begin(); i != List->end(); ++i)
{
- if ((*i)->FindInCache(Gen.GetCache()).end() == false)
+ if ((*i)->FindInCache(Gen.GetCache(), false).end() == false)
{
_error->Warning("Duplicate sources.list entry %s",
(*i)->Describe().c_str());