Show More
@@ -0,0 +1,33 b'' | |||
|
1 | <%! | |
|
2 | from pylons_app.lib import filters | |
|
3 | %> | |
|
4 | <%inherit file="/base/base.html"/> | |
|
5 | ||
|
6 | <%def name="title()"> | |
|
7 | ${_('Changeset')} | |
|
8 | </%def> | |
|
9 | <%def name="breadcrumbs()"> | |
|
10 | ${h.link_to(u'Home',h.url('/'))} | |
|
11 | / | |
|
12 | ${h.link_to(c.repo_name,h.url('changeset_home',repo_name=c.repo_name))} | |
|
13 | / | |
|
14 | ${_('changeset')} | |
|
15 | </%def> | |
|
16 | <%def name="page_nav()"> | |
|
17 | ${self.menu('changelog')} | |
|
18 | </%def> | |
|
19 | ||
|
20 | <%def name="main()"> | |
|
21 | <h2 class="no-link no-border">${_('Changeset')}</h2> | |
|
22 | <div class="cs_files"> | |
|
23 | %for filenode in c.changeset.added: | |
|
24 | <p class="cs_added">${filenode}</p> | |
|
25 | %endfor | |
|
26 | %for filenode in c.changeset.changed: | |
|
27 | <p class="cs_changed">${filenode}</p> | |
|
28 | %endfor | |
|
29 | %for filenode in c.changeset.removed: | |
|
30 | <p class="cs_removed">${filenode}</p> | |
|
31 | %endfor | |
|
32 | </div> | |
|
33 | </%def> No newline at end of file |
@@ -0,0 +1,44 b'' | |||
|
1 | <%inherit file="/base/base.html"/> | |
|
2 | ||
|
3 | <%def name="title()"> | |
|
4 | ${_('File annotate')} | |
|
5 | </%def> | |
|
6 | <%def name="breadcrumbs()"> | |
|
7 | ${h.link_to(u'Home',h.url('/'))} | |
|
8 | / | |
|
9 | ${h.link_to(c.repo_name,h.url('files_home',repo_name=c.repo_name))} | |
|
10 | / | |
|
11 | ${_('files')} | |
|
12 | </%def> | |
|
13 | <%def name="page_nav()"> | |
|
14 | ${self.menu('files')} | |
|
15 | </%def> | |
|
16 | <%def name="css()"> | |
|
17 | <link rel="stylesheet" href="/css/monoblue_custom.css" type="text/css" /> | |
|
18 | <link rel="stylesheet" href="/css/pygments.css" type="text/css" /> | |
|
19 | </%def> | |
|
20 | <%def name="main()"> | |
|
21 | <h2 class="no-link no-border">${_('Annotate')}</h2> | |
|
22 | <div id="files_data"> | |
|
23 | <h2>${_('Location')}: ${h.files_breadcrumbs(c.repo_name,c.cur_rev,c.file.path)}</h2> | |
|
24 | <dl class="overview"> | |
|
25 | <dt>${_('Revision')}</dt> | |
|
26 | <dd>r${c.file.last_changeset.revision}:${c.file.last_changeset._short}</dd> | |
|
27 | <dt>${_('Size')}</dt> | |
|
28 | <dd>${h.format_byte_size(c.file.size,binary=True)}</dd> | |
|
29 | <dt>${_('Options')}</dt> | |
|
30 | <dd>${h.link_to(_('source'), | |
|
31 | h.url('files_home',repo_name=c.repo_name,revision=c.cur_rev,f_path=c.f_path))} / ${h.link_to(_('raw'), | |
|
32 | h.url('files_raw_home',repo_name=c.repo_name,revision=c.cur_rev,f_path=c.f_path))}</dd> | |
|
33 | </dl> | |
|
34 | <div id="body" class="codeblock"> | |
|
35 | <div class="code-header"> | |
|
36 | <div class="revision">${c.file.name}@r${c.file.last_changeset.revision}:${c.file.last_changeset._short}</div> | |
|
37 | <div class="commit" style="font-size:70%">"${c.file_msg}"</div> | |
|
38 | </div> | |
|
39 | <div class="code-body"> | |
|
40 | ${h.pygmentize_annotation(c.annotate,c.repo_name)} | |
|
41 | </div> | |
|
42 | </div> | |
|
43 | </div> | |
|
44 | </%def> No newline at end of file |
@@ -2,7 +2,7 b'' | |||
|
2 | 2 | Hg app, a web based mercurial repository managment based on pylons |
|
3 | 3 | """ |
|
4 | 4 | |
|
5 |
VERSION = (0, 6, |
|
|
5 | VERSION = (0, 6, 8, 'beta') | |
|
6 | 6 | |
|
7 | 7 | __version__ = '.'.join((str(each) for each in VERSION[:4])) |
|
8 | 8 |
@@ -1,20 +1,23 b'' | |||
|
1 | import logging | |
|
2 | ||
|
3 | from pylons import request, response, session, tmpl_context as c, url, config, app_globals as g | |
|
1 | from pylons import request, response, session, tmpl_context as c, url, config, \ | |
|
2 | app_globals as g | |
|
4 | 3 | from pylons.controllers.util import abort, redirect |
|
5 | ||
|
4 | from pylons_app.lib.auth import LoginRequired | |
|
6 | 5 | from pylons_app.lib.base import BaseController, render |
|
7 | 6 | from pylons_app.lib.utils import get_repo_slug |
|
8 | 7 | from pylons_app.model.hg_model import HgModel |
|
8 | import logging | |
|
9 | ||
|
10 | ||
|
9 | 11 | log = logging.getLogger(__name__) |
|
10 | 12 | |
|
11 | 13 | class ChangesetController(BaseController): |
|
14 | ||
|
15 | @LoginRequired() | |
|
12 | 16 | def __before__(self): |
|
13 | c.repos_prefix = config['repos_name'] | |
|
14 | c.repo_name = get_repo_slug(request) | |
|
17 | super(ChangesetController, self).__before__() | |
|
15 | 18 | |
|
16 | def index(self): | |
|
17 | # Return a rendered template | |
|
18 | #return render('/changeset.mako') | |
|
19 | # or, return a string | |
|
20 | return 'Hello World' | |
|
19 | def index(self, revision): | |
|
20 | hg_model = HgModel() | |
|
21 | c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision) | |
|
22 | ||
|
23 | return render('changeset/changeset.html') |
@@ -53,7 +53,7 b" def make_ui(path='hgwebdir.config', chec" | |||
|
53 | 53 | @param path: path to mercurial config file |
|
54 | 54 | """ |
|
55 | 55 | if not os.path.isfile(path): |
|
56 |
log. |
|
|
56 | log.warning('Unable to read config file %s' % path) | |
|
57 | 57 | return False |
|
58 | 58 | #propagated from mercurial documentation |
|
59 | 59 | sections = [ |
@@ -1,7 +1,10 b'' | |||
|
1 | <%! | |
|
2 | from pylons_app.lib import filters | |
|
3 | %> | |
|
1 | 4 | <%inherit file="/base/base.html"/> |
|
2 | 5 | |
|
3 | 6 | <%def name="title()"> |
|
4 | ${_('Repository managment')} | |
|
7 | ${_('Changelog - %s') % c.repo_name} | |
|
5 | 8 | </%def> |
|
6 | 9 | <%def name="breadcrumbs()"> |
|
7 | 10 | ${h.link_to(u'Home',h.url('/'))} |
@@ -11,104 +14,66 b'' | |||
|
11 | 14 | ${_('changelog')} |
|
12 | 15 | </%def> |
|
13 | 16 | <%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 | ${self.menu('changelog')} | |
|
17 | ${self.menu('changelog')} | |
|
22 | 18 | </%def> |
|
23 | 19 | |
|
24 | 20 | <%def name="main()"> |
|
25 | 21 | |
|
26 | 22 | <h2 class="no-link no-border">${_('Changelog')} - ${_('showing ')} ${c.size} ${_('revisions')}</h2> |
|
27 | 23 | <noscript>${_('The revision graph only works with JavaScript-enabled browsers.')}</noscript> |
|
28 | <div> | |
|
29 | ${h.form(h.url.current(),method='get')} | |
|
30 | ${_('Show')}: ${h.text('size',size=5,value=c.size)} ${_('revisions')} | |
|
31 | ${h.submit('','set')} | |
|
32 | ${h.end_form()} | |
|
33 | </div> | |
|
34 | <div id="wrapper" style="height:${c.canvasheight}px"> | |
|
35 | <div style="float:left;height:${c.canvasheight}px"> | |
|
36 | <canvas id="graph" width="224" height="${c.canvasheight}"></canvas> | |
|
37 | </div> | |
|
38 | <div style="float:left;height:${c.canvasheight}px"> | |
|
39 | <ul id="graphnodes"></ul> | |
|
24 | ||
|
25 | <div id="graph"> | |
|
26 | ##<div id="graph_nodes" style="height:1000px"> | |
|
27 | ## <canvas id="graph" width="160"></canvas> | |
|
28 | ##</div> | |
|
29 | <div id="graph_content"> | |
|
30 | <div class="container_header"> | |
|
31 | ${h.form(h.url.current(),method='get')} | |
|
32 | ${_('Show')}: ${h.text('size',size=5,value=c.size)} ${_('revisions')} | |
|
33 | ${h.submit('','set')} | |
|
34 | ${h.end_form()} | |
|
35 | </div> | |
|
36 | %for cnt,cs in enumerate(c.pagination): | |
|
37 | <div class="container"> | |
|
38 | <div class="left"> | |
|
39 | <div class="date">${_('commit')} ${cs.revision}: ${cs.raw_id}@${cs.date}</div> | |
|
40 | <div class="author">${cs.author}</div> | |
|
41 | <div id="chg_${cnt}" class="message"> | |
|
42 | ${h.link_to(cs.message, | |
|
43 | h.url('changeset_home',repo_name=c.repo_name,revision=cs._short), | |
|
44 | title=cs.message)} | |
|
45 | </div> | |
|
46 | <span class="logtags"> | |
|
47 | <span class="branchtag">${cs.branch}</span> | |
|
48 | %for tag in cs.tags: | |
|
49 | <span class="tagtag">${tag}</span> | |
|
50 | %endfor | |
|
51 | </span> | |
|
52 | </div> | |
|
53 | <div class="right"> | |
|
54 | <span class="removed" title="${_('removed')}">${len(cs.removed)}</span> | |
|
55 | <span class="changed" title="${_('changed')}">${len(cs.changed)}</span> | |
|
56 | <span class="added" title="${_('added')}">${len(cs.added)}</span> | |
|
57 | </div> | |
|
58 | </div> | |
|
59 | ||
|
60 | %endfor | |
|
40 | 61 | </div> |
|
41 | 62 | </div> |
|
42 | 63 | |
|
43 | <script type="text/javascript" src="/js/graph.js"></script> | |
|
44 | <script> | |
|
45 | <!-- hide script content | |
|
46 | ||
|
47 | var data = ${c.jsdata|n}; | |
|
48 | var graph = new Graph(); | |
|
49 | graph.scale(39); | |
|
50 | ||
|
51 | graph.edge = function(x0, y0, x1, y1, color) { | |
|
52 | ||
|
53 | this.setColor(color, 0.0, 0.65); | |
|
54 | this.ctx.beginPath(); | |
|
55 | this.ctx.moveTo(x0, y0); | |
|
56 | this.ctx.lineTo(x1, y1); | |
|
57 | this.ctx.stroke(); | |
|
58 | ||
|
59 | } | |
|
60 | ||
|
61 | var revlink = '<li style="_STYLE"><span class="desc">'; | |
|
62 | revlink += '<a class="list" href="/${c.repo_name}/changeset/_NODEID" title="_NODEID"><b>_DESC</b></a>'; | |
|
63 | revlink += '</span> _TAGS'; | |
|
64 | revlink += '<span class="info">_DATE, by _USER</span></li>'; | |
|
64 | ##<script type="text/javascript" src="/js/graph2.js"></script> | |
|
65 | ##<script type="text/javascript" src="http://bitbucket-assets.s3.amazonaws.com/js/lib/bundle.160310Mar.js"></script> | |
|
66 | ## | |
|
67 | ##<script> | |
|
68 | ##<!-- hide script content | |
|
69 | ## | |
|
70 | ##var jsdata = ${c.jsdata|n}; | |
|
71 | ##var r = new BranchRenderer(); | |
|
72 | ##r.render(jsdata); | |
|
65 | 73 | |
|
66 | graph.vertex = function(x, y, color, parity, cur) { | |
|
67 | ||
|
68 | this.ctx.beginPath(); | |
|
69 | color = this.setColor(color, 0.25, 0.75); | |
|
70 | this.ctx.arc(x, y, radius, 0, Math.PI * 2, true); | |
|
71 | this.ctx.fill(); | |
|
72 | ||
|
73 | var bg = '<li class="bg parity' + parity + '"></li>'; | |
|
74 | var left = (this.columns + 1) * this.bg_height; | |
|
75 | var nstyle = 'padding-left: ' + left + 'px;'; | |
|
76 | var item = revlink.replace(/_STYLE/, nstyle); | |
|
77 | item = item.replace(/_PARITY/, 'parity' + parity); | |
|
78 | item = item.replace(/_NODEID/, cur[0]); | |
|
79 | item = item.replace(/_NODEID/, cur[0]); | |
|
80 | item = item.replace(/_DESC/, cur[3]); | |
|
81 | item = item.replace(/_USER/, cur[4]); | |
|
82 | item = item.replace(/_DATE/, cur[5]); | |
|
83 | ||
|
84 | var tagspan = ''; | |
|
85 | if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) { | |
|
86 | tagspan = '<span class="logtags">'; | |
|
87 | if (cur[6][1]) { | |
|
88 | tagspan += '<span class="branchtag" title="' + cur[6][0] + '">'; | |
|
89 | tagspan += cur[6][0] + '</span> '; | |
|
90 | } else if (!cur[6][1] && cur[6][0] != 'default') { | |
|
91 | tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">'; | |
|
92 | tagspan += cur[6][0] + '</span> '; | |
|
93 | } | |
|
94 | if (cur[7].length) { | |
|
95 | for (var t in cur[7]) { | |
|
96 | var tag = cur[7][t]; | |
|
97 | tagspan += '<span class="tagtag">' + tag + '</span> '; | |
|
98 | } | |
|
99 | } | |
|
100 | tagspan += '</span>'; | |
|
101 | } | |
|
102 | ||
|
103 | item = item.replace(/_TAGS/, tagspan); | |
|
104 | return [bg, item]; | |
|
105 | ||
|
106 | } | |
|
74 | ##// stop hiding script --> | |
|
75 | ##</script> | |
|
107 | 76 | |
|
108 | graph.render(data); | |
|
109 | ||
|
110 | // stop hiding script --> | |
|
111 | </script> | |
|
112 | 77 | <div> |
|
113 | 78 | <h2>${c.pagination.pager('$link_previous ~2~ $link_next')}</h2> |
|
114 | 79 | </div> |
General Comments 0
You need to be logged in to leave comments.
Login now