# HG changeset patch # User Marcin Kuzminski # Date 1337167780 -7200 # Node ID c9e3ea5bb59a377dcd52f2d7df10a10309343a83 # Parent 85f31a1b69dc28b8cb13eed5f576d63cb6041990# Parent 24095abde696dc150ac9bbc5bc55845ca093810e merge beta into codereview diff -r 85f31a1b69dc -r c9e3ea5bb59a CONTRIBUTORS --- a/CONTRIBUTORS Tue May 08 21:53:36 2012 +0200 +++ b/CONTRIBUTORS Wed May 16 13:29:40 2012 +0200 @@ -3,10 +3,10 @@ Lukasz Balcerzak Jason Harris Thayne Harbaugh - cejones + cejones <> Thomas Waldmann Lorenzo M. Catucci - Dmitri Kuznetsov + Dmitri Kuznetsov <> Jared Bunting Steve Romanow Augosto Hermann @@ -17,4 +17,5 @@ Matt Zuba Aras Pranckevicius Tony Bussieres - Erwin Kroon \ No newline at end of file + Erwin Kroon + nansenat16 \ No newline at end of file diff -r 85f31a1b69dc -r c9e3ea5bb59a README.rst --- a/README.rst Tue May 08 21:53:36 2012 +0200 +++ b/README.rst Wed May 16 13:29:40 2012 +0200 @@ -15,7 +15,7 @@ however RhodeCode can be run as standalone hosted application on your own server. It is open source and donation ware and focuses more on providing a customized, self administered interface for Mercurial_ and GIT_ repositories. -RhodeCode works on *nix systems and Windows it is powered by a vcs_ library +RhodeCode works on \*nix systems and Windows it is powered by a vcs_ library that Lukasz Balcerzak and Marcin Kuzminski created to handle multiple different version control systems. diff -r 85f31a1b69dc -r c9e3ea5bb59a docs/changelog.rst --- a/docs/changelog.rst Tue May 08 21:53:36 2012 +0200 +++ b/docs/changelog.rst Wed May 16 13:29:40 2012 +0200 @@ -4,7 +4,7 @@ Changelog ========= -1.3.5 (**2012-XX-XX**) +1.4.0 (**2012-XX-XX**) ---------------------- :status: in-progress @@ -13,6 +13,31 @@ news ++++ +fixes ++++++ + +1.3.6 (**2012-05-16**) +---------------------- + +news +++++ + +- chinese traditional translation + +fixes ++++++ + +- fixed no scm found warning +- fixed __future__ import error on rcextensions +- made simplejson required lib for speedup on JSON encoding +- fixes #449 bad regex could get more than revisions from parsing history + +1.3.5 (**2012-05-10**) +---------------------- + +news +++++ + - use ext_json for json module - unified annotation view with file source view - notification improvements, better inbox + css @@ -26,6 +51,7 @@ - limited push/pull operations are now logged for git in the journal - bumped mercurial to 2.2.X series - added support for displaying submodules in file-browser +- #421 added bookmarks in changelog view fixes +++++ @@ -37,6 +63,8 @@ - fixed remote-pulling for git remotes remopositories - fixed #434: Error when accessing files or changesets of a git repository with submodules +- fixed issue with empty APIKEYS for users after registration ref. #438 +- fixed issue with getting README files from git repositories 1.3.4 (**2012-03-28**) ---------------------- diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/__init__.py --- a/rhodecode/__init__.py Tue May 08 21:53:36 2012 +0200 +++ b/rhodecode/__init__.py Wed May 16 13:29:40 2012 +0200 @@ -46,6 +46,9 @@ PLATFORM_WIN = ('Windows') PLATFORM_OTHERS = ('Linux', 'Darwin', 'FreeBSD', 'OpenBSD', 'SunOS') +is_windows = __platform__ in PLATFORM_WIN +is_unix = __platform__ in PLATFORM_OTHERS + requirements = [ "Pylons==1.0.0", "Beaker==1.6.3", @@ -62,13 +65,13 @@ "webob==1.0.8", "markdown==2.1.1", "docutils==0.8.1", + "simplejson==2.5.2", ] if __py_version__ < (2, 6): - requirements.append("simplejson") requirements.append("pysqlite") -if __platform__ in PLATFORM_WIN: +if is_windows: requirements.append("mercurial>=2.2.1,<2.3") else: requirements.append("py-bcrypt") diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/config/rcextensions/make_rcextensions.py --- a/rhodecode/config/rcextensions/make_rcextensions.py Tue May 08 21:53:36 2012 +0200 +++ b/rhodecode/config/rcextensions/make_rcextensions.py Wed May 16 13:29:40 2012 +0200 @@ -22,6 +22,8 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see . +from __future__ import with_statement + import os import sys import pkg_resources diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/controllers/files.py --- a/rhodecode/controllers/files.py Tue May 08 21:53:36 2012 +0200 +++ b/rhodecode/controllers/files.py Wed May 16 13:29:40 2012 +0200 @@ -26,6 +26,7 @@ import os import logging import traceback +import tempfile from pylons import request, response, tmpl_context as c, url from pylons.i18n.translation import _ @@ -48,6 +49,7 @@ from rhodecode.model.repo import RepoModel from rhodecode.model.scm import ScmModel +from rhodecode.model.db import Repository from rhodecode.controllers.changeset import anchor_url, _ignorews_url,\ _context_url, get_line_ctx, get_ignore_ws @@ -168,7 +170,7 @@ file_node = self.__get_filenode_or_redirect(repo_name, cs, f_path) response.content_disposition = 'attachment; filename=%s' % \ - safe_str(f_path.split(os.sep)[-1]) + safe_str(f_path.split(Repository.url_sep())[-1]) response.content_type = file_node.mimetype return file_node.content @@ -358,25 +360,23 @@ except (ImproperArchiveTypeError, KeyError): return _('Unknown archive type') + archive = tempfile.NamedTemporaryFile(mode='w+r+b', delete=False) + cs.fill_archive(stream=archive, kind=fileformat, subrepos=subrepos) + archive.close() response.content_type = content_type response.content_disposition = 'attachment; filename=%s-%s%s' \ - % (repo_name, revision, ext) - - import tempfile - archive = tempfile.mkstemp()[1] - t = open(archive, 'wb') - cs.fill_archive(stream=t, kind=fileformat, subrepos=subrepos) + % (repo_name, revision[:12], ext) + response.content_length = str(os.path.getsize(archive.name)) - def get_chunked_archive(archive): - stream = open(archive, 'rb') + def get_chunked_archive(tmpfile): while True: - data = stream.read(4096) + data = tmpfile.read(16 * 1024) if not data: - os.remove(archive) + tmpfile.close() + os.unlink(tmpfile.name) break yield data - - return get_chunked_archive(archive) + return get_chunked_archive(tmpfile=open(archive.name,'rb')) @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', 'repository.admin') diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/controllers/summary.py --- a/rhodecode/controllers/summary.py Tue May 08 21:53:36 2012 +0200 +++ b/rhodecode/controllers/summary.py Wed May 16 13:29:40 2012 +0200 @@ -179,10 +179,12 @@ if c.enable_downloads: c.download_options = self._get_download_links(c.rhodecode_repo) - c.readme_data, c.readme_file = self.__get_readme_data(c.rhodecode_db_repo) + c.readme_data, c.readme_file = self.__get_readme_data( + c.rhodecode_db_repo.repo_name, c.rhodecode_repo + ) return render('summary/summary.html') - def __get_readme_data(self, repo): + def __get_readme_data(self, repo_name, repo): @cache_region('long_term') def _get_readme_from_cache(key): @@ -190,7 +192,7 @@ readme_file = None log.debug('Fetching readme file') try: - cs = repo.get_changeset('tip') + cs = repo.get_changeset() # fetches TIP renderer = MarkupRenderer() for f in README_FILES: try: @@ -202,6 +204,7 @@ except NodeDoesNotExistError: continue except ChangesetError: + log.error(traceback.format_exc()) pass except EmptyRepositoryError: pass @@ -210,7 +213,7 @@ return readme_data, readme_file - key = repo.repo_name + '_README' + key = repo_name + '_README' inv = CacheInvalidation.invalidate(key) if inv is not None: region_invalidate(_get_readme_from_cache, None, key) diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/i18n/zh_TW/LC_MESSAGES/rhodecode.mo Binary file rhodecode/i18n/zh_TW/LC_MESSAGES/rhodecode.mo has changed diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/i18n/zh_TW/LC_MESSAGES/rhodecode.po --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rhodecode/i18n/zh_TW/LC_MESSAGES/rhodecode.po Wed May 16 13:29:40 2012 +0200 @@ -0,0 +1,2532 @@ +# Translations template for RhodeCode. +# Copyright (C) 2011 ORGANIZATION +# This file is distributed under the same license as the RhodeCode project. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: RhodeCode 1.2.0\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2011-09-14 15:50-0300\n" +"PO-Revision-Date: 2012-05-09 22:23+0800\n" +"Last-Translator: Nansen \n" +"Language-Team: LANGUAGE \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-Poedit-Language: Chinese\n" +"X-Poedit-Country: TAIWAN\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: rhodecode/controllers/changeset.py:108 +#: rhodecode/controllers/changeset.py:149 +#: rhodecode/controllers/changeset.py:216 +#: rhodecode/controllers/changeset.py:229 +msgid "binary file" +msgstr "二進位檔" + +#: rhodecode/controllers/changeset.py:123 +#: rhodecode/controllers/changeset.py:168 +msgid "Changeset is to big and was cut off, see raw changeset instead" +msgstr "" + +#: rhodecode/controllers/changeset.py:159 +msgid "Diff is to big and was cut off, see raw diff instead" +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 "" + +#: rhodecode/controllers/error.py:101 +msgid "Unauthorized access to resource" +msgstr "" + +#: rhodecode/controllers/error.py:103 +msgid "You don't have permission to view this page" +msgstr "您沒有權限瀏覽這個頁面" + +#: rhodecode/controllers/error.py:105 +msgid "The resource could not be found" +msgstr "找不到這個資源" + +#: rhodecode/controllers/error.py:107 +msgid "The server encountered an unexpected condition which prevented it from fulfilling the request." +msgstr "" + +#: rhodecode/controllers/feed.py:48 +#, python-format +msgid "Changes on %s repository" +msgstr "修改於版本庫 %s" + +#: rhodecode/controllers/feed.py:49 +#, python-format +msgid "%s %s feed" +msgstr "" + +#: rhodecode/controllers/files.py:72 +msgid "There are no files yet" +msgstr "尚未有任何檔案" + +#: rhodecode/controllers/files.py:262 +#, python-format +msgid "Edited %s via RhodeCode" +msgstr "使用 RhodeCode 編輯 %s" + +#: rhodecode/controllers/files.py:267 +#: rhodecode/templates/files/file_diff.html:40 +msgid "No changes" +msgstr "沒有修改" + +#: rhodecode/controllers/files.py:278 +#, python-format +msgid "Successfully committed to %s" +msgstr "成功遞交至 %s" + +#: rhodecode/controllers/files.py:283 +msgid "Error occurred during commit" +msgstr "" + +#: rhodecode/controllers/files.py:308 +msgid "downloads disabled" +msgstr "下載已關閉" + +#: rhodecode/controllers/files.py:313 +#, python-format +msgid "Unknown revision %s" +msgstr "未知修訂 %s" + +#: rhodecode/controllers/files.py:315 +msgid "Empty repository" +msgstr "空的版本庫" + +#: rhodecode/controllers/files.py:317 +msgid "Unknown archive type" +msgstr "未知的存檔類型" + +#: rhodecode/controllers/files.py:385 +#: rhodecode/controllers/files.py:398 +msgid "Binary file" +msgstr "二進位檔" + +#: rhodecode/controllers/files.py:417 +#: rhodecode/templates/changeset/changeset_range.html:4 +#: rhodecode/templates/changeset/changeset_range.html:12 +#: rhodecode/templates/changeset/changeset_range.html:29 +msgid "Changesets" +msgstr "變更" + +#: rhodecode/controllers/files.py:418 +#: rhodecode/controllers/summary.py:175 +#: rhodecode/templates/branches/branches.html:5 +#: rhodecode/templates/summary/summary.html:690 +msgid "Branches" +msgstr "分支" + +#: rhodecode/controllers/files.py:419 +#: rhodecode/controllers/summary.py:176 +#: rhodecode/templates/summary/summary.html:679 +#: rhodecode/templates/tags/tags.html:5 +msgid "Tags" +msgstr "標籤" + +#: rhodecode/controllers/journal.py:50 +#, python-format +msgid "%s public journal %s feed" +msgstr "%s 公開日誌 %s feed" + +#: rhodecode/controllers/journal.py:178 +#: rhodecode/controllers/journal.py:212 +#: rhodecode/templates/admin/repos/repo_edit.html:171 +#: rhodecode/templates/base/base.html:50 +msgid "Public journal" +msgstr "公開日誌" + +#: rhodecode/controllers/login.py:111 +msgid "You have successfully registered into rhodecode" +msgstr "您已經成功註冊rhodecode" + +#: rhodecode/controllers/login.py:133 +msgid "Your password reset link was sent" +msgstr "您的密碼重設連結已寄出" + +#: rhodecode/controllers/login.py:155 +msgid "Your password reset was successful, new password has been sent to your email" +msgstr "您的密碼重設動作已完成,新的密碼已寄至您的信箱" + +#: rhodecode/controllers/search.py:109 +msgid "Invalid search query. Try quoting it." +msgstr "無效的查詢。請使用跳脫字元" + +#: rhodecode/controllers/search.py:114 +msgid "There is no index to search in. Please run whoosh indexer" +msgstr "沒有任何索引可以搜尋。請執行 whoosh 建立索引" + +#: rhodecode/controllers/search.py:118 +msgid "An error occurred during this search operation" +msgstr "" + +#: rhodecode/controllers/settings.py:61 +#: rhodecode/controllers/settings.py:171 +#, 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 "" + +#: rhodecode/controllers/settings.py:109 +#: rhodecode/controllers/admin/repos.py:239 +#, python-format +msgid "Repository %s updated successfully" +msgstr "版本庫 %s 更新完成" + +#: rhodecode/controllers/settings.py:126 +#: rhodecode/controllers/admin/repos.py:257 +#, python-format +msgid "error occurred during update of repository %s" +msgstr "" + +#: rhodecode/controllers/settings.py:144 +#: rhodecode/controllers/admin/repos.py:275 +#, 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 "" + +#: rhodecode/controllers/settings.py:156 +#: rhodecode/controllers/admin/repos.py:287 +#, python-format +msgid "deleted repository %s" +msgstr "刪除版本庫 %s" + +#: rhodecode/controllers/settings.py:159 +#: rhodecode/controllers/admin/repos.py:297 +#: rhodecode/controllers/admin/repos.py:303 +#, python-format +msgid "An error occurred during deletion of %s" +msgstr "" + +#: rhodecode/controllers/settings.py:193 +#, python-format +msgid "forked %s repository as %s" +msgstr "forked %s 版本庫為 %s" + +#: rhodecode/controllers/settings.py:211 +#, python-format +msgid "An error occurred during repository forking %s" +msgstr "" + +#: rhodecode/controllers/summary.py:123 +msgid "No data loaded yet" +msgstr "" + +#: rhodecode/controllers/summary.py:126 +msgid "Statistics are disabled for this repository" +msgstr "這個版本庫的統計功能已停用" + +#: rhodecode/controllers/admin/ldap_settings.py:49 +msgid "BASE" +msgstr "" + +#: rhodecode/controllers/admin/ldap_settings.py:50 +msgid "ONELEVEL" +msgstr "" + +#: rhodecode/controllers/admin/ldap_settings.py:51 +msgid "SUBTREE" +msgstr "" + +#: rhodecode/controllers/admin/ldap_settings.py:55 +msgid "NEVER" +msgstr "" + +#: rhodecode/controllers/admin/ldap_settings.py:56 +msgid "ALLOW" +msgstr "" + +#: rhodecode/controllers/admin/ldap_settings.py:57 +msgid "TRY" +msgstr "" + +#: rhodecode/controllers/admin/ldap_settings.py:58 +msgid "DEMAND" +msgstr "" + +#: rhodecode/controllers/admin/ldap_settings.py:59 +msgid "HARD" +msgstr "" + +#: rhodecode/controllers/admin/ldap_settings.py:63 +msgid "No encryption" +msgstr "無加密" + +#: rhodecode/controllers/admin/ldap_settings.py:64 +msgid "LDAPS connection" +msgstr "" + +#: rhodecode/controllers/admin/ldap_settings.py:65 +msgid "START_TLS on LDAP connection" +msgstr "" + +#: rhodecode/controllers/admin/ldap_settings.py:115 +msgid "Ldap settings updated successfully" +msgstr "LDAP設定更新完成" + +#: rhodecode/controllers/admin/ldap_settings.py:120 +msgid "Unable to activate ldap. The \"python-ldap\" library is missing." +msgstr "無法啟用LDAP。找不到python-ldap函式庫" + +#: rhodecode/controllers/admin/ldap_settings.py:134 +msgid "error occurred during update of ldap settings" +msgstr "" + +#: rhodecode/controllers/admin/permissions.py:56 +msgid "None" +msgstr "無" + +#: rhodecode/controllers/admin/permissions.py:57 +msgid "Read" +msgstr "讀" + +#: rhodecode/controllers/admin/permissions.py:58 +msgid "Write" +msgstr "寫" + +#: rhodecode/controllers/admin/permissions.py:59 +#: rhodecode/templates/admin/ldap/ldap.html:9 +#: rhodecode/templates/admin/permissions/permissions.html:9 +#: rhodecode/templates/admin/repos/repo_add.html:9 +#: rhodecode/templates/admin/repos/repo_edit.html:9 +#: rhodecode/templates/admin/repos/repos.html:10 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:8 +#: 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:110 +#: 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:279 +#: rhodecode/templates/base/base.html:366 +#: rhodecode/templates/base/base.html:368 +#: rhodecode/templates/base/base.html:370 +msgid "Admin" +msgstr "管理" + +#: rhodecode/controllers/admin/permissions.py:62 +msgid "disabled" +msgstr "停用" + +#: rhodecode/controllers/admin/permissions.py:64 +msgid "allowed with manual account activation" +msgstr "允許手動啟用帳號" + +#: rhodecode/controllers/admin/permissions.py:66 +msgid "allowed with automatic account activation" +msgstr "允許自動啟用帳號" + +#: rhodecode/controllers/admin/permissions.py:68 +msgid "Disabled" +msgstr "停用" + +#: rhodecode/controllers/admin/permissions.py:69 +msgid "Enabled" +msgstr "啟用" + +#: rhodecode/controllers/admin/permissions.py:102 +msgid "Default permissions updated successfully" +msgstr "預設權限更新完成" + +#: rhodecode/controllers/admin/permissions.py:119 +msgid "error occurred during update of permissions" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:96 +#, 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 "" + +#: rhodecode/controllers/admin/repos.py:172 +#, python-format +msgid "created repository %s from %s" +msgstr "建立版本庫 %s 到 %s" + +#: rhodecode/controllers/admin/repos.py:176 +#, python-format +msgid "created repository %s" +msgstr "建立版本庫 %s" + +#: rhodecode/controllers/admin/repos.py:205 +#, python-format +msgid "error occurred during creation of repository %s" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:292 +#, python-format +msgid "Cannot delete %s it still contains attached forks" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:320 +msgid "An error occurred during deletion of repository user" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:335 +msgid "An error occurred during deletion of repository users groups" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:352 +msgid "An error occurred during deletion of repository stats" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:367 +msgid "An error occurred during cache invalidation" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:387 +msgid "Updated repository visibility in public journal" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:390 +msgid "An error occurred during setting this repository in public journal" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:395 +#: rhodecode/model/forms.py:53 +msgid "Token mismatch" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:408 +msgid "Pulled from remote location" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:410 +msgid "An error occurred during pull from remote location" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:83 +#, python-format +msgid "created repos group %s" +msgstr "建立版本庫群組 %s" + +#: rhodecode/controllers/admin/repos_groups.py:96 +#, python-format +msgid "error occurred during creation of repos group %s" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:130 +#, python-format +msgid "updated repos group %s" +msgstr "更新版本庫群組 %s" + +#: rhodecode/controllers/admin/repos_groups.py:143 +#, python-format +msgid "error occurred during update of repos group %s" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:164 +#, python-format +msgid "This group contains %s repositores and cannot be deleted" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:171 +#, python-format +msgid "removed repos group %s" +msgstr "移除版本庫群組 %s" + +#: rhodecode/controllers/admin/repos_groups.py:175 +#, python-format +msgid "error occurred during deletion of repos group %s" +msgstr "" + +#: rhodecode/controllers/admin/settings.py:109 +#, python-format +msgid "Repositories successfully rescanned added: %s,removed: %s" +msgstr "" + +#: rhodecode/controllers/admin/settings.py:118 +msgid "Whoosh reindex task scheduled" +msgstr "Whoosh 重新索引工作排程" + +#: rhodecode/controllers/admin/settings.py:143 +msgid "Updated application settings" +msgstr "更新應用設定" + +#: rhodecode/controllers/admin/settings.py:148 +#: rhodecode/controllers/admin/settings.py:215 +msgid "error occurred during updating application settings" +msgstr "" + +#: rhodecode/controllers/admin/settings.py:210 +msgid "Updated mercurial settings" +msgstr "更新 mercurial 設定" + +#: rhodecode/controllers/admin/settings.py:236 +msgid "Added new hook" +msgstr "新增hook" + +#: rhodecode/controllers/admin/settings.py:247 +msgid "Updated hooks" +msgstr "更新hook" + +#: rhodecode/controllers/admin/settings.py:251 +msgid "error occurred during hook creation" +msgstr "" + +#: rhodecode/controllers/admin/settings.py:310 +msgid "You can't edit this user since it's crucial for entire application" +msgstr "" + +#: rhodecode/controllers/admin/settings.py:339 +msgid "Your account was updated successfully" +msgstr "您的帳號已更新完成" + +#: rhodecode/controllers/admin/settings.py:359 +#: rhodecode/controllers/admin/users.py:130 +#, python-format +msgid "error occurred during update of user %s" +msgstr "" + +#: rhodecode/controllers/admin/users.py:78 +#, python-format +msgid "created user %s" +msgstr "建立使用者 %s" + +#: rhodecode/controllers/admin/users.py:90 +#, python-format +msgid "error occurred during creation of user %s" +msgstr "" + +#: rhodecode/controllers/admin/users.py:116 +msgid "User updated successfully" +msgstr "使用者更新完成" + +#: rhodecode/controllers/admin/users.py:146 +msgid "successfully deleted user" +msgstr "成功刪除使用者" + +#: rhodecode/controllers/admin/users.py:150 +msgid "An error occurred during deletion of user" +msgstr "" + +#: rhodecode/controllers/admin/users.py:166 +msgid "You can't edit this user" +msgstr "您無法編輯這位使用者" + +#: rhodecode/controllers/admin/users.py:195 +#: rhodecode/controllers/admin/users_groups.py:202 +msgid "Granted 'repository create' permission to user" +msgstr "" + +#: rhodecode/controllers/admin/users.py:204 +#: rhodecode/controllers/admin/users_groups.py:211 +msgid "Revoked 'repository create' permission to user" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:74 +#, python-format +msgid "created users group %s" +msgstr "建立使用者群組 %s" + +#: rhodecode/controllers/admin/users_groups.py:86 +#, python-format +msgid "error occurred during creation of users group %s" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:119 +#, python-format +msgid "updated users group %s" +msgstr "更新使用者群組 %s" + +#: rhodecode/controllers/admin/users_groups.py:138 +#, python-format +msgid "error occurred during update of users group %s" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:154 +msgid "successfully deleted users group" +msgstr "成功移除使用者群組" + +#: rhodecode/controllers/admin/users_groups.py:158 +msgid "An error occurred during deletion of users group" +msgstr "" + +#: rhodecode/lib/__init__.py:279 +msgid "year" +msgstr "年" + +#: rhodecode/lib/__init__.py:280 +msgid "month" +msgstr "月" + +#: rhodecode/lib/__init__.py:281 +msgid "day" +msgstr "日" + +#: rhodecode/lib/__init__.py:282 +msgid "hour" +msgstr "時" + +#: rhodecode/lib/__init__.py:283 +msgid "minute" +msgstr "分" + +#: rhodecode/lib/__init__.py:284 +msgid "second" +msgstr "秒" + +#: rhodecode/lib/__init__.py:293 +msgid "ago" +msgstr "之前" + +#: rhodecode/lib/__init__.py:296 +msgid "just now" +msgstr "現在" + +#: rhodecode/lib/auth.py:377 +msgid "You need to be a registered user to perform this action" +msgstr "您必須是註冊使用者才能執行這個動作" + +#: rhodecode/lib/auth.py:421 +msgid "You need to be a signed in to view this page" +msgstr "您必須登入後才能瀏覽這個頁面" + +#: rhodecode/lib/helpers.py:307 +msgid "True" +msgstr "真" + +#: rhodecode/lib/helpers.py:311 +msgid "False" +msgstr "假" + +#: rhodecode/lib/helpers.py:352 +#, python-format +msgid "Show all combined changesets %s->%s" +msgstr "" + +#: rhodecode/lib/helpers.py:356 +msgid "compare view" +msgstr "" + +#: rhodecode/lib/helpers.py:365 +msgid "and" +msgstr "和" + +#: rhodecode/lib/helpers.py:365 +#, python-format +msgid "%s more" +msgstr "" + +#: rhodecode/lib/helpers.py:367 +#: rhodecode/templates/changelog/changelog.html:14 +#: rhodecode/templates/changelog/changelog.html:39 +msgid "revisions" +msgstr "修訂" + +#: rhodecode/lib/helpers.py:385 +msgid "fork name " +msgstr "fork 名稱" + +#: rhodecode/lib/helpers.py:388 +msgid "[deleted] repository" +msgstr "" + +#: rhodecode/lib/helpers.py:389 +#: rhodecode/lib/helpers.py:393 +msgid "[created] repository" +msgstr "" + +#: rhodecode/lib/helpers.py:390 +#: rhodecode/lib/helpers.py:394 +msgid "[forked] repository" +msgstr "" + +#: rhodecode/lib/helpers.py:391 +#: rhodecode/lib/helpers.py:395 +msgid "[updated] repository" +msgstr "" + +#: rhodecode/lib/helpers.py:392 +msgid "[delete] repository" +msgstr "" + +#: rhodecode/lib/helpers.py:396 +msgid "[pushed] into" +msgstr "" + +#: rhodecode/lib/helpers.py:397 +msgid "[committed via RhodeCode] into" +msgstr "" + +#: rhodecode/lib/helpers.py:398 +msgid "[pulled from remote] into" +msgstr "" + +#: rhodecode/lib/helpers.py:399 +msgid "[pulled] from" +msgstr "" + +#: rhodecode/lib/helpers.py:400 +msgid "[started following] repository" +msgstr "" + +#: rhodecode/lib/helpers.py:401 +msgid "[stopped following] repository" +msgstr "" + +#: rhodecode/lib/helpers.py:577 +#, python-format +msgid " and %s more" +msgstr "" + +#: rhodecode/lib/helpers.py:581 +msgid "No Files" +msgstr "沒有檔案" + +#: rhodecode/model/forms.py:66 +msgid "Invalid username" +msgstr "無效的使用者名稱" + +#: rhodecode/model/forms.py:75 +msgid "This username already exists" +msgstr "使用者名稱已存在" + +#: rhodecode/model/forms.py:79 +msgid "Username may only contain alphanumeric characters underscores, periods or dashes and must begin with alphanumeric character" +msgstr "使用者名稱只能使用字母數字、底線、小數點或破折號,且必須使用數字或字母開頭" + +#: rhodecode/model/forms.py:94 +msgid "Invalid group name" +msgstr "無效的群組名稱" + +#: rhodecode/model/forms.py:104 +msgid "This users group already exists" +msgstr "這個使用者群組已存在" + +#: rhodecode/model/forms.py:110 +msgid "Group name may only contain alphanumeric characters underscores, periods or dashes and must begin with alphanumeric character" +msgstr "群組名稱只能使用字母數字、底線、小數點或破折號,且必須使用數字或字母開頭" + +#: rhodecode/model/forms.py:132 +msgid "Cannot assign this group as parent" +msgstr "" + +#: rhodecode/model/forms.py:148 +msgid "This group already exists" +msgstr "這個群組已存在" + +#: rhodecode/model/forms.py:164 +#: rhodecode/model/forms.py:172 +#: rhodecode/model/forms.py:180 +msgid "Invalid characters in password" +msgstr "無效的字元在密碼中" + +#: rhodecode/model/forms.py:191 +msgid "Passwords do not match" +msgstr "密碼不相符" + +#: rhodecode/model/forms.py:196 +msgid "invalid password" +msgstr "無效的密碼" + +#: rhodecode/model/forms.py:197 +msgid "invalid user name" +msgstr "無效的使用者名稱" + +#: rhodecode/model/forms.py:198 +msgid "Your account is disabled" +msgstr "您的帳號已被停用" + +#: rhodecode/model/forms.py:233 +msgid "This username is not valid" +msgstr "無效的使用者名稱" + +#: rhodecode/model/forms.py:245 +msgid "This repository name is disallowed" +msgstr "不允許的版本庫名稱" + +#: rhodecode/model/forms.py:266 +#, python-format +msgid "This repository already exists in group \"%s\"" +msgstr "這個版本庫已存在於群組 \"%s\"" + +#: rhodecode/model/forms.py:274 +msgid "This repository already exists" +msgstr "這個版本庫已經存在" + +#: rhodecode/model/forms.py:312 +#: rhodecode/model/forms.py:319 +msgid "invalid clone url" +msgstr "無效的複製URL" + +#: rhodecode/model/forms.py:322 +msgid "Invalid clone url, provide a valid clone http\\s url" +msgstr "" + +#: rhodecode/model/forms.py:334 +msgid "Fork have to be the same type as original" +msgstr "Fork 必須使用相同的版本庫類型" + +#: rhodecode/model/forms.py:341 +msgid "This username or users group name is not valid" +msgstr "使用者名稱或群組名稱無效" + +#: rhodecode/model/forms.py:403 +msgid "This is not a valid path" +msgstr "不是一個有效的路徑" + +#: rhodecode/model/forms.py:416 +msgid "This e-mail address is already taken" +msgstr "這個郵件位址已經使用了" + +#: rhodecode/model/forms.py:427 +msgid "This e-mail address doesn't exist." +msgstr "這個郵件位址不存在" + +#: rhodecode/model/forms.py:447 +msgid "The LDAP Login attribute of the CN must be specified - this is the name of the attribute that is equivalent to 'username'" +msgstr "" + +#: rhodecode/model/forms.py:466 +msgid "Please enter a login" +msgstr "請登入" + +#: rhodecode/model/forms.py:467 +#, python-format +msgid "Enter a value %(min)i characters long or more" +msgstr "" + +#: rhodecode/model/forms.py:475 +msgid "Please enter a password" +msgstr "請輸入密碼" + +#: rhodecode/model/forms.py:476 +#, python-format +msgid "Enter %(min)i characters or more" +msgstr "" + +#: rhodecode/model/user.py:145 +msgid "[RhodeCode] New User registration" +msgstr "[RhodeCode] 新使用者註冊" + +#: rhodecode/model/user.py:157 +#: rhodecode/model/user.py:179 +msgid "You can't Edit this user since it's crucial for entire application" +msgstr "您無法編輯這個使用者,因為他是系統帳號" + +#: rhodecode/model/user.py:201 +msgid "You can't remove this user since it's crucial for entire application" +msgstr "您無法移除這個使用者,因為他是系統帳號" + +#: rhodecode/model/user.py:204 +#, python-format +msgid "This user still owns %s repositories and cannot be removed. Switch owners or remove those repositories" +msgstr "這個使用者擁有 %s 個版本庫所以無法移除,請先變更版本庫擁有者或者刪除版本庫" + +#: rhodecode/templates/index.html:4 +msgid "Dashboard" +msgstr "儀表板" + +#: rhodecode/templates/index_base.html:22 +#: rhodecode/templates/admin/users/user_edit_my_account.html:102 +msgid "quick filter..." +msgstr "快速過濾..." + +#: rhodecode/templates/index_base.html:23 +#: rhodecode/templates/base/base.html:300 +msgid "repositories" +msgstr "個版本庫" + +#: rhodecode/templates/index_base.html:29 +#: rhodecode/templates/admin/repos/repos.html:22 +msgid "ADD NEW REPOSITORY" +msgstr "新增版本庫" + +#: rhodecode/templates/index_base.html:41 +#: 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 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:33 +msgid "Group name" +msgstr "群組名稱" + +#: rhodecode/templates/index_base.html:42 +#: rhodecode/templates/index_base.html:73 +#: rhodecode/templates/admin/repos/repo_add_base.html:44 +#: rhodecode/templates/admin/repos/repo_edit.html:64 +#: rhodecode/templates/admin/repos/repos.html:31 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34 +#: rhodecode/templates/settings/repo_fork.html:40 +#: rhodecode/templates/settings/repo_settings.html:40 +#: rhodecode/templates/summary/summary.html:92 +msgid "Description" +msgstr "描述" + +#: rhodecode/templates/index_base.html:53 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 +msgid "Repositories group" +msgstr "版本庫群組" + +#: rhodecode/templates/index_base.html:72 +#: rhodecode/templates/admin/repos/repo_add_base.html:9 +#: rhodecode/templates/admin/repos/repo_edit.html:32 +#: rhodecode/templates/admin/repos/repos.html:30 +#: rhodecode/templates/admin/users/user_edit_my_account.html:117 +#: rhodecode/templates/files/files_browser.html:157 +#: rhodecode/templates/settings/repo_settings.html:31 +#: rhodecode/templates/summary/summary.html:31 +#: rhodecode/templates/summary/summary.html:107 +msgid "Name" +msgstr "名稱" + +#: rhodecode/templates/index_base.html:74 +#: rhodecode/templates/admin/repos/repos.html:32 +#: rhodecode/templates/summary/summary.html:114 +msgid "Last change" +msgstr "最後修改" + +#: rhodecode/templates/index_base.html:75 +#: rhodecode/templates/admin/repos/repos.html:33 +msgid "Tip" +msgstr "" + +#: rhodecode/templates/index_base.html:76 +#: rhodecode/templates/admin/repos/repo_edit.html:97 +msgid "Owner" +msgstr "擁有者" + +#: rhodecode/templates/index_base.html:77 +#: rhodecode/templates/journal/public_journal.html:20 +#: rhodecode/templates/summary/summary.html:180 +#: rhodecode/templates/summary/summary.html:183 +msgid "RSS" +msgstr "" + +#: rhodecode/templates/index_base.html:78 +#: rhodecode/templates/journal/public_journal.html:23 +#: rhodecode/templates/summary/summary.html:181 +#: rhodecode/templates/summary/summary.html:184 +msgid "Atom" +msgstr "" + +#: rhodecode/templates/index_base.html:87 +#: rhodecode/templates/index_base.html:89 +#: rhodecode/templates/index_base.html:91 +#: rhodecode/templates/base/base.html:209 +#: rhodecode/templates/base/base.html:211 +#: rhodecode/templates/base/base.html:213 +#: rhodecode/templates/summary/summary.html:4 +msgid "Summary" +msgstr "概況" + +#: rhodecode/templates/index_base.html:95 +#: rhodecode/templates/index_base.html:97 +#: rhodecode/templates/index_base.html:99 +#: rhodecode/templates/base/base.html:225 +#: rhodecode/templates/base/base.html:227 +#: rhodecode/templates/base/base.html:229 +#: rhodecode/templates/changelog/changelog.html:6 +#: rhodecode/templates/changelog/changelog.html:14 +msgid "Changelog" +msgstr "修改紀錄" + +#: rhodecode/templates/index_base.html:103 +#: rhodecode/templates/index_base.html:105 +#: rhodecode/templates/index_base.html:107 +#: rhodecode/templates/base/base.html:268 +#: rhodecode/templates/base/base.html:270 +#: rhodecode/templates/base/base.html:272 +#: rhodecode/templates/files/files.html:4 +msgid "Files" +msgstr "檔案" + +#: rhodecode/templates/index_base.html:116 +#: rhodecode/templates/admin/repos/repos.html:42 +#: rhodecode/templates/admin/users/user_edit_my_account.html:127 +#: rhodecode/templates/summary/summary.html:48 +msgid "Mercurial repository" +msgstr "Mercurial 版本庫" + +#: rhodecode/templates/index_base.html:118 +#: rhodecode/templates/admin/repos/repos.html:44 +#: rhodecode/templates/admin/users/user_edit_my_account.html:129 +#: rhodecode/templates/summary/summary.html:51 +msgid "Git repository" +msgstr "Git 版本庫" + +#: rhodecode/templates/index_base.html:123 +#: rhodecode/templates/admin/repos/repo_edit_perms.html:16 +#: rhodecode/templates/journal/journal.html:53 +#: rhodecode/templates/summary/summary.html:56 +msgid "private repository" +msgstr "私有版本庫" + +#: rhodecode/templates/index_base.html:125 +#: rhodecode/templates/journal/journal.html:55 +#: rhodecode/templates/summary/summary.html:58 +msgid "public repository" +msgstr "公開版本庫" + +#: rhodecode/templates/index_base.html:133 +#: rhodecode/templates/base/base.html:291 +#: rhodecode/templates/settings/repo_fork.html:13 +msgid "fork" +msgstr "" + +#: rhodecode/templates/index_base.html:134 +#: rhodecode/templates/admin/repos/repos.html:60 +#: rhodecode/templates/admin/users/user_edit_my_account.html:143 +#: rhodecode/templates/summary/summary.html:69 +#: rhodecode/templates/summary/summary.html:71 +msgid "Fork of" +msgstr "" + +#: rhodecode/templates/index_base.html:155 +#: rhodecode/templates/admin/repos/repos.html:73 +msgid "No changesets yet" +msgstr "尚未有任何變更" + +#: rhodecode/templates/index_base.html:161 +#: rhodecode/templates/index_base.html:163 +#, python-format +msgid "Subscribe to %s rss feed" +msgstr "訂閱 %s rss" + +#: rhodecode/templates/index_base.html:168 +#: rhodecode/templates/index_base.html:170 +#, python-format +msgid "Subscribe to %s atom feed" +msgstr "訂閱 %s atom" + +#: rhodecode/templates/login.html:5 +#: rhodecode/templates/login.html:54 +#: rhodecode/templates/base/base.html:38 +msgid "Sign In" +msgstr "登入" + +#: rhodecode/templates/login.html:21 +msgid "Sign In to" +msgstr "登入" + +#: rhodecode/templates/login.html:31 +#: rhodecode/templates/register.html:20 +#: rhodecode/templates/admin/admin_log.html:5 +#: rhodecode/templates/admin/users/user_add.html:32 +#: rhodecode/templates/admin/users/user_edit.html:47 +#: rhodecode/templates/admin/users/user_edit_my_account.html:45 +#: rhodecode/templates/base/base.html:15 +#: rhodecode/templates/summary/summary.html:106 +msgid "Username" +msgstr "帳號" + +#: rhodecode/templates/login.html:40 +#: rhodecode/templates/register.html:29 +#: rhodecode/templates/admin/ldap/ldap.html:46 +#: rhodecode/templates/admin/users/user_add.html:41 +#: rhodecode/templates/base/base.html:24 +msgid "Password" +msgstr "密碼" + +#: rhodecode/templates/login.html:60 +msgid "Forgot your password ?" +msgstr "忘記您的密碼?" + +#: rhodecode/templates/login.html:63 +#: rhodecode/templates/base/base.html:35 +msgid "Don't have an account ?" +msgstr "沒有帳號?" + +#: rhodecode/templates/password_reset.html:5 +msgid "Reset your password" +msgstr "重設您的密碼" + +#: rhodecode/templates/password_reset.html:11 +msgid "Reset your password to" +msgstr "重設您的密碼" + +#: rhodecode/templates/password_reset.html:21 +msgid "Email address" +msgstr "郵件位址" + +#: rhodecode/templates/password_reset.html:30 +msgid "Reset my password" +msgstr "重設我的密碼" + +#: rhodecode/templates/password_reset.html:31 +msgid "Password reset link will be send to matching email address" +msgstr "密碼重設連結已郵寄至您的信箱" + +#: rhodecode/templates/register.html:5 +#: rhodecode/templates/register.html:74 +msgid "Sign Up" +msgstr "登入" + +#: rhodecode/templates/register.html:11 +msgid "Sign Up to" +msgstr "登入" + +#: rhodecode/templates/register.html:38 +msgid "Re-enter password" +msgstr "確認密碼" + +#: rhodecode/templates/register.html:47 +#: rhodecode/templates/admin/users/user_add.html:50 +#: rhodecode/templates/admin/users/user_edit.html:74 +#: rhodecode/templates/admin/users/user_edit_my_account.html:63 +msgid "First Name" +msgstr "名" + +#: rhodecode/templates/register.html:56 +#: rhodecode/templates/admin/users/user_add.html:59 +#: rhodecode/templates/admin/users/user_edit.html:83 +#: rhodecode/templates/admin/users/user_edit_my_account.html:72 +msgid "Last Name" +msgstr "姓" + +#: rhodecode/templates/register.html:65 +#: rhodecode/templates/admin/users/user_add.html:68 +#: rhodecode/templates/admin/users/user_edit.html:92 +#: rhodecode/templates/admin/users/user_edit_my_account.html:81 +#: rhodecode/templates/summary/summary.html:108 +msgid "Email" +msgstr "電子郵件" + +#: rhodecode/templates/register.html:76 +msgid "Your account will be activated right after registration" +msgstr "您的帳號註冊後將會啟用" + +#: rhodecode/templates/register.html:78 +msgid "Your account must wait for activation by administrator" +msgstr "您的帳號註冊後將等待管理員啟用" + +#: rhodecode/templates/repo_switcher_list.html:14 +msgid "Private repository" +msgstr "私有的版本庫" + +#: rhodecode/templates/repo_switcher_list.html:19 +msgid "Public repository" +msgstr "公開的版本庫" + +#: rhodecode/templates/admin/admin.html:5 +#: rhodecode/templates/admin/admin.html:9 +msgid "Admin journal" +msgstr "管理員日誌" + +#: rhodecode/templates/admin/admin_log.html:6 +msgid "Action" +msgstr "動作" + +#: rhodecode/templates/admin/admin_log.html:7 +msgid "Repository" +msgstr "版本庫" + +#: rhodecode/templates/admin/admin_log.html:8 +msgid "Date" +msgstr "時間" + +#: rhodecode/templates/admin/admin_log.html:9 +msgid "From IP" +msgstr "來源IP" + +#: rhodecode/templates/admin/admin_log.html:52 +msgid "No actions yet" +msgstr "" + +#: rhodecode/templates/admin/ldap/ldap.html:5 +msgid "LDAP administration" +msgstr "LDAP管理者" + +#: rhodecode/templates/admin/ldap/ldap.html:11 +msgid "Ldap" +msgstr "" + +#: rhodecode/templates/admin/ldap/ldap.html:28 +msgid "Connection settings" +msgstr "連接設定" + +#: rhodecode/templates/admin/ldap/ldap.html:30 +msgid "Enable LDAP" +msgstr "啟動LDAP" + +#: rhodecode/templates/admin/ldap/ldap.html:34 +msgid "Host" +msgstr "主機" + +#: rhodecode/templates/admin/ldap/ldap.html:38 +msgid "Port" +msgstr "連接埠" + +#: rhodecode/templates/admin/ldap/ldap.html:42 +msgid "Account" +msgstr "帳號" + +#: rhodecode/templates/admin/ldap/ldap.html:50 +msgid "Connection security" +msgstr "連接安全性" + +#: rhodecode/templates/admin/ldap/ldap.html:54 +msgid "Certificate Checks" +msgstr "憑證確認" + +#: rhodecode/templates/admin/ldap/ldap.html:57 +msgid "Search settings" +msgstr "搜尋選項" + +#: rhodecode/templates/admin/ldap/ldap.html:59 +msgid "Base DN" +msgstr "" + +#: rhodecode/templates/admin/ldap/ldap.html:63 +msgid "LDAP Filter" +msgstr "" + +#: rhodecode/templates/admin/ldap/ldap.html:67 +msgid "LDAP Search Scope" +msgstr "" + +#: rhodecode/templates/admin/ldap/ldap.html:70 +msgid "Attribute mappings" +msgstr "屬性對應" + +#: rhodecode/templates/admin/ldap/ldap.html:72 +msgid "Login Attribute" +msgstr "登入屬性" + +#: rhodecode/templates/admin/ldap/ldap.html:76 +msgid "First Name Attribute" +msgstr "名" + +#: rhodecode/templates/admin/ldap/ldap.html:80 +msgid "Last Name Attribute" +msgstr "姓" + +#: rhodecode/templates/admin/ldap/ldap.html:84 +msgid "E-mail Attribute" +msgstr "電子郵件屬性" + +#: rhodecode/templates/admin/ldap/ldap.html:89 +#: rhodecode/templates/admin/settings/hooks.html:73 +#: rhodecode/templates/admin/users/user_edit.html:117 +#: rhodecode/templates/admin/users/user_edit.html:142 +#: rhodecode/templates/admin/users/user_edit_my_account.html:89 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:263 +msgid "Save" +msgstr "儲存" + +#: rhodecode/templates/admin/permissions/permissions.html:5 +msgid "Permissions administration" +msgstr "權限管理員" + +#: rhodecode/templates/admin/permissions/permissions.html:11 +#: rhodecode/templates/admin/repos/repo_edit.html:109 +#: rhodecode/templates/admin/users/user_edit.html:127 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:248 +#: rhodecode/templates/settings/repo_settings.html:58 +msgid "Permissions" +msgstr "權限" + +#: rhodecode/templates/admin/permissions/permissions.html:24 +msgid "Default permissions" +msgstr "預設權限" + +#: rhodecode/templates/admin/permissions/permissions.html:31 +msgid "Anonymous access" +msgstr "訪客權限" + +#: rhodecode/templates/admin/permissions/permissions.html:41 +msgid "Repository permission" +msgstr "版本庫權限" + +#: rhodecode/templates/admin/permissions/permissions.html:49 +msgid "All default permissions on each repository will be reset to choosen permission, note that all custom default permission on repositories will be lost" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:50 +msgid "overwrite existing settings" +msgstr "複寫已存在設定" + +#: rhodecode/templates/admin/permissions/permissions.html:55 +msgid "Registration" +msgstr "註冊" + +#: rhodecode/templates/admin/permissions/permissions.html:63 +msgid "Repository creation" +msgstr "版本庫建立" + +#: rhodecode/templates/admin/permissions/permissions.html:71 +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/repos.html:10 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10 +msgid "Repositories" +msgstr "版本庫" + +#: rhodecode/templates/admin/repos/repo_add.html:13 +msgid "add new" +msgstr "新增" + +#: rhodecode/templates/admin/repos/repo_add_base.html:20 +#: rhodecode/templates/summary/summary.html:80 +#: rhodecode/templates/summary/summary.html:82 +msgid "Clone from" +msgstr "複製由" + +#: rhodecode/templates/admin/repos/repo_add_base.html:28 +#: rhodecode/templates/admin/repos/repo_edit.html:48 +#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 +msgid "Repository group" +msgstr "版本庫群組" + +#: rhodecode/templates/admin/repos/repo_add_base.html:36 +#: rhodecode/templates/admin/repos/repo_edit.html:56 +msgid "Type" +msgstr "類型" + +#: rhodecode/templates/admin/repos/repo_add_base.html:52 +#: rhodecode/templates/admin/repos/repo_edit.html:73 +#: rhodecode/templates/settings/repo_fork.html:48 +#: rhodecode/templates/settings/repo_settings.html:49 +msgid "Private" +msgstr "私有" + +#: rhodecode/templates/admin/repos/repo_add_base.html:59 +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 "編輯版本庫" + +#: rhodecode/templates/admin/repos/repo_edit.html:13 +#: rhodecode/templates/admin/users/user_edit.html:13 +#: rhodecode/templates/admin/users/user_edit_my_account.html:148 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:13 +#: rhodecode/templates/files/files_annotate.html:49 +#: rhodecode/templates/files/files_source.html:20 +msgid "edit" +msgstr "編輯" + +#: rhodecode/templates/admin/repos/repo_edit.html:40 +msgid "Clone uri" +msgstr "複製URL" + +#: rhodecode/templates/admin/repos/repo_edit.html:81 +msgid "Enable statistics" +msgstr "啟用統計" + +#: rhodecode/templates/admin/repos/repo_edit.html:89 +msgid "Enable downloads" +msgstr "啟用下載" + +#: rhodecode/templates/admin/repos/repo_edit.html:127 +msgid "Administration" +msgstr "管理者" + +#: rhodecode/templates/admin/repos/repo_edit.html:130 +msgid "Statistics" +msgstr "統計" + +#: rhodecode/templates/admin/repos/repo_edit.html:134 +msgid "Reset current statistics" +msgstr "重設目前的統計" + +#: rhodecode/templates/admin/repos/repo_edit.html:134 +msgid "Confirm to remove current statistics" +msgstr "確認移除目前的統計" + +#: rhodecode/templates/admin/repos/repo_edit.html:137 +msgid "Fetched to rev" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:138 +msgid "Percentage of stats gathered" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:147 +msgid "Remote" +msgstr "遠端" + +#: rhodecode/templates/admin/repos/repo_edit.html:151 +msgid "Pull changes from remote location" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:151 +msgid "Confirm to pull changes from remote side" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:162 +msgid "Cache" +msgstr "快取" + +#: rhodecode/templates/admin/repos/repo_edit.html:166 +msgid "Invalidate repository cache" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:166 +msgid "Confirm to invalidate repository cache" +msgstr "確認廢止版本庫快取" + +#: rhodecode/templates/admin/repos/repo_edit.html:177 +msgid "Remove from public journal" +msgstr "從公開日誌移除" + +#: rhodecode/templates/admin/repos/repo_edit.html:179 +msgid "Add to public journal" +msgstr "新增至公開日誌" + +#: rhodecode/templates/admin/repos/repo_edit.html:185 +msgid "Delete" +msgstr "移除" + +#: rhodecode/templates/admin/repos/repo_edit.html:189 +msgid "Remove this repository" +msgstr "移除版本庫" + +#: rhodecode/templates/admin/repos/repo_edit.html:189 +#: rhodecode/templates/admin/repos/repos.html:79 +msgid "Confirm to delete this repository" +msgstr "確認移除這個版本庫" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:3 +msgid "none" +msgstr "無" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:4 +msgid "read" +msgstr "讀" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:5 +msgid "write" +msgstr "寫" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:6 +#: rhodecode/templates/admin/users/users.html:38 +#: rhodecode/templates/base/base.html:296 +msgid "admin" +msgstr "管理員" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:7 +msgid "member" +msgstr "成員" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:33 +#: rhodecode/templates/admin/repos/repo_edit_perms.html:53 +msgid "revoke" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:75 +msgid "Add another member" +msgstr "新增另ㄧ位成員" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:89 +msgid "Failed to remove user" +msgstr "移除使用者失敗" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:104 +msgid "Failed to remove users group" +msgstr "移除使用者群組失敗" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:205 +msgid "Group" +msgstr "群組" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:206 +#: rhodecode/templates/admin/users_groups/users_groups.html:33 +msgid "members" +msgstr "成員" + +#: rhodecode/templates/admin/repos/repos.html:5 +msgid "Repositories administration" +msgstr "版本庫管理員" + +#: rhodecode/templates/admin/repos/repos.html:34 +#: rhodecode/templates/summary/summary.html:100 +msgid "Contact" +msgstr "聯絡方式" + +#: rhodecode/templates/admin/repos/repos.html:35 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36 +#: rhodecode/templates/admin/users/user_edit_my_account.html:119 +#: rhodecode/templates/admin/users/users.html:40 +#: rhodecode/templates/admin/users_groups/users_groups.html:35 +msgid "action" +msgstr "動作" + +#: rhodecode/templates/admin/repos/repos.html:51 +#: rhodecode/templates/admin/users/user_edit_my_account.html:134 +#: rhodecode/templates/admin/users/user_edit_my_account.html:148 +msgid "private" +msgstr "私有" + +#: rhodecode/templates/admin/repos/repos.html:53 +#: rhodecode/templates/admin/repos/repos.html:59 +#: rhodecode/templates/admin/users/user_edit_my_account.html:136 +#: rhodecode/templates/admin/users/user_edit_my_account.html:142 +#: rhodecode/templates/summary/summary.html:68 +msgid "public" +msgstr "公開" + +#: rhodecode/templates/admin/repos/repos.html:79 +#: rhodecode/templates/admin/users/users.html:55 +msgid "delete" +msgstr "刪除" + +#: rhodecode/templates/admin/repos_groups/repos_groups.html:8 +msgid "Groups" +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 "版本庫群組" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12 +msgid "add new repos group" +msgstr "新增版本庫群組" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50 +msgid "Group parent" +msgstr "父群組" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58 +#: rhodecode/templates/admin/users/user_add.html:85 +#: rhodecode/templates/admin/users_groups/users_group_add.html:49 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:90 +msgid "save" +msgstr "儲存" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5 +msgid "Edit repos group" +msgstr "編輯版本庫群組" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12 +msgid "edit repos group" +msgstr "編輯版本庫群組" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5 +msgid "Repositories groups administration" +msgstr "版本庫群組管理員" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22 +msgid "ADD NEW GROUP" +msgstr "新增群組" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35 +msgid "Number of repositories" +msgstr "版本庫數量" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54 +msgid "Confirm to delete this group" +msgstr "確認刪除這個群組" + +#: 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 "設定管理員" + +#: rhodecode/templates/admin/settings/hooks.html:9 +#: rhodecode/templates/admin/settings/settings.html:9 +#: rhodecode/templates/settings/repo_settings.html:5 +#: rhodecode/templates/settings/repo_settings.html:13 +msgid "Settings" +msgstr "設定" + +#: rhodecode/templates/admin/settings/hooks.html:24 +msgid "Built in hooks - read only" +msgstr "內建hook - 唯讀" + +#: rhodecode/templates/admin/settings/hooks.html:40 +msgid "Custom hooks" +msgstr "自訂hook" + +#: rhodecode/templates/admin/settings/hooks.html:56 +msgid "remove" +msgstr "移除" + +#: rhodecode/templates/admin/settings/hooks.html:88 +msgid "Failed to remove hook" +msgstr "移除hook失敗" + +#: rhodecode/templates/admin/settings/settings.html:24 +msgid "Remap and rescan repositories" +msgstr "重新對映與掃描版本庫" + +#: rhodecode/templates/admin/settings/settings.html:32 +msgid "rescan option" +msgstr "重新掃描選項" + +#: rhodecode/templates/admin/settings/settings.html:38 +msgid "In case a repository was deleted from filesystem and there are leftovers in the database check this option to scan obsolete data in database and remove it." +msgstr "如果版本庫已從檔案系統中刪除,但是資料還留在資料庫,請勾選這個項目清理資料庫中舊的資料" + +#: rhodecode/templates/admin/settings/settings.html:39 +msgid "destroy old data" +msgstr "移除舊資料" + +#: rhodecode/templates/admin/settings/settings.html:45 +msgid "Rescan repositories" +msgstr "重新掃描版本庫" + +#: rhodecode/templates/admin/settings/settings.html:51 +msgid "Whoosh indexing" +msgstr "Whoosh 索引" + +#: rhodecode/templates/admin/settings/settings.html:59 +msgid "index build option" +msgstr "索引選項" + +#: rhodecode/templates/admin/settings/settings.html:64 +msgid "build from scratch" +msgstr "重頭建立索引" + +#: rhodecode/templates/admin/settings/settings.html:70 +msgid "Reindex" +msgstr "重新索引" + +#: rhodecode/templates/admin/settings/settings.html:76 +msgid "Global application settings" +msgstr "全域設定" + +#: rhodecode/templates/admin/settings/settings.html:85 +msgid "Application name" +msgstr "應用名稱" + +#: rhodecode/templates/admin/settings/settings.html:94 +msgid "Realm text" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:103 +msgid "GA code" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:111 +#: rhodecode/templates/admin/settings/settings.html:177 +msgid "Save settings" +msgstr "儲存設定" + +#: rhodecode/templates/admin/settings/settings.html:112 +#: rhodecode/templates/admin/settings/settings.html:178 +#: rhodecode/templates/admin/users/user_edit.html:118 +#: rhodecode/templates/admin/users/user_edit.html:143 +#: rhodecode/templates/admin/users/user_edit_my_account.html:90 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:264 +#: rhodecode/templates/files/files_edit.html:50 +msgid "Reset" +msgstr "重設" + +#: rhodecode/templates/admin/settings/settings.html:118 +msgid "Mercurial settings" +msgstr "Mercurial 設定" + +#: rhodecode/templates/admin/settings/settings.html:127 +msgid "Web" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:132 +msgid "require ssl for pushing" +msgstr "推送時要求使用SSL" + +#: rhodecode/templates/admin/settings/settings.html:139 +msgid "Hooks" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:142 +msgid "advanced setup" +msgstr "進階設定" + +#: rhodecode/templates/admin/settings/settings.html:147 +msgid "Update repository after push (hg update)" +msgstr "push後更新版本庫 (hg update)" + +#: rhodecode/templates/admin/settings/settings.html:151 +msgid "Show repository size after push" +msgstr "push 後顯示版本庫大小" + +#: rhodecode/templates/admin/settings/settings.html:155 +msgid "Log user push commands" +msgstr "紀錄使用者推送命令" + +#: rhodecode/templates/admin/settings/settings.html:159 +msgid "Log user pull commands" +msgstr "紀錄使用者抓取命令" + +#: rhodecode/templates/admin/settings/settings.html:166 +msgid "Repositories location" +msgstr "版本庫路徑" + +#: rhodecode/templates/admin/settings/settings.html:171 +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:172 +msgid "unlock" +msgstr "解鎖" + +#: rhodecode/templates/admin/users/user_add.html:5 +msgid "Add user" +msgstr "新增使用者" + +#: rhodecode/templates/admin/users/user_add.html:10 +#: rhodecode/templates/admin/users/user_edit.html:11 +#: rhodecode/templates/admin/users/users.html:9 +msgid "Users" +msgstr "使用者" + +#: rhodecode/templates/admin/users/user_add.html:12 +msgid "add new user" +msgstr "新增使用者" + +#: rhodecode/templates/admin/users/user_add.html:77 +#: rhodecode/templates/admin/users/user_edit.html:101 +#: rhodecode/templates/admin/users_groups/users_group_add.html:41 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:42 +msgid "Active" +msgstr "啟用" + +#: rhodecode/templates/admin/users/user_edit.html:5 +msgid "Edit user" +msgstr "編輯使用者" + +#: rhodecode/templates/admin/users/user_edit.html:33 +#: rhodecode/templates/admin/users/user_edit_my_account.html:32 +msgid "Change your avatar at" +msgstr "修改您的頭像於" + +#: rhodecode/templates/admin/users/user_edit.html:34 +#: rhodecode/templates/admin/users/user_edit_my_account.html:33 +msgid "Using" +msgstr "使用中" + +#: rhodecode/templates/admin/users/user_edit.html:40 +#: rhodecode/templates/admin/users/user_edit_my_account.html:39 +msgid "API key" +msgstr "" + +#: rhodecode/templates/admin/users/user_edit.html:56 +msgid "LDAP DN" +msgstr "" + +#: rhodecode/templates/admin/users/user_edit.html:65 +#: rhodecode/templates/admin/users/user_edit_my_account.html:54 +msgid "New password" +msgstr "新密碼" + +#: rhodecode/templates/admin/users/user_edit.html:135 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:256 +msgid "Create repositories" +msgstr "建立版本庫" + +#: rhodecode/templates/admin/users/user_edit_my_account.html:5 +msgid "My account" +msgstr "我的帳號" + +#: rhodecode/templates/admin/users/user_edit_my_account.html:9 +msgid "My Account" +msgstr "我的帳號" + +#: rhodecode/templates/admin/users/user_edit_my_account.html:101 +msgid "My repositories" +msgstr "我的版本庫" + +#: rhodecode/templates/admin/users/user_edit_my_account.html:107 +msgid "ADD REPOSITORY" +msgstr "新增版本庫" + +#: rhodecode/templates/admin/users/user_edit_my_account.html:118 +#: rhodecode/templates/branches/branches_data.html:7 +#: rhodecode/templates/shortlog/shortlog_data.html:8 +#: rhodecode/templates/tags/tags_data.html:7 +msgid "revision" +msgstr "修訂" + +#: rhodecode/templates/admin/users/user_edit_my_account.html:157 +msgid "No repositories yet" +msgstr "沒有任何版本庫" + +#: rhodecode/templates/admin/users/user_edit_my_account.html:159 +msgid "create one now" +msgstr "" + +#: rhodecode/templates/admin/users/users.html:5 +msgid "Users administration" +msgstr "使用者管理員" + +#: rhodecode/templates/admin/users/users.html:23 +msgid "ADD NEW USER" +msgstr "新增使用者" + +#: rhodecode/templates/admin/users/users.html:33 +msgid "username" +msgstr "使用者名稱" + +#: rhodecode/templates/admin/users/users.html:34 +#: rhodecode/templates/branches/branches_data.html:5 +#: rhodecode/templates/tags/tags_data.html:5 +msgid "name" +msgstr "名字" + +#: rhodecode/templates/admin/users/users.html:35 +msgid "lastname" +msgstr "姓" + +#: rhodecode/templates/admin/users/users.html:36 +msgid "last login" +msgstr "最後登入" + +#: rhodecode/templates/admin/users/users.html:37 +#: rhodecode/templates/admin/users_groups/users_groups.html:34 +msgid "active" +msgstr "啟用" + +#: rhodecode/templates/admin/users/users.html:39 +#: rhodecode/templates/base/base.html:305 +msgid "ldap" +msgstr "" + +#: rhodecode/templates/admin/users/users.html:56 +msgid "Confirm to delete this user" +msgstr "確認刪除這個使用者" + +#: 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 "使用者群組" + +#: rhodecode/templates/admin/users_groups/users_group_add.html:12 +msgid "add new users group" +msgstr "新增使用者群組" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:5 +msgid "Edit users group" +msgstr "編輯使用者群組" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:11 +msgid "UsersGroups" +msgstr "使用者群組" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:50 +msgid "Members" +msgstr "成員" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:58 +msgid "Choosen group members" +msgstr "選擇群組成員" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:61 +msgid "Remove all elements" +msgstr "移除所有元素" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:75 +msgid "Available members" +msgstr "啟用的成員" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:79 +msgid "Add all elements" +msgstr "新增索有元素" + +#: rhodecode/templates/admin/users_groups/users_groups.html:5 +msgid "Users groups administration" +msgstr "使用者群組管理員" + +#: rhodecode/templates/admin/users_groups/users_groups.html:23 +msgid "ADD NEW USER GROUP" +msgstr "建立新的使用者群組" + +#: rhodecode/templates/admin/users_groups/users_groups.html:32 +msgid "group name" +msgstr "群組名稱" + +#: rhodecode/templates/base/base.html:32 +msgid "Forgot password ?" +msgstr "忘記密碼?" + +#: rhodecode/templates/base/base.html:57 +#: rhodecode/templates/base/base.html:338 +#: rhodecode/templates/base/base.html:340 +#: rhodecode/templates/base/base.html:342 +msgid "Home" +msgstr "首頁" + +#: rhodecode/templates/base/base.html:61 +#: rhodecode/templates/base/base.html:347 +#: rhodecode/templates/base/base.html:349 +#: rhodecode/templates/base/base.html:351 +#: rhodecode/templates/journal/journal.html:4 +#: rhodecode/templates/journal/journal.html:17 +#: rhodecode/templates/journal/public_journal.html:4 +msgid "Journal" +msgstr "日誌" + +#: rhodecode/templates/base/base.html:66 +msgid "Login" +msgstr "登入" + +#: rhodecode/templates/base/base.html:68 +msgid "Log Out" +msgstr "登出" + +#: rhodecode/templates/base/base.html:107 +msgid "Submit a bug" +msgstr "回報錯誤" + +#: rhodecode/templates/base/base.html:141 +msgid "Switch repository" +msgstr "切換版本庫" + +#: rhodecode/templates/base/base.html:143 +msgid "Products" +msgstr "" + +#: rhodecode/templates/base/base.html:149 +msgid "loading..." +msgstr "載入中..." + +#: rhodecode/templates/base/base.html:234 +#: rhodecode/templates/base/base.html:236 +#: rhodecode/templates/base/base.html:238 +msgid "Switch to" +msgstr "切換至" + +#: rhodecode/templates/base/base.html:242 +#: rhodecode/templates/branches/branches.html:13 +msgid "branches" +msgstr "分支" + +#: rhodecode/templates/base/base.html:249 +#: rhodecode/templates/branches/branches_data.html:52 +msgid "There are no branches yet" +msgstr "沒有任何分支" + +#: rhodecode/templates/base/base.html:254 +#: rhodecode/templates/shortlog/shortlog_data.html:10 +#: rhodecode/templates/tags/tags.html:14 +msgid "tags" +msgstr "標籤" + +#: rhodecode/templates/base/base.html:261 +#: rhodecode/templates/tags/tags_data.html:32 +msgid "There are no tags yet" +msgstr "沒有任何標籤" + +#: rhodecode/templates/base/base.html:277 +#: rhodecode/templates/base/base.html:281 +#: rhodecode/templates/files/files_annotate.html:40 +#: rhodecode/templates/files/files_source.html:11 +msgid "Options" +msgstr "選項" + +#: rhodecode/templates/base/base.html:286 +#: rhodecode/templates/base/base.html:288 +#: rhodecode/templates/base/base.html:306 +msgid "settings" +msgstr "設定" + +#: rhodecode/templates/base/base.html:292 +msgid "search" +msgstr "搜尋" + +#: rhodecode/templates/base/base.html:299 +msgid "journal" +msgstr "日誌" + +#: rhodecode/templates/base/base.html:301 +msgid "repositories groups" +msgstr "版本庫群組" + +#: rhodecode/templates/base/base.html:302 +msgid "users" +msgstr "使用者" + +#: rhodecode/templates/base/base.html:303 +msgid "users groups" +msgstr "使用者群組" + +#: rhodecode/templates/base/base.html:304 +msgid "permissions" +msgstr "權限" + +#: rhodecode/templates/base/base.html:317 +#: rhodecode/templates/base/base.html:319 +#: rhodecode/templates/followers/followers.html:5 +msgid "Followers" +msgstr "追蹤者" + +#: rhodecode/templates/base/base.html:325 +#: rhodecode/templates/base/base.html:327 +#: rhodecode/templates/forks/forks.html:5 +msgid "Forks" +msgstr "" + +#: rhodecode/templates/base/base.html:356 +#: rhodecode/templates/base/base.html:358 +#: rhodecode/templates/base/base.html:360 +#: rhodecode/templates/search/search.html:4 +#: rhodecode/templates/search/search.html:24 +#: rhodecode/templates/search/search.html:46 +msgid "Search" +msgstr "搜尋" + +#: rhodecode/templates/base/root.html:57 +#: rhodecode/templates/journal/journal.html:48 +#: rhodecode/templates/summary/summary.html:36 +msgid "Stop following this repository" +msgstr "停止追蹤這個版本庫" + +#: rhodecode/templates/base/root.html:66 +#: rhodecode/templates/summary/summary.html:40 +msgid "Start following this repository" +msgstr "開始追蹤這個版本庫" + +#: rhodecode/templates/branches/branches_data.html:4 +#: rhodecode/templates/tags/tags_data.html:4 +msgid "date" +msgstr "日期" + +#: rhodecode/templates/branches/branches_data.html:6 +#: rhodecode/templates/shortlog/shortlog_data.html:7 +#: rhodecode/templates/tags/tags_data.html:6 +msgid "author" +msgstr "作者" + +#: rhodecode/templates/branches/branches_data.html:8 +#: rhodecode/templates/shortlog/shortlog_data.html:11 +#: rhodecode/templates/tags/tags_data.html:8 +msgid "links" +msgstr "連結" + +#: rhodecode/templates/branches/branches_data.html:23 +#: rhodecode/templates/branches/branches_data.html:43 +#: rhodecode/templates/shortlog/shortlog_data.html:39 +#: rhodecode/templates/tags/tags_data.html:24 +msgid "changeset" +msgstr "修改" + +#: rhodecode/templates/branches/branches_data.html:25 +#: rhodecode/templates/branches/branches_data.html:45 +#: rhodecode/templates/files/files.html:12 +#: rhodecode/templates/shortlog/shortlog_data.html:41 +#: rhodecode/templates/summary/summary.html:233 +#: rhodecode/templates/tags/tags_data.html:26 +msgid "files" +msgstr "檔案" + +#: rhodecode/templates/changelog/changelog.html:14 +msgid "showing " +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:14 +msgid "out of" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:37 +msgid "Show" +msgstr "顯示" + +#: rhodecode/templates/changelog/changelog.html:50 +#: rhodecode/templates/changeset/changeset.html:42 +#: rhodecode/templates/summary/summary.html:609 +msgid "commit" +msgstr "遞交" + +#: rhodecode/templates/changelog/changelog.html:63 +msgid "Affected number of files, click to show more details" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:67 +#: rhodecode/templates/changeset/changeset.html:66 +msgid "merge" +msgstr "合併" + +#: rhodecode/templates/changelog/changelog.html:72 +#: rhodecode/templates/changeset/changeset.html:72 +msgid "Parent" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:77 +#: rhodecode/templates/changeset/changeset.html:77 +msgid "No parents" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:82 +#: rhodecode/templates/changeset/changeset.html:80 +#: rhodecode/templates/files/files.html:29 +#: rhodecode/templates/files/files_annotate.html:25 +#: rhodecode/templates/files/files_edit.html:33 +#: rhodecode/templates/shortlog/shortlog_data.html:9 +msgid "branch" +msgstr "分支" + +#: rhodecode/templates/changelog/changelog.html:86 +#: rhodecode/templates/changeset/changeset.html:83 +msgid "tag" +msgstr "標籤" + +#: rhodecode/templates/changelog/changelog.html:122 +msgid "Show selected changes __S -> __E" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:172 +#: rhodecode/templates/shortlog/shortlog_data.html:61 +msgid "There are no changes yet" +msgstr "尚未有任何變更" + +#: rhodecode/templates/changelog/changelog_details.html:2 +#: rhodecode/templates/changeset/changeset.html:55 +msgid "removed" +msgstr "移除" + +#: rhodecode/templates/changelog/changelog_details.html:3 +#: rhodecode/templates/changeset/changeset.html:56 +msgid "changed" +msgstr "修改" + +#: rhodecode/templates/changelog/changelog_details.html:4 +#: rhodecode/templates/changeset/changeset.html:57 +msgid "added" +msgstr "新增" + +#: rhodecode/templates/changelog/changelog_details.html:6 +#: rhodecode/templates/changelog/changelog_details.html:7 +#: rhodecode/templates/changelog/changelog_details.html:8 +#: rhodecode/templates/changeset/changeset.html:59 +#: rhodecode/templates/changeset/changeset.html:60 +#: rhodecode/templates/changeset/changeset.html:61 +#, python-format +msgid "affected %s files" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:6 +#: rhodecode/templates/changeset/changeset.html:14 +#: rhodecode/templates/changeset/changeset.html:31 +msgid "Changeset" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:32 +#: rhodecode/templates/changeset/changeset.html:121 +#: rhodecode/templates/changeset/changeset_range.html:78 +#: rhodecode/templates/files/file_diff.html:32 +#: rhodecode/templates/files/file_diff.html:42 +msgid "raw diff" +msgstr "原始差異" + +#: rhodecode/templates/changeset/changeset.html:34 +#: rhodecode/templates/changeset/changeset.html:123 +#: rhodecode/templates/changeset/changeset_range.html:80 +#: rhodecode/templates/files/file_diff.html:34 +msgid "download diff" +msgstr "下載差異" + +#: rhodecode/templates/changeset/changeset.html:90 +#, python-format +msgid "%s files affected with %s additions and %s deletions." +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:101 +msgid "Changeset was too big and was cut off..." +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:119 +#: rhodecode/templates/changeset/changeset_range.html:76 +#: rhodecode/templates/files/file_diff.html:30 +msgid "diff" +msgstr "差異" + +#: rhodecode/templates/changeset/changeset.html:132 +#: rhodecode/templates/changeset/changeset_range.html:89 +msgid "No changes in this file" +msgstr "這個檔案沒有任何變更" + +#: rhodecode/templates/changeset/changeset_range.html:30 +msgid "Compare View" +msgstr "比較顯示" + +#: rhodecode/templates/changeset/changeset_range.html:52 +msgid "Files affected" +msgstr "" + +#: rhodecode/templates/errors/error_document.html:44 +#, python-format +msgid "You will be redirected to %s in %s seconds" +msgstr "" + +#: rhodecode/templates/files/file_diff.html:4 +#: rhodecode/templates/files/file_diff.html:12 +msgid "File diff" +msgstr "檔案差異" + +#: rhodecode/templates/files/file_diff.html:42 +msgid "Diff is to big to display" +msgstr "" + +#: rhodecode/templates/files/files.html:37 +#: rhodecode/templates/files/files_annotate.html:31 +#: rhodecode/templates/files/files_edit.html:39 +msgid "Location" +msgstr "位置" + +#: rhodecode/templates/files/files.html:46 +msgid "Go back" +msgstr "" + +#: rhodecode/templates/files/files.html:47 +msgid "No files at given path" +msgstr "" + +#: rhodecode/templates/files/files_annotate.html:4 +msgid "File annotate" +msgstr "檔案註釋" + +#: rhodecode/templates/files/files_annotate.html:12 +msgid "annotate" +msgstr "註釋" + +#: rhodecode/templates/files/files_annotate.html:33 +#: rhodecode/templates/files/files_browser.html:160 +#: rhodecode/templates/files/files_source.html:2 +msgid "Revision" +msgstr "修訂" + +#: rhodecode/templates/files/files_annotate.html:36 +#: rhodecode/templates/files/files_browser.html:158 +#: rhodecode/templates/files/files_source.html:7 +msgid "Size" +msgstr "大小" + +#: rhodecode/templates/files/files_annotate.html:38 +#: rhodecode/templates/files/files_browser.html:159 +#: rhodecode/templates/files/files_source.html:9 +msgid "Mimetype" +msgstr "" + +#: rhodecode/templates/files/files_annotate.html:41 +msgid "show source" +msgstr "顯示原始碼" + +#: rhodecode/templates/files/files_annotate.html:43 +#: rhodecode/templates/files/files_annotate.html:78 +#: rhodecode/templates/files/files_source.html:14 +#: rhodecode/templates/files/files_source.html:51 +msgid "show as raw" +msgstr "顯示原始文件" + +#: rhodecode/templates/files/files_annotate.html:45 +#: rhodecode/templates/files/files_source.html:16 +msgid "download as raw" +msgstr "下載原始文件" + +#: rhodecode/templates/files/files_annotate.html:54 +#: rhodecode/templates/files/files_source.html:25 +msgid "History" +msgstr "歷史" + +#: rhodecode/templates/files/files_annotate.html:73 +#: rhodecode/templates/files/files_source.html:46 +#, python-format +msgid "Binary file (%s)" +msgstr "二進位檔 (%s)" + +#: rhodecode/templates/files/files_annotate.html:78 +#: rhodecode/templates/files/files_source.html:51 +msgid "File is too big to display" +msgstr "顯示的檔案太大" + +#: rhodecode/templates/files/files_browser.html:13 +msgid "view" +msgstr "顯示" + +#: rhodecode/templates/files/files_browser.html:14 +msgid "previous revision" +msgstr "前一個修訂" + +#: rhodecode/templates/files/files_browser.html:16 +msgid "next revision" +msgstr "下一個修訂" + +#: rhodecode/templates/files/files_browser.html:23 +msgid "follow current branch" +msgstr "" + +#: rhodecode/templates/files/files_browser.html:27 +msgid "search file list" +msgstr "搜尋檔案列表" + +#: rhodecode/templates/files/files_browser.html:32 +msgid "Loading file list..." +msgstr "載入檔案列表..." + +#: rhodecode/templates/files/files_browser.html:111 +msgid "search truncated" +msgstr "" + +#: rhodecode/templates/files/files_browser.html:122 +msgid "no matching files" +msgstr "無符合的檔案" + +#: rhodecode/templates/files/files_browser.html:161 +msgid "Last modified" +msgstr "最後修改" + +#: rhodecode/templates/files/files_browser.html:162 +msgid "Last commiter" +msgstr "最後的遞交者" + +#: rhodecode/templates/files/files_edit.html:4 +msgid "Edit file" +msgstr "編輯檔案" + +#: rhodecode/templates/files/files_edit.html:19 +msgid "edit file" +msgstr "編輯檔案" + +#: rhodecode/templates/files/files_edit.html:45 +#: rhodecode/templates/shortlog/shortlog_data.html:5 +msgid "commit message" +msgstr "遞交資訊" + +#: rhodecode/templates/files/files_edit.html:51 +msgid "Commit changes" +msgstr "遞交修改" + +#: rhodecode/templates/files/files_source.html:12 +msgid "show annotation" +msgstr "險是註釋" + +#: rhodecode/templates/files/files_source.html:153 +msgid "Selection link" +msgstr "" + +#: rhodecode/templates/followers/followers.html:13 +msgid "followers" +msgstr "追蹤者" + +#: rhodecode/templates/followers/followers_data.html:12 +msgid "Started following" +msgstr "開始追蹤" + +#: rhodecode/templates/forks/forks.html:13 +msgid "forks" +msgstr "分支" + +#: rhodecode/templates/forks/forks_data.html:17 +msgid "forked" +msgstr "已建立分支" + +#: rhodecode/templates/forks/forks_data.html:34 +msgid "There are no forks yet" +msgstr "尚未有任何 fork" + +#: rhodecode/templates/journal/journal.html:34 +msgid "Following" +msgstr "已追蹤" + +#: rhodecode/templates/journal/journal.html:41 +msgid "following user" +msgstr "追蹤使用者" + +#: rhodecode/templates/journal/journal.html:41 +msgid "user" +msgstr "使用者" + +#: rhodecode/templates/journal/journal.html:65 +msgid "You are not following any users or repositories" +msgstr "您尚未追蹤任何使用者或版本庫" + +#: rhodecode/templates/journal/journal_data.html:46 +msgid "No entries yet" +msgstr "" + +#: rhodecode/templates/journal/public_journal.html:17 +msgid "Public Journal" +msgstr "開放日誌" + +#: rhodecode/templates/search/search.html:7 +#: rhodecode/templates/search/search.html:26 +msgid "in repository: " +msgstr "於版本庫:" + +#: rhodecode/templates/search/search.html:9 +#: rhodecode/templates/search/search.html:28 +msgid "in all repositories" +msgstr "於所有的版本庫" + +#: rhodecode/templates/search/search.html:42 +msgid "Search term" +msgstr "搜尋關鍵字" + +#: rhodecode/templates/search/search.html:54 +msgid "Search in" +msgstr "搜尋範圍" + +#: rhodecode/templates/search/search.html:57 +msgid "File contents" +msgstr "文件內容" + +#: rhodecode/templates/search/search.html:59 +msgid "File names" +msgstr "檔案名稱" + +#: rhodecode/templates/search/search_content.html:20 +#: rhodecode/templates/search/search_path.html:15 +msgid "Permission denied" +msgstr "權限不足" + +#: rhodecode/templates/settings/repo_fork.html:5 +msgid "Fork" +msgstr "分支" + +#: rhodecode/templates/settings/repo_fork.html:31 +msgid "Fork name" +msgstr "分支名稱" + +#: rhodecode/templates/settings/repo_fork.html:55 +msgid "fork this repository" +msgstr "fork 這個版本庫" + +#: rhodecode/templates/shortlog/shortlog.html:5 +#: rhodecode/templates/summary/summary.html:666 +msgid "Shortlog" +msgstr "簡短紀錄" + +#: rhodecode/templates/shortlog/shortlog.html:14 +msgid "shortlog" +msgstr "簡短紀錄" + +#: rhodecode/templates/shortlog/shortlog_data.html:6 +msgid "age" +msgstr "" + +#: rhodecode/templates/summary/summary.html:12 +msgid "summary" +msgstr "概況" + +#: rhodecode/templates/summary/summary.html:79 +msgid "remote clone" +msgstr "遠端複製" + +#: rhodecode/templates/summary/summary.html:121 +msgid "by" +msgstr "" + +#: rhodecode/templates/summary/summary.html:128 +msgid "Clone url" +msgstr "複製連結" + +#: rhodecode/templates/summary/summary.html:137 +msgid "Trending source files" +msgstr "" + +#: rhodecode/templates/summary/summary.html:146 +msgid "Download" +msgstr "下載" + +#: rhodecode/templates/summary/summary.html:150 +msgid "There are no downloads yet" +msgstr "沒有任何下載" + +#: rhodecode/templates/summary/summary.html:152 +msgid "Downloads are disabled for this repository" +msgstr "這個版本庫的下載已停用" + +#: rhodecode/templates/summary/summary.html:154 +#: rhodecode/templates/summary/summary.html:320 +msgid "enable" +msgstr "啟用" + +#: rhodecode/templates/summary/summary.html:162 +#: rhodecode/templates/summary/summary.html:297 +#, python-format +msgid "Download %s as %s" +msgstr "下載 %s 為 %s" + +#: rhodecode/templates/summary/summary.html:168 +msgid "Check this to download archive with subrepos" +msgstr "" + +#: rhodecode/templates/summary/summary.html:168 +msgid "with subrepos" +msgstr "" + +#: rhodecode/templates/summary/summary.html:176 +msgid "Feeds" +msgstr "" + +#: rhodecode/templates/summary/summary.html:257 +#: rhodecode/templates/summary/summary.html:684 +#: rhodecode/templates/summary/summary.html:695 +msgid "show more" +msgstr "顯示更多" + +#: rhodecode/templates/summary/summary.html:312 +msgid "Commit activity by day / author" +msgstr "" + +#: rhodecode/templates/summary/summary.html:324 +msgid "Loaded in" +msgstr "" + +#: rhodecode/templates/summary/summary.html:603 +msgid "commits" +msgstr "遞交" + +#: rhodecode/templates/summary/summary.html:604 +msgid "files added" +msgstr "多個檔案新增" + +#: rhodecode/templates/summary/summary.html:605 +msgid "files changed" +msgstr "多個檔案修改" + +#: rhodecode/templates/summary/summary.html:606 +msgid "files removed" +msgstr "移除多個檔案" + +#: rhodecode/templates/summary/summary.html:610 +msgid "file added" +msgstr "檔案新增" + +#: rhodecode/templates/summary/summary.html:611 +msgid "file changed" +msgstr "檔案修改" + +#: rhodecode/templates/summary/summary.html:612 +msgid "file removed" +msgstr "移除檔案" + diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/lib/auth.py --- a/rhodecode/lib/auth.py Tue May 08 21:53:36 2012 +0200 +++ b/rhodecode/lib/auth.py Wed May 16 13:29:40 2012 +0200 @@ -64,7 +64,7 @@ passwd_gen = PasswordGenerator() #print 8-letter password containing only big and small letters of alphabet - print passwd_gen.gen_password(8, passwd_gen.ALPHABETS_BIG_SMALL) + passwd_gen.gen_password(8, passwd_gen.ALPHABETS_BIG_SMALL) """ ALPHABETS_NUM = r'''1234567890''' ALPHABETS_SMALL = r'''qwertyuiopasdfghjklzxcvbnm''' diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/lib/ext_json.py --- a/rhodecode/lib/ext_json.py Tue May 08 21:53:36 2012 +0200 +++ b/rhodecode/lib/ext_json.py Wed May 16 13:29:40 2012 +0200 @@ -81,22 +81,24 @@ _sj = None -# simplejson not found try out regular json module -import json as _json - +try: + # simplejson not found try out regular json module + import json as _json -# extended JSON encoder for json -class ExtendedEncoder(_json.JSONEncoder): - def default(self, obj): - try: - return _obj_dump(obj) - except NotImplementedError: - pass - return _json.JSONEncoder.default(self, obj) -# monkey-patch JSON encoder to use extended version -_json.dumps = functools.partial(_json.dumps, cls=ExtendedEncoder) -_json.dump = functools.partial(_json.dump, cls=ExtendedEncoder) -stdlib = _json + # extended JSON encoder for json + class ExtendedEncoder(_json.JSONEncoder): + def default(self, obj): + try: + return _obj_dump(obj) + except NotImplementedError: + pass + return _json.JSONEncoder.default(self, obj) + # monkey-patch JSON encoder to use extended version + _json.dumps = functools.partial(_json.dumps, cls=ExtendedEncoder) + _json.dump = functools.partial(_json.dump, cls=ExtendedEncoder) + stdlib = _json +except ImportError: + _json = None # set all available json modules simplejson = _sj diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/lib/utils.py --- a/rhodecode/lib/utils.py Tue May 08 21:53:36 2012 +0200 +++ b/rhodecode/lib/utils.py Wed May 16 13:29:40 2012 +0200 @@ -150,7 +150,7 @@ user_log = UserLog() user_log.user_id = user_obj.user_id - user_log.action = action + user_log.action = safe_unicode(action) user_log.repository_id = repo_obj.repo_id user_log.repository_name = repo_name diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/lib/utils2.py --- a/rhodecode/lib/utils2.py Tue May 08 21:53:36 2012 +0200 +++ b/rhodecode/lib/utils2.py Wed May 16 13:29:40 2012 +0200 @@ -215,7 +215,6 @@ try: import chardet encoding = chardet.detect(unicode_)['encoding'] - print encoding if encoding is None: raise UnicodeEncodeError() diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/lib/vcs/backends/git/changeset.py --- a/rhodecode/lib/vcs/backends/git/changeset.py Tue May 08 21:53:36 2012 +0200 +++ b/rhodecode/lib/vcs/backends/git/changeset.py Wed May 16 13:29:40 2012 +0200 @@ -240,11 +240,11 @@ which is generally not good. Should be replaced with algorithm iterating commits. """ - cmd = 'log --pretty="format: %%H" --name-status -p %s -- "%s"' % ( + cmd = 'log --pretty="format: %%H" -s -p %s -- "%s"' % ( self.id, path ) so, se = self.repository.run_git_command(cmd) - ids = re.findall(r'\w{40}', so) + ids = re.findall(r'[0-9a-fA-F]{40}', so) return [self.repository.get_changeset(id) for id in ids] def get_file_annotate(self, path): diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/lib/vcs/backends/hg/changeset.py --- a/rhodecode/lib/vcs/backends/hg/changeset.py Tue May 08 21:53:36 2012 +0200 +++ b/rhodecode/lib/vcs/backends/hg/changeset.py Wed May 16 13:29:40 2012 +0200 @@ -37,6 +37,10 @@ return safe_unicode(self._ctx.branch()) @LazyProperty + def bookmarks(self): + return map(safe_unicode, self._ctx.bookmarks()) + + @LazyProperty def message(self): return safe_unicode(self._ctx.description()) @@ -259,8 +263,6 @@ archival.archive(self.repository._repo, stream, self.raw_id, kind, prefix=prefix, subrepos=subrepos) - #stream.close() - if stream.closed and hasattr(stream, 'name'): stream = open(stream.name, 'rb') elif hasattr(stream, 'mode') and 'r' not in stream.mode: diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/lib/vcs/utils/__init__.py --- a/rhodecode/lib/vcs/utils/__init__.py Tue May 08 21:53:36 2012 +0200 +++ b/rhodecode/lib/vcs/utils/__init__.py Wed May 16 13:29:40 2012 +0200 @@ -90,7 +90,6 @@ try: import chardet encoding = chardet.detect(unicode_)['encoding'] - print encoding if encoding is None: raise UnicodeEncodeError() diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/model/db.py --- a/rhodecode/model/db.py Tue May 08 21:53:36 2012 +0200 +++ b/rhodecode/model/db.py Wed May 16 13:29:40 2012 +0200 @@ -647,7 +647,7 @@ # SCM PROPERTIES #========================================================================== - def get_changeset(self, rev): + def get_changeset(self, rev=None): return get_changeset_safe(self.scm_instance, rev) @property @@ -1297,7 +1297,8 @@ @property def recipients(self): return [x.user for x in UserNotification.query()\ - .filter(UserNotification.notification == self).all()] + .filter(UserNotification.notification == self)\ + .order_by(UserNotification.user).all()] @classmethod def create(cls, created_by, subject, body, recipients, type_=None): diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/model/user.py --- a/rhodecode/model/user.py Tue May 08 21:53:36 2012 +0200 +++ b/rhodecode/model/user.py Wed May 16 13:29:40 2012 +0200 @@ -225,10 +225,8 @@ from rhodecode.model.notification import NotificationModel try: - new_user = User() - for k, v in form_data.items(): - if k != 'admin': - setattr(new_user, k, v) + form_data['admin'] = False + new_user = self.create(form_data) self.sa.add(new_user) self.sa.flush() @@ -533,7 +531,6 @@ for perm in user_repo_group_perms_from_users_groups: g_k = perm.UsersGroupRepoGroupToPerm.group.group_name - print perm, g_k p = perm.Permission.permission_name cur_perm = user.permissions[GK][g_k] # overwrite permission only if it's greater than permission diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/public/css/style.css --- a/rhodecode/public/css/style.css Tue May 08 21:53:36 2012 +0200 +++ b/rhodecode/public/css/style.css Wed May 16 13:29:40 2012 +0200 @@ -2545,6 +2545,10 @@ .right .logtags{ padding: 2px 2px 2px 2px; } +.right .logtags .branchtag,.right .logtags .tagtag,.right .logtags .booktag{ + margin: 0px 2px; +} + .right .logtags .branchtag,.logtags .branchtag { padding: 1px 3px 1px 3px; background-color: #bfbfbf; @@ -2583,10 +2587,10 @@ text-decoration: none; color: #ffffff; } -.right .logbooks .bookbook,.logbooks .bookbook { - padding: 1px 3px 2px; +.right .logbooks .bookbook,.logbooks .bookbook,.right .logtags .bookbook,.logtags .bookbook { + padding: 1px 3px 1px 3px; background-color: #46A546; - font-size: 9.75px; + font-size: 10px; font-weight: bold; color: #ffffff; text-transform: uppercase; @@ -2595,10 +2599,10 @@ -moz-border-radius: 3px; border-radius: 3px; } -.right .logbooks .bookbook,.logbooks .bookbook a{ +.right .logbooks .bookbook,.logbooks .bookbook a,.right .logtags .bookbook,.logtags .bookbook a{ color: #ffffff; } -.right .logbooks .bookbook,.logbooks .bookbook a:hover{ +.right .logbooks .bookbook,.logbooks .bookbook a:hover,.right .logtags .bookbook,.logtags .bookbook a:hover{ text-decoration: none; color: #ffffff; } diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/templates/changelog/changelog.html --- a/rhodecode/templates/changelog/changelog.html Tue May 08 21:53:36 2012 +0200 +++ b/rhodecode/templates/changelog/changelog.html Wed May 16 13:29:40 2012 +0200 @@ -100,8 +100,16 @@ %endif %if cs.branch: - ${h.link_to(h.shorter(cs.branch),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))} + ${h.link_to(h.shorter(cs.branch),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))} + %endif + %if h.is_hg(c.rhodecode_repo): + %for book in cs.bookmarks: + + ${h.link_to(h.shorter(book),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))} + + %endfor + %endif %for tag in cs.tags: ${h.link_to(h.shorter(tag),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))} diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/tests/__init__.py --- a/rhodecode/tests/__init__.py Tue May 08 21:53:36 2012 +0200 +++ b/rhodecode/tests/__init__.py Wed May 16 13:29:40 2012 +0200 @@ -21,13 +21,15 @@ from routes.util import URLGenerator from webtest import TestApp +from rhodecode import is_windows from rhodecode.model.meta import Session from rhodecode.model.db import User import pylons.test os.environ['TZ'] = 'UTC' -time.tzset() +if not is_windows: + time.tzset() log = logging.getLogger(__name__) @@ -71,6 +73,7 @@ HG_FORK = 'vcs_test_hg_fork' GIT_FORK = 'vcs_test_git_fork' + class TestController(TestCase): def __init__(self, *args, **kwargs): diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/tests/functional/test_files.py --- a/rhodecode/tests/functional/test_files.py Tue May 08 21:53:36 2012 +0200 +++ b/rhodecode/tests/functional/test_files.py Wed May 16 13:29:40 2012 +0200 @@ -190,18 +190,22 @@ self.log_user() for arch_ext, info in ARCHIVE_SPECS.items(): + short = '27cd5cce30c9%s' % arch_ext fname = '27cd5cce30c96924232dffcd24178a07ffeb5dfc%s' % arch_ext - filename = '%s-%s' % (HG_REPO, fname) - - response = self.app.get(url(controller='files', action='archivefile', + filename = '%s-%s' % (HG_REPO, short) + response = self.app.get(url(controller='files', + action='archivefile', repo_name=HG_REPO, fname=fname)) - assert response.status == '200 OK', 'wrong response code' - assert response.response._headers.items() == [('Pragma', 'no-cache'), - ('Cache-Control', 'no-cache'), - ('Content-Type', '%s; charset=utf-8' % info[0]), - ('Content-Disposition', 'attachment; filename=%s' % filename), ], 'wrong headers' + self.assertEqual(response.status, '200 OK') + self.assertEqual(response.response._headers.items(), + [('Pragma', 'no-cache'), + ('Cache-Control', 'no-cache'), + ('Content-Type', '%s; charset=utf-8' % info[0]), + ('Content-Disposition', 'attachment; filename=%s' % filename), + ] + ) def test_archival_wrong_ext(self): self.log_user() @@ -212,8 +216,7 @@ response = self.app.get(url(controller='files', action='archivefile', repo_name=HG_REPO, fname=fname)) - assert 'Unknown archive type' in response.body - + response.mustcontain('Unknown archive type') def test_archival_wrong_revision(self): self.log_user() @@ -224,7 +227,7 @@ response = self.app.get(url(controller='files', action='archivefile', repo_name=HG_REPO, fname=fname)) - assert 'Unknown revision' in response.body + response.mustcontain('Unknown revision') #========================================================================== # RAW FILE @@ -236,8 +239,8 @@ revision='27cd5cce30c96924232dffcd24178a07ffeb5dfc', f_path='vcs/nodes.py')) - assert response.content_disposition == "attachment; filename=nodes.py" - assert response.content_type == "text/x-python" + self.assertEqual(response.content_disposition, "attachment; filename=nodes.py") + self.assertEqual(response.content_type, "text/x-python") def test_raw_file_wrong_cs(self): self.log_user() @@ -277,7 +280,7 @@ revision='27cd5cce30c96924232dffcd24178a07ffeb5dfc', f_path='vcs/nodes.py')) - assert response.content_type == "text/plain" + self.assertEqual(response.content_type, "text/plain") def test_raw_wrong_cs(self): self.log_user() diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/tests/functional/test_login.py --- a/rhodecode/tests/functional/test_login.py Tue May 08 21:53:36 2012 +0200 +++ b/rhodecode/tests/functional/test_login.py Wed May 16 13:29:40 2012 +0200 @@ -54,7 +54,6 @@ self.assertEqual(response.status, '200 OK') self.assertTrue('Users administration' in response.body) - def test_login_short_password(self): response = self.app.post(url(controller='login', action='index'), {'username':'test_admin', @@ -101,7 +100,7 @@ 'lastname':'test'}) self.assertEqual(response.status , '200 OK') - assert 'This e-mail address is already taken' in response.body + response.mustcontain('This e-mail address is already taken') def test_register_err_same_email_case_sensitive(self): response = self.app.post(url(controller='login', action='register'), @@ -112,7 +111,7 @@ 'name':'test', 'lastname':'test'}) self.assertEqual(response.status , '200 OK') - assert 'This e-mail address is already taken' in response.body + response.mustcontain('This e-mail address is already taken') def test_register_err_wrong_data(self): response = self.app.post(url(controller='login', action='register'), @@ -123,9 +122,8 @@ 'name':'test', 'lastname':'test'}) self.assertEqual(response.status , '200 OK') - assert 'An email address must contain a single @' in response.body - assert 'Enter a value 6 characters long or more' in response.body - + response.mustcontain('An email address must contain a single @') + response.mustcontain('Enter a value 6 characters long or more') def test_register_err_username(self): response = self.app.post(url(controller='login', action='register'), @@ -137,11 +135,11 @@ 'lastname':'test'}) self.assertEqual(response.status , '200 OK') - assert 'An email address must contain a single @' in response.body - assert ('Username may only contain ' + response.mustcontain('An email address must contain a single @') + response.mustcontain('Username may only contain ' 'alphanumeric characters underscores, ' 'periods or dashes and must begin with ' - 'alphanumeric character') in response.body + 'alphanumeric character') def test_register_err_case_sensitive(self): response = self.app.post(url(controller='login', action='register'), @@ -156,8 +154,6 @@ self.assertTrue('An email address must contain a single @' in response.body) self.assertTrue('This username already exists' in response.body) - - def test_register_special_chars(self): response = self.app.post(url(controller='login', action='register'), {'username':'xxxaxn', @@ -170,7 +166,6 @@ self.assertEqual(response.status , '200 OK') self.assertTrue('Invalid characters in password' in response.body) - def test_register_password_mismatch(self): response = self.app.post(url(controller='login', action='register'), {'username':'xs', @@ -180,8 +175,8 @@ 'name':'test', 'lastname':'test'}) - self.assertEqual(response.status , '200 OK') - assert 'Passwords do not match' in response.body + self.assertEqual(response.status, '200 OK') + response.mustcontain('Passwords do not match') def test_register_ok(self): username = 'test_regular4' @@ -196,28 +191,32 @@ 'password_confirmation':password, 'email':email, 'name':name, - 'lastname':lastname}) - self.assertEqual(response.status , '302 Found') - assert 'You have successfully registered into rhodecode' in response.session['flash'][0], 'No flash message about user registration' + 'lastname':lastname, + 'admin':True}) # This should be overriden + self.assertEqual(response.status, '302 Found') + self.checkSessionFlash(response, 'You have successfully registered into rhodecode') ret = self.Session.query(User).filter(User.username == 'test_regular4').one() - assert ret.username == username , 'field mismatch %s %s' % (ret.username, username) - assert check_password(password, ret.password) == True , 'password mismatch' - assert ret.email == email , 'field mismatch %s %s' % (ret.email, email) - assert ret.name == name , 'field mismatch %s %s' % (ret.name, name) - assert ret.lastname == lastname , 'field mismatch %s %s' % (ret.lastname, lastname) - + self.assertEqual(ret.username, username) + self.assertEqual(check_password(password, ret.password), True) + self.assertEqual(ret.email, email) + self.assertEqual(ret.name, name) + self.assertEqual(ret.lastname, lastname) + self.assertNotEqual(ret.api_key, None) + self.assertEqual(ret.admin, False) def test_forgot_password_wrong_mail(self): - response = self.app.post(url(controller='login', action='password_reset'), - {'email':'marcin@wrongmail.org', }) + response = self.app.post( + url(controller='login', action='password_reset'), + {'email': 'marcin@wrongmail.org',} + ) - assert "This e-mail address doesn't exist" in response.body, 'Missing error message about wrong email' + response.mustcontain("This e-mail address doesn't exist") def test_forgot_password(self): response = self.app.get(url(controller='login', action='password_reset')) - self.assertEqual(response.status , '200 OK') + self.assertEqual(response.status, '200 OK') username = 'test_password_reset_1' password = 'qweqwe' diff -r 85f31a1b69dc -r c9e3ea5bb59a rhodecode/tests/test_models.py --- a/rhodecode/tests/test_models.py Tue May 08 21:53:36 2012 +0200 +++ b/rhodecode/tests/test_models.py Wed May 16 13:29:40 2012 +0200 @@ -5,7 +5,8 @@ from rhodecode.model.repos_group import ReposGroupModel from rhodecode.model.repo import RepoModel from rhodecode.model.db import RepoGroup, User, Notification, UserNotification, \ - UsersGroup, UsersGroupMember, Permission, UsersGroupRepoGroupToPerm + UsersGroup, UsersGroupMember, Permission, UsersGroupRepoGroupToPerm,\ + Repository from sqlalchemy.exc import IntegrityError from rhodecode.model.user import UserModel @@ -153,24 +154,23 @@ self.assertTrue(self.__check_path('g2', 'g1')) # test repo - self.assertEqual(r.repo_name, os.path.join('g2', 'g1', r.just_name)) - + self.assertEqual(r.repo_name, RepoGroup.url_sep().join(['g2', 'g1', r.just_name])) def test_move_to_root(self): g1 = _make_group('t11') Session.commit() - g2 = _make_group('t22',parent_id=g1.group_id) + g2 = _make_group('t22', parent_id=g1.group_id) Session.commit() - self.assertEqual(g2.full_path,'t11/t22') + self.assertEqual(g2.full_path, 't11/t22') self.assertTrue(self.__check_path('t11', 't22')) g2 = self.__update_group(g2.group_id, 'g22', parent_id=None) Session.commit() - self.assertEqual(g2.group_name,'g22') + self.assertEqual(g2.group_name, 'g22') # we moved out group from t1 to '' so it's full path should be 'g2' - self.assertEqual(g2.full_path,'g22') + self.assertEqual(g2.full_path, 'g22') self.assertFalse(self.__check_path('t11', 't22')) self.assertTrue(self.__check_path('g22')) @@ -620,7 +620,7 @@ # add repo to group form_data = { 'repo_name':HG_REPO, - 'repo_name_full':os.path.join(self.g1.group_name,HG_REPO), + 'repo_name_full':RepoGroup.url_sep().join([self.g1.group_name,HG_REPO]), 'repo_type':'hg', 'clone_uri':'', 'repo_group':self.g1.group_id,