changeset 3694:34093903b505 beta

repo rescann should detach forks of zombie repos, this way we ensure we do proper cleanup of such repos.
author Marcin Kuzminski <marcin@python-works.com>
date Fri, 05 Apr 2013 23:16:21 +0200
parents 6843cabe9925
children 45df84d36b44
files rhodecode/lib/utils.py rhodecode/model/repo.py
diffstat 2 files changed, 8 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/lib/utils.py	Wed Apr 03 02:35:01 2013 +0200
+++ b/rhodecode/lib/utils.py	Fri Apr 05 23:16:21 2013 +0200
@@ -467,9 +467,9 @@
                 log.debug("Removing non-existing repository found in db `%s`" %
                           repo.repo_name)
                 try:
-                    sa.delete(repo)
+                    removed.append(repo.repo_name)
+                    RepoModel(sa).delete(repo, forks='detach', fs_remove=False)
                     sa.commit()
-                    removed.append(repo.repo_name)
                 except Exception:
                     #don't hold further removals on error
                     log.error(traceback.format_exc())
--- a/rhodecode/model/repo.py	Wed Apr 03 02:35:01 2013 +0200
+++ b/rhodecode/model/repo.py	Fri Apr 05 23:16:21 2013 +0200
@@ -466,7 +466,7 @@
         from rhodecode.lib.celerylib import tasks, run_task
         run_task(tasks.create_repo_fork, form_data, cur_user)
 
-    def delete(self, repo, forks=None):
+    def delete(self, repo, forks=None, fs_remove=True):
         """
         Delete given repository, forks parameter defines what do do with
         attached forks. Throws AttachedForksError if deleted repo has attached
@@ -474,6 +474,7 @@
 
         :param repo:
         :param forks: str 'delete' or 'detach'
+        :param fs_remove: remove(archive) repo from filesystem
         """
         repo = self._get_repo(repo)
         if repo:
@@ -491,7 +492,10 @@
             owner = repo.user
             try:
                 self.sa.delete(repo)
-                self.__delete_repo(repo)
+                if fs_remove:
+                    self.__delete_repo(repo)
+                else:
+                    log.debug('skipping removal from filesystem')
                 log_delete_repository(old_repo_dict,
                                       deleted_by=owner.username)
             except Exception: