##// END OF EJS Templates
fix webtest dependency
fix webtest dependency

File last commit:

r3239:a9565b8b beta
r3406:4e9f00dd beta
Show More
forks.py
182 lines | 6.7 KiB | text/x-python | PythonLexer
Added simple forks page, resolves issue #179
r1301 # -*- coding: utf-8 -*-
"""
rhodecode.controllers.forks
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
forks controller for rhodecode
:created_on: Apr 23, 2011
:author: marcink
2012 copyrights
r1824 :copyright: (C) 2011-2012 Marcin Kuzminski <marcin@python-works.com>
Added simple forks page, resolves issue #179
r1301 :license: GPLv3, see COPYING for more details.
"""
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import logging
#235 forking page repo group selection...
r1722 import formencode
import traceback
from formencode import htmlfill
Added simple forks page, resolves issue #179
r1301
#235 forking page repo group selection...
r1722 from pylons import tmpl_context as c, request, url
from pylons.controllers.util import redirect
from pylons.i18n.translation import _
import rhodecode.lib.helpers as h
Added simple forks page, resolves issue #179
r1301
from rhodecode.lib.helpers import Page
#235 forking page repo group selection...
r1722 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator, \
RhodeCode now has a option to explicitly set forking permissions. ref #508...
r2709 NotAnonymous, HasRepoPermissionAny, HasPermissionAllDecorator,\
HasPermissionAnyDecorator
Added simple forks page, resolves issue #179
r1301 from rhodecode.lib.base import BaseRepoController, render
#235 forking page repo group selection...
r1722 from rhodecode.model.db import Repository, RepoGroup, UserFollowing, User
from rhodecode.model.repo import RepoModel
from rhodecode.model.forms import RepoForkForm
filter out repo groups choices to only ones that you have write+ access to. Before it was read+ access and you got proper...
r3239 from rhodecode.model.scm import ScmModel, GroupList
failsafe the GET `page` argument
r2845 from rhodecode.lib.utils2 import safe_int
Added simple forks page, resolves issue #179
r1301
log = logging.getLogger(__name__)
class ForksController(BaseRepoController):
@LoginRequired()
def __before__(self):
super(ForksController, self).__before__()
#235 forking page repo group selection...
r1722 def __load_defaults(self):
filter out repo groups choices to only ones that you have write+ access to. Before it was read+ access and you got proper...
r3239 acl_groups = GroupList(RepoGroup.query().all(),
perm_set=['group.write', 'group.admin'])
c.repo_groups = RepoGroup.groups_choices(groups=acl_groups)
#235 forking page repo group selection...
r1722 c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
added landing revision into fork create form
r2485 choices, c.landing_revs = ScmModel().get_repo_landing_revs()
c.landing_revs_choices = choices
#235 forking page repo group selection...
r1722
def __load_data(self, repo_name=None):
"""
Load defaults settings for edit, and update
:param repo_name:
"""
self.__load_defaults()
c.repo_info = db_repo = Repository.get_by_repo_name(repo_name)
repo = db_repo.scm_instance
if c.repo_info is None:
- #683 fixed difference between messages about not mapped repositories
r3110 h.not_mapped_error(repo_name)
#235 forking page repo group selection...
r1722 return redirect(url('repos'))
c.default_user_id = User.get_by_username('default').user_id
c.in_public_journal = UserFollowing.query()\
.filter(UserFollowing.user_id == c.default_user_id)\
.filter(UserFollowing.follows_repository == c.repo_info).scalar()
if c.repo_info.stats:
- fixed issue with missing commits on some repos commands...
r1807 last_rev = c.repo_info.stats.stat_on_revision+1
#235 forking page repo group selection...
r1722 else:
last_rev = 0
c.stats_revision = last_rev
- fixed issue with missing commits on some repos commands...
r1807 c.repo_last_rev = repo.count() if repo.revisions else 0
#235 forking page repo group selection...
r1722
if last_rev == 0 or c.repo_last_rev == 0:
c.stats_percentage = 0
else:
c.stats_percentage = '%.2f' % ((float((last_rev)) /
c.repo_last_rev) * 100)
defaults = RepoModel()._get_defaults(repo_name)
fixes #732
r3236 # alter the description to indicate a fork
defaults['description'] = ('fork of repository: %s \n%s'
% (defaults['repo_name'],
defaults['description']))
Enabled compare engine for tags...
r3010 # add suffix to fork
defaults['repo_name'] = '%s-fork' % defaults['repo_name']
fixes #732
r3236
#235 forking page repo group selection...
r1722 return defaults
@HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
'repository.admin')
Added simple forks page, resolves issue #179
r1301 def forks(self, repo_name):
failsafe the GET `page` argument
r2845 p = safe_int(request.params.get('page', 1), 1)
added tests for forks and followers pages
r1375 repo_id = c.rhodecode_db_repo.repo_id
fixed missing permissions check on forks page
r2176 d = []
for r in Repository.get_repo_forks(repo_id):
if not HasRepoPermissionAny(
'repository.read', 'repository.write', 'repository.admin'
)(r.repo_name, 'get forks check'):
continue
d.append(r)
Added simple forks page, resolves issue #179
r1301 c.forks_pager = Page(d, page=p, items_per_page=20)
c.forks_data = render('/forks/forks_data.html')
Javascripts rewrite: updated yui to latest 2.9, simplified ajax loading for multiple pages. Removed YUI dev package
r1421 if request.environ.get('HTTP_X_PARTIAL_XHR'):
Added simple forks page, resolves issue #179
r1301 return c.forks_data
return render('/forks/forks.html')
#235 forking page repo group selection...
r1722
@NotAnonymous()
RhodeCode now has a option to explicitly set forking permissions. ref #508...
r2709 @HasPermissionAnyDecorator('hg.admin', 'hg.fork.repository')
#235 forking page repo group selection...
r1722 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
'repository.admin')
def fork(self, repo_name):
c.repo_info = Repository.get_by_repo_name(repo_name)
if not c.repo_info:
- #683 fixed difference between messages about not mapped repositories
r3110 h.not_mapped_error(repo_name)
#235 forking page repo group selection...
r1722 return redirect(url('home'))
defaults = self.__load_data(repo_name)
return htmlfill.render(
render('forks/fork.html'),
defaults=defaults,
encoding="UTF-8",
force_defaults=False
)
@NotAnonymous()
RhodeCode now has a option to explicitly set forking permissions. ref #508...
r2709 @HasPermissionAnyDecorator('hg.admin', 'hg.fork.repository')
#235 forking page repo group selection...
r1722 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
'repository.admin')
def fork_create(self, repo_name):
self.__load_defaults()
c.repo_info = Repository.get_by_repo_name(repo_name)
_form = RepoForkForm(old_data={'repo_type': c.repo_info.repo_type},
added landing revision into fork create form
r2485 repo_groups=c.repo_groups_choices,
landing_revs=c.landing_revs_choices)()
#235 forking page repo group selection...
r1722 form_result = {}
try:
form_result = _form.to_python(dict(request.POST))
# create fork is done sometimes async on celery, db transaction
# management is handled there.
Refactored create fork function to use new RepoModel functions instead of old...
r2652 RepoModel().create_fork(form_result, self.rhodecode_user.user_id)
#235 forking page repo group selection...
r1722 h.flash(_('forked %s repository as %s') \
% (repo_name, form_result['repo_name']),
category='success')
except formencode.Invalid, errors:
c.new_repo = errors.value['repo_name']
return htmlfill.render(
render('forks/fork.html'),
defaults=errors.value,
errors=errors.error_dict or {},
prefix_error=False,
encoding="UTF-8")
except Exception:
log.error(traceback.format_exc())
h.flash(_('An error occurred during repository forking %s') %
repo_name, category='error')
return redirect(url('home'))