Changeset - 4685f3eafd35
[Not reviewed]
beta
0 2 0
Marcin Kuzminski - 15 years ago 2010-11-14 22:18:51
marcin@python-works.com
Fixed sumamry page description bug
Some internal changes into repository building.
2 files changed with 18 insertions and 9 deletions:
0 comments (0 inline, 0 general)
rhodecode/model/hg.py
Show inline comments
 
@@ -19,29 +19,28 @@
 
# MA  02110-1301, USA.
 
"""
 
Created on April 9, 2010
 
Model for RhodeCode
 
@author: marcink
 
"""
 
from beaker.cache import cache_region, region_invalidate
 
from mercurial import ui
 
from rhodecode.lib import helpers as h
 
from rhodecode.lib.auth import HasRepoPermissionAny
 
from rhodecode.lib.utils import get_repos
 
from rhodecode.model import meta
 
from rhodecode.model.caching_query import FromCache
 
from rhodecode.model.db import Repository, User, RhodeCodeUi
 
from sqlalchemy.orm import joinedload
 
from vcs import get_repo as vcs_get_repo, get_backend
 
from vcs.backends.hg import MercurialRepository
 
from vcs import get_backend
 
from vcs.utils.helpers import get_scm
 
from vcs.exceptions import RepositoryError, VCSError
 
from vcs.utils.lazy import LazyProperty
 
import logging
 
import os
 
import time
 

	
 
log = logging.getLogger(__name__)
 

	
 
class HgModel(object):
 
    """
 
    Mercurial Model
 
    """
 
@@ -67,47 +66,50 @@ class HgModel(object):
 
        Listing of repositories in given path. This path should not be a 
 
        repository itself. Return a dictionary of repository objects
 
        
 
        :param repos_path: path to directory containing repositories
 
        :param baseui
 
        :param initial: initial scan
 
        """
 
        log.info('scanning for repositories in %s', repos_path)
 

	
 
        if not isinstance(baseui, ui.ui):
 
            baseui = ui.ui()
 
        repos_list = {}
 

	
 
        for name, path in get_repos(repos_path):
 
            try:
 
                if repos_list.has_key(name):
 
                    raise RepositoryError('Duplicate repository name %s '
 
                                    'found in %s' % (name, path))
 
                else:
 

	
 
                    klass = get_backend(path[0])
 

	
 
                    if path[0] == 'hg':
 
                        repos_list[name] = klass(path[1], baseui=baseui)
 

	
 
                    if path[0] == 'git':
 
                        repos_list[name] = klass(path[1])
 
            except OSError:
 
                continue
 

	
 
        return repos_list
 

	
 
    def get_repos(self, all_repos=None):
 
        """
 
        Get all repos from db and for each such repo make backend and 
 
        fetch dependent data from db
 
        Get all repos from db and for each repo create it's backend instance.
 
        and fill that backed with information from database
 
        
 
        :param all_repos: give specific repositories list, good for filtering
 
        """
 
        if not all_repos:
 
            all_repos = self.sa.query(Repository).all()
 

	
 
        for r in all_repos:
 

	
 
            repo = self.get(r.repo_name)
 

	
 
            if repo is not None:
 
                last_change = repo.last_change
 
                tip = h.get_changeset_safe(repo, 'tip')
 

	
 
@@ -135,30 +137,37 @@ class HgModel(object):
 
        """
 
        Get's repository from given name, creates BackendInstance and
 
        propagates it's data from database with all additional information
 
        :param repo_name:
 
        """
 
        if not HasRepoPermissionAny('repository.read', 'repository.write',
 
                            'repository.admin')(repo_name, 'get repo check'):
 
            return
 

	
 
        @cache_region('long_term', 'get_repo_cached_%s' % repo_name)
 
        def _get_repo(repo_name):
 

	
 
            repo = vcs_get_repo(os.path.join(self.repos_path, repo_name),
 
                                alias=None, create=False)
 
            repo_path = os.path.join(self.repos_path, repo_name)
 
            alias = get_scm(repo_path)[0]
 

	
 
            log.debug('Creating instance of %s repository', alias)
 
            backend = get_backend(alias)
 

	
 
            if alias == 'hg':
 
                repo = backend(repo_path, create=False, baseui=None)
 
            #skip hidden web repository
 
            if isinstance(repo, MercurialRepository) and repo._get_hidden():
 
                if repo._get_hidden():
 
                return
 
            else:
 
                repo = backend(repo_path, create=False)
 

	
 
            dbrepo = self.sa.query(Repository)\
 
                .options(joinedload(Repository.fork))\
 
                .options(joinedload(Repository.user))\
 
                .filter(Repository.repo_name == repo_name)\
 
                .scalar()
 
            repo.dbrepo = dbrepo
 
            return repo
 

	
 
        invalidate = False
 
        if invalidate:
 
            log.info('INVALIDATING CACHE FOR %s', repo_name)
rhodecode/templates/summary/summary.html
Show inline comments
 
@@ -66,25 +66,25 @@ E.onDOMReady(function(e){
 
		            	</a>
 
		            	</span>
 
		            %endif			      
 
			  </div>
 
			 </div>
 
			
 
			
 
			 <div class="field">
 
			  <div class="label">
 
			      <label>${_('Description')}:</label>
 
			  </div>
 
			  <div class="input-short">
 
			      ${c.repo_info.description}
 
			      ${c.repo_info.dbrepo.description}
 
			  </div>
 
			 </div>
 
			
 
			
 
			 <div class="field">
 
			  <div class="label">
 
			      <label>${_('Contact')}:</label>
 
			  </div>
 
			  <div class="input-short">
 
			  	<div class="gravatar">
 
			  		<img alt="gravatar" src="${h.gravatar_url(c.repo_info.dbrepo.user.email)}"/>
 
			  	</div>
0 comments (0 inline, 0 general)