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 /cmdline/apt-cache.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 'cmdline/apt-cache.cc')
-rw-r--r-- | cmdline/apt-cache.cc | 106 |
1 files changed, 84 insertions, 22 deletions
diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc index 0014563b8..94cfab14f 100644 --- a/cmdline/apt-cache.cc +++ b/cmdline/apt-cache.cc @@ -71,6 +71,12 @@ void LocalitySort(pkgCache::VerFile **begin, { qsort(begin,Count,Size,LocalityCompare); } + +void LocalitySort(pkgCache::DescFile **begin, + unsigned long Count,size_t Size) +{ + qsort(begin,Count,Size,LocalityCompare); +} /*}}}*/ // UnMet - Show unmet dependencies /*{{{*/ // --------------------------------------------------------------------- @@ -182,7 +188,14 @@ bool DumpPackage(CommandLine &CmdL) { cout << Cur.VerStr(); for (pkgCache::VerFileIterator Vf = Cur.FileList(); Vf.end() == false; Vf++) - cout << "(" << Vf.File().FileName() << ")"; + cout << " (" << Vf.File().FileName() << ")"; + cout << endl; + for (pkgCache::DescIterator D = Cur.DescriptionList(); D.end() == false; D++) + { + cout << " Description Language: " << D.LanguageCode() << endl + << " File: " << D.FileList().File().FileName() << endl + << " MD5: " << D.md5() << endl; + } cout << endl; } @@ -277,11 +290,15 @@ bool Stats(CommandLine &Cmd) cout << _("Total distinct versions: ") << Cache.Head().VersionCount << " (" << SizeToStr(Cache.Head().VersionCount*Cache.Head().VersionSz) << ')' << endl; + cout << _("Total Distinct Descriptions: ") << Cache.Head().DescriptionCount << " (" << + SizeToStr(Cache.Head().DescriptionCount*Cache.Head().DescriptionSz) << ')' << endl; cout << _("Total dependencies: ") << Cache.Head().DependsCount << " (" << SizeToStr(Cache.Head().DependsCount*Cache.Head().DependencySz) << ')' << endl; cout << _("Total ver/file relations: ") << Cache.Head().VerFileCount << " (" << SizeToStr(Cache.Head().VerFileCount*Cache.Head().VerFileSz) << ')' << endl; + cout << _("Total Desc/File relations: ") << Cache.Head().DescFileCount << " (" << + SizeToStr(Cache.Head().DescFileCount*Cache.Head().DescFileSz) << ')' << endl; cout << _("Total Provides mappings: ") << Cache.Head().ProvidesCount << " (" << SizeToStr(Cache.Head().ProvidesCount*Cache.Head().ProvidesSz) << ')' << endl; @@ -344,6 +361,12 @@ bool Dump(CommandLine &Cmd) for (pkgCache::DepIterator D = V.DependsList(); D.end() == false; D++) cout << " Depends: " << D.TargetPkg().Name() << ' ' << DeNull(D.TargetVer()) << endl; + for (pkgCache::DescIterator D = V.DescriptionList(); D.end() == false; D++) + { + cout << " Description Language: " << D.LanguageCode() << endl + << " File: " << D.FileList().File().FileName() << endl + << " MD5: " << D.md5() << endl; + } } } @@ -1192,17 +1215,56 @@ bool DisplayRecord(pkgCache::VerIterator V) if (_error->PendingError() == true) return false; - // Read the record and then write it out again. + // Read the record unsigned char *Buffer = new unsigned char[GCache->HeaderP->MaxVerFileSize+1]; Buffer[V.FileList()->Size] = '\n'; if (PkgF.Seek(V.FileList()->Offset) == false || - PkgF.Read(Buffer,V.FileList()->Size) == false || - fwrite(Buffer,1,V.FileList()->Size+1,stdout) < (size_t)(V.FileList()->Size+1)) + PkgF.Read(Buffer,V.FileList()->Size) == false) { delete [] Buffer; return false; } - + + // Get a pointer to start of Description field + const unsigned char *DescP = (unsigned char*)strstr((char*)Buffer, "Description:"); + + // Write all but Description + if (fwrite(Buffer,1,DescP - Buffer-1,stdout) < (size_t)(DescP - Buffer-1)) + { + delete [] Buffer; + return false; + } + + // Show the right description + pkgRecords Recs(*GCache); + pkgCache::DescIterator DescDefault = V.DescriptionList(); + pkgCache::DescIterator Desc = DescDefault; + for (; Desc.end() == false; Desc++) + if (pkgIndexFile::LanguageCode() == Desc.LanguageCode()) + break; + if (Desc.end() == true) Desc = DescDefault; + + pkgRecords::Parser &P = Recs.Lookup(Desc.FileList()); + cout << "Description" << ( (strcmp(Desc.LanguageCode(),"") != 0) ? "-" : "" ) << Desc.LanguageCode() << ": " << P.LongDesc(); + + // Find the first field after the description (if there is any) + for(DescP++;DescP != &Buffer[V.FileList()->Size];DescP++) + { + if(*DescP == '\n' && *(DescP+1) != ' ') + { + // write the rest of the buffer + const unsigned char *end=&Buffer[V.FileList()->Size]; + if (fwrite(DescP,1,end-DescP,stdout) < (size_t)(end-DescP)) + { + delete [] Buffer; + return false; + } + + break; + } + } + // write a final newline (after the description) + cout<<endl; delete [] Buffer; return true; @@ -1211,9 +1273,9 @@ bool DisplayRecord(pkgCache::VerIterator V) // Search - Perform a search /*{{{*/ // --------------------------------------------------------------------- /* This searches the package names and pacakge descriptions for a pattern */ -struct ExVerFile +struct ExDescFile { - pkgCache::VerFile *Vf; + pkgCache::DescFile *Df; bool NameMatch; }; @@ -1253,35 +1315,35 @@ bool Search(CommandLine &CmdL) return false; } - ExVerFile *VFList = new ExVerFile[Cache.HeaderP->PackageCount+1]; - memset(VFList,0,sizeof(*VFList)*Cache.HeaderP->PackageCount+1); + ExDescFile *DFList = new ExDescFile[Cache.HeaderP->PackageCount+1]; + memset(DFList,0,sizeof(*DFList)*Cache.HeaderP->PackageCount+1); // Map versions that we want to write out onto the VerList array. for (pkgCache::PkgIterator P = Cache.PkgBegin(); P.end() == false; P++) { - VFList[P->ID].NameMatch = NumPatterns != 0; + DFList[P->ID].NameMatch = NumPatterns != 0; for (unsigned I = 0; I != NumPatterns; I++) { if (regexec(&Patterns[I],P.Name(),0,0,0) == 0) - VFList[P->ID].NameMatch &= true; + DFList[P->ID].NameMatch &= true; else - VFList[P->ID].NameMatch = false; + DFList[P->ID].NameMatch = false; } // Doing names only, drop any that dont match.. - if (NamesOnly == true && VFList[P->ID].NameMatch == false) + if (NamesOnly == true && DFList[P->ID].NameMatch == false) continue; // Find the proper version to use. pkgCache::VerIterator V = Plcy.GetCandidateVer(P); if (V.end() == false) - VFList[P->ID].Vf = V.FileList(); + DFList[P->ID].Df = V.DescriptionList().FileList(); } // Include all the packages that provide matching names too for (pkgCache::PkgIterator P = Cache.PkgBegin(); P.end() == false; P++) { - if (VFList[P->ID].NameMatch == false) + if (DFList[P->ID].NameMatch == false) continue; for (pkgCache::PrvIterator Prv = P.ProvidesList() ; Prv.end() == false; Prv++) @@ -1289,18 +1351,18 @@ bool Search(CommandLine &CmdL) pkgCache::VerIterator V = Plcy.GetCandidateVer(Prv.OwnerPkg()); if (V.end() == false) { - VFList[Prv.OwnerPkg()->ID].Vf = V.FileList(); - VFList[Prv.OwnerPkg()->ID].NameMatch = true; + DFList[Prv.OwnerPkg()->ID].Df = V.DescriptionList().FileList(); + DFList[Prv.OwnerPkg()->ID].NameMatch = true; } } } - - LocalitySort(&VFList->Vf,Cache.HeaderP->PackageCount,sizeof(*VFList)); + + LocalitySort(&DFList->Df,Cache.HeaderP->PackageCount,sizeof(*DFList)); // Iterate over all the version records and check them - for (ExVerFile *J = VFList; J->Vf != 0; J++) + for (ExDescFile *J = DFList; J->Df != 0; J++) { - pkgRecords::Parser &P = Recs.Lookup(pkgCache::VerFileIterator(Cache,J->Vf)); + pkgRecords::Parser &P = Recs.Lookup(pkgCache::DescFileIterator(Cache,J->Df)); bool Match = true; if (J->NameMatch == false) @@ -1331,7 +1393,7 @@ bool Search(CommandLine &CmdL) } } - delete [] VFList; + delete [] DFList; for (unsigned I = 0; I != NumPatterns; I++) regfree(&Patterns[I]); if (ferror(stdout)) |