summaryrefslogtreecommitdiff
path: root/cmdline/apt-get.cc
diff options
context:
space:
mode:
Diffstat (limited to 'cmdline/apt-get.cc')
-rw-r--r--cmdline/apt-get.cc13
1 files changed, 11 insertions, 2 deletions
diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc
index cdefd0034..591e0ff1a 100644
--- a/cmdline/apt-get.cc
+++ b/cmdline/apt-get.cc
@@ -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++)