Changeset - cd50d1b5f35b
[Not reviewed]
CONTRIBUTORS
Show inline comments
 
@@ -32,3 +32,4 @@ List of contributors to RhodeCode projec
 
    Raoul Thill <raoul.thill@gmail.com>
 
    Philip Jameson <philip.j@hostdime.com>
 
    Mads Kiilerich <madski@unity3d.com>
 
    Dan Sheridan <djs@adelard.com>
docs/api/api.rst
Show inline comments
 
@@ -155,9 +155,10 @@ OUTPUT::
 
lock
 
----
 

	
 
Set locking state on given repository by given user.
 
Set locking state on given repository by given user. If userid param is skipped
 
, then it is set to id of user whos calling this method.
 
This command can be executed only using api_key belonging to user with admin 
 
rights.
 
rights or regular user that have admin or write access to repository.
 

	
 
INPUT::
 

	
 
@@ -166,9 +167,8 @@ INPUT::
 
    method :  "lock"
 
    args :    {
 
                "repoid" : "<reponame or repo_id>"
 
                "userid" : "<user_id or username>",
 
                "userid" : "<user_id or username = Optional(=apiuser)>",
 
                "locked" : "<bool true|false>"
 
                
 
              }
 

	
 
OUTPUT::
 
@@ -178,12 +178,47 @@ OUTPUT::
 
    error :  null
 

	
 

	
 
show_ip
 
-------
 

	
 
Shows IP address as seen from RhodeCode server, together with all
 
defined IP addresses for given user.
 
This command can be executed only using api_key belonging to user with admin 
 
rights.
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "show_ip"
 
    args :    {
 
                "userid" : "<user_id or username>",
 
              }
 

	
 
OUTPUT::
 

	
 
    id : <id_given_in_input>
 
    result : {
 
                 "ip_addr_server": <ip_from_clien>",
 
                 "user_ips": [
 
                                {
 
                                   "ip_addr": "<ip_with_mask>",
 
                                   "ip_range": ["<start_ip>", "<end_ip>"],
 
                                },
 
                                ...
 
                             ]
 
             }
 
    
 
    error :  null
 

	
 

	
 
get_user
 
--------
 

	
 
Get's an user by username or user_id, Returns empty result if user is not found.
 
If userid param is skipped it is set to id of user who is calling this method.
 
This command can be executed only using api_key belonging to user with admin 
 
rights.
 
rights, or regular users that cannot specify different userid than theirs
 

	
 

	
 
INPUT::
 
@@ -192,7 +227,7 @@ INPUT::
 
    api_key : "<api_key>"
 
    method :  "get_user"
 
    args :    { 
 
                "userid" : "<username or user_id>"
 
                "userid" : "<username or user_id Optional(=apiuser)>"
 
              }
 

	
 
OUTPUT::
 
