changeset 1039:51b70569c330 beta

extended admin rescan to show what repositories was added and what removed fixed found bugs, added expunge to cached getter since it introduce some more problems. Added some relationship to properly clean related objects from database.
author Marcin Kuzminski <marcin@python-works.com>
date Sun, 13 Feb 2011 01:38:39 +0100
parents 5554aa9c2480
children 8e49b6ceffe1
files rhodecode/controllers/admin/repos.py rhodecode/controllers/admin/settings.py rhodecode/lib/utils.py rhodecode/model/db.py rhodecode/model/repo.py rhodecode/model/scm.py
diffstat 6 files changed, 19 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/controllers/admin/repos.py	Sun Feb 13 00:29:31 2011 +0100
+++ b/rhodecode/controllers/admin/repos.py	Sun Feb 13 01:38:39 2011 +0100
@@ -153,8 +153,8 @@
             else:
                 last_rev = 0
             c.stats_revision = last_rev
-            r = ScmModel().get(repo_name)
-            c.repo_last_rev = r.revisions[-1] if r.revisions else 0
+            repo, dbrepo = ScmModel().get(repo_name, retval='repo')
+            c.repo_last_rev = repo.revisions[-1] if repo.revisions else 0
 
             if last_rev == 0:
                 c.stats_percentage = 0
@@ -282,7 +282,7 @@
     def edit(self, repo_name, format='html'):
         """GET /repos/repo_name/edit: Form to edit an existing item"""
         # url('edit_repo', repo_name=ID)
-        r = ScmModel().get(repo_name)[0]
+        repo, dbrepo = ScmModel().get(repo_name, retval='repo')
 
         repo_model = RepoModel()
         c.repo_info = repo_model.get_by_repo_name(repo_name)
@@ -302,7 +302,7 @@
             last_rev = 0
         c.stats_revision = last_rev
 
-        c.repo_last_rev = r.revisions[-1] if r.revisions else 0
+        c.repo_last_rev = repo.revisions[-1] if repo.revisions else 0
 
         if last_rev == 0 or c.repo_last_rev == 0:
             c.stats_percentage = 0
--- a/rhodecode/controllers/admin/settings.py	Sun Feb 13 00:29:31 2011 +0100
+++ b/rhodecode/controllers/admin/settings.py	Sun Feb 13 01:38:39 2011 +0100
@@ -105,12 +105,15 @@
             rm_obsolete = request.POST.get('destroy', False)
             log.debug('Rescanning directories with destroy=%s', rm_obsolete)
             initial = ScmModel().repo_scan()
+            log.debug('invalidating all repositories')
             for repo_name in initial.keys():
                 invalidate_cache('get_repo_cached_%s' % repo_name)
 
-            repo2db_mapper(initial, rm_obsolete)
+            added, removed = repo2db_mapper(initial, rm_obsolete)
 
-            h.flash(_('Repositories successfully rescanned'), category='success')
+            h.flash(_('Repositories successfully'
+                      ' rescanned added: %s,removed: %s') % (added, removed)
+                      , category='success')
 
         if setting_id == 'whoosh':
             repo_location = self.get_hg_ui_settings()['paths_root_path']
--- a/rhodecode/lib/utils.py	Sun Feb 13 00:29:31 2011 +0100
+++ b/rhodecode/lib/utils.py	Sun Feb 13 01:38:39 2011 +0100
@@ -363,12 +363,12 @@
     sa = meta.Session()
     rm = RepoModel()
     user = sa.query(User).filter(User.admin == True).first()
-
+    added = []
     for name, repo in initial_repo_list.items():
         group = map_groups(name.split('/'))
         if not rm.get_by_repo_name(name, cache=False):
             log.info('repository %s not found creating default', name)
-
+            added.append(name)
             form_data = {
                          'repo_name':name,
                          'repo_type':repo.alias,
@@ -380,13 +380,16 @@
                          }
             rm.create(form_data, user, just_db=True)
 
+    removed = []
     if remove_obsolete:
         #remove from database those repositories that are not in the filesystem
         for repo in sa.query(Repository).all():
             if repo.repo_name not in initial_repo_list.keys():
+                removed.append(repo.repo_name)
                 sa.delete(repo)
                 sa.commit()
 
+    return added, removed
 class OrderedDict(dict, DictMixin):
 
     def __init__(self, *args, **kwds):
--- a/rhodecode/model/db.py	Sun Feb 13 00:29:31 2011 +0100
+++ b/rhodecode/model/db.py	Sun Feb 13 01:38:39 2011 +0100
@@ -114,6 +114,7 @@
     repositories = relationship('Repository')
     user_followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_user_id==User.user_id', cascade='all')
 
+    group_member = relationship('UsersGroupMember', cascade='all')
     @property
     def full_contact(self):
         return '%s %s <%s>' % (self.name, self.lastname, self.email)
--- a/rhodecode/model/repo.py	Sun Feb 13 00:29:31 2011 +0100
+++ b/rhodecode/model/repo.py	Sun Feb 13 01:38:39 2011 +0100
@@ -90,7 +90,9 @@
         if invalidate and cache:
             repo.invalidate()
 
-        return repo.scalar()
+        ret = repo.scalar()
+        self.sa.expunge_all()
+        return ret
 
 
     def get_users_js(self):
--- a/rhodecode/model/scm.py	Sun Feb 13 00:29:31 2011 +0100
+++ b/rhodecode/model/scm.py	Sun Feb 13 01:38:39 2011 +0100
@@ -217,7 +217,7 @@
             invalidate = self._should_invalidate(repo_name)
             if invalidate:
                 log.info('invalidating cache for repository %s', repo_name)
-                #region_invalidate(_get_repo, None, repo_name)
+                region_invalidate(_get_repo, None, repo_name)
                 self._mark_invalidated(invalidate)
                 dbinvalidate = True