diff options
author | Marcin Kuzminski <marcin@python-works.com> | 2011-05-23 02:46:43 +0200 |
---|---|---|
committer | Marcin Kuzminski <marcin@python-works.com> | 2011-05-23 02:46:43 +0200 |
commit | 139f62c87a7de37a27dbad66ab4e802333cc550f (patch) | |
tree | da0612d82e9e57363ff96b3e9e7ab7992874c6d0 | |
parent | 4f0c3932fdffe2c764b71bf8e13f963eba179002 (diff) |
#47 implemented deleting of empty groups. Fixed problem with full paths on nested groups
--HG--
branch : beta
-rw-r--r-- | rhodecode/controllers/admin/repos_groups.py | 21 | ||||
-rw-r--r-- | rhodecode/model/db.py | 7 | ||||
-rw-r--r-- | rhodecode/model/forms.py | 6 | ||||
-rw-r--r-- | rhodecode/model/repos_group.py | 21 |
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()) |