]> git.saurik.com Git - apt.git/commitdiff
Sync with apt@packages.debian.org/apt--main--0--patch-75
authorOtavio Salvador <otavio@debian.org>
Wed, 30 Mar 2005 23:36:25 +0000 (23:36 +0000)
committerOtavio Salvador <otavio@debian.org>
Wed, 30 Mar 2005 23:36:25 +0000 (23:36 +0000)
Patches applied:

 * apt@packages.debian.org/apt--main--0--patch-75
   Merge bubulle@debian.org--2005/apt--main--0

 * bubulle@debian.org--2005/apt--main--0--patch-58
   Correct file permissions

 * bubulle@debian.org--2005/apt--main--0--patch-59
   Bring consistency to the use of capitals in programs messages

 * bubulle@debian.org--2005/apt--main--0--patch-60
   Correct the permission change on configure.in

 * bubulle@debian.org--2005/apt--main--0--patch-61
   Complete unfuzzification of PO files after the capitalization fixes

 * bubulle@debian.org--2005/apt--main--0--patch-62
   Final work of capitalization cleaning and translation unfuzzyfication

 * bubulle@debian.org--2005/apt--main--0--patch-63
   Correct the "arbitary" typo in apt-ftparchive

 * bubulle@debian.org--2005/apt--main--0--patch-64
   Italian translation update

 * bubulle@debian.org--2005/apt--main--0--patch-65
   Italian translation update

1  2 
apt-pkg/pkgcache.cc
apt-pkg/pkgcachegen.cc
cmdline/apt-cache.cc
cmdline/apt-get.cc

