changeset 1159:187a924ed653 beta

Changes for repo groups
author Marcin Kuzminski <marcin@python-works.com>
date Sat, 19 Mar 2011 18:52:27 +0100
parents f63cc1cbce27
children 6e70fcca8de8
files rhodecode/controllers/admin/repos.py rhodecode/lib/helpers.py rhodecode/model/db.py rhodecode/model/forms.py rhodecode/templates/admin/repos/repo_edit.html
diffstat 5 files changed, 62 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/controllers/admin/repos.py	Sat Mar 19 01:07:53 2011 +0100
+++ b/rhodecode/controllers/admin/repos.py	Sat Mar 19 18:52:27 2011 +0100
@@ -63,19 +63,36 @@
         c.admin_username = session.get('admin_username')
         super(ReposController, self).__before__()
 
-
+    def __load_defaults(self):
+        repo_model = RepoModel()
 
-    def __load_data(self, repo_name):
+        c.repo_groups = [('', '')]
+        parents_link = lambda k:h.literal('&raquo;'.join(
+                                    map(lambda k:k.group_name,
+                                        k.parents + [k])
+                                    )
+                                )
+
+        c.repo_groups.extend([(x.group_id, parents_link(x)) for \
+                                            x in self.sa.query(Group).all()])
+        c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
+        c.users_array = repo_model.get_users_js()
+        c.users_groups_array = repo_model.get_users_groups_js()
+
+    def __load_data(self, repo_name=None):
         """
         Load defaults settings for edit, and update
         
         :param repo_name:
         """
+        self.__load_defaults()
+
         repo, dbrepo = ScmModel().get(repo_name, retval='repo')
 
         repo_model = RepoModel()
         c.repo_info = repo_model.get_by_repo_name(repo_name)
 
