]> git.saurik.com Git - apt.git/blobdiff - cmdline/apt-get.cc
Sync with apt@packages.debian.org/apt--main--0--patch-75
[apt.git] / cmdline / apt-get.cc
index 6268f49532e1b45e39e800e7ada300a8ef8baa66..a161847c8530f2a87d7646e1a4edb1c49cdb0793 100644 (file)
@@ -1380,6 +1380,15 @@ bool DoUpgrade(CommandLine &CmdL)
 /* 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)
@@ -1580,8 +1589,8 @@ bool DoInstall(CommandLine &CmdL)
       {
         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++)