diff options
Diffstat (limited to 'src/cmdline/cmdline_clean.cc')
-rw-r--r-- | src/cmdline/cmdline_clean.cc | 73 |
1 files changed, 32 insertions, 41 deletions
diff --git a/src/cmdline/cmdline_clean.cc b/src/cmdline/cmdline_clean.cc index 683f654d..3a9670f7 100644 --- a/src/cmdline/cmdline_clean.cc +++ b/src/cmdline/cmdline_clean.cc @@ -51,7 +51,7 @@ using boost::shared_ptr; int cmdline_clean(int argc, char *argv[], bool simulate) { - const shared_ptr<terminal_io> term = create_terminal(); + const string archivedir = aptcfg->FindDir("Dir::Cache::archives"); _error->DumpErrors(); @@ -61,21 +61,20 @@ int cmdline_clean(int argc, char *argv[], bool simulate) return -1; } - shared_ptr<OpProgress> progress = make_text_progress(false, term, term, term); - - apt_init(progress.get(), false); - - if(_error->PendingError()) + if(simulate) { - _error->DumpErrors(); - return -1; + printf(_("Del %s* %spartial/*\n"), archivedir.c_str(), archivedir.c_str()); + return 0; } - // In case we aren't root. - if(!simulate) - apt_cache_file->GainLock(); - else - apt_cache_file->ReleaseLock(); + // Lock the archive directory + FileFd lock; + if (_config->FindB("Debug::NoLocking",false) == false) + { + lock.Fd(GetLock(archivedir + "lock")); + if (_error->PendingError() == true) + _error->Error(_("Unable to lock the download directory")); + } if(_error->PendingError()) { @@ -83,19 +82,9 @@ int cmdline_clean(int argc, char *argv[], bool simulate) return -1; } - if(aptcfg) - { - if(simulate) - printf(_("Del %s* %spartial/*\n"), - aptcfg->FindDir("Dir::Cache::archives").c_str(), - aptcfg->FindDir("Dir::Cache::archives").c_str()); - else - { - pkgAcquire fetcher; - fetcher.Clean(aptcfg->FindDir("Dir::Cache::archives")); - fetcher.Clean(aptcfg->FindDir("Dir::Cache::archives")+"partial/"); - } - } + pkgAcquire fetcher; + fetcher.Clean(archivedir); + fetcher.Clean(archivedir+"partial/"); int rval=_error->PendingError() ? -1 : 0; @@ -135,6 +124,7 @@ public: int cmdline_autoclean(int argc, char *argv[], bool simulate) { + const string archivedir = aptcfg->FindDir("Dir::Cache::archives"); const shared_ptr<terminal_io> term = create_terminal(); _error->DumpErrors(); @@ -145,21 +135,23 @@ int cmdline_autoclean(int argc, char *argv[], bool simulate) return -1; } - shared_ptr<OpProgress> progress = make_text_progress(false, term, term, term); - - apt_init(progress.get(), false); - - if(_error->PendingError()) + // Lock the archive directory + FileFd lock; + if (!simulate && + _config->FindB("Debug::NoLocking",false) == false) { - _error->DumpErrors(); - return -1; + lock.Fd(GetLock(archivedir + "lock")); + if (_error->PendingError() == true) + { + _error->Error(_("Unable to lock the download directory")); + _error->DumpErrors(); + return -1; + } } - // In case we aren't root. - if(!simulate) - apt_cache_file->GainLock(); - else - apt_cache_file->ReleaseLock(); + shared_ptr<OpProgress> progress = make_text_progress(false, term, term, term); + + apt_init(progress.get(), false); if(_error->PendingError()) { @@ -169,9 +161,8 @@ int cmdline_autoclean(int argc, char *argv[], bool simulate) LogCleaner cleaner(simulate); int rval=0; - if(!(cleaner.Go(aptcfg->FindDir("Dir::Cache::archives"), *apt_cache_file) && - cleaner.Go(aptcfg->FindDir("Dir::Cache::archives")+"partial/", - *apt_cache_file)) || + if(!(cleaner.Go(archivedir, *apt_cache_file) && + cleaner.Go(archivedir+"partial/", *apt_cache_file)) || _error->PendingError()) rval=-1; |