diff --git a/rhodecode/controllers/admin/repos.py b/rhodecode/controllers/admin/repos.py
--- a/rhodecode/controllers/admin/repos.py
+++ b/rhodecode/controllers/admin/repos.py
@@ -63,19 +63,36 @@ class ReposController(BaseController):
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('»'.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 @@ class ReposController(BaseController):
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 @@ class ReposController(BaseController):
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 @@ class ReposController(BaseController):
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 @@ class ReposController(BaseController):
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 @@ class ReposController(BaseController):
"""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 @@ class ReposController(BaseController):
# 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)
diff --git a/rhodecode/lib/helpers.py b/rhodecode/lib/helpers.py
--- a/rhodecode/lib/helpers.py
+++ b/rhodecode/lib/helpers.py
@@ -680,3 +680,18 @@ def changed_tooltip(nodes):
return literal(pref + '
'.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(' » '.join(map(make_link, groups)) + \
+ " » " + repo_name)
+
+
diff --git a/rhodecode/model/db.py b/rhodecode/model/db.py
--- a/rhodecode/model/db.py
+++ b/rhodecode/model/db.py
@@ -255,6 +255,21 @@ class Group(Base):
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}
diff --git a/rhodecode/model/forms.py b/rhodecode/model/forms.py
--- a/rhodecode/model/forms.py
+++ b/rhodecode/model/forms.py
@@ -458,7 +458,7 @@ def RepoForm(edit=False, old_data={}, su
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)
diff --git a/rhodecode/templates/admin/repos/repo_edit.html b/rhodecode/templates/admin/repos/repo_edit.html
--- a/rhodecode/templates/admin/repos/repo_edit.html
+++ b/rhodecode/templates/admin/repos/repo_edit.html
@@ -10,7 +10,7 @@
»
${h.link_to(_('Repositories'),h.url('repos'))}
»
- ${_('edit')} » ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
+ ${_('edit')} » ${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 @@