Mercurial > kallithea
changeset 1193:523382549c45 beta
Added repo group page showing what reposiories are inside a group
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Fri, 01 Apr 2011 18:46:24 +0200 |
parents | 01fe71db71f6 |
children | 07963dd1f0f1 |
files | rhodecode/controllers/admin/repos_groups.py rhodecode/model/db.py rhodecode/model/scm.py rhodecode/templates/admin/repos_groups/repos_groups.html |
diffstat | 4 files changed, 167 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/controllers/admin/repos_groups.py Fri Apr 01 18:08:30 2011 +0200 +++ b/rhodecode/controllers/admin/repos_groups.py Fri Apr 01 18:46:24 2011 +0200 @@ -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 @@ """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)
--- a/rhodecode/model/db.py Fri Apr 01 18:08:30 2011 +0200 +++ b/rhodecode/model/db.py Fri Apr 01 18:46:24 2011 +0200 @@ -270,6 +270,10 @@ 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}
--- a/rhodecode/model/scm.py Fri Apr 01 18:08:30 2011 +0200 +++ b/rhodecode/model/scm.py Fri Apr 01 18:46:24 2011 +0200 @@ -125,8 +125,9 @@ 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 \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rhodecode/templates/admin/repos_groups/repos_groups.html Fri Apr 01 18:46:24 2011 +0200 @@ -0,0 +1,121 @@ +## -*- coding: utf-8 -*- +<%inherit file="/base/base.html"/> + +<%def name="title()"> + ${_('Repository group')} - ${c.rhodecode_name} +</%def> + + +<%def name="breadcrumbs_links()"> + ${_('Group')} » ${c.group.group_name} - ${_(' %s repositories' % c.repo_cnt)} +</%def> +<%def name="page_nav()"> + ${self.menu('admin')} +</%def> +<%def name="main()"> + <%def name="get_sort(name)"> + <%name_slug = name.lower().replace(' ','_') %> + + %if name_slug == c.sort_slug: + %if c.sort_by.startswith('-'): + <a href="?sort=${name_slug}">${name}↑</a> + %else: + <a href="?sort=-${name_slug}">${name}↓</a> + %endif: + %else: + <a href="?sort=${name_slug}">${name}</a> + %endif + </%def> +<div class="box"> + <!-- box / title --> + <div class="title"> + ${self.breadcrumbs()} + </div> + <!-- end box / title --> + <div class="table"> + <table> + <thead> + <tr> + <th class="left">${get_sort(_('Name'))}</th> + <th class="left">${get_sort(_('Description'))}</th> + <th class="left">${get_sort(_('Last change'))}</th> + <th class="left">${get_sort(_('Tip'))}</th> + <th class="left">${get_sort(_('Owner'))}</th> + <th class="left">${_('RSS')}</th> + <th class="left">${_('Atom')}</th> + </tr> + </thead> + <tbody> + %for cnt,repo in enumerate(c.repos_list): + <tr class="parity${cnt%2}"> + <td> + <div style="white-space: nowrap"> + ## TYPE OF REPO + %if repo['dbrepo']['repo_type'] =='hg': + <img class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url("/images/icons/hgicon.png")}"/> + %elif repo['dbrepo']['repo_type'] =='git': + <img class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url("/images/icons/giticon.png")}"/> + %else: + + %endif + + ##PRIVATE/PUBLIC + %if repo['dbrepo']['private']: + <img class="icon" title="${_('private repository')}" alt="${_('private repository')}" src="${h.url("/images/icons/lock.png")}"/> + %else: + <img class="icon" title="${_('public repository')}" alt="${_('public repository')}" src="${h.url("/images/icons/lock_open.png")}"/> + %endif + + ##NAME + ${h.link_to(repo['name'], + h.url('summary_home',repo_name=repo['name']),class_="repo_name")} + %if repo['dbrepo_fork']: + <a href="${h.url('summary_home',repo_name=repo['dbrepo_fork']['repo_name'])}"> + <img class="icon" alt="${_('fork')}" + title="${_('Fork of')} ${repo['dbrepo_fork']['repo_name']}" + src="${h.url("/images/icons/arrow_divide.png")}"/></a> + %endif + </div> + </td> + ##DESCRIPTION + <td><span class="tooltip" title="${h.tooltip(repo['description'])}"> + ${h.truncate(repo['description'],60)}</span> + </td> + ##LAST CHANGE + <td> + <span class="tooltip" title="${repo['last_change']}"> + ${h.age(repo['last_change'])}</span> + </td> + <td> + %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 + </td> + <td title="${repo['contact']}">${h.person(repo['contact'])}</td> + <td> + %if c.rhodecode_user.username != 'default': + <a title="${_('Subscribe to %s rss feed')%repo['name']}" class="rss_icon" href="${h.url('rss_feed_home',repo_name=repo['name'],api_key=c.rhodecode_user.api_key)}"></a> + %else: + <a title="${_('Subscribe to %s rss feed')%repo['name']}" class="rss_icon" href="${h.url('rss_feed_home',repo_name=repo['name'])}"></a> + %endif: + </td> + <td> + %if c.rhodecode_user.username != 'default': + <a title="${_('Subscribe to %s atom feed')%repo['name']}" class="atom_icon" href="${h.url('atom_feed_home',repo_name=repo['name'],api_key=c.rhodecode_user.api_key)}"></a> + %else: + <a title="${_('Subscribe to %s atom feed')%repo['name']}" class="atom_icon" href="${h.url('atom_feed_home',repo_name=repo['name'])}"></a> + %endif: + </td> + </tr> + %endfor + </tbody> + </table> + </div> +</div> + +</%def>