@@ -200,16 +235,17 @@ OUTPUT::
 
    id : <id_given_in_input>
 
    result: None if user does not exist or 
 
            {
 
                "user_id" :  "<user_id>",
 
                "username" : "<username>",
 
                "firstname": "<firstname>",
 
                "lastname" : "<lastname>",
 
                "email" :    "<email>",
 
                "emails":    "<list_of_all_additional_emails>",
 
                "active" :   "<bool>",
 
                "admin" :    "<bool>",
 
                "ldap_dn" :  "<ldap_dn>",
 
                "last_login": "<last_login>",
 
                "user_id" :     "<user_id>",
 
                "username" :    "<username>",
 
                "firstname":    "<firstname>",
 
                "lastname" :    "<lastname>",
 
                "email" :       "<email>",
 
                "emails":       "<list_of_all_additional_emails>",
 
                "ip_addresses": "<list_of_ip_addresses_for_user>",
 
                "active" :      "<bool>",
 
                "admin" :       "<bool>",
 
                "ldap_dn" :     "<ldap_dn>",
 
                "last_login":   "<last_login>",
 
                "permissions": {
 
                    "global": ["hg.create.repository",
 
                               "repository.read",
 
@@ -241,16 +277,17 @@ OUTPUT::
 
    id : <id_given_in_input>
 
    result: [
 
              {
 
                "user_id" :  "<user_id>",
 
                "username" : "<username>",
 
                "firstname": "<firstname>",
 
                "lastname" : "<lastname>",
 
                "email" :    "<email>",
 
                "emails":    "<list_of_all_additional_emails>",
 
                "active" :   "<bool>",
 
                "admin" :    "<bool>",
 
                "ldap_dn" :  "<ldap_dn>",
 
                "last_login": "<last_login>",
 
                "user_id" :     "<user_id>",
 
                "username" :    "<username>",
 
                "firstname":    "<firstname>",
 
                "lastname" :    "<lastname>",
 
                "email" :       "<email>",
 
                "emails":       "<list_of_all_additional_emails>",
 
                "ip_addresses": "<list_of_ip_addresses_for_user>",
 
                "active" :      "<bool>",
 
                "admin" :       "<bool>",
 
                "ldap_dn" :     "<ldap_dn>",
 
                "last_login":   "<last_login>",
 
              },
 
    	
 
            ]
 
@@ -315,14 +352,14 @@ INPUT::
 
    method :  "update_user"
 
    args :    {
 
                "userid" : "<user_id or username>",
 
                "username" :  "<username> = Optional",
 
                "email" :     "<useremail> = Optional",
 
                "password" :  "<password> = Optional",
 
                "firstname" : "<firstname> = Optional",
 
                "lastname" :  "<lastname> = Optional",
 
                "active" :    "<bool> = Optional",
 
                "admin" :     "<bool> = Optional",
 
                "ldap_dn" :   "<ldap_dn> = Optional"
 
                "username" :  "<username> = Optional(None)",
 
                "email" :     "<useremail> = Optional(None)",
 
                "password" :  "<password> = Optional(None)",
 
                "firstname" : "<firstname> = Optional(None)",
 
                "lastname" :  "<lastname> = Optional(None)",
 
                "active" :    "<bool> = Optional(None)",
 
                "admin" :     "<bool> = Optional(None)",
 
                "ldap_dn" :   "<ldap_dn> = Optional(None)"
 
              }
 

	
 
OUTPUT::
 
@@ -537,8 +574,9 @@ get_repo
 
--------
 

	
 
Gets an existing repository by it's name or repository_id. Members will return
 
either users_group or user associated to that repository. This command can 
 
be executed only using api_key belonging to user with admin rights.
 
either users_group or user associated to that repository. This command can be 
 
executed only using api_key belonging to user with admin 
 
rights or regular user that have at least read access to repository.
 

	
 

	
 
INPUT::
 
@@ -555,29 +593,40 @@ OUTPUT::
 
    id : <id_given_in_input>
 
    result: None if repository does not exist or
 
            {
 
                "repo_id" :     "<repo_id>",
 
                "repo_name" :   "<reponame>"
 
                "repo_type" :   "<repo_type>",
 
                "clone_uri" :   "<clone_uri>",
 
                "private": :    "<bool>",
 
                "created_on" :  "<datetimecreated>",                
 
                "description" : "<description>",
 
                "landing_rev":  "<landing_rev>",
 
                "owner":        "<repo_owner>",
 
                "fork_of":  "<name_of_fork_parent>",
 
                "repo_id" :          "<repo_id>",
 
                "repo_name" :        "<reponame>"
 
                "repo_type" :        "<repo_type>",
 
                "clone_uri" :        "<clone_uri>",
 
                "enable_downloads":  "<bool>",
 
                "enable_locking":    "<bool>",
 
                "enable_statistics": "<bool>",                
 
                "private":           "<bool>",
 
                "created_on" :       "<date_time_created>",                
 
                "description" :      "<description>",
 
                "landing_rev":       "<landing_rev>",
 
                "last_changeset":    {
 
                                       "author":   "<full_author>",
 
                                       "date":     "<date_time_of_commit>",
 
                                       "message":  "<commit_message>",
 
                                       "raw_id":   "<raw_id>",
 
                                       "revision": "<numeric_revision>",
 
                                       "short_id": "<short_id>"
 
                                     }
 
                "owner":             "<repo_owner>",
 
                "fork_of":           "<name_of_fork_parent>",
 
                "members" :     [
 
                                  { 
 
                                    "type": "user",
 
                                    "user_id" :  "<user_id>",
 
                                    "username" : "<username>",
 
                                    "firstname": "<firstname>",
 
                                    "lastname" : "<lastname>",
 
                                    "email" :    "<email>",
 
                                    "emails":    "<list_of_all_additional_emails>",
 
                                    "active" :   "<bool>",
 
                                    "admin" :    "<bool>",
 
                                    "ldap_dn" :  "<ldap_dn>",
 
                                    "last_login": "<last_login>",
 
                                    "user_id" :    "<user_id>",
 
                                    "username" :   "<username>",
 
                                    "firstname":   "<firstname>",
 
                                    "lastname" :   "<lastname>",
 
                                    "email" :      "<email>",
 
                                    "emails":      "<list_of_all_additional_emails>",
 
                                    "active" :     "<bool>",
 
                                    "admin" :      "<bool>",
 
                                    "ldap_dn" :    "<ldap_dn>",
 
                                    "last_login":  "<last_login>",
 
                                    "permission" : "repository.(read|write|admin)"
 
                                  },
 
 
@@ -597,8 +646,9 @@ OUTPUT::
 
get_repos
 
---------
 

	
 
Lists all existing repositories. This command can be executed only using api_key
 
belonging to user with admin rights
 
Lists all existing repositories. This command can be executed only using 
 
api_key belonging to user with admin rights or regular user that have 
 
admin, write or read access to repository.
 

	
 

	
 
INPUT::
 
@@ -613,16 +663,19 @@ OUTPUT::
 
    id : <id_given_in_input>
 
    result: [
 
              {
 
                "repo_id" :     "<repo_id>",
 
                "repo_name" :   "<reponame>"
 
                "repo_type" :   "<repo_type>",
 
                "clone_uri" :   "<clone_uri>",
 
                "private": :    "<bool>",
 
                "created_on" :  "<datetimecreated>",                
 
                "description" : "<description>",
 
                "landing_rev":  "<landing_rev>",
 
                "owner":        "<repo_owner>",
 
                "fork_of":  "<name_of_fork_parent>",
 
                "repo_id" :          "<repo_id>",
 
                "repo_name" :        "<reponame>"
 
                "repo_type" :        "<repo_type>",
 
                "clone_uri" :        "<clone_uri>",
 
                "private": :         "<bool>",
 
                "created_on" :       "<datetimecreated>",                
 
                "description" :      "<description>",
 
                "landing_rev":       "<landing_rev>",
 
                "owner":             "<repo_owner>",
 
                "fork_of":           "<name_of_fork_parent>",
 
                "enable_downloads":  "<bool>",
 
                "enable_locking":    "<bool>",
 
                "enable_statistics": "<bool>",                   
 
              },
 
 
            ]
 
@@ -666,11 +719,12 @@ OUTPUT::
 
create_repo
 
-----------
 

	
 
Creates a repository. This command can be executed only using api_key
 
belonging to user with admin rights.
 
If repository name contains "/", all needed repository groups will be created.
 
For example "foo/bar/baz" will create groups "foo", "bar" (with "foo" as parent),
 
and create "baz" repository with "bar" as group.
 
Creates a repository. If repository name contains "/", all needed repository
 
groups will be created. For example "foo/bar/baz" will create groups 
 
"foo", "bar" (with "foo" as parent), and create "baz" repository with 
 
"bar" as group. This command can be executed only using api_key belonging to user with admin 
 
rights or regular user that have create repository permission. Regular users
 
cannot specify owner parameter
 

	
 

	
 
INPUT::
 
@@ -679,13 +733,16 @@ INPUT::
 
    api_key : "<api_key>"
 
    method :  "create_repo"
 
    args:     {
 
                "repo_name" :   "<reponame>",
 
                "owner" :       "<onwer_name_or_id>",
 
                "repo_type" :   "<repo_type>",
 
                "description" : "<description> = Optional('')",
 
                "private" :     "<bool> = Optional(False)",
 
                "clone_uri" :   "<clone_uri> = Optional(None)",
 
                "landing_rev" : "<landing_rev> = Optional('tip')",
 
                "repo_name" :        "<reponame>",
 
                "owner" :            "<onwer_name_or_id = Optional(=apiuser)>",
 
                "repo_type" :        "<repo_type> = Optional('hg')",
 
                "description" :      "<description> = Optional('')",
 
                "private" :          "<bool> = Optional(False)",
 
                "clone_uri" :        "<clone_uri> = Optional(None)",
 
                "landing_rev" :      "<landing_rev> = Optional('tip')",
 
                "enable_downloads":  "<bool> = Optional(False)",
 
                "enable_locking":    "<bool> = Optional(False)",
 
                "enable_statistics": "<bool> = Optional(False)",
 
              }
 

	
 
OUTPUT::
 
@@ -694,26 +751,65 @@ OUTPUT::
 
    result: {
 
              "msg": "Created new repository `<reponame>`",
 
              "repo": {
 
                "repo_id" :     "<repo_id>",
 
                "repo_name" :   "<reponame>"
 
                "repo_type" :   "<repo_type>",
 
                "clone_uri" :   "<clone_uri>",
 
                "private": :    "<bool>",
 
                "created_on" :  "<datetimecreated>",                
 
                "description" : "<description>",
 
                "landing_rev":  "<landing_rev>",
 
                "owner":        "<repo_owner>",
 
                "fork_of":  "<name_of_fork_parent>",
 
                "repo_id" :          "<repo_id>",
 
                "repo_name" :        "<reponame>"
 
                "repo_type" :        "<repo_type>",
 
                "clone_uri" :        "<clone_uri>",
 
                "private": :         "<bool>",
 
                "created_on" :       "<datetimecreated>",                
 
                "description" :      "<description>",
 
                "landing_rev":       "<landing_rev>",
 
                "owner":             "<username or user_id>",
 
                "fork_of":           "<name_of_fork_parent>",
 
                "enable_downloads":  "<bool>",
 
                "enable_locking":    "<bool>",
 
                "enable_statistics": "<bool>",                     
 
              },
 
            }
 
    error:  null
 

	
 

	
 
fork_repo
 
---------
 

	
 
Creates a fork of given repo. In case of using celery this will
 
immidiatelly return success message, while fork is going to be created
 
asynchronous. This command can be executed only using api_key belonging to
 
user with admin rights or regular user that have fork permission, and at least
 
read access to forking repository. Regular users cannot specify owner parameter.
 

	
 

	
 
INPUT::
 

	
 
    id : <id_for_response>
 
    api_key : "<api_key>"
 
    method :  "fork_repo"
 
    args:     {
 
                "repoid" :          "<reponame or repo_id>",
 
                "fork_name":        "<forkname>",
 
                "owner":            "<username or user_id = Optional(=apiuser)>",
 
                "description":      "<description>",
 
                "copy_permissions": "<bool>",
 
                "private":          "<bool>",
 
                "landing_rev":      "<landing_rev>"
 
                                
 
              }
 

	
 
OUTPUT::
 

	
 
    id : <id_given_in_input>
 
    result: {
 
              "msg": "Created fork of `<reponame>` as `<forkname>`",
 
              "success": true
 
            }
 
    error:  null
 

	
 

	
 
delete_repo
 
-----------
 

	
 
Deletes a repository. This command can be executed only using api_key
 
belonging to user with admin rights.
 
Deletes a repository. This command can be executed only using api_key belonging to user with admin 
 
rights or regular user that have admin access to repository.
 

	
 

	
 
INPUT::
docs/changelog.rst
Show inline comments
 
@@ -4,6 +4,38 @@
 
Changelog
 
=========
 

	
 
1.5.2 (**2013-01-14**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- IP restrictions for users. Each user can get a set of whitelist IP+mask for
 
  extra protection. Useful for buildbots etc.
 
- added full last changeset info to lightweight dashboard. lightweight dashboard
 
  is now fully functional replacement of original dashboard.
 
- implemented certain API calls for non-admin users.
 
- enabled all Markdown Extra plugins
 
- implemented #725 Pull Request View - Show origin repo URL
 
- show comments from pull requests into associated changesets
 

	
 
fixes
 
+++++
 

	
 
- update repoinfo script is more failsafe
 
- fixed #687  Lazy loaded tooltip bug with simultaneous ajax requests
 
- fixed #691: Notifications for pull requests: move link to top for better
 
  readability
 
- fixed #699: fix missing fork docs for API
 
- fixed #693 Opening changeset from pull request fails
 
- fixed #710 File view stripping empty lines from beginning and end of file
 
- fixed issues with getting repos by path on windows, caused GIT hooks to fail
 
- fixed issues with groups paginator on main dashboard
 
- improved fetch/pull command for git repos, now pulling all refs
 
- fixed issue #719 Journal revision ID tooltip AJAX query path is incorrect
 
  when running in a subdir
 
- fixed issue #702 API methods without arguments fail when "args":null
 
- set the status of changesets initially on pull request. Fixes issues #690 and #587
 

	
 
1.5.1 (**2012-12-13**)
 
----------------------
docs/installation.rst
Show inline comments
 
@@ -43,6 +43,10 @@ For installing RhodeCode i highly recomm
 
way many required by RhodeCode libraries will remain sandboxed from your main
 
python and making things less problematic when doing system python updates. 
 

	
 
Alternative very detailed installation instructions for Ubuntu Server with
 
celery, indexer and daemon scripts: https://gist.github.com/4546398
 

	
 

	
 
- Assuming you have installed virtualenv_ create a new virtual environment 
 
  using virtualenv command:: 
 

	
rhodecode/__init__.py
Show inline comments
 
@@ -26,7 +26,7 @@
 
import sys
 
import platform
 

	
 
VERSION = (1, 5, 1)
 
VERSION = (1, 5, 2)
 

	
 
try:
 
    from rhodecode.lib import get_current_revision
 
@@ -38,7 +38,7 @@ except ImportError:
 

	
 
__version__ = ('.'.join((str(each) for each in VERSION[:3])) +
 
               '.'.join(VERSION[3:]))
 
__dbversion__ = 9  # defines current db version for migrations
 
__dbversion__ = 10  # defines current db version for migrations
 
__platform__ = platform.system()
 
__license__ = 'GPLv3'
 
__py_version__ = sys.version_info
rhodecode/config/routing.py
Show inline comments
 
@@ -222,6 +222,10 @@ def make_map(config):
 
                  action="add_email", conditions=dict(method=["PUT"]))
 
        m.connect("user_emails_delete", "/users_emails/{id}",
 
                  action="delete_email", conditions=dict(method=["DELETE"]))
 
        m.connect("user_ips", "/users_ips/{id}",
 
                  action="add_ip", conditions=dict(method=["PUT"]))
 
        m.connect("user_ips_delete", "/users_ips/{id}",
 
                  action="delete_ip", conditions=dict(method=["DELETE"]))
 

	
 
    #ADMIN USERS GROUPS REST ROUTES
 
    with rmap.submapper(path_prefix=ADMIN_PREFIX,
 
@@ -355,8 +359,6 @@ def make_map(config):
 
        m.connect('api', '/api')
 

	
 
    #USER JOURNAL
 
    rmap.connect('journal_my_repos', '%s/journal_my_repos' % ADMIN_PREFIX,
 
                 controller='journal', action='index_my_repos')
 
    rmap.connect('journal', '%s/journal' % ADMIN_PREFIX,
 
                 controller='journal', action='index')
 
    rmap.connect('journal_rss', '%s/journal/rss' % ADMIN_PREFIX,
rhodecode/controllers/admin/notifications.py
Show inline comments
 
@@ -110,8 +110,8 @@ class NotificationsController(BaseContro
 
        # url('notification', notification_id=ID)
 
        try:
 
            no = Notification.get(notification_id)
 
            owner = lambda: (no.notifications_to_users.user.user_id
 
                             == c.rhodecode_user.user_id)
 
            owner = all(un.user.user_id == c.rhodecode_user.user_id
 
                        for un in no.notifications_to_users)
 
            if h.HasPermissionAny('hg.admin')() or owner:
 
                    NotificationModel().mark_read(c.rhodecode_user.user_id, no)
 
                    Session().commit()
 
@@ -132,8 +132,8 @@ class NotificationsController(BaseContro
 

	
 
        try:
 
            no = Notification.get(notification_id)
 
            owner = lambda: (no.notifications_to_users.user.user_id
 
                             == c.rhodecode_user.user_id)
 
            owner = all(un.user.user_id == c.rhodecode_user.user_id
 
                        for un in no.notifications_to_users)
 
            if h.HasPermissionAny('hg.admin')() or owner:
 
                    NotificationModel().delete(c.rhodecode_user.user_id, no)
 
                    Session().commit()
 
@@ -149,8 +149,8 @@ class NotificationsController(BaseContro
 
        c.user = self.rhodecode_user
 
        no = Notification.get(notification_id)
 

	
 
        owner = lambda: (no.notifications_to_users.user.user_id
 
                         == c.user.user_id)
 
        owner = all(un.user.user_id == c.rhodecode_user.user_id
 
                    for un in no.notifications_to_users)
 
        if no and (h.HasPermissionAny('hg.admin', 'repository.admin')() or owner):
 
            unotification = NotificationModel()\
 
                            .get_user_notification(c.user.user_id, no)
rhodecode/controllers/admin/permissions.py
Show inline comments
 
@@ -33,11 +33,12 @@ from pylons.controllers.util import abor
 
from pylons.i18n.translation import _
 

	
 
from rhodecode.lib import helpers as h
 
from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
 
from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator,\
 
    AuthUser
 
from rhodecode.lib.base import BaseController, render
 
from rhodecode.model.forms import DefaultPermissionsForm
 
from rhodecode.model.permission import PermissionModel
 
from rhodecode.model.db import User
 
from rhodecode.model.db import User, UserIpMap
 
from rhodecode.model.meta import Session
 

	
 
log = logging.getLogger(__name__)
 
@@ -105,36 +106,41 @@ class PermissionsController(BaseControll
 
        #    h.form(url('permission', id=ID),
 
        #           method='put')
 
        # url('permission', id=ID)
 

	
 
        permission_model = PermissionModel()
 
        if id == 'default':
 
            c.user = default_user = User.get_by_username('default')
 
            c.perm_user = AuthUser(user_id=default_user.user_id)
 
            c.user_ip_map = UserIpMap.query()\
 
                            .filter(UserIpMap.user == default_user).all()
 
            permission_model = PermissionModel()
 

	
 
        _form = DefaultPermissionsForm([x[0] for x in self.repo_perms_choices],
 
                                       [x[0] for x in self.group_perms_choices],
 
                                       [x[0] for x in self.register_choices],
 
                                       [x[0] for x in self.create_choices],
 
                                       [x[0] for x in self.fork_choices])()
 
            _form = DefaultPermissionsForm(
 
                    [x[0] for x in self.repo_perms_choices],
 
                    [x[0] for x in self.group_perms_choices],
 
                    [x[0] for x in self.register_choices],
 
                    [x[0] for x in self.create_choices],
 
                    [x[0] for x in self.fork_choices])()
 

	
 
        try:
 
            form_result = _form.to_python(dict(request.POST))
 
            form_result.update({'perm_user_name': id})
 
            permission_model.update(form_result)
 
            Session().commit()
 
            h.flash(_('Default permissions updated successfully'),
 
                    category='success')
 
            try:
 
                form_result = _form.to_python(dict(request.POST))
 
                form_result.update({'perm_user_name': id})
 
                permission_model.update(form_result)
 
                Session().commit()
 
                h.flash(_('Default permissions updated successfully'),
 
                        category='success')
 

	
 
        except formencode.Invalid, errors:
 
            defaults = errors.value
 
            except formencode.Invalid, errors:
 
                defaults = errors.value
 

	
 
            return htmlfill.render(
 
                render('admin/permissions/permissions.html'),
 
                defaults=defaults,
 
                errors=errors.error_dict or {},
 
                prefix_error=False,
 
                encoding="UTF-8")
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            h.flash(_('error occurred during update of permissions'),
 
                    category='error')
 
                return htmlfill.render(
 
                    render('admin/permissions/permissions.html'),
 
                    defaults=defaults,
 
                    errors=errors.error_dict or {},
 
                    prefix_error=False,
 
                    encoding="UTF-8")
 
            except Exception:
 
                log.error(traceback.format_exc())
 
                h.flash(_('error occurred during update of permissions'),
 
                        category='error')
 

	
 
        return redirect(url('edit_permission', id=id))
 

	
 
@@ -157,10 +163,11 @@ class PermissionsController(BaseControll
 

	
 
        #this form can only edit default user permissions
 
        if id == 'default':
 
            default_user = User.get_by_username('default')
 
            defaults = {'_method': 'put',
 
                        'anonymous': default_user.active}
 

	
 
            c.user = default_user = User.get_by_username('default')
 
            defaults = {'anonymous': default_user.active}
 
            c.perm_user = AuthUser(user_id=default_user.user_id)
 
            c.user_ip_map = UserIpMap.query()\
 
                            .filter(UserIpMap.user == default_user).all()
 
            for p in default_user.user_perms:
 
                if p.permission.permission_name.startswith('repository.'):
 
                    defaults['default_repo_perm'] = p.permission.permission_name
 
@@ -181,7 +188,7 @@ class PermissionsController(BaseControll
 
                render('admin/permissions/permissions.html'),
 
                defaults=defaults,
 
                encoding="UTF-8",
 
                force_defaults=True,
 
                force_defaults=False
 
            )
 
        else:
 
            return redirect(url('admin_home'))
rhodecode/controllers/admin/repos.py
Show inline comments
 
@@ -135,40 +135,10 @@ class ReposController(BaseController):
 
                        .order_by(func.lower(Repository.repo_name))\
 
                        .all()
 

	
 
        repos_data = []
 
        total_records = len(c.repos_list)
 

	
 
        _tmpl_lookup = rhodecode.CONFIG['pylons.app_globals'].mako_lookup
 
        template = _tmpl_lookup.get_template('data_table/_dt_elements.html')
 

	
 
        quick_menu = lambda repo_name: (template.get_def("quick_menu")
 
                                        .render(repo_name, _=_, h=h, c=c))
 
        repo_lnk = lambda name, rtype, private, fork_of: (
 
            template.get_def("repo_name")
 
            .render(name, rtype, private, fork_of, short_name=False,
 
                    admin=True, _=_, h=h, c=c))
 

	
 
        repo_actions = lambda repo_name: (template.get_def("repo_actions")
 
                                       .render(repo_name, _=_, h=h, c=c))
 

	
 
        for repo in c.repos_list:
 
            repos_data.append({
 
                "menu": quick_menu(repo.repo_name),
 
                "raw_name": repo.repo_name.lower(),
 
                "name": repo_lnk(repo.repo_name, repo.repo_type,
 
                                 repo.private, repo.fork),
 
                "desc": repo.description,
 
                "owner": repo.user.username,
 
                "action": repo_actions(repo.repo_name),
 
            })
 

	
 
        c.data = json.dumps({
 
            "totalRecords": total_records,
 
            "startIndex": 0,
 
            "sort": "name",
 
            "dir": "asc",
 
            "records": repos_data
 
        })
 
        repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list,
 
                                                   admin=True)
 
        #json used to render the grid
 
        c.data = json.dumps(repos_data)
 

	
 
        return render('admin/repos/repos.html')
 

	
rhodecode/controllers/admin/repos_groups.py
Show inline comments
 
@@ -295,54 +295,18 @@ class ReposGroupsController(BaseControll
 
        c.groups = self.scm_model.get_repos_groups(groups)
 

	
 
        if c.visual.lightweight_dashboard is False:
 
            c.cached_repo_list = self.scm_model.get_repos(all_repos=gr_filter)
 

	
 
            c.repos_list = c.cached_repo_list
 
            c.repos_list = self.scm_model.get_repos(all_repos=gr_filter)
 
        ## lightweight version of dashboard
 
        else:
 
            c.repos_list = Repository.query()\
 
                            .filter(Repository.group_id == id)\
 
                            .order_by(func.lower(Repository.repo_name))\
 
                            .all()
 
            repos_data = []
 
            total_records = len(c.repos_list)
 

	
 
            _tmpl_lookup = rhodecode.CONFIG['pylons.app_globals'].mako_lookup
 
            template = _tmpl_lookup.get_template('data_table/_dt_elements.html')
 

	
 
            quick_menu = lambda repo_name: (template.get_def("quick_menu")
 
                                            .render(repo_name, _=_, h=h, c=c))
 
            repo_lnk = lambda name, rtype, private, fork_of: (
 
                template.get_def("repo_name")
 
                .render(name, rtype, private, fork_of, short_name=False,
 
                        admin=False, _=_, h=h, c=c))
 
            last_change = lambda last_change:  (template.get_def("last_change")
 
                                           .render(last_change, _=_, h=h, c=c))
 
            rss_lnk = lambda repo_name: (template.get_def("rss")
 
                                           .render(repo_name, _=_, h=h, c=c))
 
            atom_lnk = lambda repo_name: (template.get_def("atom")
 
                                           .render(repo_name, _=_, h=h, c=c))
 

	
 
            for repo in c.repos_list:
 
                repos_data.append({
 
                    "menu": quick_menu(repo.repo_name),
 
                    "raw_name": repo.repo_name.lower(),
 
                    "name": repo_lnk(repo.repo_name, repo.repo_type,
 
                                     repo.private, repo.fork),
 
                    "last_change": last_change(repo.last_db_change),
 
                    "desc": repo.description,
 
                    "owner": h.person(repo.user.username),
 
                    "rss": rss_lnk(repo.repo_name),
 
                    "atom": atom_lnk(repo.repo_name),
 
                })
 

	
 
            c.data = json.dumps({
 
                "totalRecords": total_records,
 
                "startIndex": 0,
 
                "sort": "name",
 
                "dir": "asc",
 
                "records": repos_data
 
            })
 
            repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list,
 
                                                       admin=False)
 
            #json used to render the grid
 
            c.data = json.dumps(repos_data)
 

	
 
        return render('admin/repos_groups/repos_groups.html')
 

	
rhodecode/controllers/admin/settings.py
Show inline comments
 
@@ -48,11 +48,12 @@ from rhodecode.model.forms import UserFo
 
    ApplicationUiSettingsForm, ApplicationVisualisationForm
 
from rhodecode.model.scm import ScmModel
 
from rhodecode.model.user import UserModel
 
from rhodecode.model.repo import RepoModel
 
from rhodecode.model.db import User
 
from rhodecode.model.notification import EmailNotificationModel
 
from rhodecode.model.meta import Session
 
from rhodecode.lib.utils2 import str2bool
 

	
 
from rhodecode.lib.utils2 import str2bool, safe_unicode
 
from rhodecode.lib.compat import json
 
log = logging.getLogger(__name__)
 

	
 

	
 
@@ -119,10 +120,11 @@ class SettingsController(BaseController)
 
                invalidate_cache('get_repo_cached_%s' % repo_name)
 

	
 
            added, removed = repo2db_mapper(initial, rm_obsolete)
 

	
 
            h.flash(_('Repositories successfully'
 
                      ' rescanned added: %s,removed: %s') % (added, removed),
 
                      category='success')
 
            _repr = lambda l: ', '.join(map(safe_unicode, l)) or '-'
 
            h.flash(_('Repositories successfully '
 
                      'rescanned added: %s ; removed: %s') %
 
                    (_repr(added), _repr(removed)),
 
                    category='success')
 

	
 
        if setting_id == 'whoosh':
 
            repo_location = self._get_hg_ui_settings()['paths_root_path']
 
@@ -336,7 +338,7 @@ class SettingsController(BaseController)
 
                .get_email_tmpl(EmailNotificationModel.TYPE_DEFAULT,
 
                                body=test_email_body)
 

	
 
            recipients = [test_email] if [test_email] else None
 
            recipients = [test_email] if test_email else None
 

	
 
            run_task(tasks.send_email, recipients, test_email_subj,
 
                     test_email_body, test_email_html_body)
 
@@ -381,6 +383,17 @@ class SettingsController(BaseController)
 
            force_defaults=False
 
        )
 

	
 
    def _load_my_repos_data(self):
 
        repos_list = Session().query(Repository)\
 
                     .filter(Repository.user_id ==
 
                             self.rhodecode_user.user_id)\
 
                     .order_by(func.lower(Repository.repo_name)).all()
 

	
 
        repos_data = RepoModel().get_repos_as_dict(repos_list=repos_list,
 
                                                   admin=True)
 
        #json used to render the grid
 
        return json.dumps(repos_data)
 

	
 
    @NotAnonymous()
 
    def my_account(self):
 
        """
 
@@ -389,17 +402,16 @@ class SettingsController(BaseController)
 
        # url('admin_settings_my_account')
 

	
 
        c.user = User.get(self.rhodecode_user.user_id)
 
        all_repos = Session().query(Repository)\
 
                     .filter(Repository.user_id == c.user.user_id)\
 
                     .order_by(func.lower(Repository.repo_name)).all()
 

	
 
        c.user_repos = ScmModel().get_repos(all_repos)
 
        c.ldap_dn = c.user.ldap_dn
 

	
 
        if c.user.username == 'default':
 
            h.flash(_("You can't edit this user since it's"
 
              " crucial for entire application"), category='warning')
 
            return redirect(url('users'))
 

	
 
        #json used to render the grid
 
        c.data = self._load_my_repos_data()
 

	
 
        defaults = c.user.get_dict()
 

	
 
        c.form = htmlfill.render(
 
@@ -420,19 +432,25 @@ class SettingsController(BaseController)
 
        #           method='put')
 
        # url('admin_settings_my_account_update', id=ID)
 
        uid = self.rhodecode_user.user_id
 
        c.user = User.get(self.rhodecode_user.user_id)
 
        c.ldap_dn = c.user.ldap_dn
 
        email = self.rhodecode_user.email
 
        _form = UserForm(edit=True,
 
                         old_data={'user_id': uid, 'email': email})()
 
        form_result = {}
 
        try:
 
            form_result = _form.to_python(dict(request.POST))
 
            UserModel().update_my_account(uid, form_result)
 
            skip_attrs = ['admin', 'active']  # skip attr for my account
 
            if c.ldap_dn:
 
                #forbid updating username for ldap accounts
 
                skip_attrs.append('username')
 
            UserModel().update(uid, form_result, skip_attrs=skip_attrs)
 
            h.flash(_('Your account was updated successfully'),
 
                    category='success')
 
            Session().commit()
 
        except formencode.Invalid, errors:
 
            c.user = User.get(self.rhodecode_user.user_id)
 

	
 
            #json used to render the grid
 
            c.data = self._load_my_repos_data()
 
            c.form = htmlfill.render(
 
                render('admin/users/user_edit_my_account_form.html'),
 
                defaults=errors.value,
 
@@ -448,23 +466,14 @@ class SettingsController(BaseController)
 
        return redirect(url('my_account'))
 

	
 
    @NotAnonymous()
 
    def my_account_my_repos(self):
 
        all_repos = Session().query(Repository)\
 
            .filter(Repository.user_id == self.rhodecode_user.user_id)\
 
            .order_by(func.lower(Repository.repo_name))\
 
            .all()
 
        c.user_repos = ScmModel().get_repos(all_repos)
 
        return render('admin/users/user_edit_my_account_repos.html')
 

	
 
    @NotAnonymous()
 
    def my_account_my_pullrequests(self):
 
        c.my_pull_requests = PullRequest.query()\
 
                                .filter(PullRequest.user_id==
 
                                .filter(PullRequest.user_id ==
 
                                        self.rhodecode_user.user_id)\
 
                                .all()
 
        c.participate_in_pull_requests = \
 
            [x.pull_request for x in PullRequestReviewers.query()\
 
                                    .filter(PullRequestReviewers.user_id==
 
                                    .filter(PullRequestReviewers.user_id ==
 
                                            self.rhodecode_user.user_id)\
 
                                    .all()]
 
        return render('admin/users/user_edit_my_account_pullrequests.html')
rhodecode/controllers/admin/users.py
Show inline comments
 
@@ -41,7 +41,7 @@ from rhodecode.lib.auth import LoginRequ
 
    AuthUser
 
from rhodecode.lib.base import BaseController, render
 

	
 
from rhodecode.model.db import User, UserEmailMap
 
from rhodecode.model.db import User, UserEmailMap, UserIpMap
 
from rhodecode.model.forms import UserForm
 
from rhodecode.model.user import UserModel
 
from rhodecode.model.meta import Session
 
@@ -159,7 +159,7 @@ class UsersController(BaseController):
 
        user_model = UserModel()
 
        c.user = user_model.get(id)
 
        c.ldap_dn = c.user.ldap_dn
 
        c.perm_user = AuthUser(user_id=id)
 
        c.perm_user = AuthUser(user_id=id, ip_addr=self.ip_addr)
 
        _form = UserForm(edit=True, old_data={'user_id': id,
 
                                              'email': c.user.email})()
 
        form_result = {}
 
@@ -178,6 +178,8 @@ class UsersController(BaseController):
 
        except formencode.Invalid, errors:
 
            c.user_email_map = UserEmailMap.query()\
 
                            .filter(UserEmailMap.user == c.user).all()
 
            c.user_ip_map = UserIpMap.query()\
 
                            .filter(UserIpMap.user == c.user).all()
 
            defaults = errors.value
 
            e = errors.error_dict or {}
 
            defaults.update({
 
@@ -231,12 +233,14 @@ class UsersController(BaseController):
 
            h.flash(_("You can't edit this user"), category='warning')
 
            return redirect(url('users'))
 

	
 
        c.perm_user = AuthUser(user_id=id)
 
        c.perm_user = AuthUser(user_id=id, ip_addr=self.ip_addr)
 
        c.user.permissions = {}
 
        c.granted_permissions = UserModel().fill_perms(c.user)\
 
            .permissions['global']
 
        c.user_email_map = UserEmailMap.query()\
 
                        .filter(UserEmailMap.user == c.user).all()
 
        c.user_ip_map = UserIpMap.query()\
 
                        .filter(UserIpMap.user == c.user).all()
 
        user_model = UserModel()
 
        c.ldap_dn = c.user.ldap_dn
 
        defaults = c.user.get_dict()
 
@@ -299,7 +303,6 @@ class UsersController(BaseController):
 
        """POST /user_emails:Add an existing item"""
 
        # url('user_emails', id=ID, method='put')
 

	
 
        #TODO: validation and form !!!
 
        email = request.POST.get('new_email')
 
        user_model = UserModel()
 

	
 
@@ -324,3 +327,36 @@ class UsersController(BaseController):
 
        Session().commit()
 
        h.flash(_("Removed email from user"), category='success')
 
        return redirect(url('edit_user', id=id))
 

	
 
    def add_ip(self, id):
 
        """POST /user_ips:Add an existing item"""
 
        # url('user_ips', id=ID, method='put')
 

	
 
        ip = request.POST.get('new_ip')
 
        user_model = UserModel()
 

	
 
        try:
 
            user_model.add_extra_ip(id, ip)
 
            Session().commit()
 
            h.flash(_("Added ip %s to user") % ip, category='success')
 
        except formencode.Invalid, error:
 
            msg = error.error_dict['ip']
 
            h.flash(msg, category='error')
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            h.flash(_('An error occurred during ip saving'),
 
                    category='error')
 
        if 'default_user' in request.POST:
 
            return redirect(url('edit_permission', id='default'))
 
        return redirect(url('edit_user', id=id))
 

	
 
    def delete_ip(self, id):
 
        """DELETE /user_ips_delete/id: Delete an existing item"""
 
        # url('user_ips_delete', id=ID, method='delete')
 
        user_model = UserModel()
 
        user_model.delete_extra_ip(id, request.POST.get('del_ip'))
 
        Session().commit()
 
        h.flash(_("Removed ip from user"), category='success')
 
        if 'default_user' in request.POST:
 
            return redirect(url('edit_permission', id='default'))
 
        return redirect(url('edit_user', id=id))
rhodecode/controllers/api/__init__.py
Show inline comments
 
@@ -32,17 +32,15 @@ import urllib
 
import traceback
 
import time
 

	
 
from rhodecode.lib.compat import izip_longest, json
 

	
 
from paste.response import replace_header
 

	
 
from pylons.controllers import WSGIController
 

	
 

	
 
from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError, \
 
HTTPBadRequest, HTTPError
 

	
 
from rhodecode.model.db import User
 
from rhodecode.model import meta
 
from rhodecode.lib.compat import izip_longest, json
 
from rhodecode.lib.auth import AuthUser
 
from rhodecode.lib.base import _get_ip_addr, _get_access_path
 
from rhodecode.lib.utils2 import safe_unicode
 
@@ -86,6 +84,9 @@ class JSONRPCController(WSGIController):
 

	
 
     """
 

	
 
    def _get_ip_addr(self, environ):
 
        return _get_ip_addr(environ)
 

	
 
    def _get_method_args(self):
 
        """
 
        Return `self._rpc_args` to dispatched controller method
 
@@ -99,6 +100,7 @@ class JSONRPCController(WSGIController):
 
        controller and if it exists, dispatch to it.
 
        """
 
        start = time.time()
 
        ip_addr = self.ip_addr = self._get_ip_addr(environ)
 
        self._req_id = None
 
        if 'CONTENT_LENGTH' not in environ:
 
            log.debug("No Content-Length")
 
@@ -130,6 +132,9 @@ class JSONRPCController(WSGIController):
 
            self._req_id = json_body['id']
 
            self._req_method = json_body['method']
 
            self._request_params = json_body['args']
 
            if not isinstance(self._request_params, dict):
 
                self._request_params = {}
 

	
 
            log.debug(
 
                'method: %s, params: %s' % (self._req_method,
 
                                            self._request_params)
 
@@ -144,7 +149,15 @@ class JSONRPCController(WSGIController):
 
            if u is None:
 
                return jsonrpc_error(retid=self._req_id,
 
                                     message='Invalid API KEY')
 
            auth_u = AuthUser(u.user_id, self._req_api_key)
 

	
 
            #check if we are allowed to use this IP
 
            auth_u = AuthUser(u.user_id, self._req_api_key, ip_addr=ip_addr)
 
            if not auth_u.ip_allowed:
 
                return jsonrpc_error(retid=self._req_id,
 
                        message='request from IP:%s not allowed' % (ip_addr))
 
            else:
 
                log.info('Access for IP:%s allowed' % (ip_addr))
 

	
 
        except Exception, e:
 
            return jsonrpc_error(retid=self._req_id,
 
                                 message='Invalid API KEY')
 
@@ -202,6 +215,7 @@ class JSONRPCController(WSGIController):
 
                )
 

	
 
        self._rpc_args = {USER_SESSION_ATTR: u}
 

	
 
        self._rpc_args.update(self._request_params)
 

	
 
        self._rpc_args['action'] = self._req_method
rhodecode/controllers/api/api.py
Show inline comments
 
@@ -27,10 +27,12 @@
 

	
 
import traceback
 
import logging
 
from pylons.controllers.util import abort
 

	
 
from rhodecode.controllers.api import JSONRPCController, JSONRPCError
 
from rhodecode.lib.auth import HasPermissionAllDecorator, \
 
    HasPermissionAnyDecorator, PasswordGenerator, AuthUser
 
from rhodecode.lib.auth import PasswordGenerator, AuthUser, \
 
    HasPermissionAllDecorator, HasPermissionAnyDecorator, \
 
    HasPermissionAnyApi, HasRepoPermissionAnyApi
 
from rhodecode.lib.utils import map_groups, repo2db_mapper
 
from rhodecode.model.meta import Session
 
from rhodecode.model.scm import ScmModel
 
@@ -38,11 +40,27 @@ from rhodecode.model.repo import RepoMod
 
from rhodecode.model.user import UserModel
 
from rhodecode.model.users_group import UsersGroupModel
 
from rhodecode.model.permission import PermissionModel
 
from rhodecode.model.db import Repository
 
from rhodecode.model.db import Repository, RhodeCodeSetting, UserIpMap
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
class OptionalAttr(object):
 
    """
 
    Special Optional Option that defines other attribute
 
    """
 
    def __init__(self, attr_name):
 
        self.attr_name = attr_name
 

	
 
    def __repr__(self):
 
        return '<OptionalAttr:%s>' % self.attr_name
 

	
 
    def __call__(self):
 
        return self
 
#alias
 
OAttr = OptionalAttr
 

	
 

	
 
class Optional(object):
 
    """
 
    Defines an optional parameter::
 
@@ -184,10 +202,11 @@ class ApiController(JSONRPCController):
 
                'Error occurred during rescan repositories action'
 
            )
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def lock(self, apiuser, repoid, userid, locked):
 
    def lock(self, apiuser, repoid, locked, userid=Optional(OAttr('apiuser'))):
 
        """
 
        Set locking state on particular repository by given user
 
        Set locking state on particular repository by given user, if
 
        this command is runned by non-admin account userid is set to user
 
        who is calling this method
 

	
 
        :param apiuser:
 
        :param repoid:
 
@@ -195,6 +214,22 @@ class ApiController(JSONRPCController):
 
        :param locked:
 
        """
 
        repo = get_repo_or_error(repoid)
 
        if HasPermissionAnyApi('hg.admin')(user=apiuser):
 
            pass
 
        elif HasRepoPermissionAnyApi('repository.admin',
 
                                     'repository.write')(user=apiuser,
 
                                                         repo_name=repo.repo_name):
 
            #make sure normal user does not pass someone else userid,
 
            #he is not allowed to do that
 
            if not isinstance(userid, Optional) and userid != apiuser.user_id:
 
                raise JSONRPCError(
 
                    'userid is not the same as your user'
 
                )
 
        else:
 
            raise JSONRPCError('repository `%s` does not exist' % (repoid))
 

	
 
        if isinstance(userid, Optional):
 
            userid = apiuser.user_id
 
        user = get_user_or_error(userid)
 
        locked = bool(locked)
 
        try:
 
@@ -212,13 +247,38 @@ class ApiController(JSONRPCController):
 
            )
 

	
 
    @HasPermissionAllDecorator('hg.admin')
 
    def get_user(self, apiuser, userid):
 
        """"
 
        Get a user by username
 
    def show_ip(self, apiuser, userid):
 
        """
 
        Shows IP address as seen from RhodeCode server, together with all
 
        defined IP addresses for given user
 

	
 
        :param apiuser:
 
        :param userid:
 
        """
 
        user = get_user_or_error(userid)
 
        ips = UserIpMap.query().filter(UserIpMap.user == user).all()
 
        return dict(
 
            ip_addr_server=self.ip_addr,
 
            user_ips=ips
 
        )
 

	
 
    def get_user(self, apiuser, userid=Optional(OAttr('apiuser'))):
 
        """"
 
        Get a user by username, or userid, if userid is given
 

	
 
        :param apiuser:
 
        :param userid:
 
        """
 
        if HasPermissionAnyApi('hg.admin')(user=apiuser) is False:
 
            #make sure normal user does not pass someone else userid,
 
            #he is not allowed to do that
 
            if not isinstance(userid, Optional) and userid != apiuser.user_id:
 
                raise JSONRPCError(
 
                    'userid is not the same as your user'
 
                )
 

	
 
        if isinstance(userid, Optional):
 
            userid = apiuser.user_id
 

	
 
        user = get_user_or_error(userid)
 
        data = user.get_api_data()
 
@@ -479,7 +539,6 @@ class ApiController(JSONRPCController):
 
                    )
 
            )
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def get_repo(self, apiuser, repoid):
 
        """"
 
        Get repository by name
 
@@ -489,6 +548,12 @@ class ApiController(JSONRPCController):
 
        """
 
        repo = get_repo_or_error(repoid)
 

	
 
        if HasPermissionAnyApi('hg.admin')(user=apiuser) is False:
 
            # check if we have admin permission for this repo !
 
            if HasRepoPermissionAnyApi('repository.admin')(user=apiuser,
 
                                            repo_name=repo.repo_name) is False:
 
                raise JSONRPCError('repository `%s` does not exist' % (repoid))
 

	
 
        members = []
 
        for user in repo.repo_to_perm:
 
            perm = user.permission.permission_name
 
@@ -510,20 +575,23 @@ class ApiController(JSONRPCController):
 
        data['members'] = members
 
        return data
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def get_repos(self, apiuser):
 
        """"
 
        Get all repositories
 

	
 
        :param apiuser:
 
        """
 
        result = []
 
        if HasPermissionAnyApi('hg.admin')(user=apiuser) is False:
 
            repos = RepoModel().get_all_user_repos(user=apiuser)
 
        else:
 
            repos = RepoModel().get_all()
 

	
 
        result = []
 
        for repo in RepoModel().get_all():
 
        for repo in repos:
 
            result.append(repo.get_api_data())
 
        return result
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    @HasPermissionAllDecorator('hg.admin')
 
    def get_repo_nodes(self, apiuser, repoid, revision, root_path,
 
                       ret_type='all'):
 
        """
 
@@ -556,12 +624,16 @@ class ApiController(JSONRPCController):
 
            )
 

	
 
    @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository')
 
    def create_repo(self, apiuser, repo_name, owner, repo_type,
 
    def create_repo(self, apiuser, repo_name, owner=Optional(OAttr('apiuser')),
 
                    repo_type=Optional('hg'),
 
                    description=Optional(''), private=Optional(False),
 
                    clone_uri=Optional(None), landing_rev=Optional('tip')):
 
                    clone_uri=Optional(None), landing_rev=Optional('tip'),
 
                    enable_statistics=Optional(False),
 
                    enable_locking=Optional(False),
 
                    enable_downloads=Optional(False)):
 
        """
 
        Create repository, if clone_url is given it makes a remote clone
 
        if repo_name is withina  group name the groups will be created
 
        if repo_name is within a group name the groups will be created
 
        automatically if they aren't present
 

	
 
        :param apiuser:
 
@@ -573,12 +645,32 @@ class ApiController(JSONRPCController):
 
        :param clone_uri:
 
        :param landing_rev:
 
        """
 
        if HasPermissionAnyApi('hg.admin')(user=apiuser) is False:
 
            if not isinstance(owner, Optional):
 
                #forbid setting owner for non-admins
 
                raise JSONRPCError(
 
                    'Only RhodeCode admin can specify `owner` param'
 
                )
 
        if isinstance(owner, Optional):
 
            owner = apiuser.user_id
 

	
 
        owner = get_user_or_error(owner)
 

	
 
        if RepoModel().get_by_repo_name(repo_name):
 
            raise JSONRPCError("repo `%s` already exist" % repo_name)
 

	
 
        private = Optional.extract(private)
 
        defs = RhodeCodeSetting.get_default_repo_settings(strip_prefix=True)
 
        if isinstance(private, Optional):
 
            private = defs.get('repo_private') or Optional.extract(private)
 
        if isinstance(repo_type, Optional):
 
            repo_type = defs.get('repo_type')
 
        if isinstance(enable_statistics, Optional):
 
            enable_statistics = defs.get('repo_enable_statistics')
 
        if isinstance(enable_locking, Optional):
 
            enable_locking = defs.get('repo_enable_locking')
 
        if isinstance(enable_downloads, Optional):
 
            enable_downloads = defs.get('repo_enable_downloads')
 

	
 
        clone_uri = Optional.extract(clone_uri)
 
        description = Optional.extract(description)
 
        landing_rev = Optional.extract(landing_rev)
 
@@ -596,32 +688,51 @@ class ApiController(JSONRPCController):
 
                clone_uri=clone_uri,
 
                repos_group=group,
 
                landing_rev=landing_rev,
 
                enable_statistics=enable_statistics,
 
                enable_downloads=enable_downloads,
 
                enable_locking=enable_locking
 
            )
 

	
 
            Session().commit()
 

	
 
            return dict(
 
                msg="Created new repository `%s`" % (repo.repo_name),
 
                repo=repo.get_api_data()
 
            )
 

	
 
        except Exception:
 
            log.error(traceback.format_exc())
 
            raise JSONRPCError('failed to create repository `%s`' % repo_name)
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def fork_repo(self, apiuser, repoid, fork_name, owner,
 
    @HasPermissionAnyDecorator('hg.admin', 'hg.fork.repository')
 
    def fork_repo(self, apiuser, repoid, fork_name, owner=Optional(OAttr('apiuser')),
 
                  description=Optional(''), copy_permissions=Optional(False),
 
                  private=Optional(False), landing_rev=Optional('tip')):
 
        repo = get_repo_or_error(repoid)
 
        repo_name = repo.repo_name
 
        owner = get_user_or_error(owner)
 

	
 
        _repo = RepoModel().get_by_repo_name(fork_name)
 
        if _repo:
 
            type_ = 'fork' if _repo.fork else 'repo'
 
            raise JSONRPCError("%s `%s` already exist" % (type_, fork_name))
 

	
 
        if HasPermissionAnyApi('hg.admin')(user=apiuser):
 
            pass
 
        elif HasRepoPermissionAnyApi('repository.admin',
 
                                     'repository.write',
 
                                     'repository.read')(user=apiuser,
 
                                                        repo_name=repo.repo_name):
 
            if not isinstance(owner, Optional):
 
                #forbid setting owner for non-admins
 
                raise JSONRPCError(
 
                    'Only RhodeCode admin can specify `owner` param'
 
                )
 
        else:
 
            raise JSONRPCError('repository `%s` does not exist' % (repoid))
 

	
 
        if isinstance(owner, Optional):
 
            owner = apiuser.user_id
 

	
 
        owner = get_user_or_error(owner)
 

	
 
        try:
 
            # create structure of groups and return the last group
 
            group = map_groups(fork_name)
 
@@ -652,7 +763,6 @@ class ApiController(JSONRPCController):
 
                                                            fork_name)
 
            )
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    def delete_repo(self, apiuser, repoid):
 
        """
 
        Deletes a given repository
 
@@ -662,6 +772,12 @@ class ApiController(JSONRPCController):
 
        """
 
        repo = get_repo_or_error(repoid)
 

	
 
        if HasPermissionAnyApi('hg.admin')(user=apiuser) is False:
 
            # check if we have admin permission for this repo !
 
            if HasRepoPermissionAnyApi('repository.admin')(user=apiuser,
 
                                            repo_name=repo.repo_name) is False:
 
                 raise JSONRPCError('repository `%s` does not exist' % (repoid))
 

	
 
        try:
 
            RepoModel().delete(repo)
 
            Session().commit()
 
@@ -675,7 +791,7 @@ class ApiController(JSONRPCController):
 
                'failed to delete repository `%s`' % repo.repo_name
 
            )
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    @HasPermissionAllDecorator('hg.admin')
 
    def grant_user_permission(self, apiuser, repoid, userid, perm):
 
        """
 
        Grant permission for user on given repository, or update existing one
 
@@ -708,7 +824,7 @@ class ApiController(JSONRPCController):
 
                )
 
            )
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    @HasPermissionAllDecorator('hg.admin')
 
    def revoke_user_permission(self, apiuser, repoid, userid):
 
        """
 
        Revoke permission for user on given repository
 
@@ -739,7 +855,7 @@ class ApiController(JSONRPCController):
 
                )
 
            )
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    @HasPermissionAllDecorator('hg.admin')
 
    def grant_users_group_permission(self, apiuser, repoid, usersgroupid,
 
                                     perm):
 
        """
 
@@ -778,7 +894,7 @@ class ApiController(JSONRPCController):
 
                )
 
            )
 

	
 
    @HasPermissionAnyDecorator('hg.admin')
 
    @HasPermissionAllDecorator('hg.admin')
 
    def revoke_users_group_permission(self, apiuser, repoid, usersgroupid):
 
        """
 
        Revoke permission for users group on given repository
rhodecode/controllers/changeset.py
Show inline comments
 
@@ -221,13 +221,25 @@ class ChangesetController(BaseRepoContro
 
        for changeset in c.cs_ranges:
 
            inlines = []
 
            if method == 'show':
 
                c.statuses.extend([ChangesetStatusModel()\
 
                                  .get_status(c.rhodecode_db_repo.repo_id,
 
                                              changeset.raw_id)])
 
                c.statuses.extend([ChangesetStatusModel().get_status(
 
                            c.rhodecode_db_repo.repo_id, changeset.raw_id)])
 

	
 
                c.comments.extend(ChangesetCommentsModel()\
 
                                  .get_comments(c.rhodecode_db_repo.repo_id,
 
                                                revision=changeset.raw_id))
 

	
 
                #comments from PR
 
                st = ChangesetStatusModel().get_statuses(
 
                            c.rhodecode_db_repo.repo_id, changeset.raw_id,
 
                            with_revisions=True)
 
                # from associated statuses, check the pull requests, and
 
                # show comments from them
 

	
 
                prs = set([x.pull_request for x in
 
                           filter(lambda x: x.pull_request != None, st)])
 

	
 
                for pr in prs:
 
                    c.comments.extend(pr.comments)
 
                inlines = ChangesetCommentsModel()\
 
                            .get_inline_comments(c.rhodecode_db_repo.repo_id,
 
                                                 revision=changeset.raw_id)
 
@@ -269,6 +281,9 @@ class ChangesetController(BaseRepoContro
 
                cs_changes[''] = [None, None, None, None, diff, None]
 
            c.changes[changeset.raw_id] = cs_changes
 

	
 
        #sort comments by how they were generated
 
        c.comments = sorted(c.comments, key=lambda x: x.comment_id)
 

	
 
        # count inline comments
 
        for __, lines in c.inline_comments:
 
            for comments in lines.values():
 
@@ -342,7 +357,7 @@ class ChangesetController(BaseRepoContro
 
                )
 
            except StatusChangeOnClosedPullRequestError:
 
                log.error(traceback.format_exc())
 
                msg = _('Changing status on a changeset associated with'
 
                msg = _('Changing status on a changeset associated with '
 
                        'a closed pull request is not allowed')
 
                h.flash(msg, category='warning')
 
                return redirect(h.url('changeset_home', repo_name=repo_name,
 
@@ -371,7 +386,7 @@ class ChangesetController(BaseRepoContro
 
    @jsonify
 
    def delete_comment(self, repo_name, comment_id):
 
        co = ChangesetComment.get(comment_id)
 
        owner = lambda: co.author.user_id == c.rhodecode_user.user_id
 
        owner = co.author.user_id == c.rhodecode_user.user_id
 
        if h.HasPermissionAny('hg.admin', 'repository.admin')() or owner:
 
            ChangesetCommentsModel().delete(comment=co)
 
            Session().commit()
rhodecode/controllers/compare.py
Show inline comments
 
@@ -103,8 +103,11 @@ class CompareController(BaseRepoControll
 
        c.org_repo = org_repo = Repository.get_by_repo_name(org_repo)
 
        c.other_repo = other_repo = Repository.get_by_repo_name(other_repo)
 

	
 
        if c.org_repo is None or c.other_repo is None:
 
            log.error('Could not found repo %s or %s' % (org_repo, other_repo))
 
        if c.org_repo is None:
 
            log.error('Could not find org repo %s' % org_repo)
 
            raise HTTPNotFound
 
        if c.other_repo is None:
 
            log.error('Could not find other repo %s' % other_repo)
 
            raise HTTPNotFound
 

	
 
        if c.org_repo != c.other_repo and h.is_git(c.rhodecode_repo):
rhodecode/controllers/home.py
Show inline comments
 
@@ -28,6 +28,7 @@ import logging
 
from pylons import tmpl_context as c, request
 
from pylons.i18n.translation import _
 
from webob.exc import HTTPBadRequest
 
from sqlalchemy.sql.expression import func
 

	
 
import rhodecode
 
from rhodecode.lib import helpers as h
 
@@ -35,7 +36,8 @@ from rhodecode.lib.ext_json import json
 
from rhodecode.lib.auth import LoginRequired
 
from rhodecode.lib.base import BaseController, render
 
from rhodecode.model.db import Repository
 
from sqlalchemy.sql.expression import func
 
from rhodecode.model.repo import RepoModel
 

	
 

	
 
log = logging.getLogger(__name__)
 

	
 
@@ -58,51 +60,11 @@ class HomeController(BaseController):
 
                            .filter(Repository.group_id == None)\
 
                            .order_by(func.lower(Repository.repo_name))\
 
                            .all()
 
            repos_data = []
 
            total_records = len(c.repos_list)
 

	
 
            _tmpl_lookup = rhodecode.CONFIG['pylons.app_globals'].mako_lookup
 
            template = _tmpl_lookup.get_template('data_table/_dt_elements.html')
 

	
 
            quick_menu = lambda repo_name: (template.get_def("quick_menu")
 
                                            .render(repo_name, _=_, h=h, c=c))
 
            repo_lnk = lambda name, rtype, private, fork_of: (
 
                template.get_def("repo_name")
 
                .render(name, rtype, private, fork_of, short_name=False,
 
                        admin=False, _=_, h=h, c=c))
 
            last_change = lambda last_change:  (template.get_def("last_change")
 
                                           .render(last_change, _=_, h=h, c=c))
 
            rss_lnk = lambda repo_name: (template.get_def("rss")
 
                                           .render(repo_name, _=_, h=h, c=c))
 
            atom_lnk = lambda repo_name: (template.get_def("atom")
 
                                           .render(repo_name, _=_, h=h, c=c))
 

	
 
            def desc(desc):
 
                if c.visual.stylify_metatags:
 
                    return h.urlify_text(h.desc_stylize(h.truncate(desc, 60)))
 
                else:
 
                    return h.urlify_text(h.truncate(desc, 60))
 

	
 
            for repo in c.repos_list:
 
                repos_data.append({
 
                    "menu": quick_menu(repo.repo_name),
 
                    "raw_name": repo.repo_name.lower(),
 
                    "name": repo_lnk(repo.repo_name, repo.repo_type,
 
                                     repo.private, repo.fork),
 
                    "last_change": last_change(repo.last_db_change),
 
                    "desc": desc(repo.description),
 
                    "owner": h.person(repo.user.username),
 
                    "rss": rss_lnk(repo.repo_name),
 
                    "atom": atom_lnk(repo.repo_name),
 
                })
 

	
 
            c.data = json.dumps({
 
                "totalRecords": total_records,
 
                "startIndex": 0,
 
                "sort": "name",
 
                "dir": "asc",
 
                "records": repos_data
 
            })
 
            repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list,
 
                                                       admin=False)
 
            #json used to render the grid
 
            c.data = json.dumps(repos_data)
 

	
 
        return render('/index.html')
 

	
rhodecode/controllers/journal.py
Show inline comments
 
@@ -27,6 +27,8 @@ from itertools import groupby
 

	
 
from sqlalchemy import or_
 
from sqlalchemy.orm import joinedload
 
from sqlalchemy.sql.expression import func
 

	
 
from webhelpers.paginate import Page
 
from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed
 

	
 
@@ -39,10 +41,10 @@ from rhodecode.lib.auth import LoginRequ
 
from rhodecode.lib.base import BaseController, render
 
from rhodecode.model.db import UserLog, UserFollowing, Repository, User
 
from rhodecode.model.meta import Session
 
from sqlalchemy.sql.expression import func
 
from rhodecode.model.scm import ScmModel
 
from rhodecode.lib.utils2 import safe_int, AttributeDict
 
from rhodecode.controllers.admin.admin import _journal_filter
 
from rhodecode.model.repo import RepoModel
 
from rhodecode.lib.compat import json
 

	
 
log = logging.getLogger(__name__)
 

	
 
@@ -78,18 +80,73 @@ class JournalController(BaseController):
 
        c.journal_data = render('journal/journal_data.html')
 
        if request.environ.get('HTTP_X_PARTIAL_XHR'):
 
            return c.journal_data
 
        return render('journal/journal.html')
 

	
 
        repos_list = Session().query(Repository)\
 
                     .filter(Repository.user_id ==
 
                             self.rhodecode_user.user_id)\
 
                     .order_by(func.lower(Repository.repo_name)).all()
 

	
 
        repos_data = RepoModel().get_repos_as_dict(repos_list=repos_list,
 
                                                   admin=True)
 
        #json used to render the grid
 
        c.data = json.dumps(repos_data)
 

	
 
        watched_repos_data = []
 

	
 
        ## watched repos
 
        _render = RepoModel._render_datatable
 

	
 
        def quick_menu(repo_name):
 
            return _render('quick_menu', repo_name)
 

	
 
        def repo_lnk(name, rtype, private, fork_of):
 
            return _render('repo_name', name, rtype, private, fork_of,
 
                           short_name=False, admin=False)
 

	
 
        def last_rev(repo_name, cs_cache):
 
            return _render('revision', repo_name, cs_cache.get('revision'),
 
                           cs_cache.get('raw_id'), cs_cache.get('author'),
 
                           cs_cache.get('message'))
 

	
 
    @LoginRequired()
 
    @NotAnonymous()
 
    def index_my_repos(self):
 
        c.user = User.get(self.rhodecode_user.user_id)
 
        if request.environ.get('HTTP_X_PARTIAL_XHR'):
 
            all_repos = self.sa.query(Repository)\
 
                     .filter(Repository.user_id == c.user.user_id)\
 
                     .order_by(func.lower(Repository.repo_name)).all()
 
            c.user_repos = ScmModel().get_repos(all_repos)
 
            return render('journal/journal_page_repos.html')
 
        def desc(desc):
 
            from pylons import tmpl_context as c
 
            if c.visual.stylify_metatags:
 
                return h.urlify_text(h.desc_stylize(h.truncate(desc, 60)))
 
            else:
 
                return h.urlify_text(h.truncate(desc, 60))
 

	
 
        def repo_actions(repo_name):
 
            return _render('repo_actions', repo_name)
 

	
 
        def owner_actions(user_id, username):
 
            return _render('user_name', user_id, username)
 

	
 
        def toogle_follow(repo_id):
 
            return  _render('toggle_follow', repo_id)
 

	
 
        for entry in c.following:
 
            repo = entry.follows_repository
 
            cs_cache = repo.changeset_cache
 
            row = {
 
                "menu": quick_menu(repo.repo_name),
 
                "raw_name": repo.repo_name.lower(),
 
                "name": repo_lnk(repo.repo_name, repo.repo_type,
 
                                 repo.private, repo.fork),
 
                "last_changeset": last_rev(repo.repo_name, cs_cache),
 
                "raw_tip": cs_cache.get('revision'),
 
                "action": toogle_follow(repo.repo_id)
 
            }
 

	
 
            watched_repos_data.append(row)
 

	
 
        c.watched_data = json.dumps({
 
            "totalRecords": len(c.following),
 
            "startIndex": 0,
 
            "sort": "name",
 
            "dir": "asc",
 
            "records": watched_repos_data
 
        })
 
        return render('journal/journal.html')
 

	
 
    @LoginRequired(api_access=True)
 
    @NotAnonymous()
rhodecode/controllers/login.py
Show inline comments
 
@@ -54,10 +54,9 @@ class LoginController(BaseController):
 
    def index(self):
 
        # redirect if already logged in
 
        c.came_from = request.GET.get('came_from')
 

	
 
        if self.rhodecode_user.is_authenticated \
 
                            and self.rhodecode_user.username != 'default':
 

	
 
        not_default = self.rhodecode_user.username != 'default'
 
        ip_allowed = self.rhodecode_user.ip_allowed
 
        if self.rhodecode_user.is_authenticated and not_default and ip_allowed:
 
            return redirect(url('home'))
 

	
 
        if request.POST:
rhodecode/controllers/pullrequests.py
Show inline comments
 
@@ -97,7 +97,7 @@ class PullrequestsController(BaseRepoCon
 
            return repo.branches.keys()[0]
 

	
 
    def _get_is_allowed_change_status(self, pull_request):
 
        owner = self.rhodecode_user.user_id == pull_request.user_id 
 
        owner = self.rhodecode_user.user_id == pull_request.user_id
 
        reviewer = self.rhodecode_user.user_id in [x.user_id for x in
 
                                                   pull_request.reviewers]
 
        return (self.rhodecode_user.admin or owner or reviewer)
 
@@ -299,7 +299,7 @@ class PullrequestsController(BaseRepoCon
 
                                  else EmptyChangeset(), 'raw_id'))
 

	
 
        c.statuses = org_repo.statuses([x.raw_id for x in c.cs_ranges])
 
        c.target_repo = c.repo_name
 
        c.target_repo = other_repo.repo_name
 
        # defines that we need hidden inputs with changesets
 
        c.as_form = request.GET.get('as_form', False)
 

	
 
@@ -339,7 +339,6 @@ class PullrequestsController(BaseRepoCon
 
        c.users_array = repo_model.get_users_js()
 
        c.users_groups_array = repo_model.get_users_groups_js()
 
        c.pull_request = PullRequest.get_or_404(pull_request_id)
 
        c.target_repo = c.pull_request.org_repo.repo_name
 
        c.allowed_to_change_status = self._get_is_allowed_change_status(c.pull_request)
 
        cc_model = ChangesetCommentsModel()
 
        cs_model = ChangesetStatusModel()
 
@@ -478,7 +477,7 @@ class PullrequestsController(BaseRepoCon
 
            #don't allow deleting comments on closed pull request
 
            raise HTTPForbidden()
 

	
 
        owner = lambda: co.author.user_id == c.rhodecode_user.user_id
 
        owner = co.author.user_id == c.rhodecode_user.user_id
 
        if h.HasPermissionAny('hg.admin', 'repository.admin')() or owner:
 
            ChangesetCommentsModel().delete(comment=co)
 
            Session().commit()
rhodecode/i18n/ja/LC_MESSAGES/rhodecode.mo
Show inline comments
 
binary diff not shown
rhodecode/i18n/ja/LC_MESSAGES/rhodecode.po
Show inline comments
 
@@ -13,7 +13,7 @@ msgstr ""
 
"Project-Id-Version: RhodeCode 1.2.0\n"
 
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 
"POT-Creation-Date: 2012-12-14 04:19+0100\n"
 
"PO-Revision-Date: 2012-10-27 15:06+0900\n"
 
"PO-Revision-Date: 2013-01-02 01:39+0900\n"
 
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 
"Language-Team: ja <LL@li.org>\n"
 
"Plural-Forms: nplurals=1; plural=0\n"
 
@@ -41,9 +41,9 @@ msgstr ""
 

	
 
#: rhodecode/controllers/changeset.py:314
 
#: rhodecode/controllers/pullrequests.py:417
 
#, fuzzy, python-format
 
#, python-format
 
msgid "Status change -> %s"
 
msgstr ""
 
msgstr "ステータス変更 -> %s"
 

	
 
#: rhodecode/controllers/changeset.py:345
 
msgid ""
 
@@ -71,7 +71,7 @@ msgstr "リソースにアクセスする権限がありません"
 

	
 
#: rhodecode/controllers/error.py:103
 
msgid "You don't have permission to view this page"
 
msgstr "このページを見る権限がありません"
 
msgstr "このページを閲覧する権限がありません"
 

	
 
#: rhodecode/controllers/error.py:105
 
msgid "The resource could not be found"
 
@@ -285,19 +285,17 @@ msgid "An error occurred during deletion
 
msgstr "リポジトリ %s の削除中にエラーが発生しました"
 

	
 
#: rhodecode/controllers/settings.py:185
 
#, fuzzy
 
msgid "unlocked"
 
msgstr "変更可能にする"
 
msgstr "アンロック"
 

	
 
#: rhodecode/controllers/settings.py:188
 
#, fuzzy
 
msgid "locked"
 
msgstr "変更可能にする"
 
msgstr "ロック"
 

	
 
#: rhodecode/controllers/settings.py:190
 
#, fuzzy, python-format
 
#, python-format
 
msgid "Repository has been %s"
 
msgstr ""
 
msgstr "リポジトリは %s されています"
 

	
 
#: rhodecode/controllers/settings.py:194
 
#: rhodecode/controllers/admin/repos.py:423
 
@@ -314,14 +312,12 @@ msgid "Statistics are disabled for this 
 
msgstr "このリポジトリの統計は無効化されています"
 

	
 
#: rhodecode/controllers/admin/defaults.py:96
 
#, fuzzy
 
msgid "Default settings updated successfully"
 
msgstr "LDAP設定を更新しました"
 
msgstr "デフォルト設定を更新しました"
 

	
 
#: rhodecode/controllers/admin/defaults.py:110
 
#, fuzzy
 
msgid "error occurred during update of defaults"
 
msgstr "ユーザー %s の更新中にエラーが発生しました"
 
msgstr "デフォルト設定の更新中にエラーが発生しました"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:50
 
msgid "BASE"
 
@@ -473,7 +469,7 @@ msgstr "リポジトリ %s を作成中にエラーが発生しました"
 
#: rhodecode/controllers/admin/repos.py:320
 
#, python-format
 
msgid "Cannot delete %s it still contains attached forks"
 
msgstr ""
 
msgstr "フォークしたリポジトリが存在するため、 %s は削除できません"
 

	
 
#: rhodecode/controllers/admin/repos.py:349
 
msgid "An error occurred during deletion of repository user"
 
@@ -493,11 +489,11 @@ msgstr "キャッシュの無効化時にエラーが発生しました"
 

	
 
#: rhodecode/controllers/admin/repos.py:443
 
msgid "Updated repository visibility in public journal"
 
msgstr ""
 
msgstr "公開ジャーナルでのリポジトリの可視性を更新しました"
 

	
 
#: rhodecode/controllers/admin/repos.py:447
 
msgid "An error occurred during setting this repository in public journal"
 
msgstr ""
 
msgstr "このリポジトリの公開ジャーナルの設定中にエラーが発生しました"
 

	
 
#: rhodecode/controllers/admin/repos.py:452 rhodecode/model/validators.py:300
 
msgid "Token mismatch"
 
@@ -750,7 +746,7 @@ msgstr "バイナリファイル"
 

	
 
#: rhodecode/lib/diffs.py:90
 
msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 
msgstr ""
 
msgstr "チェンジセットが大きすぎるため省略しました。差分を表示する場合は差分メニューを使用してください"
 

	
 
#: rhodecode/lib/diffs.py:100
 
msgid "No changes detected"
 
@@ -770,14 +766,14 @@ msgid "False"
 
msgstr "False"
 

	
 
#: rhodecode/lib/helpers.py:530
 
#, fuzzy, python-format
 
#, python-format
 
msgid "Deleted branch: %s"
 
msgstr "リポジトリ %s を削除しました"
 
msgstr "削除されたブランチ: %s"
 

	
 
#: rhodecode/lib/helpers.py:533
 
#, fuzzy, python-format
 
#, python-format
 
msgid "Created tag: %s"
 
msgstr "ユーザー %s を作成しました"
 
msgstr "作成したタグ: %s"
 

	
 
#: rhodecode/lib/helpers.py:546
 
msgid "Changeset not found"
 
@@ -794,21 +790,21 @@ msgstr "比較の表示"
 

	
 
#: rhodecode/lib/helpers.py:615
 
msgid "and"
 
msgstr ""
 
msgstr ""
 

	
 
#: rhodecode/lib/helpers.py:616
 
#, python-format
 
msgid "%s more"
 
msgstr ""
 
msgstr "%s 以上"
 

	
 
#: rhodecode/lib/helpers.py:617 rhodecode/templates/changelog/changelog.html:51
 
msgid "revisions"
 
msgstr "リビジョン"
 

	
 
#: rhodecode/lib/helpers.py:641
 
#, fuzzy, python-format
 
#, python-format
 
msgid "fork name %s"
 
msgstr ""
 
msgstr "フォーク名 %s"
 

	
 
#: rhodecode/lib/helpers.py:658
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:4
 
@@ -959,9 +955,9 @@ msgid "%s ago"
 
msgstr "%s 前"
 

	
 
#: rhodecode/lib/utils2.py:428
 
#, fuzzy, python-format
 
#, python-format
 
msgid "in %s and %s"
 
msgstr "%s と %s 前"
 
msgstr ""
 

	
 
#: rhodecode/lib/utils2.py:431
 
#, python-format
 
@@ -1084,39 +1080,39 @@ msgid "Enter %(min)i characters or more"
 
msgstr "%(min)i 文字以上必要です"
 

	
 
#: rhodecode/model/notification.py:220
 
#, fuzzy, python-format
 
#, python-format
 
msgid "commented on commit at %(when)s"
 
msgstr ""
 
msgstr "コミットにコメント %(when)s"
 

	
 
#: rhodecode/model/notification.py:221
 
#, python-format
 
msgid "sent message at %(when)s"
 
msgstr ""
 
msgstr "メッセージを送信 %(when)s"
 

	
 
#: rhodecode/model/notification.py:222
 
#, python-format
 
msgid "mentioned you at %(when)s"
 
msgstr ""
 
msgstr "Mention %(when)s"
 

	
 
#: rhodecode/model/notification.py:223
 
#, python-format
 
msgid "registered in RhodeCode at %(when)s"
 
msgstr ""
 
msgstr "RhodeCodeに登録 %(when)s"
 

	
 
#: rhodecode/model/notification.py:224
 
#, fuzzy, python-format
 
#, python-format
 
msgid "opened new pull request at %(when)s"
 
msgstr ""
 
msgstr "新しいプルリクエストを作成 %(when)s"
 

	
 
#: rhodecode/model/notification.py:225
 
#, fuzzy, python-format
 
#, python-format
 
msgid "commented on pull request at %(when)s"
 
msgstr ""
 
msgstr "プルリクエストにコメント %(when)s"
 

	
 
#: rhodecode/model/pull_request.py:90
 
#, python-format
 
msgid "%(user)s wants you to review pull request #%(pr_id)s"
 
msgstr ""
 
msgstr "%(user)s がプリリクエスト #%(pr_id)s のレビューを求めています"
 

	
 
#: rhodecode/model/scm.py:542
 
msgid "latest tip"
 
@@ -1129,11 +1125,11 @@ msgstr "新規ユーザー登録"
 
#: rhodecode/model/user.py:257 rhodecode/model/user.py:281
 
#: rhodecode/model/user.py:303
 
msgid "You can't Edit this user since it's crucial for entire application"
 
msgstr ""
 
msgstr "アプリケーション全体にとって重要なユーザなため、編集出来ません"
 

	
 
#: rhodecode/model/user.py:327
 
msgid "You can't remove this user since it's crucial for entire application"
 
msgstr ""
 
msgstr "アプリケーション全体にとって重要なユーザなため、削除できません"
 

	
 
#: rhodecode/model/user.py:333
 
#, python-format
 
@@ -1144,7 +1140,7 @@ msgstr ""
 

	
 
#: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37
 
msgid "Value cannot be an empty list"
 
msgstr ""
 
msgstr "空のリストには出来ません"
 

	
 
#: rhodecode/model/validators.py:83
 
#, python-format
 
@@ -1244,16 +1240,15 @@ msgstr "無効なクローンURIです"
 

	
 
#: rhodecode/model/validators.py:433
 
msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url"
 
msgstr ""
 
msgstr "無効なクローンURIです。有効な http(s)/svn+http(s) のURIを指定してください"
 

	
 
#: rhodecode/model/validators.py:458
 
msgid "Fork have to be the same type as parent"
 
msgstr "フォークは親と同じタイプの必要があります"
 

	
 
#: rhodecode/model/validators.py:473
 
#, fuzzy
 
msgid "You don't have permissions to create repository in this group"
 
msgstr "このページを見る権限がありません"
 
msgstr "このグループでリポジトリを作成する権限がありません"
 

	
 
#: rhodecode/model/validators.py:498
 
msgid "This username or users group name is not valid"
 
@@ -1617,22 +1612,20 @@ msgid "Admin journal"
 
msgstr "管理者ジャーナル"
 

	
 
#: rhodecode/templates/admin/admin.html:10
 
#, fuzzy
 
msgid "journal filter..."
 
msgstr "クイックフィルタ..."
 
msgstr "ジャーナルフィルタ..."
 

	
 
#: rhodecode/templates/admin/admin.html:12
 
#: rhodecode/templates/journal/journal.html:11
 
#, fuzzy
 
msgid "filter"
 
msgstr "ファイル"
 
msgstr "フィルタ"
 

	
 
#: rhodecode/templates/admin/admin.html:13
 
#: rhodecode/templates/journal/journal.html:12
 
#, python-format
 
msgid "%s entry"
 
msgid_plural "%s entries"
 
msgstr[0] ""
 
msgstr[0] "%s エントリ"
 

	
 
#: rhodecode/templates/admin/admin_log.html:6
 
#: rhodecode/templates/admin/repos/repos.html:74
 
@@ -1668,14 +1661,12 @@ msgstr "まだアクションがありません"
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:5
 
#: rhodecode/templates/admin/defaults/defaults.html:25
 
#, fuzzy
 
msgid "Repositories defaults"
 
msgstr "リポジトリグループ"
 
msgstr "リポジトリのデフォルト設定"
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:11
 
#, fuzzy
 
msgid "Defaults"
 
msgstr "default"
 
msgstr "デフォルト設定"
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:35
 
#: rhodecode/templates/admin/repos/repo_add_base.html:38
 
@@ -1722,7 +1713,7 @@ msgstr "ロックを有効にする"
 
#: rhodecode/templates/admin/defaults/defaults.html:79
 
#: rhodecode/templates/admin/repos/repo_edit.html:116
 
msgid "Enable lock-by-pulling on repository."
 
msgstr ""
 
msgstr "リポジトリのpullのロックを有効にします"
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:84
 
#: rhodecode/templates/admin/ldap/ldap.html:89
 
@@ -2076,20 +2067,19 @@ msgstr "リポジトリのキャッシュを無効化してもよろしいですか?"
 
msgid ""
 
"Manually invalidate cache for this repository. On first access repository"
 
" will be cached again"
 
msgstr ""
 
msgstr "このリポジトリのキャッシュを手動で無効化します。リポジトリへの初回アクセス時に再びキャッシュされます。"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:198
 
msgid "List of cached values"
 
msgstr ""
 
msgstr "キャッシュしている値の一覧"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:201
 
msgid "Prefix"
 
msgstr ""
 
msgstr "プレフィックス"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:202
 
#, fuzzy
 
msgid "Key"
 
msgstr "APIキー"
 
msgstr "キー"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:203
 
#: rhodecode/templates/admin/users/user_add.html:86
 
@@ -2146,7 +2136,7 @@ msgstr "リポジトリはロックされていません"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:252
 
msgid "Force locking on repository. Works only when anonymous access is disabled"
 
msgstr ""
 
msgstr "リポジトリを強制ロックします。匿名アクセスが無効になっている場合のみ動作します。"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:259
 
msgid "Set as fork of"
 
@@ -2173,14 +2163,13 @@ msgstr "このリポジトリを削除しますか?"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:282
 
#: rhodecode/templates/settings/repo_settings.html:119
 
#, fuzzy
 
msgid ""
 
"This repository will be renamed in a special way in order to be "
 
"unaccesible for RhodeCode and VCS systems. If you need fully delete it "
 
"from file system please do it manually"
 
msgstr ""
 
"このリポジトリはRhodeCodeとVCSシステムからアクセスされないような名前に、特別な方法で変更されます。\n"
 
"もし、ファイルシステムから完全に削除したい場合、手動で行ってください"
 
"このリポジトリはRhodeCodeとVCSシステムからアクセス出来ないようにするために特別な方法でリネームされます。\n"
 
"完全な削除が必要な場合はファイルシステムから手動で削除してください"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:3
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3
 
@@ -2250,7 +2239,7 @@ msgstr "リポジトリ管理"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73
 
msgid "apply to children"
 
msgstr ""
 
msgstr "子リポジトリにも適用"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74
 
msgid ""
 
@@ -2356,10 +2345,10 @@ msgid "delete"
 
msgstr "削除"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55
 
#, fuzzy, python-format
 
#, python-format
 
msgid "Confirm to delete this group: %s with %s repository"
 
msgid_plural "Confirm to delete this group: %s with %s repositories"
 
msgstr[0] ""
 
msgstr[0] "このグループを削除してもよろしいですか?: %s %s リポジトリ"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63
 
msgid "There are no repositories groups yet"
 
@@ -2394,11 +2383,11 @@ msgstr "フックの削除に失敗しました"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:24
 
msgid "Remap and rescan repositories"
 
msgstr ""
 
msgstr "リポジトリの再マッピングと再スキャン"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:32
 
msgid "rescan option"
 
msgstr ""
 
msgstr "再スキャンオプション"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:38
 
msgid ""
 
@@ -2464,13 +2453,12 @@ msgid "Visualisation settings"
 
msgstr "表示の設定"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:127
 
#, fuzzy
 
msgid "General"
 
msgstr "有効にする"
 
msgstr "一般"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:132
 
msgid "Use lightweight dashboard"
 
msgstr ""
 
msgstr "軽量ダッシュボードを使用"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:139
 
msgid "Icons"
 
@@ -2508,7 +2496,7 @@ msgstr "VCSの操作にSSLを必須とする"
 
msgid ""
 
"RhodeCode will require SSL for pushing or pulling. If SSL is missing it "
 
"will return HTTP Error 406: Not Acceptable"
 
msgstr ""
 
msgstr "RhodeCodeはPushとPullにSSLを要求します。もしSSLでない場合、HTTP Error 406: Not Acceptalbeを返します"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:209
 
msgid "Hooks"
 
@@ -2561,12 +2549,15 @@ msgid ""
 
"This a crucial application setting. If you are really sure you need to "
 
"change this, you must restart application in order to make this setting "
 
"take effect. Click this label to unlock."
 
msgstr "これはアプリケーションの重要な設定です。本当に変更が必要でしょうか。もし、変更した場合、変更を反映さ競るためにアプリケーションを再起動する必要があります。変更可能にするにはこのラベルをクリックして下さい"
 
msgstr ""
 
"これはアプリケーションの重要な設定です。本当に変更が必要でしょうか。"
 
"もし、変更した場合、変更を反映さ競るためにアプリケーションを再起動する必要があります。"
 
"アンロックにするにはこのラベルをクリックして下さい"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:262
 
#: rhodecode/templates/base/base.html:221
 
msgid "unlock"
 
msgstr "変更可能にする"
 
msgstr "アンロック"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:263
 
msgid ""
 
@@ -2869,19 +2860,16 @@ msgid "Group members"
 
msgstr "グループメンバー"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:163
 
#, fuzzy
 
msgid "No members yet"
 
msgstr "メンバー"
 
msgstr "まだメンバーがいません"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:171
 
#, fuzzy
 
msgid "Permissions defined for this group"
 
msgstr "権限管理"
 
msgstr "このリポジトリの権限設定"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:178
 
#, fuzzy
 
msgid "No permissions set yet"
 
msgstr "権限のコピー"
 
msgstr "まだ権限設定がありません"
 

	
 
#: rhodecode/templates/admin/users_groups/users_groups.html:5
 
msgid "Users groups administration"
 
@@ -2992,9 +2980,8 @@ msgstr "オプション"
 

	
 
#: rhodecode/templates/base/base.html:204
 
#: rhodecode/templates/base/base.html:206
 
#, fuzzy
 
msgid "repository settings"
 
msgstr "リポジトリ作成"
 
msgstr "リポジトリ設定"
 

	
 
#: rhodecode/templates/base/base.html:210
 
#: rhodecode/templates/data_table/_dt_elements.html:80
 
@@ -3017,9 +3004,8 @@ msgid "search"
 
msgstr "検索"
 

	
 
#: rhodecode/templates/base/base.html:223
 
#, fuzzy
 
msgid "lock"
 
msgstr "変更可能にする"
 
msgstr "ロック"
 

	
 
#: rhodecode/templates/base/base.html:234
 
msgid "repositories groups"
 
@@ -3034,9 +3020,8 @@ msgid "permissions"
 
msgstr "権限"
 

	
 
#: rhodecode/templates/base/base.html:239
 
#, fuzzy
 
msgid "defaults"
 
msgstr "default"
 
msgstr "デフォルト設定"
 

	
 
#: rhodecode/templates/base/base.html:240
 
msgid "settings"
 
@@ -3087,13 +3072,12 @@ msgid "no matching files"
 
msgstr "マッチするファイルはありません"
 

	
 
#: rhodecode/templates/base/root.html:51
 
#, fuzzy
 
msgid "Open new pull request for selected changesets"
 
msgstr "新しいプルリクエストを作成"
 
msgstr "選択したチェンジセットから新しいプルリクエストを作成"
 

	
 
#: rhodecode/templates/base/root.html:52
 
msgid "Show selected changes __S -> __E"
 
msgstr ""
 
msgstr "選択した変更 __S -> __E を表示"
 

	
 
#: rhodecode/templates/base/root.html:53
 
msgid "Selection link"
 
@@ -3143,9 +3127,8 @@ msgid_plural "showing %d out of %d revis
 
msgstr[0] ""
 

	
 
#: rhodecode/templates/changelog/changelog.html:37
 
#, fuzzy
 
msgid "Clear selection"
 
msgstr "検索設定"
 
msgstr "選択を解除"
 

	
 
#: rhodecode/templates/changelog/changelog.html:40
 
#: rhodecode/templates/forks/forks_data.html:19
 
@@ -3154,9 +3137,8 @@ msgid "compare fork with %s"
 
msgstr "%s とフォークを比較"
 

	
 
#: rhodecode/templates/changelog/changelog.html:40
 
#, fuzzy
 
msgid "Compare fork with parent"
 
msgstr "%s とフォークを比較"
 
msgstr "フォークを比較"
 

	
 
#: rhodecode/templates/changelog/changelog.html:49
 
msgid "Show"
 
@@ -3259,7 +3241,7 @@ msgstr "チェンジセット"
 

	
 
#: rhodecode/templates/changeset/changeset.html:52
 
msgid "No children"
 
msgstr ""
 
msgstr "子リビジョンはありません"
 

	
 
#: rhodecode/templates/changeset/changeset.html:70
 
#: rhodecode/templates/changeset/diff_block.html:20
 
@@ -3267,9 +3249,8 @@ msgid "raw diff"
 
msgstr "差分を表示"
 

	
 
#: rhodecode/templates/changeset/changeset.html:71
 
#, fuzzy
 
msgid "patch diff"
 
msgstr "差分を表示"
 
msgstr "パッチとして差分を表示"
 

	
 
#: rhodecode/templates/changeset/changeset.html:72
 
#: rhodecode/templates/changeset/diff_block.html:21
 
@@ -3293,18 +3274,18 @@ msgstr[0] "(%d インライン)"
 
#: rhodecode/templates/changeset/changeset.html:122
 
#: rhodecode/templates/compare/compare_diff.html:44
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:76
 
#, fuzzy, python-format
 
#, python-format
 
msgid "%s file changed"
 
msgid_plural "%s files changed"
 
msgstr[0] ""
 
msgstr[0] "%s ファイルに影響"
 

	
 
#: rhodecode/templates/changeset/changeset.html:124
 
#: rhodecode/templates/compare/compare_diff.html:46
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:78
 
#, fuzzy, python-format
 
#, python-format
 
msgid "%s file changed with %s insertions and %s deletions"
 
msgid_plural "%s files changed with %s insertions and %s deletions"
 
msgstr[0] "%s ファイルに影響。 %s 個の追加と %s 個の削除:"
 
msgstr[0] "%s ファイルに影響。 %s 個の追加と %s 個の削除"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:42
 
msgid "Submitting..."
 
@@ -3349,7 +3330,7 @@ msgstr "コメントを残す"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:125
 
msgid "Check this to change current status of code-review for this changeset"
 
msgstr ""
 
msgstr "チェックするとチェンジセットの現在のコードレビューステータスを変更出来ます"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:125
 
msgid "change status"
 
@@ -3370,9 +3351,8 @@ msgid "Compare View"
 
msgstr "比較ビュー"
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:29
 
#, fuzzy
 
msgid "Show combined compare"
 
msgstr "インラインコメントを表示"
 
msgstr "結合した比較ビューを表示"
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:54
 
msgid "Files affected"
 
@@ -3380,7 +3360,7 @@ msgstr "影響のあるファイル"
 

	
 
#: rhodecode/templates/changeset/diff_block.html:19
 
msgid "show full diff for this file"
 
msgstr ""
 
msgstr "このファイルの全差分を表示"
 

	
 
#: rhodecode/templates/changeset/diff_block.html:27
 
msgid "show inline comments"
 
@@ -3392,16 +3372,15 @@ msgstr "チェンジセットはありません"
 

	
 
#: rhodecode/templates/compare/compare_diff.html:37
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:69
 
#, fuzzy, python-format
 
#, python-format
 
msgid "Showing %s commit"
 
msgid_plural "Showing %s commits"
 
msgstr[0] ""
 
msgstr[0] "%s コミットを表示"
 

	
 
#: rhodecode/templates/compare/compare_diff.html:52
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:84
 
#, fuzzy
 
msgid "No files"
 
msgstr "ファイル"
 
msgstr "ファイルはありません"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:39
 
#: rhodecode/templates/data_table/_dt_elements.html:41
 
@@ -3455,40 +3434,37 @@ msgid "Confirm to delete this user: %s"
 
msgstr "このユーザーを本当に削除してよろしいですか?: %s"
 

	
 
#: rhodecode/templates/email_templates/changeset_comment.html:10
 
#, fuzzy
 
msgid "New status$"
 
msgstr "ステータスを変更する"
 
msgstr "新しいステータス$"
 

	
 
#: rhodecode/templates/email_templates/main.html:8
 
#, fuzzy
 
msgid "This is a notification from RhodeCode."
 
msgstr "RhodeCodeからの通知があります"
 
msgstr "RhodeCodeからの通知です"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:4
 
msgid "Hello"
 
msgstr ""
 
msgstr "こんにちは"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:6
 
msgid "We received a request to create a new password for your account."
 
msgstr ""
 
msgstr "あなたのアカウントの新しいパスワードの生成リクエストを受け取りました。"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:8
 
msgid "You can generate it by clicking following URL"
 
msgstr ""
 
msgstr "下のURLをクリックすることで再生成が行えます。"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:12
 
msgid "If you didn't request new password please ignore this email."
 
msgstr ""
 
msgstr "新しいパスワードのリクエストをしていない場合は、このメールを無視して下さい。"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:4
 
#, python-format
 
msgid ""
 
"User %s opened pull request for repository %s and wants you to review "
 
"changes."
 
msgstr ""
 
msgstr "ユーザ %s がリポジトリ %s で新しいプルリクエストを作成しました。変更をレビューしてください。"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:5
 
#, fuzzy
 
msgid "title"
 
msgstr "タイトル"
 

	
 
@@ -3499,35 +3475,32 @@ msgstr "説明"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:11
 
msgid "revisions for reviewing"
 
msgstr ""
 
msgstr "レビュー対象のリビジョン"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:18
 
#, fuzzy
 
msgid "View this pull request here"
 
msgstr "このプルリクエストにレビュアーを追加"
 
msgstr "このプルリクエストを閲覧する"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:4
 
#, fuzzy, python-format
 
#, python-format
 
msgid "User %s commented on pull request #%s for repository %s"
 
msgstr ""
 
msgstr "ユーザ %s がプルリクエスト #%s (リポジトリ %s) にコメントしました。"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:10
 
#, fuzzy
 
msgid "New status"
 
msgstr "ステータスを変更する"
 
msgstr "新しいステータス"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:14
 
msgid "View this comment here"
 
msgstr ""
 
msgstr "このコメントを閲覧する"
 

	
 
#: rhodecode/templates/email_templates/registration.html:4
 
#, fuzzy
 
msgid "A new user have registered in RhodeCode"
 
msgstr "rhodecodeへの登録を受け付けました"
 
msgstr "新しいユーザがRhodeCodeへ登録しました"
 

	
 
#: rhodecode/templates/email_templates/registration.html:9
 
msgid "View this user here"
 
msgstr ""
 
msgstr "このユーザを閲覧する"
 

	
 
#: rhodecode/templates/errors/error_document.html:46
 
#, python-format
 
@@ -3609,7 +3582,7 @@ msgstr "変更をコミット"
 

	
 
#: rhodecode/templates/files/files_browser.html:13
 
msgid "view"
 
msgstr "表示"
 
msgstr "閲覧"
 

	
 
#: rhodecode/templates/files/files_browser.html:14
 
msgid "previous revision"
 
@@ -3697,9 +3670,8 @@ msgid "show at revision"
 
msgstr "このリビジョンを見る"
 

	
 
#: rhodecode/templates/files/files_history_box.html:11
 
#, fuzzy
 
msgid "show full history"
 
msgstr "ファイル一覧を読み込み中..."
 
msgstr "すべての履歴を表示"
 

	
 
#: rhodecode/templates/files/files_history_box.html:16
 
#, python-format
 
@@ -3708,9 +3680,8 @@ msgid_plural "%s authors"
 
msgstr[0] "%s 作成者"
 

	
 
#: rhodecode/templates/files/files_source.html:6
 
#, fuzzy
 
msgid "Load file history"
 
msgstr "ファイル一覧を読み込み中..."
 
msgstr "ファイルの履歴を読み込む"
 

	
 
#: rhodecode/templates/files/files_source.html:21
 
msgid "show source"
 
@@ -3909,7 +3880,7 @@ msgstr "%s にクローズ"
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:23
 
#, python-format
 
msgid "with status %s"
 
msgstr ""
 
msgstr "ステータス: %s"
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:31
 
msgid "Status"
 
@@ -3930,9 +3901,8 @@ msgid_plural "%d reviewers"
 
msgstr[0] "%d レビュアー"
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:50
 
#, fuzzy
 
msgid "pull request was reviewed by all reviewers"
 
msgstr "プルリクエストレビュアー"
 
msgstr "プルリクエストはすべてのレビュアーにレビューされました"
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:58
 
msgid "Created on"
 
@@ -3943,9 +3913,8 @@ msgid "Compare view"
 
msgstr "比較ビュー"
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:112
 
#, fuzzy
 
msgid "reviewer"
 
msgstr "%d レビュアー"
 
msgstr "レビュアー"
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show_all.html:4
 
msgid "all pull requests"
 
@@ -4012,12 +3981,10 @@ msgid "%s Settings"
 
msgstr "%s 設定"
 

	
 
#: rhodecode/templates/settings/repo_settings.html:102
 
#, fuzzy
 
msgid "Delete repository"
 
msgstr "リポジトリを[削除]"
 
msgstr "リポジトリを削除"
 

	
 
#: rhodecode/templates/settings/repo_settings.html:109
 
#, fuzzy
 
msgid "Remove repo"
 
msgstr "削除"
 

	
 
@@ -4080,19 +4047,18 @@ msgid "ATOM"
 
msgstr "ATOM"
 

	
 
#: rhodecode/templates/summary/summary.html:70
 
#, fuzzy, python-format
 
#, python-format
 
msgid "Repository locked by %s"
 
msgstr ""
 
msgstr "リポジトリは %s によってロックされました"
 

	
 
#: rhodecode/templates/summary/summary.html:72
 
#, fuzzy
 
msgid "Repository unlocked"
 
msgstr "リポジトリはロックされていません"
 

	
 
#: rhodecode/templates/summary/summary.html:91
 
#, python-format
 
msgid "Non changable ID %s"
 
msgstr ""
 
msgstr "変更不能ID %s"
 

	
 
#: rhodecode/templates/summary/summary.html:96
 
msgid "public"
 
@@ -4100,7 +4066,7 @@ msgstr "公開"
 

	
 
#: rhodecode/templates/summary/summary.html:104
 
msgid "remote clone"
 
msgstr ""
 
msgstr "リモートクローン"
 

	
 
#: rhodecode/templates/summary/summary.html:125
 
msgid "Contact"
 
@@ -4171,7 +4137,7 @@ msgstr "クイックスタート"
 
#: rhodecode/templates/summary/summary.html:243
 
#, python-format
 
msgid "Readme file at revision '%s'"
 
msgstr ""
 
msgstr "リビジョン '%s' のReadmeファイル"
 

	
 
#: rhodecode/templates/summary/summary.html:246
 
msgid "Permalink to this readme"
 
@@ -4220,9 +4186,8 @@ msgid "%s Tags"
 
msgstr "%s タグ"
 

	
 
#: rhodecode/templates/tags/tags.html:29
 
#, fuzzy
 
msgid "Compare tags"
 
msgstr "比較"
 
msgstr "タグの比較"
 

	
 
#~ msgid ""
 
#~ "%s repository is not mapped to db"
rhodecode/i18n/pl/LC_MESSAGES/rhodecode.po
Show inline comments
 
@@ -3,20 +3,21 @@
 
# This file is distributed under the same license as the rhodecode project.
 
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
 
# Nemcio <bogdan114@g.pl>, 2012.
 
# Nemo <areczek01@gmail.com>, 2012.
 
# Nemo <areczek01@gmail.com>, 2012, 2013.
 
msgid ""
 
msgstr ""
 
"Project-Id-Version: rhodecode 0.1\n"
 
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 
"POT-Creation-Date: 2012-12-14 04:19+0100\n"
 
"PO-Revision-Date: 2012-11-25 03:42+0200\n"
 
"Last-Translator: Nemo <areczek01@gmail.com>\n"
 
"PO-Revision-Date: 2013-01-18 18:12+0100\n"
 
"Last-Translator: Nemcio <bogdan114@g.pl>\n"
 
"Language-Team: Test\n"
 
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && "
 
"(n%100<10 || n%100>=20) ? 1 : 2)\n"
 
"Language: pl\n"
 
"MIME-Version: 1.0\n"
 
"Content-Type: text/plain; charset=utf-8\n"
 
"Content-Transfer-Encoding: 8bit\n"
 
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
"X-Generator: Virtaal 0.7.1\n"
 
"Generated-By: Babel 0.9.6\n"
 

	
 
#: rhodecode/controllers/changelog.py:95
 
@@ -27,7 +28,8 @@ msgstr "Wszystkie gałęzie"
 
msgid "show white space"
 
msgstr "pokazuj spacje"
 

	
 
#: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97
 
#: rhodecode/controllers/changeset.py:90
 
#: rhodecode/controllers/changeset.py:97
 
msgid "ignore white space"
 
msgstr "ignoruj pokazywanie spacji"
 

	
 
@@ -43,12 +45,8 @@ msgid "Status change -> %s"
 
msgstr "Zmiana statusu -> %s"
 

	
 
#: rhodecode/controllers/changeset.py:345
 
msgid ""
 
"Changing status on a changeset associated witha closed pull request is "
 
"not allowed"
 
msgstr ""
 
"Zmiana statusu na grupy zmian powiązania łączy zamkniętego wniosku jest "
 
"niedozwolona"
 
msgid "Changing status on a changeset associated witha closed pull request is not allowed"
 
msgstr "Zmiana statusu na grupy zmian powiązania łączy zamkniętego wniosku jest niedozwolona"
 

	
 
#: rhodecode/controllers/compare.py:75
 
#: rhodecode/controllers/pullrequests.py:121
 
@@ -62,9 +60,7 @@ msgstr "Strona główna"
 

	
 
#: rhodecode/controllers/error.py:98
 
msgid "The request could not be understood by the server due to malformed syntax."
 
msgstr ""
 
"Wniosek nie może być rozumiany przez serwer z powodu zniekształconej "
 
"składni."
 
msgstr "Wniosek nie może być rozumiany przez serwer z powodu zniekształconej składni."
 

	
 
#: rhodecode/controllers/error.py:101
 
msgid "Unauthorized access to resource"
 
@@ -79,12 +75,8 @@ msgid "The resource could not be found"
 
msgstr "Zasób nie został znaleziony"
 

	
 
#: rhodecode/controllers/error.py:107
 
msgid ""
 
"The server encountered an unexpected condition which prevented it from "
 
"fulfilling the request."
 
msgstr ""
 
"Serwer napotkał niespodziewany warunek, który uniemożliwia jej spełnienie"
 
" żądania."
 
msgid "The server encountered an unexpected condition which prevented it from fulfilling the request."
 
msgstr "Serwer napotkał niespodziewany warunek, który uniemożliwia jej spełnienie żądania."
 

	
 
#: rhodecode/controllers/feed.py:52
 
#, python-format
 
@@ -119,7 +111,8 @@ msgstr "Kliknij tutaj, by dodać nowy plik"
 
msgid "There are no files yet %s"
 
msgstr "Brak plików %s"
 

	
 
#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325
 
#: rhodecode/controllers/files.py:265
 
#: rhodecode/controllers/files.py:325
 
#, python-format
 
msgid "This repository is has been locked by %s on %s"
 
msgstr "Repozytorium zostało zablokowane przez %s na %s"
 
@@ -133,12 +126,14 @@ msgstr "Edytowanie %s w RhodeCode"
 
msgid "No changes"
 
msgstr "Bez zmian"
 

	
 
#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372
 
#: rhodecode/controllers/files.py:308
 
#: rhodecode/controllers/files.py:372
 
#, python-format
 
msgid "Successfully committed to %s"
 
msgstr "Committ wykonany do %s"
 

	
 
#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378
 
#: rhodecode/controllers/files.py:313
 
#: rhodecode/controllers/files.py:378
 
msgid "Error occurred during commit"
 
msgstr "Wystąpił błąd w trakcie zatwierdzania"
 

	
 
@@ -178,13 +173,17 @@ msgstr "Nieznany typ archiwum"
 
msgid "Changesets"
 
msgstr "Różnice"
 

	
 
#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:74
 
#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550
 
#: rhodecode/controllers/files.py:565
 
#: rhodecode/controllers/pullrequests.py:74
 
#: rhodecode/controllers/summary.py:236
 
#: rhodecode/model/scm.py:550
 
msgid "Branches"
 
msgstr "Gałęzie"
 

	
 
#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:78
 
#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561
 
#: rhodecode/controllers/files.py:566
 
#: rhodecode/controllers/pullrequests.py:78
 
#: rhodecode/controllers/summary.py:237
 
#: rhodecode/model/scm.py:561
 
msgid "Tags"
 
msgstr "Etykiety"
 

	
 
@@ -198,11 +197,13 @@ msgstr "gałęzi %s w repozytorium %s"
 
msgid "An error occurred during repository forking %s"
 
msgstr "Wystąpił błąd podczas rozgałęzienia %s repozytorium"
 

	
 
#: rhodecode/controllers/journal.py:218 rhodecode/controllers/journal.py:261
 
#: rhodecode/controllers/journal.py:218
 
#: rhodecode/controllers/journal.py:261
 
msgid "public journal"
 
msgstr "Dziennik publiczny"
 

	
 
#: rhodecode/controllers/journal.py:222 rhodecode/controllers/journal.py:265
 
#: rhodecode/controllers/journal.py:222
 
#: rhodecode/controllers/journal.py:265
 
#: rhodecode/templates/base/base.html:232
 
#: rhodecode/templates/journal/journal.html:12
 
msgid "journal"
 
@@ -217,12 +218,11 @@ msgid "Your password reset link was sent
 
msgstr "Twój link zresetowania hasła został wysłany"
 

	
 
#: rhodecode/controllers/login.py:184
 
msgid ""
 
"Your password reset was successful, new password has been sent to your "
 
"email"
 
msgid "Your password reset was successful, new password has been sent to your email"
 
msgstr "Twoje hasło zostało zresetowane, nowe hasło zostanie wysłane na e-mail"
 

	
 
#: rhodecode/controllers/pullrequests.py:76 rhodecode/model/scm.py:556
 
#: rhodecode/controllers/pullrequests.py:76
 
#: rhodecode/model/scm.py:556
 
msgid "Bookmarks"
 
msgstr "Zakładki"
 

	
 
@@ -247,8 +247,9 @@ msgid "Successfully deleted pull request
 
msgstr "Prośba o skasowanie połączenia gałęzi została wykonana prawidłowo"
 

	
 
#: rhodecode/controllers/pullrequests.py:452
 
#, fuzzy
 
msgid "Closing pull request on other statuses than rejected or approved forbidden"
 
msgstr ""
 
msgstr "Zamknij wszystkie wnioski połączenia gałęzi innych stanów niż odrzucony, zatwierdzony lub zabroniony"
 

	
 
#: rhodecode/controllers/search.py:134
 
msgid "Invalid search query. Try quoting it."
 
@@ -315,14 +316,12 @@ msgid "Statistics are disabled for this 
 
msgstr "Statystyki są wyłączone dla tego repozytorium"
 

	
 
#: rhodecode/controllers/admin/defaults.py:96
 
#, fuzzy
 
msgid "Default settings updated successfully"
 
msgstr "Ustawienia LDAP zostały zaktualizowane"
 
msgstr "Domyślne ustawienia zostały pomyślnie zaktualizowane"
 

	
 
#: rhodecode/controllers/admin/defaults.py:110
 
#, fuzzy
 
msgid "error occurred during update of defaults"
 
msgstr "wystąpił błąd podczas aktualizacji użytkownika %s"
 
msgstr "wystąpił błąd podczas aktualizacji wartości domyślnych"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:50
 
msgid "BASE"
 
@@ -500,7 +499,8 @@ msgstr "Zaktualizowano widoczność stron w publicznym dzienniku"
 
msgid "An error occurred during setting this repository in public journal"
 
msgstr "Wystąpił błąd podczas ustawiania tego repozytorium w dzienniku publicznym"
 

	
 
#: rhodecode/controllers/admin/repos.py:452 rhodecode/model/validators.py:300
 
#: rhodecode/controllers/admin/repos.py:452
 
#: rhodecode/model/validators.py:300
 
msgid "Token mismatch"
 
msgstr "Niezgodność tokenu"
 

	
 
@@ -576,9 +576,7 @@ msgstr "Wystąpił błąd podczas usuwania grup i grup użytkowników"
 
#: rhodecode/controllers/admin/settings.py:123
 
#, python-format
 
msgid "Repositories successfully rescanned added: %s,removed: %s"
 
msgstr ""
 
"Repozytoria z powodzeniem zostały ponownie zeskanowane dodano: %s, "
 
"usunięto: %s"
 
msgstr "Repozytoria z powodzeniem zostały ponownie zeskanowane dodano: %s, usunięto: %s"
 

	
 
#: rhodecode/controllers/admin/settings.py:131
 
msgid "Whoosh reindex task scheduled"
 
@@ -623,9 +621,7 @@ msgstr "E-mail został wysłany"
 

	
 
#: rhodecode/controllers/admin/settings.py:399
 
msgid "You can't edit this user since it's crucial for entire application"
 
msgstr ""
 
"Nie możesz edytować tego użytkownika ponieważ jest kluczowy dla całej "
 
"aplikacji"
 
msgstr "Nie możesz edytować tego użytkownika ponieważ jest kluczowy dla całej aplikacji"
 

	
 
#: rhodecode/controllers/admin/settings.py:430
 
msgid "Your account was updated successfully"
 
@@ -755,9 +751,7 @@ msgstr "plik binarny"
 

	
 
#: rhodecode/lib/diffs.py:90
 
msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 
msgstr ""
 
"Lista zmian była zbyt duża i została obcięta, użyj menu porównań żeby "
 
"wyświetlić różnice"
 
msgstr "Lista zmian była zbyt duża i została obcięta, użyj menu porównań żeby wyświetlić różnice"
 

	
 
#: rhodecode/lib/diffs.py:100
 
msgid "No changes detected"
 
@@ -808,7 +802,8 @@ msgstr "i"
 
msgid "%s more"
 
msgstr "%s więcej"
 

	
 
#: rhodecode/lib/helpers.py:617 rhodecode/templates/changelog/changelog.html:51
 
#: rhodecode/lib/helpers.py:617
 
#: rhodecode/templates/changelog/changelog.html:51
 
msgid "revisions"
 
msgstr "rewizja"
 

	
 
@@ -828,7 +823,8 @@ msgstr "Połączonych gałęzi #%s"
 
msgid "[deleted] repository"
 
msgstr "[usunięte] repozytorium"
 

	
 
#: rhodecode/lib/helpers.py:666 rhodecode/lib/helpers.py:676
 
#: rhodecode/lib/helpers.py:666
 
#: rhodecode/lib/helpers.py:676
 
msgid "[created] repository"
 
msgstr "[utworzone] repozytorium"
 

	
 
@@ -836,11 +832,13 @@ msgstr "[utworzone] repozytorium"
 
msgid "[created] repository as fork"
 
msgstr "[utworzone] repozytorium jako rozgałęzienie"
 

	
 
#: rhodecode/lib/helpers.py:670 rhodecode/lib/helpers.py:678
 
#: rhodecode/lib/helpers.py:670
 
#: rhodecode/lib/helpers.py:678
 
msgid "[forked] repository"
 
msgstr "[rozgałęzione] repozytorium"
 

	
 
#: rhodecode/lib/helpers.py:672 rhodecode/lib/helpers.py:680
 
#: rhodecode/lib/helpers.py:672
 
#: rhodecode/lib/helpers.py:680
 
msgid "[updated] repository"
 
msgstr "[zaktualizowane] repozytorium"
 

	
 
@@ -911,14 +909,8 @@ msgstr "Brak Plików"
 

	
 
#: rhodecode/lib/helpers.py:1163
 
#, python-format
 
msgid ""
 
"%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"
 
msgstr ""
 
"%s repozytorium nie jest mapowane do db może zostało utworzone lub "
 
"zmienione z systemie plików proszę uruchomić aplikację ponownie, aby "
 
"ponownie przeskanować repozytoria"
 
msgid "%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"
 
msgstr "%s repozytorium nie jest mapowane do db może zostało utworzone lub zmienione z systemie plików proszę uruchomić aplikację ponownie, aby ponownie przeskanować repozytoria"
 

	
 
#: rhodecode/lib/utils2.py:403
 
#, python-format
 
@@ -996,83 +988,103 @@ msgstr "przed chwilą"
 
msgid "password reset link"
 
msgstr "łącze resetowania hasła"
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 rhodecode/model/db.py:1183
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163
 
#: rhodecode/model/db.py:1183
 
msgid "Repository no access"
 
msgstr "Brak dostępu do repozytorium"
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1184
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164
 
#: rhodecode/model/db.py:1184
 
msgid "Repository read access"
 
msgstr "Repozytorium do odczytu"
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1185
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165
 
#: rhodecode/model/db.py:1185
 
msgid "Repository write access"
 
msgstr "Repozytorium do zapisu"
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1186
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166
 
#: rhodecode/model/db.py:1186
 
msgid "Repository admin access"
 
msgstr "Administracja dostępu do repozytorium"
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1188
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168
 
#: rhodecode/model/db.py:1188
 
msgid "Repositories Group no access"
 
msgstr "Grupy repozytoriów brak dostępu"
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1189
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169
 
#: rhodecode/model/db.py:1189
 
msgid "Repositories Group read access"
 
msgstr "Grupy repozytoriów dostęp do odczytu"
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1190
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170
 
#: rhodecode/model/db.py:1190
 
msgid "Repositories Group write access"
 
msgstr "Grupy repozytoriów dostęp do zapisu"
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1191
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171
 
#: rhodecode/model/db.py:1191
 
msgid "Repositories Group admin access"
 
msgstr "Repozytoria Grupy dostęp administratora"
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1193
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173
 
#: rhodecode/model/db.py:1193
 
msgid "RhodeCode Administrator"
 
msgstr "Administrator Repo"
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1194
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174
 
#: rhodecode/model/db.py:1194
 
msgid "Repository creation disabled"
 
msgstr "Repozytorium wyłączone"
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1195
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175
 
#: rhodecode/model/db.py:1195
 
msgid "Repository creation enabled"
 
msgstr "Repozytorium włączone"
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1196
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176
 
#: rhodecode/model/db.py:1196
 
msgid "Repository forking disabled"
 
msgstr "Rozwidlenie repozytorium wyłączone"
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1197
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177
 
#: rhodecode/model/db.py:1197
 
msgid "Repository forking enabled"
 
msgstr "Rozwidlenie repozytorium włączone"
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1198
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178
 
#: rhodecode/model/db.py:1198
 
msgid "Register disabled"
 
msgstr "Rejestracja wyłączona"
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1199
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179
 
#: rhodecode/model/db.py:1199
 
msgid "Register new user with RhodeCode with manual activation"
 
msgstr "Rejestracja nowego użytkownika na stronie z ręczną aktywacją"
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1202
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182
 
#: rhodecode/model/db.py:1202
 
msgid "Register new user with RhodeCode with auto activation"
 
msgstr "Rejestracja nowego użytkownika na stronie z automatyczną aktywacją"
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1643
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623
 
#: rhodecode/model/db.py:1643
 
msgid "Not Reviewed"
 
msgstr "Brak Korekty"
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1644
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624
 
#: rhodecode/model/db.py:1644
 
msgid "Approved"
 
msgstr "Zaakceptowano"
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1645
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625
 
#: rhodecode/model/db.py:1645
 
msgid "Rejected"
 
msgstr "Odrzucono"
 

	
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1646
 
#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626
 
#: rhodecode/model/db.py:1646
 
msgid "Under Review"
 
msgstr "Objęty Przeglądem"
 

	
 
@@ -1146,29 +1158,23 @@ msgstr "ostatni tip"
 
msgid "new user registration"
 
msgstr "nowy użytkownik się zarejestrował"
 

	
 
#: rhodecode/model/user.py:257 rhodecode/model/user.py:281
 
#: rhodecode/model/user.py:257
 
#: rhodecode/model/user.py:281
 
#: rhodecode/model/user.py:303
 
msgid "You can't Edit this user since it's crucial for entire application"
 
msgstr ""
 
"Nie możesz edytować tego użytkownika ponieważ jest kluczowy dla całej "
 
"aplikacji"
 
msgstr "Nie możesz edytować tego użytkownika ponieważ jest kluczowy dla całej aplikacji"
 

	
 
#: rhodecode/model/user.py:327
 
msgid "You can't remove this user since it's crucial for entire application"
 
msgstr ""
 
"Nie możesz usunąć tego użytkownika ponieważ jest kluczowy dla całej "
 
"aplikacji"
 
msgstr "Nie możesz usunąć tego użytkownika ponieważ jest kluczowy dla całej aplikacji"
 

	
 
#: rhodecode/model/user.py:333
 
#, python-format
 
msgid ""
 
"user \"%s\" still owns %s repositories and cannot be removed. Switch "
 
"owners or remove those repositories. %s"
 
msgstr ""
 
"użytkownik \"%s\" wciąż posiada repozytoria następujące %s i nie może "
 
"zostać usunięty. Zmień właściciela lub usuń te repozytoria. %s"
 

	
 
#: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37
 
msgid "user \"%s\" still owns %s repositories and cannot be removed. Switch owners or remove those repositories. %s"
 
msgstr "użytkownik \"%s\" wciąż posiada repozytoria następujące %s i nie może zostać usunięty. Zmień właściciela lub usuń te repozytoria. %s"
 

	
 
#: rhodecode/model/validators.py:36
 
#: rhodecode/model/validators.py:37
 
msgid "Value cannot be an empty list"
 
msgstr "Wartość listy nie może być pusta"
 

	
 
@@ -1183,12 +1189,8 @@ msgid "Username \"%(username)s\" is forb
 
msgstr "Nazwa użytkownika \"%(username)s\" jest zabroniona"
 

	
 
#: rhodecode/model/validators.py:87
 
msgid ""
 
"Username may only contain alphanumeric characters underscores, periods or"
 
" dashes and must begin with alphanumeric character"
 
msgstr ""
 
"Nazwa użytkownika może zawierać tylko znaki alfanumeryczne, podkreślenia,"
 
" kropki lub myślniki i musi zaczynać się znakiem alfanumerycznym"
 
msgid "Username may only contain alphanumeric characters underscores, periods or dashes and must begin with alphanumeric character"
 
msgstr "Nazwa użytkownika może zawierać tylko znaki alfanumeryczne, podkreślenia, kropki lub myślniki i musi zaczynać się znakiem alfanumerycznym"
 

	
 
#: rhodecode/model/validators.py:115
 
#, python-format
 
@@ -1205,12 +1207,8 @@ msgid "Users group \"%(usersgroup)s\" al
 
msgstr "Nazwa grupy \"%(usersgroup)s\" już istnieje"
 

	
 
#: rhodecode/model/validators.py:137
 
msgid ""
 
"users group name may only contain  alphanumeric characters underscores, "
 
"periods or dashes and must begin with alphanumeric character"
 
msgstr ""
 
"Nazwa grupy może zawierać tylko znaki alfanumeryczne, podkreślenia, "
 
"kropki lub myślniki i musi zaczynać się znakiem alfanumerycznym"
 
msgid "users group name may only contain  alphanumeric characters underscores, periods or dashes and must begin with alphanumeric character"
 
msgstr "Nazwa grupy może zawierać tylko znaki alfanumeryczne, podkreślenia, kropki lub myślniki i musi zaczynać się znakiem alfanumerycznym"
 

	
 
#: rhodecode/model/validators.py:175
 
msgid "Cannot assign this group as parent"
 
@@ -1300,12 +1298,8 @@ msgid "e-mail \"%(email)s\" does not exi
 
msgstr "e-mail \"%(email)s\" nie istnieje."
 

	
 
#: rhodecode/model/validators.py:663
 
msgid ""
 
"The LDAP Login attribute of the CN must be specified - this is the name "
 
"of the attribute that is equivalent to \"username\""
 
msgstr ""
 
"Atrybut logowania CN do LDAP należy określić, jest to nazwa atrybutu, "
 
"który jest odpowiednikiem  \"username\""
 
msgid "The LDAP Login attribute of the CN must be specified - this is the name of the attribute that is equivalent to \"username\""
 
msgstr "Atrybut logowania CN do LDAP należy określić, jest to nazwa atrybutu, który jest odpowiednikiem  \"username\""
 

	
 
#: rhodecode/model/validators.py:682
 
#, python-format
 
@@ -1498,7 +1492,8 @@ msgstr "Błąd danych."
 
msgid "Loading..."
 
msgstr "Wczytywanie..."
 

	
 
#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54
 
#: rhodecode/templates/login.html:5
 
#: rhodecode/templates/login.html:54
 
msgid "Sign In"
 
msgstr "Zaloguj się"
 

	
 
@@ -1506,7 +1501,8 @@ msgstr "Zaloguj się"
 
msgid "Sign In to"
 
msgstr "Zarejestruj się"
 

	
 
#: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20
 
#: rhodecode/templates/login.html:31
 
#: rhodecode/templates/register.html:20
 
#: rhodecode/templates/admin/admin_log.html:5
 
#: rhodecode/templates/admin/users/user_add.html:32
 
#: rhodecode/templates/admin/users/user_edit.html:50
 
@@ -1516,7 +1512,8 @@ msgstr "Zarejestruj się"
 
msgid "Username"
 
msgstr "Nazwa użytkownika"
 

	
 
#: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
 
#: rhodecode/templates/login.html:40
 
#: rhodecode/templates/register.html:29
 
#: rhodecode/templates/admin/ldap/ldap.html:46
 
#: rhodecode/templates/admin/users/user_add.html:41
 
#: rhodecode/templates/base/base.html:92
 
@@ -1531,7 +1528,8 @@ msgstr "Zapamiętaj mnie"
 
msgid "Forgot your password ?"
 
msgstr "Zapomniałeś hasła?"
 

	
 
#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103
 
#: rhodecode/templates/login.html:63
 
#: rhodecode/templates/base/base.html:103
 
msgid "Don't have an account ?"
 
msgstr "Nie masz konta?"
 

	
 
@@ -1555,7 +1553,8 @@ msgstr "Zresetuj swoje hasło"
 
msgid "Password reset link will be send to matching email address"
 
msgstr "Link do zresetowania hasła zostanie wysłany na adres e-mail"
 

	
 
#: rhodecode/templates/register.html:5 rhodecode/templates/register.html:74
 
#: rhodecode/templates/register.html:5
 
#: rhodecode/templates/register.html:74
 
msgid "Sign Up"
 
msgstr "Zarejestruj się"
 

	
 
@@ -1646,24 +1645,22 @@ msgid "Admin journal"
 
msgstr "Dziennik administratora"
 

	
 
#: rhodecode/templates/admin/admin.html:10
 
#, fuzzy
 
msgid "journal filter..."
 
msgstr "szybki filtr..."
 
msgstr "szybkie wyszukiwanie..."
 

	
 
#: rhodecode/templates/admin/admin.html:12
 
#: rhodecode/templates/journal/journal.html:11
 
#, fuzzy
 
msgid "filter"
 
msgstr "pliki"
 
msgstr "filtr"
 

	
 
#: rhodecode/templates/admin/admin.html:13
 
#: rhodecode/templates/journal/journal.html:12
 
#, python-format
 
msgid "%s entry"
 
msgid_plural "%s entries"
 
msgstr[0] ""
 
msgstr[1] ""
 
msgstr[2] ""
 
msgstr[0] "%s wejście"
 
msgstr[1] "%s wejść"
 
msgstr[2] "%s wejść"
 

	
 
#: rhodecode/templates/admin/admin_log.html:6
 
#: rhodecode/templates/admin/repos/repos.html:74
 
@@ -1699,14 +1696,12 @@ msgstr "Brak akcji"
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:5
 
#: rhodecode/templates/admin/defaults/defaults.html:25
 
#, fuzzy
 
msgid "Repositories defaults"
 
msgstr "grupy w repozytorium"
 
msgstr "Repozytoria domyślne"
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:11
 
#, fuzzy
 
msgid "Defaults"
 
msgstr "domyślne"
 
msgstr "Domyślne"
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:35
 
#: rhodecode/templates/admin/repos/repo_add_base.html:38
 
@@ -1719,12 +1714,8 @@ msgstr "Typ"
 
#: rhodecode/templates/admin/repos/repo_edit.html:89
 
#: rhodecode/templates/forks/fork.html:72
 
#: rhodecode/templates/settings/repo_settings.html:80
 
msgid ""
 
"Private repositories are only visible to people explicitly added as "
 
"collaborators."
 
msgstr ""
 
"Prywatne repozytoria są widoczne tylko dla osób bezpośrednio dodanych "
 
"jako współpracownicy."
 
msgid "Private repositories are only visible to people explicitly added as collaborators."
 
msgstr "Prywatne repozytoria są widoczne tylko dla osób bezpośrednio dodanych jako współpracownicy."
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:55
 
#: rhodecode/templates/admin/repos/repo_edit.html:94
 
@@ -1900,14 +1891,8 @@ msgid "Anonymous access"
 
msgstr "Dostęp anonimowy"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:49
 
msgid ""
 
"All default permissions on each repository will be reset to choosen "
 
"permission, note that all custom default permission on repositories will "
 
"be lost"
 
msgstr ""
 
"Wszystkie uprawnienia domyślne każdego repozytorium zostaną przywrócone. "
 
"Wybrane uprawnienie zostaną skasowane. Pamiętaj, że wszystkie "
 
"niestandardowe uprawnienia w repozytoriach zostaną utracone."
 
msgid "All default permissions on each repository will be reset to choosen permission, note that all custom default permission on repositories will be lost"
 
msgstr "Wszystkie uprawnienia domyślne każdego repozytorium zostaną przywrócone. Wybrane uprawnienie zostaną skasowane. Pamiętaj, że wszystkie niestandardowe uprawnienia w repozytoriach zostaną utracone."
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:50
 
#: rhodecode/templates/admin/permissions/permissions.html:63
 
@@ -1924,14 +1909,8 @@ msgid "Repository group"
 
msgstr "Repozytorium grupy"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:62
 
msgid ""
 
"All default permissions on each repository group will be reset to choosen"
 
" permission, note that all custom default permission on repositories "
 
"group will be lost"
 
msgstr ""
 
"Wszystkie uprawnienia domyślne każdego repozytorium zostaną przywrócone. "
 
"Wybrane uprawnienie zostaną skasowane. Pamiętaj, że wszystkie "
 
"niestandardowe uprawnienia w repozytoriach zostaną utracone."
 
msgid "All default permissions on each repository group will be reset to choosen permission, note that all custom default permission on repositories group will be lost"
 
msgstr "Wszystkie uprawnienia domyślne każdego repozytorium zostaną przywrócone. Wybrane uprawnienie zostaną skasowane. Pamiętaj, że wszystkie niestandardowe uprawnienia w repozytoriach zostaną utracone."
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:69
 
msgid "Registration"
 
@@ -2112,12 +2091,8 @@ msgid "Confirm to invalidate repository 
 
msgstr "Potwierdź unieważnienie pamięci podręcznej repozytorium"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:193
 
msgid ""
 
"Manually invalidate cache for this repository. On first access repository"
 
" will be cached again"
 
msgstr ""
 
"Ręcznie unieważnienie cache dla tego repozytorium. Przy pierwszym "
 
"dostępie do repozytorium zostanie dodany do bufora ponownie"
 
msgid "Manually invalidate cache for this repository. On first access repository will be cached again"
 
msgstr "Ręcznie unieważnienie cache dla tego repozytorium. Przy pierwszym dostępie do repozytorium zostanie dodany do bufora ponownie"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:198
 
msgid "List of cached values"
 
@@ -2125,12 +2100,11 @@ msgstr "Lista buforowanych wartości"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:201
 
msgid "Prefix"
 
msgstr ""
 
msgstr "Prefiks"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:202
 
#, fuzzy
 
msgid "Key"
 
msgstr "Klucz API"
 
msgstr "Klucz"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:203
 
#: rhodecode/templates/admin/users/user_add.html:86
 
@@ -2156,12 +2130,8 @@ msgid "Add to public journal"
 
msgstr "Dodaj do dziennika publicznego"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:231
 
msgid ""
 
"All actions made on this repository will be accessible to everyone in "
 
"public journal"
 
msgstr ""
 
"Wszystkie działania wykonywane na tym repozytorium będą dostępne dla "
 
"wszystkich w dzienniku publicznym"
 
msgid "All actions made on this repository will be accessible to everyone in public journal"
 
msgstr "Wszystkie działania wykonywane na tym repozytorium będą dostępne dla wszystkich w dzienniku publicznym"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:238
 
msgid "Locking"
 
@@ -2189,9 +2159,7 @@ msgstr "Repozytorium nie jest zablokowan
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:252
 
msgid "Force locking on repository. Works only when anonymous access is disabled"
 
msgstr ""
 
"Wymuś blokowanie na repozytorium. Działa tylko wtedy, gdy dostęp "
 
"anonimowy jest wyłączony"
 
msgstr "Wymuś blokowanie na repozytorium. Działa tylko wtedy, gdy dostęp anonimowy jest wyłączony"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:259
 
msgid "Set as fork of"
 
@@ -2218,15 +2186,8 @@ msgstr "Potwierdź, aby usunąć repozytorium"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:282
 
#: rhodecode/templates/settings/repo_settings.html:119
 
#, fuzzy
 
msgid ""
 
"This repository will be renamed in a special way in order to be "
 
"unaccesible for RhodeCode and VCS systems. If you need fully delete it "
 
"from file system please do it manually"
 
msgstr ""
 
"To repozytorium zostanie zmienione w sposób szczególny, żeby było "
 
"niedostępne dla strony i systemów VCS. Jeśli chcesz całkowicie usunąć go "
 
"z systemu plików prosimy zrobić to ręcznie"
 
msgid "This repository will be renamed in a special way in order to be unaccesible for RhodeCode and VCS systems. If you need fully delete it from file system please do it manually"
 
msgstr "To repozytorium zostanie zmienione w sposób szczególny, żeby było niedostępne dla strony i systemów VCS. Jeśli chcesz całkowicie usunąć go z systemu plików prosimy zrobić to ręcznie"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:3
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3
 
@@ -2295,14 +2256,14 @@ msgid "Repositories administration"
 
msgstr "Administracja repozytoriami"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73
 
#, fuzzy
 
msgid "apply to children"
 
msgstr ""
 
msgstr "dotyczy dzieci"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74
 
msgid ""
 
"Set or revoke permission to all children of that group, including "
 
"repositories and other groups"
 
msgstr ""
 
#, fuzzy
 
msgid "Set or revoke permission to all children of that group, including repositories and other groups"
 
msgstr "Ustawia lub cofa uprawnienia do wszystkich dzieci z tej grupy, w tym repozytoria oraz innych grup"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:9
 
#: rhodecode/templates/base/base.html:122
 
@@ -2320,7 +2281,8 @@ msgstr ""
 
#: rhodecode/templates/files/files_add.html:15
 
#: rhodecode/templates/files/files_edit.html:15
 
#: rhodecode/templates/followers/followers.html:9
 
#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9
 
#: rhodecode/templates/forks/fork.html:9
 
#: rhodecode/templates/forks/forks.html:9
 
#: rhodecode/templates/pullrequests/pullrequest.html:8
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:8
 
#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
 
@@ -2370,12 +2332,8 @@ msgid "edit repos group"
 
msgstr "edytuj grupy repo"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70
 
msgid ""
 
"Enable lock-by-pulling on group. This option will be applied to all other"
 
" groups and repositories inside"
 
msgstr ""
 
"Włącz blokowanie pulling przez grupy. Opcja ta będzie stosowana do "
 
"wszystkich innych grup i repozytoriów wewnątrz"
 
msgid "Enable lock-by-pulling on group. This option will be applied to all other groups and repositories inside"
 
msgstr "Włącz blokowanie pulling przez grupy. Opcja ta będzie stosowana do wszystkich innych grup i repozytoriów wewnątrz"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5
 
msgid "Repositories groups administration"
 
@@ -2404,12 +2362,12 @@ msgid "delete"
 
msgstr "usuń"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55
 
#, fuzzy, python-format
 
#, python-format
 
msgid "Confirm to delete this group: %s with %s repository"
 
msgid_plural "Confirm to delete this group: %s with %s repositories"
 
msgstr[0] "Potwierdz aby usunąć grupę %s wraz z %s repozytorium"
 
msgstr[1] "Potwierdz aby usunąć grupę %s wraz z %s repozytoriami"
 
msgstr[2] "Potwierdz aby usunąć grupę %s wraz z %s repozytoriami"
 
msgstr[0] "Potwierdź żeby usunąć grupę %s wraz z %s repozytorium"
 
msgstr[1] "Potwierdź żeby usunąć grupę %s wraz z %s repozytoriami"
 
msgstr[2] "Potwierdź żeby usunąć grupę %s wraz z %s repozytoriami"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63
 
msgid "There are no repositories groups yet"
 
@@ -2451,26 +2409,16 @@ msgid "rescan option"
 
msgstr "ponowne skanowanie opcji"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:38
 
msgid ""
 
"In case a repository was deleted from filesystem and there are leftovers "
 
"in the database check this option to scan obsolete data in database and "
 
"remove it."
 
msgstr ""
 
"W przypadku repozytoriów zostaną usunięte systemy plików i jeśli są "
 
"pozostałości w bazie danych to ta opcja sprawdzi ją oraz przeskanuje, a "
 
"następnie usunie je z bazy danych."
 
msgid "In case a repository was deleted from filesystem and there are leftovers in the database check this option to scan obsolete data in database and remove it."
 
msgstr "W przypadku repozytoriów zostaną usunięte systemy plików i jeśli są pozostałości w bazie danych to ta opcja sprawdzi ją oraz przeskanuje, a następnie usunie je z bazy danych."
 

	
 
#: rhodecode/templates/admin/settings/settings.html:39
 
msgid "destroy old data"
 
msgstr "zniszcz stare dane"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:41
 
msgid ""
 
"Rescan repositories location for new repositories. Also deletes obsolete "
 
"if `destroy` flag is checked "
 
msgstr ""
 
"Skanowanie ponowne lokalizacji dla nowych repozytoriów. Usuwa również "
 
"nieaktualne jeśli została zaznaczona flaga `zniszcz` do sprawdzana"
 
msgid "Rescan repositories location for new repositories. Also deletes obsolete if `destroy` flag is checked "
 
msgstr "Skanowanie ponowne lokalizacji dla nowych repozytoriów. Usuwa również nieaktualne jeśli została zaznaczona flaga `zniszcz` do sprawdzana"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:46
 
msgid "Rescan repositories"
 
@@ -2519,9 +2467,8 @@ msgid "Visualisation settings"
 
msgstr "Ustawienia wizualizacji"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:127
 
#, fuzzy
 
msgid "General"
 
msgstr "włącz"
 
msgstr "Główne"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:132
 
msgid "Use lightweight dashboard"
 
@@ -2560,12 +2507,8 @@ msgid "require ssl for vcs operations"
 
msgstr "wymagaj ssl dla operacji vcs"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:203
 
msgid ""
 
"RhodeCode will require SSL for pushing or pulling. If SSL is missing it "
 
"will return HTTP Error 406: Not Acceptable"
 
msgstr ""
 
"RhodeCode wymaga SSL do wysłania zmian lub pobierania. Jeśli brakuje SSL "
 
"zwróci błąd HTTP 406: Not Acceptable"
 
msgid "RhodeCode will require SSL for pushing or pulling. If SSL is missing it will return HTTP Error 406: Not Acceptable"
 
msgstr "RhodeCode wymaga SSL do wysłania zmian lub pobierania. Jeśli brakuje SSL zwróci błąd HTTP 406: Not Acceptable"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:209
 
msgid "Hooks"
 
@@ -2604,26 +2547,16 @@ msgid "hgsubversion extensions"
 
msgstr "rozszerzenia hgsubversion"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:246
 
msgid ""
 
"Requires hgsubversion library installed. Allows clonning from svn remote "
 
"locations"
 
msgstr ""
 
"Wymaga biblioteki hgsubversion zainstalowanej. Umożliwia klonowanie z "
 
"zdalnych lokalizacji svn"
 
msgid "Requires hgsubversion library installed. Allows clonning from svn remote locations"
 
msgstr "Wymaga biblioteki hgsubversion zainstalowanej. Umożliwia klonowanie z zdalnych lokalizacji svn"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:256
 
msgid "Repositories location"
 
msgstr "Położenie repozytorium"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:261
 
msgid ""
 
"This a crucial application setting. If you are really sure you need to "
 
"change this, you must restart application in order to make this setting "
 
"take effect. Click this label to unlock."
 
msgstr ""
 
"To kluczowe ustawienia aplikacji. Jeśli jesteś pewny, że chcesz to "
 
"zmienić, należy ponownie uruchomić aplikację w celu zaktualizowania "
 
"lokalizacji. Kliknij tą etykietę, żeby odblokować."
 
msgid "This a crucial application setting. If you are really sure you need to change this, you must restart application in order to make this setting take effect. Click this label to unlock."
 
msgstr "To kluczowe ustawienia aplikacji. Jeśli jesteś pewny, że chcesz to zmienić, należy ponownie uruchomić aplikację w celu zaktualizowania lokalizacji. Kliknij tą etykietę, żeby odblokować."
 

	
 
#: rhodecode/templates/admin/settings/settings.html:262
 
#: rhodecode/templates/base/base.html:221
 
@@ -2631,12 +2564,8 @@ msgid "unlock"
 
msgstr "odblokowany"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:263
 
msgid ""
 
"Location where repositories are stored. After changing this value a "
 
"restart, and rescan is required"
 
msgstr ""
 
"Miejsce, w którym przechowywane są repozytoria. Po zmianie tej wartości "
 
"jest wymagany restart i ponowne skanowanie"
 
msgid "Location where repositories are stored. After changing this value a restart, and rescan is required"
 
msgstr "Miejsce, w którym przechowywane są repozytoria. Po zmianie tej wartości jest wymagany restart i ponowne skanowanie"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:283
 
msgid "Test Email"
 
@@ -2716,12 +2645,8 @@ msgstr "Dziedziczą uprawnienia domyślne"
 
#: rhodecode/templates/admin/users/user_edit.html:156
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:113
 
#, python-format
 
msgid ""
 
"Select to inherit permissions from %s settings. With this selected below "
 
"options does not have any action"
 
msgstr ""
 
"Zaznacz, żeby dziedziczyć uprawnienia z %s ustawień. Po wybraniu tej "
 
"opcji, poniżej nie ma żadnych działań"
 
msgid "Select to inherit permissions from %s settings. With this selected below options does not have any action"
 
msgstr "Zaznacz, żeby dziedziczyć uprawnienia z %s ustawień. Po wybraniu tej opcji, poniżej nie ma żadnych działań"
 

	
 
#: rhodecode/templates/admin/users/user_edit.html:162
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:119
 
@@ -3010,7 +2935,8 @@ msgid "Products"
 
msgstr "Produkty"
 

	
 
#: rhodecode/templates/base/base.html:152
 
#: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47
 
#: rhodecode/templates/base/base.html:182
 
#: rhodecode/templates/base/root.html:47
 
msgid "loading..."
 
msgstr "wczytywanie..."
 

	
 
@@ -3064,7 +2990,8 @@ msgstr "ustawienia repozytorium"
 
msgid "fork"
 
msgstr "gałąż"
 

	
 
#: rhodecode/templates/base/base.html:212 rhodecode/templates/base/root.html:50
 
#: rhodecode/templates/base/base.html:212
 
#: rhodecode/templates/base/root.html:50
 
#: rhodecode/templates/changelog/changelog.html:43
 
msgid "Open new pull request"
 
msgstr "Otwórz nową prośbę o połączenie gałęzi"
 
@@ -3095,7 +3022,6 @@ msgid "permissions"
 
msgstr "uprawnienia"
 

	
 
#: rhodecode/templates/base/base.html:239
 
#, fuzzy
 
msgid "defaults"
 
msgstr "domyślne"
 

	
 
@@ -3215,9 +3141,8 @@ msgid "compare fork with %s"
 
msgstr "porównaj gałęzie %s"
 

	
 
#: rhodecode/templates/changelog/changelog.html:40
 
#, fuzzy
 
msgid "Compare fork with parent"
 
msgstr "porównaj fork w rodzicem"
 
msgstr "porównaj gałąź w rodzicem"
 

	
 
#: rhodecode/templates/changelog/changelog.html:49
 
msgid "Show"
 
@@ -3319,8 +3244,9 @@ msgid "Changeset"
 
msgstr "Grupy zmian"
 

	
 
#: rhodecode/templates/changeset/changeset.html:52
 
#, fuzzy
 
msgid "No children"
 
msgstr ""
 
msgstr "Brak dzieci"
 

	
 
#: rhodecode/templates/changeset/changeset.html:70
 
#: rhodecode/templates/changeset/diff_block.html:20
 
@@ -3357,22 +3283,22 @@ msgstr[2] "(%d linii)"
 
#: rhodecode/templates/changeset/changeset.html:122
 
#: rhodecode/templates/compare/compare_diff.html:44
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:76
 
#, fuzzy, python-format
 
#, python-format
 
msgid "%s file changed"
 
msgid_plural "%s files changed"
 
msgstr[0] "%s plik zmieniony"
 
msgstr[1] "%s plików zmienionych"
 
msgstr[2] "%s plików zmienionych"
 
msgstr[0] "%s plik został zmieniony"
 
msgstr[1] "%s pliki zostały zmienione"
 
msgstr[2] "%s plików zostało zmienionych"
 

	
 
#: rhodecode/templates/changeset/changeset.html:124
 
#: rhodecode/templates/compare/compare_diff.html:46
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:78
 
#, fuzzy, python-format
 
#, python-format
 
msgid "%s file changed with %s insertions and %s deletions"
 
msgid_plural "%s files changed with %s insertions and %s deletions"
 
msgstr[0] "%s plik zmieniony z %s inserjcami i %s usunieciami"
 
msgstr[1] "%s plików zmienionych z %s inserjcami i %s usunieciami"
 
msgstr[2] "%s plików zmienionych z %s inserjcami i %s usunieciami"
 
msgstr[0] "%s plik został zmieniony z %s inercjami i %s usunięciami"
 
msgstr[1] "%s plików zostało zmienionych z %s inercjami i %s usunięciami"
 
msgstr[2] "%s plików zostało zmienionych z %s inercjami i %s usunięciami"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:42
 
msgid "Submitting..."
 
@@ -3391,9 +3317,7 @@ msgstr "Komentarze analizowane za pomocą %s składni od %s wsparcia."
 
#: rhodecode/templates/changeset/changeset_file_comment.html:48
 
#: rhodecode/templates/changeset/changeset_file_comment.html:123
 
msgid "Use @username inside this text to send notification to this RhodeCode user"
 
msgstr ""
 
"Użyj @username wewnątrz tego tekstu, aby wysłać powiadomienie do "
 
"użytkownika strony"
 
msgstr "Użyj @username wewnątrz tego tekstu, aby wysłać powiadomienie do użytkownika strony"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:59
 
#: rhodecode/templates/changeset/changeset_file_comment.html:143
 
@@ -3440,9 +3364,8 @@ msgid "Compare View"
 
msgstr "Wyświetl Porównanie"
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:29
 
#, fuzzy
 
msgid "Show combined compare"
 
msgstr "pokaż online komentarz"
 
msgstr "Pokaż połączone porównaj"
 

	
 
#: rhodecode/templates/changeset/changeset_range.html:54
 
msgid "Files affected"
 
@@ -3462,18 +3385,17 @@ msgstr "Brak zestawienia zmian"
 

	
 
#: rhodecode/templates/compare/compare_diff.html:37
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:69
 
#, fuzzy, python-format
 
#, python-format
 
msgid "Showing %s commit"
 
msgid_plural "Showing %s commits"
 
msgstr[0] "Wyswietlane %s commit"
 
msgstr[1] "Wyswietlane %s commits"
 
msgstr[2] "Wyswietlane %s commits"
 
msgstr[0] "Pokaż %s komentarz"
 
msgstr[1] "Pokaż %s komentarze"
 
msgstr[2] "Pokaż %s komentarze"
 

	
 
#: rhodecode/templates/compare/compare_diff.html:52
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:84
 
#, fuzzy
 
msgid "No files"
 
msgstr "pliki"
 
msgstr "Brak plików"
 

	
 
#: rhodecode/templates/data_table/_dt_elements.html:39
 
#: rhodecode/templates/data_table/_dt_elements.html:41
 
@@ -3527,42 +3449,37 @@ msgid "Confirm to delete this user: %s"
 
msgstr "Potwierdź usunięcie tego użytkownika: %s"
 

	
 
#: rhodecode/templates/email_templates/changeset_comment.html:10
 
#, fuzzy
 
msgid "New status$"
 
msgstr "zmień status"
 
msgstr "Nowy status$"
 

	
 
#: rhodecode/templates/email_templates/main.html:8
 
#, fuzzy
 
msgid "This is a notification from RhodeCode."
 
msgstr "To jest powiadomienie z strony"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:4
 
msgid "Hello"
 
msgstr ""
 
msgstr "Witaj"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:6
 
msgid "We received a request to create a new password for your account."
 
msgstr ""
 
msgstr "Otrzymaliśmy prośbę o utworzenie nowego hasła do twojego konta."
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:8
 
msgid "You can generate it by clicking following URL"
 
msgstr ""
 
msgstr "Możesz wygenerować nowe hasło klikając w link URL poniżej:"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:12
 
msgid "If you didn't request new password please ignore this email."
 
msgstr ""
 
msgstr "Jeśli nie chcesz wygenerować nowego hasła to zignoruj tą wiadomość."
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:4
 
#, python-format
 
msgid ""
 
"User %s opened pull request for repository %s and wants you to review "
 
"changes."
 
msgstr ""
 
msgid "User %s opened pull request for repository %s and wants you to review changes."
 
msgstr "Użytkownik %s zgłosił wniosek połączenia w repozytorium %s i chce żeby sprawdzić zmiany."
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:5
 
#, fuzzy
 
msgid "title"
 
msgstr "Tytuł"
 
msgstr "tytuł"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:6
 
#: rhodecode/templates/pullrequests/pullrequest.html:115
 
@@ -3571,37 +3488,32 @@ msgstr "opis"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:11
 
msgid "revisions for reviewing"
 
msgstr ""
 
msgstr "korekty dotyczące rewizji"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:18
 
#, fuzzy
 
msgid "View this pull request here"
 
msgstr "Pokarz wszystkie zmiany"
 
msgstr "Wyświetl prośby pobrania tutaj"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:4
 
#, fuzzy, python-format
 
#, python-format
 
msgid "User %s commented on pull request #%s for repository %s"
 
msgstr ""
 
"Użytkownik %s skomentował wniosek o połączenie gałęzi #%s dla "
 
"repozytorium %s"
 
msgstr "Użytkownik %s skomentował wniosek o połączenie gałęzi #%s dla repozytorium %s"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:10
 
#, fuzzy
 
msgid "New status"
 
msgstr "zmień status"
 
msgstr "Nowy status"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:14
 
msgid "View this comment here"
 
msgstr ""
 
msgstr "Zobacz ten komentarz tutaj"
 

	
 
#: rhodecode/templates/email_templates/registration.html:4
 
#, fuzzy
 
msgid "A new user have registered in RhodeCode"
 
msgstr "Udało Ci się zarejestrować na stronie"
 
msgstr "Nowy użytkownik został zarejestrowany na stronie"
 

	
 
#: rhodecode/templates/email_templates/registration.html:9
 
msgid "View this user here"
 
msgstr ""
 
msgstr "Zobacz tego użytkownika tutaj"
 

	
 
#: rhodecode/templates/errors/error_document.html:46
 
#, python-format
 
@@ -3771,9 +3683,8 @@ msgid "show at revision"
 
msgstr "wskaż zmiany"
 

	
 
#: rhodecode/templates/files/files_history_box.html:11
 
#, fuzzy
 
msgid "show full history"
 
msgstr "Wczytywanie listy plików..."
 
msgstr "pokaż pełną historię"
 

	
 
#: rhodecode/templates/files/files_history_box.html:16
 
#, python-format
 
@@ -3784,9 +3695,8 @@ msgstr[1] "%s autorzy"
 
msgstr[2] "%s autorzy"
 

	
 
#: rhodecode/templates/files/files_source.html:6
 
#, fuzzy
 
msgid "Load file history"
 
msgstr "Wczytywanie listy plików..."
 
msgstr "Załaduj historię pliku"
 

	
 
#: rhodecode/templates/files/files_source.html:21
 
msgid "show source"
 
@@ -4020,9 +3930,8 @@ msgid "Compare view"
 
msgstr "Wyświetl porównanie"
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:112
 
#, fuzzy
 
msgid "reviewer"
 
msgstr "%d recenzent"
 
msgstr "recenzent"
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show_all.html:4
 
msgid "all pull requests"
 
@@ -4089,14 +3998,12 @@ msgid "%s Settings"
 
msgstr "Ustawienia %s"
 

	
 
#: rhodecode/templates/settings/repo_settings.html:102
 
#, fuzzy
 
msgid "Delete repository"
 
msgstr "[skasowane] repozytorium"
 
msgstr "Usuń repozytorium"
 

	
 
#: rhodecode/templates/settings/repo_settings.html:109
 
#, fuzzy
 
msgid "Remove repo"
 
msgstr "usuń"
 
msgstr "Usuń repo"
 

	
 
#: rhodecode/templates/shortlog/shortlog.html:5
 
#, python-format
 
@@ -4296,9 +4203,8 @@ msgid "%s Tags"
 
msgstr "Etykiety pliku %s"
 

	
 
#: rhodecode/templates/tags/tags.html:29
 
#, fuzzy
 
msgid "Compare tags"
 
msgstr "porównanie"
 
msgstr "Porównaj tagi"
 

	
 
#~ msgid ""
 
#~ "%s repository is not mapped to db"
 
@@ -4325,4 +4231,3 @@ msgstr "porównanie"
 
#~ "zmienione w systemie plików proszę "
 
#~ "uruchomić aplikację ponownie, aby ponownie "
 
#~ "przeskanować repozytoria"
 

	
rhodecode/i18n/zh_CN/LC_MESSAGES/rhodecode.mo
Show inline comments
 
binary diff not shown
rhodecode/i18n/zh_CN/LC_MESSAGES/rhodecode.po
Show inline comments
 
@@ -8,15 +8,16 @@ msgid ""
 
msgstr ""
 
"Project-Id-Version: RhodeCode 1.4.4\n"
 
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 
"POT-Creation-Date: 2012-12-14 04:19+0100\n"
 
"PO-Revision-Date: 2012-11-26 15:19+0800\n"
 
"POT-Creation-Date: 2012-12-14 12:53+0800\n"
 
"PO-Revision-Date: 2012-12-14 12:57+0800\n"
 
"Last-Translator: xpol <xpolife@gmail.com>\n"
 
"Language-Team: mikespook\n"
 
"Plural-Forms: nplurals=1; plural=0\n"
 
"Plural-Forms: nplurals=1; plural=0;\n"
 
"MIME-Version: 1.0\n"
 
"Content-Type: text/plain; charset=utf-8\n"
 
"Content-Transfer-Encoding: 8bit\n"
 
"Generated-By: Babel 0.9.6\n"
 
"X-Generator: Poedit 1.5.4\n"
 

	
 
#: rhodecode/controllers/changelog.py:95
 
msgid "All Branches"
 
@@ -43,8 +44,8 @@ msgstr "状态修改为%s"
 

	
 
#: rhodecode/controllers/changeset.py:345
 
msgid ""
 
"Changing status on a changeset associated witha closed pull request is "
 
"not allowed"
 
"Changing status on a changeset associated witha closed pull request is not "
 
"allowed"
 
msgstr "不允许修改已关闭拉取请求的修订集状态"
 

	
 
#: rhodecode/controllers/compare.py:75
 
@@ -58,7 +59,8 @@ msgid "Home page"
 
msgstr "主页"
 

	
 
#: rhodecode/controllers/error.py:98
 
msgid "The request could not be understood by the server due to malformed syntax."
 
msgid ""
 
"The request could not be understood by the server due to malformed syntax."
 
msgstr "由于错误的语法,服务器无法对请求进行响应。"
 

	
 
#: rhodecode/controllers/error.py:101
 
@@ -211,8 +213,7 @@ msgstr "密码重置链接已经发送"
 

	
 
#: rhodecode/controllers/login.py:184
 
msgid ""
 
"Your password reset was successful, new password has been sent to your "
 
"email"
 
"Your password reset was successful, new password has been sent to your email"
 
msgstr "密码已经成功重置,新密码已经发送到你的邮箱"
 

	
 
#: rhodecode/controllers/pullrequests.py:76 rhodecode/model/scm.py:556
 
@@ -240,8 +241,9 @@ msgid "Successfully deleted pull request
 
msgstr "成功删除拉取请求"
 

	
 
#: rhodecode/controllers/pullrequests.py:452
 
msgid "Closing pull request on other statuses than rejected or approved forbidden"
 
msgstr ""
 
msgid ""
 
"Closing pull request on other statuses than rejected or approved forbidden"
 
msgstr "只能以批准或者驳回的状态关闭拉取请求"
 

	
 
#: rhodecode/controllers/search.py:134
 
msgid "Invalid search query. Try quoting it."
 
@@ -308,14 +310,12 @@ msgid "Statistics are disabled for this 
 
msgstr "该版本库统计功能已经禁用"
 

	
 
#: rhodecode/controllers/admin/defaults.py:96
 
#, fuzzy
 
msgid "Default settings updated successfully"
 
msgstr "LDAP设置已经成功更新"
 
msgstr "默认设置已经成功更新"
 

	
 
#: rhodecode/controllers/admin/defaults.py:110
 
#, fuzzy
 
msgid "error occurred during update of defaults"
 
msgstr "更新用户%s时发生错误"
 
msgstr "更新默认设置时发生错误"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:50
 
msgid "BASE"
 
@@ -654,11 +654,11 @@ msgstr "无法编辑该用户"
 

	
 
#: rhodecode/controllers/admin/users.py:272
 
msgid "Granted 'repository create' permission to user"
 
msgstr "已授予用户创建版本库的权限"
 
msgstr "已授予用户创建版本库的权限"
 

	
 
#: rhodecode/controllers/admin/users.py:277
 
msgid "Revoked 'repository create' permission to user"
 
msgstr "已撤销用户创建版本库的权限"
 
msgstr "已撤销用户创建版本库的权限"
 

	
 
#: rhodecode/controllers/admin/users.py:283
 
msgid "Granted 'repository fork' permission to user"
 
@@ -716,19 +716,19 @@ msgstr "删除用户组时发生错误"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:257
 
msgid "Granted 'repository create' permission to users group"
 
msgstr "已授予用户组创建版本库的权限"
 
msgstr "已授予用户组创建版本库的权限"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:262
 
msgid "Revoked 'repository create' permission to users group"
 
msgstr "已撤销用户组创建版本库的权限"
 
msgstr "已撤销用户组创建版本库的权限"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:268
 
msgid "Granted 'repository fork' permission to users group"
 
msgstr "已授予用户组复刻版本库的权限"
 
msgstr "已授予用户组复刻版本库的权限"
 

	
 
#: rhodecode/controllers/admin/users_groups.py:273
 
msgid "Revoked 'repository fork' permission to users group"
 
msgstr "已撤销用户组复刻版本库的权限"
 
msgstr "已撤销用户组复刻版本库的权限"
 

	
 
#: rhodecode/lib/auth.py:499
 
msgid "You need to be a registered user to perform this action"
 
@@ -743,7 +743,8 @@ msgid "binary file"
 
msgstr "二进制文件"
 

	
 
#: rhodecode/lib/diffs.py:90
 
msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 
msgid ""
 
"Changeset was too big and was cut off, use diff menu to display this diff"
 
msgstr "修订集因过大而被截断,可查看原始修订集作为替代"
 

	
 
#: rhodecode/lib/diffs.py:100
 
@@ -795,7 +796,8 @@ msgstr "还有"
 
msgid "%s more"
 
msgstr "%s个"
 

	
 
#: rhodecode/lib/helpers.py:617 rhodecode/templates/changelog/changelog.html:51
 
#: rhodecode/lib/helpers.py:617
 
#: rhodecode/templates/changelog/changelog.html:51
 
msgid "revisions"
 
msgstr "修订"
 

	
 
@@ -899,10 +901,11 @@ msgstr "没有文件"
 
#: rhodecode/lib/helpers.py:1163
 
#, python-format
 
msgid ""
 
"%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"
 
msgstr "版本库%s没有映射到数据库,可能是从文件系统创建或者重命名,请重启RhodeCode以重新扫描版本库"
 
"%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"
 
msgstr ""
 
"版本库%s没有映射到数据库,可能是从文件系统创建或者重命名,请重启RhodeCode以重"
 
"新扫描版本库"
 

	
 
#: rhodecode/lib/utils2.py:403
 
#, python-format
 
@@ -1130,9 +1133,10 @@ msgstr "由于是系统帐号,无法删除该用户"
 
#: rhodecode/model/user.py:333
 
#, python-format
 
msgid ""
 
"user \"%s\" still owns %s repositories and cannot be removed. Switch "
 
"owners or remove those repositories. %s"
 
msgstr "由于用户 \"%s\" 拥有版本库%s因而无法删除,请修改版本库所有者或删除版本库。%s"
 
"user \"%s\" still owns %s repositories and cannot be removed. Switch owners "
 
"or remove those repositories. %s"
 
msgstr ""
 
"由于用户 \"%s\" 拥有版本库%s因而无法删除,请修改版本库所有者或删除版本库。%s"
 

	
 
#: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37
 
msgid "Value cannot be an empty list"
 
@@ -1150,9 +1154,10 @@ msgstr "不允许用户名 \"%(username)s\""
 

	
 
#: rhodecode/model/validators.py:87
 
msgid ""
 
"Username may only contain alphanumeric characters underscores, periods or"
 
" dashes and must begin with alphanumeric character"
 
msgstr "只能使用字母、数字、下划线、小数点或减号作为用户名,且必须由数字或字母开头"
 
"Username may only contain alphanumeric characters underscores, periods or "
 
"dashes and must begin with alphanumeric character"
 
msgstr ""
 
"只能使用字母、数字、下划线、小数点或减号作为用户名,且必须由数字或字母开头"
 

	
 
#: rhodecode/model/validators.py:115
 
#, python-format
 
@@ -1172,7 +1177,8 @@ msgstr "用户组 \"%(usersgroup)s\" 已经存在"
 
msgid ""
 
"users group name may only contain  alphanumeric characters underscores, "
 
"periods or dashes and must begin with alphanumeric character"
 
msgstr "只能使用字母、数字、下划线、小数点或减号作为用户组名,且必须由数字或字母开头"
 
msgstr ""
 
"只能使用字母、数字、下划线、小数点或减号作为用户组名,且必须由数字或字母开头"
 

	
 
#: rhodecode/model/validators.py:175
 
msgid "Cannot assign this group as parent"
 
@@ -1263,8 +1269,8 @@ msgstr "邮件地址\"%(email)s\"不存在"
 

	
 
#: rhodecode/model/validators.py:663
 
msgid ""
 
"The LDAP Login attribute of the CN must be specified - this is the name "
 
"of the attribute that is equivalent to \"username\""
 
"The LDAP Login attribute of the CN must be specified - this is the name of "
 
"the attribute that is equivalent to \"username\""
 
msgstr "LDAP 登陆属性的 CN 必须指定 - 这个名字作为用户名"
 

	
 
#: rhodecode/model/validators.py:682
 
@@ -1606,22 +1612,20 @@ msgid "Admin journal"
 
msgstr "系统日志"
 

	
 
#: rhodecode/templates/admin/admin.html:10
 
#, fuzzy
 
msgid "journal filter..."
 
msgstr "快速过滤..."
 
msgstr "日志过滤..."
 

	
 
#: rhodecode/templates/admin/admin.html:12
 
#: rhodecode/templates/journal/journal.html:11
 
#, fuzzy
 
msgid "filter"
 
msgstr "文件"
 
msgstr "过滤"
 

	
 
#: rhodecode/templates/admin/admin.html:13
 
#: rhodecode/templates/journal/journal.html:12
 
#, python-format
 
msgid "%s entry"
 
msgid_plural "%s entries"
 
msgstr[0] ""
 
msgstr[0] "%s条"
 

	
 
#: rhodecode/templates/admin/admin_log.html:6
 
#: rhodecode/templates/admin/repos/repos.html:74
 
@@ -1657,14 +1661,12 @@ msgstr "无操作"
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:5
 
#: rhodecode/templates/admin/defaults/defaults.html:25
 
#, fuzzy
 
msgid "Repositories defaults"
 
msgstr "版本库组"
 
msgstr "版本库默认设置"
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:11
 
#, fuzzy
 
msgid "Defaults"
 
msgstr "默认"
 
msgstr "默认设置"
 

	
 
#: rhodecode/templates/admin/defaults/defaults.html:35
 
#: rhodecode/templates/admin/repos/repo_add_base.html:38
 
@@ -1858,9 +1860,10 @@ msgstr "匿名访问"
 
#: rhodecode/templates/admin/permissions/permissions.html:49
 
msgid ""
 
"All default permissions on each repository will be reset to choosen "
 
"permission, note that all custom default permission on repositories will "
 
"be lost"
 
msgstr "所有版本库的默认权限将被重置到选择的权限,所有版本库的自定义权限将被丢弃"
 
"permission, note that all custom default permission on repositories will be "
 
"lost"
 
msgstr ""
 
"所有版本库的默认权限将被重置到选择的权限,所有版本库的自定义权限将被丢弃"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:50
 
#: rhodecode/templates/admin/permissions/permissions.html:63
 
@@ -1877,12 +1880,12 @@ msgid "Repository group"
 
msgstr "版本库组"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:62
 
#, fuzzy
 
msgid ""
 
"All default permissions on each repository group will be reset to choosen"
 
" permission, note that all custom default permission on repositories "
 
"group will be lost"
 
msgstr "所有版本库的默认权限将被重置到选择的权限,所有版本库的自定义权限将被丢弃"
 
"All default permissions on each repository group will be reset to choosen "
 
"permission, note that all custom default permission on repositories group "
 
"will be lost"
 
msgstr ""
 
"所有版本库组的默认权限将被重置到选择的权限,所有版本库组的自定义权限将被丢弃"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:69
 
msgid "Registration"
 
@@ -1955,7 +1958,8 @@ msgstr "文件浏览、下载、whoosh和README的默认修订版本"
 
#: rhodecode/templates/admin/repos/repo_edit.html:79
 
#: rhodecode/templates/forks/fork.html:63
 
#: rhodecode/templates/settings/repo_settings.html:70
 
msgid "Keep it short and to the point. Use a README file for longer descriptions."
 
msgid ""
 
"Keep it short and to the point. Use a README file for longer descriptions."
 
msgstr "保持简短。用README文件来写更长的描述。"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:73
 
@@ -2064,8 +2068,8 @@ msgstr "确认清除版本库缓存"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:193
 
msgid ""
 
"Manually invalidate cache for this repository. On first access repository"
 
" will be cached again"
 
"Manually invalidate cache for this repository. On first access repository "
 
"will be cached again"
 
msgstr "手动清除版本库缓存。之后第一次访问的时候将重建缓存"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:198
 
@@ -2105,8 +2109,8 @@ msgstr "添加到公共日志"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:231
 
msgid ""
 
"All actions made on this repository will be accessible to everyone in "
 
"public journal"
 
"All actions made on this repository will be accessible to everyone in public "
 
"journal"
 
msgstr "任何人都可以在公共日志上看到这个版本库上的所有动作"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:238
 
@@ -2134,7 +2138,8 @@ msgid "Repository is not locked"
 
msgstr "版本库未锁定"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:252
 
msgid "Force locking on repository. Works only when anonymous access is disabled"
 
msgid ""
 
"Force locking on repository. Works only when anonymous access is disabled"
 
msgstr "强制锁定版本库。只有在禁止匿名访问时候才有效"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:259
 
@@ -2162,14 +2167,13 @@ msgstr "确认删除版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:282
 
#: rhodecode/templates/settings/repo_settings.html:119
 
#, fuzzy
 
msgid ""
 
"This repository will be renamed in a special way in order to be "
 
"unaccesible for RhodeCode and VCS systems. If you need fully delete it "
 
"from file system please do it manually"
 
"This repository will be renamed in a special way in order to be unaccesible "
 
"for RhodeCode and VCS systems. If you need fully delete it from file system "
 
"please do it manually"
 
msgstr ""
 
"这个版本库将以特殊的方式重命名这样RhodeCode和版本控制系统将不能访问它。\n"
 
"                         如果需要从文件系统完全删除,你需要手动操作"
 
"这个版本库将以特殊的方式重命名这样RhodeCode和版本控制系统将不能访问它。如果需"
 
"要从文件系统完全删除,请要手动操作"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:3
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3
 
@@ -2263,7 +2267,8 @@ msgstr "设置或者撤销该组所有成员的权限,包括版本库和其他组"
 
#: rhodecode/templates/files/files_add.html:15
 
#: rhodecode/templates/files/files_edit.html:15
 
#: rhodecode/templates/followers/followers.html:9
 
#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9
 
#: rhodecode/templates/forks/fork.html:9
 
#: rhodecode/templates/forks/forks.html:9
 
#: rhodecode/templates/pullrequests/pullrequest.html:8
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:8
 
#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
 
@@ -2314,8 +2319,8 @@ msgstr "编辑版本库组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70
 
msgid ""
 
"Enable lock-by-pulling on group. This option will be applied to all other"
 
" groups and repositories inside"
 
"Enable lock-by-pulling on group. This option will be applied to all other "
 
"groups and repositories inside"
 
msgstr "启用组的拉取锁定。这个选项将应用到组内的其他组和版本库"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5
 
@@ -2391,10 +2396,11 @@ msgstr "重新扫描选项"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:38
 
msgid ""
 
"In case a repository was deleted from filesystem and there are leftovers "
 
"in the database check this option to scan obsolete data in database and "
 
"remove it."
 
msgstr "如果版本库已经从文件系统删除,但数据库仍然有遗留信息,请勾选该项进行清理"
 
"In case a repository was deleted from filesystem and there are leftovers in "
 
"the database check this option to scan obsolete data in database and remove "
 
"it."
 
msgstr ""
 
"如果版本库已经从文件系统删除,但数据库仍然有遗留信息,请勾选该项进行清理"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:39
 
msgid "destroy old data"
 
@@ -2402,9 +2408,10 @@ msgstr "清理旧数据"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:41
 
msgid ""
 
"Rescan repositories location for new repositories. Also deletes obsolete "
 
"if `destroy` flag is checked "
 
msgstr "重新扫描版本库路径以发现新版本库。 同时删除过时的,如果设置有 `destroy` 标志"
 
"Rescan repositories location for new repositories. Also deletes obsolete if "
 
"`destroy` flag is checked "
 
msgstr ""
 
"重新扫描版本库路径以发现新版本库。 同时删除过时的,如果设置有 `destroy` 标志"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:46
 
msgid "Rescan repositories"
 
@@ -2494,9 +2501,11 @@ msgstr "要求使用SSL进行版本控制系统操作"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:203
 
msgid ""
 
"RhodeCode will require SSL for pushing or pulling. If SSL is missing it "
 
"will return HTTP Error 406: Not Acceptable"
 
msgstr "勾选后RhodeCode将要求使用SSL进行推送和拉取。如果没有使用SSL将返回HTTP 406错误:Not Acceptable"
 
"RhodeCode will require SSL for pushing or pulling. If SSL is missing it will "
 
"return HTTP Error 406: Not Acceptable"
 
msgstr ""
 
"勾选后RhodeCode将要求使用SSL进行推送和拉取。如果没有使用SSL将返回HTTP 406错"
 
"误:Not Acceptable"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:209
 
msgid "Hooks"
 
@@ -2547,8 +2556,8 @@ msgstr "版本库路径"
 
#: rhodecode/templates/admin/settings/settings.html:261
 
msgid ""
 
"This a crucial application setting. If you are really sure you need to "
 
"change this, you must restart application in order to make this setting "
 
"take effect. Click this label to unlock."
 
"change this, you must restart application in order to make this setting take "
 
"effect. Click this label to unlock."
 
msgstr "这是一个关键设置。如果确认修改该项设置,请重启服务以便设置生效。"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:262
 
@@ -2558,8 +2567,8 @@ msgstr "解锁"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:263
 
msgid ""
 
"Location where repositories are stored. After changing this value a "
 
"restart, and rescan is required"
 
"Location where repositories are stored. After changing this value a restart, "
 
"and rescan is required"
 
msgstr "版本库存储路径。 修改后需要重启和重新扫描"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:283
 
@@ -2932,7 +2941,8 @@ msgid "Products"
 
msgstr "产品"
 

	
 
#: rhodecode/templates/base/base.html:152
 
#: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47
 
#: rhodecode/templates/base/base.html:182
 
#: rhodecode/templates/base/root.html:47
 
msgid "loading..."
 
msgstr "载入中..."
 

	
 
@@ -2986,7 +2996,8 @@ msgstr "版本库选项"
 
msgid "fork"
 
msgstr "复刻"
 

	
 
#: rhodecode/templates/base/base.html:212 rhodecode/templates/base/root.html:50
 
#: rhodecode/templates/base/base.html:212
 
#: rhodecode/templates/base/root.html:50
 
#: rhodecode/templates/changelog/changelog.html:43
 
msgid "Open new pull request"
 
msgstr "新建拉取请求"
 
@@ -3017,9 +3028,8 @@ msgid "permissions"
 
msgstr "权限"
 

	
 
#: rhodecode/templates/base/base.html:239
 
#, fuzzy
 
msgid "defaults"
 
msgstr "默认"
 
msgstr "默认设置"
 

	
 
#: rhodecode/templates/base/base.html:240
 
msgid "settings"
 
@@ -3238,9 +3248,8 @@ msgid "Changeset"
 
msgstr "修订集"
 

	
 
#: rhodecode/templates/changeset/changeset.html:52
 
#, fuzzy
 
msgid "No children"
 
msgstr "应用到成员"
 
msgstr "无子对象"
 

	
 
#: rhodecode/templates/changeset/changeset.html:70
 
#: rhodecode/templates/changeset/diff_block.html:20
 
@@ -3302,7 +3311,8 @@ msgstr "评论使用%s语法并支持%s"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:48
 
#: rhodecode/templates/changeset/changeset_file_comment.html:123
 
msgid "Use @username inside this text to send notification to this RhodeCode user"
 
msgid ""
 
"Use @username inside this text to send notification to this RhodeCode user"
 
msgstr "在文本中使用 @用户名 以发送通知到该RhodeCode用户"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:59
 
@@ -3433,9 +3443,8 @@ msgid "Confirm to delete this user: %s"
 
msgstr "确认删除用户:%s"
 

	
 
#: rhodecode/templates/email_templates/changeset_comment.html:10
 
#, fuzzy
 
msgid "New status$"
 
msgstr "改变状态"
 
msgstr "新状态$"
 

	
 
#: rhodecode/templates/email_templates/main.html:8
 
msgid "This is a notification from RhodeCode."
 
@@ -3443,29 +3452,28 @@ msgstr "这是一个RhodeCode通知。"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:4
 
msgid "Hello"
 
msgstr ""
 
msgstr "你好"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:6
 
msgid "We received a request to create a new password for your account."
 
msgstr ""
 
msgstr "我们收到重置你用户密码的请求。"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:8
 
msgid "You can generate it by clicking following URL"
 
msgstr ""
 
msgstr "点击下面的链接以重新生成密码:"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:12
 
msgid "If you didn't request new password please ignore this email."
 
msgstr ""
 
msgstr "如果你没有要求重置密码,请忽略这封邮件。"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:4
 
#, python-format
 
msgid ""
 
"User %s opened pull request for repository %s and wants you to review "
 
"changes."
 
msgstr ""
 
msgstr "用户%s在版本库%s中创建了一个拉取请求需要你检视"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:5
 
#, fuzzy
 
msgid "title"
 
msgstr "标题"
 

	
 
@@ -3476,35 +3484,32 @@ msgstr "描述"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:11
 
msgid "revisions for reviewing"
 
msgstr ""
 
msgstr "待检视修订"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:18
 
#, fuzzy
 
msgid "View this pull request here"
 
msgstr "为这个拉取请求增加检视人员"
 
msgstr "查看拉取请求"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:4
 
#, fuzzy, python-format
 
#, python-format
 
msgid "User %s commented on pull request #%s for repository %s"
 
msgstr ""
 
msgstr "用户%s评论了版本库%s的拉取请求%s"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:10
 
#, fuzzy
 
msgid "New status"
 
msgstr "改变状态"
 
msgstr "新状态"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:14
 
msgid "View this comment here"
 
msgstr ""
 
msgstr "查看评论"
 

	
 
#: rhodecode/templates/email_templates/registration.html:4
 
#, fuzzy
 
msgid "A new user have registered in RhodeCode"
 
msgstr "成功注册到RhodeCode"
 
msgstr "新用户注册RhodeCode"
 

	
 
#: rhodecode/templates/email_templates/registration.html:9
 
msgid "View this user here"
 
msgstr ""
 
msgstr "查看用户"
 

	
 
#: rhodecode/templates/errors/error_document.html:46
 
#, python-format
 
@@ -3674,9 +3679,8 @@ msgid "show at revision"
 
msgstr "显示修订"
 

	
 
#: rhodecode/templates/files/files_history_box.html:11
 
#, fuzzy
 
msgid "show full history"
 
msgstr "加载文件历史记录..."
 
msgstr "显示全部历史记录"
 

	
 
#: rhodecode/templates/files/files_history_box.html:16
 
#, python-format
 
@@ -3918,9 +3922,8 @@ msgid "Compare view"
 
msgstr "比较显示"
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:112
 
#, fuzzy
 
msgid "reviewer"
 
msgstr "%d个检视者"
 
msgstr "检视者"
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show_all.html:4
 
msgid "all pull requests"
 
@@ -3987,14 +3990,12 @@ msgid "%s Settings"
 
msgstr "%s设置"
 

	
 
#: rhodecode/templates/settings/repo_settings.html:102
 
#, fuzzy
 
msgid "Delete repository"
 
msgstr "[删除]版本库"
 
msgstr "删除版本库"
 

	
 
#: rhodecode/templates/settings/repo_settings.html:109
 
#, fuzzy
 
msgid "Remove repo"
 
msgstr "删除"
 
msgstr "删除版本库"
 

	
 
#: rhodecode/templates/shortlog/shortlog.html:5
 
#, python-format
 
@@ -4196,20 +4197,3 @@ msgstr "%s标签"
 
#: rhodecode/templates/tags/tags.html:29
 
msgid "Compare tags"
 
msgstr "比较标签"
 

	
 
#~ msgid ""
 
#~ "%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"
 
#~ msgstr " 版本库%s没有映射到数据库,可能是从文件系统创建或者重命名,请重启RhodeCode以重新扫描版本库"
 

	
 
#~ msgid ""
 
#~ "%s repository is not mapped to db"
 
#~ " perhaps it was moved or renamed  "
 
#~ "from the filesystem please run the "
 
#~ "application again in order to rescan "
 
#~ "repositories"
 
#~ msgstr "版本库%s没有映射到数据库,可能是从文件系统创建或者重命名,请重启RhodeCode以重新扫描版本库"
 

	
rhodecode/lib/auth.py
Show inline comments
 
@@ -45,7 +45,8 @@ from rhodecode.lib.auth_ldap import Auth
 

	
 
from rhodecode.model import meta
 
from rhodecode.model.user import UserModel
 
from rhodecode.model.db import Permission, RhodeCodeSetting, User
 
from rhodecode.model.db import Permission, RhodeCodeSetting, User, UserIpMap
 
from rhodecode.lib.caching_query import FromCache
 

	
 
log = logging.getLogger(__name__)
 

	
 
@@ -269,21 +270,34 @@ def login_container_auth(username):
 
    return user
 

	
 

	
 
def get_container_username(environ, config):
 
def get_container_username(environ, config, clean_username=False):
 
    """
 
    Get's the container_auth username (or email). It tries to get username
 
    from REMOTE_USER if container_auth_enabled is enabled, if that fails
 
    it tries to get username from HTTP_X_FORWARDED_USER if proxypass_auth_enabled
 
    is enabled. clean_username extracts the username from this data if it's
 
    having @ in it.
 

	
 
    :param environ:
 
    :param config:
 
    :param clean_username:
 
    """
 
    username = None
 

	
 
    if str2bool(config.get('container_auth_enabled', False)):
 
        from paste.httpheaders import REMOTE_USER
 
        username = REMOTE_USER(environ)
 
        log.debug('extracted REMOTE_USER:%s' % (username))
 

	
 
    if not username and str2bool(config.get('proxypass_auth_enabled', False)):
 
        username = environ.get('HTTP_X_FORWARDED_USER')
 
        log.debug('extracted HTTP_X_FORWARDED_USER:%s' % (username))
 

	
 
    if username:
 
    if username and clean_username:
 
        # Removing realm and domain from username
 
        username = username.partition('@')[0]
 
        username = username.rpartition('\\')[2]
 
        log.debug('Received username %s from container' % username)
 
    log.debug('Received username %s from container' % username)
 

	
 
    return username
 

	
 
@@ -313,11 +327,12 @@ class  AuthUser(object):
 
    in
 
    """
 

	
 
    def __init__(self, user_id=None, api_key=None, username=None):
 
    def __init__(self, user_id=None, api_key=None, username=None, ip_addr=None):
 

	
 
        self.user_id = user_id
 
        self.api_key = None
 
        self.username = username
 
        self.ip_addr = ip_addr
 

	
 
        self.name = ''
 
        self.lastname = ''
 
@@ -380,6 +395,24 @@ class  AuthUser(object):
 
    def is_admin(self):
 
        return self.admin
 

	
 
    @property
 
    def ip_allowed(self):
 
        """
 
        Checks if ip_addr used in constructor is allowed from defined list of
 
        allowed ip_addresses for user
 

	
 
        :returns: boolean, True if ip is in allowed ip range
 
        """
 
        #check IP
 
        allowed_ips = AuthUser.get_allowed_ips(self.user_id, cache=True)
 
        if check_ip_access(source_ip=self.ip_addr, allowed_ips=allowed_ips):
 
            log.debug('IP:%s is in range of %s' % (self.ip_addr, allowed_ips))
 
            return True
 
        else:
 
            log.info('Access for IP:%s forbidden, '
 
                     'not in %s' % (self.ip_addr, allowed_ips))
 
            return False
 

	
 
    def __repr__(self):
 
        return "<AuthUser('id:%s:%s|%s')>" % (self.user_id, self.username,
 
                                              self.is_authenticated)
 
@@ -406,6 +439,17 @@ class  AuthUser(object):
 
        api_key = cookie_store.get('api_key')
 
        return AuthUser(user_id, api_key, username)
 

	
 
    @classmethod
 
    def get_allowed_ips(cls, user_id, cache=False):
 
        _set = set()
 
        user_ips = UserIpMap.query().filter(UserIpMap.user_id == user_id)
 
        if cache:
 
            user_ips = user_ips.options(FromCache("sql_cache_short",
 
                                                  "get_user_ips_%s" % user_id))
 
        for ip in user_ips:
 
            _set.add(ip.ip_addr)
 
        return _set or set(['0.0.0.0/0'])
 

	
 

	
 
def set_available_permissions(config):
 
    """
 
@@ -450,6 +494,15 @@ class LoginRequired(object):
 
    def __wrapper(self, func, *fargs, **fkwargs):
 
        cls = fargs[0]
 
        user = cls.rhodecode_user
 
        loc = "%s:%s" % (cls.__class__.__name__, func.__name__)
 

	
 
        #check IP
 
        ip_access_ok = True
 
        if not user.ip_allowed:
 
            from rhodecode.lib import helpers as h
 
            h.flash(h.literal(_('IP %s not allowed' % (user.ip_addr))),
 
                    category='warning')
 
            ip_access_ok = False
 

	
 
        api_access_ok = False
 
        if self.api_access:
 
@@ -458,9 +511,9 @@ class LoginRequired(object):
 
                api_access_ok = True
 
            else:
 
                log.debug("API KEY token not valid")
 
        loc = "%s:%s" % (cls.__class__.__name__, func.__name__)
 

	
 
        log.debug('Checking if %s is authenticated @ %s' % (user.username, loc))
 
        if user.is_authenticated or api_access_ok:
 
        if (user.is_authenticated or api_access_ok) and ip_access_ok:
 
            reason = 'RegularAuth' if user.is_authenticated else 'APIAuth'
 
            log.info('user %s is authenticated and granted access to %s '
 
                     'using %s' % (user.username, loc, reason)
 
@@ -682,12 +735,12 @@ class PermsFunction(object):
 
            return False
 
        self.user_perms = user.permissions
 
        if self.check_permissions():
 
            log.debug('Permission granted for user: %s @ %s', user,
 
            log.debug('Permission to %s granted for user: %s @ %s', self.repo_name, user,
 
                      check_Location or 'unspecified location')
 
            return True
 

	
 
        else:
 
            log.debug('Permission denied for user: %s @ %s', user,
 
            log.debug('Permission to %s denied for user: %s @ %s', self.repo_name, user,
 
                        check_Location or 'unspecified location')
 
            return False
 

	
 
@@ -821,3 +874,122 @@ class HasPermissionAnyMiddleware(object)
 
                 )
 
        )
 
        return False
 

	
 

	
 
#==============================================================================
 
# SPECIAL VERSION TO HANDLE API AUTH
 
#==============================================================================
 
class _BaseApiPerm(object):
 
    def __init__(self, *perms):
 
        self.required_perms = set(perms)
 

	
 
    def __call__(self, check_location='unspecified', user=None, repo_name=None):
 
        cls_name = self.__class__.__name__
 
        check_scope = 'user:%s, repo:%s' % (user, repo_name)
 
        log.debug('checking cls:%s %s %s @ %s', cls_name,
 
                  self.required_perms, check_scope, check_location)
 
        if not user:
 
            log.debug('Empty User passed into arguments')
 
            return False
 

	
 
        ## process user
 
        if not isinstance(user, AuthUser):
 
            user = AuthUser(user.user_id)
 

	
 
        if self.check_permissions(user.permissions, repo_name):
 
            log.debug('Permission to %s granted for user: %s @ %s', repo_name,
 
                      user, check_location)
 
            return True
 

	
 
        else:
 
            log.debug('Permission to %s denied for user: %s @ %s', repo_name,
 
                      user, check_location)
 
            return False
 

	
 
    def check_permissions(self, perm_defs, repo_name):
 
        """
 
        implement in child class should return True if permissions are ok,
 
        False otherwise
 

	
 
        :param perm_defs: dict with permission definitions
 
        :param repo_name: repo name
 
        """
 
        raise NotImplementedError()
 

	
 

	
 
class HasPermissionAllApi(_BaseApiPerm):
 
    def __call__(self, user, check_location=''):
 
        return super(HasPermissionAllApi, self)\
 
            .__call__(check_location=check_location, user=user)
 

	
 
    def check_permissions(self, perm_defs, repo):
 
        if self.required_perms.issubset(perm_defs.get('global')):
 
            return True
 
        return False
 

	
 

	
 
class HasPermissionAnyApi(_BaseApiPerm):
 
    def __call__(self, user, check_location=''):
 
        return super(HasPermissionAnyApi, self)\
 
            .__call__(check_location=check_location, user=user)
 

	
 
    def check_permissions(self, perm_defs, repo):
 
        if self.required_perms.intersection(perm_defs.get('global')):
 
            return True
 
        return False
 

	
 

	
 
class HasRepoPermissionAllApi(_BaseApiPerm):
 
    def __call__(self, user, repo_name, check_location=''):
 
        return super(HasRepoPermissionAllApi, self)\
 
            .__call__(check_location=check_location, user=user,
 
                      repo_name=repo_name)
 

	
 
    def check_permissions(self, perm_defs, repo_name):
 

	
 
        try:
 
            self._user_perms = set(
 
                [perm_defs['repositories'][repo_name]]
 
            )
 
        except KeyError:
 
            log.warning(traceback.format_exc())
 
            return False
 
        if self.required_perms.issubset(self._user_perms):
 
            return True
 
        return False
 

	
 

	
 
class HasRepoPermissionAnyApi(_BaseApiPerm):
 
    def __call__(self, user, repo_name, check_location=''):
 
        return super(HasRepoPermissionAnyApi, self)\
 
            .__call__(check_location=check_location, user=user,
 
                      repo_name=repo_name)
 

	
 
    def check_permissions(self, perm_defs, repo_name):
 

	
 
        try:
 
            _user_perms = set(
 
                [perm_defs['repositories'][repo_name]]
 
            )
 
        except KeyError:
 
            log.warning(traceback.format_exc())
 
            return False
 
        if self.required_perms.intersection(_user_perms):
 
            return True
 
        return False
 

	
 

	
 
def check_ip_access(source_ip, allowed_ips=None):
 
    """
 
    Checks if source_ip is a subnet of any of allowed_ips.
 

	
 
    :param source_ip:
 
    :param allowed_ips: list of allowed ips together with mask
 
    """
 
    from rhodecode.lib import ipaddr
 
    log.debug('checking if ip:%s is subnet of %s' % (source_ip, allowed_ips))
 
    if isinstance(allowed_ips, (tuple, list, set)):
 
        for ip in allowed_ips:
 
            if ipaddr.IPAddress(source_ip) in ipaddr.IPNetwork(ip):
 
                return True
 
    return False
rhodecode/lib/base.py
Show inline comments
 
@@ -37,13 +37,18 @@ def _get_ip_addr(environ):
 
    proxy_key2 = 'HTTP_X_FORWARDED_FOR'
 
    def_key = 'REMOTE_ADDR'
 

	
 
    ip = environ.get(proxy_key2)
 
    ip = environ.get(proxy_key)
 
    if ip:
 
        return ip
 

	
 
    ip = environ.get(proxy_key)
 

	
 
    ip = environ.get(proxy_key2)
 
    if ip:
 
        # HTTP_X_FORWARDED_FOR can have mutliple ips inside
 
        # the left-most being the original client, and each successive proxy
 
        # that passed the request adding the IP address where it received the
 
        # request from.
 
        if ',' in ip:
 
            ip = ip.split(',')[0].strip()
 
        return ip
 

	
 
    ip = environ.get(def_key, '0.0.0.0')
 
@@ -101,7 +106,7 @@ class BaseVCSController(object):
 
        #authenticate this mercurial request using authfunc
 
        self.authenticate = BasicAuth('', authfunc,
 
                                      config.get('auth_ret_code'))
 
        self.ipaddr = '0.0.0.0'
 
        self.ip_addr = '0.0.0.0'
 

	
 
    def _handle_request(self, environ, start_response):
 
        raise NotImplementedError()
 
@@ -136,7 +141,7 @@ class BaseVCSController(object):
 
        """
 
        invalidate_cache('get_repo_cached_%s' % repo_name)
 

	
 
    def _check_permission(self, action, user, repo_name):
 
    def _check_permission(self, action, user, repo_name, ip_addr=None):
 
        """
 
        Checks permissions using action (push/pull) user and repository
 
        name
 
@@ -145,6 +150,12 @@ class BaseVCSController(object):
 
        :param user: user instance
 
        :param repo_name: repository name
 
        """
 
        #check IP
 
        authuser = AuthUser(user_id=user.user_id, ip_addr=ip_addr)
 
        if not authuser.ip_allowed:
 
            return False
 
        else:
 
            log.info('Access for IP:%s allowed' % (ip_addr))
 
        if action == 'push':
 
            if not HasPermissionAnyMiddleware('repository.write',
 
                                              'repository.admin')(user,
 
@@ -235,6 +246,9 @@ class BaseVCSController(object):
 
class BaseController(WSGIController):
 

	
 
    def __before__(self):
 
        """
 
        __before__ is called before controller methods and after __call__
 
        """
 
        c.rhodecode_version = __version__
 
        c.rhodecode_instanceid = config.get('instance_id')
 
        c.rhodecode_name = config.get('rhodecode_title')
 
@@ -258,7 +272,6 @@ class BaseController(WSGIController):
 

	
 
        self.sa = meta.Session
 
        self.scm_model = ScmModel(self.sa)
 
        self.ip_addr = ''
 

	
 
    def __call__(self, environ, start_response):
 
        """Invoke the Controller"""
 
@@ -273,7 +286,7 @@ class BaseController(WSGIController):
 
            cookie_store = CookieStoreWrapper(session.get('rhodecode_user'))
 
            user_id = cookie_store.get('user_id', None)
 
            username = get_container_username(environ, config)
 
            auth_user = AuthUser(user_id, api_key, username)
 
            auth_user = AuthUser(user_id, api_key, username, self.ip_addr)
 
            request.user = auth_user
 
            self.rhodecode_user = c.rhodecode_user = auth_user
 
            if not self.rhodecode_user.is_authenticated and \
 
@@ -311,7 +324,7 @@ class BaseRepoController(BaseController)
 
            dbr = c.rhodecode_db_repo = Repository.get_by_repo_name(c.repo_name)
 
            c.rhodecode_repo = c.rhodecode_db_repo.scm_instance
 
            # update last change according to VCS data
 
            dbr.update_last_change(c.rhodecode_repo.last_change)
 
            dbr.update_changeset_cache(dbr.get_changeset())
 
            if c.rhodecode_repo is None:
 
                log.error('%s this repository is present in database but it '
 
                          'cannot be created as an scm instance', c.repo_name)
rhodecode/lib/celerylib/tasks.py
Show inline comments
 
@@ -347,6 +347,10 @@ def send_email(recipients, subject, body
 
    debug = str2bool(config.get('debug'))
 
    smtp_auth = email_config.get('smtp_auth')
 

	
 
    if not mail_server:
 
        log.error("SMTP mail server not configured - cannot send mail")
 
        return False
 

	
 
    try:
 
        m = SmtpMailer(mail_from, user, passwd, mail_server, smtp_auth,
 
                       mail_port, ssl, tls, debug=debug)
rhodecode/lib/db_manage.py
Show inline comments
 
@@ -164,8 +164,8 @@ class DbManage(object):
 

	
 
            def step_0(self):
 
                # step 0 is the schema upgrade, and than follow proper upgrades
 
                notify('attempting to do database upgrade to version %s' \
 
                                % __dbversion__)
 
                notify('attempting to do database upgrade from '
 
                       'version %s to version %s' %(curr_version, __dbversion__))
 
                api.upgrade(db_uri, repository_path, __dbversion__)
 
                notify('Schema upgrade completed')
 

	
 
@@ -286,6 +286,9 @@ class DbManage(object):
 
                           'Please validate and check default permissions '
 
                           'in admin panel')
 

	
 
            def step_10(self):
 
                pass
 

	
 
        upgrade_steps = [0] + range(curr_version + 1, __dbversion__ + 1)
 

	
 
        # CALL THE PROPER ORDER OF STEPS TO PERFORM FULL UPGRADE
rhodecode/lib/dbmigrate/schema/db_1_2_0.py
Show inline comments
 
@@ -619,7 +619,7 @@ class Repository(Base, BaseModel):
 
        hg_ui = ret
 
        for ui_ in hg_ui:
 
            if ui_.ui_active:
 
                log.debug('settings ui from db[%s]%s:%s', ui_.ui_section,
 
                log.debug('settings ui from db: [%s] %s=%s', ui_.ui_section,
 
                          ui_.ui_key, ui_.ui_value)
 
                baseui.setconfig(ui_.ui_section, ui_.ui_key, ui_.ui_value)
 

	
rhodecode/lib/dbmigrate/schema/db_1_3_0.py
Show inline comments
 
@@ -623,7 +623,7 @@ class Repository(Base, BaseModel):
 
        hg_ui = ret
 
        for ui_ in hg_ui:
 
            if ui_.ui_active:
 
                log.debug('settings ui from db[%s]%s:%s', ui_.ui_section,
 
                log.debug('settings ui from db: [%s] %s=%s', ui_.ui_section,
 
                          ui_.ui_key, ui_.ui_value)
 
                baseui.setconfig(ui_.ui_section, ui_.ui_key, ui_.ui_value)
 

	

Changeset was too big and was cut off... Show full diff anyway

0 comments (0 inline, 0 general)