annotate pylons_app/controllers/hg.py @ 10:525ed90e4577

major app speedup moved the wsgi creation to app globals, in order to make it run only once. little config changes.
author Marcin Kuzminski
date Sat, 20 Feb 2010 14:30:13 +0100
parents 3092016c6d0c
children 5f30a6d558dc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1 #!/usr/bin/python
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2 # -*- coding: utf-8 -*-
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3 import logging
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4 from pylons_app.lib.base import BaseController
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5 from pylons import c, g, session, h, request
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6 from mako.template import Template
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7 from pprint import pprint
5
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
8 import os
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
9 from mercurial import ui, hg
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
10 from mercurial.error import RepoError
6
2620dac853ad added autoconfig loading
Marcin Kuzminski
parents: 5
diff changeset
11 from ConfigParser import ConfigParser
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
12
10
525ed90e4577 major app speedup moved the wsgi creation to app globals, in order to make it run only once.
Marcin Kuzminski
parents: 8
diff changeset
13 log = logging.getLogger(__name__)
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
14
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
15 class HgController(BaseController):
8
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
16 def index(self):
10
525ed90e4577 major app speedup moved the wsgi creation to app globals, in order to make it run only once.
Marcin Kuzminski
parents: 8
diff changeset
17 return g.hgapp(request.environ, self.start_response)
8
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
18
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
19 def view(self, *args, **kwargs):
10
525ed90e4577 major app speedup moved the wsgi creation to app globals, in order to make it run only once.
Marcin Kuzminski
parents: 8
diff changeset
20 return g.hgapp(request.environ, self.start_response)
8
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
21
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
22 def add_repo(self, new_repo):
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
23 tmpl = '''
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
24 <html>
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
25 <body>
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
26 %(msg)s%(new_repo)s!<br \>
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
27 <a href="/">repos</a>
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
28 </body>
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
29 </html>
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
30 '''
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
31 #extra check it can be add since it's the command
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
32 if new_repo == 'add':
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
33 return [tmpl % ({'new_repo':'', 'msg':'you basstard ! this repo is a command'})]
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
34
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
35 new_repo = new_repo.replace(" ", "_")
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
36 new_repo = new_repo.replace("-", "_")
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
37
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
38 try:
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
39 self._create_repo(new_repo)
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
40 except Exception as e:
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
41 return [tmpl % ({'new_repo':' Exception when adding: ' + new_repo, 'msg':str(e)})]
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
42
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
43 return [tmpl % ({'new_repo':new_repo, 'msg':'added repo: '})]
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
44
5
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
45 def _check_repo(self, repo_name):
6
2620dac853ad added autoconfig loading
Marcin Kuzminski
parents: 5
diff changeset
46 p = os.path.dirname(__file__)
2620dac853ad added autoconfig loading
Marcin Kuzminski
parents: 5
diff changeset
47 config_path = os.path.join(p, '../..', 'hgwebdir.config')
2620dac853ad added autoconfig loading
Marcin Kuzminski
parents: 5
diff changeset
48
2620dac853ad added autoconfig loading
Marcin Kuzminski
parents: 5
diff changeset
49 cp = ConfigParser()
2620dac853ad added autoconfig loading
Marcin Kuzminski
parents: 5
diff changeset
50
2620dac853ad added autoconfig loading
Marcin Kuzminski
parents: 5
diff changeset
51 cp.read(config_path)
2620dac853ad added autoconfig loading
Marcin Kuzminski
parents: 5
diff changeset
52 repos_path = cp.get('paths', '/').replace("**", '')
2620dac853ad added autoconfig loading
Marcin Kuzminski
parents: 5
diff changeset
53
2620dac853ad added autoconfig loading
Marcin Kuzminski
parents: 5
diff changeset
54 if not repos_path:
2620dac853ad added autoconfig loading
Marcin Kuzminski
parents: 5
diff changeset
55 raise Exception('Could not read config !')
2620dac853ad added autoconfig loading
Marcin Kuzminski
parents: 5
diff changeset
56
5
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
57 self.repo_path = os.path.join(repos_path, repo_name)
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
58
5
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
59 try:
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
60 r = hg.repository(ui.ui(), self.repo_path)
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
61 hg.verify(r)
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
62 #here we hnow that repo exists it was verified
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
63 log.info('%s repo is already created', repo_name)
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
64 raise Exception('Repo exists')
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
65 except RepoError:
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
66 log.info('%s repo is free for creation', repo_name)
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
67 #it means that there is no valid repo there...
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
68 return True
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
69
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
70
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
71 def _create_repo(self, repo_name):
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
72 if repo_name in [None, '', 'add']:
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
73 raise Exception('undefined repo_name of repo')
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
74
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
75 if self._check_repo(repo_name):
6
2620dac853ad added autoconfig loading
Marcin Kuzminski
parents: 5
diff changeset
76 log.info('creating repo %s in %s', repo_name, self.repo_path)
5
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
77 cmd = """mkdir %s && hg init %s""" \
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
78 % (self.repo_path, self.repo_path)
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
79 os.popen(cmd)
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
80
8
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
81 #def _make_app():
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
82 # #for single a repo
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
83 # #return hgweb("/path/to/repo", "Name")
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
84 # repos = "hgwebdir.config"
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
85 # return hgwebdir(repos)
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
86 #
5
ad0dd3904225 added repo creation
Marcin Kuzminski
parents: 0
diff changeset
87
8
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
88 # def view(self, environ, start_response):
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
89 # #the following is only needed when using hgwebdir
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
90 # app = _make_app()
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
91 # #return wsgi_app(environ, start_response)
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
92 # response = app(request.environ, self.start_response)
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
93 #
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
94 # if environ['PATH_INFO'].find("static") != -1:
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
95 # return response
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
96 # else:
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
97 # #wrap the murcurial response in a mako template.
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
98 # template = Template("".join(response),
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
99 # lookup = environ['pylons.pylons']\
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
100 # .config['pylons.g'].mako_lookup)
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
101 #
3092016c6d0c Changed to webapp, removed get from routes,
Marcin Kuzminski
parents: 6
diff changeset
102 # return template.render(g = g, c = c, session = session, h = h)