diff --combined apt-pkg/pkgcache.cc
index b15bd43250f69583aa2d271b12cff5fa4d6057c4,6ef7cafb09476f053bd4145d516c3ced73b278ce..2189d5111cfb7b575ef63be80a3418d0aa2df57b
@@@ -52,7 -52,7 +52,7 @@@ pkgCache::Header::Header(
     
     /* Whenever the structures change the major version should be bumped,
        whenever the generator changes the minor version should be bumped. */
 -   MajorVersion = 4;
 +   MajorVersion = 5;
     MinorVersion = 0;
     Dirty = false;
     
     PackageSz = sizeof(pkgCache::Package);
     PackageFileSz = sizeof(pkgCache::PackageFile);
     VersionSz = sizeof(pkgCache::Version);
 +   DescriptionSz = sizeof(pkgCache::Description);
     DependencySz = sizeof(pkgCache::Dependency);
     ProvidesSz = sizeof(pkgCache::Provides);
     VerFileSz = sizeof(pkgCache::VerFile);
 +   DescFileSz = sizeof(pkgCache::DescFile);
     
     PackageCount = 0;
     VersionCount = 0;
 +   DescriptionCount = 0;
     DependsCount = 0;
     PackageFileCount = 0;
     VerFileCount = 0;
 +   DescFileCount = 0;
     ProvidesCount = 0;
     MaxVerFileSize = 0;
 +   MaxDescFileSize = 0;
     
     FileList = 0;
     StringList = 0;
@@@ -94,10 -89,8 +94,10 @@@ bool pkgCache::Header::CheckSizes(Heade
         PackageSz == Against.PackageSz &&
         PackageFileSz == Against.PackageFileSz &&
         VersionSz == Against.VersionSz &&
 +       DescriptionSz == Against.DescriptionSz &&
         DependencySz == Against.DependencySz &&
         VerFileSz == Against.VerFileSz &&
 +       DescFileSz == Against.DescFileSz &&
         ProvidesSz == Against.ProvidesSz)
        return true;
     return false;
@@@ -122,10 -115,8 +122,10 @@@ bool pkgCache::ReMap(
     HeaderP = (Header *)Map.Data();
     PkgP = (Package *)Map.Data();
     VerFileP = (VerFile *)Map.Data();
 +   DescFileP = (DescFile *)Map.Data();
     PkgFileP = (PackageFile *)Map.Data();
     VerP = (Version *)Map.Data();
 +   DescP = (Description *)Map.Data();
     ProvideP = (Provides *)Map.Data();
     DepP = (Dependency *)Map.Data();
     StringItemP = (StringItem *)Map.Data();
     // Locate our VS..
     if (HeaderP->VerSysName == 0 ||
         (VS = pkgVersioningSystem::GetVS(StrP + HeaderP->VerSysName)) == 0)
-       return _error->Error(_("This APT does not support the Versioning System '%s'"),StrP + HeaderP->VerSysName);
+       return _error->Error(_("This APT does not support the versioning system '%s'"),StrP + HeaderP->VerSysName);
  
     // Chcek the arhcitecture
     if (HeaderP->Architecture == 0 ||
diff --combined apt-pkg/pkgcachegen.cc
index 053d6396de4dcb5d536fd7c69fdd01c97d2ca3bd,075af3eec2ab89cef855fcba67133ecd41967bb3..3ed6175ea8e1dce436e91df6f2d2c024b6588e62
@@@ -125,28 -125,6 +125,28 @@@ bool pkgCacheGenerator::MergeList(ListP
        string Version = List.Version();
        if (Version.empty() == true)
        {
 +       // Find the right version to write the description
 +       MD5SumValue CurMd5 = List.Description_md5();
 +       pkgCache::VerIterator Ver = Pkg.VersionList();
 +       map_ptrloc *LastVer = &Pkg->VersionList;
 +       
 +       for (; Ver.end() == false; LastVer = &Ver->NextVer, Ver++) 
 +       {
 +          pkgCache::DescIterator Desc = Ver.DescriptionList();
 +          map_ptrloc *LastDesc = &Ver->DescriptionList;
 +       
 +          for (; Desc.end() == false; LastDesc = &Desc->NextDesc, Desc++)
 +             if (MD5SumValue(Desc.md5()) == CurMd5) {
 +                // Add new description
 +                *LastDesc = NewDescription(Desc, List.DescriptionLanguage(), CurMd5, *LastDesc);
 +                Desc->ParentPkg = Pkg.Index();
 + 
 +                if (NewFileDesc(Desc,List) == false)
 +                   return _error->Error(_("Error occured while processing %s (NewFileDesc1)"),PackageName.c_str());
 +                break;
 +             }
 +       }
 + 
         if (List.UsePackage(Pkg,pkgCache::VerIterator(Cache)) == false)
            return _error->Error(_("Error occured while processing %s (UsePackage1)"),
                                 PackageName.c_str());
        }
  
        pkgCache::VerIterator Ver = Pkg.VersionList();
 -      map_ptrloc *Last = &Pkg->VersionList;
 +      map_ptrloc *LastVer = &Pkg->VersionList;
        int Res = 1;
 -      for (; Ver.end() == false; Last = &Ver->NextVer, Ver++)
 +      for (; Ver.end() == false; LastVer = &Ver->NextVer, Ver++)
        {
         Res = Cache.VS->CmpVersion(Version,Ver.VerStr());
         if (Res >= 0)
        // Skip to the end of the same version set.
        if (Res == 0)
        {
 -       for (; Ver.end() == false; Last = &Ver->NextVer, Ver++)
 +       for (; Ver.end() == false; LastVer = &Ver->NextVer, Ver++)
         {
            Res = Cache.VS->CmpVersion(Version,Ver.VerStr());
            if (Res != 0)
        }
  
        // Add a new version
 -      *Last = NewVersion(Ver,Version,*Last);
 +      *LastVer = NewVersion(Ver,Version,*LastVer);
        Ver->ParentPkg = Pkg.Index();
        Ver->Hash = Hash;
 +
        if (List.NewVersion(Ver) == false)
         return _error->Error(_("Error occured while processing %s (NewVersion1)"),
                              PackageName.c_str());
         FoundFileDeps |= List.HasFileDeps();
         return true;
        }      
 +
 +      /* Record the Description data. Description data always exist in
 +       Packages and Translation-* files. */
 +      pkgCache::DescIterator Desc = Ver.DescriptionList();
 +      map_ptrloc *LastDesc = &Ver->DescriptionList;
 +      
 +      // Skip to the end of description set
 +      for (; Desc.end() == false; LastDesc = &Desc->NextDesc, Desc++);
 +
 +      // Add new description
 +      *LastDesc = NewDescription(Desc, List.DescriptionLanguage(), List.Description_md5(), *LastDesc);
 +      Desc->ParentPkg = Pkg.Index();
 +
 +      if (NewFileDesc(Desc,List) == false)
 +       return _error->Error(_("Error occured while processing %s (NewFileDesc2)"),PackageName.c_str());
     }
  
     FoundFileDeps |= List.HasFileDeps();
     if (Cache.HeaderP->VersionCount >= (1ULL<<(sizeof(Cache.VerP->ID)*8))-1)
        return _error->Error(_("Wow, you exceeded the number of versions "
                             "this APT is capable of."));
 +   if (Cache.HeaderP->DescriptionCount >= (1ULL<<(sizeof(Cache.DescP->ID)*8))-1)
 +      return _error->Error(_("Wow, you exceeded the number of descriptions "
 +                           "this APT is capable of."));
     if (Cache.HeaderP->DependsCount >= (1ULL<<(sizeof(Cache.DepP->ID)*8))-1ULL)
        return _error->Error(_("Wow, you exceeded the number of dependencies "
                             "this APT is capable of."));
@@@ -312,7 -271,7 +312,7 @@@ bool pkgCacheGenerator::NewPackage(pkgC
     Pkg = Cache.FindPkg(Name);
     if (Pkg.end() == false)
        return true;
 -       
 +
     // Get a structure
     unsigned long Package = Map.Allocate(sizeof(pkgCache::Package));
     if (Package == 0)
@@@ -390,61 -349,6 +390,61 @@@ unsigned long pkgCacheGenerator::NewVer
     return Version;
  }
                                                                        /*}}}*/
 +// CacheGenerator::NewFileDesc - Create a new File<->Desc association /*{{{*/
 +// ---------------------------------------------------------------------
 +/* */
 +bool pkgCacheGenerator::NewFileDesc(pkgCache::DescIterator &Desc,
 +                                 ListParser &List)
 +{
 +   if (CurrentFile == 0)
 +      return true;
 +   
 +   // Get a structure
 +   unsigned long DescFile = Map.Allocate(sizeof(pkgCache::DescFile));
 +   if (DescFile == 0)
 +      return 0;
 +   
 +   pkgCache::DescFileIterator DF(Cache,Cache.DescFileP + DescFile);
 +   DF->File = CurrentFile - Cache.PkgFileP;
 +   
 +   // Link it to the end of the list
 +   map_ptrloc *Last = &Desc->FileList;
 +   for (pkgCache::DescFileIterator D = Desc.FileList(); D.end() == false; D++)
 +      Last = &D->NextFile;
 +   DF->NextFile = *Last;
 +   *Last = DF.Index();
 +   
 +   DF->Offset = List.Offset();
 +   DF->Size = List.Size();
 +   if (Cache.HeaderP->MaxDescFileSize < DF->Size)
 +      Cache.HeaderP->MaxDescFileSize = DF->Size;
 +   Cache.HeaderP->DescFileCount++;
 +   
 +   return true;
 +}
 +                                                                      /*}}}*/
 +// CacheGenerator::NewDescription - Create a new Description          /*{{{*/
 +// ---------------------------------------------------------------------
 +/* This puts a description structure in the linked list */
 +map_ptrloc pkgCacheGenerator::NewDescription(pkgCache::DescIterator &Desc,
 +                                          const string &Lang, const MD5SumValue &md5sum,
 +                                          map_ptrloc Next)
 +{
 +   // Get a structure
 +   map_ptrloc Description = Map.Allocate(sizeof(pkgCache::Description));
 +   if (Description == 0)
 +      return 0;
 +
 +   // Fill it in
 +   Desc = pkgCache::DescIterator(Cache,Cache.DescP + Description);
 +   Desc->NextDesc = Next;
 +   Desc->ID = Cache.HeaderP->DescriptionCount++;
 +   Desc->language_code = Map.WriteString(Lang);
 +   Desc->md5sum = Map.WriteString(md5sum.Value());
 +
 +   return Description;
 +}
 +                                                                      /*}}}*/
  // ListParser::NewDepends - Create a dependency element                       /*{{{*/
  // ---------------------------------------------------------------------
  /* This creates a dependency element in the tree. It is linked to the
@@@ -676,7 -580,7 +676,7 @@@ static bool CheckValidity(string CacheF
        pkgCache::PkgFileIterator File = (*Start)->FindInCache(Cache);
        if (File.end() == true)
         return false;
 -      
 +
        Visited[File->ID] = true;
     }
     
@@@ -736,7 -640,7 +736,7 @@@ static bool BuildCache(pkgCacheGenerato
        }
        
        unsigned long Size = (*I)->Size();
-       Progress.OverallProgress(CurrentSize,TotalSize,Size,_("Reading Package Lists"));
+       Progress.OverallProgress(CurrentSize,TotalSize,Size,_("Reading package lists"));
        CurrentSize += Size;
        
        if ((*I)->Merge(Gen,Progress) == false)
@@@ -805,12 -709,12 +805,12 @@@ bool pkgMakeStatusCache(pkgSourceList &
     if (Writeable == false && AllowMem == false && CacheFile.empty() == false)
        return _error->Error(_("Unable to write to %s"),flNotFile(CacheFile).c_str());
     
-    Progress.OverallProgress(0,1,1,_("Reading Package Lists"));
+    Progress.OverallProgress(0,1,1,_("Reading package lists"));
     
     // Cache is OK, Fin.
     if (CheckValidity(CacheFile,Files.begin(),Files.end(),OutMap) == true)
     {
-       Progress.OverallProgress(1,1,1,_("Reading Package Lists"));
+       Progress.OverallProgress(1,1,1,_("Reading package lists"));
        return true;
     }
     
@@@ -933,7 -837,7 +933,7 @@@ bool pkgMakeOnlyStatusCache(OpProgress 
     TotalSize = ComputeSize(Files.begin()+EndOfSource,Files.end());
     
     // Build the status cache
-    Progress.OverallProgress(0,1,1,_("Reading Package Lists"));
+    Progress.OverallProgress(0,1,1,_("Reading package lists"));
     pkgCacheGenerator Gen(Map.Get(),&Progress);
     if (_error->PendingError() == true)
        return false;
diff --combined cmdline/apt-cache.cc
index 7f871f0730860c35eb59f3d8693c74a023bf2f1c,0014563b8a6a5765ca09a692bd686016b7235d2f..7d402a2fd422675e750f4324128ddd49e94ac56f
@@@ -71,12 -71,6 +71,12 @@@ void LocalitySort(pkgCache::VerFile **b
  {   
     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                                    /*{{{*/
  // ---------------------------------------------------------------------
@@@ -188,14 -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;
        }
        
  bool Stats(CommandLine &Cmd)
  {
     pkgCache &Cache = *GCache;
-    cout << _("Total Package Names : ") << Cache.Head().PackageCount << " (" <<
+    cout << _("Total package names : ") << Cache.Head().PackageCount << " (" <<
        SizeToStr(Cache.Head().PackageCount*Cache.Head().PackageSz) << ')' << endl;
  
     int Normal = 0;
         continue;
        }
     }
-    cout << _("  Normal Packages: ") << Normal << endl;
-    cout << _("  Pure Virtual Packages: ") << Virtual << endl;
-    cout << _("  Single Virtual Packages: ") << DVirt << endl;
-    cout << _("  Mixed Virtual Packages: ") << NVirt << endl;
+    cout << _("  Normal packages: ") << Normal << endl;
+    cout << _("  Pure virtual packages: ") << Virtual << endl;
+    cout << _("  Single virtual packages: ") << DVirt << endl;
+    cout << _("  Mixed virtual packages: ") << NVirt << endl;
     cout << _("  Missing: ") << Missing << endl;
     
-    cout << _("Total Distinct Versions: ") << Cache.Head().VersionCount << " (" <<
+    cout << _("Total distinct versions: ") << Cache.Head().VersionCount << " (" <<
        SizeToStr(Cache.Head().VersionCount*Cache.Head().VersionSz) << ')' << endl;
-    cout << _("Total Dependencies: ") << Cache.Head().DependsCount << " (" << 
 +   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 << " (" <<
+    cout << _("Total ver/file relations: ") << Cache.Head().VerFileCount << " (" <<
        SizeToStr(Cache.Head().VerFileCount*Cache.Head().VerFileSz) << ')' << endl;
-    cout << _("Total Provides Mappings: ") << Cache.Head().ProvidesCount << " (" <<
 +   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;
     
     // String list stats
        Count++;
        Size += strlen(Cache.StrP + I->String) + 1;
     }
-    cout << _("Total Globbed Strings: ") << Count << " (" << SizeToStr(Size) << ')' << endl;
+    cout << _("Total globbed strings: ") << Count << " (" << SizeToStr(Size) << ')' << endl;
  
     unsigned long DepVerSize = 0;
     for (pkgCache::PkgIterator P = Cache.PkgBegin(); P.end() == false; P++)
         }
        }
     }
