Files
@ f93b523c0be3
Branch filter:
Location: kallithea/pylons_app/controllers/hg.py
f93b523c0be3
4.3 KiB
text/x-python
dirty fix for multiple file encodings,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | #!/usr/bin/python
# -*- coding: utf-8 -*-
import logging
from pylons_app.lib.base import BaseController, render
from pylons import c, g, session, request
from pylons_app.lib import helpers as h
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
import encodings
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 and raw files we can't wrap into mako
if request.environ['HTTP_ACCEPT'].find("mercurial") != -1 or \
request.environ['PATH_INFO'].find('raw-file') != -1:
return response
try:
tmpl = u''.join(response)
template = Template(tmpl, lookup=request.environ['pylons.pylons']\
.config['pylons.g'].mako_lookup)
except (RuntimeError, UnicodeDecodeError):
log.info('disabling unicode due to encoding error')
response = g.hgapp(request.environ, self.start_response)
tmpl = ''.join(response)
template = Template(tmpl, lookup=request.environ['pylons.pylons']\
.config['pylons.g'].mako_lookup, disable_unicode=True)
return template.render(g=g, c=c, session=session, h=h)
def manage_hgrc(self):
pass
def hgrc(self, dirname):
filename = os.path.join(dirname, '.hg', 'hgrc')
return filename
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)
|