Changeset - 72778dda34cf
[Not reviewed]
default
0 6 0
Marcin Kuzminski - 15 years ago 2010-10-01 03:04:52
marcin@python-works.com
some fixups in cache, added fallback and cache invalidation when key not found in cached repos list,
added extra test, some other small fixes
6 files changed with 37 insertions and 8 deletions:
0 comments (0 inline, 0 general)
celeryconfig.py
Show inline comments
 
# List of modules to import when celery starts.
 
import sys
 
import os
 
import ConfigParser
 
root = os.getcwd()
 

	
 
PYLONS_CONFIG_NAME = 'test.ini'
 
PYLONS_CONFIG_NAME = 'production.ini'
 

	
 
sys.path.append(root)
 
config = ConfigParser.ConfigParser({'here':root})
 
config.read('%s/%s' % (root, PYLONS_CONFIG_NAME))
 
PYLONS_CONFIG = config
 

	
pylons_app/lib/base.py
Show inline comments
 
@@ -19,14 +19,20 @@ class BaseController(WSGIController):
 
        c.hg_app_name = config['hg_app_title']
 
        c.repo_name = get_repo_slug(request)
 
        c.cached_repo_list = _get_repos_cached()
 
        c.repo_switcher_list = _get_repos_switcher_cached(c.cached_repo_list)
 
        
 
        if c.repo_name:
 
            c.repository_tags = c.cached_repo_list[c.repo_name].tags
 
            c.repository_branches = c.cached_repo_list[c.repo_name].branches
 
            cached_repo = c.cached_repo_list.get(c.repo_name)
 
            
 
            if cached_repo:
 
                c.repository_tags = cached_repo.tags
 
                c.repository_branches = cached_repo.branches
 
            else:
 
                c.repository_tags = {}
 
                c.repository_branches = {}
 
                    
 
        self.sa = meta.Session
 
    
 
    def __call__(self, environ, start_response):
 
        """Invoke the Controller"""
 
        # WSGIController.__call__ dispatches to the Controller method
pylons_app/lib/celerylib/tasks.py
Show inline comments
 
@@ -271,25 +271,23 @@ def send_email(recipients, subject, body
 
        return False
 
    return True
 

	
 
@task
 
def create_repo_fork(form_data, cur_user):
 
    import os
 
    from pylons_app.lib.utils import invalidate_cache
 
    from pylons_app.model.repo_model import RepoModel
 
    sa = get_session()
 
    rm = RepoModel(sa)
 
    
 
    rm.create(form_data, cur_user, just_db=True, fork=True)
 
    
 
    repos_path = get_hg_ui_settings()['paths_root_path'].replace('*', '')
 
    repo_path = os.path.join(repos_path, form_data['repo_name'])
 
    repo_fork_path = os.path.join(repos_path, form_data['fork_name'])
 
    
 
    MercurialRepository(str(repo_fork_path), True, clone_url=str(repo_path))
 
    #invalidate_cache('cached_repo_list')
 

	
 
    
 
def __get_codes_stats(repo_name):
 
    LANGUAGES_EXTENSIONS = ['action', 'adp', 'ashx', 'asmx', 'aspx', 'asx', 'axd', 'c',
 
                    'cfg', 'cfm', 'cpp', 'cs', 'diff', 'do', 'el', 'erl',
 
                    'h', 'java', 'js', 'jsp', 'jspx', 'lisp',
pylons_app/model/hg_model.py
Show inline comments
 
@@ -23,18 +23,19 @@ Model for hg app
 
@author: marcink
 
"""
 
from beaker.cache import cache_region
 
from mercurial import ui
 
from mercurial.hgweb.hgwebdir_mod import findrepos
 
from pylons.i18n.translation import _
 
from pylons_app.lib import helpers as h
 
from pylons_app.lib.utils import invalidate_cache
 
from pylons_app.lib.auth import HasRepoPermissionAny
 
from pylons_app.model import meta
 
from pylons_app.model.db import Repository, User
 
from pylons_app.lib import helpers as h
 
from sqlalchemy.orm import joinedload
 
from vcs.exceptions import RepositoryError, VCSError
 
from sqlalchemy.orm import joinedload
 
import logging
 
import os
 
import sys
 
log = logging.getLogger(__name__)
 

	
 
try:
 
@@ -120,12 +121,14 @@ class HgModel(object):
 
                    
 
                    repos_list[name] = MercurialRepository(path, baseui=baseui)
 
                    repos_list[name].name = name
 
                    
 
                    dbrepo = None
 
                    if not initial:
 
                        #for initial scann on application first run we don't
 
                        #have db repos yet.
 
                        dbrepo = sa.query(Repository)\
 
                            .options(joinedload(Repository.fork))\
 
                            .filter(Repository.repo_name == name)\
 
                            .scalar()
 
                            
 
                    if dbrepo:
 
@@ -166,7 +169,18 @@ class HgModel(object):
 
            tmp_d['repo_archives'] = list(repo._get_archives())
 
            tmp_d['last_msg'] = tip.message
 
            tmp_d['repo'] = repo
 
            yield tmp_d
 

	
 
    def get_repo(self, repo_name):
 
        return _get_repos_cached()[repo_name]
 
        try:
 
            repo = _get_repos_cached()[repo_name]
 
            return repo
 
        except KeyError:
 
            #i we're here and we got key errors let's try to invalidate the
 
            #cahce and try again
 
            invalidate_cache('cached_repo_list')
 
            repo = _get_repos_cached()[repo_name]
 
            return repo
 
            
 
        
 
        
pylons_app/tests/__init__.py
Show inline comments
 
@@ -25,12 +25,14 @@ import pylons.test
 

	
 
__all__ = ['environ', 'url', 'TestController']
 

	
 
# Invoke websetup with the current config file
 
#SetupCommand('setup-app').run([config_file])
 

	
 
##RUNNING DESIRED TESTS
 
#nosetests pylons_app.tests.functional.test_admin_settings:TestSettingsController.test_my_account
 

	
 
environ = {}
 

	
 
class TestController(TestCase):
 

	
 
    def __init__(self, *args, **kwargs):
pylons_app/tests/functional/test_settings.py
Show inline comments
 
@@ -39,8 +39,17 @@ class TestSettingsController(TestControl
 
        assert fork_repo.repo_name == fork_name, 'wrong name of repo name in new db fork repo'
 
        assert fork_repo.fork.repo_name == repo_name, 'wron fork parrent'
 
        
 
        
 
        #test if fork is visible in the list ?
 
        response = response.follow()
 

	
 

	
 
        #check if fork is marked as fork
 
        response = self.app.get(url(controller='summary', action='index',
 
                                    repo_name=fork_name))
 
        
 
        
 
        print response
 
        
 
        assert 'Fork of %s' % repo_name in response.body, 'no message about that this repo is a fork'
 
        
0 comments (0 inline, 0 general)