@@ -419,12 +419,16 @@ def make_map(config):
# REPOSITORY ROUTES
#==========================================================================
rmap.connect('summary_home', '/{repo_name:.*?}',
controller='summary',
conditions=dict(function=check_repo))
rmap.connect('repo_size', '/{repo_name:.*?}/repo_size',
controller='summary', action='repo_size',
rmap.connect('repos_group_home', '/{group_name:.*}',
controller='admin/repos_groups', action="show_by_name",
conditions=dict(function=check_group))
rmap.connect('changeset_home', '/{repo_name:.*?}/changeset/{revision}',
controller='changeset', revision='tip',
@@ -27,26 +27,28 @@ import traceback
import calendar
import logging
import urllib
from time import mktime
from datetime import timedelta, date
from urlparse import urlparse
from rhodecode.lib.compat import product
from rhodecode.lib.vcs.exceptions import ChangesetError, EmptyRepositoryError, \
NodeDoesNotExistError
from pylons import tmpl_context as c, request, url, config
from pylons.i18n.translation import _
from webob.exc import HTTPBadRequest
from beaker.cache import cache_region, region_invalidate
from rhodecode.config.conf import ALL_READMES, ALL_EXTS, LANGUAGES_EXTENSIONS_MAP
from rhodecode.model.db import Statistics, CacheInvalidation
from rhodecode.lib.utils import jsonify
from rhodecode.lib.utils2 import safe_unicode
from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator,\
NotAnonymous
from rhodecode.lib.base import BaseRepoController, render
from rhodecode.lib.vcs.backends.base import EmptyChangeset
from rhodecode.lib.markup_renderer import MarkupRenderer
from rhodecode.lib.celerylib import run_task
from rhodecode.lib.celerylib.tasks import get_commits_stats
from rhodecode.lib.helpers import RepoPage
@@ -183,12 +185,20 @@ class SummaryController(BaseRepoControll
c.download_options = self._get_download_links(c.rhodecode_repo)
c.readme_data, c.readme_file = \
self.__get_readme_data(c.rhodecode_db_repo)
return render('summary/summary.html')
@NotAnonymous()
@jsonify
def repo_size(self, repo_name):
if request.is_xhr:
return _('repository size: %s') % c.rhodecode_db_repo._repo_size()
else:
raise HTTPBadRequest()
def __get_readme_data(self, db_repo):
repo_name = db_repo.repo_name
@cache_region('long_term')
def _get_readme_from_cache(key):
readme_data = None
@@ -1073,12 +1073,17 @@ class Repository(Base, BaseModel):
pr_id = stat.pull_request.pull_request_id
pr_repo = stat.pull_request.other_repo.repo_name
grouped[stat.revision] = [str(stat.status), stat.status_lbl,
pr_id, pr_repo]
return grouped
def _repo_size(self):
from rhodecode.lib import helpers as h
log.debug('calculating repository size...')
return h.format_byte_size(self.scm_instance.size)
# SCM CACHE INSTANCE
@property
def invalidate(self):
@@ -3199,12 +3199,29 @@ table.code-browser .submodule-dir {
cursor: pointer;
display: block;
float: right;
margin-top: 2px;
}
.reposize {
background: url("../images/icons/server.png") no-repeat scroll 3px;
height: 16px;
width: 20px;
#repo_size{
margin-top: 4px;
color: #666;
float:right;
.locking_locked{
background: #FFF url("../images/icons/block_16.png") no-repeat scroll 3px;
@@ -388,12 +388,25 @@ var toggleFollowingRepo = function(targe
onSuccessFollow(target);
},args);
return false;
var showRepoSize = function(target, repo_name, token){
var args= 'auth_token='+token;
// start loading
YUD.get(target).innerHTML = _TM['loading...'];
var url = REPO_SIZE_URL.replace('__NAME__', repo_name);
YUC.asyncRequest('POST',url,{
success:function(o){
YUD.get(target).innerHTML = JSON.parse(o.responseText);
/**
* TOOLTIP IMPL.
*/
YAHOO.namespace('yuitip');
YAHOO.yuitip.main = {
@@ -51,13 +51,15 @@
'Open new pull request for selected changesets': "${_('Open new pull request for selected changesets')}",
'Show selected changes __S -> __E': "${_('Show selected changes __S -> __E')}",
'Selection link': "${_('Selection link')}",
};
var _TM = TRANSLATION_MAP;
var TOGGLE_FOLLOW_URL = "${h.url('toggle_following')}";
var LAZY_CS_URL = "${h.url('changeset_info', repo_name='__NAME__', revision='__REV__')}"
var LAZY_CS_URL = "${h.url('changeset_info', repo_name='__NAME__', revision='__REV__')}";
var REPO_SIZE_URL = "${h.url('repo_size', repo_name='__NAME__')}";
</script>
<script type="text/javascript" src="${h.url('/js/yui.2.9.js', ver=c.rhodecode_version)}"></script>
<!--[if lt IE 9]>
<script language="javascript" type="text/javascript" src="${h.url('/js/excanvas.min.js')}"></script>
<![endif]-->
<script type="text/javascript" src="${h.url('/js/yui.flot.js', ver=c.rhodecode_version)}"></script>
@@ -59,12 +59,18 @@
</span>
%else:
<span id="follow_toggle" class="follow tooltip" title="${_('Start following this repository')}"
onclick="javascript:toggleFollowingRepo(this,${c.dbrepo.repo_id},'${str(h.get_token())}')">
%endif
<div style="float:right;padding:0px 0px 0px 0px">
<span class="reposize tooltip" title="${_('Click to show size of repository')}"
onclick="javascript:showRepoSize('repo_size','${c.dbrepo.repo_name}','${str(h.get_token())}')">
<span id="repo_size"></span>
</div>
%endif:
## locking icon
%if c.rhodecode_db_repo.enable_locking:
%if c.rhodecode_db_repo.locked[0]:
<span class="locking_locked tooltip" title="${_('Repository locked by %s') % h.person_by_id(c.rhodecode_db_repo.locked[0])}"></span>
Status change: