# HG changeset patch # User Mads Kiilerich # Date 1485044212 -3600 # Node ID 05437d03bc9e497f8b7049a7f07e9b82eaa3972f # Parent afda98017955bb9d97e330cabd34b1a6f32522a2 admin: better handling of rescan/delete and invalidate at the same time (Issue #252) It would try to invalidate deleted repositories before rescan would delete them. Instead, scan first, then invalidate. Also, handle VCS error from invalidation and report success as a flash message. diff -r afda98017955 -r 05437d03bc9e kallithea/controllers/admin/settings.py --- a/kallithea/controllers/admin/settings.py Sun Jan 22 01:16:52 2017 +0100 +++ b/kallithea/controllers/admin/settings.py Sun Jan 22 01:16:52 2017 +0100 @@ -203,11 +203,6 @@ 'install git hooks=%s and ' 'overwrite git hooks=%s' % (rm_obsolete, install_git_hooks, overwrite_git_hooks)) - if invalidate_cache: - log.debug('invalidating all repositories cache') - for repo in Repository.get_all(): - ScmModel().mark_for_invalidation(repo.repo_name, delete=True) - filesystem_repos = ScmModel().repo_scan() added, removed = repo2db_mapper(filesystem_repos, rm_obsolete, install_git_hooks=install_git_hooks, @@ -218,6 +213,18 @@ for repo_name in added) or '-', ', '.join(h.escape(safe_unicode(repo_name)) for repo_name in removed) or '-')), category='success') + + if invalidate_cache: + log.debug('invalidating all repositories cache') + i = 0 + for repo in Repository.get_all(): + try: + ScmModel().mark_for_invalidation(repo.repo_name, delete=True) + i += 1 + except VCSError as e: + log.warning('VCS error invalidating %s: %s', repo.repo_name, e) + h.flash(_('Invalidated %s repositories') % i, category='success') + return redirect(url('admin_settings_mapping')) defaults = Setting.get_app_settings()