##// END OF EJS Templates
implemented Shortlog as seperate controller,...
Marcin Kuzminski -
r83:db39d0ca default
parent child Browse files
Show More
@@ -0,0 +1,35 b''
1 import logging
2
3 from pylons import tmpl_context as c, app_globals as g, session, request, config, url
4 from pylons.controllers.util import abort, redirect
5
6 from pylons_app.lib.base import BaseController, render
7 from pylons_app.lib.utils import get_repo_slug
8 from pylons_app.model.hg_model import HgModel
9 from webhelpers.paginate import Page
10 log = logging.getLogger(__name__)
11
12 class ShortlogController(BaseController):
13 def __before__(self):
14 c.repos_prefix = config['repos_name']
15 c.staticurl = g.statics
16 c.repo_name = get_repo_slug(request)
17
18
19 def index(self):
20 hg_model = HgModel()
21 lim = 20
22 p = int(request.params.get('page', 1))
23 repo = hg_model.get_repo(c.repo_name)
24 cnt = repo.revisions[-1]
25 gen = repo.get_changesets(None)
26 repo_changesets = list(gen)
27 repo_changesets2 = list(gen)
28 repo_changesets3 = list(gen)
29 repo_changesets4 = list(gen)
30
31 c.repo_changesets = Page(repo_changesets, page=p, item_count=cnt, items_per_page=lim)
32 c.shortlog_data = render('shortlog_data.html')
33 if request.params.get('partial'):
34 return c.shortlog_data
35 return render('/shortlog.html')
@@ -0,0 +1,38 b''
1 <%inherit file="base/base.html"/>
2
3 <%def name="title()">
4 ${_('Repository managment')}
5 </%def>
6 <%def name="breadcrumbs()">
7 ${h.link_to(u'Home',h.url('/'))}
8 /
9 ${h.link_to(c.repo_name,h.url('shortlog_home',repo_name=c.repo_name))}
10 /
11 ${_('shortlog')}
12 </%def>
13 <%def name="page_nav()">
14 <form action="log">
15 <dl class="search">
16 <dt><label>Search: </label></dt>
17 <dd><input type="text" name="rev" /></dd>
18 </dl>
19 </form>
20
21 <ul class="page-nav">
22 <li>${h.link(_('summary'),h.url('summary_home',repo_name=c.repo_name))}</li>
23 <li class="current">${_('shortlog')}</li>
24 <li><a href="log">changelog</a></li>
25 <li><a href="graph/{node|short}">graph</a></li>
26 <li><a href="tags">tags</a></li>
27 <li><a href="branches">branches</a></li>
28 <li><a href="file/{node|short}">files</a></li>
29 </ul>
30 </%def>
31 <%def name="main()">
32
33 <h2 class="no-link no-border">${_('Shortlog')}</h2>
34
35 <div id="shortlog_data">
36 ${c.shortlog_data}
37 </div>
38 </%def> No newline at end of file
@@ -0,0 +1,32 b''
1 ## -*- coding: utf-8 -*-
2 <%!
3 from pylons_app.lib import filters
4 %>
5 <table>
6 %for cnt,cs in enumerate(c.repo_changesets):
7 <tr class="parity${cnt%2}">
8 <td>${cs._ctx.date()|n,filters.age}</td>
9 <td title="${cs.author}">${cs.author|n,filters.person}</td>
10 <td>${h.link_to(cs.message,h.url('rev/'+str(cs._ctx)))}</td>
11 <td class="nowrap">
12 ${h.link_to(_('changeset'),h.url('file/'+str(cs._ctx)))}
13 |
14 ${h.link_to(_('files'),h.url('file/'+str(cs._ctx)))}
15 </td>
16 </tr>
17 %endfor
18 <tr>
19 <script type="text/javascript">
20 var data_div = 'shortlog_data';
21 YAHOO.util.Event.onDOMReady(function(){
22 YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('pager_link'),"click",function(){
23 YAHOO.util.Dom.setStyle('shortlog_data','opacity','0.3');});});
24 </script>
25 <td>${c.repo_changesets.pager('$link_previous ~2~ $link_next',
26 onclick="""YAHOO.util.Connect.asyncRequest('GET','$partial_url',{
27 success:function(o){YAHOO.util.Dom.get(data_div).innerHTML=o.responseText;
28 YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('pager_link'),"click",function(){
29 YAHOO.util.Dom.setStyle(data_div,'opacity','0.3');});
30 YAHOO.util.Dom.setStyle(data_div,'opacity','1');}},null); return false;""")}</td>
31 </tr>
32 </table> No newline at end of file
@@ -0,0 +1,7 b''
1 from pylons_app.tests import *
2
3 class TestShortlogController(TestController):
4
5 def test_index(self):
6 response = self.app.get(url(controller='shortlog', action='index'))
7 # Test response...
@@ -19,6 +19,7 b' debug = true'
19 #error_message = 'mercurial crash !'
19 #error_message = 'mercurial crash !'
20
20
21 [server:main]
21 [server:main]
22 threadpool_workers = 5
22 use = egg:Paste#http
23 use = egg:Paste#http
23 host = 127.0.0.1
24 host = 127.0.0.1
24 port = 5000
25 port = 5000
@@ -19,6 +19,7 b' debug = true'
19 #error_message = 'mercurial crash !'
19 #error_message = 'mercurial crash !'
20
20
21 [server:main]
21 [server:main]
22 threadpool_workers = 10
22 use = egg:Paste#http
23 use = egg:Paste#http
23 host = 127.0.0.1
24 host = 127.0.0.1
24 port = 8001
25 port = 8001
@@ -31,6 +31,7 b' def make_map(config):'
31
31
32
32
33 map.connect('summary_home', '/{repo_name}/_summary', controller='summary')
33 map.connect('summary_home', '/{repo_name}/_summary', controller='summary')
34 map.connect('shortlog_home', '/{repo_name}/_shortlog', controller='shortlog')
34
35
35 map.connect('hg', '/{path_info:.*}', controller='hg',
36 map.connect('hg', '/{path_info:.*}', controller='hg',
36 action="view", path_info='/')
37 action="view", path_info='/')
@@ -1,14 +1,15 b''
1 from mercurial import util
1 from mercurial import util
2 from mercurial.templatefilters import age as _age
2 from mercurial.templatefilters import age as _age, person as _person
3
3
4 age = lambda context, x:_age(x)
4 age = lambda x:_age(x)
5 capitalize = lambda x: x.capitalize()
5 capitalize = lambda x: x.capitalize()
6 date = lambda x: util.datestr(x)
6 date = lambda x: util.datestr(x)
7 email = util.email
7 email = util.email
8 hgdate = lambda context, x: "%d %d" % x
8 person = lambda x: _person(x)
9 isodate = lambda context, x: util.datestr(x, '%Y-%m-%d %H:%M %1%2')
9 hgdate = lambda x: "%d %d" % x
10 isodatesec = lambda context, x: util.datestr(x, '%Y-%m-%d %H:%M:%S %1%2')
10 isodate = lambda x: util.datestr(x, '%Y-%m-%d %H:%M %1%2')
11 localdate = lambda context, x: (x[0], util.makedate()[1])
11 isodatesec = lambda x: util.datestr(x, '%Y-%m-%d %H:%M:%S %1%2')
12 rfc822date = lambda context, x: util.datestr(x, "%a, %d %b %Y %H:%M:%S %1%2")
12 localdate = lambda x: (x[0], util.makedate()[1])
13 rfc3339date = lambda context, x: util.datestr(x, "%Y-%m-%dT%H:%M:%S%1:%2")
13 rfc822date = lambda x: util.datestr(x, "%a, %d %b %Y %H:%M:%S %1%2")
14 time_ago = lambda context, x: util.datestr(_age(x), "%a, %d %b %Y %H:%M:%S %1%2")
14 rfc3339date = lambda x: util.datestr(x, "%Y-%m-%dT%H:%M:%S%1:%2")
15 time_ago = lambda x: util.datestr(_age(x), "%a, %d %b %Y %H:%M:%S %1%2")
@@ -1,3 +1,4 b''
1 ## -*- coding: utf-8 -*-
1 %if c.users_log:
2 %if c.users_log:
2 <table>
3 <table>
3 <tr>
4 <tr>
@@ -17,11 +18,19 b''
17 %endfor
18 %endfor
18
19
19 <tr>
20 <tr>
21 <script type="text/javascript">
22 var data_div = 'user_log';
23 YAHOO.util.Event.onDOMReady(function(){
24 YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('pager_link'),"click",function(){
25 YAHOO.util.Dom.setStyle('shortlog_data','opacity','0.3');});});
26 </script>
20 <td>${c.users_log.pager('$link_previous ~2~ $link_next',
27 <td>${c.users_log.pager('$link_previous ~2~ $link_next',
21 onclick="""YAHOO.util.Connect.asyncRequest('GET','$partial_url',{
28 onclick="""YAHOO.util.Connect.asyncRequest('GET','$partial_url',{
22 success:function(o){YAHOO.util.Dom.get('user_log').innerHTML=o.responseText;}
29 success:function(o){YAHOO.util.Dom.get(data_div).innerHTML=o.responseText;
23 },null); return false;""")}</td>
30 YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('pager_link'),"click",function(){
24 </tr>
31 YAHOO.util.Dom.setStyle(data_div,'opacity','0.3');});
32 YAHOO.util.Dom.setStyle(data_div,'opacity','1');}},null); return false;""")}</td>
33 </tr>
25 </table>
34 </table>
26
35
27 %else:
36 %else:
@@ -1,7 +1,4 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 ##filters definition
3 <%namespace name="f" module="pylons_app.lib.filters" inheritable="True"/>
4
5 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
6 <html xmlns="http://www.w3.org/1999/xhtml">
3 <html xmlns="http://www.w3.org/1999/xhtml">
7 <head>
4 <head>
@@ -1,5 +1,7 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2
2 <%!
3 from pylons_app.lib import filters
4 %>
3 <%inherit file="base/base.html"/>
5 <%inherit file="base/base.html"/>
4 <%def name="title()">
6 <%def name="title()">
5 ${c.repos_prefix} Mercurial Repositories
7 ${c.repos_prefix} Mercurial Repositories
@@ -38,7 +40,7 b''
38 <tr class="parity${cnt%2}">
40 <tr class="parity${cnt%2}">
39 <td>${h.link(repo['name'],h.url('summary_home',repo_name=repo['name']))}</td>
41 <td>${h.link(repo['name'],h.url('summary_home',repo_name=repo['name']))}</td>
40 <td>${repo['description']}</td>
42 <td>${repo['description']}</td>
41 <td>${repo['last_change']|n,self.f.age}</td>
43 <td>${repo['last_change']|n,filters.age}</td>
42 <td>r${repo['rev']}:<a href="/${repo['name']}/rev/${repo['tip']}/">${repo['tip']}</a></td>
44 <td>r${repo['rev']}:<a href="/${repo['name']}/rev/${repo['tip']}/">${repo['tip']}</a></td>
43 <td>${repo['contact']}</td>
45 <td>${repo['contact']}</td>
44 <td class="indexlinks">
46 <td class="indexlinks">
@@ -1,5 +1,7 b''
1 <%inherit file="base/base.html"/>
1 <%inherit file="base/base.html"/>
2
2 <%!
3 from pylons_app.lib import filters
4 %>
3 <%def name="title()">
5 <%def name="title()">
4 ${_('Repository managment')}
6 ${_('Repository managment')}
5 </%def>
7 </%def>
@@ -19,8 +21,8 b''
19 </form>
21 </form>
20
22
21 <ul class="page-nav">
23 <ul class="page-nav">
22 <li class="current">summary</li>
24 <li class="current">${_('summary')}</li>
23 <li><a href="shortlog">shortlog</a></li>
25 <li>${h.link(_('shortlog'),h.url('shortlog_home',repo_name=c.repo_name))}</li>
24 <li><a href="log">changelog</a></li>
26 <li><a href="log">changelog</a></li>
25 <li><a href="graph/{node|short}">graph</a></li>
27 <li><a href="graph/{node|short}">graph</a></li>
26 <li><a href="tags">tags</a></li>
28 <li><a href="tags">tags</a></li>
@@ -39,7 +41,7 b''
39 <dt>${_('contact')}</dt>
41 <dt>${_('contact')}</dt>
40 <dd>${c.repo_info.contact}</dd>
42 <dd>${c.repo_info.contact}</dd>
41 <dt>${_('last change')}</dt>
43 <dt>${_('last change')}</dt>
42 <dd>${c.repo_info.last_change|n,self.f.rfc822date} - ${c.repo_info.last_change|n,self.f.age}</dd>
44 <dd>${c.repo_info.last_change|n,filters.rfc822date} - ${c.repo_info.last_change|n,filters.age}</dd>
43 <dt>${_('url')}</dt>
45 <dt>${_('url')}</dt>
44 <dd><pre>$ hg clone <a href="${c.clone_repo_url}">${c.clone_repo_url}</a></pre></dd>
46 <dd><pre>$ hg clone <a href="${c.clone_repo_url}">${c.clone_repo_url}</a></pre></dd>
45 <dt>${_('Download')}</dt>
47 <dt>${_('Download')}</dt>
@@ -57,7 +59,7 b''
57 <table>
59 <table>
58 %for cnt,cs in enumerate(c.repo_changesets):
60 %for cnt,cs in enumerate(c.repo_changesets):
59 <tr class="parity${cnt%2}">
61 <tr class="parity${cnt%2}">
60 <td>${cs._ctx.date()|n,self.f.age}</td>
62 <td>${cs._ctx.date()|n,filters.age}</td>
61 <td>${cs.author}</td>
63 <td>${cs.author}</td>
62 <td>${h.link_to(cs.message,h.url('rev/'+str(cs._ctx)))}</td>
64 <td>${h.link_to(cs.message,h.url('rev/'+str(cs._ctx)))}</td>
63 <td class="nowrap">
65 <td class="nowrap">
General Comments 0
You need to be logged in to leave comments. Login now