Mercurial > kallithea
view pylons_app/controllers/hg.py @ 21:fac1f62a1d71
Wrapped into mako templates,
changed templates info. Added session and cache middleware.
author | Marcin Kuzminski |
---|---|
date | Sun, 28 Feb 2010 02:24:44 +0100 |
parents | bbaab7501c1a |
children | 3142616771cd |
line wrap: on
line source
#!/usr/bin/python # -*- coding: utf-8 -*- import logging from pylons_app.lib.base import BaseController, render from pylons import c, g, session, h, request from mako.template import Template from pprint import pprint import os from mercurial import ui, hg from mercurial.error import RepoError from ConfigParser import ConfigParser log = logging.getLogger(__name__) class HgController(BaseController): def __before__(self): c.repos_prefix = 'etelko' def view(self, *args, **kwargs): response = g.hgapp(request.environ, self.start_response) #for mercurial protocols we can't wrap into mako if request.environ['HTTP_ACCEPT'].find("mercurial") >= 0: return response #wrap the murcurial response in a mako template. template = Template("".join(response), lookup = request.environ['pylons.pylons']\ .config['pylons.g'].mako_lookup) return template.render(g = g, c = c, session = session, h = h) def add_repo(self, new_repo): c.staticurl = g.statics #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) #def _make_app(): # #for single a repo # #return hgweb("/path/to/repo", "Name") # repos = "hgwebdir.config" # return hgwebdir(repos) # # def view(self, environ, start_response): # #the following is only needed when using hgwebdir # app = _make_app() # #return wsgi_app(environ, start_response) # response = app(request.environ, self.start_response) # # if environ['PATH_INFO'].find("static") != -1: # return response # else: # #wrap the murcurial response in a mako template. # template = Template("".join(response), # lookup = environ['pylons.pylons']\ # .config['pylons.g'].mako_lookup) # # return template.render(g = g, c = c, session = session, h = h)