diff options
author | Michael Vogt <mvo@debian.org> | 2005-10-17 14:20:25 +0000 |
---|---|---|
committer | Michael Vogt <mvo@debian.org> | 2005-10-17 14:20:25 +0000 |
commit | c511502fcec38680fff2f27aec75908e348e5905 (patch) | |
tree | 113bdb52474c1111110da47939342c9fd2994f1a /apt-pkg/deb/debindexfile.cc | |
parent | 3226f06e15d6c9816c26e87bb58f5589b84a467b (diff) | |
parent | 422eeaaadf17904bf2f08cdf9e8998bec645097c (diff) |
* merged ddtp support
Patches applied:
* michael.vogt@ubuntu.com--2005/apt--ddtp--0--base-0
tag of otavio@debian.org--2005/apt--ddtp--0.6--patch-14
* michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-1
* fixed a problem when it comes to the cache rebuilding
* michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-2
* try harder to get the correct language code
* michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-3
* fix for output of the description and the debTranslationsIndex::Exists()
* michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-4
* made the translation downloading work
* michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-5
* FindInCache() uses the correct file now
* michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-6
* don't throw any more warnings
* michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-7
* merged with otavoi
* michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-8
* merged with otavios branch
* michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-9
* code cleanups (thanks matt!), moved UsePackage before the description list build in pkgcachegen to catch MMap errors early
* michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-10
* added a BUGS file with known problem, added apt-cdrom support for translated package descriptions
* michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-11
* updated with mainline
* michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-12
* added README.ddtp
* michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-13
* merged with apt--mvo
* michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-14
* added DDTP::URL-Remap. KILL THIS FEATURE once ddtp support is offical
* michael.vogt@ubuntu.com--2005/apt--ddtp--0--patch-15
* remvoed the remap feature again, dosn't work anyway
* otavio@debian.org--2005/apt--ddtp--0.6--base-0
tag of apt@packages.debian.org/apt--main--0--patch-71
* otavio@debian.org--2005/apt--ddtp--0.6--patch-1
Port DDTP to APT 0.6 branch
* otavio@debian.org--2005/apt--ddtp--0.6--patch-2
Fix sintax error on apt-cache
* otavio@debian.org--2005/apt--ddtp--0.6--patch-3
Remove a unused var.
* otavio@debian.org--2005/apt--ddtp--0.6--patch-4
Fix problems due APT and structural changes.
* otavio@debian.org--2005/apt--ddtp--0.6--patch-5
Fix problems due APT and structural changes.
* otavio@debian.org--2005/apt--ddtp--0.6--patch-6
Sync with apt@packages.debian.org/apt--main--0--patch-74
* otavio@debian.org--2005/apt--ddtp--0.6--patch-7
Sync with apt@packages.debian.org/apt--main--0--patch-75
* otavio@debian.org--2005/apt--ddtp--0.6--patch-8
Sync with apt--main--0--patch-76
* otavio@debian.org--2005/apt--ddtp--0.6--patch-9
Remote a changelog entry added by mistake while merging.
* otavio@debian.org--2005/apt--ddtp--0.6--patch-10
Sync with apt--main--0--patch-78
* otavio@debian.org--2005/apt--ddtp--0.6--patch-11
Revert fixes changes to move these to apt--fixes--0 branch.
* otavio@debian.org--2005/apt--ddtp--0.6--patch-12
Another fix included here by mistake. Moving it to apt--fixes--0 branch.
* otavio@debian.org--2005/apt--ddtp--0.6--patch-13
Merge last changes from apt--main--0.
* otavio@debian.org--2005/apt--ddtp--0.6--patch-14
Add FindInCache method to skip the rebuild of cache every time.
* otavio@debian.org--2005/apt--ddtp--0.6--patch-15
Merge changes did by Michael Vogt to solve some rebuilding mistakes.
* otavio@debian.org--2005/apt--ddtp--0.6--patch-16
Does't show Description twice
* otavio@debian.org--2005/apt--ddtp--0.6--patch-17
Merge last fixes did by Michael but preserve my version of apt-cache.cc fix.
* otavio@debian.org--2005/apt--ddtp--0.6--patch-18
Revert changes did by mistake on translation files.
* otavio@debian.org--2005/apt--ddtp--0.6--patch-19
Merge last changes did from upstream side.
* otavio@debian.org--2005/apt--ddtp--0.6--patch-20
Sync with apt--main--0--patch-87
Diffstat (limited to 'apt-pkg/deb/debindexfile.cc')
-rw-r--r-- | apt-pkg/deb/debindexfile.cc | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/apt-pkg/deb/debindexfile.cc b/apt-pkg/deb/debindexfile.cc index ff8bce85d..38ecdd16a 100644 --- a/apt-pkg/deb/debindexfile.cc +++ b/apt-pkg/deb/debindexfile.cc @@ -320,6 +320,170 @@ pkgCache::PkgFileIterator debPackagesIndex::FindInCache(pkgCache &Cache) const } /*}}}*/ +// TranslationsIndex::debTranslationsIndex - Contructor /*{{{*/ +// --------------------------------------------------------------------- +/* */ +debTranslationsIndex::debTranslationsIndex(string URI,string Dist,string Section) : + pkgIndexFile(true), URI(URI), Dist(Dist), Section(Section) +{ +} + /*}}}*/ +// TranslationIndex::Trans* - Return the URI to the translation files /*{{{*/ +// --------------------------------------------------------------------- +/* */ +inline string debTranslationsIndex::IndexFile(const char *Type) const +{ + return _config->FindDir("Dir::State::lists") + URItoFileName(IndexURI(Type)); +} +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::GetIndexes - Fetch the index files /*{{{*/ +// --------------------------------------------------------------------- +/* */ +bool debTranslationsIndex::GetIndexes(pkgAcquire *Owner) const +{ + if (TranslationsAvailable()) { + string TranslationFile = "Translation-" + LanguageCode(); + new pkgAcqIndexTrans(Owner, IndexURI(LanguageCode().c_str()), + Info(TranslationFile.c_str()), + TranslationFile); + } + + return true; +} + /*}}}*/ +// 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(LanguageCode().c_str()).c_str()); + return S; +} + /*}}}*/ +// TranslationsIndex::Info - One liner describing the index URI /*{{{*/ +// --------------------------------------------------------------------- +/* */ +string debTranslationsIndex::Info(const char *Type) const +{ + string Info = ::URI::SiteOnly(URI) + ' '; + if (Dist[Dist.size() - 1] == '/') + { + if (Dist != "/") + Info += Dist; + } + else + Info += Dist + '/' + Section; + Info += " "; + Info += Type; + return Info; +} + /*}}}*/ +bool debTranslationsIndex::HasPackages() const +{ + if(!TranslationsAvailable()) + return false; + + return FileExists(IndexFile(LanguageCode().c_str())); +} + +// TranslationsIndex::Exists - Check if the index is available /*{{{*/ +// --------------------------------------------------------------------- +/* */ +bool debTranslationsIndex::Exists() const +{ + return FileExists(IndexFile(LanguageCode().c_str())); +} + /*}}}*/ +// TranslationsIndex::Size - Return the size of the index /*{{{*/ +// --------------------------------------------------------------------- +/* This is really only used for progress reporting. */ +unsigned long debTranslationsIndex::Size() const +{ + struct stat S; + if (stat(IndexFile(LanguageCode().c_str()).c_str(),&S) != 0) + return 0; + return S.st_size; +} + /*}}}*/ +// TranslationsIndex::Merge - Load the index file into a cache /*{{{*/ +// --------------------------------------------------------------------- +/* */ +bool debTranslationsIndex::Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const +{ + // Check the translation file, if in use + string TranslationFile = IndexFile(LanguageCode().c_str()); + if (TranslationsAvailable() && FileExists(TranslationFile)) + { + FileFd Trans(TranslationFile,FileFd::ReadOnly); + debListParser TransParser(&Trans); + if (_error->PendingError() == true) + return false; + + Prog.SubProgress(0, Info(TranslationFile.c_str())); + if (Gen.SelectFile(TranslationFile,string(),*this) == false) + return _error->Error("Problem with SelectFile %s",TranslationFile.c_str()); + + // Store the IMS information + pkgCache::PkgFileIterator TransFile = Gen.GetCurFile(); + struct stat TransSt; + if (fstat(Trans.Fd(),&TransSt) != 0) + return _error->Errno("fstat","Failed to stat"); + TransFile->Size = TransSt.st_size; + TransFile->mtime = TransSt.st_mtime; + + if (Gen.MergeList(TransParser) == false) + return _error->Error("Problem with MergeList %s",TranslationFile.c_str()); + } + + return true; +} + /*}}}*/ +// TranslationsIndex::FindInCache - Find this index /*{{{*/ +// --------------------------------------------------------------------- +/* */ +pkgCache::PkgFileIterator debTranslationsIndex::FindInCache(pkgCache &Cache) const +{ + string FileName = IndexFile(LanguageCode().c_str()); + + pkgCache::PkgFileIterator File = Cache.FileBegin(); + for (; File.end() == false; File++) + { + if (FileName != File.FileName()) + continue; + + struct stat St; + if (stat(File.FileName(),&St) != 0) + return pkgCache::PkgFileIterator(Cache); + if ((unsigned)St.st_size != File->Size || St.st_mtime != File->mtime) + return pkgCache::PkgFileIterator(Cache); + return File; + } + return File; +} + /*}}}*/ // StatusIndex::debStatusIndex - Constructor /*{{{*/ // --------------------------------------------------------------------- /* */ @@ -416,6 +580,11 @@ class debIFTypePkg : public pkgIndexFile::Type }; debIFTypePkg() {Label = "Debian Package Index";}; }; +class debIFTypeTrans : public debIFTypePkg +{ + public: + debIFTypeTrans() {Label = "Debian Translation Index";}; +}; class debIFTypeStatus : public pkgIndexFile::Type { public: @@ -428,6 +597,7 @@ class debIFTypeStatus : public pkgIndexFile::Type }; static debIFTypeSrc _apt_Src; static debIFTypePkg _apt_Pkg; +static debIFTypeTrans _apt_Trans; static debIFTypeStatus _apt_Status; const pkgIndexFile::Type *debSourcesIndex::GetType() const @@ -438,6 +608,10 @@ const pkgIndexFile::Type *debPackagesIndex::GetType() const { return &_apt_Pkg; } +const pkgIndexFile::Type *debTranslationsIndex::GetType() const +{ + return &_apt_Trans; +} const pkgIndexFile::Type *debStatusIndex::GetType() const { return &_apt_Status; |