-    cout << _("Total Dependency Version space: ") << SizeToStr(DepVerSize) << endl;
+    cout << _("Total dependency version space: ") << SizeToStr(DepVerSize) << endl;
     
     unsigned long Slack = 0;
     for (int I = 0; I != 7; I++)
        Slack += Cache.Head().Pools[I].ItemSize*Cache.Head().Pools[I].Count;
-    cout << _("Total Slack space: ") << SizeToStr(Slack) << endl;
+    cout << _("Total slack space: ") << SizeToStr(Slack) << endl;
     
     unsigned long Total = 0;
     Total = Slack + Size + Cache.Head().DependsCount*Cache.Head().DependencySz + 
             Cache.Head().PackageCount*Cache.Head().PackageSz + 
             Cache.Head().VerFileCount*Cache.Head().VerFileSz +
             Cache.Head().ProvidesCount*Cache.Head().ProvidesSz;
-    cout << _("Total Space Accounted for: ") << SizeToStr(Total) << endl;
+    cout << _("Total space accounted for: ") << SizeToStr(Total) << endl;
     
     return true;
  }
@@@ -361,12 -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;
 +       } 
        }      
     }
  
@@@ -1215,51 -1192,28 +1215,51 @@@ bool DisplayRecord(pkgCache::VerIterato
     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;
     }
 -   
 +
 +   // Strip the Description
 +   unsigned char *DescP = (unsigned char*)strstr((char*)Buffer, "Description:");
 +   *DescP='\0';
 +
 +   // Write all the rest
 +   if (fwrite(Buffer,1,V.FileList()->Size+1,stdout) < (size_t)(V.FileList()->Size+1))
 +   {
 +      delete [] Buffer;
 +      return false;
 +   }
 +
     delete [] Buffer;
  
 +   // 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() << endl;
 +
 +
     return true;
  }
                                                                        /*}}}*/
  // 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;
  };
  
