##// END OF EJS Templates
added deque with maxlen for py2.5 compat
added deque with maxlen for py2.5 compat

File last commit:

r2709:d2d35cf2 beta
r2729:e9e7c40b beta
Show More
forks.py
184 lines | 6.8 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
added landing revision into fork create form
r2485 from rhodecode.model.scm import ScmModel
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):
c.repo_groups = RepoGroup.groups_choices()
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:
h.flash(_('%s repository is not mapped to db perhaps'
' it was created or renamed from the filesystem'
' please run the application again'
' in order to rescan repositories') % repo_name,
category='error')
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)
# add prefix to fork
defaults['repo_name'] = 'fork-' + defaults['repo_name']
return defaults
@HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
'repository.admin')
Added simple forks page, resolves issue #179
r1301 def forks(self, repo_name):
p = int(request.params.get('page', 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:
h.flash(_('%s repository is not mapped to db perhaps'
' it was created or renamed from the file system'
' please run the application again'
' in order to rescan repositories') % repo_name,
category='error')
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'))