Mercurial > kallithea
diff rhodecode/controllers/api/api.py @ 3235:d6029dacbcc4 beta
API invalidate_cache function ref #733
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sat, 26 Jan 2013 23:12:50 +0100 |
parents | a50901f2108d |
children | 5f1850e4712a |
line wrap: on
line diff
--- a/rhodecode/controllers/api/api.py Sat Jan 26 23:11:40 2013 +0100 +++ b/rhodecode/controllers/api/api.py Sat Jan 26 23:12:50 2013 +0100 @@ -202,6 +202,32 @@ 'Error occurred during rescan repositories action' ) + def invalidate_cache(self, apiuser, repoid): + """ + Dispatch cache invalidation action on given repo + + :param apiuser: + :param repoid: + """ + repo = get_repo_or_error(repoid) + if HasPermissionAnyApi('hg.admin')(user=apiuser) is False: + # check if we have admin permission for this repo ! + if HasRepoPermissionAnyApi('repository.admin', + 'repository.write')(user=apiuser, + repo_name=repo.repo_name) is False: + raise JSONRPCError('repository `%s` does not exist' % (repoid)) + + try: + invalidated_keys = ScmModel().mark_for_invalidation(repo.repo_name) + Session().commit() + return ('Cache for repository `%s` was invalidated: ' + 'invalidated cache keys: %s' % (repoid, invalidated_keys)) + except Exception: + log.error(traceback.format_exc()) + raise JSONRPCError( + 'Error occurred during cache invalidation action' + ) + def lock(self, apiuser, repoid, locked, userid=Optional(OAttr('apiuser'))): """ Set locking state on particular repository by given user, if