Browse Source

better non-virtual metaIndex.LocalFileName() implementation

We can't add a new virtual method without breaking the ABI, but we can
freely add new methods, so for older ABIs we just implement this method
with a dynamic_cast, so that clients can be more ignorant about the API
here and especially don't need to pull a very dirty trick by assuming
internal knowledge (like apt-get did here).
tags/debian/1.1.exp9
David Kalnischkies 7 years ago
parent
commit
f105aaba43
6 changed files with 51 additions and 50 deletions
  1. +0
    -2
      apt-pkg/deb/debmetaindex.cc
  2. +2
    -1
      apt-pkg/deb/debmetaindex.h
  3. +40
    -0
      apt-pkg/metaindex.cc
  4. +6
    -19
      apt-pkg/metaindex.h
  5. +2
    -28
      cmdline/apt-get.cc
  6. +1
    -0
      debian/libapt-pkg4.15.symbols

+ 0
- 2
apt-pkg/deb/debmetaindex.cc View File

@@ -78,7 +78,6 @@ string debReleaseIndex::MetaIndexURI(const char *Type) const
return Res;
}

#if APT_PKG_ABI >= 0x0413
std::string debReleaseIndex::LocalFileName() const
{
// see if we have a InRelease file
@@ -92,7 +91,6 @@ std::string debReleaseIndex::LocalFileName() const

return "";
}
#endif

string debReleaseIndex::IndexURISuffix(const char *Type, string const &Section, string const &Arch) const
{


+ 2
- 1
apt-pkg/deb/debmetaindex.h View File

@@ -54,8 +54,9 @@ class debReleaseIndex : public metaIndex {
std::string MetaIndexURI(const char *Type) const;

#if APT_PKG_ABI >= 413
virtual std::string LocalFileName() const;
virtual
#endif
std::string LocalFileName() const;

std::string IndexURI(const char *Type, std::string const &Section, std::string const &Arch="native") const;
std::string IndexURISuffix(const char *Type, std::string const &Section, std::string const &Arch="native") const;


+ 40
- 0
apt-pkg/metaindex.cc View File

@@ -0,0 +1,40 @@
// Include Files /*{{{*/
#include <apt-pkg/indexfile.h>
#include <apt-pkg/metaindex.h>

#include <stddef.h>

#include <string>
#include <vector>
/*}}}*/

#if (APT_PKG_MAJOR >= 4 && APT_PKG_MINOR >= 13)
std::string metaIndex::LocalFileName() const { return ""; }
#else
#include <apt-pkg/debmetaindex.h>
std::string metaIndex::LocalFileName() const
{
debReleaseIndex const * deb = dynamic_cast<debReleaseIndex const*>(this);
if (deb != NULL)
return deb->LocalFileName();

return "";
}
#endif

metaIndex::metaIndex(std::string const &URI, std::string const &Dist,
char const * const Type)
: Indexes(NULL), Type(Type), URI(URI), Dist(Dist), Trusted(false)
{
/* nothing */
}

metaIndex::~metaIndex()
{
if (Indexes == 0)
return;
for (std::vector<pkgIndexFile *>::iterator I = (*Indexes).begin();
I != (*Indexes).end(); ++I)
delete *I;
delete Indexes;
}

+ 6
- 19
apt-pkg/metaindex.h View File

@@ -41,8 +41,8 @@ class metaIndex

// interface to to query it
#if APT_PKG_ABI >= 413
// returns the path of the local file (or "" if its not available)
virtual std::string LocalFileName() const {return "";};
/** \return the path of the local file (or "" if its not available) */
virtual std::string LocalFileName() const;
#else
std::string LocalFileName() const;
#endif
@@ -50,25 +50,12 @@ class metaIndex
// Interface for acquire
virtual std::string ArchiveURI(std::string const& File) const = 0;
virtual bool GetIndexes(pkgAcquire *Owner, bool const &GetAll=false) const = 0;
virtual std::vector<pkgIndexFile *> *GetIndexFiles() = 0;
virtual std::vector<pkgIndexFile *> *GetIndexFiles() = 0;
virtual bool IsTrusted() const = 0;

metaIndex(std::string const &URI, std::string const &Dist,
char const * const Type)
: Indexes(NULL), Type(Type), URI(URI), Dist(Dist), Trusted(false)
{
/* nothing */
}

virtual ~metaIndex()
{
if (Indexes == 0)
return;
for (std::vector<pkgIndexFile *>::iterator I = (*Indexes).begin();
I != (*Indexes).end(); ++I)
delete *I;
delete Indexes;
}
metaIndex(std::string const &URI, std::string const &Dist,
char const * const Type);
virtual ~metaIndex();
};

#endif

+ 2
- 28
cmdline/apt-get.cc View File

@@ -136,28 +136,6 @@ static bool TryToInstallBuildDep(pkgCache::PkgIterator Pkg,pkgCacheFile &Cache,
return true;
}
/*}}}*/


// helper that can go wit hthe next ABI break
#if (APT_PKG_MAJOR >= 4 && APT_PKG_MINOR < 13)
static std::string MetaIndexFileNameOnDisk(metaIndex *metaindex)
{
// FIXME: this cast is the horror, the horror
debReleaseIndex *r = (debReleaseIndex*)metaindex;

// see if we have a InRelease file
std::string PathInRelease = r->MetaIndexFile("InRelease");
if (FileExists(PathInRelease))
return PathInRelease;

// and if not return the normal one
if (FileExists(PathInRelease))
return r->MetaIndexFile("Release");

return "";
}
#endif

// GetReleaseForSourceRecord - Return Suite for the given srcrecord /*{{{*/
// ---------------------------------------------------------------------
/* */
@@ -176,12 +154,8 @@ static std::string GetReleaseForSourceRecord(pkgSourceList *SrcList,
{
if (&CurrentIndexFile == (*IF))
{
#if (APT_PKG_MAJOR >= 4 && APT_PKG_MINOR < 13)
std::string path = MetaIndexFileNameOnDisk(*S);
#else
std::string path = (*S)->LocalFileName();
#endif
if (path != "")
std::string const path = (*S)->LocalFileName();
if (path != "")
{
indexRecords records;
records.Load(path);


+ 1
- 0
debian/libapt-pkg4.15.symbols View File

@@ -1789,6 +1789,7 @@ libapt-pkg.so.4.15 libapt-pkg4.15 #MINVER#
(c++)"indexRecords::IsAlwaysTrusted() const@Base" 1.1~exp5
(c++)"indexRecords::IsNeverTrusted() const@Base" 1.1~exp5
(c++)"indexRecords::SetTrusted(bool)@Base" 1.1~exp5
(c++)"metaIndex::metaIndex(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)@Base" 1.1~exp9
### demangle strangeness - buildd report it as MISSING and as new…
(c++)"pkgAcqMetaIndex::pkgAcqMetaIndex(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<IndexTarget*, std::allocator<IndexTarget*> > const*, indexRecords*)@Base" 0.8.0
(c++)"pkgAcqMetaSig::pkgAcqMetaSig(pkgAcquire*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<IndexTarget*, std::allocator<IndexTarget*> > const*, indexRecords*)@Base" 0.8.0


Loading…
Cancel
Save