/* 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++)