+
         if c.repo_info is None:
             h.flash(_('%s repository is not mapped to db perhaps'
                       ' it was created or renamed from the filesystem'
@@ -86,10 +103,6 @@
             return redirect(url('repos'))
 
 
-
-        c.repo_groups = [('', '')]
-        c.repo_groups.extend([(x.group_id, x.group_name) for x in self.sa.query(Group).all()])
-
         c.default_user_id = User.by_username('default').user_id
         c.in_public_journal = self.sa.query(UserFollowing)\
             .filter(UserFollowing.user_id == c.default_user_id)\
@@ -109,13 +122,13 @@
             c.stats_percentage = '%.2f' % ((float((last_rev)) /
                                             c.repo_last_rev) * 100)
 
-        c.users_array = repo_model.get_users_js()
-        c.users_groups_array = repo_model.get_users_groups_js()
+
 
         defaults = c.repo_info.get_dict()
         group, repo_name = c.repo_info.groups_and_repo
         defaults['repo_name'] = repo_name
-        defaults['repo_group'] = getattr(group, 'group_id', None)
+        defaults['repo_group'] = getattr(group[-1], 'group_id', None)
+
         #fill owner
         if c.repo_info.user:
             defaults.update({'user':c.repo_info.user.username})
@@ -153,11 +166,11 @@
         POST /repos: Create a new item"""
         # url('repos')
         repo_model = RepoModel()
-        c.repo_groups = [('', '')]
-        c.repo_groups.extend([(x.group_id, x.group_name) for x in self.sa.query(Group).all()])
+        self.__load_defaults()
         form_result = {}
         try:
-            form_result = RepoForm()(repo_groups=c.repo_groups).to_python(dict(request.POST))
+            form_result = RepoForm(repo_groups=c.repo_groups_choices)()\
+                            .to_python(dict(request.POST))
             repo_model.create(form_result, self.rhodecode_user)
             if form_result['clone_uri']:
                 h.flash(_('created repository %s from %s') \
@@ -177,8 +190,6 @@
         except formencode.Invalid, errors:
 
             c.new_repo = errors.value['repo_name']
-            c.repo_groups = [('', '')]
-            c.repo_groups.extend([(x.group_id, x.group_name) for x in self.sa.query(Group).all()])
 
             if request.POST.get('user_created'):
                 r = render('admin/repos/repo_add_create_repository.html')
@@ -206,8 +217,7 @@
         """GET /repos/new: Form to create a new item"""
         new_repo = request.GET.get('repo', '')
         c.new_repo = repo_name_slug(new_repo)
-        c.repo_groups = [('', '')]
-        c.repo_groups.extend([(x.group_id, x.group_name) for x in self.sa.query(Group).all()])
+        self.__load_defaults()
         return render('admin/repos/repo_add.html')
 
     @HasPermissionAllDecorator('hg.admin')
@@ -220,9 +230,11 @@
         #    h.form(url('repo', repo_name=ID),
         #           method='put')
         # url('repo', repo_name=ID)
+        self.__load_defaults()
         repo_model = RepoModel()
         changed_name = repo_name
-        _form = RepoForm(edit=True, old_data={'repo_name':repo_name})()
+        _form = RepoForm(edit=True, old_data={'repo_name':repo_name},
+                         repo_groups=c.repo_groups_choices)()
         try:
             form_result = _form.to_python(dict(request.POST))
             repo_model.update(repo_name, form_result)
--- a/rhodecode/lib/helpers.py	Sat Mar 19 01:07:53 2011 +0100
+++ b/rhodecode/lib/helpers.py	Sat Mar 19 18:52:27 2011 +0100
@@ -680,3 +680,18 @@
         return literal(pref + '<br/> '.join([x.path.decode('utf-8', 'replace') for x in nodes[:30]]) + suf)
     else:
         return ': ' + _('No Files')
+
+
+
+def repo_link(groups_and_repos):
+    groups, repo_name = groups_and_repos
+
+    if not groups:
+        return repo_name
+    else:
+        def make_link(group):
+            return link_to(group.group_name, url('/', group.group_id))
+        return literal(' &raquo; '.join(map(make_link, groups)) + \
+                       " &raquo; " + repo_name)
+
+
--- a/rhodecode/model/db.py	Sat Mar 19 01:07:53 2011 +0100
+++ b/rhodecode/model/db.py	Sat Mar 19 18:52:27 2011 +0100
@@ -255,6 +255,21 @@
         return "<%s('%s:%s')>" % (self.__class__.__name__, self.group_id,
                                   self.group_name)
 
+    @property
+    def parents(self):
+        groups = []
+        if self.parent_group is None:
+            return groups
+        cur_gr = self.parent_group
+        groups.insert(0, cur_gr)
+        while 1:
+            gr = getattr(cur_gr, 'parent_group', None)
+            cur_gr = cur_gr.parent_group
+            if gr is None:
+                break
+            groups.insert(0, gr)
+        return groups
+
 class Permission(Base):
     __tablename__ = 'permissions'
     __table_args__ = {'useexisting':True}
--- a/rhodecode/model/forms.py	Sat Mar 19 01:07:53 2011 +0100
+++ b/rhodecode/model/forms.py	Sat Mar 19 18:52:27 2011 +0100
@@ -458,7 +458,7 @@
         repo_name = All(UnicodeString(strip=True, min=1, not_empty=True),
                         ValidRepoName(edit, old_data))
         clone_uri = UnicodeString(strip=True, min=1, not_empty=False)
-        repo_group = OneOf(repo_groups)
+        repo_group = OneOf(repo_groups, hideList=True)
         repo_type = OneOf(supported_backends)
         description = UnicodeString(strip=True, min=1, not_empty=True)
         private = StringBoolean(if_missing=False)
--- a/rhodecode/templates/admin/repos/repo_edit.html	Sat Mar 19 01:07:53 2011 +0100
+++ b/rhodecode/templates/admin/repos/repo_edit.html	Sat Mar 19 18:52:27 2011 +0100
@@ -10,7 +10,7 @@
     &raquo; 
     ${h.link_to(_('Repositories'),h.url('repos'))} 
     &raquo;
-    ${_('edit')} &raquo; ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
+    ${_('edit')} &raquo; ${h.link_to(c.repo_info.just_name,h.url('summary_home',repo_name=c.repo_name))}
 </%def>
 
 <%def name="page_nav()">
@@ -40,7 +40,7 @@
 	               <label for="clone_uri">${_('Clone uri')}:</label>
 	           </div>
 	           <div class="input">
-	               ${h.text('clone_uri',class_="small")}
+	               ${h.text('clone_uri',class_="medium")}
 	           </div>
 	        </div>             
 	        <div class="field">