@@@ -1299,35 -1253,35 +1299,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++)
         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)
        }
     }
     
 -   delete [] VFList;
 +   delete [] DFList;
     for (unsigned I = 0; I != NumPatterns; I++)
        regfree(&Patterns[I]);
     if (ferror(stdout))
@@@ -1406,19 -1360,6 +1406,19 @@@ bool ShowPackage(CommandLine &CmdL
  
        ++found;
  
 +      // Show virtual packages
 +      if (Pkg->ProvidesList != 0)
 +      {
 +       ioprintf(std::cout,_("Package %s is a virtual package provided by:\n"),
 +                Pkg.Name());
 +       
 +       pkgCache::PrvIterator I = Pkg.ProvidesList();
 +       for (; I.end() == false; I++)
 +          cout << "  " << I.OwnerPkg().Name() << endl;
 +       cout << _("You should explicitly select one to show.") << endl;
 +       continue;
 +      }
 +
        // Find the proper version to use.
        if (_config->FindB("APT::Cache::AllVersions","true") == true)
        {
@@@ -1518,7 -1459,7 +1518,7 @@@ bool Policy(CommandLine &CmdL
     // Print out all of the package files
     if (CmdL.FileList[1] == 0)
     {
-       cout << _("Package Files:") << endl;   
+       cout << _("Package files:") << endl;   
        for (pkgCache::PkgFileIterator F = Cache.FileBegin(); F.end() == false; F++)
        {
         // Locate the associated index files so we can derive a description
        }
        
        // Show any packages have explicit pins
-       cout << _("Pinned Packages:") << endl;
+       cout << _("Pinned packages:") << endl;
        pkgCache::PkgIterator I = Cache.PkgBegin();
        for (;I.end() != true; I++)
        {
        // Pinned version
        if (Plcy.GetPriority(Pkg) != 0)
        {
-        cout << _("  Package Pin: ");
+        cout << _("  Package pin: ");
         V = Plcy.GetMatch(Pkg);
         if (V.end() == true)
            cout << _("(not found)") << endl;
        }
        
        // Show the priority tables
-       cout << _("  Version Table:") << endl;
+       cout << _("  Version table:") << endl;
        for (V = Pkg.VersionList(); V.end() == false; V++)
        {
         if (Pkg.CurrentVer() == V)
diff --combined cmdline/apt-get.cc
index 591e0ff1aeb5b98f0ab7a1697161b73c1f3899ba,6268f49532e1b45e39e800e7ada300a8ef8baa66..a161847c8530f2a87d7646e1a4edb1c49cdb0793
@@@ -631,7 -631,7 +631,7 @@@ bool CacheFile::CheckDeps(bool AllowBro
  
     // Check that the system is OK
     if (DCache->DelCount() != 0 || DCache->InstCount() != 0)
-       return _error->Error("Internal Error, non-zero counts");
+       return _error->Error("Internal error, non-zero counts");
     
     // Apply corrections for half-installed packages
     if (pkgApplyStatus(*DCache) == false)
@@@ -695,7 -695,7 +695,7 @@@ static bool CheckAuth(pkgAcquire& Fetch
     if (_config->FindI("quiet",0) < 2
         && _config->FindB("APT::Get::Assume-Yes",false) == false)
     {
-       c2out << _("Install these packages without verification? [y/N] ") << flush;
+       c2out << _("Install these packages without verification [y/N]? ") << flush;
        if (!YnPrompt(false))
           return _error->Error(_("Some packages could not be authenticated"));
  
@@@ -750,7 -750,7 +750,7 @@@ bool InstallPackages(CacheFile &Cache,b
     if (Cache->BrokenCount() != 0)
     {
        ShowBroken(c1out,Cache,false);
-       return _error->Error("Internal Error, InstallPackages was called with broken packages!");
+       return _error->Error("Internal error, InstallPackages was called with broken packages!");
     }
  
     if (Cache->DelCount() == 0 && Cache->InstCount() == 0 &&
  
     // No remove flag
     if (Cache->DelCount() != 0 && _config->FindB("APT::Get::Remove",true) == false)
-       return _error->Error(_("Packages need to be removed but Remove is disabled."));
+       return _error->Error(_("Packages need to be removed but remove is disabled."));
         
     // Run the simulator ..
     if (_config->FindB("APT::Get::Simulate") == true)
        if (Res == pkgPackageManager::Failed)
         return false;
        if (Res != pkgPackageManager::Completed)
-        return _error->Error("Internal Error, Ordering didn't finish");
+        return _error->Error("Internal error, Ordering didn't finish");
        return true;
     }
     
         if (_config->FindI("quiet",0) < 2 &&
             _config->FindB("APT::Get::Assume-Yes",false) == false)
         {
-           c2out << _("Do you want to continue? [Y/n] ") << flush;
+           c2out << _("Do you want to continue [Y/n]? ") << flush;
         
            if (YnPrompt() == false)
            {
        if (Failed == true && PM->FixMissing() == false)
        {
         cerr << _("Unable to correct missing packages.") << endl;
-        return _error->Error(_("Aborting Install."));
+        return _error->Error(_("Aborting install."));
        }
                 
        _system->UnLock();
@@@ -1369,7 -1369,7 +1369,7 @@@ bool DoUpgrade(CommandLine &CmdL
     if (pkgAllUpgrade(Cache) == false)
     {
        ShowBroken(c1out,Cache,false);
-       return _error->Error(_("Internal Error, AllUpgrade broke stuff"));
+       return _error->Error(_("Internal error, AllUpgrade broke stuff"));
     }
     
     return InstallPackages(Cache,true);
  /* Install named packages */
  bool DoInstall(CommandLine &CmdL)
  {
 +   // Lock the list directory
 +   FileFd Lock;
 +   if (_config->FindB("Debug::NoLocking",false) == false)
 +   {
 +      Lock.Fd(GetLock(_config->FindDir("Dir::State::Lists") + "lock"));
 +      if (_error->PendingError() == true)
 +        return _error->Error(_("Unable to lock the list directory"));
 +   }
 +   
     CacheFile Cache;
     if (Cache.OpenForInstall() == false || 
         Cache.CheckDeps(CmdL.FileSize() != 1) == false)
        {
         pkgCache::PkgIterator I(Cache,Cache.List[J]);
  
 -       /* Just look at the ones we want to install */
 -       if ((*Cache)[I].Install() == false)
 +       /* Just look at the ones we want to install but skip all already selected */
 +       if ((*Cache)[I].Install() == false || (*Cache)[I].NewInstall() == true)
           continue;
  
         for (pkgCache::VerIterator V = I.VersionList(); V.end() == false; V++)
@@@ -1670,7 -1661,7 +1670,7 @@@ bool DoDistUpgrade(CommandLine &CmdL
     if (Cache.OpenForInstall() == false || Cache.CheckDeps() == false)
        return false;
  
-    c0out << _("Calculating Upgrade... ") << flush;
+    c0out << _("Calculating upgrade... ") << flush;
     if (pkgDistUpgrade(*Cache) == false)
     {
        c0out << _("Failed") << endl;
@@@ -1743,7 -1734,7 +1743,7 @@@ bool DoDSelectUpgrade(CommandLine &CmdL
        if (Fix.Resolve() == false)
        {
         ShowBroken(c1out,Cache,false);
-        return _error->Error("Internal Error, problem resolver broke stuff");
+        return _error->Error("Internal error, problem resolver broke stuff");
        }
     }
  
     if (pkgAllUpgrade(Cache) == false)
     {
        ShowBroken(c1out,Cache,false);
-       return _error->Error("Internal Error, problem resolver broke stuff");
+       return _error->Error("Internal error, problem resolver broke stuff");
     }
     
     return InstallPackages(Cache,false);
@@@ -1939,7 -1930,7 +1939,7 @@@ bool DoSource(CommandLine &CmdL
     if (_config->FindB("APT::Get::Simulate",false) == true)
     {
        for (unsigned I = 0; I != J; I++)
-        ioprintf(cout,_("Fetch Source %s\n"),Dsc[I].Package.c_str());
+        ioprintf(cout,_("Fetch source %s\n"),Dsc[I].Package.c_str());
        return true;
     }
     
@@@ -2324,7 -2315,7 +2324,7 @@@ bool ShowHelp(CommandLine &CmdL
            
     if (_config->FindB("version") == true)
     {
-       cout << _("Supported Modules:") << endl;
+       cout << _("Supported modules:") << endl;
        
        for (unsigned I = 0; I != pkgVersioningSystem::GlobalListLen; I++)
        {