# HG changeset patch # User Marcin Kuzminski # Date 2011-04-01 16:46:24 # Node ID 523382549c45e89612beb6e7e3b9762f1c432d87 # Parent 01fe71db71f6b50068815366ab92d9fc79bac042 Added repo group page showing what reposiories are inside a group diff --git a/rhodecode/controllers/admin/repos_groups.py b/rhodecode/controllers/admin/repos_groups.py --- a/rhodecode/controllers/admin/repos_groups.py +++ b/rhodecode/controllers/admin/repos_groups.py @@ -1,9 +1,11 @@ import logging +from operator import itemgetter from pylons import request, response, session, tmpl_context as c, url from pylons.controllers.util import abort, redirect from rhodecode.lib.base import BaseController, render +from rhodecode.model.db import Group log = logging.getLogger(__name__) @@ -47,6 +49,43 @@ class ReposGroupsController(BaseControll """GET /repos_groups/id: Show a specific item""" # url('repos_group', id=ID) + c.group = Group.get(id) + if c.group: + c.group_repos = c.group.repositories + else: + return redirect(url('repos_group')) + + sortables = ['name', 'description', 'last_change', 'tip', 'owner'] + current_sort = request.GET.get('sort', 'name') + current_sort_slug = current_sort.replace('-', '') + + if current_sort_slug not in sortables: + c.sort_by = 'name' + current_sort_slug = c.sort_by + else: + c.sort_by = current_sort + c.sort_slug = current_sort_slug + + sort_key = current_sort_slug + '_sort' + + + #overwrite our cached list with current filter + gr_filter = [r.repo_name for r in c.group_repos] + c.cached_repo_list = self.scm_model.get_repos(all_repos=gr_filter) + + if c.sort_by.startswith('-'): + c.repos_list = sorted(c.cached_repo_list, key=itemgetter(sort_key), + reverse=True) + else: + c.repos_list = sorted(c.cached_repo_list, key=itemgetter(sort_key), + reverse=False) + + c.repo_cnt = len(c.repos_list) + + + return render('admin/repos_groups/repos_groups.html') + + def edit(self, id, format='html'): """GET /repos_groups/id/edit: Form to edit an existing item""" # url('edit_repos_group', id=ID) diff --git a/rhodecode/model/db.py b/rhodecode/model/db.py --- a/rhodecode/model/db.py +++ b/rhodecode/model/db.py @@ -270,6 +270,10 @@ class Group(Base): groups.insert(0, gr) return groups + @property + def repositories(self): + return Session.query(Repository).filter(Repository.group == self).all() + class Permission(Base): __tablename__ = 'permissions' __table_args__ = {'useexisting':True} diff --git a/rhodecode/model/scm.py b/rhodecode/model/scm.py --- a/rhodecode/model/scm.py +++ b/rhodecode/model/scm.py @@ -125,8 +125,9 @@ class ScmModel(BaseModel): this have to be a list of just the repository names """ if all_repos is None: - all_repos = [r.repo_name for r in self.sa.query(Repository)\ - .order_by(Repository.repo_name).all()] + repos = self.sa.query(Repository)\ + .order_by(Repository.repo_name).all() + all_repos = [r.repo_name for r in repos] #get the repositories that should be invalidated invalidation_list = [str(x.cache_key) for x in \ diff --git a/rhodecode/templates/admin/repos_groups/repos_groups.html b/rhodecode/templates/admin/repos_groups/repos_groups.html new file mode 100644 --- /dev/null +++ b/rhodecode/templates/admin/repos_groups/repos_groups.html @@ -0,0 +1,121 @@ +## -*- coding: utf-8 -*- +<%inherit file="/base/base.html"/> + +<%def name="title()"> + ${_('Repository group')} - ${c.rhodecode_name} + + + +<%def name="breadcrumbs_links()"> + ${_('Group')} » ${c.group.group_name} - ${_(' %s repositories' % c.repo_cnt)} + +<%def name="page_nav()"> + ${self.menu('admin')} + +<%def name="main()"> + <%def name="get_sort(name)"> + <%name_slug = name.lower().replace(' ','_') %> + + %if name_slug == c.sort_slug: + %if c.sort_by.startswith('-'): + ${name}↑ + %else: + ${name}↓ + %endif: + %else: + ${name} + %endif + +
+ +
+ ${self.breadcrumbs()} +
+ +
+ + + + + + + + + + + + + + %for cnt,repo in enumerate(c.repos_list): + + + ##DESCRIPTION + + ##LAST CHANGE + + + + + + + %endfor + +
${get_sort(_('Name'))}${get_sort(_('Description'))}${get_sort(_('Last change'))}${get_sort(_('Tip'))}${get_sort(_('Owner'))}${_('RSS')}${_('Atom')}
+
+ ## TYPE OF REPO + %if repo['dbrepo']['repo_type'] =='hg': + ${_('Mercurial repository')} + %elif repo['dbrepo']['repo_type'] =='git': + ${_('Git repository')} + %else: + + %endif + + ##PRIVATE/PUBLIC + %if repo['dbrepo']['private']: + ${_('private repository')} + %else: + ${_('public repository')} + %endif + + ##NAME + ${h.link_to(repo['name'], + h.url('summary_home',repo_name=repo['name']),class_="repo_name")} + %if repo['dbrepo_fork']: + + ${_('fork')} + %endif +
+
+ ${h.truncate(repo['description'],60)} + + + ${h.age(repo['last_change'])} + + %if repo['rev']>=0: + ${h.link_to('r%s:%s' % (repo['rev'],h.short_id(repo['tip'])), + h.url('changeset_home',repo_name=repo['name'],revision=repo['tip']), + class_="tooltip", + title=h.tooltip(repo['last_msg']))} + %else: + ${_('No changesets yet')} + %endif + ${h.person(repo['contact'])} + %if c.rhodecode_user.username != 'default': + + %else: + + %endif: + + %if c.rhodecode_user.username != 'default': + + %else: + + %endif: +
+
+
+ +