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