summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2015-06-12 12:06:29 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2015-06-15 14:39:37 +0200
commit3fd89e62e985c89b1f9a545ab72c20987b756aff (patch)
treede6b0f9d7b6d138fbd1f177524a23a8d41481287 /apt-pkg
parentb07aeb1a6e24825e534167a737043441e871de9f (diff)
implement default apt-get file --release-info mode
Selecting targets based on the Release they belong to isn't to unrealistic. In fact, it is assumed to be the most used case so it is made the default especially as this allows to bundle another thing we have to be careful with: Filenames and only showing targets we have acquired. Closes: 752702
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());