comparison rhodecode/controllers/forks.py @ 2776:63e58ef80ef1

Merge beta branch into stable
author Marcin Kuzminski <marcin@python-works.com>
date Sun, 02 Sep 2012 21:19:54 +0200
parents d2d35cf2b351
children faffec4abbda
comparison
equal deleted inserted replaced
2301:9d097c2592d3 2776:63e58ef80ef1
33 33
34 import rhodecode.lib.helpers as h 34 import rhodecode.lib.helpers as h
35 35
36 from rhodecode.lib.helpers import Page 36 from rhodecode.lib.helpers import Page
37 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator, \ 37 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator, \
38 NotAnonymous, HasRepoPermissionAny 38 NotAnonymous, HasRepoPermissionAny, HasPermissionAllDecorator,\
39 HasPermissionAnyDecorator
39 from rhodecode.lib.base import BaseRepoController, render 40 from rhodecode.lib.base import BaseRepoController, render
40 from rhodecode.model.db import Repository, RepoGroup, UserFollowing, User 41 from rhodecode.model.db import Repository, RepoGroup, UserFollowing, User
41 from rhodecode.model.repo import RepoModel 42 from rhodecode.model.repo import RepoModel
42 from rhodecode.model.forms import RepoForkForm 43 from rhodecode.model.forms import RepoForkForm
44 from rhodecode.model.scm import ScmModel
43 45
44 log = logging.getLogger(__name__) 46 log = logging.getLogger(__name__)
45 47
46 48
47 class ForksController(BaseRepoController): 49 class ForksController(BaseRepoController):
51 super(ForksController, self).__before__() 53 super(ForksController, self).__before__()
52 54
53 def __load_defaults(self): 55 def __load_defaults(self):
54 c.repo_groups = RepoGroup.groups_choices() 56 c.repo_groups = RepoGroup.groups_choices()
55 c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) 57 c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
58 choices, c.landing_revs = ScmModel().get_repo_landing_revs()
59 c.landing_revs_choices = choices
56 60
57 def __load_data(self, repo_name=None): 61 def __load_data(self, repo_name=None):
58 """ 62 """
59 Load defaults settings for edit, and update 63 Load defaults settings for edit, and update
60 64
118 return c.forks_data 122 return c.forks_data
119 123
120 return render('/forks/forks.html') 124 return render('/forks/forks.html')
121 125
122 @NotAnonymous() 126 @NotAnonymous()
127 @HasPermissionAnyDecorator('hg.admin', 'hg.fork.repository')
123 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', 128 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
124 'repository.admin') 129 'repository.admin')
125 def fork(self, repo_name): 130 def fork(self, repo_name):
126 c.repo_info = Repository.get_by_repo_name(repo_name) 131 c.repo_info = Repository.get_by_repo_name(repo_name)
127 if not c.repo_info: 132 if not c.repo_info:
140 defaults=defaults, 145 defaults=defaults,
141 encoding="UTF-8", 146 encoding="UTF-8",
142 force_defaults=False 147 force_defaults=False
143 ) 148 )
144 149
145
146 @NotAnonymous() 150 @NotAnonymous()
151 @HasPermissionAnyDecorator('hg.admin', 'hg.fork.repository')
147 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', 152 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
148 'repository.admin') 153 'repository.admin')
149 def fork_create(self, repo_name): 154 def fork_create(self, repo_name):
150 self.__load_defaults() 155 self.__load_defaults()
151 c.repo_info = Repository.get_by_repo_name(repo_name) 156 c.repo_info = Repository.get_by_repo_name(repo_name)
152 _form = RepoForkForm(old_data={'repo_type': c.repo_info.repo_type}, 157 _form = RepoForkForm(old_data={'repo_type': c.repo_info.repo_type},
153 repo_groups=c.repo_groups_choices,)() 158 repo_groups=c.repo_groups_choices,
159 landing_revs=c.landing_revs_choices)()
154 form_result = {} 160 form_result = {}
155 try: 161 try:
156 form_result = _form.to_python(dict(request.POST)) 162 form_result = _form.to_python(dict(request.POST))
157 # add org_path of repo so we can do a clone from it later
158 form_result['org_path'] = c.repo_info.repo_name
159 163
160 # create fork is done sometimes async on celery, db transaction 164 # create fork is done sometimes async on celery, db transaction
161 # management is handled there. 165 # management is handled there.
162 RepoModel().create_fork(form_result, self.rhodecode_user) 166 RepoModel().create_fork(form_result, self.rhodecode_user.user_id)
163 h.flash(_('forked %s repository as %s') \ 167 h.flash(_('forked %s repository as %s') \
164 % (repo_name, form_result['repo_name']), 168 % (repo_name, form_result['repo_name']),
165 category='success') 169 category='success')
166 except formencode.Invalid, errors: 170 except formencode.Invalid, errors:
167 c.new_repo = errors.value['repo_name'] 171 c.new_repo = errors.value['repo_name']