# HG changeset patch # User Marcin Kuzminski # Date 1297557519 -3600 # 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 -r 5554aa9c2480 -r 51b70569c330 rhodecode/controllers/admin/repos.py --- 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 diff -r 5554aa9c2480 -r 51b70569c330 rhodecode/controllers/admin/settings.py --- 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'] diff -r 5554aa9c2480 -r 51b70569c330 rhodecode/lib/utils.py --- 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): diff -r 5554aa9c2480 -r 51b70569c330 rhodecode/model/db.py --- 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) diff -r 5554aa9c2480 -r 51b70569c330 rhodecode/model/repo.py --- 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): diff -r 5554aa9c2480 -r 51b70569c330 rhodecode/model/scm.py --- 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