changeset 3246:b9ba0d4d3abf beta

implemented #83 show repo size on summary page
author Marcin Kuzminski <marcin@python-works.com>
date Mon, 28 Jan 2013 23:33:19 +0100
parents 8f3cc21d83e6
children ed2fa8b1ccca
files rhodecode/config/routing.py rhodecode/controllers/summary.py rhodecode/model/db.py rhodecode/public/css/style.css rhodecode/public/js/rhodecode.js rhodecode/templates/base/root.html rhodecode/templates/summary/summary.html
diffstat 7 files changed, 63 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/config/routing.py	Mon Jan 28 21:14:46 2013 +0100
+++ b/rhodecode/config/routing.py	Mon Jan 28 23:33:19 2013 +0100
@@ -422,6 +422,10 @@
                 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))
--- a/rhodecode/controllers/summary.py	Mon Jan 28 21:14:46 2013 +0100
+++ b/rhodecode/controllers/summary.py	Mon Jan 28 23:33:19 2013 +0100
@@ -30,20 +30,22 @@
 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 @@
             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
 
--- a/rhodecode/model/db.py	Mon Jan 28 21:14:46 2013 +0100
+++ b/rhodecode/model/db.py	Mon Jan 28 23:33:19 2013 +0100
@@ -1076,6 +1076,11 @@
                                       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
     #==========================================================================
--- a/rhodecode/public/css/style.css	Mon Jan 28 21:14:46 2013 +0100
+++ b/rhodecode/public/css/style.css	Mon Jan 28 23:33:19 2013 +0100
@@ -3202,6 +3202,23 @@
 	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;
--- a/rhodecode/public/js/rhodecode.js	Mon Jan 28 21:14:46 2013 +0100
+++ b/rhodecode/public/js/rhodecode.js	Mon Jan 28 23:33:19 2013 +0100
@@ -391,6 +391,19 @@
     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.
--- a/rhodecode/templates/base/root.html	Mon Jan 28 21:14:46 2013 +0100
+++ b/rhodecode/templates/base/root.html	Mon Jan 28 23:33:19 2013 +0100
@@ -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__')}";
+
             </script>
             <script type="text/javascript" src="${h.url('/js/yui.2.9.js', ver=c.rhodecode_version)}"></script>
             <!--[if lt IE 9]>
--- a/rhodecode/templates/summary/summary.html	Mon Jan 28 21:14:46 2013 +0100
+++ b/rhodecode/templates/summary/summary.html	Mon Jan 28 23:33:19 2013 +0100
@@ -62,6 +62,12 @@
                             onclick="javascript:toggleFollowingRepo(this,${c.dbrepo.repo_id},'${str(h.get_token())}')">
                       </span>
                       %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>
+                         <span id="repo_size"></span>
+                      </div>                                    
                   %endif:
 
                    ## locking icon