comparison pylons_app/controllers/hg.py @ 55:e00dccb6f211

Implemented index page using vcs
author Marcin Kuzminski <marcin@python-blog.com>
date Thu, 08 Apr 2010 22:59:49 +0200
parents 2e1247e62c5b
children bf1b64046c79
comparison
equal deleted inserted replaced
54:fdf6dc356d45 55:e00dccb6f211
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # -*- coding: utf-8 -*- 2 # -*- coding: utf-8 -*-
3 import logging 3 import logging
4 import os
4 from pylons_app.lib.base import BaseController 5 from pylons_app.lib.base import BaseController
5 from pylons import tmpl_context as c, app_globals as g, session, request, config 6 from pylons import tmpl_context as c, app_globals as g, session, request, config
6 from pylons_app.lib import helpers as h 7 from pylons_app.lib import helpers as h
7 from mako.template import Template 8 from mako.template import Template
8 from pylons.controllers.util import abort 9 from pylons.controllers.util import abort
10 from pylons_app.lib.base import BaseController, render
11 try:
12 from vcs.backends.hg import get_repositories
13 except ImportError:
14 print 'You have to import vcs module'
15 from mercurial.util import matchdate, Abort, makedate
16 from mercurial.hgweb.common import get_contact
9 17
10 log = logging.getLogger(__name__) 18 log = logging.getLogger(__name__)
11 19
12 class HgController(BaseController): 20 class HgController(BaseController):
13 21
14 def __before__(self): 22 def __before__(self):
15 c.repos_prefix = config['repos_name'] 23 c.repos_prefix = config['repos_name']
24 c.staticurl = g.statics
25
26 def index(self):
27 c.repos_list = []
28
29 def get_mtime(spath):
30 cl_path = os.path.join(spath, "00changelog.i")
31 if os.path.exists(cl_path):
32 return os.stat(cl_path).st_mtime
33 else:
34 return os.stat(spath).st_mtime
35
36 for name, r in get_repositories(g.paths[0][0], g.paths[0][1]).items():
37 last_change = (get_mtime(r.spath), makedate()[1])
38 tmp = {}
39 tmp['name'] = name
40 tmp['desc'] = r.ui.config('web', 'description', 'Unknown', untrusted=True)
41 tmp['last_change'] = last_change,
42 tip = r.changectx('tip')
43 tmp['tip'] = tip.__str__(),
44 tmp['rev'] = tip.rev()
45 tmp['contact'] = get_contact(r.ui.config)
46 c.repos_list.append(tmp)
47 return render('/index.html')
16 48
17 def view(self, *args, **kwargs): 49 def view(self, *args, **kwargs):
50 #TODO: reimplement this not tu use hgwebdir
18 response = g.hgapp(request.environ, self.start_response) 51 response = g.hgapp(request.environ, self.start_response)
19 52
20 http_accept = request.environ.get('HTTP_ACCEPT', False) 53 http_accept = request.environ.get('HTTP_ACCEPT', False)
21 if not http_accept: 54 if not http_accept:
22 return abort(status_code=400, detail='no http accept in header') 55 return abort(status_code=400, detail='no http accept in header')