changeset 6772:05437d03bc9e stable

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.
author Mads Kiilerich <madski@unity3d.com>
date Sun, 22 Jan 2017 01:16:52 +0100
parents afda98017955
children 9a773d2f022b
files kallithea/controllers/admin/settings.py
diffstat 1 files changed, 12 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- 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()