Mercurial > public > src > rhodecode
diff pylons_app/controllers/admin.py @ 43:2e1247e62c5b
changed for pylons 0.1 / 1.0
added admin controller
author | marcink |
---|---|
date | Wed, 07 Apr 2010 15:28:50 +0200 |
parents | |
children | d924b931b488 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pylons_app/controllers/admin.py Wed Apr 07 15:28:50 2010 +0200 @@ -0,0 +1,87 @@ +import logging + +from pylons import request, response, session, tmpl_context as c, url, app_globals as g +from pylons.controllers.util import abort, redirect + +from pylons_app.lib.base import BaseController, render +import os +from mercurial import ui, hg +from mercurial.error import RepoError +from ConfigParser import ConfigParser +log = logging.getLogger(__name__) + +class AdminController(BaseController): + + + def __before__(self): + c.staticurl = g.statics + + def index(self): + # Return a rendered template + return render('/admin.html') + + + def manage_hgrc(self): + pass + + def hgrc(self, dirname): + filename = os.path.join(dirname, '.hg', 'hgrc') + return filename + + def add_repo(self, new_repo): + + + #extra check it can be add since it's the command + if new_repo == 'add': + c.msg = 'you basstard ! this repo is a command' + c.new_repo = '' + return render('add.html') + + new_repo = new_repo.replace(" ", "_") + new_repo = new_repo.replace("-", "_") + + try: + self._create_repo(new_repo) + c.new_repo = new_repo + c.msg = 'added repo' + except Exception as e: + c.new_repo = 'Exception when adding: %s' % new_repo + c.msg = str(e) + + return render('add.html') + + def _check_repo(self, repo_name): + p = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) + config_path = os.path.join(p, 'hgwebdir.config') + + cp = ConfigParser() + + cp.read(config_path) + repos_path = cp.get('paths', '/').replace("**", '') + + if not repos_path: + raise Exception('Could not read config !') + + self.repo_path = os.path.join(repos_path, repo_name) + + try: + r = hg.repository(ui.ui(), self.repo_path) + hg.verify(r) + #here we hnow that repo exists it was verified + log.info('%s repo is already created', repo_name) + raise Exception('Repo exists') + except RepoError: + log.info('%s repo is free for creation', repo_name) + #it means that there is no valid repo there... + return True + + + def _create_repo(self, repo_name): + if repo_name in [None, '', 'add']: + raise Exception('undefined repo_name of repo') + + if self._check_repo(repo_name): + log.info('creating repo %s in %s', repo_name, self.repo_path) + cmd = """mkdir %s && hg init %s""" \ + % (self.repo_path, self.repo_path) + os.popen(cmd)