Mercurial > kallithea
diff rhodecode/controllers/admin/repos.py @ 3641:b44979649915 beta
recursive forks detach
- added API attrs for option to delete or detach forks
- deleting repos with attached forks raises an special Exception
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sun, 31 Mar 2013 16:18:09 +0200 |
parents | 10b4e34841a4 |
children | ec6354949623 |
line wrap: on
line diff
--- a/rhodecode/controllers/admin/repos.py Sat Mar 30 16:17:56 2013 +0100 +++ b/rhodecode/controllers/admin/repos.py Sun Mar 31 16:18:09 2013 +0200 @@ -50,6 +50,7 @@ from rhodecode.model.repo import RepoModel from rhodecode.lib.compat import json from sqlalchemy.sql.expression import func +from rhodecode.lib.exceptions import AttachedForksError log = logging.getLogger(__name__) @@ -302,38 +303,26 @@ return redirect(url('repos')) try: _forks = repo.forks.count() + handle_forks = None if _forks and request.POST.get('forks'): do = request.POST['forks'] if do == 'detach_forks': - for r in repo.forks: - log.debug('Detaching fork %s from repo %s' % (r, repo)) - r.fork = None - Session().add(r) + handle_forks = 'detach' h.flash(_('Detached %s forks') % _forks, category='success') elif do == 'delete_forks': - for r in repo.forks: - log.debug('Deleting fork %s of repo %s' % (r, repo)) - repo_model.delete(r) + handle_forks = 'delete' h.flash(_('Deleted %s forks') % _forks, category='success') + repo_model.delete(repo, forks=handle_forks) action_logger(self.rhodecode_user, 'admin_deleted_repo', - repo_name, self.ip_addr, self.sa) - repo_model.delete(repo) + repo_name, self.ip_addr, self.sa) invalidate_cache('get_repo_cached_%s' % repo_name) h.flash(_('Deleted repository %s') % repo_name, category='success') Session().commit() - except IntegrityError, e: - if e.message.find('repositories_fork_id_fkey') != -1: - log.error(traceback.format_exc()) - h.flash(_('Cannot delete %s it still contains attached ' - 'forks') % repo_name, - category='warning') - else: - log.error(traceback.format_exc()) - h.flash(_('An error occurred during ' - 'deletion of %s') % repo_name, - category='error') + except AttachedForksError: + h.flash(_('Cannot delete %s it still contains attached forks') + % repo_name, category='warning') - except Exception, e: + except Exception: log.error(traceback.format_exc()) h.flash(_('An error occurred during deletion of %s') % repo_name, category='error')