Changeset - d6ac3baaa15a
[Not reviewed]
CONTRIBUTORS
Show inline comments
 
@@ -15,13 +15,16 @@ List of contributors to RhodeCode projec
 
    Les Peabody <lpeabody@gmail.com>
 
    Jonas Oberschweiber <jonas.oberschweiber@d-velop.de>
 
    Matt Zuba <matt.zuba@goodwillaz.org>
 
    Aras Pranckevicius <aras@unity3d.com>
 
    Tony Bussieres <t.bussieres@gmail.com>
 
    Erwin Kroon <e.kroon@smartmetersolutions.nl>
 
    nansenat16 <nansenat16@null.tw>
 
    Vincent Duvert <vincent@duvert.net>
 
    Takumi IINO <trot.thunder@gmail.com>
 
    Indra Talip <indra.talip@gmail.com>
 
    James Rhodes <jrhodes@redpointsoftware.com.au>
 
    Dominik Ruf <dominikruf@gmail.com>
 
    xpol <xpolife@gmail.com>
 
\ No newline at end of file
 
    xpol <xpolife@gmail.com>
 
    Vincent Caron <vcaron@bearstech.com>
 
    Zachary Auclair <zach101@gmail.com>
 
    Stefan Engel <mail@engel-stefan.de>
development.ini
Show inline comments
 
