aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rhodecode/controllers/admin/repos_groups.py21
-rw-r--r--rhodecode/model/db.py7
-rw-r--r--rhodecode/model/forms.py6
-rw-r--r--rhodecode/model/repos_group.py21
4 files changed, 43 insertions, 12 deletions
diff --git a/rhodecode/controllers/admin/repos_groups.py b/rhodecode/controllers/admin/repos_groups.py
index 04e7acba..75943e80 100644
--- a/rhodecode/controllers/admin/repos_groups.py
+++ b/rhodecode/controllers/admin/repos_groups.py
@@ -112,6 +112,27 @@ class ReposGroupsController(BaseController):
# method='delete')
# url('repos_group', id=ID)
+ repos_group_model = ReposGroupModel()
+ gr = Group.get(id)
+ repos = gr.repositories.all()
+ if repos:
+ h.flash(_('This group contains %s repositores and cannot be '
+ 'deleted' % len(repos)),
+ category='error')
+ return redirect(url('repos_groups'))
+
+
+ try:
+ repos_group_model.delete(id)
+ h.flash(_('removed repos group %s' % gr.group_name), category='success')
+ #TODO: in futureaction_logger(, '', '', '', self.sa)
+ except Exception:
+ log.error(traceback.format_exc())
+ h.flash(_('error occurred during deletion of repos group %s' % gr.group_name),
+ category='error')
+
+ return redirect(url('repos_groups'))
+
def show(self, id, format='html'):
"""GET /repos_groups/id: Show a specific item"""
# url('repos_group', id=ID)
diff --git a/rhodecode/model/db.py b/rhodecode/model/db.py
index 7fffc7af..19d28aa4 100644
--- a/rhodecode/model/db.py
+++ b/rhodecode/model/db.py
@@ -320,6 +320,11 @@ class Group(Base):
return "<%s('%s:%s')>" % (self.__class__.__name__, self.group_id,
self.group_name)
+
+ @classmethod
+ def url_sep(cls):
+ return '/'
+
@property
def parents(self):
groups = []
@@ -338,7 +343,7 @@ class Group(Base):
@property
def full_path(self):
- return '/'.join([g.group_name for g in self.parents] +
+ return Group.url_sep().join([g.group_name for g in self.parents] +
[self.group_name])
@property
diff --git a/rhodecode/model/forms.py b/rhodecode/model/forms.py
index ad39447d..a97f37ad 100644
--- a/rhodecode/model/forms.py
+++ b/rhodecode/model/forms.py
@@ -237,9 +237,9 @@ def ValidRepoName(edit, old_data):
if value.get('repo_group'):
gr = Group.get(value.get('repo_group'))
group_path = gr.full_path
- # value needs to be aware of group name
- # it has to use '/'
- repo_name_full = group_path + '/' + repo_name
+ # value needs to be aware of group name in order to check
+ # db key
+ repo_name_full = group_path + Group.url_sep() + repo_name
else:
group_path = ''
repo_name_full = repo_name
diff --git a/rhodecode/model/repos_group.py b/rhodecode/model/repos_group.py
index 634ab1d6..9ba38eb0 100644
--- a/rhodecode/model/repos_group.py
+++ b/rhodecode/model/repos_group.py
@@ -58,12 +58,12 @@ class ReposGroupModel(BaseModel):
"""
if parent_id:
- parent_group_name = Group.get(parent_id).group_name
+ paths = Group.get(parent_id).full_path.split(Group.url_sep())
+ parent_path = os.sep.join(paths)
else:
- parent_group_name = ''
+ parent_path = ''
- create_path = os.path.join(self.repos_path, parent_group_name,
- group_name)
+ create_path = os.path.join(self.repos_path, parent_path, group_name)
log.debug('creating new group in %s', create_path)
if os.path.isdir(create_path):
@@ -81,13 +81,17 @@ class ReposGroupModel(BaseModel):
"""
pass
- def __delete_group(self, group_name):
+ def __delete_group(self, group):
"""
Deletes a group from a filesystem
- :param group_name:
+ :param group: instance of group from database
"""
- pass
+ paths = group.full_path.split(Group.url_sep())
+ paths = os.sep.join(paths)
+
+ rm_path = os.path.join(self.repos_path, paths)
+ os.rmdir(rm_path)
def create(self, form_data):
try:
@@ -124,8 +128,9 @@ class ReposGroupModel(BaseModel):
def delete(self, users_group_id):
try:
- users_group = self.get(users_group_id, cache=False)
+ users_group = Group.get(users_group_id)
self.sa.delete(users_group)
+ self.__delete_group(users_group)
self.sa.commit()
except:
log.error(traceback.format_exc())