Mercurial > kallithea
comparison rhodecode/controllers/settings.py @ 2031:82a88013a3fd
merge 1.3 into stable
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sun, 26 Feb 2012 17:25:09 +0200 |
parents | 95c3e33ef32e 89efedac4e6c |
children | 63e58ef80ef1 |
comparison
equal
deleted
inserted
replaced
2005:ab0e122b38a7 | 2031:82a88013a3fd |
---|---|
5 | 5 |
6 Settings controller for rhodecode | 6 Settings controller for rhodecode |
7 | 7 |
8 :created_on: Jun 30, 2010 | 8 :created_on: Jun 30, 2010 |
9 :author: marcink | 9 :author: marcink |
10 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | 10 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com> |
11 :license: GPLv3, see COPYING for more details. | 11 :license: GPLv3, see COPYING for more details. |
12 """ | 12 """ |
13 # This program is free software: you can redistribute it and/or modify | 13 # This program is free software: you can redistribute it and/or modify |
14 # it under the terms of the GNU General Public License as published by | 14 # it under the terms of the GNU General Public License as published by |
15 # the Free Software Foundation, either version 3 of the License, or | 15 # the Free Software Foundation, either version 3 of the License, or |
33 from pylons.controllers.util import redirect | 33 from pylons.controllers.util import redirect |
34 from pylons.i18n.translation import _ | 34 from pylons.i18n.translation import _ |
35 | 35 |
36 import rhodecode.lib.helpers as h | 36 import rhodecode.lib.helpers as h |
37 | 37 |
38 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAllDecorator, \ | 38 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAllDecorator |
39 HasRepoPermissionAnyDecorator, NotAnonymous | |
40 from rhodecode.lib.base import BaseRepoController, render | 39 from rhodecode.lib.base import BaseRepoController, render |
41 from rhodecode.lib.utils import invalidate_cache, action_logger | 40 from rhodecode.lib.utils import invalidate_cache, action_logger |
42 | 41 |
43 from rhodecode.model.forms import RepoSettingsForm, RepoForkForm | 42 from rhodecode.model.forms import RepoSettingsForm |
44 from rhodecode.model.repo import RepoModel | 43 from rhodecode.model.repo import RepoModel |
45 from rhodecode.model.db import Group | 44 from rhodecode.model.db import RepoGroup |
45 from rhodecode.model.meta import Session | |
46 | 46 |
47 log = logging.getLogger(__name__) | 47 log = logging.getLogger(__name__) |
48 | 48 |
49 | 49 |
50 class SettingsController(BaseRepoController): | 50 class SettingsController(BaseRepoController): |
51 | 51 |
52 @LoginRequired() | 52 @LoginRequired() |
53 def __before__(self): | 53 def __before__(self): |
54 super(SettingsController, self).__before__() | 54 super(SettingsController, self).__before__() |
55 | 55 |
56 def __load_defaults(self): | 56 def __load_defaults(self): |
57 c.repo_groups = Group.groups_choices() | 57 c.repo_groups = RepoGroup.groups_choices() |
58 c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) | 58 c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) |
59 | 59 |
60 repo_model = RepoModel() | 60 repo_model = RepoModel() |
61 c.users_array = repo_model.get_users_js() | 61 c.users_array = repo_model.get_users_js() |
62 c.users_groups_array = repo_model.get_users_groups_js() | 62 c.users_groups_array = repo_model.get_users_groups_js() |
63 | 63 |
64 @HasRepoPermissionAllDecorator('repository.admin') | 64 @HasRepoPermissionAllDecorator('repository.admin') |
65 def index(self, repo_name): | 65 def index(self, repo_name): |
66 repo_model = RepoModel() | 66 repo_model = RepoModel() |
67 c.repo_info = repo = repo_model.get_by_repo_name(repo_name) | 67 c.repo_info = repo = repo_model.get_by_repo_name(repo_name) |
68 if not repo: | 68 if not repo: |
87 | 87 |
88 @HasRepoPermissionAllDecorator('repository.admin') | 88 @HasRepoPermissionAllDecorator('repository.admin') |
89 def update(self, repo_name): | 89 def update(self, repo_name): |
90 repo_model = RepoModel() | 90 repo_model = RepoModel() |
91 changed_name = repo_name | 91 changed_name = repo_name |
92 | 92 |
93 self.__load_defaults() | 93 self.__load_defaults() |
94 | 94 |
95 _form = RepoSettingsForm(edit=True, | 95 _form = RepoSettingsForm(edit=True, |
96 old_data={'repo_name': repo_name}, | 96 old_data={'repo_name': repo_name}, |
97 repo_groups=c.repo_groups_choices)() | 97 repo_groups=c.repo_groups_choices)() |
98 try: | 98 try: |
99 form_result = _form.to_python(dict(request.POST)) | 99 form_result = _form.to_python(dict(request.POST)) |
100 | 100 |
101 repo_model.update(repo_name, form_result) | 101 repo_model.update(repo_name, form_result) |
102 invalidate_cache('get_repo_cached_%s' % repo_name) | 102 invalidate_cache('get_repo_cached_%s' % repo_name) |
103 h.flash(_('Repository %s updated successfully' % repo_name), | 103 h.flash(_('Repository %s updated successfully' % repo_name), |
104 category='success') | 104 category='success') |
105 changed_name = form_result['repo_name_full'] | 105 changed_name = form_result['repo_name_full'] |
106 action_logger(self.rhodecode_user, 'user_updated_repo', | 106 action_logger(self.rhodecode_user, 'user_updated_repo', |
107 changed_name, '', self.sa) | 107 changed_name, '', self.sa) |
108 Session.commit() | |
108 except formencode.Invalid, errors: | 109 except formencode.Invalid, errors: |
109 c.repo_info = repo_model.get_by_repo_name(repo_name) | 110 c.repo_info = repo_model.get_by_repo_name(repo_name) |
110 c.users_array = repo_model.get_users_js() | 111 c.users_array = repo_model.get_users_js() |
111 errors.value.update({'user': c.repo_info.user.username}) | 112 errors.value.update({'user': c.repo_info.user.username}) |
112 return htmlfill.render( | 113 return htmlfill.render( |
146 action_logger(self.rhodecode_user, 'user_deleted_repo', | 147 action_logger(self.rhodecode_user, 'user_deleted_repo', |
147 repo_name, '', self.sa) | 148 repo_name, '', self.sa) |
148 repo_model.delete(repo) | 149 repo_model.delete(repo) |
149 invalidate_cache('get_repo_cached_%s' % repo_name) | 150 invalidate_cache('get_repo_cached_%s' % repo_name) |
150 h.flash(_('deleted repository %s') % repo_name, category='success') | 151 h.flash(_('deleted repository %s') % repo_name, category='success') |
152 Session.commit() | |
151 except Exception: | 153 except Exception: |
152 log.error(traceback.format_exc()) | 154 log.error(traceback.format_exc()) |
153 h.flash(_('An error occurred during deletion of %s') % repo_name, | 155 h.flash(_('An error occurred during deletion of %s') % repo_name, |
154 category='error') | 156 category='error') |
155 | 157 |
156 return redirect(url('home')) | 158 return redirect(url('home')) |
157 | |
158 @NotAnonymous() | |
159 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | |
160 'repository.admin') | |
161 def fork(self, repo_name): | |
162 repo_model = RepoModel() | |
163 c.repo_info = repo = repo_model.get_by_repo_name(repo_name) | |
164 if not repo: | |
165 h.flash(_('%s repository is not mapped to db perhaps' | |
166 ' it was created or renamed from the file system' | |
167 ' please run the application again' | |
168 ' in order to rescan repositories') % repo_name, | |
169 category='error') | |
170 | |
171 return redirect(url('home')) | |
172 | |
173 return render('settings/repo_fork.html') | |
174 | |
175 @NotAnonymous() | |
176 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | |
177 'repository.admin') | |
178 def fork_create(self, repo_name): | |
179 repo_model = RepoModel() | |
180 c.repo_info = repo_model.get_by_repo_name(repo_name) | |
181 _form = RepoForkForm(old_data={'repo_type': c.repo_info.repo_type})() | |
182 form_result = {} | |
183 try: | |
184 form_result = _form.to_python(dict(request.POST)) | |
185 form_result.update({'repo_name': repo_name}) | |
186 repo_model.create_fork(form_result, self.rhodecode_user) | |
187 h.flash(_('forked %s repository as %s') \ | |
188 % (repo_name, form_result['fork_name']), | |
189 category='success') | |
190 action_logger(self.rhodecode_user, | |
191 'user_forked_repo:%s' % form_result['fork_name'], | |
192 repo_name, '', self.sa) | |
193 except formencode.Invalid, errors: | |
194 c.new_repo = errors.value['fork_name'] | |
195 r = render('settings/repo_fork.html') | |
196 | |
197 return htmlfill.render( | |
198 r, | |
199 defaults=errors.value, | |
200 errors=errors.error_dict or {}, | |
201 prefix_error=False, | |
202 encoding="UTF-8") | |
203 except Exception: | |
204 log.error(traceback.format_exc()) | |
205 h.flash(_('An error occurred during repository forking %s') % | |
206 repo_name, category='error') | |
207 | |
208 return redirect(url('home')) |