@@ -99,24 +99,34 @@ issue_pat = (?:\s*#)(\d+)
 

	
 
## server url to the issue, each {id} will be replaced with match
 
## fetched from the regex and {repo} is replaced with full repository name
 
## including groups {repo_name} is replaced with just name of repo
 

	
 
issue_server_link = https://myissueserver.com/{repo}/issue/{id}
 

	
 
## prefix to add to link to indicate it's an url
 
## #314 will be replaced by <issue_prefix><id>
 

	
 
issue_prefix = #
 

	
 
## issue_pat, issue_server_link, issue_prefix can have suffixes to specify
 
## multiple patterns, to other issues server, wiki or others
 
## below an example how to create a wiki pattern 
 
#  #wiki-some-id -> https://mywiki.com/some-id
 

	
 
#issue_pat_wiki = (?:wiki-)(.+)
 
#issue_server_link_wiki = https://mywiki.com/{id}
 
#issue_prefix_wiki = WIKI-
 

	
 

	
 
## instance-id prefix
 
## a prefix key for this instance used for cache invalidation when running 
 
## multiple instances of rhodecode, make sure it's globally unique for 
 
## all running rhodecode instances. Leave empty if you don't use it
 
instance_id = 
 

	
 
## alternative return HTTP header for failed authentication. Default HTTP
 
## response is 401 HTTPUnauthorized. Currently HG clients have troubles with 
 
## handling that. Set this variable to 403 to return HTTPForbidden
 
auth_ret_code =
 

	
 
####################################
docs/changelog.rst
Show inline comments
 
.. _changelog:
 

	
 
=========
 
Changelog
 
=========
 

	
 

	
 
1.4.3 (**2012-09-28**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- #558 Added config file to hooks extra data
 
- bumped mercurial version to 2.3.1
 
- #518 added possibility of specifying multiple patterns for issues
 

	
 
fixes
 
+++++
 

	
 
- fixed #570 explicit users group permissions can overwrite owner permissions
 
- fixed #578 set proper PATH with current Python for Git
 
  hooks to execute within same Python as RhodeCode 
 
- fixed issue with Git bare repos that ends with .git in name
 

	
 
1.4.2 (**2012-09-12**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- added option to menu to quick lock/unlock repository for users that have
 
  write access to
 
- Implemented permissions for writing to repo
 
  groups. Now only write access to group allows to create a repostiory
 
  within that group
 
- #565 Add support for {netloc} and {scheme} to alternative_gravatar_url
production.ini
Show inline comments
 
@@ -99,24 +99,34 @@ issue_pat = (?:\s*#)(\d+)
 

	
 
## server url to the issue, each {id} will be replaced with match
 
## fetched from the regex and {repo} is replaced with full repository name
 
## including groups {repo_name} is replaced with just name of repo
 

	
 
issue_server_link = https://myissueserver.com/{repo}/issue/{id}
 

	
 
## prefix to add to link to indicate it's an url
 
## #314 will be replaced by <issue_prefix><id>
 

	
 
issue_prefix = #
 

	
 
## issue_pat, issue_server_link, issue_prefix can have suffixes to specify
 
## multiple patterns, to other issues server, wiki or others
 
## below an example how to create a wiki pattern 
 
#  #wiki-some-id -> https://mywiki.com/some-id
 

	
 
#issue_pat_wiki = (?:wiki-)(.+)
 
#issue_server_link_wiki = https://mywiki.com/{id}
 
#issue_prefix_wiki = WIKI-
 

	
 

	
 
## instance-id prefix
 
## a prefix key for this instance used for cache invalidation when running 
 
## multiple instances of rhodecode, make sure it's globally unique for 
 
## all running rhodecode instances. Leave empty if you don't use it
 
instance_id = 
 

	
 
## alternative return HTTP header for failed authentication. Default HTTP
 
## response is 401 HTTPUnauthorized. Currently HG clients have troubles with 
 
## handling that. Set this variable to 403 to return HTTPForbidden
 
auth_ret_code =
 

	
 
####################################
rhodecode/__init__.py
Show inline comments
 
@@ -17,25 +17,25 @@
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
import sys
 
import platform
 

	
 
VERSION = (1, 4, 2)
 
VERSION = (1, 4, 3)
 

	
 
try:
 
    from rhodecode.lib import get_current_revision
 
    _rev = get_current_revision(quiet=True)
 
    if _rev and len(VERSION) > 3:
 
        VERSION += ('dev%s' % _rev[0],)
 
except ImportError:
 
    pass
 

	
 
__version__ = ('.'.join((str(each) for each in VERSION[:3])) +
 
               '.'.join(VERSION[3:]))
 
__dbversion__ = 7  # defines current db version for migrations
rhodecode/config/deployment.ini_tmpl
Show inline comments
 
@@ -99,24 +99,34 @@ issue_pat = (?:\s*#)(\d+)
 

	
 
## server url to the issue, each {id} will be replaced with match
 
## fetched from the regex and {repo} is replaced with full repository name
 
## including groups {repo_name} is replaced with just name of repo
 

	
 
issue_server_link = https://myissueserver.com/{repo}/issue/{id}
 

	
 
## prefix to add to link to indicate it's an url
 
## #314 will be replaced by <issue_prefix><id>
 

	
 
issue_prefix = #
 

	
 
## issue_pat, issue_server_link, issue_prefix can have suffixes to specify
 
## multiple patterns, to other issues server, wiki or others
 
## below an example how to create a wiki pattern 
 
#  #wiki-some-id -> https://mywiki.com/some-id
 

	
 
#issue_pat_wiki = (?:wiki-)(.+)
 
#issue_server_link_wiki = https://mywiki.com/{id}
 
#issue_prefix_wiki = WIKI-
 

	
 

	
 
## instance-id prefix
 
## a prefix key for this instance used for cache invalidation when running 
 
## multiple instances of rhodecode, make sure it's globally unique for 
 
## all running rhodecode instances. Leave empty if you don't use it
 
instance_id = 
 

	
 
## alternative return HTTP header for failed authentication. Default HTTP
 
## response is 401 HTTPUnauthorized. Currently HG clients have troubles with 
 
## handling that. Set this variable to 403 to return HTTPForbidden
 
auth_ret_code =
 

	
 
####################################
rhodecode/controllers/pullrequests.py
Show inline comments
 
@@ -41,24 +41,25 @@ from rhodecode.lib.auth import LoginRequ
 
    NotAnonymous
 
from rhodecode.lib import helpers as h
 
from rhodecode.lib import diffs
 
from rhodecode.lib.utils import action_logger
 
from rhodecode.model.db import User, PullRequest, ChangesetStatus,\
 
    ChangesetComment
 
from rhodecode.model.pull_request import PullRequestModel
 
from rhodecode.model.meta import Session
 
from rhodecode.model.repo import RepoModel
 
from rhodecode.model.comment import ChangesetCommentsModel
 
from rhodecode.model.changeset_status import ChangesetStatusModel
 
from rhodecode.model.forms import PullRequestForm
 
from rhodecode.lib.vcs.exceptions import EmptyRepositoryError
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
class PullrequestsController(BaseRepoController):
 

	
 
    @LoginRequired()
 
    @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
 
                                   'repository.admin')
 
    def __before__(self):
 
        super(PullrequestsController, self).__before__()
 
        repo_model = RepoModel()
 
@@ -98,24 +99,31 @@ class PullrequestsController(BaseRepoCon
 
        c.pull_requests = PullRequestModel().get_all(repo_name)
 
        c.repo_name = repo_name
 
        return render('/pullrequests/pullrequest_show_all.html')
 

	
 
    @NotAnonymous()
 
    def index(self):
 
        org_repo = c.rhodecode_db_repo
 

	
 
        if org_repo.scm_instance.alias != 'hg':
 
            log.error('Review not available for GIT REPOS')
 
            raise HTTPNotFound
 

	
 
        try:
 
            org_repo.scm_instance.get_changeset()
 
        except EmptyRepositoryError, e:
 
            h.flash(h.literal(_('There are no changesets yet')),
 
                    category='warning')
 
            redirect(url('summary_home', repo_name=org_repo.repo_name))
 

	
 
        other_repos_info = {}
 

	
 
        c.org_refs = self._get_repo_refs(c.rhodecode_repo)
 
        c.org_repos = []
 
        c.other_repos = []
 
        c.org_repos.append((org_repo.repo_name, '%s/%s' % (
 
                                org_repo.user.username, c.repo_name))
 
                           )
 

	
 
        # add org repo to other so we can open pull request agains itself
 
        c.other_repos.extend(c.org_repos)
 

	
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
 
# Chinese (China) translations for RhodeCode.
 
# Copyright (C) 2011 ORGANIZATION
 
# This file is distributed under the same license as the RhodeCode project.
 
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
 
# mikespook <mikespook@gmail.com>, 2012.
 
# xpol <xpolife@gmail.com>, 2012.
 
msgid ""
 
msgstr ""
 
"Project-Id-Version: RhodeCode 1.2.0\n"
 
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 
"POT-Creation-Date: 2012-09-02 20:30+0200\n"
 
"PO-Revision-Date: 2012-09-19 13:27+0800\n"
 
"POT-Creation-Date: 2012-09-21 14:39+0800\n"
 
"PO-Revision-Date: 2012-09-21 15:20+0800\n"
 
"Last-Translator: xpol <xpolife@gmail.com>\n"
 
"Language-Team: mikespook\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.3\n"
 
"X-Poedit-Basepath: E:\\home\\rhodecode\n"
 
"X-Poedit-SourceCharset: UTF-8\n"
 

	
 
#: rhodecode/controllers/changelog.py:94
 

	
 
#: rhodecode/controllers/changelog.py:95
 
msgid "All Branches"
 
msgstr "所有分支"
 

	
 
#: rhodecode/controllers/changeset.py:83
 
msgid "show white space"
 
msgstr "显示空白字符"
 

	
 
#: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97
 
msgid "ignore white space"
 
msgstr "忽略空白字符"
 

	
 
#: rhodecode/controllers/changeset.py:157
 
#, python-format
 
msgid "%s line context"
 
msgstr "%s 行上下文"
 

	
 
#: rhodecode/controllers/changeset.py:333
 
#: rhodecode/controllers/changeset.py:348 rhodecode/lib/diffs.py:70
 
#: rhodecode/controllers/changeset.py:348 rhodecode/lib/diffs.py:71
 
msgid "binary file"
 
msgstr "二进制文件"
 

	
 
#: rhodecode/controllers/changeset.py:408
 
#: rhodecode/controllers/changeset.py:381
 
#: rhodecode/controllers/pullrequests.py:368
 
#, python-format
 
#| msgid "Last change"
 
msgid "Status change -> %s"
 
msgstr "状态改变 -> %s"
 

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

	
 
#: rhodecode/controllers/compare.py:69
 
#: rhodecode/controllers/compare.py:72
 
msgid "There are no changesets yet"
 
msgstr "还没有修订集"
 

	
 
#: rhodecode/controllers/error.py:69
 
msgid "Home page"
 
msgstr "主页"
 

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

	
 
@@ -81,25 +87,30 @@ msgid ""
 
msgstr "服务进入非预期的混乱状态,这会阻止它对请求进行响应。"
 

	
 
#: rhodecode/controllers/feed.py:49
 
#, python-format
 
msgid "Changes on %s repository"
 
msgstr "%s 库的修改"
 

	
 
#: rhodecode/controllers/feed.py:50
 
#, python-format
 
msgid "%s %s feed"
 
msgstr "%s %s 订阅"
 

	
 
#: rhodecode/controllers/feed.py:75
 
#: rhodecode/controllers/feed.py:67
 
#: rhodecode/templates/changeset/changeset.html:119
 
msgid "Changeset was too big and was cut off..."
 
msgstr "修订集太大已被截断......"
 

	
 
#: rhodecode/controllers/feed.py:81
 
msgid "commited on"
 
msgstr "提交于"
 

	
 
#: rhodecode/controllers/files.py:84
 
msgid "click here to add new file"
 
msgstr "点击此处添加新文件"
 

	
 
#: rhodecode/controllers/files.py:85
 
#, python-format
 
msgid "There are no files yet %s"
 
msgstr "还没有文件 %s"
 

	
 
@@ -154,154 +165,175 @@ msgstr "空版本库"
 

	
 
#: rhodecode/controllers/files.py:393
 
msgid "Unknown archive type"
 
msgstr "未知包类型"
 

	
 
#: rhodecode/controllers/files.py:494
 
#: rhodecode/templates/changeset/changeset_range.html:13
 
#: rhodecode/templates/changeset/changeset_range.html:31
 
msgid "Changesets"
 
msgstr "修订集"
 

	
 
#: rhodecode/controllers/files.py:495 rhodecode/controllers/pullrequests.py:72
 
#: rhodecode/controllers/summary.py:232 rhodecode/model/scm.py:543
 
#: rhodecode/controllers/summary.py:234 rhodecode/model/scm.py:543
 
msgid "Branches"
 
msgstr "分支"
 

	
 
#: rhodecode/controllers/files.py:496 rhodecode/controllers/pullrequests.py:76
 
#: rhodecode/controllers/summary.py:233 rhodecode/model/scm.py:554
 
#: rhodecode/controllers/summary.py:235 rhodecode/model/scm.py:554
 
msgid "Tags"
 
msgstr "标签"
 

	
 
#: rhodecode/controllers/forks.py:73 rhodecode/controllers/admin/repos.py:90
 
#: rhodecode/controllers/forks.py:74 rhodecode/controllers/admin/repos.py:90
 
#, 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 "
 
"以重新扫描版本库"
 

	
 
#: rhodecode/controllers/forks.py:133 rhodecode/controllers/settings.py:72
 
#: rhodecode/controllers/forks.py:134 rhodecode/controllers/settings.py:73
 
#, python-format
 
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 以重新扫描版本库"
 

	
 
#: rhodecode/controllers/forks.py:167
 
#: rhodecode/controllers/forks.py:168
 
#, python-format
 
msgid "forked %s repository as %s"
 
msgstr "版本库 %s 被分支到 %s"
 

	
 
#: rhodecode/controllers/forks.py:181
 
#: rhodecode/controllers/forks.py:182
 
#, python-format
 
msgid "An error occurred during repository forking %s"
 
msgstr "在分支版本库 %s 的时候发生错误"
 

	
 
#: rhodecode/controllers/journal.py:202 rhodecode/controllers/journal.py:239
 
#: rhodecode/controllers/journal.py:203 rhodecode/controllers/journal.py:240
 
msgid "public journal"
 
msgstr "公共日志"
 

	
 
#: rhodecode/controllers/journal.py:206 rhodecode/controllers/journal.py:243
 
#: rhodecode/templates/base/base.html:220
 
#: rhodecode/controllers/journal.py:207 rhodecode/controllers/journal.py:244
 
#: rhodecode/templates/base/base.html:229
 
msgid "journal"
 
msgstr "日志"
 

	
 
#: rhodecode/controllers/login.py:143
 
msgid "You have successfully registered into rhodecode"
 
msgstr "成功注册到 rhodecode"
 

	
 
#: rhodecode/controllers/login.py:164
 
msgid "Your password reset link was sent"
 
msgstr "密码重置链接已经发送"
 

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

	
 
#: rhodecode/controllers/pullrequests.py:74 rhodecode/model/scm.py:549
 
msgid "Bookmarks"
 
msgstr "书签"
 

	
 
#: rhodecode/controllers/pullrequests.py:158
 
#: rhodecode/controllers/pullrequests.py:174
 
msgid "Pull request requires a title with min. 3 chars"
 
msgstr "拉取请求的标题至少 3 个字符"
 

	
 
#: rhodecode/controllers/pullrequests.py:160
 
#: rhodecode/controllers/pullrequests.py:176
 
msgid "error during creation of pull request"
 
msgstr "提交拉取请求时发生错误"
 

	
 
#: rhodecode/controllers/pullrequests.py:181
 
#: rhodecode/controllers/pullrequests.py:197
 
msgid "Successfully opened new pull request"
 
msgstr "成功提交拉取请求"
 

	
 
#: rhodecode/controllers/pullrequests.py:184
 
#: rhodecode/controllers/pullrequests.py:200
 
msgid "Error occurred during sending pull request"
 
msgstr "提交拉取请求时发生错误"
 

	
 
#: rhodecode/controllers/pullrequests.py:217
 
#: rhodecode/controllers/pullrequests.py:233
 
msgid "Successfully deleted pull request"
 
msgstr "成功删除拉取请求"
 

	
 
#: rhodecode/controllers/search.py:131
 
#: rhodecode/controllers/search.py:132
 
msgid "Invalid search query. Try quoting it."
 
msgstr "错误的搜索。请尝试用引号包含它。"
 

	
 
#: rhodecode/controllers/search.py:136
 
#: rhodecode/controllers/search.py:137
 
msgid "There is no index to search in. Please run whoosh indexer"
 
msgstr "没有索引用于搜索。请运行 whoosh 索引器"
 

	
 
#: rhodecode/controllers/search.py:140
 
#: rhodecode/controllers/search.py:141
 
msgid "An error occurred during this search operation"
 
msgstr "在搜索操作中发生异常"
 

	
 
#: rhodecode/controllers/settings.py:107
 
#: rhodecode/controllers/settings.py:108
 
#: rhodecode/controllers/admin/repos.py:266
 
#, python-format
 
msgid "Repository %s updated successfully"
 
msgstr "版本库 %s 成功更新"
 

	
 
#: rhodecode/controllers/settings.py:125
 
#: rhodecode/controllers/settings.py:126
 
#: rhodecode/controllers/admin/repos.py:284
 
#, python-format
 
msgid "error occurred during update of repository %s"
 
msgstr "在更新版本库 %s 的时候发生错误"
 

	
 
#: rhodecode/controllers/settings.py:143
 
#: rhodecode/controllers/settings.py:144
 
#: rhodecode/controllers/admin/repos.py:302
 
#, python-format
 
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/controllers/settings.py:155
 
#: rhodecode/controllers/settings.py:156
 
#: rhodecode/controllers/admin/repos.py:314
 
#, python-format
 
msgid "deleted repository %s"
 
msgstr "已经删除版本库 %s"
 

	
 
#: rhodecode/controllers/settings.py:159
 
#: rhodecode/controllers/settings.py:160
 
#: rhodecode/controllers/admin/repos.py:324
 
#: rhodecode/controllers/admin/repos.py:330
 
#, python-format
 
msgid "An error occurred during deletion of %s"
 
msgstr "在删除 %s 的时候发生错误"
 

	
 
#: rhodecode/controllers/settings.py:179
 
#| msgid "unlock"
 
msgid "unlocked"
 
msgstr "未锁"
 

	
 
#: rhodecode/controllers/settings.py:182
 
#| msgid "unlock"
 
msgid "locked"
 
msgstr "已锁"
 

	
 
#: rhodecode/controllers/settings.py:184
 
#, python-format
 
#| msgid "forked %s repository as %s"
 
msgid "Repository has been %s"
 
msgstr "版本库已经 %s"
 

	
 
#: rhodecode/controllers/settings.py:188
 
#: rhodecode/controllers/admin/repos.py:422
 
msgid "An error occurred during unlocking"
 
msgstr "解锁时发生错误"
 

	
 
#: rhodecode/controllers/summary.py:138
 
msgid "No data loaded yet"
 
msgstr "数据未加载"
 

	
 
#: rhodecode/controllers/summary.py:142
 
#: rhodecode/templates/summary/summary.html:148
 
msgid "Statistics are disabled for this repository"
 
msgstr "该版本库统计功能已经禁用"
 

	
 
#: rhodecode/controllers/admin/ldap_settings.py:50
 
msgid "BASE"
 
msgstr "BASE"
 
@@ -380,27 +412,27 @@ msgstr "写"
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:8
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
 
#: rhodecode/templates/admin/settings/hooks.html:9
 
#: rhodecode/templates/admin/settings/settings.html:9
 
#: rhodecode/templates/admin/users/user_add.html:8
 
#: rhodecode/templates/admin/users/user_edit.html:9
 
#: rhodecode/templates/admin/users/user_edit.html:122
 
#: rhodecode/templates/admin/users/users.html:9
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:8
 
#: rhodecode/templates/admin/users_groups/users_group_edit.html:9
 
#: rhodecode/templates/admin/users_groups/users_groups.html:9
 
#: rhodecode/templates/base/base.html:197
 
#: rhodecode/templates/base/base.html:337
 
#: rhodecode/templates/base/base.html:339
 
#: rhodecode/templates/base/base.html:341
 
#: rhodecode/templates/base/base.html:346
 
#: rhodecode/templates/base/base.html:348
 
#: rhodecode/templates/base/base.html:350
 
msgid "Admin"
 
msgstr "管理"
 

	
 
#: rhodecode/controllers/admin/permissions.py:65
 
msgid "disabled"
 
msgstr "禁用"
 

	
 
#: rhodecode/controllers/admin/permissions.py:67
 
msgid "allowed with manual account activation"
 
msgstr "允许手工启用帐号"
 

	
 
#: rhodecode/controllers/admin/permissions.py:69
 
@@ -456,164 +488,160 @@ msgstr "删除版本库用户时发生错误"
 
#: rhodecode/controllers/admin/repos.py:367
 
msgid "An error occurred during deletion of repository users groups"
 
msgstr "删除版本库用户组时发生错误"
 

	
 
#: rhodecode/controllers/admin/repos.py:385
 
msgid "An error occurred during deletion of repository stats"
 
msgstr "删除版本库统计时发生错误"
 

	
 
#: rhodecode/controllers/admin/repos.py:402
 
msgid "An error occurred during cache invalidation"
 
msgstr "清除缓存时发生错误"
 

	
 
#: rhodecode/controllers/admin/repos.py:422
 
msgid "An error occurred during unlocking"
 
msgstr "解锁时发生错误"
 

	
 
#: rhodecode/controllers/admin/repos.py:442
 
msgid "Updated repository visibility in public journal"
 
msgstr "成功更新在公共日志中的可见性"
 

	
 
#: rhodecode/controllers/admin/repos.py:446
 
msgid "An error occurred during setting this repository in public journal"
 
msgstr "设置版本库到公共日志时发生错误"
 

	
 
#: rhodecode/controllers/admin/repos.py:451 rhodecode/model/validators.py:299
 
#: rhodecode/controllers/admin/repos.py:451 rhodecode/model/validators.py:300
 
msgid "Token mismatch"
 
msgstr "令牌不匹配"
 

	
 
#: rhodecode/controllers/admin/repos.py:464
 
msgid "Pulled from remote location"
 
msgstr "成功拉取自远程路径"
 

	
 
#: rhodecode/controllers/admin/repos.py:466
 
msgid "An error occurred during pull from remote location"
 
msgstr "从远程路径拉取时发生错误"
 

	
 
#: rhodecode/controllers/admin/repos.py:482
 
msgid "Nothing"
 
msgstr "无"
 

	
 
#: rhodecode/controllers/admin/repos.py:484
 
#, python-format
 
msgid "Marked repo %s as fork of %s"
 
msgstr "成功将版本库 %s 标记为从 %s 分支"
 

	
 
#: rhodecode/controllers/admin/repos.py:488
 
msgid "An error occurred during this operation"
 
msgstr "在搜索操作中发生错误"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:116
 
#: rhodecode/controllers/admin/repos_groups.py:117
 
#, python-format
 
msgid "created repos group %s"
 
msgstr "建立版本库组 %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:129
 
#: rhodecode/controllers/admin/repos_groups.py:130
 
#, python-format
 
msgid "error occurred during creation of repos group %s"
 
msgstr "创建版本库组时发生错误 %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:163
 
#: rhodecode/controllers/admin/repos_groups.py:164
 
#, python-format
 
msgid "updated repos group %s"
 
msgstr "更新版本库组 %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:176
 
#: rhodecode/controllers/admin/repos_groups.py:177
 
#, python-format
 
msgid "error occurred during update of repos group %s"
 
msgstr "更新版本库组时发生错误 %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:194
 
#: rhodecode/controllers/admin/repos_groups.py:195
 
#, python-format
 
msgid "This group contains %s repositores and cannot be deleted"
 
msgstr "这个组内有 %s 个版本库因而无法删除"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:202
 
#: rhodecode/controllers/admin/repos_groups.py:203
 
#, python-format
 
msgid "removed repos group %s"
 
msgstr "移除版本库组 %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:208
 
#: rhodecode/controllers/admin/repos_groups.py:209
 
msgid "Cannot delete this group it still contains subgroups"
 
msgstr "不能删除包含子组的组"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:213
 
#: rhodecode/controllers/admin/repos_groups.py:218
 
#: rhodecode/controllers/admin/repos_groups.py:214
 
#: rhodecode/controllers/admin/repos_groups.py:219
 
#, python-format
 
msgid "error occurred during deletion of repos group %s"
 
msgstr "删除版本库组时发生错误 %s"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:238
 
#: rhodecode/controllers/admin/repos_groups.py:240
 
msgid "An error occurred during deletion of group user"
 
msgstr "删除组用户时发生错误"
 

	
 
#: rhodecode/controllers/admin/repos_groups.py:258
 
#: rhodecode/controllers/admin/repos_groups.py:261
 
msgid "An error occurred during deletion of group users groups"
 
msgstr "删除版本库组的用户组时发生错误"
 

	
 
#: rhodecode/controllers/admin/settings.py:121
 
#: rhodecode/controllers/admin/settings.py:122
 
#, python-format
 
msgid "Repositories successfully rescanned added: %s,removed: %s"
 
msgstr "重新扫描版本库成功,增加 %s, 移除 %s"
 

	
 
#: rhodecode/controllers/admin/settings.py:129
 
#: rhodecode/controllers/admin/settings.py:130
 
msgid "Whoosh reindex task scheduled"
 
msgstr "Whoosh 重新索引任务调度"
 

	
 
#: rhodecode/controllers/admin/settings.py:160
 
#: rhodecode/controllers/admin/settings.py:161
 
msgid "Updated application settings"
 
msgstr "更新应用设置"
 

	
 
#: rhodecode/controllers/admin/settings.py:164
 
#: rhodecode/controllers/admin/settings.py:275
 
#: rhodecode/controllers/admin/settings.py:165
 
#: rhodecode/controllers/admin/settings.py:293
 
msgid "error occurred during updating application settings"
 
msgstr "更新设置时发生错误"
 

	
 
#: rhodecode/controllers/admin/settings.py:200
 
#: rhodecode/controllers/admin/settings.py:201
 
msgid "Updated visualisation settings"
 
msgstr "成功更新可视化设置"
 

	
 
#: rhodecode/controllers/admin/settings.py:205
 
#: rhodecode/controllers/admin/settings.py:206
 
msgid "error occurred during updating visualisation settings"
 
msgstr "更新可视化设置时发生错误"
 

	
 
#: rhodecode/controllers/admin/settings.py:271
 
#: rhodecode/controllers/admin/settings.py:289
 
msgid "Updated VCS settings"
 
msgstr "成功更新版本控制系统设置"
 

	
 
#: rhodecode/controllers/admin/settings.py:285
 
#: rhodecode/controllers/admin/settings.py:303
 
msgid "Added new hook"
 
msgstr "新建钩子"
 

	
 
#: rhodecode/controllers/admin/settings.py:297
 
#: rhodecode/controllers/admin/settings.py:315
 
msgid "Updated hooks"
 
msgstr "更新钩子"
 

	
 
#: rhodecode/controllers/admin/settings.py:301
 
#: rhodecode/controllers/admin/settings.py:319
 
msgid "error occurred during hook creation"
 
msgstr "创建钩子时发生错误"
 

	
 
#: rhodecode/controllers/admin/settings.py:320
 
#: rhodecode/controllers/admin/settings.py:338
 
msgid "Email task created"
 
msgstr "已创建电子邮件任务"
 

	
 
#: rhodecode/controllers/admin/settings.py:375
 
#: rhodecode/controllers/admin/settings.py:393
 
msgid "You can't edit this user since it's crucial for entire application"
 
msgstr "由于是系统帐号,无法编辑该用户"
 

	
 
#: rhodecode/controllers/admin/settings.py:406
 
#: rhodecode/controllers/admin/settings.py:424
 
msgid "Your account was updated successfully"
 
msgstr "你的帐号已经更新完成"
 

	
 
#: rhodecode/controllers/admin/settings.py:421
 
#: rhodecode/controllers/admin/settings.py:439
 
#: rhodecode/controllers/admin/users.py:191
 
#, python-format
 
msgid "error occurred during update of user %s"
 
msgstr "更新用户 %s 时发生错误"
 

	
 
#: rhodecode/controllers/admin/users.py:130
 
#, python-format
 
msgid "created user %s"
 
msgstr "创建用户 %s"
 

	
 
#: rhodecode/controllers/admin/users.py:142
 
#, python-format
 
@@ -713,309 +741,309 @@ msgstr "已授予用户组‘分支版本库’的权限"
 
#: rhodecode/controllers/admin/users_groups.py:249
 
msgid "Revoked 'repository fork' permission to users group"
 
msgstr "已撤销用户组‘分支版本库’的权限"
 

	
 
#: rhodecode/lib/auth.py:499
 
msgid "You need to be a registered user to perform this action"
 
msgstr "必须是注册用户才能进行此操作"
 

	
 
#: rhodecode/lib/auth.py:540
 
msgid "You need to be a signed in to view this page"
 
msgstr "必须登录才能访问该页面"
 

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

	
 
#: rhodecode/lib/diffs.py:96
 
#: rhodecode/lib/diffs.py:97
 
msgid "No changes detected"
 
msgstr "未发现差异"
 

	
 
#: rhodecode/lib/helpers.py:372
 
#: rhodecode/lib/helpers.py:373
 
#, python-format
 
msgid "%a, %d %b %Y %H:%M:%S"
 
msgstr "%Y/%b/%d %H:%M:%S %a"
 

	
 
#: rhodecode/lib/helpers.py:484
 
#: rhodecode/lib/helpers.py:485
 
msgid "True"
 
msgstr "是"
 

	
 
#: rhodecode/lib/helpers.py:488
 
#: rhodecode/lib/helpers.py:489
 
msgid "False"
 
msgstr "否"
 

	
 
#: rhodecode/lib/helpers.py:532
 
#: rhodecode/lib/helpers.py:533
 
msgid "Changeset not found"
 
msgstr "未找到修订集"
 

	
 
#: rhodecode/lib/helpers.py:555
 
#: rhodecode/lib/helpers.py:556
 
#, python-format
 
msgid "Show all combined changesets %s->%s"
 
msgstr "显示合并的修订集 %s->%s"
 

	
 
#: rhodecode/lib/helpers.py:561
 
#: rhodecode/lib/helpers.py:562
 
msgid "compare view"
 
msgstr "比较显示"
 

	
 
#: rhodecode/lib/helpers.py:581
 
#: rhodecode/lib/helpers.py:582
 
msgid "and"
 
msgstr "还有"
 

	
 
#: rhodecode/lib/helpers.py:582
 
#: rhodecode/lib/helpers.py:583
 
#, python-format
 
msgid "%s more"
 
msgstr "%s 个"
 

	
 
#: rhodecode/lib/helpers.py:583
 
#: rhodecode/lib/helpers.py:584
 
#: rhodecode/templates/changelog/changelog.html:48
 
msgid "revisions"
 
msgstr "修订"
 

	
 
#: rhodecode/lib/helpers.py:606
 
#: rhodecode/lib/helpers.py:607
 
msgid "fork name "
 
msgstr "分支名称"
 

	
 
#: rhodecode/lib/helpers.py:620
 
#: rhodecode/lib/helpers.py:621
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:4
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:12
 
#, python-format
 
msgid "Pull request #%s"
 
msgstr "拉取请求 #%s"
 

	
 
#: rhodecode/lib/helpers.py:626
 
#: rhodecode/lib/helpers.py:627
 
msgid "[deleted] repository"
 
msgstr "[删除] 版本库"
 

	
 
#: rhodecode/lib/helpers.py:628 rhodecode/lib/helpers.py:638
 
msgstr "[删除]版本库"
 

	
 
#: rhodecode/lib/helpers.py:629 rhodecode/lib/helpers.py:639
 
msgid "[created] repository"
 
msgstr "[创建] 版本库"
 

	
 
#: rhodecode/lib/helpers.py:630
 
msgstr "[创建]版本库"
 

	
 
#: rhodecode/lib/helpers.py:631
 
msgid "[created] repository as fork"
 
msgstr "[创建] 分支版本库"
 

	
 
#: rhodecode/lib/helpers.py:632 rhodecode/lib/helpers.py:640
 
msgstr "[创建]分支版本库"
 

	
 
#: rhodecode/lib/helpers.py:633 rhodecode/lib/helpers.py:641
 
msgid "[forked] repository"
 
msgstr "[分支] 版本库"
 

	
 
#: rhodecode/lib/helpers.py:634 rhodecode/lib/helpers.py:642
 
msgstr "[分支]版本库"
 

	
 
#: rhodecode/lib/helpers.py:635 rhodecode/lib/helpers.py:643
 
msgid "[updated] repository"
 
msgstr "[更新] 版本库"
 

	
 
#: rhodecode/lib/helpers.py:636
 
msgstr "[更新]版本库"
 

	
 
#: rhodecode/lib/helpers.py:637
 
msgid "[delete] repository"
 
msgstr "[删除] 版本库"
 

	
 
#: rhodecode/lib/helpers.py:644
 
msgstr "[删除]版本库"
 

	
 
#: rhodecode/lib/helpers.py:645
 
msgid "[created] user"
 
msgstr "[创建] 用户"
 

	
 
#: rhodecode/lib/helpers.py:646
 
msgstr "[创建]用户"
 

	
 
#: rhodecode/lib/helpers.py:647
 
msgid "[updated] user"
 
msgstr "[更新] 用户"
 

	
 
#: rhodecode/lib/helpers.py:648
 
msgstr "[更新]用户"
 

	
 
#: rhodecode/lib/helpers.py:649
 
msgid "[created] users group"
 
msgstr "[创建] 用户组"
 

	
 
#: rhodecode/lib/helpers.py:650
 
msgstr "[创建]用户组"
 

	
 
#: rhodecode/lib/helpers.py:651
 
msgid "[updated] users group"
 
msgstr "[更新] 用户组"
 

	
 
#: rhodecode/lib/helpers.py:652
 
msgstr "[更新]用户组"
 

	
 
#: rhodecode/lib/helpers.py:653
 
msgid "[commented] on revision in repository"
 
msgstr "[评论] 了版本库中的修订"
 

	
 
#: rhodecode/lib/helpers.py:654
 
msgstr "[评论]了版本库中的修订"
 

	
 
#: rhodecode/lib/helpers.py:655
 
msgid "[commented] on pull request for"
 
msgstr "[评论] 拉取请求"
 

	
 
#: rhodecode/lib/helpers.py:656
 
msgstr "[评论]拉取请求"
 

	
 
#: rhodecode/lib/helpers.py:657
 
msgid "[closed] pull request for"
 
msgstr "[关闭] 拉取请求"
 

	
 
#: rhodecode/lib/helpers.py:658
 
#: rhodecode/lib/helpers.py:659
 
msgid "[pushed] into"
 
msgstr "[推送] 到"
 

	
 
#: rhodecode/lib/helpers.py:660
 
msgstr "[推送]到"
 

	
 
#: rhodecode/lib/helpers.py:661
 
msgid "[committed via RhodeCode] into repository"
 
msgstr "[通过 RhodeCode 提交] 到版本库"
 

	
 
#: rhodecode/lib/helpers.py:662
 
msgstr "[通过 RhodeCode 提交]到版本库"
 

	
 
#: rhodecode/lib/helpers.py:663
 
msgid "[pulled from remote] into repository"
 
msgstr "[远程拉取] 到版本库"
 

	
 
#: rhodecode/lib/helpers.py:664
 
msgstr "[远程拉取]到版本库"
 

	
 
#: rhodecode/lib/helpers.py:665
 
msgid "[pulled] from"
 
msgstr "[拉取] 自"
 

	
 
#: rhodecode/lib/helpers.py:666
 
msgstr "[拉取]自"
 

	
 
#: rhodecode/lib/helpers.py:667
 
msgid "[started following] repository"
 
msgstr "[开始关注] 版本库"
 

	
 
#: rhodecode/lib/helpers.py:668
 
msgstr "[开始关注]版本库"
 

	
 
#: rhodecode/lib/helpers.py:669
 
msgid "[stopped following] repository"
 
msgstr "[停止关注] 版本库"
 

	
 
#: rhodecode/lib/helpers.py:840
 
msgstr "[停止关注]版本库"
 

	
 
#: rhodecode/lib/helpers.py:845
 
#, python-format
 
msgid " and %s more"
 
msgstr "还有 %s 个"
 

	
 
#: rhodecode/lib/helpers.py:844
 
#: rhodecode/lib/helpers.py:849
 
msgid "No Files"
 
msgstr "没有文件"
 

	
 
#: rhodecode/lib/utils2.py:335
 
#: rhodecode/lib/utils2.py:352
 
#, python-format
 
msgid "%d year"
 
msgid_plural "%d years"
 
msgstr[0] "%d 年"
 

	
 
#: rhodecode/lib/utils2.py:336
 
#: rhodecode/lib/utils2.py:353
 
#, python-format
 
msgid "%d month"
 
msgid_plural "%d months"
 
msgstr[0] "%d 月"
 

	
 
#: rhodecode/lib/utils2.py:337
 
#: rhodecode/lib/utils2.py:354
 
#, python-format
 
msgid "%d day"
 
msgid_plural "%d days"
 
msgstr[0] "%d 天"
 

	
 
#: rhodecode/lib/utils2.py:338
 
#: rhodecode/lib/utils2.py:355
 
#, python-format
 
msgid "%d hour"
 
msgid_plural "%d hours"
 
msgstr[0] "%d 小时"
 

	
 
#: rhodecode/lib/utils2.py:339
 
#: rhodecode/lib/utils2.py:356
 
#, python-format
 
msgid "%d minute"
 
msgid_plural "%d minutes"
 
msgstr[0] "%d 分钟"
 

	
 
#: rhodecode/lib/utils2.py:340
 
#: rhodecode/lib/utils2.py:357
 
#, python-format
 
msgid "%d second"
 
msgid_plural "%d seconds"
 
msgstr[0] "%d 秒"
 

	
 
#: rhodecode/lib/utils2.py:355
 
#: rhodecode/lib/utils2.py:372
 
#, python-format
 
msgid "%s ago"
 
msgstr "%s 之前"
 

	
 
#: rhodecode/lib/utils2.py:357
 
#: rhodecode/lib/utils2.py:374
 
#, python-format
 
msgid "%s and %s ago"
 
msgstr "%s 零 %s 之前"
 

	
 
#: rhodecode/lib/utils2.py:360
 
#: rhodecode/lib/utils2.py:377
 
msgid "just now"
 
msgstr "刚才"
 

	
 
#: rhodecode/lib/celerylib/tasks.py:269
 
msgid "password reset link"
 
msgstr "密码重置链接"
 

	
 
#: rhodecode/model/comment.py:110
 
#, python-format
 
msgid "on line %s"
 
msgstr "在 %s 行"
 

	
 
#: rhodecode/model/comment.py:157
 
#: rhodecode/model/comment.py:173
 
msgid "[Mention]"
 
msgstr "[提及]"
 

	
 
#: rhodecode/model/db.py:1140
 
#: rhodecode/model/db.py:1164
 
msgid "Repository no access"
 
msgstr "无版本库访问权限"
 

	
 
#: rhodecode/model/db.py:1141
 
#: rhodecode/model/db.py:1165
 
msgid "Repository read access"
 
msgstr "版本库读取权限"
 

	
 
#: rhodecode/model/db.py:1142
 
#: rhodecode/model/db.py:1166
 
msgid "Repository write access"
 
msgstr "版本库写入权限"
 

	
 
#: rhodecode/model/db.py:1143
 
#: rhodecode/model/db.py:1167
 
msgid "Repository admin access"
 
msgstr "版本库管理权限"
 

	
 
#: rhodecode/model/db.py:1145
 
#: rhodecode/model/db.py:1169
 
msgid "Repositories Group no access"
 
msgstr "无版本库组访问权限"
 

	
 
#: rhodecode/model/db.py:1146
 
#: rhodecode/model/db.py:1170
 
msgid "Repositories Group read access"
 
msgstr "版本库组读取权限"
 

	
 
#: rhodecode/model/db.py:1147
 
#: rhodecode/model/db.py:1171
 
msgid "Repositories Group write access"
 
msgstr "版本库组写入"
 

	
 
#: rhodecode/model/db.py:1148
 
#: rhodecode/model/db.py:1172
 
msgid "Repositories Group admin access"
 
msgstr "版本库组管理权限"
 

	
 
#: rhodecode/model/db.py:1150
 
#: rhodecode/model/db.py:1174
 
msgid "RhodeCode Administrator"
 
msgstr "RhodeCode 管理员"
 

	
 
#: rhodecode/model/db.py:1151
 
#: rhodecode/model/db.py:1175
 
msgid "Repository creation disabled"
 
msgstr "禁用创建版本库"
 

	
 
#: rhodecode/model/db.py:1152
 
#: rhodecode/model/db.py:1176
 
msgid "Repository creation enabled"
 
msgstr "允许创建版本库"
 

	
 
#: rhodecode/model/db.py:1153
 
#: rhodecode/model/db.py:1177
 
msgid "Repository forking disabled"
 
msgstr "禁用分支 版本库"
 

	
 
#: rhodecode/model/db.py:1154
 
#: rhodecode/model/db.py:1178
 
msgid "Repository forking enabled"
 
msgstr "允许分支版本库"
 

	
 
#: rhodecode/model/db.py:1155
 
#: rhodecode/model/db.py:1179
 
msgid "Register disabled"
 
msgstr "禁用注册"
 

	
 
#: rhodecode/model/db.py:1156
 
#: rhodecode/model/db.py:1180
 
msgid "Register new user with RhodeCode with manual activation"
 
msgstr "用手动激活注册新用户"
 

	
 
#: rhodecode/model/db.py:1159
 
#: rhodecode/model/db.py:1183
 
msgid "Register new user with RhodeCode with auto activation"
 
msgstr "用自动激活注册新用户"
 

	
 
#: rhodecode/model/db.py:1579
 
#: rhodecode/model/db.py:1611
 
msgid "Not Reviewed"
 
msgstr "未检视"
 

	
 
#: rhodecode/model/db.py:1580
 
#: rhodecode/model/db.py:1612
 
msgid "Approved"
 
msgstr "已批准"
 

	
 
#: rhodecode/model/db.py:1581
 
#: rhodecode/model/db.py:1613
 
msgid "Rejected"
 
msgstr "驳回"
 

	
 
#: rhodecode/model/db.py:1582
 
#: rhodecode/model/db.py:1614
 
msgid "Under Review"
 
msgstr "检视中"
 

	
 
#: rhodecode/model/forms.py:43
 
msgid "Please enter a login"
 
msgstr "请登录"
 

	
 
#: rhodecode/model/forms.py:44
 
#, python-format
 
msgid "Enter a value %(min)i characters long or more"
 
msgstr "输入一个不少于 %(min)i 个字符的值"
 

	
 
@@ -1043,25 +1071,25 @@ msgstr "提到了你"
 
#: rhodecode/model/notification.py:223
 
msgid "registered in RhodeCode"
 
msgstr "注册到 RhodeCode"
 

	
 
#: rhodecode/model/notification.py:224
 
msgid "opened new pull request"
 
msgstr "创建新的拉取请求"
 

	
 
#: rhodecode/model/notification.py:225
 
msgid "commented on pull request"
 
msgstr "评论了拉取请求"
 

	
 
#: rhodecode/model/pull_request.py:84
 
#: rhodecode/model/pull_request.py:89
 
#, python-format
 
msgid "%(user)s wants you to review pull request #%(pr_id)s"
 
msgstr "%(user)s 想要你检视拉取请求 #%(pr_id)s"
 

	
 
#: rhodecode/model/scm.py:535
 
msgid "latest tip"
 
msgstr "最后 tip 版本"
 

	
 
#: rhodecode/model/user.py:230
 
msgid "new user registration"
 
msgstr "[RhodeCode] 新用户注册"
 

	
 
@@ -1074,181 +1102,186 @@ msgstr "由于是系统帐号,无法编辑该用户"
 
msgid "You can't remove this user since it's crucial for entire application"
 
msgstr "由于是系统帐号,无法删除该用户"
 

	
 
#: rhodecode/model/user.py:329
 
#, python-format
 
msgid ""
 
"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:35 rhodecode/model/validators.py:36
 
#: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37
 
msgid "Value cannot be an empty list"
 
msgstr "值不能为空"
 

	
 
#: rhodecode/model/validators.py:82
 
#: rhodecode/model/validators.py:83
 
#, python-format
 
msgid "Username \"%(username)s\" already exists"
 
msgstr "用户名称 %(username)s 已经存在"
 

	
 
#: rhodecode/model/validators.py:84
 
#: rhodecode/model/validators.py:85
 
#, python-format
 
msgid "Username \"%(username)s\" is forbidden"
 
msgstr "不允许用户名 \"%(username)s\""
 

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

	
 
#: rhodecode/model/validators.py:114
 
#: rhodecode/model/validators.py:115
 
#, python-format
 
msgid "Username %(username)s is not valid"
 
msgstr "用户名称 %(username)s 无效"
 

	
 
#: rhodecode/model/validators.py:133
 
#: rhodecode/model/validators.py:134
 
msgid "Invalid users group name"
 
msgstr "无效的用户组名"
 

	
 
#: rhodecode/model/validators.py:134
 
#: rhodecode/model/validators.py:135
 
#, python-format
 
msgid "Users group \"%(usersgroup)s\" already exists"
 
msgstr "用户组 \"%(usersgroup)s\" 已经存在"
 

	
 
#: rhodecode/model/validators.py:136
 
#: 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 ""
 
"只能使用字母、数字、下划线、小数点或减号作为用户组名,且必须由数字或字母开头"
 

	
 
#: rhodecode/model/validators.py:174
 
#: rhodecode/model/validators.py:175
 
msgid "Cannot assign this group as parent"
 
msgstr "不能将这个组作为 parent"
 

	
 
#: rhodecode/model/validators.py:175
 
#: rhodecode/model/validators.py:176
 
#, python-format
 
msgid "Group \"%(group_name)s\" already exists"
 
msgstr "组 \"%(group_name)s\" 已经存在"
 

	
 
#: rhodecode/model/validators.py:177
 
#: rhodecode/model/validators.py:178
 
#, python-format
 
msgid "Repository with name \"%(group_name)s\" already exists"
 
msgstr "已经存在名为 \"%(group_name)s\" 的版本库"
 

	
 
#: rhodecode/model/validators.py:235
 
#: rhodecode/model/validators.py:236
 
msgid "Invalid characters (non-ascii) in password"
 
msgstr "密码含有无效(非ASCII)字符"
 

	
 
#: rhodecode/model/validators.py:250
 
#: rhodecode/model/validators.py:251
 
msgid "Passwords do not match"
 
msgstr "密码不符"
 

	
 
#: rhodecode/model/validators.py:267
 
#: rhodecode/model/validators.py:268
 
msgid "invalid password"
 
msgstr "无效密码"
 

	
 
#: rhodecode/model/validators.py:268
 
#: rhodecode/model/validators.py:269
 
msgid "invalid user name"
 
msgstr "无效用户名"
 

	
 
#: rhodecode/model/validators.py:269
 
#: rhodecode/model/validators.py:270
 
msgid "Your account is disabled"
 
msgstr "该帐号已被禁用"
 

	
 
#: rhodecode/model/validators.py:313
 
#: rhodecode/model/validators.py:314
 
#, python-format
 
msgid "Repository name %(repo)s is disallowed"
 
msgstr "版本库名称不能为 %(repo)s"
 

	
 
#: rhodecode/model/validators.py:315
 
#: rhodecode/model/validators.py:316
 
#, python-format
 
msgid "Repository named %(repo)s already exists"
 
msgstr "已经存在版本库 %(repo)s"
 

	
 
#: rhodecode/model/validators.py:316
 
#: rhodecode/model/validators.py:317
 
#, python-format
 
msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\""
 
msgstr "版本库组 \"%(group)s\" 中已经存在版本库 \"%(repo)s\""
 

	
 
#: rhodecode/model/validators.py:318
 
#: rhodecode/model/validators.py:319
 
#, python-format
 
msgid "Repositories group with name \"%(repo)s\" already exists"
 
msgstr "已经存在名为 \"%(repo)s\" 的版本库组"
 

	
 
#: rhodecode/model/validators.py:431
 
#: rhodecode/model/validators.py:432
 
msgid "invalid clone url"
 
msgstr "无效的克隆地址"
 

	
 
#: rhodecode/model/validators.py:432
 
#: rhodecode/model/validators.py:433
 
msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url"
 
msgstr "无效的克隆地址,提供一个有效的克隆 http(s) 或 svn+http(s) 地址"
 

	
 
#: rhodecode/model/validators.py:457
 
#: rhodecode/model/validators.py:458
 
msgid "Fork have to be the same type as parent"
 
msgstr "分支必须使用和父版本库相同的类型"
 

	
 
#: rhodecode/model/validators.py:478
 
#: rhodecode/model/validators.py:473
 
#| msgid "You don't have permission to view this page"
 
msgid "You don't have permissions to create repository in this group"
 
msgstr "没有在这个组里面创建版本库的权限"
 

	
 
#: rhodecode/model/validators.py:498
 
msgid "This username or users group name is not valid"
 
msgstr "用户或用户组名称无效"
 

	
 
#: rhodecode/model/validators.py:562
 
#: rhodecode/model/validators.py:582
 
msgid "This is not a valid path"
 
msgstr "不是一个合法的路径"
 

	
 
#: rhodecode/model/validators.py:577
 
#: rhodecode/model/validators.py:597
 
msgid "This e-mail address is already taken"
 
msgstr "该邮件地址已被使用"
 

	
 
#: rhodecode/model/validators.py:597
 
#: rhodecode/model/validators.py:617
 
#, python-format
 
msgid "e-mail \"%(email)s\" does not exist."
 
msgstr "邮件地址  \"%(email)s\" 不存在"
 

	
 
#: rhodecode/model/validators.py:634
 
#: rhodecode/model/validators.py:654
 
msgid ""
 
"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:653
 
#: rhodecode/model/validators.py:673
 
#, python-format
 
msgid "Revisions %(revs)s are already part of pull request or have set status"
 
msgstr "修订 %(revs)s 已经包含在拉取请求中或者或者已经设置状态"
 

	
 
#: rhodecode/templates/index.html:3
 
msgid "Dashboard"
 
msgstr "控制面板"
 

	
 
#: rhodecode/templates/index_base.html:6
 
#: rhodecode/templates/repo_switcher_list.html:4
 
#: rhodecode/templates/admin/repos/repos.html:9
 
#: rhodecode/templates/admin/users/user_edit_my_account.html:31
 
#: rhodecode/templates/admin/users/users.html:9
 
#: rhodecode/templates/bookmarks/bookmarks.html:10
 
#: rhodecode/templates/branches/branches.html:9
 
#: rhodecode/templates/journal/journal.html:40
 
#: rhodecode/templates/tags/tags.html:10
 
msgid "quick filter..."
 
msgstr "快速过滤..."
 

	
 
#: rhodecode/templates/index_base.html:6
 
#: rhodecode/templates/admin/repos/repos.html:9
 
#: rhodecode/templates/base/base.html:221
 
#: rhodecode/templates/base/base.html:230
 
msgid "repositories"
 
msgstr "个版本库"
 
msgstr "版本库"
 

	
 
#: rhodecode/templates/index_base.html:13
 
#: rhodecode/templates/index_base.html:15
 
#: rhodecode/templates/admin/repos/repos.html:21
 
msgid "ADD REPOSITORY"
 
msgstr "新建版本库"
 

	
 
#: rhodecode/templates/index_base.html:29
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:32
 
@@ -1542,25 +1575,25 @@ msgstr "没有任何标签"
 
#: rhodecode/templates/bookmarks/bookmarks.html:15
 
msgid "bookmarks"
 
msgstr "书签"
 

	
 
#: rhodecode/templates/switch_to_list.html:35
 
#: rhodecode/templates/bookmarks/bookmarks_data.html:32
 
msgid "There are no bookmarks yet"
 
msgstr "无书签"
 

	
 
#: rhodecode/templates/admin/admin.html:5
 
#: rhodecode/templates/admin/admin.html:9
 
msgid "Admin journal"
 
msgstr "管理员日志"
 
msgstr "系统日志"
 

	
 
#: rhodecode/templates/admin/admin_log.html:6
 
#: rhodecode/templates/admin/repos/repos.html:74
 
#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8
 
#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:9
 
#: rhodecode/templates/journal/journal.html:61
 
#: rhodecode/templates/journal/journal.html:62
 
msgid "Action"
 
msgstr "操作"
 

	
 
#: rhodecode/templates/admin/admin_log.html:7
 
msgid "Repository"
 
@@ -1672,26 +1705,26 @@ msgstr "保存"
 
msgid "My Notifications"
 
msgstr "我的通知"
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:29
 
msgid "All"
 
msgstr "全部"
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:30
 
msgid "Comments"
 
msgstr "评论"
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:31
 
#: rhodecode/templates/base/base.html:254
 
#: rhodecode/templates/base/base.html:256
 
#: rhodecode/templates/base/base.html:263
 
#: rhodecode/templates/base/base.html:265
 
msgid "Pull requests"
 
msgstr "拉取请求"
 

	
 
#: rhodecode/templates/admin/notifications/notifications.html:35
 
msgid "Mark all read"
 
msgstr "全部标记为已读"
 

	
 
#: rhodecode/templates/admin/notifications/notifications_data.html:39
 
msgid "No notifications here yet"
 
msgstr "无通知"
 

	
 
#: rhodecode/templates/admin/notifications/show_notification.html:5
 
@@ -1744,25 +1777,25 @@ msgstr "覆盖已有设置"
 
msgid "Registration"
 
msgstr "注册"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:63
 
msgid "Repository creation"
 
msgstr "建立版本库"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:71
 
msgid "Repository forking"
 
msgstr "版本库分支"
 

	
 
#: rhodecode/templates/admin/permissions/permissions.html:78
 
#: rhodecode/templates/admin/repos/repo_edit.html:241
 
#: rhodecode/templates/admin/repos/repo_edit.html:255
 
msgid "set"
 
msgstr "设置"
 

	
 
#: rhodecode/templates/admin/repos/repo_add.html:5
 
#: rhodecode/templates/admin/repos/repo_add_create_repository.html:5
 
msgid "Add repository"
 
msgstr "添加版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_add.html:11
 
#: rhodecode/templates/admin/repos/repo_edit.html:11
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
 
msgid "Repositories"
 
@@ -1826,25 +1859,25 @@ msgstr "文件浏览、下载、whoosh和readme的默认修订版本"
 
#: rhodecode/templates/settings/repo_settings.html:70
 
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:69
 
#: 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 "私有版本库只对显示添加的合作者可见。"
 
msgstr "私有版本库只对成员可见。"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_base.html:73
 
msgid "add"
 
msgstr "新建"
 

	
 
#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9
 
msgid "add new repository"
 
msgstr "新建版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:5
 
msgid "Edit repository"
 
msgstr "编辑版本库"
 
@@ -1955,97 +1988,107 @@ msgstr "确认从远程拉取修订集"
 
#: rhodecode/templates/admin/repos/repo_edit.html:186
 
msgid "Cache"
 
msgstr "缓存"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:190
 
msgid "Invalidate repository cache"
 
msgstr "清除版本库缓存"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:190
 
msgid "Confirm to invalidate repository cache"
 
msgstr "确认清除版本库缓存"
 

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

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:198
 
msgid "List of cached values"
 
msgstr "缓存数据列表"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:209
 
#: rhodecode/templates/base/base.html:327
 
#: rhodecode/templates/base/base.html:329
 
#: rhodecode/templates/base/base.html:331
 
msgid "Public journal"
 
msgstr "公共日志"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:201
 
#: rhodecode/templates/admin/repos/repo_edit.html:215
 
msgid "Remove from public journal"
 
msgstr "从公共日志删除"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:203
 
#: rhodecode/templates/admin/repos/repo_edit.html:217
 
msgid "Add to public journal"
 
msgstr "添加到公共日志"
 

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

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:215
 
#: rhodecode/templates/admin/repos/repo_edit.html:229
 
msgid "Locking"
 
msgstr "锁定"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:220
 
#: rhodecode/templates/admin/repos/repo_edit.html:234
 
msgid "Unlock locked repo"
 
msgstr "解锁版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:220
 
#: rhodecode/templates/admin/repos/repo_edit.html:234
 
msgid "Confirm to unlock repository"
 
msgstr "确认解锁版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:223
 
#: rhodecode/templates/admin/repos/repo_edit.html:237
 
msgid "lock repo"
 
msgstr "锁定版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:223
 
#: rhodecode/templates/admin/repos/repo_edit.html:237
 
msgid "Confirm to lock repository"
 
msgstr "确认锁定版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:224
 
#: rhodecode/templates/admin/repos/repo_edit.html:238
 
msgid "Repository is not locked"
 
msgstr "版本库未锁定"
 

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

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:236
 
#: rhodecode/templates/admin/repos/repo_edit.html:250
 
msgid "Set as fork of"
 
msgstr "设置 fork 自"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:245
 
#: rhodecode/templates/admin/repos/repo_edit.html:259
 
msgid "Manually set this repository as a fork of another from the list"
 
msgstr "从列表中手动设置这个版本库 fork 自另一版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:251
 
#: rhodecode/templates/admin/repos/repo_edit.html:265
 
#: rhodecode/templates/changeset/changeset_file_comment.html:26
 
msgid "Delete"
 
msgstr "删除"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:255
 
#: rhodecode/templates/admin/repos/repo_edit.html:269
 
msgid "Remove this repository"
 
msgstr "删除版本库"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit.html:255
 
#: rhodecode/templates/admin/repos/repo_edit.html:269
 
#: rhodecode/templates/journal/journal.html:84
 
msgid "Confirm to delete this repository"
 
msgstr "确认删除版本库"
 

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

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:3
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3
 
msgid "none"
 
@@ -2055,27 +2098,27 @@ msgstr "无"
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:4
 
msgid "read"
 
msgstr "读"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:5
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:5
 
msgid "write"
 
msgstr "写"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:6
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
 
#: rhodecode/templates/admin/users/users.html:85
 
#: rhodecode/templates/base/base.html:217
 
#: rhodecode/templates/base/base.html:226
 
msgid "admin"
 
msgstr "管理员"
 
msgstr "管理"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:7
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:7
 
msgid "member"
 
msgstr "成员"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:16
 
#: rhodecode/templates/data_table/_dt_elements.html:67
 
#: rhodecode/templates/journal/journal.html:132
 
#: rhodecode/templates/summary/summary.html:76
 
msgid "private repository"
 
msgstr "私有版本库"
 
@@ -2090,42 +2133,76 @@ msgstr "默认"
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:58
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42
 
msgid "revoke"
 
msgstr "移除"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:83
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:67
 
msgid "Add another member"
 
msgstr "添加成员"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:97
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:81
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
 
msgid "Failed to remove user"
 
msgstr "删除用户失败"
 

	
 
#: rhodecode/templates/admin/repos/repo_edit_perms.html:112
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:96
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:103
 
msgid "Failed to remove users group"
 
msgstr "删除用户组失败"
 

	
 
#: rhodecode/templates/admin/repos/repos.html:5
 
msgid "Repositories administration"
 
msgstr "版本库管理员"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:8
 
msgid "Groups"
 
msgstr "组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:12
 
#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73
 
msgid "apply to children"
 
msgstr "应用到成员"
 

	
 
#: 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 "授予或者撤销权限所有组成员,包括子组和子版本库"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:9
 
#: rhodecode/templates/base/base.html:122
 
#: rhodecode/templates/base/base.html:309
 
#: rhodecode/templates/base/base.html:311
 
#: rhodecode/templates/base/base.html:313
 
#: rhodecode/templates/bookmarks/bookmarks.html:11
 
#: rhodecode/templates/branches/branches.html:10
 
#: rhodecode/templates/changelog/changelog.html:10
 
#: rhodecode/templates/changeset/changeset.html:10
 
#: rhodecode/templates/changeset/changeset_range.html:9
 
#: rhodecode/templates/compare/compare_diff.html:9
 
#: rhodecode/templates/files/file_diff.html:8
 
#: rhodecode/templates/files/files.html:8
 
#: 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/pullrequests/pullrequest.html:8
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:8
 
#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
 
#: rhodecode/templates/settings/repo_settings.html:9
 
#: rhodecode/templates/shortlog/shortlog.html:10
 
#: rhodecode/templates/summary/summary.html:8
 
#: rhodecode/templates/tags/tags.html:11
 
msgid "Home"
 
msgstr "首页"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups.html:13
 
msgid "with"
 
msgstr "有"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5
 
msgid "Add repos group"
 
msgstr "添加版本库组"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10
 
#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10
 
msgid "Repos groups"
 
msgstr "版本库组"
 

	
 
@@ -2189,25 +2266,25 @@ msgstr "删除"
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54
 
#, python-format
 
msgid "Confirm to delete this group: %s"
 
msgstr "确认删除该版本库组: %s"
 

	
 
#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:62
 
msgid "There are no repositories groups yet"
 
msgstr "没有版本库组"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:5
 
#: rhodecode/templates/admin/settings/settings.html:5
 
msgid "Settings administration"
 
msgstr "设置管理员"
 
msgstr "系统设置"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:9
 
#: rhodecode/templates/admin/settings/settings.html:9
 
#: rhodecode/templates/settings/repo_settings.html:13
 
msgid "Settings"
 
msgstr "设置"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:24
 
msgid "Built in hooks - read only"
 
msgstr "内建钩子 - 只读"
 

	
 
#: rhodecode/templates/admin/settings/hooks.html:40
 
@@ -2380,24 +2457,25 @@ msgstr " 允许从远程 svn 地址克隆。需要安装 hgsubversion 库"
 
#: rhodecode/templates/admin/settings/settings.html:245
 
msgid "Repositories location"
 
msgstr "版本库路径"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:250
 
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 "这是一个关键设置。如果确认修改该项设置,请重启服务以便设置生效。"
 

	
 
#: rhodecode/templates/admin/settings/settings.html:251
 
#: rhodecode/templates/base/base.html:218
 
msgid "unlock"
 
msgstr "解锁"
 

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

	
 
#: rhodecode/templates/admin/settings/settings.html:272
 
msgid "Test Email"
 
msgstr "测试邮件"
 
@@ -2607,25 +2685,25 @@ msgid "No repositories yet"
 
msgstr "没有任何版本库"
 

	
 
#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40
 
#: rhodecode/templates/journal/journal.html:96
 
msgid "create one now"
 
msgstr "创建一个"
 

	
 
#: rhodecode/templates/admin/users/users.html:5
 
msgid "Users administration"
 
msgstr "用户管理员"
 

	
 
#: rhodecode/templates/admin/users/users.html:9
 
#: rhodecode/templates/base/base.html:223
 
#: rhodecode/templates/base/base.html:232
 
msgid "users"
 
msgstr "用户"
 

	
 
#: rhodecode/templates/admin/users/users.html:23
 
msgid "ADD NEW USER"
 
msgstr "添加用户"
 

	
 
#: rhodecode/templates/admin/users/users.html:77
 
msgid "username"
 
msgstr "用户名"
 

	
 
#: rhodecode/templates/admin/users/users.html:80
 
@@ -2637,25 +2715,25 @@ msgid "lastname"
 
msgstr "姓"
 

	
 
#: rhodecode/templates/admin/users/users.html:82
 
msgid "last login"
 
msgstr "最后登录"
 

	
 
#: rhodecode/templates/admin/users/users.html:84
 
#: rhodecode/templates/admin/users_groups/users_groups.html:34
 
msgid "active"
 
msgstr "启用"
 

	
 
#: rhodecode/templates/admin/users/users.html:86
 
#: rhodecode/templates/base/base.html:226
 
#: rhodecode/templates/base/base.html:235
 
msgid "ldap"
 
msgstr "LDAP"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:5
 
msgid "Add users group"
 
msgstr "添加用户组"
 

	
 
#: rhodecode/templates/admin/users_groups/users_group_add.html:10
 
#: rhodecode/templates/admin/users_groups/users_groups.html:9
 
msgid "Users groups"
 
msgstr "用户组"
 

	
 
@@ -2728,55 +2806,28 @@ msgstr "登录"
 
#: rhodecode/templates/base/base.html:100
 
msgid "Forgot password ?"
 
msgstr "忘记密码?"
 

	
 
#: rhodecode/templates/base/base.html:107
 
msgid "Log In"
 
msgstr "登录"
 

	
 
#: rhodecode/templates/base/base.html:118
 
msgid "Inbox"
 
msgstr "收件箱"
 

	
 
#: rhodecode/templates/base/base.html:122
 
#: rhodecode/templates/base/base.html:300
 
#: rhodecode/templates/base/base.html:302
 
#: rhodecode/templates/base/base.html:304
 
#: rhodecode/templates/bookmarks/bookmarks.html:11
 
#: rhodecode/templates/branches/branches.html:10
 
#: rhodecode/templates/changelog/changelog.html:10
 
#: rhodecode/templates/changeset/changeset.html:10
 
#: rhodecode/templates/changeset/changeset_range.html:9
 
#: rhodecode/templates/compare/compare_diff.html:9
 
#: rhodecode/templates/files/file_diff.html:8
 
#: rhodecode/templates/files/files.html:8
 
#: 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/pullrequests/pullrequest.html:8
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:8
 
#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
 
#: rhodecode/templates/settings/repo_settings.html:9
 
#: rhodecode/templates/shortlog/shortlog.html:10
 
#: rhodecode/templates/summary/summary.html:8
 
#: rhodecode/templates/tags/tags.html:11
 
msgid "Home"
 
msgstr "首页"
 

	
 
#: rhodecode/templates/base/base.html:123
 
#: rhodecode/templates/base/base.html:309
 
#: rhodecode/templates/base/base.html:311
 
#: rhodecode/templates/base/base.html:313
 
#: rhodecode/templates/base/base.html:318
 
#: rhodecode/templates/base/base.html:320
 
#: rhodecode/templates/base/base.html:322
 
#: rhodecode/templates/journal/journal.html:4
 
#: rhodecode/templates/journal/journal.html:21
 
#: rhodecode/templates/journal/public_journal.html:4
 
msgid "Journal"
 
msgstr "日志"
 

	
 
#: rhodecode/templates/base/base.html:125
 
msgid "Log Out"
 
msgstr "退出"
 

	
 
#: rhodecode/templates/base/base.html:144
 
msgid "Switch repository"
 
@@ -2823,68 +2874,77 @@ msgstr "切换到"
 
#: rhodecode/templates/data_table/_dt_elements.html:33
 
#: rhodecode/templates/data_table/_dt_elements.html:35
 
msgid "Files"
 
msgstr "浏览"
 

	
 
#: rhodecode/templates/base/base.html:195
 
#: rhodecode/templates/base/base.html:199
 
msgid "Options"
 
msgstr "选项"
 

	
 
#: rhodecode/templates/base/base.html:204
 
#: rhodecode/templates/base/base.html:206
 
#: rhodecode/templates/base/base.html:227
 
msgid "settings"
 
msgstr "设置"
 

	
 
#: rhodecode/templates/base/base.html:209
 
#| msgid "Repository creation"
 
msgid "repository settings"
 
msgstr "版本库设置"
 

	
 
#: rhodecode/templates/base/base.html:210
 
#: rhodecode/templates/data_table/_dt_elements.html:80
 
#: rhodecode/templates/forks/fork.html:13
 
msgid "fork"
 
msgstr "分支"
 

	
 
#: rhodecode/templates/base/base.html:211
 
#: rhodecode/templates/base/base.html:212
 
#: rhodecode/templates/changelog/changelog.html:40
 
msgid "Open new pull request"
 
msgstr "新建拉取请求"
 

	
 
#: rhodecode/templates/base/base.html:213
 
#: rhodecode/templates/base/base.html:214
 
msgid "search"
 
msgstr "搜索"
 

	
 
#: rhodecode/templates/base/base.html:222
 
#: rhodecode/templates/base/base.html:220
 
#| msgid "unlock"
 
msgid "lock"
 
msgstr "锁定"
 

	
 
#: rhodecode/templates/base/base.html:231
 
msgid "repositories groups"
 
msgstr "版本库组"
 

	
 
#: rhodecode/templates/base/base.html:224
 
#: rhodecode/templates/base/base.html:233
 
msgid "users groups"
 
msgstr "用户组"
 

	
 
#: rhodecode/templates/base/base.html:225
 
#: rhodecode/templates/base/base.html:234
 
msgid "permissions"
 
msgstr "权限"
 

	
 
#: rhodecode/templates/base/base.html:238
 
#: rhodecode/templates/base/base.html:240
 
#: rhodecode/templates/base/base.html:236
 
msgid "settings"
 
msgstr "设置"
 

	
 
#: rhodecode/templates/base/base.html:247
 
#: rhodecode/templates/base/base.html:249
 
msgid "Followers"
 
msgstr "关注者"
 

	
 
#: rhodecode/templates/base/base.html:246
 
#: rhodecode/templates/base/base.html:248
 
#: rhodecode/templates/base/base.html:255
 
#: rhodecode/templates/base/base.html:257
 
msgid "Forks"
 
msgstr "分支"
 

	
 
#: rhodecode/templates/base/base.html:327
 
#: rhodecode/templates/base/base.html:329
 
#: rhodecode/templates/base/base.html:331
 
#: rhodecode/templates/base/base.html:336
 
#: rhodecode/templates/base/base.html:338
 
#: rhodecode/templates/base/base.html:340
 
#: rhodecode/templates/search/search.html:52
 
msgid "Search"
 
msgstr "搜索"
 

	
 
#: rhodecode/templates/base/root.html:42
 
msgid "add another comment"
 
msgstr "添加新的评论"
 

	
 
#: rhodecode/templates/base/root.html:43
 
#: rhodecode/templates/journal/journal.html:120
 
#: rhodecode/templates/summary/summary.html:57
 
msgid "Stop following this repository"
 
@@ -3098,28 +3158,24 @@ msgstr[0] "%d 条评论"
 
#: rhodecode/templates/changeset/changeset.html:48
 
#: rhodecode/templates/changeset/changeset_file_comment.html:82
 
#, python-format
 
msgid "(%d inline)"
 
msgid_plural "(%d inline)"
 
msgstr[0] "(%d 内嵌)"
 

	
 
#: rhodecode/templates/changeset/changeset.html:103
 
#, python-format
 
msgid "%s files affected with %s insertions and %s deletions:"
 
msgstr "%s 个文件受影响包括 %s 行插入和 %s 行删除:"
 

	
 
#: rhodecode/templates/changeset/changeset.html:119
 
msgid "Changeset was too big and was cut off..."
 
msgstr "修订集太大已被截断......"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:42
 
msgid "Submitting..."
 
msgstr "提交中……"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:45
 
msgid "Commenting on line {1}."
 
msgstr "在 {1} 行上评论"
 

	
 
#: rhodecode/templates/changeset/changeset_file_comment.html:46
 
#: rhodecode/templates/changeset/changeset_file_comment.html:121
 
#, python-format
 
msgid "Comments parsed using %s syntax with %s support."
 
@@ -3606,24 +3662,29 @@ msgstr "标题"
 
msgid "description"
 
msgstr "描述"
 

	
 
#: rhodecode/templates/pullrequests/pullrequest.html:123
 
msgid "Send pull request"
 
msgstr "发送拉取请求"
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:23
 
#, python-format
 
msgid "Closed %s"
 
msgstr "关闭于 %s"
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:23
 
#, python-format
 
msgid "with status %s"
 
msgstr "状态%s"
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:31
 
msgid "Status"
 
msgstr "状态"
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:36
 
msgid "Pull request status"
 
msgstr "拉取请求状态"
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show.html:44
 
msgid "Still not reviewed by"
 
msgstr "还未检视的检视人员"
 

	
 
@@ -3648,29 +3709,28 @@ msgstr "传入修订集"
 
#: rhodecode/templates/pullrequests/pullrequest_show_all.html:4
 
msgid "all pull requests"
 
msgstr "所有拉取请求"
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show_all.html:12
 
msgid "All pull requests"
 
msgstr "所有拉取请求"
 

	
 
#: rhodecode/templates/pullrequests/pullrequest_show_all.html:27
 
msgid "Closed"
 
msgstr "已关闭"
 

	
 
# 中文中 repo name 在前面 serch term在后面
 
#: rhodecode/templates/search/search.html:6
 
#, python-format
 
msgid "Search \"%s\" in repository: %s"
 
msgstr "在版本库 %2s 中搜索 \"%1s\""
 
msgstr "搜索 \"%s\" 于版本库 %s 中"
 

	
 
#: rhodecode/templates/search/search.html:8
 
#, python-format
 
msgid "Search \"%s\" in all repositories"
 
msgstr "在所有的版本库中搜索  \"%s\""
 

	
 
#: rhodecode/templates/search/search.html:12
 
#: rhodecode/templates/search/search.html:32
 
#, python-format
 
msgid "Search in repository: %s"
 
msgstr "在版本库 %s 中搜索"
 

	
 
@@ -3883,12 +3943,15 @@ msgstr "文件已添加"
 
#: rhodecode/templates/summary/summary.html:658
 
msgid "file changed"
 
msgstr "文件已更改"
 

	
 
#: rhodecode/templates/summary/summary.html:659
 
msgid "file removed"
 
msgstr "文件已删除"
 

	
 
#: rhodecode/templates/tags/tags.html:5
 
#, python-format
 
msgid "%s Tags"
 
msgstr "%s 标签"
 

	
 
#~ msgid "Groups"
 
#~ msgstr "组"
rhodecode/lib/helpers.py
Show inline comments
 
@@ -991,72 +991,91 @@ def urlify_commit(text_, repository=None
 
    def linkify_others(t, l):
 
        urls = re.compile(r'(\<a.*?\<\/a\>)',)
 
        links = []
 
        for e in urls.split(t):
 
            if not urls.match(e):
 
                links.append('<a class="message-link" href="%s">%s</a>' % (l, e))
 
            else:
 
                links.append(e)
 

	
 
        return ''.join(links)
 

	
 
    # urlify changesets - extrac revisions and make link out of them
 
    text_ = urlify_changesets(escaper(text_), repository)
 
    newtext = urlify_changesets(escaper(text_), repository)
 

	
 
    try:
 
        conf = config['app_conf']
 

	
 
        URL_PAT = re.compile(r'%s' % conf.get('issue_pat'))
 
        # allow multiple issue servers to be used
 
        valid_indices = [
 
            x.group(1)
 
            for x in map(lambda x: re.match(r'issue_pat(.*)', x), conf.keys())
 
            if x and 'issue_server_link%s' % x.group(1) in conf
 
            and 'issue_prefix%s' % x.group(1) in conf
 
        ]
 

	
 
        log.debug('found issue server suffixes `%s` during valuation of: %s'
 
                  % (','.join(valid_indices), newtext))
 

	
 
        if URL_PAT:
 
            ISSUE_SERVER_LNK = conf.get('issue_server_link')
 
            ISSUE_PREFIX = conf.get('issue_prefix')
 
        for pattern_index in valid_indices:
 
            ISSUE_PATTERN = conf.get('issue_pat%s' % pattern_index)
 
            ISSUE_SERVER_LNK = conf.get('issue_server_link%s' % pattern_index)
 
            ISSUE_PREFIX = conf.get('issue_prefix%s' % pattern_index)
 

	
 
            log.debug('pattern suffix `%s` PAT:%s SERVER_LINK:%s PREFIX:%s'
 
                      % (pattern_index, ISSUE_PATTERN, ISSUE_SERVER_LNK,
 
                         ISSUE_PREFIX))
 

	
 
            URL_PAT = re.compile(r'%s' % ISSUE_PATTERN)
 

	
 
            def url_func(match_obj):
 
                pref = ''
 
                if match_obj.group().startswith(' '):
 
                    pref = ' '
 

	
 
                issue_id = ''.join(match_obj.groups())
 
                tmpl = (
 
                '%(pref)s<a class="%(cls)s" href="%(url)s">'
 
                '%(issue-prefix)s%(id-repr)s'
 
                '</a>'
 
                )
 
                url = ISSUE_SERVER_LNK.replace('{id}', issue_id)
 
                if repository:
 
                    url = url.replace('{repo}', repository)
 
                    repo_name = repository.split(URL_SEP)[-1]
 
                    url = url.replace('{repo_name}', repo_name)
 

	
 
                return tmpl % {
 
                     'pref': pref,
 
                     'cls': 'issue-tracker-link',
 
                     'url': url,
 
                     'id-repr': issue_id,
 
                     'issue-prefix': ISSUE_PREFIX,
 
                     'serv': ISSUE_SERVER_LNK,
 
                }
 
            newtext = URL_PAT.sub(url_func, newtext)
 
            log.debug('processed prefix:`%s` => %s' % (pattern_index, newtext))
 

	
 
            newtext = URL_PAT.sub(url_func, text_)
 

	
 
        # if we actually did something above
 
        if valid_indices:
 
            if link_:
 
                # wrap not links into final link => link_
 
                newtext = linkify_others(newtext, link_)
 

	
 
            return literal(newtext)
 
    except:
 
        log.error(traceback.format_exc())
 
        pass
 

	
 
    return text_
 
    return newtext
 

	
 

	
 
def rst(source):
 
    return literal('<div class="rst-block">%s</div>' %
 
                   MarkupRenderer.rst(source))
 

	
 

	
 
def rst_w_mentions(source):
 
    """
 
    Wrapped rst renderer with @mention highlighting
 

	
 
    :param source:
rhodecode/lib/hooks.py
Show inline comments
 
@@ -308,45 +308,45 @@ def handle_git_receive(repo_path, revs, 
 
    :type repo_path:
 
    :param revs:
 
    :type revs:
 
    :param env:
 
    :type env:
 
    """
 
    from paste.deploy import appconfig
 
    from sqlalchemy import engine_from_config
 
    from rhodecode.config.environment import load_environment
 
    from rhodecode.model import init_model
 
    from rhodecode.model.db import RhodeCodeUi
 
    from rhodecode.lib.utils import make_ui
 
    extras = json.loads(env['RHODECODE_EXTRAS'])
 

	
 
    path, ini_name = os.path.split(env['RHODECODE_CONFIG_FILE'])
 
    path, ini_name = os.path.split(extras['config'])
 
    conf = appconfig('config:%s' % ini_name, relative_to=path)
 
    load_environment(conf.global_conf, conf.local_conf)
 

	
 
    engine = engine_from_config(conf, 'sqlalchemy.db1.')
 
    init_model(engine)
 

	
 
    baseui = make_ui('db')
 
    # fix if it's not a bare repo
 
    if repo_path.endswith('.git'):
 
        repo_path = repo_path[:-4]
 
    if repo_path.endswith(os.sep + '.git'):
 
        repo_path = repo_path[:-5]
 

	
 
    repo = Repository.get_by_full_path(repo_path)
 
    if not repo:
 
        raise OSError('Repository %s not found in database'
 
                      % (safe_str(repo_path)))
 

	
 
    _hooks = dict(baseui.configitems('hooks')) or {}
 

	
 
    extras = json.loads(env['RHODECODE_EXTRAS'])
 
    for k, v in extras.items():
 
        baseui.setconfig('rhodecode_extras', k, v)
 
    repo = repo.scm_instance
 
    repo.ui = baseui
 

	
 
    if hook_type == 'pre':
 
        pre_push(baseui, repo)
 

	
 
    # if push hook is enabled via web interface
 
    elif hook_type == 'post' and _hooks.get(RhodeCodeUi.HOOK_PUSH):
 

	
 
        rev_data = []
rhodecode/lib/middleware/pygrack.py
Show inline comments
 
import os
 
import socket
 
import logging
 
import subprocess
 
import traceback
 

	
 
from webob import Request, Response, exc
 

	
 
from rhodecode.lib import subprocessio
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
class FileWrapper(object):
 

	
 
    def __init__(self, fd, content_length):
 
        self.fd = fd
 
@@ -81,25 +82,25 @@ class GitRepository(object):
 
        # if you do add '\n' as part of data, count it.
 
        server_advert = '# service=%s' % git_command
 
        packet_len = str(hex(len(server_advert) + 4)[2:].rjust(4, '0')).lower()
 
        try:
 
            out = subprocessio.SubprocessIOChunker(
 
                r'git %s --stateless-rpc --advertise-refs "%s"' % (
 
                                git_command[4:], self.content_path),
 
                starting_values=[
 
                    packet_len + server_advert + '0000'
 
                ]
 
            )
 
        except EnvironmentError, e:
 
            log.exception(e)
 
            log.error(traceback.format_exc())
 
            raise exc.HTTPExpectationFailed()
 
        resp = Response()
 
        resp.content_type = 'application/x-%s-advertisement' % str(git_command)
 
        resp.charset = None
 
        resp.app_iter = out
 
        return resp
 

	
 
    def backend(self, request, environ):
 
        """
 
        WSGI Response producer for HTTP POST Git Smart HTTP requests.
 
        Reads commands and data from HTTP POST's body.
 
        returns an iterator obj with contents of git command's
 
@@ -109,73 +110,72 @@ class GitRepository(object):
 
        if git_command not in self.commands:
 
            log.debug('command %s not allowed' % git_command)
 
            return exc.HTTPMethodNotAllowed()
 

	
 
        if 'CONTENT_LENGTH' in environ:
 
            inputstream = FileWrapper(environ['wsgi.input'],
 
                                      request.content_length)
 
        else:
 
            inputstream = environ['wsgi.input']
 

	
 
        try:
 
            gitenv = os.environ
 
            from rhodecode import CONFIG
 
            from rhodecode.lib.compat import json
 
            gitenv['RHODECODE_EXTRAS'] = json.dumps(self.extras)
 
            # forget all configs
 
            gitenv['GIT_CONFIG_NOGLOBAL'] = '1'
 
            # we need current .ini file used to later initialize rhodecode
 
            # env and connect to db
 
            gitenv['RHODECODE_CONFIG_FILE'] = CONFIG['__file__']
 
            opts = dict(
 
                env=gitenv,
 
                cwd=os.getcwd()
 
            )
 
            cmd = r'git %s --stateless-rpc "%s"' % (git_command[4:],
 
                                                    self.content_path),
 
            log.debug('handling cmd %s' % cmd)
 
            out = subprocessio.SubprocessIOChunker(
 
                r'git %s --stateless-rpc "%s"' % (git_command[4:],
 
                                                  self.content_path),
 
                cmd,
 
                inputstream=inputstream,
 
                **opts
 
            )
 
        except EnvironmentError, e:
 
            log.exception(e)
 
            log.error(traceback.format_exc())
 
            raise exc.HTTPExpectationFailed()
 

	
 
        if git_command in [u'git-receive-pack']:
 
            # updating refs manually after each push.
 
            # Needed for pre-1.7.0.4 git clients using regular HTTP mode.
 
            subprocess.call(u'git --git-dir "%s" '
 
                            'update-server-info' % self.content_path,
 
                            shell=True)
 
            cmd = (u'git --git-dir "%s" '
 
                    'update-server-info' % self.content_path)
 
            log.debug('handling cmd %s' % cmd)
 
            subprocess.call(cmd, shell=True)
 

	
 
        resp = Response()
 
        resp.content_type = 'application/x-%s-result' % git_command.encode('utf8')
 
        resp.charset = None
 
        resp.app_iter = out
 
        return resp
 

	
 
    def __call__(self, environ, start_response):
 
        request = Request(environ)
 
        _path = self._get_fixedpath(request.path_info)
 
        if _path.startswith('info/refs'):
 
            app = self.inforefs
 
        elif [a for a in self.valid_accepts if a in request.accept]:
 
            app = self.backend
 
        try:
 
            resp = app(request, environ)
 
        except exc.HTTPException, e:
 
            resp = e
 
            log.exception(e)
 
            log.error(traceback.format_exc())
 
        except Exception, e:
 
            log.exception(e)
 
            log.error(traceback.format_exc())
 
            resp = exc.HTTPInternalServerError()
 
        return resp(environ, start_response)
 

	
 

	
 
class GitDirectory(object):
 

	
 
    def __init__(self, repo_root, repo_name, extras):
 
        repo_location = os.path.join(repo_root, repo_name)
 
        if not os.path.isdir(repo_location):
 
            raise OSError(repo_location)
 

	
 
        self.content_path = repo_location
rhodecode/lib/middleware/simplegit.py
Show inline comments
 
@@ -70,25 +70,25 @@ dulserver.DEFAULT_HANDLERS = {
 
  #git-push
 
  'git-receive-pack': dulserver.ReceivePackHandler,
 
}
 

	
 
# not used for now until dulwich get's fixed
 
#from dulwich.repo import Repo
 
#from dulwich.web import make_wsgi_chain
 

	
 
from paste.httpheaders import REMOTE_USER, AUTH_TYPE
 
from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError, \
 
    HTTPBadRequest, HTTPNotAcceptable
 

	
 
from rhodecode.lib.utils2 import safe_str
 
from rhodecode.lib.utils2 import safe_str, fix_PATH
 
from rhodecode.lib.base import BaseVCSController
 
from rhodecode.lib.auth import get_container_username
 
from rhodecode.lib.utils import is_valid_repo, make_ui
 
from rhodecode.lib.compat import json
 
from rhodecode.model.db import User, RhodeCodeUi
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
GIT_PROTO_PAT = re.compile(r'^/(.+)/(info/refs|git-upload-pack|git-receive-pack)')
 

	
 

	
 
@@ -179,54 +179,57 @@ class SimpleGit(BaseVCSController):
 
                    username = user.username
 
                except:
 
                    log.error(traceback.format_exc())
 
                    return HTTPInternalServerError()(environ, start_response)
 

	
 
                #check permissions for this repository
 
                perm = self._check_permission(action, user, repo_name)
 
                if perm is not True:
 
                    return HTTPForbidden()(environ, start_response)
 

	
 
        # extras are injected into UI object and later available
 
        # in hooks executed by rhodecode
 
        from rhodecode import CONFIG
 
        extras = {
 
            'ip': ipaddr,
 
            'username': username,
 
            'action': action,
 
            'repository': repo_name,
 
            'scm': 'git',
 
            'config': CONFIG['__file__'],
 
            'make_lock': None,
 
            'locked_by': [None, None]
 
        }
 

	
 
        #===================================================================
 
        # GIT REQUEST HANDLING
 
        #===================================================================
 
        repo_path = os.path.join(safe_str(self.basepath), safe_str(repo_name))
 
        log.debug('Repository path is %s' % repo_path)
 

	
 
        # CHECK LOCKING only if it's not ANONYMOUS USER
 
        if username != User.DEFAULT_USER:
 
            log.debug('Checking locking on repository')
 
            (make_lock,
 
             locked,
 
             locked_by) = self._check_locking_state(
 
                            environ=environ, action=action,
 
                            repo=repo_name, user_id=user.user_id
 
                       )
 
            # store the make_lock for later evaluation in hooks
 
            extras.update({'make_lock': make_lock,
 
                           'locked_by': locked_by})
 
        # set the environ variables for this request
 
        os.environ['RC_SCM_DATA'] = json.dumps(extras)
 
        fix_PATH()
 
        log.debug('HOOKS extras is %s' % extras)
 
        baseui = make_ui('db')
 
        self.__inject_extras(repo_path, baseui, extras)
 

	
 
        try:
 
            # invalidate cache on push
 
            if action == 'push':
 
                self._invalidate_cache(repo_name)
 
            self._handle_githooks(repo_name, action, baseui, environ)
 

	
 
            log.info('%s action on GIT repo "%s"' % (action, repo_name))
 
            app = self.__make_app(repo_name, repo_path, extras)
rhodecode/lib/middleware/simplehg.py
Show inline comments
 
@@ -18,34 +18,33 @@
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 

	
 
import os
 
import logging
 
import traceback
 
import urllib
 

	
 
from mercurial.error import RepoError
 
from mercurial.hgweb import hgweb_mod
 

	
 
from paste.httpheaders import REMOTE_USER, AUTH_TYPE
 
from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError, \
 
    HTTPBadRequest, HTTPNotAcceptable
 

	
 
from rhodecode.lib.utils2 import safe_str
 
from rhodecode.lib.utils2 import safe_str, fix_PATH
 
from rhodecode.lib.base import BaseVCSController
 
from rhodecode.lib.auth import get_container_username
 
from rhodecode.lib.utils import make_ui, is_valid_repo, ui_sections
 
from rhodecode.lib.compat import json
 
from rhodecode.model.db import User
 
from rhodecode.lib.exceptions import HTTPLockedRC
 

	
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
def is_mercurial(environ):
 
@@ -143,54 +142,57 @@ class SimpleHg(BaseVCSController):
 
                    username = user.username
 
                except:
 
                    log.error(traceback.format_exc())
 
                    return HTTPInternalServerError()(environ, start_response)
 

	
 
                #check permissions for this repository
 
                perm = self._check_permission(action, user, repo_name)
 
                if perm is not True:
 
                    return HTTPForbidden()(environ, start_response)
 

	
 
        # extras are injected into mercurial UI object and later available
 
        # in hg hooks executed by rhodecode
 
        from rhodecode import CONFIG
 
        extras = {
 
            'ip': ipaddr,
 
            'username': username,
 
            'action': action,
 
            'repository': repo_name,
 
            'scm': 'hg',
 
            'config': CONFIG['__file__'],
 
            'make_lock': None,
 
            'locked_by': [None, None]
 
        }
 
        #======================================================================
 
        # MERCURIAL REQUEST HANDLING
 
        #======================================================================
 
        repo_path = os.path.join(safe_str(self.basepath), safe_str(repo_name))
 
        log.debug('Repository path is %s' % repo_path)
 

	
 
        # CHECK LOCKING only if it's not ANONYMOUS USER
 
        if username != User.DEFAULT_USER:
 
            log.debug('Checking locking on repository')
 
            (make_lock,
 
             locked,
 
             locked_by) = self._check_locking_state(
 
                            environ=environ, action=action,
 
                            repo=repo_name, user_id=user.user_id
 
                       )
 
            # store the make_lock for later evaluation in hooks
 
            extras.update({'make_lock': make_lock,
 
                           'locked_by': locked_by})
 

	
 
        # set the environ variables for this request
 
        os.environ['RC_SCM_DATA'] = json.dumps(extras)
 
        fix_PATH()
 
        log.debug('HOOKS extras is %s' % extras)
 
        baseui = make_ui('db')
 
        self.__inject_extras(repo_path, baseui, extras)
 

	
 
        try:
 
            # invalidate cache on push
 
            if action == 'push':
 
                self._invalidate_cache(repo_name)
 
            log.info('%s action on HG repo "%s"' % (action, repo_name))
 
            app = self.__make_app(repo_path, baseui, extras)
 
            return app(environ, start_response)
 
        except RepoError, e:
rhodecode/lib/utils2.py
Show inline comments
 
@@ -472,12 +472,28 @@ def extract_mentioned_users(s):
 
    usrs = set()
 
    for username in re.findall(MENTIONS_REGEX, s):
 
        usrs.add(username)
 

	
 
    return sorted(list(usrs), key=lambda k: k.lower())
 

	
 

	
 
class AttributeDict(dict):
 
    def __getattr__(self, attr):
 
        return self.get(attr, None)
 
    __setattr__ = dict.__setitem__
 
    __delattr__ = dict.__delitem__
 

	
 

	
 
def fix_PATH(os_=None):
 
    """
 
    Get current active python path, and append it to PATH variable to fix issues
 
    of subprocess calls and different python versions
 
    """
 
    import sys
 
    if os_ is None:
 
        import os
 
    else:
 
        os = os_
 

	
 
    cur_path = os.path.split(sys.executable)[0]
 
    if not os.environ['PATH'].startswith(cur_path):
 
        os.environ['PATH'] = '%s:%s' % (cur_path, os.environ['PATH'])
rhodecode/model/user.py
Show inline comments
 
@@ -515,26 +515,30 @@ class UserModel(BaseModel):
 
            .join((Permission, UsersGroupRepoToPerm.permission_id ==
 
                   Permission.permission_id))\
 
            .join((UsersGroupMember, UsersGroupRepoToPerm.users_group_id ==
 
                   UsersGroupMember.users_group_id))\
 
            .filter(UsersGroupMember.user_id == uid)\
 
            .all()
 

	
 
        for perm in user_repo_perms_from_users_groups:
 
            r_k = perm.UsersGroupRepoToPerm.repository.repo_name
 
            p = perm.Permission.permission_name
 
            cur_perm = user.permissions[RK][r_k]
 
            # overwrite permission only if it's greater than permission
 
            # given from other sources
 
            # given from other sources - disabled with `or 1` now
 
            if PERM_WEIGHTS[p] > PERM_WEIGHTS[cur_perm] or 1:  # disable check
 
                if perm.Repository.user_id == uid:
 
                    # set admin if owner
 
                    p = 'repository.admin'
 

	
 
                user.permissions[RK][r_k] = p
 

	
 
        # user explicit permissions for repositories
 
        user_repo_perms = \
 
         self.sa.query(UserRepoToPerm, Permission, Repository)\
 
            .join((Repository, UserRepoToPerm.repository_id ==
 
                   Repository.repo_id))\
 
            .join((Permission, UserRepoToPerm.permission_id ==
 
                   Permission.permission_id))\
 
            .filter(UserRepoToPerm.user_id == uid)\
 
            .all()
 

	
rhodecode/public/css/codemirror.css
Show inline comments
 
.CodeMirror {
 
  line-height: 1em;
 
  font-family: monospace;
 

	
 
  /* Necessary so the scrollbar can be absolutely positioned within the wrapper on Lion. */
 
  position: relative;
 
  /* This prevents unwanted scrollbars from showing up on the body and wrapper in IE. */
 
  overflow: hidden;
 
}
 

	
 
.CodeMirror-scroll {
 
  overflow-x: auto;
 
  overflow-y: hidden;
 
  overflow: auto;
 
  height: 300px;
 
  /* This is needed to prevent an IE[67] bug where the scrolled content
 
     is visible outside of the scrolling box. */
 
  position: relative;
 
  outline: none;
 
}
 

	
 
/* Vertical scrollbar */
 
.CodeMirror-scrollbar {
 
  float: right;
 
  position: absolute;
 
  right: 0; top: 0;
 
  overflow-x: hidden;
 
  overflow-y: scroll;
 

	
 
  /* This corrects for the 1px gap introduced to the left of the scrollbar
 
     by the rule for .CodeMirror-scrollbar-inner. */
 
  margin-left: -1px;
 
  z-index: 5;
 
}
 
.CodeMirror-scrollbar-inner {
 
  /* This needs to have a nonzero width in order for the scrollbar to appear
 
     in Firefox and IE9. */
 
  width: 1px;
 
}
 
.CodeMirror-scrollbar.cm-sb-overlap {
 
  /* Ensure that the scrollbar appears in Lion, and that it overlaps the content
 
     rather than sitting to the right of it. */
 
  position: absolute;
 
  z-index: 1;
 
  float: none;
 
@@ -53,34 +50,31 @@
 
  position: absolute; left: 0; top: 0;
 
  z-index: 10;
 
  background-color: #f7f7f7;
 
  border-right: 1px solid #eee;
 
  min-width: 2em;
 
  height: 100%;
 
}
 
.CodeMirror-gutter-text {
 
  color: #aaa;
 
  text-align: right;
 
  padding: .4em .2em .4em .4em;
 
  white-space: pre !important;
 
  cursor: default;
 
}
 
.CodeMirror-lines {
 
  padding: .4em;
 
  white-space: pre;
 
  cursor: text;
 
}
 
.CodeMirror-lines * {
 
  /* Necessary for throw-scrolling to decelerate properly on Safari. */
 
  pointer-events: none;
 
}
 

	
 
.CodeMirror pre {
 
  -moz-border-radius: 0;
 
  -webkit-border-radius: 0;
 
  -o-border-radius: 0;
 
  border-radius: 0;
 
  border-width: 0; margin: 0; padding: 0; background: transparent;
 
  font-family: inherit;
 
  font-size: inherit;
 
  padding: 0; margin: 0;
 
  white-space: pre;
 
  word-wrap: normal;
 
@@ -142,27 +136,38 @@ div.CodeMirror-selected { background: #d
 
.cm-s-default span.cm-variable {color: black;}
 
.cm-s-default span.cm-variable-2 {color: #05a;}
 
.cm-s-default span.cm-variable-3 {color: #085;}
 
.cm-s-default span.cm-property {color: black;}
 
.cm-s-default span.cm-operator {color: black;}
 
.cm-s-default span.cm-comment {color: #a50;}
 
.cm-s-default span.cm-string {color: #a11;}
 
.cm-s-default span.cm-string-2 {color: #f50;}
 
.cm-s-default span.cm-meta {color: #555;}
 
.cm-s-default span.cm-error {color: #f00;}
 
.cm-s-default span.cm-qualifier {color: #555;}
 
.cm-s-default span.cm-builtin {color: #30a;}
 
.cm-s-default span.cm-bracket {color: #cc7;}
 
.cm-s-default span.cm-bracket {color: #997;}
 
.cm-s-default span.cm-tag {color: #170;}
 
.cm-s-default span.cm-attribute {color: #00c;}
 
.cm-s-default span.cm-header {color: blue;}
 
.cm-s-default span.cm-quote {color: #090;}
 
.cm-s-default span.cm-hr {color: #999;}
 
.cm-s-default span.cm-link {color: #00c;}
 

	
 
span.cm-header, span.cm-strong {font-weight: bold;}
 
span.cm-em {font-style: italic;}
 
span.cm-emstrong {font-style: italic; font-weight: bold;}
 
span.cm-link {text-decoration: underline;}
 

	
 
span.cm-invalidchar {color: #f00;}
 

	
 
div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
 
div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
 

	
 
@media print {
 

	
 
  /* Hide the cursor when printing */
 
  .CodeMirror pre.CodeMirror-cursor {
 
    visibility: hidden;
 
  }
 

	
 
}
rhodecode/public/css/style.css
Show inline comments
 
@@ -4253,28 +4253,41 @@ form.comment-form {
 
	margin-top:5%;
 
}
 
 
.comment-inline-form .clearfix{
 
    background: #EEE;
 
    -webkit-border-radius: 4px;
 
    -moz-border-radius: 4px;
 
    border-radius: 4px;
 
    padding: 5px;
 
}
 
 
div.comment-inline-form {
 
    margin-top: 5px;
 
    padding:2px 6px 8px 6px;
 
 
}
 
    padding:4px 0px 6px 0px;
 
}
 
 
 
tr.hl-comment{
 
/*
 
	background-color: #FFFFCC !important;
 
*/
 
}
 
 
/*
 
tr.hl-comment pre {
 
	border-top: 2px solid #FFEE33;
 
	border-left: 2px solid #FFEE33;
 
	border-right: 2px solid #FFEE33;
 
}
 
*/
 
 
.comment-inline-form strong {
 
    display: block;
 
    margin-bottom: 15px;
 
}
 
 
.comment-inline-form textarea {
 
    width: 100%;
 
    height: 100px;
 
    font-family: 'Monaco', 'Courier', 'Courier New', monospace;
 
}
 

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

0 comments (0 inline, 0 general)