diff --git a/rhodecode/config/routing.py b/rhodecode/config/routing.py --- a/rhodecode/config/routing.py +++ b/rhodecode/config/routing.py @@ -422,6 +422,10 @@ def make_map(config): controller='summary', conditions=dict(function=check_repo)) + rmap.connect('repo_size', '/{repo_name:.*?}/repo_size', + controller='summary', action='repo_size', + conditions=dict(function=check_repo)) + rmap.connect('repos_group_home', '/{group_name:.*}', controller='admin/repos_groups', action="show_by_name", conditions=dict(function=check_group)) diff --git a/rhodecode/controllers/summary.py b/rhodecode/controllers/summary.py --- a/rhodecode/controllers/summary.py +++ b/rhodecode/controllers/summary.py @@ -30,20 +30,22 @@ 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.lib.compat import product +from rhodecode.lib.vcs.exceptions import ChangesetError, EmptyRepositoryError, \ + NodeDoesNotExistError 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 @@ -186,6 +188,14 @@ class SummaryController(BaseRepoControll 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 diff --git a/rhodecode/model/db.py b/rhodecode/model/db.py --- a/rhodecode/model/db.py +++ b/rhodecode/model/db.py @@ -1076,6 +1076,11 @@ class Repository(Base, BaseModel): 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 #========================================================================== diff --git a/rhodecode/public/css/style.css b/rhodecode/public/css/style.css --- a/rhodecode/public/css/style.css +++ b/rhodecode/public/css/style.css @@ -3202,6 +3202,23 @@ table.code-browser .submodule-dir { margin-top: 2px; } +.reposize { + background: url("../images/icons/server.png") no-repeat scroll 3px; + height: 16px; + width: 20px; + cursor: pointer; + display: block; + float: right; + margin-top: 2px; +} + +#repo_size{ + display: block; + margin-top: 4px; + color: #666; + float:right; +} + .locking_locked{ background: #FFF url("../images/icons/block_16.png") no-repeat scroll 3px; height: 16px; diff --git a/rhodecode/public/js/rhodecode.js b/rhodecode/public/js/rhodecode.js --- a/rhodecode/public/js/rhodecode.js +++ b/rhodecode/public/js/rhodecode.js @@ -391,6 +391,19 @@ var toggleFollowingRepo = function(targe 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); + } + },args); + return false; +} /** * TOOLTIP IMPL. diff --git a/rhodecode/templates/base/root.html b/rhodecode/templates/base/root.html --- a/rhodecode/templates/base/root.html +++ b/rhodecode/templates/base/root.html @@ -54,7 +54,9 @@ }; 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__')}"; +