Files @ ad49bbd8f984
Branch filter:

Location: kallithea/rhodecode/controllers/home.py - annotation

Bradley M. Kuhn
changelog - should refer to Mercurial repository logs instead
fd2ea6ceadc8
a671db5bdd58
a671db5bdd58
a671db5bdd58
a671db5bdd58
6832ef664673
ffd07396d315
ffd07396d315
ffd07396d315
ffd07396d315
6832ef664673
ffd07396d315
a671db5bdd58
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
fd2ea6ceadc8
fd2ea6ceadc8
fd2ea6ceadc8
ffd07396d315
62e493c7f436
87e9718ab4a2
0226b6d6b2b5
fd2ea6ceadc8
62e493c7f436
62e493c7f436
ffd45b185016
f37d7514e7ab
ffd45b185016
ffd07396d315
ffd45b185016
0226b6d6b2b5
0226b6d6b2b5
f63cc1cbce27
ffd07396d315
ffd07396d315
50e41777675d
ffd07396d315
ffd07396d315
ffd07396d315
ffd07396d315
ffd07396d315
b950b884ab87
ffd07396d315
ffd45b185016
5242b1619603
62e493c7f436
1e5bb8ed77d6
1e5bb8ed77d6
1e5bb8ed77d6
1e5bb8ed77d6
62e493c7f436
1e5bb8ed77d6
1e5bb8ed77d6
1e5bb8ed77d6
1e5bb8ed77d6
62e493c7f436
ffd07396d315
f63cc1cbce27
b950b884ab87
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
9c0f5d558789
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
f63cc1cbce27
6248c6fb1fcf
0069657aaf42
b950b884ab87
ffd45b185016
ffd45b185016
0069657aaf42
0069657aaf42
ffd45b185016
deb51ab04891
deb51ab04891
deb51ab04891
deb51ab04891
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
ffd45b185016
# -*- coding: utf-8 -*-
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
"""
rhodecode.controllers.home
~~~~~~~~~~~~~~~~~~~~~~~~~~

Home controller for Rhodecode

:created_on: Feb 18, 2010
:author: marcink
:copyright: (c) 2013 RhodeCode GmbH.
:license: GPLv3, see LICENSE for more details.

"""

import logging

from pylons import tmpl_context as c, request
from pylons.i18n.translation import _
from webob.exc import HTTPBadRequest
from sqlalchemy.sql.expression import func

import rhodecode
from rhodecode.lib import helpers as h
from rhodecode.lib.utils import jsonify, conditional_cache
from rhodecode.lib.compat import json
from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
from rhodecode.lib.base import BaseController, render
from rhodecode.model.db import Repository, RepoGroup
from rhodecode.model.repo import RepoModel


log = logging.getLogger(__name__)


class HomeController(BaseController):

    def __before__(self):
        super(HomeController, self).__before__()

    @LoginRequired()
    def index(self):
        c.groups = self.scm_model.get_repo_groups()
        c.group = None

        c.repos_list = Repository.query()\
                        .filter(Repository.group_id == None)\
                        .order_by(func.lower(Repository.repo_name))\
                        .all()

        repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list,
                                                   admin=False)
        #json used to render the grid
        c.data = json.dumps(repos_data)

        return render('/index.html')

    @LoginRequired()
    @jsonify
    def repo_switcher_data(self):
        #wrapper for conditional cache
        def _c():
            log.debug('generating switcher repo/groups list')
            all_repos = Repository.query().order_by(Repository.repo_name).all()
            repo_iter = self.scm_model.get_repos(all_repos, simple=True)
            all_groups = RepoGroup.query().order_by(RepoGroup.group_name).all()
            repo_groups_iter = self.scm_model.get_repo_groups(all_groups)

            res = [{
                    'text': _('Groups'),
                    'children': [
                       {'id': obj.group_name, 'text': obj.group_name,
                        'type': 'group', 'obj': {}} for obj in repo_groups_iter]
                   }, {
                    'text': _('Repositories'),
                    'children': [
                       {'id': obj['name'], 'text': obj['name'],
                        'type': 'repo', 'obj': obj['dbrepo']} for obj in repo_iter]
                   }]

            data = {
                'more': False,
                'results': res
            }
            return data

        if request.is_xhr:
            condition = False
            compute = conditional_cache('short_term', 'cache_desc',
                                        condition=condition, func=_c)
            return compute()
        else:
            raise HTTPBadRequest()

    @LoginRequired()
    @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
                                   'repository.admin')
    def branch_tag_switcher(self, repo_name):
        if request.is_xhr:
            c.rhodecode_db_repo = Repository.get_by_repo_name(repo_name)
            if c.rhodecode_db_repo:
                c.rhodecode_repo = c.rhodecode_db_repo.scm_instance
                return render('/switch_to_list.html')
        raise HTTPBadRequest()

    @LoginRequired()
    @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
                                   'repository.admin')
    @jsonify
    def repo_refs_data(self, repo_name):
        repo = Repository.get_by_repo_name(repo_name).scm_instance
        res = []
        _branches = repo.branches.items()
        if _branches:
            res.append({
                'text': _('Branch'),
                'children': [{'id': rev, 'text': name, 'type': 'branch'} for name, rev in _branches]
            })
        _tags = repo.tags.items()
        if _tags:
            res.append({
                'text': _('Tag'),
                'children': [{'id': rev, 'text': name, 'type': 'tag'} for name, rev in _tags]
            })
        _bookmarks = repo.bookmarks.items()
        if _bookmarks:
            res.append({
                'text': _('Bookmark'),
                'children': [{'id': rev, 'text': name, 'type': 'book'} for name, rev in _bookmarks]
            })
        data = {
            'more': False,
            'results': res
        }
        return data