@@ -24,12 +24,13 @@ changeset controller for pylons
"""
from pylons import tmpl_context as c, url, request, response
from pylons.i18n.translation import _
from pylons.controllers.util import redirect
from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
from rhodecode.lib.base import BaseController, render
import rhodecode.lib.helpers as h
from rhodecode.model.hg import HgModel
from vcs.exceptions import RepositoryError, ChangesetError
from vcs.nodes import FileNode
from vcs.utils import diffs as differ
import logging
import traceback
@@ -56,14 +57,15 @@ class ChangesetController(BaseController
<td class="code"><pre>%s</pre></td>
</tr>
</table>''' % str
try:
c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision)
except RepositoryError:
except RepositoryError, e:
log.error(traceback.format_exc())
h.flash(str(e), category='warning')
return redirect(url('home'))
else:
c.changeset_old = c.changeset.parents[0]
except IndexError:
c.changeset_old = None
@@ -65,30 +65,35 @@ class FilesController(BaseController):
return r
c.f_path = f_path
cur_rev = repo.get_changeset(revision).revision
c.changeset = repo.get_changeset(revision)
cur_rev = c.changeset.revision
prev_rev = repo.get_changeset(get_prev_rev(cur_rev)).raw_id
next_rev = repo.get_changeset(get_next_rev(cur_rev)).raw_id
c.url_prev = url('files_home', repo_name=c.repo_name,
revision=prev_rev, f_path=f_path)
c.url_next = url('files_home', repo_name=c.repo_name,
revision=next_rev, f_path=f_path)
c.files_list = c.changeset.get_node(f_path)
c.file_history = self._get_history(repo, c.files_list, f_path)
c.cur_rev = c.changeset.raw_id
c.rev_nr = c.changeset.revision
redirect(h.url('files_home', repo_name=repo_name, revision=revision))
except (RepositoryError, ChangesetError):
c.files_list = None
redirect(h.url('files_home', repo_name=repo_name, revision='tip'))
return render('files/files.html')
def rawfile(self, repo_name, revision, f_path):
hg_model = HgModel()
c.repo = hg_model.get_repo(c.repo_name)
@@ -8,30 +8,37 @@
${h.link_to(u'Home',h.url('/'))}
»
${h.link_to(c.repo_name,h.url('files_home',repo_name=c.repo_name))}
${_('files')}
%if c.files_list:
@ R${c.rev_nr}:${h.short_id(c.cur_rev)}
@ r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)}
%endif
</%def>
<%def name="page_nav()">
${self.menu('files')}
<%def name="main()">
<div class="box">
<!-- box / title -->
<div class="title">
${self.breadcrumbs()}
<ul class="links">
<li>
<span style="text-transform: uppercase;"><a href="#">${_('branch')}: ${c.changeset.branch}</a></span>
</li>
</ul>
</div>
<div class="table">
<div id="files_data">
<h3 class="files_location">${_('Location')}: ${h.files_breadcrumbs(c.repo_name,c.cur_rev,c.files_list.path)}</h3>
<h3 class="files_location">
${_('Location')}: ${h.files_breadcrumbs(c.repo_name,c.changeset.raw_id,c.files_list.path)}
</h3>
%if c.files_list.is_dir():
<%include file='files_browser.html'/>
%else:
<%include file='files_source.html'/>
@@ -7,15 +7,15 @@
<div id="body" class="browserblock">
<div class="browser-header">
${h.form(h.url.current())}
<div class="info_box">
<span >${_('view')}@rev</span>
<a href="${c.url_prev}">«</a>
${h.text('at_rev',value=c.rev_nr,size=3)}
<a href="${c.url_next}">»</a>
<a href="${c.url_prev}" title="${_('previous revision')}">«</a>
${h.text('at_rev',value=c.changeset.revision,size=3)}
<a href="${c.url_next}" title="${_('next revision')}">»</a>
${h.submit('view','view')}
${h.end_form()}
<div class="browser-body">
<table class="code-browser">
@@ -30,26 +30,26 @@
</thead>
%if c.files_list.parent:
<tr class="parity0">
<td>
${h.link_to('..',h.url('files_home',repo_name=c.repo_name,revision=c.cur_rev,f_path=c.files_list.parent.path),class_="browser-dir")}
${h.link_to('..',h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.files_list.parent.path),class_="browser-dir")}
</td>
<td></td>
%for cnt,node in enumerate(c.files_list,1):
<tr class="parity${cnt%2}">
${h.link_to(node.name,h.url('files_home',repo_name=c.repo_name,revision=c.cur_rev,f_path=node.path),class_=file_class(node))}
${h.link_to(node.name,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=node.path),class_=file_class(node))}
%if node.is_file():
${h.format_byte_size(node.size,binary=True)}
@@ -57,18 +57,18 @@
${node.mimetype}
${node.last_changeset.revision}
<span class="tooltip" tooltip_title="${node.last_changeset.raw_id}">${node.last_changeset.revision}</span>
${h.age(node.last_changeset.date)} - ${node.last_changeset.date}
${node.last_changeset.date} - ${h.age(node.last_changeset.date)} ${_('ago')}
${node.last_changeset.author}
@@ -7,17 +7,17 @@
<dt>${_('Size')}</dt>
<dd>${h.format_byte_size(c.files_list.size,binary=True)}</dd>
<dt>${_('Mimetype')}</dt>
<dd>${c.files_list.mimetype}</dd>
<dt>${_('Options')}</dt>
<dd>${h.link_to(_('show annotation'),
h.url('files_annotate_home',repo_name=c.repo_name,revision=c.cur_rev,f_path=c.f_path))}
h.url('files_annotate_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.f_path))}
/ ${h.link_to(_('show as raw'),
h.url('files_raw_home',repo_name=c.repo_name,revision=c.cur_rev,f_path=c.f_path))}
h.url('files_raw_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.f_path))}
/ ${h.link_to(_('download as raw'),
h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.cur_rev,f_path=c.f_path))}
h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.f_path))}
</dd>
<dt>${_('History')}</dt>
<dd>
<div>
${h.form(h.url('files_diff_home',repo_name=c.repo_name,f_path=c.f_path),method='get')}
${h.hidden('diff2',c.files_list.last_changeset.raw_id)}
@@ -37,13 +37,13 @@
<div class="code-body">
% if c.files_list.size < c.file_size_limit:
${h.pygmentize(c.files_list,linenos=True,anchorlinenos=True,lineanchors='S',cssclass="code-highlight")}
${_('File is to big to display')} ${h.link_to(_('show as raw'),
<script type="text/javascript">
YAHOO.util.Event.onDOMReady(function(){
Status change: