# HG changeset patch # User Marcin Kuzminski # Date 2017-12-04 18:24:48 # Node ID d1e95a71de436b01311ff2ac124520aaf0c83400 # Parent 61a0f874171c8babbc8b0f26bcde36a330e53b2d tasks: added a periodic task for repo maintenance. Fixes #5202 diff --git a/rhodecode/lib/celerylib/tasks.py b/rhodecode/lib/celerylib/tasks.py --- a/rhodecode/lib/celerylib/tasks.py +++ b/rhodecode/lib/celerylib/tasks.py @@ -279,6 +279,21 @@ def sync_repo(*args, **kwargs): @async_task(ignore_result=True) +def repo_maintenance(repoid): + from rhodecode.lib import repo_maintenance as repo_maintenance_lib + log = get_logger(repo_maintenance) + repo = Repository.get_by_id_or_repo_name(repoid) + if repo: + maintenance = repo_maintenance_lib.RepoMaintenance() + tasks = maintenance.get_tasks_for_repo(repo) + log.debug('Executing %s tasks on repo `%s`', tasks, repoid) + executed_types = maintenance.execute(repo) + log.debug('Got execution results %s', executed_types) + else: + log.debug('Repo `%s` not found or without a clone_url', repoid) + + +@async_task(ignore_result=True) def check_for_update(): from rhodecode.model.update import UpdateModel update_url = UpdateModel().get_update_url() diff --git a/rhodecode/model/db.py b/rhodecode/model/db.py --- a/rhodecode/model/db.py +++ b/rhodecode/model/db.py @@ -1725,6 +1725,17 @@ class Repository(Base, BaseModel): return q.scalar() @classmethod + def get_by_id_or_repo_name(cls, repoid): + if isinstance(repoid, (int, long)): + try: + repo = cls.get(repoid) + except ValueError: + repo = None + else: + repo = cls.get_by_repo_name(repoid) + return repo + + @classmethod def get_by_full_path(cls, repo_full_path): repo_name = repo_full_path.split(cls.base_path(), 1)[-1] repo_name = cls.normalize_repo_name(repo_name)