|
@@ -34,6 +34,7 @@
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
#include <stdio.h>
|
|
|
#include <iostream>
|
|
#include <iostream>
|
|
|
|
|
+#include <sstream>
|
|
|
#include <string>
|
|
#include <string>
|
|
|
#include <sys/stat.h>
|
|
#include <sys/stat.h>
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
@@ -43,8 +44,8 @@ using std::string;
|
|
|
// SourcesIndex::debSourcesIndex - Constructor /*{{{*/
|
|
// SourcesIndex::debSourcesIndex - Constructor /*{{{*/
|
|
|
// ---------------------------------------------------------------------
|
|
// ---------------------------------------------------------------------
|
|
|
/* */
|
|
/* */
|
|
|
-debSourcesIndex::debSourcesIndex(string URI,string Dist,string Section,bool Trusted) :
|
|
|
|
|
- pkgIndexFile(Trusted), URI(URI), Dist(Dist), Section(Section)
|
|
|
|
|
|
|
+debSourcesIndex::debSourcesIndex(IndexTarget const &Target,bool const Trusted) :
|
|
|
|
|
+ pkgIndexTargetFile(Target, Trusted)
|
|
|
{
|
|
{
|
|
|
}
|
|
}
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
@@ -55,16 +56,9 @@ debSourcesIndex::debSourcesIndex(string URI,string Dist,string Section,bool Trus
|
|
|
string debSourcesIndex::SourceInfo(pkgSrcRecords::Parser const &Record,
|
|
string debSourcesIndex::SourceInfo(pkgSrcRecords::Parser const &Record,
|
|
|
pkgSrcRecords::File const &File) const
|
|
pkgSrcRecords::File const &File) const
|
|
|
{
|
|
{
|
|
|
- string Res;
|
|
|
|
|
- Res = ::URI::NoUserPassword(URI) + ' ';
|
|
|
|
|
- if (Dist[Dist.size() - 1] == '/')
|
|
|
|
|
- {
|
|
|
|
|
- if (Dist != "/")
|
|
|
|
|
- Res += Dist;
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- Res += Dist + '/' + Section;
|
|
|
|
|
-
|
|
|
|
|
|
|
+ string Res = Target.Description;
|
|
|
|
|
+ Res.erase(Target.Description.rfind(' '));
|
|
|
|
|
+
|
|
|
Res += " ";
|
|
Res += " ";
|
|
|
Res += Record.Package();
|
|
Res += Record.Package();
|
|
|
Res += " ";
|
|
Res += " ";
|
|
@@ -79,129 +73,19 @@ string debSourcesIndex::SourceInfo(pkgSrcRecords::Parser const &Record,
|
|
|
/* */
|
|
/* */
|
|
|
pkgSrcRecords::Parser *debSourcesIndex::CreateSrcParser() const
|
|
pkgSrcRecords::Parser *debSourcesIndex::CreateSrcParser() const
|
|
|
{
|
|
{
|
|
|
- string SourcesURI = _config->FindDir("Dir::State::lists") +
|
|
|
|
|
- URItoFileName(IndexURI("Sources"));
|
|
|
|
|
-
|
|
|
|
|
- std::vector<std::string> types = APT::Configuration::getCompressionTypes();
|
|
|
|
|
- for (std::vector<std::string>::const_iterator t = types.begin(); t != types.end(); ++t)
|
|
|
|
|
- {
|
|
|
|
|
- string p;
|
|
|
|
|
- p = SourcesURI + '.' + *t;
|
|
|
|
|
- if (FileExists(p))
|
|
|
|
|
- return new debSrcRecordParser(p, this);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ string const SourcesURI = IndexFileName();
|
|
|
if (FileExists(SourcesURI))
|
|
if (FileExists(SourcesURI))
|
|
|
return new debSrcRecordParser(SourcesURI, this);
|
|
return new debSrcRecordParser(SourcesURI, this);
|
|
|
return NULL;
|
|
return NULL;
|
|
|
}
|
|
}
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
|
-// SourcesIndex::Describe - Give a descriptive path to the index /*{{{*/
|
|
|
|
|
-// ---------------------------------------------------------------------
|
|
|
|
|
-/* */
|
|
|
|
|
-string debSourcesIndex::Describe(bool Short) const
|
|
|
|
|
-{
|
|
|
|
|
- char S[300];
|
|
|
|
|
- if (Short == true)
|
|
|
|
|
- snprintf(S,sizeof(S),"%s",Info("Sources").c_str());
|
|
|
|
|
- else
|
|
|
|
|
- snprintf(S,sizeof(S),"%s (%s)",Info("Sources").c_str(),
|
|
|
|
|
- IndexFile("Sources").c_str());
|
|
|
|
|
-
|
|
|
|
|
- return S;
|
|
|
|
|
-}
|
|
|
|
|
- /*}}}*/
|
|
|
|
|
-// SourcesIndex::Info - One liner describing the index URI /*{{{*/
|
|
|
|
|
-// ---------------------------------------------------------------------
|
|
|
|
|
-/* */
|
|
|
|
|
-string debSourcesIndex::Info(const char *Type) const
|
|
|
|
|
-{
|
|
|
|
|
- string Info = ::URI::NoUserPassword(URI) + ' ';
|
|
|
|
|
- if (Dist[Dist.size() - 1] == '/')
|
|
|
|
|
- {
|
|
|
|
|
- if (Dist != "/")
|
|
|
|
|
- Info += Dist;
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- Info += Dist + '/' + Section;
|
|
|
|
|
- Info += " ";
|
|
|
|
|
- Info += Type;
|
|
|
|
|
- return Info;
|
|
|
|
|
-}
|
|
|
|
|
- /*}}}*/
|
|
|
|
|
-// SourcesIndex::Index* - Return the URI to the index files /*{{{*/
|
|
|
|
|
-// ---------------------------------------------------------------------
|
|
|
|
|
-/* */
|
|
|
|
|
-string debSourcesIndex::IndexFile(const char *Type) const
|
|
|
|
|
-{
|
|
|
|
|
- string s = URItoFileName(IndexURI(Type));
|
|
|
|
|
-
|
|
|
|
|
- std::vector<std::string> types = APT::Configuration::getCompressionTypes();
|
|
|
|
|
- for (std::vector<std::string>::const_iterator t = types.begin(); t != types.end(); ++t)
|
|
|
|
|
- {
|
|
|
|
|
- string p = s + '.' + *t;
|
|
|
|
|
- if (FileExists(p))
|
|
|
|
|
- return p;
|
|
|
|
|
- }
|
|
|
|
|
- return s;
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-string debSourcesIndex::IndexURI(const char *Type) const
|
|
|
|
|
-{
|
|
|
|
|
- string Res;
|
|
|
|
|
- if (Dist[Dist.size() - 1] == '/')
|
|
|
|
|
- {
|
|
|
|
|
- if (Dist != "/")
|
|
|
|
|
- Res = URI + Dist;
|
|
|
|
|
- else
|
|
|
|
|
- Res = URI;
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- Res = URI + "dists/" + Dist + '/' + Section +
|
|
|
|
|
- "/source/";
|
|
|
|
|
-
|
|
|
|
|
- Res += Type;
|
|
|
|
|
- return Res;
|
|
|
|
|
-}
|
|
|
|
|
- /*}}}*/
|
|
|
|
|
-// SourcesIndex::Exists - Check if the index is available /*{{{*/
|
|
|
|
|
-// ---------------------------------------------------------------------
|
|
|
|
|
-/* */
|
|
|
|
|
-bool debSourcesIndex::Exists() const
|
|
|
|
|
-{
|
|
|
|
|
- return FileExists(IndexFile("Sources"));
|
|
|
|
|
-}
|
|
|
|
|
- /*}}}*/
|
|
|
|
|
-// SourcesIndex::Size - Return the size of the index /*{{{*/
|
|
|
|
|
-// ---------------------------------------------------------------------
|
|
|
|
|
-/* */
|
|
|
|
|
-unsigned long debSourcesIndex::Size() const
|
|
|
|
|
-{
|
|
|
|
|
- unsigned long size = 0;
|
|
|
|
|
-
|
|
|
|
|
- /* we need to ignore errors here; if the lists are absent, just return 0 */
|
|
|
|
|
- _error->PushToStack();
|
|
|
|
|
-
|
|
|
|
|
- FileFd f(IndexFile("Sources"), FileFd::ReadOnly, FileFd::Extension);
|
|
|
|
|
- if (!f.Failed())
|
|
|
|
|
- size = f.Size();
|
|
|
|
|
-
|
|
|
|
|
- if (_error->PendingError() == true)
|
|
|
|
|
- size = 0;
|
|
|
|
|
- _error->RevertToStack();
|
|
|
|
|
-
|
|
|
|
|
- return size;
|
|
|
|
|
-}
|
|
|
|
|
- /*}}}*/
|
|
|
|
|
|
|
|
|
|
// PackagesIndex::debPackagesIndex - Contructor /*{{{*/
|
|
// PackagesIndex::debPackagesIndex - Contructor /*{{{*/
|
|
|
// ---------------------------------------------------------------------
|
|
// ---------------------------------------------------------------------
|
|
|
/* */
|
|
/* */
|
|
|
-debPackagesIndex::debPackagesIndex(string const &URI, string const &Dist, string const &Section,
|
|
|
|
|
- bool const &Trusted, string const &Arch) :
|
|
|
|
|
- pkgIndexFile(Trusted), URI(URI), Dist(Dist), Section(Section), Architecture(Arch)
|
|
|
|
|
|
|
+debPackagesIndex::debPackagesIndex(IndexTarget const &Target, bool const Trusted) :
|
|
|
|
|
+ pkgIndexTargetFile(Target, Trusted)
|
|
|
{
|
|
{
|
|
|
- if (Architecture == "native")
|
|
|
|
|
- Architecture = _config->Find("APT::Architecture");
|
|
|
|
|
}
|
|
}
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
|
// PackagesIndex::ArchiveInfo - Short version of the archive url /*{{{*/
|
|
// PackagesIndex::ArchiveInfo - Short version of the archive url /*{{{*/
|
|
@@ -209,137 +93,42 @@ debPackagesIndex::debPackagesIndex(string const &URI, string const &Dist, string
|
|
|
/* This is a shorter version that is designed to be < 60 chars or so */
|
|
/* This is a shorter version that is designed to be < 60 chars or so */
|
|
|
string debPackagesIndex::ArchiveInfo(pkgCache::VerIterator Ver) const
|
|
string debPackagesIndex::ArchiveInfo(pkgCache::VerIterator Ver) const
|
|
|
{
|
|
{
|
|
|
- string Res = ::URI::NoUserPassword(URI) + ' ';
|
|
|
|
|
- if (Dist[Dist.size() - 1] == '/')
|
|
|
|
|
- {
|
|
|
|
|
- if (Dist != "/")
|
|
|
|
|
- Res += Dist;
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- Res += Dist + '/' + Section;
|
|
|
|
|
-
|
|
|
|
|
|
|
+ std::string const Dist = Target.Option(IndexTarget::RELEASE);
|
|
|
|
|
+ string Res = Target.Option(IndexTarget::SITE) + " " + Dist;
|
|
|
|
|
+ std::string const Component = Target.Option(IndexTarget::COMPONENT);
|
|
|
|
|
+ if (Component.empty() == false)
|
|
|
|
|
+ Res += "/" + Component;
|
|
|
|
|
+
|
|
|
Res += " ";
|
|
Res += " ";
|
|
|
Res += Ver.ParentPkg().Name();
|
|
Res += Ver.ParentPkg().Name();
|
|
|
Res += " ";
|
|
Res += " ";
|
|
|
- if (Dist[Dist.size() - 1] != '/')
|
|
|
|
|
|
|
+ if (Dist.empty() == false && Dist[Dist.size() - 1] != '/')
|
|
|
Res.append(Ver.Arch()).append(" ");
|
|
Res.append(Ver.Arch()).append(" ");
|
|
|
Res += Ver.VerStr();
|
|
Res += Ver.VerStr();
|
|
|
return Res;
|
|
return Res;
|
|
|
}
|
|
}
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
|
-// PackagesIndex::Describe - Give a descriptive path to the index /*{{{*/
|
|
|
|
|
-// ---------------------------------------------------------------------
|
|
|
|
|
-/* This should help the user find the index in the sources.list and
|
|
|
|
|
- in the filesystem for problem solving */
|
|
|
|
|
-string debPackagesIndex::Describe(bool Short) const
|
|
|
|
|
-{
|
|
|
|
|
- char S[300];
|
|
|
|
|
- if (Short == true)
|
|
|
|
|
- snprintf(S,sizeof(S),"%s",Info("Packages").c_str());
|
|
|
|
|
- else
|
|
|
|
|
- snprintf(S,sizeof(S),"%s (%s)",Info("Packages").c_str(),
|
|
|
|
|
- IndexFile("Packages").c_str());
|
|
|
|
|
- return S;
|
|
|
|
|
-}
|
|
|
|
|
- /*}}}*/
|
|
|
|
|
-// PackagesIndex::Info - One liner describing the index URI /*{{{*/
|
|
|
|
|
-// ---------------------------------------------------------------------
|
|
|
|
|
-/* */
|
|
|
|
|
-string debPackagesIndex::Info(const char *Type) const
|
|
|
|
|
-{
|
|
|
|
|
- string Info = ::URI::NoUserPassword(URI) + ' ';
|
|
|
|
|
- if (Dist[Dist.size() - 1] == '/')
|
|
|
|
|
- {
|
|
|
|
|
- if (Dist != "/")
|
|
|
|
|
- Info += Dist;
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- Info += Dist + '/' + Section;
|
|
|
|
|
- Info += " ";
|
|
|
|
|
- if (Dist[Dist.size() - 1] != '/')
|
|
|
|
|
- Info += Architecture + " ";
|
|
|
|
|
- Info += Type;
|
|
|
|
|
- return Info;
|
|
|
|
|
-}
|
|
|
|
|
- /*}}}*/
|
|
|
|
|
-// PackagesIndex::Index* - Return the URI to the index files /*{{{*/
|
|
|
|
|
-// ---------------------------------------------------------------------
|
|
|
|
|
-/* */
|
|
|
|
|
-string debPackagesIndex::IndexFile(const char *Type) const
|
|
|
|
|
-{
|
|
|
|
|
- string s =_config->FindDir("Dir::State::lists") + URItoFileName(IndexURI(Type));
|
|
|
|
|
-
|
|
|
|
|
- std::vector<std::string> types = APT::Configuration::getCompressionTypes();
|
|
|
|
|
- for (std::vector<std::string>::const_iterator t = types.begin(); t != types.end(); ++t)
|
|
|
|
|
- {
|
|
|
|
|
- string p = s + '.' + *t;
|
|
|
|
|
- if (FileExists(p))
|
|
|
|
|
- return p;
|
|
|
|
|
- }
|
|
|
|
|
- return s;
|
|
|
|
|
-}
|
|
|
|
|
-string debPackagesIndex::IndexURI(const char *Type) const
|
|
|
|
|
-{
|
|
|
|
|
- string Res;
|
|
|
|
|
- if (Dist[Dist.size() - 1] == '/')
|
|
|
|
|
- {
|
|
|
|
|
- if (Dist != "/")
|
|
|
|
|
- Res = URI + Dist;
|
|
|
|
|
- else
|
|
|
|
|
- Res = URI;
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- Res = URI + "dists/" + Dist + '/' + Section +
|
|
|
|
|
- "/binary-" + Architecture + '/';
|
|
|
|
|
-
|
|
|
|
|
- Res += Type;
|
|
|
|
|
- return Res;
|
|
|
|
|
-}
|
|
|
|
|
- /*}}}*/
|
|
|
|
|
-// PackagesIndex::Exists - Check if the index is available /*{{{*/
|
|
|
|
|
-// ---------------------------------------------------------------------
|
|
|
|
|
-/* */
|
|
|
|
|
-bool debPackagesIndex::Exists() const
|
|
|
|
|
-{
|
|
|
|
|
- return FileExists(IndexFile("Packages"));
|
|
|
|
|
-}
|
|
|
|
|
- /*}}}*/
|
|
|
|
|
-// PackagesIndex::Size - Return the size of the index /*{{{*/
|
|
|
|
|
-// ---------------------------------------------------------------------
|
|
|
|
|
-/* This is really only used for progress reporting. */
|
|
|
|
|
-unsigned long debPackagesIndex::Size() const
|
|
|
|
|
-{
|
|
|
|
|
- unsigned long size = 0;
|
|
|
|
|
-
|
|
|
|
|
- /* we need to ignore errors here; if the lists are absent, just return 0 */
|
|
|
|
|
- _error->PushToStack();
|
|
|
|
|
-
|
|
|
|
|
- FileFd f(IndexFile("Packages"), FileFd::ReadOnly, FileFd::Extension);
|
|
|
|
|
- if (!f.Failed())
|
|
|
|
|
- size = f.Size();
|
|
|
|
|
-
|
|
|
|
|
- if (_error->PendingError() == true)
|
|
|
|
|
- size = 0;
|
|
|
|
|
- _error->RevertToStack();
|
|
|
|
|
-
|
|
|
|
|
- return size;
|
|
|
|
|
-}
|
|
|
|
|
- /*}}}*/
|
|
|
|
|
// PackagesIndex::Merge - Load the index file into a cache /*{{{*/
|
|
// PackagesIndex::Merge - Load the index file into a cache /*{{{*/
|
|
|
// ---------------------------------------------------------------------
|
|
// ---------------------------------------------------------------------
|
|
|
/* */
|
|
/* */
|
|
|
bool debPackagesIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
|
|
bool debPackagesIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
|
|
|
{
|
|
{
|
|
|
- string PackageFile = IndexFile("Packages");
|
|
|
|
|
|
|
+ string const PackageFile = IndexFileName();
|
|
|
FileFd Pkg(PackageFile,FileFd::ReadOnly, FileFd::Extension);
|
|
FileFd Pkg(PackageFile,FileFd::ReadOnly, FileFd::Extension);
|
|
|
- debListParser Parser(&Pkg, Architecture);
|
|
|
|
|
|
|
+ debListParser Parser(&Pkg, Target.Option(IndexTarget::ARCHITECTURE));
|
|
|
|
|
|
|
|
if (_error->PendingError() == true)
|
|
if (_error->PendingError() == true)
|
|
|
return _error->Error("Problem opening %s",PackageFile.c_str());
|
|
return _error->Error("Problem opening %s",PackageFile.c_str());
|
|
|
if (Prog != NULL)
|
|
if (Prog != NULL)
|
|
|
- Prog->SubProgress(0,Info("Packages"));
|
|
|
|
|
|
|
+ Prog->SubProgress(0, Target.Description);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ std::string const URI = Target.Option(IndexTarget::REPO_URI);
|
|
|
|
|
+ std::string Dist = Target.Option(IndexTarget::RELEASE);
|
|
|
|
|
+ if (Dist.empty())
|
|
|
|
|
+ Dist = "/";
|
|
|
::URI Tmp(URI);
|
|
::URI Tmp(URI);
|
|
|
- if (Gen.SelectFile(PackageFile,Tmp.Host,*this) == false)
|
|
|
|
|
|
|
+ if (Gen.SelectFile(PackageFile, *this, Target.Option(IndexTarget::ARCHITECTURE), Target.Option(IndexTarget::COMPONENT)) == false)
|
|
|
return _error->Error("Problem with SelectFile %s",PackageFile.c_str());
|
|
return _error->Error("Problem with SelectFile %s",PackageFile.c_str());
|
|
|
|
|
|
|
|
// Store the IMS information
|
|
// Store the IMS information
|
|
@@ -347,31 +136,10 @@ bool debPackagesIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
|
|
|
pkgCacheGenerator::Dynamic<pkgCache::PkgFileIterator> DynFile(File);
|
|
pkgCacheGenerator::Dynamic<pkgCache::PkgFileIterator> DynFile(File);
|
|
|
File->Size = Pkg.FileSize();
|
|
File->Size = Pkg.FileSize();
|
|
|
File->mtime = Pkg.ModificationTime();
|
|
File->mtime = Pkg.ModificationTime();
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
if (Gen.MergeList(Parser) == false)
|
|
if (Gen.MergeList(Parser) == false)
|
|
|
return _error->Error("Problem with MergeList %s",PackageFile.c_str());
|
|
return _error->Error("Problem with MergeList %s",PackageFile.c_str());
|
|
|
|
|
|
|
|
- // Check the release file
|
|
|
|
|
- string ReleaseFile = debReleaseIndex(URI,Dist).MetaIndexFile("InRelease");
|
|
|
|
|
- bool releaseExists = false;
|
|
|
|
|
- if (FileExists(ReleaseFile) == true)
|
|
|
|
|
- releaseExists = true;
|
|
|
|
|
- else
|
|
|
|
|
- ReleaseFile = debReleaseIndex(URI,Dist).MetaIndexFile("Release");
|
|
|
|
|
-
|
|
|
|
|
- if (releaseExists == true || FileExists(ReleaseFile) == true)
|
|
|
|
|
- {
|
|
|
|
|
- FileFd Rel;
|
|
|
|
|
- // Beware: The 'Release' file might be clearsigned in case the
|
|
|
|
|
- // signature for an 'InRelease' file couldn't be checked
|
|
|
|
|
- if (OpenMaybeClearSignedFile(ReleaseFile, Rel) == false)
|
|
|
|
|
- return false;
|
|
|
|
|
-
|
|
|
|
|
- if (_error->PendingError() == true)
|
|
|
|
|
- return false;
|
|
|
|
|
- Parser.LoadReleaseInfo(File,Rel,Section);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
@@ -380,7 +148,7 @@ bool debPackagesIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
|
|
|
/* */
|
|
/* */
|
|
|
pkgCache::PkgFileIterator debPackagesIndex::FindInCache(pkgCache &Cache) const
|
|
pkgCache::PkgFileIterator debPackagesIndex::FindInCache(pkgCache &Cache) const
|
|
|
{
|
|
{
|
|
|
- string FileName = IndexFile("Packages");
|
|
|
|
|
|
|
+ string const FileName = IndexFileName();
|
|
|
pkgCache::PkgFileIterator File = Cache.FileBegin();
|
|
pkgCache::PkgFileIterator File = Cache.FileBegin();
|
|
|
for (; File.end() == false; ++File)
|
|
for (; File.end() == false; ++File)
|
|
|
{
|
|
{
|
|
@@ -410,113 +178,13 @@ pkgCache::PkgFileIterator debPackagesIndex::FindInCache(pkgCache &Cache) const
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
|
|
|
|
|
|
// TranslationsIndex::debTranslationsIndex - Contructor /*{{{*/
|
|
// TranslationsIndex::debTranslationsIndex - Contructor /*{{{*/
|
|
|
-// ---------------------------------------------------------------------
|
|
|
|
|
-/* */
|
|
|
|
|
-debTranslationsIndex::debTranslationsIndex(string URI,string Dist,string Section,
|
|
|
|
|
- char const * const Translation) :
|
|
|
|
|
- pkgIndexFile(true), URI(URI), Dist(Dist), Section(Section),
|
|
|
|
|
- Language(Translation)
|
|
|
|
|
|
|
+debTranslationsIndex::debTranslationsIndex(IndexTarget const &Target) :
|
|
|
|
|
+ pkgIndexTargetFile(Target, true)
|
|
|
{}
|
|
{}
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
|
-// TranslationIndex::Trans* - Return the URI to the translation files /*{{{*/
|
|
|
|
|
-// ---------------------------------------------------------------------
|
|
|
|
|
-/* */
|
|
|
|
|
-string debTranslationsIndex::IndexFile(const char *Type) const
|
|
|
|
|
-{
|
|
|
|
|
- string s =_config->FindDir("Dir::State::lists") + URItoFileName(IndexURI(Type));
|
|
|
|
|
-
|
|
|
|
|
- std::vector<std::string> types = APT::Configuration::getCompressionTypes();
|
|
|
|
|
- for (std::vector<std::string>::const_iterator t = types.begin(); t != types.end(); ++t)
|
|
|
|
|
- {
|
|
|
|
|
- string p = s + '.' + *t;
|
|
|
|
|
- if (FileExists(p))
|
|
|
|
|
- return p;
|
|
|
|
|
- }
|
|
|
|
|
- return s;
|
|
|
|
|
-}
|
|
|
|
|
-string debTranslationsIndex::IndexURI(const char *Type) const
|
|
|
|
|
-{
|
|
|
|
|
- string Res;
|
|
|
|
|
- if (Dist[Dist.size() - 1] == '/')
|
|
|
|
|
- {
|
|
|
|
|
- if (Dist != "/")
|
|
|
|
|
- Res = URI + Dist;
|
|
|
|
|
- else
|
|
|
|
|
- Res = URI;
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- Res = URI + "dists/" + Dist + '/' + Section +
|
|
|
|
|
- "/i18n/Translation-";
|
|
|
|
|
-
|
|
|
|
|
- Res += Type;
|
|
|
|
|
- return Res;
|
|
|
|
|
-}
|
|
|
|
|
- /*}}}*/
|
|
|
|
|
-// TranslationsIndex::Describe - Give a descriptive path to the index /*{{{*/
|
|
|
|
|
-// ---------------------------------------------------------------------
|
|
|
|
|
-/* This should help the user find the index in the sources.list and
|
|
|
|
|
- in the filesystem for problem solving */
|
|
|
|
|
-string debTranslationsIndex::Describe(bool Short) const
|
|
|
|
|
-{
|
|
|
|
|
- char S[300];
|
|
|
|
|
- if (Short == true)
|
|
|
|
|
- snprintf(S,sizeof(S),"%s",Info(TranslationFile().c_str()).c_str());
|
|
|
|
|
- else
|
|
|
|
|
- snprintf(S,sizeof(S),"%s (%s)",Info(TranslationFile().c_str()).c_str(),
|
|
|
|
|
- IndexFile(Language).c_str());
|
|
|
|
|
- return S;
|
|
|
|
|
-}
|
|
|
|
|
- /*}}}*/
|
|
|
|
|
-// TranslationsIndex::Info - One liner describing the index URI /*{{{*/
|
|
|
|
|
-// ---------------------------------------------------------------------
|
|
|
|
|
-/* */
|
|
|
|
|
-string debTranslationsIndex::Info(const char *Type) const
|
|
|
|
|
-{
|
|
|
|
|
- string Info = ::URI::NoUserPassword(URI) + ' ';
|
|
|
|
|
- if (Dist[Dist.size() - 1] == '/')
|
|
|
|
|
- {
|
|
|
|
|
- if (Dist != "/")
|
|
|
|
|
- Info += Dist;
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- Info += Dist + '/' + Section;
|
|
|
|
|
- Info += " ";
|
|
|
|
|
- Info += Type;
|
|
|
|
|
- return Info;
|
|
|
|
|
-}
|
|
|
|
|
- /*}}}*/
|
|
|
|
|
bool debTranslationsIndex::HasPackages() const /*{{{*/
|
|
bool debTranslationsIndex::HasPackages() const /*{{{*/
|
|
|
{
|
|
{
|
|
|
- return FileExists(IndexFile(Language));
|
|
|
|
|
-}
|
|
|
|
|
- /*}}}*/
|
|
|
|
|
-// TranslationsIndex::Exists - Check if the index is available /*{{{*/
|
|
|
|
|
-// ---------------------------------------------------------------------
|
|
|
|
|
-/* */
|
|
|
|
|
-bool debTranslationsIndex::Exists() const
|
|
|
|
|
-{
|
|
|
|
|
- return FileExists(IndexFile(Language));
|
|
|
|
|
-}
|
|
|
|
|
- /*}}}*/
|
|
|
|
|
-// TranslationsIndex::Size - Return the size of the index /*{{{*/
|
|
|
|
|
-// ---------------------------------------------------------------------
|
|
|
|
|
-/* This is really only used for progress reporting. */
|
|
|
|
|
-unsigned long debTranslationsIndex::Size() const
|
|
|
|
|
-{
|
|
|
|
|
- unsigned long size = 0;
|
|
|
|
|
-
|
|
|
|
|
- /* we need to ignore errors here; if the lists are absent, just return 0 */
|
|
|
|
|
- _error->PushToStack();
|
|
|
|
|
-
|
|
|
|
|
- FileFd f(IndexFile(Language), FileFd::ReadOnly, FileFd::Extension);
|
|
|
|
|
- if (!f.Failed())
|
|
|
|
|
- size = f.Size();
|
|
|
|
|
-
|
|
|
|
|
- if (_error->PendingError() == true)
|
|
|
|
|
- size = 0;
|
|
|
|
|
- _error->RevertToStack();
|
|
|
|
|
-
|
|
|
|
|
- return size;
|
|
|
|
|
|
|
+ return Exists();
|
|
|
}
|
|
}
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
|
// TranslationsIndex::Merge - Load the index file into a cache /*{{{*/
|
|
// TranslationsIndex::Merge - Load the index file into a cache /*{{{*/
|
|
@@ -525,24 +193,24 @@ unsigned long debTranslationsIndex::Size() const
|
|
|
bool debTranslationsIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
|
|
bool debTranslationsIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
|
|
|
{
|
|
{
|
|
|
// Check the translation file, if in use
|
|
// Check the translation file, if in use
|
|
|
- string TranslationFile = IndexFile(Language);
|
|
|
|
|
|
|
+ string const TranslationFile = IndexFileName();
|
|
|
if (FileExists(TranslationFile))
|
|
if (FileExists(TranslationFile))
|
|
|
{
|
|
{
|
|
|
FileFd Trans(TranslationFile,FileFd::ReadOnly, FileFd::Extension);
|
|
FileFd Trans(TranslationFile,FileFd::ReadOnly, FileFd::Extension);
|
|
|
debTranslationsParser TransParser(&Trans);
|
|
debTranslationsParser TransParser(&Trans);
|
|
|
if (_error->PendingError() == true)
|
|
if (_error->PendingError() == true)
|
|
|
return false;
|
|
return false;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
if (Prog != NULL)
|
|
if (Prog != NULL)
|
|
|
- Prog->SubProgress(0, Info(TranslationFile.c_str()));
|
|
|
|
|
- if (Gen.SelectFile(TranslationFile,string(),*this) == false)
|
|
|
|
|
|
|
+ Prog->SubProgress(0, Target.Description);
|
|
|
|
|
+ if (Gen.SelectFile(TranslationFile, *this, "", Target.Option(IndexTarget::COMPONENT), pkgCache::Flag::NotSource | pkgCache::Flag::NoPackages) == false)
|
|
|
return _error->Error("Problem with SelectFile %s",TranslationFile.c_str());
|
|
return _error->Error("Problem with SelectFile %s",TranslationFile.c_str());
|
|
|
|
|
|
|
|
// Store the IMS information
|
|
// Store the IMS information
|
|
|
pkgCache::PkgFileIterator TransFile = Gen.GetCurFile();
|
|
pkgCache::PkgFileIterator TransFile = Gen.GetCurFile();
|
|
|
TransFile->Size = Trans.FileSize();
|
|
TransFile->Size = Trans.FileSize();
|
|
|
TransFile->mtime = Trans.ModificationTime();
|
|
TransFile->mtime = Trans.ModificationTime();
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
if (Gen.MergeList(TransParser) == false)
|
|
if (Gen.MergeList(TransParser) == false)
|
|
|
return _error->Error("Problem with MergeList %s",TranslationFile.c_str());
|
|
return _error->Error("Problem with MergeList %s",TranslationFile.c_str());
|
|
|
}
|
|
}
|
|
@@ -555,8 +223,8 @@ bool debTranslationsIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
|
|
|
/* */
|
|
/* */
|
|
|
pkgCache::PkgFileIterator debTranslationsIndex::FindInCache(pkgCache &Cache) const
|
|
pkgCache::PkgFileIterator debTranslationsIndex::FindInCache(pkgCache &Cache) const
|
|
|
{
|
|
{
|
|
|
- string FileName = IndexFile(Language);
|
|
|
|
|
-
|
|
|
|
|
|
|
+ string FileName = IndexFileName();
|
|
|
|
|
+
|
|
|
pkgCache::PkgFileIterator File = Cache.FileBegin();
|
|
pkgCache::PkgFileIterator File = Cache.FileBegin();
|
|
|
for (; File.end() == false; ++File)
|
|
for (; File.end() == false; ++File)
|
|
|
{
|
|
{
|
|
@@ -579,10 +247,11 @@ pkgCache::PkgFileIterator debTranslationsIndex::FindInCache(pkgCache &Cache) con
|
|
|
return pkgCache::PkgFileIterator(Cache);
|
|
return pkgCache::PkgFileIterator(Cache);
|
|
|
}
|
|
}
|
|
|
return File;
|
|
return File;
|
|
|
- }
|
|
|
|
|
|
|
+ }
|
|
|
return File;
|
|
return File;
|
|
|
}
|
|
}
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
|
|
|
+
|
|
|
// StatusIndex::debStatusIndex - Constructor /*{{{*/
|
|
// StatusIndex::debStatusIndex - Constructor /*{{{*/
|
|
|
// ---------------------------------------------------------------------
|
|
// ---------------------------------------------------------------------
|
|
|
/* */
|
|
/* */
|
|
@@ -615,18 +284,17 @@ bool debStatusIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
|
|
|
|
|
|
|
|
if (Prog != NULL)
|
|
if (Prog != NULL)
|
|
|
Prog->SubProgress(0,File);
|
|
Prog->SubProgress(0,File);
|
|
|
- if (Gen.SelectFile(File,string(),*this,pkgCache::Flag::NotSource) == false)
|
|
|
|
|
|
|
+ if (Gen.SelectFile(File, *this, "", "now", pkgCache::Flag::NotSource) == false)
|
|
|
return _error->Error("Problem with SelectFile %s",File.c_str());
|
|
return _error->Error("Problem with SelectFile %s",File.c_str());
|
|
|
|
|
|
|
|
// Store the IMS information
|
|
// Store the IMS information
|
|
|
pkgCache::PkgFileIterator CFile = Gen.GetCurFile();
|
|
pkgCache::PkgFileIterator CFile = Gen.GetCurFile();
|
|
|
|
|
+ pkgCacheGenerator::Dynamic<pkgCache::PkgFileIterator> DynFile(CFile);
|
|
|
CFile->Size = Pkg.FileSize();
|
|
CFile->Size = Pkg.FileSize();
|
|
|
CFile->mtime = Pkg.ModificationTime();
|
|
CFile->mtime = Pkg.ModificationTime();
|
|
|
- map_stringitem_t const storage = Gen.StoreString(pkgCacheGenerator::MIXED, "now");
|
|
|
|
|
- CFile->Archive = storage;
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
if (Gen.MergeList(Parser) == false)
|
|
if (Gen.MergeList(Parser) == false)
|
|
|
- return _error->Error("Problem with MergeList %s",File.c_str());
|
|
|
|
|
|
|
+ return _error->Error("Problem with MergeList %s",File.c_str());
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
@@ -671,8 +339,7 @@ APT_CONST bool debStatusIndex::Exists() const
|
|
|
}
|
|
}
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
|
|
|
|
|
|
-// debDebPkgFile - Single .deb file /*{{{*/
|
|
|
|
|
-// ---------------------------------------------------------------------
|
|
|
|
|
|
|
+// debDebPkgFile - Single .deb file /*{{{*/
|
|
|
debDebPkgFileIndex::debDebPkgFileIndex(std::string DebFile)
|
|
debDebPkgFileIndex::debDebPkgFileIndex(std::string DebFile)
|
|
|
: pkgIndexFile(true), DebFile(DebFile)
|
|
: pkgIndexFile(true), DebFile(DebFile)
|
|
|
{
|
|
{
|
|
@@ -688,64 +355,67 @@ bool debDebPkgFileIndex::Exists() const
|
|
|
{
|
|
{
|
|
|
return FileExists(DebFile);
|
|
return FileExists(DebFile);
|
|
|
}
|
|
}
|
|
|
-bool debDebPkgFileIndex::Merge(pkgCacheGenerator& Gen, OpProgress* Prog) const
|
|
|
|
|
|
|
+bool debDebPkgFileIndex::GetContent(std::ostream &content, std::string const &debfile)
|
|
|
{
|
|
{
|
|
|
- if(Prog)
|
|
|
|
|
- Prog->SubProgress(0, "Reading deb file");
|
|
|
|
|
-
|
|
|
|
|
- // get the control data out of the deb file vid dpkg -I
|
|
|
|
|
- // ... can I haz libdpkg?
|
|
|
|
|
- Configuration::Item const *Opts = _config->Tree("DPkg::Options");
|
|
|
|
|
- std::string dpkg = _config->Find("Dir::Bin::dpkg","dpkg");
|
|
|
|
|
|
|
+ // get the control data out of the deb file via dpkg-deb -I
|
|
|
|
|
+ std::string dpkg = _config->Find("Dir::Bin::dpkg","dpkg-deb");
|
|
|
std::vector<const char *> Args;
|
|
std::vector<const char *> Args;
|
|
|
Args.push_back(dpkg.c_str());
|
|
Args.push_back(dpkg.c_str());
|
|
|
- if (Opts != 0)
|
|
|
|
|
- {
|
|
|
|
|
- Opts = Opts->Child;
|
|
|
|
|
- for (; Opts != 0; Opts = Opts->Next)
|
|
|
|
|
- {
|
|
|
|
|
- if (Opts->Value.empty() == true)
|
|
|
|
|
- continue;
|
|
|
|
|
- Args.push_back(Opts->Value.c_str());
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
Args.push_back("-I");
|
|
Args.push_back("-I");
|
|
|
- Args.push_back(DebFile.c_str());
|
|
|
|
|
|
|
+ Args.push_back(debfile.c_str());
|
|
|
Args.push_back("control");
|
|
Args.push_back("control");
|
|
|
Args.push_back(NULL);
|
|
Args.push_back(NULL);
|
|
|
FileFd PipeFd;
|
|
FileFd PipeFd;
|
|
|
pid_t Child;
|
|
pid_t Child;
|
|
|
if(Popen((const char**)&Args[0], PipeFd, Child, FileFd::ReadOnly) == false)
|
|
if(Popen((const char**)&Args[0], PipeFd, Child, FileFd::ReadOnly) == false)
|
|
|
return _error->Error("Popen failed");
|
|
return _error->Error("Popen failed");
|
|
|
- // FIXME: static buffer
|
|
|
|
|
- char buf[8*1024];
|
|
|
|
|
- unsigned long long n = 0;
|
|
|
|
|
- if(PipeFd.Read(buf, sizeof(buf)-1, &n) == false)
|
|
|
|
|
- return _error->Errno("read", "Failed to read dpkg pipe");
|
|
|
|
|
|
|
+
|
|
|
|
|
+ char buffer[1024];
|
|
|
|
|
+ do {
|
|
|
|
|
+ unsigned long long actual = 0;
|
|
|
|
|
+ if (PipeFd.Read(buffer, sizeof(buffer)-1, &actual) == false)
|
|
|
|
|
+ return _error->Errno("read", "Failed to read dpkg pipe");
|
|
|
|
|
+ if (actual == 0)
|
|
|
|
|
+ break;
|
|
|
|
|
+ buffer[actual] = '\0';
|
|
|
|
|
+ content << buffer;
|
|
|
|
|
+ } while(true);
|
|
|
ExecWait(Child, "Popen");
|
|
ExecWait(Child, "Popen");
|
|
|
|
|
|
|
|
- // now write the control data to a tempfile
|
|
|
|
|
|
|
+ content << "Filename: " << debfile << "\n";
|
|
|
|
|
+ struct stat Buf;
|
|
|
|
|
+ if (stat(debfile.c_str(), &Buf) != 0)
|
|
|
|
|
+ return false;
|
|
|
|
|
+ content << "Size: " << Buf.st_size << "\n";
|
|
|
|
|
+
|
|
|
|
|
+ return true;
|
|
|
|
|
+}
|
|
|
|
|
+bool debDebPkgFileIndex::Merge(pkgCacheGenerator& Gen, OpProgress* Prog) const
|
|
|
|
|
+{
|
|
|
|
|
+ if(Prog)
|
|
|
|
|
+ Prog->SubProgress(0, "Reading deb file");
|
|
|
|
|
+
|
|
|
|
|
+ // write the control data to a tempfile
|
|
|
SPtr<FileFd> DebControl = GetTempFile("deb-file-" + flNotDir(DebFile));
|
|
SPtr<FileFd> DebControl = GetTempFile("deb-file-" + flNotDir(DebFile));
|
|
|
if(DebControl == NULL)
|
|
if(DebControl == NULL)
|
|
|
return false;
|
|
return false;
|
|
|
- DebControl->Write(buf, n);
|
|
|
|
|
- // append size of the file
|
|
|
|
|
- FileFd Fd(DebFile, FileFd::ReadOnly);
|
|
|
|
|
- string Size;
|
|
|
|
|
- strprintf(Size, "Size: %llu\n", Fd.Size());
|
|
|
|
|
- DebControl->Write(Size.c_str(), Size.size());
|
|
|
|
|
- // and rewind for the listparser
|
|
|
|
|
|
|
+ std::ostringstream content;
|
|
|
|
|
+ if (GetContent(content, DebFile) == false)
|
|
|
|
|
+ return false;
|
|
|
|
|
+ std::string const contentstr = content.str();
|
|
|
|
|
+ DebControl->Write(contentstr.c_str(), contentstr.length());
|
|
|
|
|
+ // rewind for the listparser
|
|
|
DebControl->Seek(0);
|
|
DebControl->Seek(0);
|
|
|
|
|
|
|
|
// and give it to the list parser
|
|
// and give it to the list parser
|
|
|
debDebFileParser Parser(DebControl, DebFile);
|
|
debDebFileParser Parser(DebControl, DebFile);
|
|
|
- if(Gen.SelectFile(DebFile, "local", *this) == false)
|
|
|
|
|
|
|
+ if(Gen.SelectFile(DebFile, *this, "", "now", pkgCache::Flag::LocalSource) == false)
|
|
|
return _error->Error("Problem with SelectFile %s", DebFile.c_str());
|
|
return _error->Error("Problem with SelectFile %s", DebFile.c_str());
|
|
|
|
|
|
|
|
pkgCache::PkgFileIterator File = Gen.GetCurFile();
|
|
pkgCache::PkgFileIterator File = Gen.GetCurFile();
|
|
|
File->Size = DebControl->Size();
|
|
File->Size = DebControl->Size();
|
|
|
File->mtime = DebControl->ModificationTime();
|
|
File->mtime = DebControl->ModificationTime();
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
if (Gen.MergeList(Parser) == false)
|
|
if (Gen.MergeList(Parser) == false)
|
|
|
return _error->Error("Problem with MergeLister for %s", DebFile.c_str());
|
|
return _error->Error("Problem with MergeLister for %s", DebFile.c_str());
|
|
|
|
|
|
|
@@ -802,13 +472,13 @@ pkgSrcRecords::Parser *debDscFileIndex::CreateSrcParser() const
|
|
|
}
|
|
}
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
|
// Index File types for Debian /*{{{*/
|
|
// Index File types for Debian /*{{{*/
|
|
|
-class debIFTypeSrc : public pkgIndexFile::Type
|
|
|
|
|
|
|
+class APT_HIDDEN debIFTypeSrc : public pkgIndexFile::Type
|
|
|
{
|
|
{
|
|
|
public:
|
|
public:
|
|
|
|
|
|
|
|
debIFTypeSrc() {Label = "Debian Source Index";};
|
|
debIFTypeSrc() {Label = "Debian Source Index";};
|
|
|
};
|
|
};
|
|
|
-class debIFTypePkg : public pkgIndexFile::Type
|
|
|
|
|
|
|
+class APT_HIDDEN debIFTypePkg : public pkgIndexFile::Type
|
|
|
{
|
|
{
|
|
|
public:
|
|
public:
|
|
|
|
|
|
|
@@ -818,12 +488,12 @@ class debIFTypePkg : public pkgIndexFile::Type
|
|
|
};
|
|
};
|
|
|
debIFTypePkg() {Label = "Debian Package Index";};
|
|
debIFTypePkg() {Label = "Debian Package Index";};
|
|
|
};
|
|
};
|
|
|
-class debIFTypeTrans : public debIFTypePkg
|
|
|
|
|
|
|
+class APT_HIDDEN debIFTypeTrans : public debIFTypePkg
|
|
|
{
|
|
{
|
|
|
public:
|
|
public:
|
|
|
debIFTypeTrans() {Label = "Debian Translation Index";};
|
|
debIFTypeTrans() {Label = "Debian Translation Index";};
|
|
|
};
|
|
};
|
|
|
-class debIFTypeStatus : public pkgIndexFile::Type
|
|
|
|
|
|
|
+class APT_HIDDEN debIFTypeStatus : public pkgIndexFile::Type
|
|
|
{
|
|
{
|
|
|
public:
|
|
public:
|
|
|
|
|
|
|
@@ -833,16 +503,16 @@ class debIFTypeStatus : public pkgIndexFile::Type
|
|
|
};
|
|
};
|
|
|
debIFTypeStatus() {Label = "Debian dpkg status file";};
|
|
debIFTypeStatus() {Label = "Debian dpkg status file";};
|
|
|
};
|
|
};
|
|
|
-class debIFTypeDebPkgFile : public pkgIndexFile::Type
|
|
|
|
|
|
|
+class APT_HIDDEN debIFTypeDebPkgFile : public pkgIndexFile::Type
|
|
|
{
|
|
{
|
|
|
public:
|
|
public:
|
|
|
virtual pkgRecords::Parser *CreatePkgParser(pkgCache::PkgFileIterator File) const
|
|
virtual pkgRecords::Parser *CreatePkgParser(pkgCache::PkgFileIterator File) const
|
|
|
{
|
|
{
|
|
|
- return new debDebFileRecordParser(File.FileName(),*File.Cache());
|
|
|
|
|
|
|
+ return new debDebFileRecordParser(File.FileName());
|
|
|
};
|
|
};
|
|
|
debIFTypeDebPkgFile() {Label = "deb Package file";};
|
|
debIFTypeDebPkgFile() {Label = "deb Package file";};
|
|
|
};
|
|
};
|
|
|
-class debIFTypeDscFile : public pkgIndexFile::Type
|
|
|
|
|
|
|
+class APT_HIDDEN debIFTypeDscFile : public pkgIndexFile::Type
|
|
|
{
|
|
{
|
|
|
public:
|
|
public:
|
|
|
virtual pkgSrcRecords::Parser *CreateSrcPkgParser(std::string DscFile) const
|
|
virtual pkgSrcRecords::Parser *CreateSrcPkgParser(std::string DscFile) const
|
|
@@ -851,7 +521,7 @@ class debIFTypeDscFile : public pkgIndexFile::Type
|
|
|
};
|
|
};
|
|
|
debIFTypeDscFile() {Label = "dsc File Source Index";};
|
|
debIFTypeDscFile() {Label = "dsc File Source Index";};
|
|
|
};
|
|
};
|
|
|
-class debIFTypeDebianSourceDir : public pkgIndexFile::Type
|
|
|
|
|
|
|
+class APT_HIDDEN debIFTypeDebianSourceDir : public pkgIndexFile::Type
|
|
|
{
|
|
{
|
|
|
public:
|
|
public:
|
|
|
virtual pkgSrcRecords::Parser *CreateSrcPkgParser(std::string SourceDir) const
|
|
virtual pkgSrcRecords::Parser *CreateSrcPkgParser(std::string SourceDir) const
|
|
@@ -861,14 +531,14 @@ class debIFTypeDebianSourceDir : public pkgIndexFile::Type
|
|
|
debIFTypeDebianSourceDir() {Label = "debian/control File Source Index";};
|
|
debIFTypeDebianSourceDir() {Label = "debian/control File Source Index";};
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-static debIFTypeSrc _apt_Src;
|
|
|
|
|
-static debIFTypePkg _apt_Pkg;
|
|
|
|
|
-static debIFTypeTrans _apt_Trans;
|
|
|
|
|
-static debIFTypeStatus _apt_Status;
|
|
|
|
|
-static debIFTypeDebPkgFile _apt_DebPkgFile;
|
|
|
|
|
|
|
+APT_HIDDEN debIFTypeSrc _apt_Src;
|
|
|
|
|
+APT_HIDDEN debIFTypePkg _apt_Pkg;
|
|
|
|
|
+APT_HIDDEN debIFTypeTrans _apt_Trans;
|
|
|
|
|
+APT_HIDDEN debIFTypeStatus _apt_Status;
|
|
|
|
|
+APT_HIDDEN debIFTypeDebPkgFile _apt_DebPkgFile;
|
|
|
// file based pseudo indexes
|
|
// file based pseudo indexes
|
|
|
-static debIFTypeDscFile _apt_DscFile;
|
|
|
|
|
-static debIFTypeDebianSourceDir _apt_DebianSourceDir;
|
|
|
|
|
|
|
+APT_HIDDEN debIFTypeDscFile _apt_DscFile;
|
|
|
|
|
+APT_HIDDEN debIFTypeDebianSourceDir _apt_DebianSourceDir;
|
|
|
|
|
|
|
|
const pkgIndexFile::Type *debSourcesIndex::GetType() const
|
|
const pkgIndexFile::Type *debSourcesIndex::GetType() const
|
|
|
{
|
|
{
|
|
@@ -906,3 +576,4 @@ debTranslationsIndex::~debTranslationsIndex() {}
|
|
|
debSourcesIndex::~debSourcesIndex() {}
|
|
debSourcesIndex::~debSourcesIndex() {}
|
|
|
|
|
|
|
|
debDebPkgFileIndex::~debDebPkgFileIndex() {}
|
|
debDebPkgFileIndex::~debDebPkgFileIndex() {}
|
|
|
|
|
+debDscFileIndex::~debDscFileIndex() {}
|