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 | Hg app, a web based mercurial repository managment based on pylons |
|
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 | __version__ = '.'.join((str(each) for each in VERSION[:4])) |
|
7 | __version__ = '.'.join((str(each) for each in VERSION[:4])) | |
8 |
|
8 |
@@ -1,20 +1,23 b'' | |||||
1 | import logging |
|
1 | from pylons import request, response, session, tmpl_context as c, url, config, \ | |
2 |
|
2 | app_globals as g | ||
3 | from pylons import request, response, session, tmpl_context as c, url, config, app_globals as g |
|
|||
4 | from pylons.controllers.util import abort, redirect |
|
3 | from pylons.controllers.util import abort, redirect | |
5 |
|
4 | from pylons_app.lib.auth import LoginRequired | ||
6 | from pylons_app.lib.base import BaseController, render |
|
5 | from pylons_app.lib.base import BaseController, render | |
7 | from pylons_app.lib.utils import get_repo_slug |
|
6 | from pylons_app.lib.utils import get_repo_slug | |
8 | from pylons_app.model.hg_model import HgModel |
|
7 | from pylons_app.model.hg_model import HgModel | |
|
8 | import logging | |||
|
9 | ||||
|
10 | ||||
9 | log = logging.getLogger(__name__) |
|
11 | log = logging.getLogger(__name__) | |
10 |
|
12 | |||
11 | class ChangesetController(BaseController): |
|
13 | class ChangesetController(BaseController): | |
|
14 | ||||
|
15 | @LoginRequired() | |||
12 | def __before__(self): |
|
16 | def __before__(self): | |
13 | c.repos_prefix = config['repos_name'] |
|
17 | super(ChangesetController, self).__before__() | |
14 | c.repo_name = get_repo_slug(request) |
|
|||
15 |
|
18 | |||
16 | def index(self): |
|
19 | def index(self, revision): | |
17 | # Return a rendered template |
|
20 | hg_model = HgModel() | |
18 | #return render('/changeset.mako') |
|
21 | c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision) | |
19 | # or, return a string |
|
22 | ||
20 | return 'Hello World' |
|
23 | return render('changeset/changeset.html') |
@@ -53,7 +53,7 b" def make_ui(path='hgwebdir.config', chec" | |||||
53 | @param path: path to mercurial config file |
|
53 | @param path: path to mercurial config file | |
54 | """ |
|
54 | """ | |
55 | if not os.path.isfile(path): |
|
55 | if not os.path.isfile(path): | |
56 |
log. |
|
56 | log.warning('Unable to read config file %s' % path) | |
57 | return False |
|
57 | return False | |
58 | #propagated from mercurial documentation |
|
58 | #propagated from mercurial documentation | |
59 | sections = [ |
|
59 | sections = [ |
@@ -1,7 +1,10 b'' | |||||
|
1 | <%! | |||
|
2 | from pylons_app.lib import filters | |||
|
3 | %> | |||
1 | <%inherit file="/base/base.html"/> |
|
4 | <%inherit file="/base/base.html"/> | |
2 |
|
5 | |||
3 | <%def name="title()"> |
|
6 | <%def name="title()"> | |
4 | ${_('Repository managment')} |
|
7 | ${_('Changelog - %s') % c.repo_name} | |
5 | </%def> |
|
8 | </%def> | |
6 | <%def name="breadcrumbs()"> |
|
9 | <%def name="breadcrumbs()"> | |
7 | ${h.link_to(u'Home',h.url('/'))} |
|
10 | ${h.link_to(u'Home',h.url('/'))} | |
@@ -11,104 +14,66 b'' | |||||
11 | ${_('changelog')} |
|
14 | ${_('changelog')} | |
12 | </%def> |
|
15 | </%def> | |
13 | <%def name="page_nav()"> |
|
16 | <%def name="page_nav()"> | |
14 | <form action="log"> |
|
17 | ${self.menu('changelog')} | |
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')} |
|
|||
22 | </%def> |
|
18 | </%def> | |
23 |
|
19 | |||
24 | <%def name="main()"> |
|
20 | <%def name="main()"> | |
25 |
|
21 | |||
26 | <h2 class="no-link no-border">${_('Changelog')} - ${_('showing ')} ${c.size} ${_('revisions')}</h2> |
|
22 | <h2 class="no-link no-border">${_('Changelog')} - ${_('showing ')} ${c.size} ${_('revisions')}</h2> | |
27 | <noscript>${_('The revision graph only works with JavaScript-enabled browsers.')}</noscript> |
|
23 | <noscript>${_('The revision graph only works with JavaScript-enabled browsers.')}</noscript> | |
28 | <div> |
|
24 | ||
29 | ${h.form(h.url.current(),method='get')} |
|
25 | <div id="graph"> | |
30 | ${_('Show')}: ${h.text('size',size=5,value=c.size)} ${_('revisions')} |
|
26 | ##<div id="graph_nodes" style="height:1000px"> | |
31 | ${h.submit('','set')} |
|
27 | ## <canvas id="graph" width="160"></canvas> | |
32 | ${h.end_form()} |
|
28 | ##</div> | |
33 | </div> |
|
29 | <div id="graph_content"> | |
34 | <div id="wrapper" style="height:${c.canvasheight}px"> |
|
30 | <div class="container_header"> | |
35 | <div style="float:left;height:${c.canvasheight}px"> |
|
31 | ${h.form(h.url.current(),method='get')} | |
36 | <canvas id="graph" width="224" height="${c.canvasheight}"></canvas> |
|
32 | ${_('Show')}: ${h.text('size',size=5,value=c.size)} ${_('revisions')} | |
37 | </div> |
|
33 | ${h.submit('','set')} | |
38 | <div style="float:left;height:${c.canvasheight}px"> |
|
34 | ${h.end_form()} | |
39 | <ul id="graphnodes"></ul> |
|
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 | </div> |
|
61 | </div> | |
41 | </div> |
|
62 | </div> | |
42 |
|
63 | |||
43 | <script type="text/javascript" src="/js/graph.js"></script> |
|
64 | ##<script type="text/javascript" src="/js/graph2.js"></script> | |
44 | <script> |
|
65 | ##<script type="text/javascript" src="http://bitbucket-assets.s3.amazonaws.com/js/lib/bundle.160310Mar.js"></script> | |
45 | <!-- hide script content |
|
66 | ## | |
46 |
|
67 | ##<script> | ||
47 | var data = ${c.jsdata|n}; |
|
68 | ##<!-- hide script content | |
48 | var graph = new Graph(); |
|
69 | ## | |
49 | graph.scale(39); |
|
70 | ##var jsdata = ${c.jsdata|n}; | |
50 |
|
71 | ##var r = new BranchRenderer(); | ||
51 | graph.edge = function(x0, y0, x1, y1, color) { |
|
72 | ##r.render(jsdata); | |
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>'; |
|
|||
65 |
|
73 | |||
66 | graph.vertex = function(x, y, color, parity, cur) { |
|
74 | ##// stop hiding script --> | |
67 |
|
75 | ##</script> | ||
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 | } |
|
|||
107 |
|
76 | |||
108 | graph.render(data); |
|
|||
109 |
|
||||
110 | // stop hiding script --> |
|
|||
111 | </script> |
|
|||
112 | <div> |
|
77 | <div> | |
113 | <h2>${c.pagination.pager('$link_previous ~2~ $link_next')}</h2> |
|
78 | <h2>${c.pagination.pager('$link_previous ~2~ $link_next')}</h2> | |
114 | </div> |
|
79 | </div> |
General Comments 0
You need to be logged in to leave comments.
Login now