# HG changeset patch # User Marcin Kuzminski # Date 2011-02-13 01:38:39 # Node ID 51b70569c330e0c5df786ad7e73eaa89ae625a80 # Parent 5554aa9c2480ce4847070a6111e9e53a05ae2849 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. diff --git a/rhodecode/controllers/admin/repos.py b/rhodecode/controllers/admin/repos.py --- a/rhodecode/controllers/admin/repos.py +++ b/rhodecode/controllers/admin/repos.py @@ -153,8 +153,8 @@ class ReposController(BaseController): 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 @@ class ReposController(BaseController): 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 @@ class ReposController(BaseController): 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 diff --git a/rhodecode/controllers/admin/settings.py b/rhodecode/controllers/admin/settings.py --- a/rhodecode/controllers/admin/settings.py +++ b/rhodecode/controllers/admin/settings.py @@ -105,12 +105,15 @@ class SettingsController(BaseController) 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'] diff --git a/rhodecode/lib/utils.py b/rhodecode/lib/utils.py --- a/rhodecode/lib/utils.py +++ b/rhodecode/lib/utils.py @@ -363,12 +363,12 @@ def repo2db_mapper(initial_repo_list, re 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 @@ def repo2db_mapper(initial_repo_list, re } 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): diff --git a/rhodecode/model/db.py b/rhodecode/model/db.py --- a/rhodecode/model/db.py +++ b/rhodecode/model/db.py @@ -114,6 +114,7 @@ class User(Base, BaseModel): 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) diff --git a/rhodecode/model/repo.py b/rhodecode/model/repo.py --- a/rhodecode/model/repo.py +++ b/rhodecode/model/repo.py @@ -90,7 +90,9 @@ class RepoModel(BaseModel): if invalidate and cache: repo.invalidate() - return repo.scalar() + ret = repo.scalar() + self.sa.expunge_all() + return ret def get_users_js(self): diff --git a/rhodecode/model/scm.py b/rhodecode/model/scm.py --- a/rhodecode/model/scm.py +++ b/rhodecode/model/scm.py @@ -217,7 +217,7 @@ class ScmModel(BaseModel): 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