# HG changeset patch # User Marcin Kuzminski # Date 2012-12-13 21:54:21 # Node ID a5f0bc867edc88be23eb808693e5393a97d4c54a # Parent 52b1c6de19c2b8da6d41bb28300cdb363e260ec0 # Parent db1b7125cdafd59b6d397a13f8901dc65149e670 merge with beta diff --git a/.hgignore b/.hgignore --- a/.hgignore +++ b/.hgignore @@ -19,6 +19,6 @@ syntax: regexp ^rhodecode\.db$ ^test\.db$ ^RhodeCode\.egg-info$ -^rc\.ini$ +^rc.*\.ini$ ^fabfile.py ^\.rhodecode$ diff --git a/CONTRIBUTORS b/CONTRIBUTORS --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -28,4 +28,7 @@ List of contributors to RhodeCode projec Vincent Caron Zachary Auclair Stefan Engel - Andrew Shadura \ No newline at end of file + Andrew Shadura + Raoul Thill + Philip Jameson + Mads Kiilerich diff --git a/development.ini b/development.ini --- a/development.ini +++ b/development.ini @@ -29,6 +29,7 @@ pdebug = false #smtp_auth = [server:main] +## PASTE ##nr of threads to spawn #threadpool_workers = 5 @@ -39,7 +40,11 @@ pdebug = false #use_threadpool = true #use = egg:Paste#http + +#WAITRESS +threads = 5 use = egg:waitress#main + host = 0.0.0.0 port = 5000 @@ -54,16 +59,26 @@ use = egg:rhodecode full_stack = true static_files = true # Optional Languages -# en, fr, ja, pt_BR, zh_CN, zh_TW +# en, fr, ja, pt_BR, zh_CN, zh_TW, pl lang = en cache_dir = %(here)s/data index_dir = %(here)s/data/index app_instance_uuid = rc-develop cut_off_limit = 256000 +vcs_full_cache = True force_https = false commit_parse_limit = 25 +# number of items displayed in lightweight dashboard before paginating +dashboard_items = 100 use_gravatar = true +## RSS feed options + +rss_cut_off_limit = 256000 +rss_items_per_page = 10 +rss_include_diff = false + + ## alternative_gravatar_url allows you to use your own avatar server application ## the following parts of the URL will be replaced ## {email} user email @@ -76,6 +91,8 @@ use_gravatar = true container_auth_enabled = false proxypass_auth_enabled = false +## default encoding used to convert from and to unicode +## can be also a comma seperated list of encoding in case of mixed encodings default_encoding = utf8 ## overwrite schema of clone url @@ -227,6 +244,87 @@ beaker.session.auto = False #beaker.session.cookie_expires = 3600 +############################ +## ERROR HANDLING SYSTEMS ## +############################ + +#################### +### [errormator] ### +#################### + +# Errormator is tailored to work with RhodeCode, see +# http://errormator.com for details how to obtain an account +# you must install python package `errormator_client` to make it work + +# errormator enabled +errormator = true + +errormator.server_url = https://api.errormator.com +errormator.api_key = YOUR_API_KEY + +# TWEAK AMOUNT OF INFO SENT HERE + +# enables 404 error logging (default False) +errormator.report_404 = false + +# time in seconds after request is considered being slow (default 1) +errormator.slow_request_time = 1 + +# record slow requests in application +# (needs to be enabled for slow datastore recording and time tracking) +errormator.slow_requests = true + +# enable hooking to application loggers +# errormator.logging = true + +# minimum log level for log capture +# errormator.logging.level = WARNING + +# send logs only from erroneous/slow requests +# (saves API quota for intensive logging) +errormator.logging_on_error = false + +# list of additonal keywords that should be grabbed from environ object +# can be string with comma separated list of words in lowercase +# (by default client will always send following info: +# 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that +# start with HTTP* this list be extended with additional keywords here +errormator.environ_keys_whitelist = + + +# list of keywords that should be blanked from request object +# can be string with comma separated list of words in lowercase +# (by default client will always blank keys that contain following words +# 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf' +# this list be extended with additional keywords set here +errormator.request_keys_blacklist = + + +# list of namespaces that should be ignores when gathering log entries +# can be string with comma separated list of namespaces +# (by default the client ignores own entries: errormator_client.client) +errormator.log_namespace_blacklist = + + +################ +### [sentry] ### +################ + +# sentry is a alternative open source error aggregator +# you must install python packages `sentry` and `raven` to enable + +sentry.dsn = YOUR_DNS +sentry.servers = +sentry.name = +sentry.key = +sentry.public_key = +sentry.secret_key = +sentry.project = +sentry.site = +sentry.include_paths = +sentry.exclude_paths = + + ################################################################################ ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ## ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ## diff --git a/docs/changelog.rst b/docs/changelog.rst --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -4,6 +4,71 @@ Changelog ========= + +1.5.0 (**2012-12-12**) +---------------------- + +news +++++ + +- new rewritten from scratch diff engine. 10x faster in edge cases. Handling + of file renames, copies, change flags and binary files +- added lightweight dashboard option. ref #500. New version of dashboard + page that doesn't use any VCS data and is super fast to render. Recommended + for large amount of repositories. +- implements #648 write Script for updating last modification time for + lightweight dashboard +- implemented compare engine for git repositories. +- LDAP failover, option to specify multiple servers +- added Errormator and Sentry support for monitoring RhodeCode +- implemented #628: Pass server URL to rc-extensions hooks +- new tooltip implementation - added lazy loading of changesets from journal + pages. This can significantly improve speed of rendering the page +- implements #632,added branch/tag/bookmarks info into feeds + added changeset link to body of message +- implemented #638 permissions overview to groups +- implements #636, lazy loading of history and authors to speed up source + pages rendering +- implemented #647, option to pass list of default encoding used to + encode to/decode from unicode +- added caching layer into RSS/ATOM feeds. +- basic implementation of cherry picking changesets for pull request, ref #575 +- implemented #661 Add option to include diff in RSS feed +- implemented file history page for showing detailed changelog for a given file +- implemented #663 Admin/permission: specify default repogroup perms +- implemented #379 defaults settings page for creation of repositories, locking + statistics, downloads, repository type +- implemented #210 filtering of admin journal based on Whoosh Query language +- added parents/children links in changeset viewref #650 + +fixes ++++++ + +- fixed git version checker +- #586 patched basic auth handler to fix issues with git behind proxy +- #589 search urlgenerator didn't properly escape special characters +- fixed issue #614 Include repo name in delete confirmation dialog +- fixed #623: Lang meta-tag doesn't work with C#/C++ +- fixes #612 Double quotes to Single quotes result in bad html in diff +- fixes #630 git statistics do too much work making them slow. +- fixes #625 Git-Tags are not displayed in Shortlog +- fix for issue #602, enforce str when setting mercurial UI object. + When this is used together with mercurial internal translation system + it can lead to UnicodeDecodeErrors +- fixes #645 Fix git handler when doing delete remote branch +- implements #649 added two seperate method for author and commiter to VCS + changeset class switch author for git backed to be the real author not commiter +- fix issue #504 RhodeCode is showing different versions of README on + different summary page loads +- implemented #658 Changing username in LDAP-Mode should not be allowed. +- fixes #652 switch to generator approach when doing file annotation to prevent + huge memory consumption +- fixes #666 move lockkey path location to cache_dir to ensure this path is + always writable for rhodecode server +- many more small fixes and improvements +- fixed issues with recursive scans on removed repositories that could take + long time on instance start + 1.4.4 (**2012-10-08**) ---------------------- diff --git a/docs/index.rst b/docs/index.rst --- a/docs/index.rst +++ b/docs/index.rst @@ -25,6 +25,7 @@ Users Guide usage/locking usage/statistics usage/backup + usage/subrepos usage/debugging usage/troubleshooting diff --git a/docs/setup.rst b/docs/setup.rst --- a/docs/setup.rst +++ b/docs/setup.rst @@ -204,7 +204,8 @@ Enable LDAP : required .. _ldap_host: Host : required - LDAP server hostname or IP address. + LDAP server hostname or IP address. Can be also a comma separated + list of servers to support LDAP fail-over. .. _Port: diff --git a/docs/usage/git_support.rst b/docs/usage/git_support.rst --- a/docs/usage/git_support.rst +++ b/docs/usage/git_support.rst @@ -8,16 +8,15 @@ GIT support Git support in RhodeCode 1.3 was enabled by default. You need to have a git client installed on the machine to make git fully work. -Although There are some limitations on git usage. +Although There is one limitation on git usage. -- hooks that are executed on pull/push are not *real* hooks, they are - just emulating the behavior, and are executed **BEFORE** action takes place. -- large pushes needs http server with chunked encoding support. +- large pushes requires a http server with chunked encoding support. if you plan to use git you need to run RhodeCode with some http server that supports chunked encoding which git http protocol uses, i recommend using waitress_ or gunicorn_ (linux only) for `paste` wsgi app -replacement. +replacement. Starting from version 1.4 waitress_ is the default wsgi server +used in RhodeCode. To use, simply change change the following in the .ini file:: diff --git a/docs/usage/subrepos.rst b/docs/usage/subrepos.rst new file mode 100644 --- /dev/null +++ b/docs/usage/subrepos.rst @@ -0,0 +1,37 @@ +.. _subrepos: + +============================================= +working with RhodeCode and mercurial subrepos +============================================= + +example usage of Subrepos with RhodeCode:: + + ## init a simple repo + hg init repo1 + cd repo1 + echo "file1" > file1 + hg add file1 + hg ci --message "initial file 1" + + #clone subrepo we want to add + hg clone http://rc.local/subrepo + + ## use path like url to existing repo in RhodeCode + echo "subrepo = http://rc.local/subrepo" > .hgsub + + hg add .hgsub + hg ci --message "added remote subrepo" + + + +In file list of repo1 you will see a connected subrepo at revision it was +during cloning. +Clicking in subrepos link should send you to proper repository in RhodeCode + +cloning repo1 will also clone attached subrepository. + +Next we can edit the subrepo data, and push back to RhodeCode. This will update +both of repositories. + +see http://mercurial.aragost.com/kick-start/en/subrepositories/ for more +information about subrepositories \ No newline at end of file diff --git a/production.ini b/production.ini --- a/production.ini +++ b/production.ini @@ -29,6 +29,7 @@ pdebug = false #smtp_auth = [server:main] +## PASTE ##nr of threads to spawn #threadpool_workers = 5 @@ -39,7 +40,11 @@ pdebug = false #use_threadpool = true #use = egg:Paste#http + +#WAITRESS +threads = 5 use = egg:waitress#main + host = 127.0.0.1 port = 8001 @@ -54,16 +59,26 @@ use = egg:rhodecode full_stack = true static_files = true # Optional Languages -# en, fr, ja, pt_BR, zh_CN, zh_TW +# en, fr, ja, pt_BR, zh_CN, zh_TW, pl lang = en cache_dir = %(here)s/data index_dir = %(here)s/data/index app_instance_uuid = rc-production cut_off_limit = 256000 +vcs_full_cache = True force_https = false commit_parse_limit = 50 +# number of items displayed in lightweight dashboard before paginating +dashboard_items = 100 use_gravatar = true +## RSS feed options + +rss_cut_off_limit = 256000 +rss_items_per_page = 10 +rss_include_diff = false + + ## alternative_gravatar_url allows you to use your own avatar server application ## the following parts of the URL will be replaced ## {email} user email @@ -76,6 +91,8 @@ use_gravatar = true container_auth_enabled = false proxypass_auth_enabled = false +## default encoding used to convert from and to unicode +## can be also a comma seperated list of encoding in case of mixed encodings default_encoding = utf8 ## overwrite schema of clone url @@ -227,6 +244,87 @@ beaker.session.auto = False #beaker.session.cookie_expires = 3600 +############################ +## ERROR HANDLING SYSTEMS ## +############################ + +#################### +### [errormator] ### +#################### + +# Errormator is tailored to work with RhodeCode, see +# http://errormator.com for details how to obtain an account +# you must install python package `errormator_client` to make it work + +# errormator enabled +errormator = true + +errormator.server_url = https://api.errormator.com +errormator.api_key = YOUR_API_KEY + +# TWEAK AMOUNT OF INFO SENT HERE + +# enables 404 error logging (default False) +errormator.report_404 = false + +# time in seconds after request is considered being slow (default 1) +errormator.slow_request_time = 1 + +# record slow requests in application +# (needs to be enabled for slow datastore recording and time tracking) +errormator.slow_requests = true + +# enable hooking to application loggers +# errormator.logging = true + +# minimum log level for log capture +# errormator.logging.level = WARNING + +# send logs only from erroneous/slow requests +# (saves API quota for intensive logging) +errormator.logging_on_error = false + +# list of additonal keywords that should be grabbed from environ object +# can be string with comma separated list of words in lowercase +# (by default client will always send following info: +# 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that +# start with HTTP* this list be extended with additional keywords here +errormator.environ_keys_whitelist = + + +# list of keywords that should be blanked from request object +# can be string with comma separated list of words in lowercase +# (by default client will always blank keys that contain following words +# 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf' +# this list be extended with additional keywords set here +errormator.request_keys_blacklist = + + +# list of namespaces that should be ignores when gathering log entries +# can be string with comma separated list of namespaces +# (by default the client ignores own entries: errormator_client.client) +errormator.log_namespace_blacklist = + + +################ +### [sentry] ### +################ + +# sentry is a alternative open source error aggregator +# you must install python packages `sentry` and `raven` to enable + +sentry.dsn = YOUR_DNS +sentry.servers = +sentry.name = +sentry.key = +sentry.public_key = +sentry.secret_key = +sentry.project = +sentry.site = +sentry.include_paths = +sentry.exclude_paths = + + ################################################################################ ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ## ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ## diff --git a/rhodecode/__init__.py b/rhodecode/__init__.py --- a/rhodecode/__init__.py +++ b/rhodecode/__init__.py @@ -26,7 +26,7 @@ import sys import platform -VERSION = (1, 4, 4) +VERSION = (1, 5, 0) try: from rhodecode.lib import get_current_revision @@ -38,7 +38,7 @@ except ImportError: __version__ = ('.'.join((str(each) for each in VERSION[:3])) + '.'.join(VERSION[3:])) -__dbversion__ = 7 # defines current db version for migrations +__dbversion__ = 8 # defines current db version for migrations __platform__ = platform.system() __license__ = 'GPLv3' __py_version__ = sys.version_info diff --git a/rhodecode/config/deployment.ini_tmpl b/rhodecode/config/deployment.ini_tmpl --- a/rhodecode/config/deployment.ini_tmpl +++ b/rhodecode/config/deployment.ini_tmpl @@ -29,6 +29,7 @@ pdebug = false #smtp_auth = [server:main] +## PASTE ##nr of threads to spawn #threadpool_workers = 5 @@ -39,7 +40,11 @@ pdebug = false #use_threadpool = true #use = egg:Paste#http + +#WAITRESS +threads = 5 use = egg:waitress#main + host = 127.0.0.1 port = 5000 @@ -54,16 +59,26 @@ use = egg:rhodecode full_stack = true static_files = true # Optional Languages -# en, fr, ja, pt_BR, zh_CN, zh_TW +# en, fr, ja, pt_BR, zh_CN, zh_TW, pl lang = en cache_dir = %(here)s/data index_dir = %(here)s/data/index app_instance_uuid = ${app_instance_uuid} cut_off_limit = 256000 +vcs_full_cache = True force_https = false commit_parse_limit = 50 +# number of items displayed in lightweight dashboard before paginating +dashboard_items = 100 use_gravatar = true +## RSS feed options + +rss_cut_off_limit = 256000 +rss_items_per_page = 10 +rss_include_diff = false + + ## alternative_gravatar_url allows you to use your own avatar server application ## the following parts of the URL will be replaced ## {email} user email @@ -76,6 +91,8 @@ use_gravatar = true container_auth_enabled = false proxypass_auth_enabled = false +## default encoding used to convert from and to unicode +## can be also a comma seperated list of encoding in case of mixed encodings default_encoding = utf8 ## overwrite schema of clone url @@ -227,6 +244,87 @@ beaker.session.auto = False #beaker.session.cookie_expires = 3600 +############################ +## ERROR HANDLING SYSTEMS ## +############################ + +#################### +### [errormator] ### +#################### + +# Errormator is tailored to work with RhodeCode, see +# http://errormator.com for details how to obtain an account +# you must install python package `errormator_client` to make it work + +# errormator enabled +errormator = true + +errormator.server_url = https://api.errormator.com +errormator.api_key = YOUR_API_KEY + +# TWEAK AMOUNT OF INFO SENT HERE + +# enables 404 error logging (default False) +errormator.report_404 = false + +# time in seconds after request is considered being slow (default 1) +errormator.slow_request_time = 1 + +# record slow requests in application +# (needs to be enabled for slow datastore recording and time tracking) +errormator.slow_requests = true + +# enable hooking to application loggers +# errormator.logging = true + +# minimum log level for log capture +# errormator.logging.level = WARNING + +# send logs only from erroneous/slow requests +# (saves API quota for intensive logging) +errormator.logging_on_error = false + +# list of additonal keywords that should be grabbed from environ object +# can be string with comma separated list of words in lowercase +# (by default client will always send following info: +# 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that +# start with HTTP* this list be extended with additional keywords here +errormator.environ_keys_whitelist = + + +# list of keywords that should be blanked from request object +# can be string with comma separated list of words in lowercase +# (by default client will always blank keys that contain following words +# 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf' +# this list be extended with additional keywords set here +errormator.request_keys_blacklist = + + +# list of namespaces that should be ignores when gathering log entries +# can be string with comma separated list of namespaces +# (by default the client ignores own entries: errormator_client.client) +errormator.log_namespace_blacklist = + + +################ +### [sentry] ### +################ + +# sentry is a alternative open source error aggregator +# you must install python packages `sentry` and `raven` to enable + +sentry.dsn = YOUR_DNS +sentry.servers = +sentry.name = +sentry.key = +sentry.public_key = +sentry.secret_key = +sentry.project = +sentry.site = +sentry.include_paths = +sentry.exclude_paths = + + ################################################################################ ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ## ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ## diff --git a/rhodecode/config/middleware.py b/rhodecode/config/middleware.py --- a/rhodecode/config/middleware.py +++ b/rhodecode/config/middleware.py @@ -53,6 +53,13 @@ def make_app(global_conf, full_stack=Tru if asbool(full_stack): + from rhodecode.lib.middleware.sentry import Sentry + from rhodecode.lib.middleware.errormator import Errormator + if Errormator: + app = Errormator(app, config) + elif Sentry: + app = Sentry(app, config) + # Handle Python exceptions app = ErrorHandler(app, global_conf, **config['pylons.errorware']) diff --git a/rhodecode/config/rcextensions/__init__.py b/rhodecode/config/rcextensions/__init__.py --- a/rhodecode/config/rcextensions/__init__.py +++ b/rhodecode/config/rcextensions/__init__.py @@ -75,18 +75,21 @@ DELETE_REPO_HOOK = _dlhook # POST PUSH HOOK #============================================================================== -# this function will be executed after each push it's runned after the build-in -# hook that rhodecode uses for logging pushes +# this function will be executed after each push it's executed after the +# build-in hook that RhodeCode uses for logging pushes def _pushhook(*args, **kwargs): """ Post push hook kwargs available: + :param server_url: url of instance that triggered this hook + :param config: path to .ini config used + :param scm: type of VS 'git' or 'hg' :param username: name of user who pushed :param ip: ip of who pushed - :param action: pull + :param action: push :param repository: repository name - :param pushed_revs: generator of pushed revisions + :param pushed_revs: list of pushed revisions """ return 0 PUSH_HOOK = _pushhook @@ -96,15 +99,18 @@ PUSH_HOOK = _pushhook # POST PULL HOOK #============================================================================== -# this function will be executed after each push it's runned after the build-in -# hook that rhodecode uses for logging pushes +# this function will be executed after each push it's executed after the +# build-in hook that RhodeCode uses for logging pulls def _pullhook(*args, **kwargs): """ Post pull hook kwargs available:: + :param server_url: url of instance that triggered this hook + :param config: path to .ini config used + :param scm: type of VS 'git' or 'hg' :param username: name of user who pulled - :param ip: ip of who pushed + :param ip: ip of who pulled :param action: pull :param repository: repository name """ diff --git a/rhodecode/config/routing.py b/rhodecode/config/routing.py --- a/rhodecode/config/routing.py +++ b/rhodecode/config/routing.py @@ -32,6 +32,10 @@ def make_map(config): from rhodecode.model.db import Repository repo_name = match_dict.get('repo_name') + if match_dict.get('f_path'): + #fix for multiple initial slashes that causes errors + match_dict['f_path'] = match_dict['f_path'].lstrip('/') + try: by_id = repo_name.split('_') if len(by_id) == 2 and by_id[1].isdigit() and by_id[0] == '': @@ -258,6 +262,10 @@ def make_map(config): rmap.resource('permission', 'permissions', controller='admin/permissions', path_prefix=ADMIN_PREFIX) + #ADMIN DEFAULTS REST ROUTES + rmap.resource('default', 'defaults', + controller='admin/defaults', path_prefix=ADMIN_PREFIX) + ##ADMIN LDAP SETTINGS rmap.connect('ldap_settings', '%s/ldap' % ADMIN_PREFIX, controller='admin/ldap_settings', action='ldap_settings', @@ -347,6 +355,8 @@ def make_map(config): m.connect('api', '/api') #USER JOURNAL + rmap.connect('journal_my_repos', '%s/journal_my_repos' % ADMIN_PREFIX, + controller='journal', action='index_my_repos') rmap.connect('journal', '%s/journal' % ADMIN_PREFIX, controller='journal', action='index') rmap.connect('journal_rss', '%s/journal/rss' % ADMIN_PREFIX, @@ -419,6 +429,28 @@ def make_map(config): controller='changeset', revision='tip', conditions=dict(function=check_repo)) + #still working url for backward compat. + rmap.connect('raw_changeset_home_depraced', + '/{repo_name:.*?}/raw-changeset/{revision}', + controller='changeset', action='changeset_raw', + revision='tip', conditions=dict(function=check_repo)) + + ## new URLs + rmap.connect('changeset_raw_home', + '/{repo_name:.*?}/changeset-diff/{revision}', + controller='changeset', action='changeset_raw', + revision='tip', conditions=dict(function=check_repo)) + + rmap.connect('changeset_patch_home', + '/{repo_name:.*?}/changeset-patch/{revision}', + controller='changeset', action='changeset_patch', + revision='tip', conditions=dict(function=check_repo)) + + rmap.connect('changeset_download_home', + '/{repo_name:.*?}/changeset-download/{revision}', + controller='changeset', action='changeset_download', + revision='tip', conditions=dict(function=check_repo)) + rmap.connect('changeset_comment', '/{repo_name:.*?}/changeset/{revision}/comment', controller='changeset', revision='tip', action='comment', @@ -429,13 +461,11 @@ def make_map(config): controller='changeset', action='delete_comment', conditions=dict(function=check_repo, method=["DELETE"])) - rmap.connect('raw_changeset_home', - '/{repo_name:.*?}/raw-changeset/{revision}', - controller='changeset', action='raw_changeset', - revision='tip', conditions=dict(function=check_repo)) + rmap.connect('changeset_info', '/changeset_info/{repo_name:.*?}/{revision}', + controller='changeset', action='changeset_info') rmap.connect('compare_url', - '/{repo_name:.*?}/compare/{org_ref_type}@{org_ref}...{other_ref_type}@{other_ref}', + '/{repo_name:.*?}/compare/{org_ref_type}@{org_ref:.*?}...{other_ref_type}@{other_ref:.*?}', controller='compare', action='index', conditions=dict(function=check_repo), requirements=dict( @@ -492,6 +522,10 @@ def make_map(config): rmap.connect('shortlog_home', '/{repo_name:.*?}/shortlog', controller='shortlog', conditions=dict(function=check_repo)) + rmap.connect('shortlog_file_home', '/{repo_name:.*?}/shortlog/{revision}/{f_path:.*}', + controller='shortlog', f_path=None, + conditions=dict(function=check_repo)) + rmap.connect('branches_home', '/{repo_name:.*?}/branches', controller='branches', conditions=dict(function=check_repo)) @@ -512,6 +546,11 @@ def make_map(config): controller='files', revision='tip', f_path='', conditions=dict(function=check_repo)) + rmap.connect('files_history_home', + '/{repo_name:.*?}/history/{revision}/{f_path:.*}', + controller='files', action='history', revision='tip', f_path='', + conditions=dict(function=check_repo)) + rmap.connect('files_diff_home', '/{repo_name:.*?}/diff/{f_path:.*}', controller='files', action='diff', revision='tip', f_path='', conditions=dict(function=check_repo)) diff --git a/rhodecode/config/setup_rhodecode.py b/rhodecode/config/setup_rhodecode.py --- a/rhodecode/config/setup_rhodecode.py +++ b/rhodecode/config/setup_rhodecode.py @@ -50,6 +50,16 @@ class SetupCommand(AbstractInstallComman dest='section_name', default=None, help='The name of the section to set up (default: app:main)') + parser.add_option('--force-yes', + action='store_true', + dest='force_ask', + default=None, + help='Force yes to every question') + parser.add_option('--force-no', + action='store_false', + dest='force_ask', + default=None, + help='Force no to every question') def command(self): config_spec = self.args[0] @@ -61,7 +71,7 @@ class SetupCommand(AbstractInstallComman section = 'main' if not ':' in section: plain_section = section - section = 'app:'+section + section = 'app:' + section else: plain_section = section.split(':', 1)[0] if not config_spec.startswith('config:'): diff --git a/rhodecode/controllers/admin/admin.py b/rhodecode/controllers/admin/admin.py --- a/rhodecode/controllers/admin/admin.py +++ b/rhodecode/controllers/admin/admin.py @@ -25,18 +25,95 @@ import logging -from pylons import request, tmpl_context as c +from pylons import request, tmpl_context as c, url from sqlalchemy.orm import joinedload from webhelpers.paginate import Page +from whoosh.qparser.default import QueryParser +from whoosh import query +from sqlalchemy.sql.expression import or_, and_, func from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator from rhodecode.lib.base import BaseController, render -from rhodecode.model.db import UserLog -from rhodecode.lib.utils2 import safe_int +from rhodecode.model.db import UserLog, User +from rhodecode.lib.utils2 import safe_int, remove_prefix, remove_suffix +from rhodecode.lib.indexers import JOURNAL_SCHEMA +from whoosh.qparser.dateparse import DateParserPlugin + log = logging.getLogger(__name__) +def _journal_filter(user_log, search_term): + """ + Filters sqlalchemy user_log based on search_term with whoosh Query language + http://packages.python.org/Whoosh/querylang.html + + :param user_log: + :param search_term: + """ + log.debug('Initial search term: %r' % search_term) + qry = None + if search_term: + qp = QueryParser('repository', schema=JOURNAL_SCHEMA) + qp.add_plugin(DateParserPlugin()) + qry = qp.parse(unicode(search_term)) + log.debug('Filtering using parsed query %r' % qry) + + def wildcard_handler(col, wc_term): + if wc_term.startswith('*') and not wc_term.endswith('*'): + #postfix == endswith + wc_term = remove_prefix(wc_term, prefix='*') + return func.lower(col).endswith(wc_term) + elif wc_term.startswith('*') and wc_term.endswith('*'): + #wildcard == ilike + wc_term = remove_prefix(wc_term, prefix='*') + wc_term = remove_suffix(wc_term, suffix='*') + return func.lower(col).contains(wc_term) + + def get_filterion(field, val, term): + + if field == 'repository': + field = getattr(UserLog, 'repository_name') + elif field == 'ip': + field = getattr(UserLog, 'user_ip') + elif field == 'date': + field = getattr(UserLog, 'action_date') + elif field == 'username': + field = getattr(UserLog, 'username') + else: + field = getattr(UserLog, field) + log.debug('filter field: %s val=>%s' % (field, val)) + + #sql filtering + if isinstance(term, query.Wildcard): + return wildcard_handler(field, val) + elif isinstance(term, query.Prefix): + return func.lower(field).startswith(func.lower(val)) + elif isinstance(term, query.DateRange): + return and_(field >= val[0], field <= val[1]) + return func.lower(field) == func.lower(val) + + if isinstance(qry, (query.And, query.Term, query.Prefix, query.Wildcard, + query.DateRange)): + if not isinstance(qry, query.And): + qry = [qry] + for term in qry: + field = term.fieldname + val = (term.text if not isinstance(term, query.DateRange) + else [term.startdate, term.enddate]) + user_log = user_log.filter(get_filterion(field, val, term)) + elif isinstance(qry, query.Or): + filters = [] + for term in qry: + field = term.fieldname + val = (term.text if not isinstance(term, query.DateRange) + else [term.startdate, term.enddate]) + filters.append(get_filterion(field, val, term)) + user_log = user_log.filter(or_(*filters)) + + return user_log + + class AdminController(BaseController): @LoginRequired() @@ -45,14 +122,26 @@ class AdminController(BaseController): @HasPermissionAllDecorator('hg.admin') def index(self): - users_log = UserLog.query()\ .options(joinedload(UserLog.user))\ - .options(joinedload(UserLog.repository))\ - .order_by(UserLog.action_date.desc()) + .options(joinedload(UserLog.repository)) + + #FILTERING + c.search_term = request.GET.get('filter') + try: + users_log = _journal_filter(users_log, c.search_term) + except: + # we want this to crash for now + raise + + users_log = users_log.order_by(UserLog.action_date.desc()) p = safe_int(request.params.get('page', 1), 1) - c.users_log = Page(users_log, page=p, items_per_page=10) + + def url_generator(**kw): + return url.current(filter=c.search_term, **kw) + + c.users_log = Page(users_log, page=p, items_per_page=10, url=url_generator) c.log_data = render('admin/admin_log.html') if request.environ.get('HTTP_X_PARTIAL_XHR'): diff --git a/rhodecode/controllers/admin/defaults.py b/rhodecode/controllers/admin/defaults.py new file mode 100644 --- /dev/null +++ b/rhodecode/controllers/admin/defaults.py @@ -0,0 +1,130 @@ +# -*- coding: utf-8 -*- +""" + rhodecode.controllers.admin.defaults + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + default settings controller for Rhodecode + + :created_on: Apr 27, 2010 + :author: marcink + :copyright: (C) 2010-2012 Marcin Kuzminski + :license: GPLv3, see COPYING for more details. +""" +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import logging +import traceback +import formencode +from formencode import htmlfill + +from pylons import request, session, tmpl_context as c, url +from pylons.controllers.util import abort, redirect +from pylons.i18n.translation import _ + +from rhodecode.lib import helpers as h +from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator +from rhodecode.lib.base import BaseController, render +from rhodecode.model.forms import DefaultsForm +from rhodecode.model.meta import Session +from rhodecode import BACKENDS +from rhodecode.model.db import RhodeCodeSetting + +log = logging.getLogger(__name__) + + +class DefaultsController(BaseController): + """REST Controller styled on the Atom Publishing Protocol""" + # To properly map this controller, ensure your config/routing.py + # file has a resource setup: + # map.resource('default', 'defaults') + + @LoginRequired() + @HasPermissionAllDecorator('hg.admin') + def __before__(self): + super(DefaultsController, self).__before__() + + def index(self, format='html'): + """GET /defaults: All items in the collection""" + # url('defaults') + c.backends = BACKENDS.keys() + defaults = RhodeCodeSetting.get_default_repo_settings() + + return htmlfill.render( + render('admin/defaults/defaults.html'), + defaults=defaults, + encoding="UTF-8", + force_defaults=False + ) + + def create(self): + """POST /defaults: Create a new item""" + # url('defaults') + + def new(self, format='html'): + """GET /defaults/new: Form to create a new item""" + # url('new_default') + + def update(self, id): + """PUT /defaults/id: Update an existing item""" + # Forms posted to this method should contain a hidden field: + # + # Or using helpers: + # h.form(url('default', id=ID), + # method='put') + # url('default', id=ID) + + _form = DefaultsForm()() + + try: + form_result = _form.to_python(dict(request.POST)) + for k, v in form_result.iteritems(): + setting = RhodeCodeSetting.get_by_name_or_create(k) + setting.app_settings_value = v + Session().add(setting) + Session().commit() + h.flash(_('Default settings updated successfully'), + category='success') + + except formencode.Invalid, errors: + defaults = errors.value + + return htmlfill.render( + render('admin/defaults/defaults.html'), + defaults=defaults, + errors=errors.error_dict or {}, + prefix_error=False, + encoding="UTF-8") + except Exception: + log.error(traceback.format_exc()) + h.flash(_('error occurred during update of defaults'), + category='error') + + return redirect(url('defaults')) + + def delete(self, id): + """DELETE /defaults/id: Delete an existing item""" + # Forms posted to this method should contain a hidden field: + # + # Or using helpers: + # h.form(url('default', id=ID), + # method='delete') + # url('default', id=ID) + + def show(self, id, format='html'): + """GET /defaults/id: Show a specific item""" + # url('default', id=ID) + + def edit(self, id, format='html'): + """GET /defaults/id/edit: Form to edit an existing item""" + # url('edit_default', id=ID) diff --git a/rhodecode/controllers/admin/permissions.py b/rhodecode/controllers/admin/permissions.py --- a/rhodecode/controllers/admin/permissions.py +++ b/rhodecode/controllers/admin/permissions.py @@ -56,10 +56,14 @@ class PermissionsController(BaseControll c.admin_username = session.get('admin_username') super(PermissionsController, self).__before__() - self.perms_choices = [('repository.none', _('None'),), - ('repository.read', _('Read'),), - ('repository.write', _('Write'),), - ('repository.admin', _('Admin'),)] + self.repo_perms_choices = [('repository.none', _('None'),), + ('repository.read', _('Read'),), + ('repository.write', _('Write'),), + ('repository.admin', _('Admin'),)] + self.group_perms_choices = [('group.none', _('None'),), + ('group.read', _('Read'),), + ('group.write', _('Write'),), + ('group.admin', _('Admin'),)] self.register_choices = [ ('hg.register.none', _('disabled')), @@ -75,7 +79,8 @@ class PermissionsController(BaseControll ('hg.fork.repository', _('Enabled'))] # set the global template variables - c.perms_choices = self.perms_choices + c.repo_perms_choices = self.repo_perms_choices + c.group_perms_choices = self.group_perms_choices c.register_choices = self.register_choices c.create_choices = self.create_choices c.fork_choices = self.fork_choices @@ -103,7 +108,8 @@ class PermissionsController(BaseControll permission_model = PermissionModel() - _form = DefaultPermissionsForm([x[0] for x in self.perms_choices], + _form = DefaultPermissionsForm([x[0] for x in self.repo_perms_choices], + [x[0] for x in self.group_perms_choices], [x[0] for x in self.register_choices], [x[0] for x in self.create_choices], [x[0] for x in self.fork_choices])() @@ -157,7 +163,10 @@ class PermissionsController(BaseControll for p in default_user.user_perms: if p.permission.permission_name.startswith('repository.'): - defaults['default_perm'] = p.permission.permission_name + defaults['default_repo_perm'] = p.permission.permission_name + + if p.permission.permission_name.startswith('group.'): + defaults['default_group_perm'] = p.permission.permission_name if p.permission.permission_name.startswith('hg.register.'): defaults['default_register'] = p.permission.permission_name diff --git a/rhodecode/controllers/admin/repos.py b/rhodecode/controllers/admin/repos.py --- a/rhodecode/controllers/admin/repos.py +++ b/rhodecode/controllers/admin/repos.py @@ -42,11 +42,13 @@ from rhodecode.lib.base import BaseContr from rhodecode.lib.utils import invalidate_cache, action_logger, repo_name_slug from rhodecode.lib.helpers import get_token from rhodecode.model.meta import Session -from rhodecode.model.db import User, Repository, UserFollowing, RepoGroup +from rhodecode.model.db import User, Repository, UserFollowing, RepoGroup,\ + RhodeCodeSetting from rhodecode.model.forms import RepoForm from rhodecode.model.scm import ScmModel from rhodecode.model.repo import RepoModel from rhodecode.lib.compat import json +from sqlalchemy.sql.expression import func log = logging.getLogger(__name__) @@ -95,6 +97,7 @@ class ReposController(BaseController): return redirect(url('repos')) + ##override defaults for exact repo info here git/hg etc choices, c.landing_revs = ScmModel().get_repo_landing_revs(c.repo_info) c.landing_revs_choices = choices @@ -134,7 +137,7 @@ class ReposController(BaseController): # url('repos') c.repos_list = Repository.query()\ - .order_by(Repository.repo_name)\ + .order_by(func.lower(Repository.repo_name))\ .all() repos_data = [] @@ -156,7 +159,7 @@ class ReposController(BaseController): for repo in c.repos_list: repos_data.append({ "menu": quick_menu(repo.repo_name), - "raw_name": repo.repo_name, + "raw_name": repo.repo_name.lower(), "name": repo_lnk(repo.repo_name, repo.repo_type, repo.private, repo.fork), "desc": repo.description, @@ -237,7 +240,15 @@ class ReposController(BaseController): new_repo = request.GET.get('repo', '') c.new_repo = repo_name_slug(new_repo) self.__load_defaults() - return render('admin/repos/repo_add.html') + ## apply the defaults from defaults page + defaults = RhodeCodeSetting.get_default_repo_settings(strip_prefix=True) + return htmlfill.render( + render('admin/repos/repo_add.html'), + defaults=defaults, + errors={}, + prefix_error=False, + encoding="UTF-8" + ) @HasPermissionAllDecorator('hg.admin') def update(self, repo_name): @@ -261,7 +272,7 @@ class ReposController(BaseController): landing_revs=c.landing_revs_choices)() try: form_result = _form.to_python(dict(request.POST)) - repo = repo_model.update(repo_name, form_result) + repo = repo_model.update(repo_name, **form_result) invalidate_cache('get_repo_cached_%s' % repo_name) h.flash(_('Repository %s updated successfully') % repo_name, category='success') diff --git a/rhodecode/controllers/admin/repos_groups.py b/rhodecode/controllers/admin/repos_groups.py --- a/rhodecode/controllers/admin/repos_groups.py +++ b/rhodecode/controllers/admin/repos_groups.py @@ -35,17 +35,20 @@ from pylons.i18n.translation import _ from sqlalchemy.exc import IntegrityError +import rhodecode from rhodecode.lib import helpers as h +from rhodecode.lib.ext_json import json from rhodecode.lib.auth import LoginRequired, HasPermissionAnyDecorator,\ HasReposGroupPermissionAnyDecorator from rhodecode.lib.base import BaseController, render -from rhodecode.model.db import RepoGroup +from rhodecode.model.db import RepoGroup, Repository from rhodecode.model.repos_group import ReposGroupModel from rhodecode.model.forms import ReposGroupForm from rhodecode.model.meta import Session from rhodecode.model.repo import RepoModel from webob.exc import HTTPInternalServerError, HTTPNotFound from rhodecode.lib.utils2 import str2bool +from sqlalchemy.sql.expression import func log = logging.getLogger(__name__) @@ -281,20 +284,66 @@ class ReposGroupsController(BaseControll # url('repos_group', id=ID) c.group = RepoGroup.get_or_404(id) - c.group_repos = c.group.repositories.all() #overwrite our cached list with current filter gr_filter = c.group_repos - c.cached_repo_list = self.scm_model.get_repos(all_repos=gr_filter) - - c.repos_list = c.cached_repo_list - c.repo_cnt = 0 groups = RepoGroup.query().order_by(RepoGroup.group_name)\ .filter(RepoGroup.group_parent_id == id).all() c.groups = self.scm_model.get_repos_groups(groups) + + if c.visual.lightweight_dashboard is False: + c.cached_repo_list = self.scm_model.get_repos(all_repos=gr_filter) + + c.repos_list = c.cached_repo_list + ## lightweight version of dashboard + else: + c.repos_list = Repository.query()\ + .filter(Repository.group_id == id)\ + .order_by(func.lower(Repository.repo_name))\ + .all() + repos_data = [] + total_records = len(c.repos_list) + + _tmpl_lookup = rhodecode.CONFIG['pylons.app_globals'].mako_lookup + template = _tmpl_lookup.get_template('data_table/_dt_elements.html') + + quick_menu = lambda repo_name: (template.get_def("quick_menu") + .render(repo_name, _=_, h=h, c=c)) + repo_lnk = lambda name, rtype, private, fork_of: ( + template.get_def("repo_name") + .render(name, rtype, private, fork_of, short_name=False, + admin=False, _=_, h=h, c=c)) + last_change = lambda last_change: (template.get_def("last_change") + .render(last_change, _=_, h=h, c=c)) + rss_lnk = lambda repo_name: (template.get_def("rss") + .render(repo_name, _=_, h=h, c=c)) + atom_lnk = lambda repo_name: (template.get_def("atom") + .render(repo_name, _=_, h=h, c=c)) + + for repo in c.repos_list: + repos_data.append({ + "menu": quick_menu(repo.repo_name), + "raw_name": repo.repo_name.lower(), + "name": repo_lnk(repo.repo_name, repo.repo_type, + repo.private, repo.fork), + "last_change": last_change(repo.last_db_change), + "desc": repo.description, + "owner": h.person(repo.user.username), + "rss": rss_lnk(repo.repo_name), + "atom": atom_lnk(repo.repo_name), + }) + + c.data = json.dumps({ + "totalRecords": total_records, + "startIndex": 0, + "sort": "name", + "dir": "asc", + "records": repos_data + }) + return render('admin/repos_groups/repos_groups.html') @HasPermissionAnyDecorator('hg.admin') diff --git a/rhodecode/controllers/admin/settings.py b/rhodecode/controllers/admin/settings.py --- a/rhodecode/controllers/admin/settings.py +++ b/rhodecode/controllers/admin/settings.py @@ -185,18 +185,23 @@ class SettingsController(BaseController) sett1 = RhodeCodeSetting.get_by_name_or_create('show_public_icon') sett1.app_settings_value = \ form_result['rhodecode_show_public_icon'] + Session().add(sett1) sett2 = RhodeCodeSetting.get_by_name_or_create('show_private_icon') sett2.app_settings_value = \ form_result['rhodecode_show_private_icon'] + Session().add(sett2) sett3 = RhodeCodeSetting.get_by_name_or_create('stylify_metatags') sett3.app_settings_value = \ form_result['rhodecode_stylify_metatags'] + Session().add(sett3) - Session().add(sett1) - Session().add(sett2) - Session().add(sett3) + sett4 = RhodeCodeSetting.get_by_name_or_create('lightweight_dashboard') + sett4.app_settings_value = \ + form_result['rhodecode_lightweight_dashboard'] + Session().add(sett4) + Session().commit() set_rhodecode_config(config) h.flash(_('Updated visualisation settings'), @@ -476,7 +481,15 @@ class SettingsController(BaseController) new_repo = request.GET.get('repo', '') c.new_repo = repo_name_slug(new_repo) - return render('admin/repos/repo_add_create_repository.html') + ## apply the defaults from defaults page + defaults = RhodeCodeSetting.get_default_repo_settings(strip_prefix=True) + return htmlfill.render( + render('admin/repos/repo_add_create_repository.html'), + defaults=defaults, + errors={}, + prefix_error=False, + encoding="UTF-8" + ) def _get_hg_ui_settings(self): ret = RhodeCodeUi.query().all() diff --git a/rhodecode/controllers/admin/users.py b/rhodecode/controllers/admin/users.py --- a/rhodecode/controllers/admin/users.py +++ b/rhodecode/controllers/admin/users.py @@ -158,13 +158,18 @@ class UsersController(BaseController): # url('user', id=ID) user_model = UserModel() c.user = user_model.get(id) + c.ldap_dn = c.user.ldap_dn c.perm_user = AuthUser(user_id=id) _form = UserForm(edit=True, old_data={'user_id': id, 'email': c.user.email})() form_result = {} try: form_result = _form.to_python(dict(request.POST)) - user_model.update(id, form_result) + skip_attrs = [] + if c.ldap_dn: + #forbid updating username for ldap accounts + skip_attrs = ['username'] + user_model.update(id, form_result, skip_attrs=skip_attrs) usr = form_result['username'] action_logger(self.rhodecode_user, 'admin_updated_user:%s' % usr, None, self.ip_addr, self.sa) @@ -233,6 +238,7 @@ class UsersController(BaseController): c.user_email_map = UserEmailMap.query()\ .filter(UserEmailMap.user == c.user).all() user_model = UserModel() + c.ldap_dn = c.user.ldap_dn defaults = c.user.get_dict() defaults.update({ 'create_repo_perm': user_model.has_perm(id, 'hg.create.repository'), diff --git a/rhodecode/controllers/admin/users_groups.py b/rhodecode/controllers/admin/users_groups.py --- a/rhodecode/controllers/admin/users_groups.py +++ b/rhodecode/controllers/admin/users_groups.py @@ -40,10 +40,12 @@ from rhodecode.lib.base import BaseContr from rhodecode.model.users_group import UsersGroupModel -from rhodecode.model.db import User, UsersGroup +from rhodecode.model.db import User, UsersGroup, UsersGroupToPerm,\ + UsersGroupRepoToPerm, UsersGroupRepoGroupToPerm from rhodecode.model.forms import UsersGroupForm from rhodecode.model.meta import Session from rhodecode.lib.utils import action_logger +from sqlalchemy.orm import joinedload log = logging.getLogger(__name__) @@ -102,6 +104,38 @@ class UsersGroupsController(BaseControll # url('new_users_group') return render('admin/users_groups/users_group_add.html') + def _load_data(self, id): + c.users_group.permissions = { + 'repositories': {}, + 'repositories_groups': {} + } + + ugroup_repo_perms = UsersGroupRepoToPerm.query()\ + .options(joinedload(UsersGroupRepoToPerm.permission))\ + .options(joinedload(UsersGroupRepoToPerm.repository))\ + .filter(UsersGroupRepoToPerm.users_group_id == id)\ + .all() + + for gr in ugroup_repo_perms: + c.users_group.permissions['repositories'][gr.repository.repo_name] \ + = gr.permission.permission_name + + ugroup_group_perms = UsersGroupRepoGroupToPerm.query()\ + .options(joinedload(UsersGroupRepoGroupToPerm.permission))\ + .options(joinedload(UsersGroupRepoGroupToPerm.group))\ + .filter(UsersGroupRepoGroupToPerm.users_group_id == id)\ + .all() + + for gr in ugroup_group_perms: + c.users_group.permissions['repositories_groups'][gr.group.group_name] \ + = gr.permission.permission_name + + c.group_members_obj = [x.user for x in c.users_group.members] + c.group_members = [(x.user_id, x.username) for x in + c.group_members_obj] + c.available_members = [(x.user_id, x.username) for x in + User.query().all()] + def update(self, id): """PUT /users_groups/id: Update an existing item""" # Forms posted to this method should contain a hidden field: @@ -111,13 +145,8 @@ class UsersGroupsController(BaseControll # method='put') # url('users_group', id=ID) - c.users_group = UsersGroup.get(id) - c.group_members_obj = [x.user for x in c.users_group.members] - c.group_members = [(x.user_id, x.username) for x in - c.group_members_obj] - - c.available_members = [(x.user_id, x.username) for x in - User.query().all()] + c.users_group = UsersGroup.get_or_404(id) + self._load_data(id) available_members = [safe_unicode(x[0]) for x in c.available_members] @@ -189,13 +218,8 @@ class UsersGroupsController(BaseControll # url('edit_users_group', id=ID) c.users_group = UsersGroup.get_or_404(id) + self._load_data(id) - c.users_group.permissions = {} - c.group_members_obj = [x.user for x in c.users_group.members] - c.group_members = [(x.user_id, x.username) for x in - c.group_members_obj] - c.available_members = [(x.user_id, x.username) for x in - User.query().all()] ug_model = UsersGroupModel() defaults = c.users_group.get_dict() defaults.update({ diff --git a/rhodecode/controllers/api/api.py b/rhodecode/controllers/api/api.py --- a/rhodecode/controllers/api/api.py +++ b/rhodecode/controllers/api/api.py @@ -770,7 +770,6 @@ class ApiController(JSONRPCController): success=True ) except Exception: - print traceback.format_exc() log.error(traceback.format_exc()) raise JSONRPCError( 'failed to edit permission for users group: `%s` in ' diff --git a/rhodecode/controllers/changeset.py b/rhodecode/controllers/changeset.py --- a/rhodecode/controllers/changeset.py +++ b/rhodecode/controllers/changeset.py @@ -26,16 +26,15 @@ import logging import traceback from collections import defaultdict -from webob.exc import HTTPForbidden +from webob.exc import HTTPForbidden, HTTPBadRequest from pylons import tmpl_context as c, url, request, response from pylons.i18n.translation import _ from pylons.controllers.util import redirect -from pylons.decorators import jsonify +from rhodecode.lib.utils import jsonify -from rhodecode.lib.vcs.exceptions import RepositoryError, ChangesetError, \ +from rhodecode.lib.vcs.exceptions import RepositoryError, \ ChangesetDoesNotExistError -from rhodecode.lib.vcs.nodes import FileNode import rhodecode.lib.helpers as h from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator @@ -47,10 +46,11 @@ from rhodecode.model.db import Changeset from rhodecode.model.comment import ChangesetCommentsModel from rhodecode.model.changeset_status import ChangesetStatusModel from rhodecode.model.meta import Session -from rhodecode.lib.diffs import wrapped_diff from rhodecode.model.repo import RepoModel +from rhodecode.lib.diffs import LimitedDiffContainer from rhodecode.lib.exceptions import StatusChangeOnClosedPullRequestError from rhodecode.lib.vcs.backends.base import EmptyChangeset +from rhodecode.lib.utils2 import safe_unicode log = logging.getLogger(__name__) @@ -109,7 +109,13 @@ def _ignorews_url(GET, fileid=None): def get_line_ctx(fid, GET): ln_ctx_global = GET.get('context') - ln_ctx = filter(lambda k: k.startswith('C'), GET.getall(fid)) + if fid: + ln_ctx = filter(lambda k: k.startswith('C'), GET.getall(fid)) + else: + _ln_ctx = filter(lambda k: k.startswith('C'), GET) + ln_ctx = GET.get(_ln_ctx[0]) if _ln_ctx else ln_ctx_global + if ln_ctx: + ln_ctx = [ln_ctx] if ln_ctx: retval = ln_ctx[0].split(':')[-1] @@ -119,7 +125,7 @@ def get_line_ctx(fid, GET): try: return int(retval) except: - return + return 3 def _context_url(GET, fileid=None): @@ -173,12 +179,11 @@ class ChangesetController(BaseRepoContro c.users_array = repo_model.get_users_js() c.users_groups_array = repo_model.get_users_groups_js() - def index(self, revision): - + def index(self, revision, method='show'): c.anchor_url = anchor_url c.ignorews_url = _ignorews_url c.context_url = _context_url - limit_off = request.GET.get('fulldiff') + c.fulldiff = fulldiff = request.GET.get('fulldiff') #get ranges of revisions if preset rev_range = revision.split('...')[:2] enable_comments = True @@ -188,7 +193,7 @@ class ChangesetController(BaseRepoContro rev_start = rev_range[0] rev_end = rev_range[1] rev_ranges = c.rhodecode_repo.get_changesets(start=rev_start, - end=rev_end) + end=rev_end) else: rev_ranges = [c.rhodecode_repo.get_changeset(revision)] @@ -206,95 +211,63 @@ class ChangesetController(BaseRepoContro c.lines_added = 0 # count of lines added c.lines_deleted = 0 # count of lines removes - cumulative_diff = 0 - c.cut_off = False # defines if cut off limit is reached c.changeset_statuses = ChangesetStatus.STATUSES c.comments = [] c.statuses = [] c.inline_comments = [] c.inline_cnt = 0 + # Iterate over ranges (default changeset view is always one changeset) for changeset in c.cs_ranges: - - c.statuses.extend([ChangesetStatusModel()\ - .get_status(c.rhodecode_db_repo.repo_id, - changeset.raw_id)]) + inlines = [] + if method == 'show': + c.statuses.extend([ChangesetStatusModel()\ + .get_status(c.rhodecode_db_repo.repo_id, + changeset.raw_id)]) - c.comments.extend(ChangesetCommentsModel()\ - .get_comments(c.rhodecode_db_repo.repo_id, - revision=changeset.raw_id)) - inlines = ChangesetCommentsModel()\ - .get_inline_comments(c.rhodecode_db_repo.repo_id, - revision=changeset.raw_id) - c.inline_comments.extend(inlines) + c.comments.extend(ChangesetCommentsModel()\ + .get_comments(c.rhodecode_db_repo.repo_id, + revision=changeset.raw_id)) + inlines = ChangesetCommentsModel()\ + .get_inline_comments(c.rhodecode_db_repo.repo_id, + revision=changeset.raw_id) + c.inline_comments.extend(inlines) + c.changes[changeset.raw_id] = [] - try: - changeset_parent = changeset.parents[0] - except IndexError: - changeset_parent = None + + cs2 = changeset.raw_id + cs1 = changeset.parents[0].raw_id if changeset.parents else EmptyChangeset() + context_lcl = get_line_ctx('', request.GET) + ign_whitespace_lcl = ign_whitespace_lcl = get_ignore_ws('', request.GET) - #================================================================== - # ADDED FILES - #================================================================== - for node in changeset.added: - fid = h.FID(revision, node.path) - line_context_lcl = get_line_ctx(fid, request.GET) - ign_whitespace_lcl = get_ignore_ws(fid, request.GET) - lim = self.cut_off_limit - if cumulative_diff > self.cut_off_limit: - lim = -1 if limit_off is None else None - size, cs1, cs2, diff, st = wrapped_diff( - filenode_old=None, - filenode_new=node, - cut_off_limit=lim, - ignore_whitespace=ign_whitespace_lcl, - line_context=line_context_lcl, - enable_comments=enable_comments - ) - cumulative_diff += size - c.lines_added += st[0] - c.lines_deleted += st[1] - c.changes[changeset.raw_id].append( - ('added', node, diff, cs1, cs2, st) - ) - - #================================================================== - # CHANGED FILES - #================================================================== - for node in changeset.changed: - try: - filenode_old = changeset_parent.get_node(node.path) - except ChangesetError: - log.warning('Unable to fetch parent node for diff') - filenode_old = FileNode(node.path, '', EmptyChangeset()) - - fid = h.FID(revision, node.path) - line_context_lcl = get_line_ctx(fid, request.GET) - ign_whitespace_lcl = get_ignore_ws(fid, request.GET) - lim = self.cut_off_limit - if cumulative_diff > self.cut_off_limit: - lim = -1 if limit_off is None else None - size, cs1, cs2, diff, st = wrapped_diff( - filenode_old=filenode_old, - filenode_new=node, - cut_off_limit=lim, - ignore_whitespace=ign_whitespace_lcl, - line_context=line_context_lcl, - enable_comments=enable_comments - ) - cumulative_diff += size - c.lines_added += st[0] - c.lines_deleted += st[1] - c.changes[changeset.raw_id].append( - ('changed', node, diff, cs1, cs2, st) - ) - #================================================================== - # REMOVED FILES - #================================================================== - for node in changeset.removed: - c.changes[changeset.raw_id].append( - ('removed', node, None, None, None, (0, 0)) - ) + _diff = c.rhodecode_repo.get_diff(cs1, cs2, + ignore_whitespace=ign_whitespace_lcl, context=context_lcl) + diff_limit = self.cut_off_limit if not fulldiff else None + diff_processor = diffs.DiffProcessor(_diff, + vcs=c.rhodecode_repo.alias, + format='gitdiff', + diff_limit=diff_limit) + cs_changes = OrderedDict() + if method == 'show': + _parsed = diff_processor.prepare() + c.limited_diff = False + if isinstance(_parsed, LimitedDiffContainer): + c.limited_diff = True + for f in _parsed: + st = f['stats'] + if st[0] != 'b': + c.lines_added += st[0] + c.lines_deleted += st[1] + fid = h.FID(changeset.raw_id, f['filename']) + diff = diff_processor.as_html(enable_comments=enable_comments, + parsed_lines=[f]) + cs_changes[fid] = [cs1, cs2, f['operation'], f['filename'], + diff, st] + else: + # downloads/raw we only need RAW diff nothing else + diff = diff_processor.as_raw() + cs_changes[''] = [None, None, None, None, diff, None] + c.changes[changeset.raw_id] = cs_changes # count inline comments for __, lines in c.inline_comments: @@ -303,74 +276,34 @@ class ChangesetController(BaseRepoContro if len(c.cs_ranges) == 1: c.changeset = c.cs_ranges[0] - c.changes = c.changes[c.changeset.raw_id] - - return render('changeset/changeset.html') - else: - return render('changeset/changeset_range.html') - - def raw_changeset(self, revision): - - method = request.GET.get('diff', 'show') - ignore_whitespace = request.GET.get('ignorews') == '1' - line_context = request.GET.get('context', 3) - try: - c.scm_type = c.rhodecode_repo.alias - c.changeset = c.rhodecode_repo.get_changeset(revision) - except RepositoryError: - log.error(traceback.format_exc()) - return redirect(url('home')) - else: - try: - c.changeset_parent = c.changeset.parents[0] - except IndexError: - c.changeset_parent = None - c.changes = [] + c.parent_tmpl = ''.join(['# Parent %s\n' % x.raw_id + for x in c.changeset.parents]) + if method == 'download': + response.content_type = 'text/plain' + response.content_disposition = 'attachment; filename=%s.diff' \ + % revision[:12] + return diff + elif method == 'patch': + response.content_type = 'text/plain' + c.diff = safe_unicode(diff) + return render('changeset/patch_changeset.html') + elif method == 'raw': + response.content_type = 'text/plain' + return diff + elif method == 'show': + if len(c.cs_ranges) == 1: + return render('changeset/changeset.html') + else: + return render('changeset/changeset_range.html') - for node in c.changeset.added: - filenode_old = FileNode(node.path, '') - if filenode_old.is_binary or node.is_binary: - diff = _('binary file') + '\n' - else: - f_gitdiff = diffs.get_gitdiff(filenode_old, node, - ignore_whitespace=ignore_whitespace, - context=line_context) - diff = diffs.DiffProcessor(f_gitdiff, - format='gitdiff').raw_diff() - - cs1 = None - cs2 = node.changeset.raw_id - c.changes.append(('added', node, diff, cs1, cs2)) + def changeset_raw(self, revision): + return self.index(revision, method='raw') - for node in c.changeset.changed: - filenode_old = c.changeset_parent.get_node(node.path) - if filenode_old.is_binary or node.is_binary: - diff = _('binary file') - else: - f_gitdiff = diffs.get_gitdiff(filenode_old, node, - ignore_whitespace=ignore_whitespace, - context=line_context) - diff = diffs.DiffProcessor(f_gitdiff, - format='gitdiff').raw_diff() - - cs1 = filenode_old.changeset.raw_id - cs2 = node.changeset.raw_id - c.changes.append(('changed', node, diff, cs1, cs2)) + def changeset_patch(self, revision): + return self.index(revision, method='patch') - response.content_type = 'text/plain' - - if method == 'download': - response.content_disposition = 'attachment; filename=%s.patch' \ - % revision - - c.parent_tmpl = ''.join(['# Parent %s\n' % x.raw_id - for x in c.changeset.parents]) - - c.diffs = '' - for x in c.changes: - c.diffs += x[2] - - return render('changeset/raw_changeset.html') + def changeset_download(self, revision): + return self.index(revision, method='download') @jsonify def comment(self, repo_name, revision): @@ -445,3 +378,13 @@ class ChangesetController(BaseRepoContro return True else: raise HTTPForbidden() + + @jsonify + def changeset_info(self, repo_name, revision): + if request.is_xhr: + try: + return c.rhodecode_repo.get_changeset(revision) + except ChangesetDoesNotExistError, e: + return EmptyChangeset(message=str(e)) + else: + raise HTTPBadRequest() diff --git a/rhodecode/controllers/compare.py b/rhodecode/controllers/compare.py --- a/rhodecode/controllers/compare.py +++ b/rhodecode/controllers/compare.py @@ -41,6 +41,8 @@ from rhodecode.model.db import Repositor from rhodecode.model.pull_request import PullRequestModel from webob.exc import HTTPBadRequest from rhodecode.lib.utils2 import str2bool +from rhodecode.lib.diffs import LimitedDiffContainer +from rhodecode.lib.vcs.backends.base import EmptyChangeset log = logging.getLogger(__name__) @@ -87,13 +89,16 @@ class CompareController(BaseRepoControll org_ref = (org_ref_type, org_ref) other_ref = (other_ref_type, other_ref) other_repo = request.GET.get('repo', org_repo) - bundle_compare = str2bool(request.GET.get('bundle', True)) + incoming_changesets = str2bool(request.GET.get('bundle', False)) + c.fulldiff = fulldiff = request.GET.get('fulldiff') + rev_start = request.GET.get('rev_start') + rev_end = request.GET.get('rev_end') c.swap_url = h.url('compare_url', repo_name=other_repo, org_ref_type=other_ref[0], org_ref=other_ref[1], other_ref_type=org_ref[0], other_ref=org_ref[1], repo=org_repo, as_form=request.GET.get('as_form'), - bundle=bundle_compare) + bundle=incoming_changesets) c.org_repo = org_repo = Repository.get_by_repo_name(org_repo) c.other_repo = other_repo = Repository.get_by_repo_name(other_repo) @@ -102,15 +107,25 @@ class CompareController(BaseRepoControll log.error('Could not found repo %s or %s' % (org_repo, other_repo)) raise HTTPNotFound - if c.org_repo.scm_instance.alias != 'hg': - log.error('Review not available for GIT REPOS') + if c.org_repo != c.other_repo and h.is_git(c.rhodecode_repo): + log.error('compare of two remote repos not available for GIT REPOS') raise HTTPNotFound + + if c.org_repo.scm_instance.alias != c.other_repo.scm_instance.alias: + log.error('compare of two different kind of remote repos not available') + raise HTTPNotFound + partial = request.environ.get('HTTP_X_PARTIAL_XHR') self.__get_cs_or_redirect(rev=org_ref, repo=org_repo, partial=partial) self.__get_cs_or_redirect(rev=other_ref, repo=other_repo, partial=partial) + if rev_start and rev_end: + #replace our org_ref with given CS + org_ref = ('rev', rev_start) + other_ref = ('rev', rev_end) + c.cs_ranges, discovery_data = PullRequestModel().get_compare_data( - org_repo, org_ref, other_repo, other_ref + org_repo, org_ref, other_repo, other_ref, ) c.statuses = c.rhodecode_db_repo.statuses([x.raw_id for x in @@ -121,28 +136,46 @@ class CompareController(BaseRepoControll if partial: return render('compare/compare_cs.html') - if not bundle_compare and c.cs_ranges: - # case we want a simple diff without incoming changesets, just - # for review purposes. Make the diff on the forked repo, with - # revision that is common ancestor - other_ref = ('rev', c.cs_ranges[-1].parents[0].raw_id) - other_repo = org_repo - c.org_ref = org_ref[1] c.other_ref = other_ref[1] - _diff = diffs.differ(other_repo, other_ref, org_repo, org_ref, - discovery_data, bundle_compare=bundle_compare) - diff_processor = diffs.DiffProcessor(_diff, format='gitdiff') + if not incoming_changesets and c.cs_ranges and c.org_repo != c.other_repo: + # case we want a simple diff without incoming changesets, just + # for review purposes. Make the diff on the forked repo, with + # revision that is common ancestor + _org_ref = org_ref + org_ref = ('rev', getattr(c.cs_ranges[0].parents[0] + if c.cs_ranges[0].parents + else EmptyChangeset(), 'raw_id')) + log.debug('Changed org_ref from %s to %s' % (_org_ref, org_ref)) + other_repo = org_repo + + diff_limit = self.cut_off_limit if not fulldiff else None + + _diff = diffs.differ(org_repo, org_ref, other_repo, other_ref, + discovery_data, + remote_compare=incoming_changesets) + + diff_processor = diffs.DiffProcessor(_diff or '', format='gitdiff', + diff_limit=diff_limit) _parsed = diff_processor.prepare() + c.limited_diff = False + if isinstance(_parsed, LimitedDiffContainer): + c.limited_diff = True + c.files = [] c.changes = {} - + c.lines_added = 0 + c.lines_deleted = 0 for f in _parsed: + st = f['stats'] + if st[0] != 'b': + c.lines_added += st[0] + c.lines_deleted += st[1] fid = h.FID('', f['filename']) c.files.append([fid, f['operation'], f['filename'], f['stats']]) - diff = diff_processor.as_html(enable_comments=False, diff_lines=[f]) + diff = diff_processor.as_html(enable_comments=False, parsed_lines=[f]) c.changes[fid] = [f['operation'], f['filename'], diff] return render('compare/compare_diff.html') diff --git a/rhodecode/controllers/feed.py b/rhodecode/controllers/feed.py --- a/rhodecode/controllers/feed.py +++ b/rhodecode/controllers/feed.py @@ -28,12 +28,15 @@ import logging from pylons import url, response, tmpl_context as c from pylons.i18n.translation import _ +from beaker.cache import cache_region, region_invalidate from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed from rhodecode.lib import helpers as h from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator from rhodecode.lib.base import BaseRepoController -from rhodecode.lib.diffs import DiffProcessor +from rhodecode.lib.diffs import DiffProcessor, LimitedDiffContainer +from rhodecode.model.db import CacheInvalidation +from rhodecode.lib.utils2 import safe_int, str2bool log = logging.getLogger(__name__) @@ -50,7 +53,13 @@ class FeedController(BaseRepoController) self.title = self.title = _('%s %s feed') % (c.rhodecode_name, '%s') self.language = 'en-us' self.ttl = "5" - self.feed_nr = 20 + import rhodecode + CONF = rhodecode.CONFIG + self.include_diff = str2bool(CONF.get('rss_include_diff', False)) + self.feed_nr = safe_int(CONF.get('rss_items_per_page', 20)) + # we need to protect from parsing huge diffs here other way + # we can kill the server + self.feed_diff_limit = safe_int(CONF.get('rss_cut_off_limit', 32 * 1024)) def _get_title(self, cs): return "%s" % ( @@ -59,76 +68,115 @@ class FeedController(BaseRepoController) def __changes(self, cs): changes = [] - _diff = cs.diff() - # we need to protect from parsing huge diffs here other way - # we can kill the server, 32*1024 chars is a reasonable limit - HUGE_DIFF = 32 * 1024 - if len(_diff) > HUGE_DIFF: - changes = ['\n ' + _('Changeset was too big and was cut off...')] - return changes - diffprocessor = DiffProcessor(_diff) - stats = diffprocessor.prepare(inline_diff=False) - for st in stats: + diff_processor = DiffProcessor(cs.diff(), + diff_limit=self.feed_diff_limit) + _parsed = diff_processor.prepare(inline_diff=False) + limited_diff = False + if isinstance(_parsed, LimitedDiffContainer): + limited_diff = True + + for st in _parsed: st.update({'added': st['stats'][0], 'removed': st['stats'][1]}) changes.append('\n %(operation)s %(filename)s ' '(%(added)s lines added, %(removed)s lines removed)' % st) - return changes + if limited_diff: + changes = changes + ['\n ' + + _('Changeset was too big and was cut off...')] + return diff_processor, changes def __get_desc(self, cs): desc_msg = [] - desc_msg.append('%s %s %s:
' % (cs.author, _('commited on'), + desc_msg.append('%s %s %s
' % (h.person(cs.author), + _('commited on'), h.fmt_date(cs.date))) + #branches, tags, bookmarks + if cs.branch: + desc_msg.append('branch: %s
' % cs.branch) + if h.is_hg(c.rhodecode_repo): + for book in cs.bookmarks: + desc_msg.append('bookmark: %s
' % book) + for tag in cs.tags: + desc_msg.append('tag: %s
' % tag) + diff_processor, changes = self.__changes(cs) + # rev link + _url = url('changeset_home', repo_name=cs.repository.name, + revision=cs.raw_id, qualified=True) + desc_msg.append('changesest: %s' % (_url, cs.raw_id[:8])) + desc_msg.append('
')
         desc_msg.append(cs.message)
         desc_msg.append('\n')
-        desc_msg.extend(self.__changes(cs))
+        desc_msg.extend(changes)
+        if self.include_diff:
+            desc_msg.append('\n\n')
+            desc_msg.append(diff_processor.as_raw())
         desc_msg.append('
') return desc_msg def atom(self, repo_name): """Produce an atom-1.0 feed via feedgenerator module""" - feed = Atom1Feed( - title=self.title % repo_name, - link=url('summary_home', repo_name=repo_name, - qualified=True), - description=self.description % repo_name, - language=self.language, - ttl=self.ttl - ) + + @cache_region('long_term') + def _get_feed_from_cache(key): + feed = Atom1Feed( + title=self.title % repo_name, + link=url('summary_home', repo_name=repo_name, + qualified=True), + description=self.description % repo_name, + language=self.language, + ttl=self.ttl + ) - for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])): - feed.add_item(title=self._get_title(cs), - link=url('changeset_home', repo_name=repo_name, - revision=cs.raw_id, qualified=True), - author_name=cs.author, - description=''.join(self.__get_desc(cs)), - pubdate=cs.date, - ) + for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])): + feed.add_item(title=self._get_title(cs), + link=url('changeset_home', repo_name=repo_name, + revision=cs.raw_id, qualified=True), + author_name=cs.author, + description=''.join(self.__get_desc(cs)), + pubdate=cs.date, + ) - response.content_type = feed.mime_type - return feed.writeString('utf-8') + response.content_type = feed.mime_type + return feed.writeString('utf-8') + + key = repo_name + '_ATOM' + inv = CacheInvalidation.invalidate(key) + if inv is not None: + region_invalidate(_get_feed_from_cache, None, key) + CacheInvalidation.set_valid(inv.cache_key) + return _get_feed_from_cache(key) def rss(self, repo_name): """Produce an rss2 feed via feedgenerator module""" - feed = Rss201rev2Feed( - title=self.title % repo_name, - link=url('summary_home', repo_name=repo_name, - qualified=True), - description=self.description % repo_name, - language=self.language, - ttl=self.ttl - ) + + @cache_region('long_term') + def _get_feed_from_cache(key): + feed = Rss201rev2Feed( + title=self.title % repo_name, + link=url('summary_home', repo_name=repo_name, + qualified=True), + description=self.description % repo_name, + language=self.language, + ttl=self.ttl + ) - for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])): - feed.add_item(title=self._get_title(cs), - link=url('changeset_home', repo_name=repo_name, - revision=cs.raw_id, qualified=True), - author_name=cs.author, - description=''.join(self.__get_desc(cs)), - pubdate=cs.date, - ) + for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])): + feed.add_item(title=self._get_title(cs), + link=url('changeset_home', repo_name=repo_name, + revision=cs.raw_id, qualified=True), + author_name=cs.author, + description=''.join(self.__get_desc(cs)), + pubdate=cs.date, + ) - response.content_type = feed.mime_type - return feed.writeString('utf-8') + response.content_type = feed.mime_type + return feed.writeString('utf-8') + + key = repo_name + '_RSS' + inv = CacheInvalidation.invalidate(key) + if inv is not None: + region_invalidate(_get_feed_from_cache, None, key) + CacheInvalidation.set_valid(inv.cache_key) + return _get_feed_from_cache(key) diff --git a/rhodecode/controllers/files.py b/rhodecode/controllers/files.py --- a/rhodecode/controllers/files.py +++ b/rhodecode/controllers/files.py @@ -31,20 +31,22 @@ import tempfile from pylons import request, response, tmpl_context as c, url from pylons.i18n.translation import _ from pylons.controllers.util import redirect -from pylons.decorators import jsonify +from rhodecode.lib.utils import jsonify from rhodecode.lib import diffs from rhodecode.lib import helpers as h from rhodecode.lib.compat import OrderedDict -from rhodecode.lib.utils2 import convert_line_endings, detect_mode, safe_str +from rhodecode.lib.utils2 import convert_line_endings, detect_mode, safe_str,\ + str2bool from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator from rhodecode.lib.base import BaseRepoController, render from rhodecode.lib.vcs.backends.base import EmptyChangeset from rhodecode.lib.vcs.conf import settings from rhodecode.lib.vcs.exceptions import RepositoryError, \ ChangesetDoesNotExistError, EmptyRepositoryError, \ - ImproperArchiveTypeError, VCSError, NodeAlreadyExistsError + ImproperArchiveTypeError, VCSError, NodeAlreadyExistsError,\ + NodeDoesNotExistError, ChangesetError, NodeError from rhodecode.lib.vcs.nodes import FileNode from rhodecode.model.repo import RepoModel @@ -153,9 +155,16 @@ class FilesController(BaseRepoController c.file = c.changeset.get_node(f_path) if c.file.is_file(): - _hist = c.changeset.get_file_history(f_path) - c.file_history = self._get_node_history(c.changeset, f_path, - _hist) + c.load_full_history = False + file_last_cs = c.file.last_changeset + c.file_changeset = (c.changeset + if c.changeset.revision < file_last_cs.revision + else file_last_cs) + _hist = [] + c.file_history = [] + if c.load_full_history: + c.file_history, _hist = self._get_node_history(c.changeset, f_path) + c.authors = [] for a in set([x.author for x in _hist]): c.authors.append((h.email(a), h.person(a))) @@ -171,6 +180,23 @@ class FilesController(BaseRepoController return render('files/files.html') + def history(self, repo_name, revision, f_path, annotate=False): + if request.environ.get('HTTP_X_PARTIAL_XHR'): + c.changeset = self.__get_cs_or_redirect(revision, repo_name) + c.f_path = f_path + c.annotate = annotate + c.file = c.changeset.get_node(f_path) + if c.file.is_file(): + file_last_cs = c.file.last_changeset + c.file_changeset = (c.changeset + if c.changeset.revision < file_last_cs.revision + else file_last_cs) + c.file_history, _hist = self._get_node_history(c.changeset, f_path) + c.authors = [] + for a in set([x.author for x in _hist]): + c.authors.append((h.email(a), h.person(a))) + return render('files/files_history_box.html') + @LoginRequired() @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', 'repository.admin') @@ -430,21 +456,47 @@ class FilesController(BaseRepoController c.context_url = _context_url c.changes = OrderedDict() c.changes[diff2] = [] + + #special case if we want a show rev only, it's impl here + #to reduce JS and callbacks + + if request.GET.get('show_rev'): + if str2bool(request.GET.get('annotate', 'False')): + _url = url('files_annotate_home', repo_name=c.repo_name, + revision=diff1, f_path=c.f_path) + else: + _url = url('files_home', repo_name=c.repo_name, + revision=diff1, f_path=c.f_path) + + return redirect(_url) try: if diff1 not in ['', None, 'None', '0' * 12, '0' * 40]: c.changeset_1 = c.rhodecode_repo.get_changeset(diff1) - node1 = c.changeset_1.get_node(f_path) + try: + node1 = c.changeset_1.get_node(f_path) + except NodeDoesNotExistError: + c.changeset_1 = EmptyChangeset(cs=diff1, + revision=c.changeset_1.revision, + repo=c.rhodecode_repo) + node1 = FileNode(f_path, '', changeset=c.changeset_1) else: c.changeset_1 = EmptyChangeset(repo=c.rhodecode_repo) - node1 = FileNode('.', '', changeset=c.changeset_1) + node1 = FileNode(f_path, '', changeset=c.changeset_1) if diff2 not in ['', None, 'None', '0' * 12, '0' * 40]: c.changeset_2 = c.rhodecode_repo.get_changeset(diff2) - node2 = c.changeset_2.get_node(f_path) + try: + node2 = c.changeset_2.get_node(f_path) + except NodeDoesNotExistError: + c.changeset_2 = EmptyChangeset(cs=diff2, + revision=c.changeset_2.revision, + repo=c.rhodecode_repo) + node2 = FileNode(f_path, '', changeset=c.changeset_2) else: c.changeset_2 = EmptyChangeset(repo=c.rhodecode_repo) - node2 = FileNode('.', '', changeset=c.changeset_2) - except RepositoryError: + node2 = FileNode(f_path, '', changeset=c.changeset_2) + except (RepositoryError, NodeError): + log.error(traceback.format_exc()) return redirect(url('files_home', repo_name=c.repo_name, f_path=f_path)) @@ -459,7 +511,7 @@ class FilesController(BaseRepoController response.content_disposition = ( 'attachment; filename=%s' % diff_name ) - return diff.raw_diff() + return diff.as_raw() elif c.action == 'raw': _diff = diffs.get_gitdiff(node1, node2, @@ -467,7 +519,7 @@ class FilesController(BaseRepoController context=line_context) diff = diffs.DiffProcessor(_diff, format='gitdiff') response.content_type = 'text/plain' - return diff.raw_diff() + return diff.as_raw() else: fid = h.FID(diff2, node2.path) @@ -481,14 +533,32 @@ class FilesController(BaseRepoController ignore_whitespace=ign_whitespace_lcl, line_context=line_context_lcl, enable_comments=False) - - c.changes = [('', node2, diff, cs1, cs2, st,)] + op = '' + filename = node1.path + cs_changes = { + 'fid': [cs1, cs2, op, filename, diff, st] + } + c.changes = cs_changes return render('files/file_diff.html') def _get_node_history(self, cs, f_path, changesets=None): + """ + get changesets history for given node + + :param cs: changeset to calculate history + :param f_path: path for node to calculate history for + :param changesets: if passed don't calculate history and take + changesets defined in this list + """ + # calculate history based on tip + tip_cs = c.rhodecode_repo.get_changeset() if changesets is None: - changesets = cs.get_file_history(f_path) + try: + changesets = tip_cs.get_file_history(f_path) + except (NodeDoesNotExistError, ChangesetError): + #this node is not present at tip ! + changesets = cs.get_file_history(f_path) hist_l = [] changesets_group = ([], _("Changesets")) @@ -496,10 +566,10 @@ class FilesController(BaseRepoController tags_group = ([], _("Tags")) _hg = cs.repository.alias == 'hg' for chs in changesets: - _branch = '(%s)' % chs.branch if _hg else '' - n_desc = 'r%s:%s %s' % (chs.revision, chs.short_id, _branch) + #_branch = '(%s)' % chs.branch if _hg else '' + _branch = chs.branch + n_desc = 'r%s:%s (%s)' % (chs.revision, chs.short_id, _branch) changesets_group[0].append((chs.raw_id, n_desc,)) - hist_l.append(changesets_group) for name, chs in c.rhodecode_repo.branches.items(): @@ -510,7 +580,7 @@ class FilesController(BaseRepoController tags_group[0].append((chs, name),) hist_l.append(tags_group) - return hist_l + return hist_l, changesets @LoginRequired() @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', diff --git a/rhodecode/controllers/forks.py b/rhodecode/controllers/forks.py --- a/rhodecode/controllers/forks.py +++ b/rhodecode/controllers/forks.py @@ -99,8 +99,8 @@ class ForksController(BaseRepoController c.repo_last_rev) * 100) defaults = RepoModel()._get_defaults(repo_name) - # add prefix to fork - defaults['repo_name'] = 'fork-' + defaults['repo_name'] + # add suffix to fork + defaults['repo_name'] = '%s-fork' % defaults['repo_name'] return defaults @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', diff --git a/rhodecode/controllers/home.py b/rhodecode/controllers/home.py --- a/rhodecode/controllers/home.py +++ b/rhodecode/controllers/home.py @@ -26,11 +26,16 @@ import logging from pylons import tmpl_context as c, request +from pylons.i18n.translation import _ from webob.exc import HTTPBadRequest +import rhodecode +from rhodecode.lib import helpers as h +from rhodecode.lib.ext_json import json from rhodecode.lib.auth import LoginRequired from rhodecode.lib.base import BaseController, render from rhodecode.model.db import Repository +from sqlalchemy.sql.expression import func log = logging.getLogger(__name__) @@ -42,9 +47,63 @@ class HomeController(BaseController): super(HomeController, self).__before__() def index(self): - c.repos_list = self.scm_model.get_repos() c.groups = self.scm_model.get_repos_groups() c.group = None + + if c.visual.lightweight_dashboard is False: + c.repos_list = self.scm_model.get_repos() + ## lightweight version of dashboard + else: + c.repos_list = Repository.query()\ + .filter(Repository.group_id == None)\ + .order_by(func.lower(Repository.repo_name))\ + .all() + repos_data = [] + total_records = len(c.repos_list) + + _tmpl_lookup = rhodecode.CONFIG['pylons.app_globals'].mako_lookup + template = _tmpl_lookup.get_template('data_table/_dt_elements.html') + + quick_menu = lambda repo_name: (template.get_def("quick_menu") + .render(repo_name, _=_, h=h, c=c)) + repo_lnk = lambda name, rtype, private, fork_of: ( + template.get_def("repo_name") + .render(name, rtype, private, fork_of, short_name=False, + admin=False, _=_, h=h, c=c)) + last_change = lambda last_change: (template.get_def("last_change") + .render(last_change, _=_, h=h, c=c)) + rss_lnk = lambda repo_name: (template.get_def("rss") + .render(repo_name, _=_, h=h, c=c)) + atom_lnk = lambda repo_name: (template.get_def("atom") + .render(repo_name, _=_, h=h, c=c)) + + def desc(desc): + if c.visual.stylify_metatags: + return h.urlify_text(h.desc_stylize(h.truncate(desc, 60))) + else: + return h.urlify_text(h.truncate(desc, 60)) + + for repo in c.repos_list: + repos_data.append({ + "menu": quick_menu(repo.repo_name), + "raw_name": repo.repo_name.lower(), + "name": repo_lnk(repo.repo_name, repo.repo_type, + repo.private, repo.fork), + "last_change": last_change(repo.last_db_change), + "desc": desc(repo.description), + "owner": h.person(repo.user.username), + "rss": rss_lnk(repo.repo_name), + "atom": atom_lnk(repo.repo_name), + }) + + c.data = json.dumps({ + "totalRecords": total_records, + "startIndex": 0, + "sort": "name", + "dir": "asc", + "records": repos_data + }) + return render('/index.html') def repo_switcher(self): @@ -55,7 +114,7 @@ class HomeController(BaseController): simple=True) return render('/repo_switcher_list.html') else: - return HTTPBadRequest() + raise HTTPBadRequest() def branch_tag_switcher(self, repo_name): if request.is_xhr: @@ -63,4 +122,4 @@ class HomeController(BaseController): c.rhodecode_repo = c.rhodecode_db_repo.scm_instance return render('/switch_to_list.html') else: - return HTTPBadRequest() + raise HTTPBadRequest() diff --git a/rhodecode/controllers/journal.py b/rhodecode/controllers/journal.py --- a/rhodecode/controllers/journal.py +++ b/rhodecode/controllers/journal.py @@ -41,7 +41,8 @@ from rhodecode.model.db import UserLog, from rhodecode.model.meta import Session from sqlalchemy.sql.expression import func from rhodecode.model.scm import ScmModel -from rhodecode.lib.utils2 import safe_int +from rhodecode.lib.utils2 import safe_int, AttributeDict +from rhodecode.controllers.admin.admin import _journal_filter log = logging.getLogger(__name__) @@ -53,20 +54,14 @@ class JournalController(BaseController): self.language = 'en-us' self.ttl = "5" self.feed_nr = 20 + c.search_term = request.GET.get('filter') @LoginRequired() @NotAnonymous() def index(self): # Return a rendered template p = safe_int(request.params.get('page', 1), 1) - c.user = User.get(self.rhodecode_user.user_id) - all_repos = self.sa.query(Repository)\ - .filter(Repository.user_id == c.user.user_id)\ - .order_by(func.lower(Repository.repo_name)).all() - - c.user_repos = ScmModel().get_repos(all_repos) - c.following = self.sa.query(UserFollowing)\ .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\ .options(joinedload(UserFollowing.follows_repository))\ @@ -74,8 +69,10 @@ class JournalController(BaseController): journal = self._get_journal_data(c.following) - c.journal_pager = Page(journal, page=p, items_per_page=20) + def url_generator(**kw): + return url.current(filter=c.search_term, **kw) + c.journal_pager = Page(journal, page=p, items_per_page=20, url=url_generator) c.journal_day_aggreagate = self._get_daily_aggregate(c.journal_pager) c.journal_data = render('journal/journal_data.html') @@ -83,6 +80,17 @@ class JournalController(BaseController): return c.journal_data return render('journal/journal.html') + @LoginRequired() + @NotAnonymous() + def index_my_repos(self): + c.user = User.get(self.rhodecode_user.user_id) + if request.environ.get('HTTP_X_PARTIAL_XHR'): + all_repos = self.sa.query(Repository)\ + .filter(Repository.user_id == c.user.user_id)\ + .order_by(func.lower(Repository.repo_name)).all() + c.user_repos = ScmModel().get_repos(all_repos) + return render('journal/journal_page_repos.html') + @LoginRequired(api_access=True) @NotAnonymous() def journal_atom(self): @@ -111,7 +119,8 @@ class JournalController(BaseController): groups = [] for k, g in groupby(journal, lambda x: x.action_as_day): user_group = [] - for k2, g2 in groupby(list(g), lambda x: x.user.email): + #groupby username if it's a present value, else fallback to journal username + for _, g2 in groupby(list(g), lambda x: x.user.username if x.user else x.username): l = list(g2) user_group.append((l[0].user, l)) @@ -137,9 +146,15 @@ class JournalController(BaseController): if filtering_criterion is not None: journal = self.sa.query(UserLog)\ .options(joinedload(UserLog.user))\ - .options(joinedload(UserLog.repository))\ - .filter(filtering_criterion)\ - .order_by(UserLog.action_date.desc()) + .options(joinedload(UserLog.repository)) + #filter + try: + journal = _journal_filter(journal, c.search_term) + except: + # we want this to crash for now + raise + journal = journal.filter(filtering_criterion)\ + .order_by(UserLog.action_date.desc()) else: journal = [] @@ -213,9 +228,15 @@ class JournalController(BaseController): ttl=self.ttl) for entry in journal[:self.feed_nr]: + user = entry.user + if user is None: + #fix deleted users + user = AttributeDict({'short_contact': entry.username, + 'email': '', + 'full_contact': ''}) action, action_extra, ico = h.action_parser(entry, feed=True) - title = "%s - %s %s" % (entry.user.short_contact, action(), - entry.repository.repo_name) + title = "%s - %s %s" % (user.short_contact, action(), + entry.repository.repo_name) desc = action_extra() _url = None if entry.repository is not None: @@ -226,8 +247,8 @@ class JournalController(BaseController): feed.add_item(title=title, pubdate=entry.action_date, link=_url or url('', qualified=True), - author_email=entry.user.email, - author_name=entry.user.full_contact, + author_email=user.email, + author_name=user.full_contact, description=desc) response.content_type = feed.mime_type @@ -250,9 +271,15 @@ class JournalController(BaseController): ttl=self.ttl) for entry in journal[:self.feed_nr]: + user = entry.user + if user is None: + #fix deleted users + user = AttributeDict({'short_contact': entry.username, + 'email': '', + 'full_contact': ''}) action, action_extra, ico = h.action_parser(entry, feed=True) - title = "%s - %s %s" % (entry.user.short_contact, action(), - entry.repository.repo_name) + title = "%s - %s %s" % (user.short_contact, action(), + entry.repository.repo_name) desc = action_extra() _url = None if entry.repository is not None: @@ -263,8 +290,8 @@ class JournalController(BaseController): feed.add_item(title=title, pubdate=entry.action_date, link=_url or url('', qualified=True), - author_email=entry.user.email, - author_name=entry.user.full_contact, + author_email=user.email, + author_name=user.full_contact, description=desc) response.content_type = feed.mime_type diff --git a/rhodecode/controllers/pullrequests.py b/rhodecode/controllers/pullrequests.py --- a/rhodecode/controllers/pullrequests.py +++ b/rhodecode/controllers/pullrequests.py @@ -33,7 +33,6 @@ from itertools import groupby from pylons import request, response, session, tmpl_context as c, url from pylons.controllers.util import abort, redirect from pylons.i18n.translation import _ -from pylons.decorators import jsonify from rhodecode.lib.compat import json from rhodecode.lib.base import BaseRepoController, render @@ -41,7 +40,10 @@ from rhodecode.lib.auth import LoginRequ NotAnonymous from rhodecode.lib import helpers as h from rhodecode.lib import diffs -from rhodecode.lib.utils import action_logger +from rhodecode.lib.utils import action_logger, jsonify +from rhodecode.lib.vcs.exceptions import EmptyRepositoryError +from rhodecode.lib.vcs.backends.base import EmptyChangeset +from rhodecode.lib.diffs import LimitedDiffContainer from rhodecode.model.db import User, PullRequest, ChangesetStatus,\ ChangesetComment from rhodecode.model.pull_request import PullRequestModel @@ -50,7 +52,6 @@ from rhodecode.model.repo import RepoMod from rhodecode.model.comment import ChangesetCommentsModel from rhodecode.model.changeset_status import ChangesetStatusModel from rhodecode.model.forms import PullRequestForm -from rhodecode.lib.vcs.exceptions import EmptyRepositoryError log = logging.getLogger(__name__) @@ -149,8 +150,8 @@ class PullrequestsController(BaseRepoCon self._get_repo_refs(fork.scm_instance), class_='refs') } - #add parents of this fork also - if org_repo.parent: + #add parents of this fork also, but only if it's not empty + if org_repo.parent and org_repo.parent.scm_instance.revisions: c.default_pull_request = org_repo.parent.repo_name c.default_pull_request_rev = self._get_default_rev(org_repo.parent) c.default_revs = self._get_repo_refs(org_repo.parent.scm_instance) @@ -194,6 +195,17 @@ class PullrequestsController(BaseRepoCon revisions = _form['revisions'] reviewers = _form['review_members'] + # if we have cherry picked pull request we don't care what is in + # org_ref/other_ref + rev_start = request.POST.get('rev_start') + rev_end = request.POST.get('rev_end') + + if rev_start and rev_end: + # this is swapped to simulate that rev_end is a revision from + # parent of the fork + org_ref = 'rev:%s:%s' % (rev_end, rev_end) + other_ref = 'rev:%s:%s' % (rev_start, rev_start) + title = _form['pullrequest_title'] description = _form['pullrequest_desc'] @@ -227,7 +239,7 @@ class PullrequestsController(BaseRepoCon request.POST.get('reviewers_ids', '').split(','))) PullRequestModel().update_reviewers(pull_request_id, reviewers_ids) - Session.commit() + Session().commit() return True raise HTTPForbidden() @@ -241,7 +253,7 @@ class PullrequestsController(BaseRepoCon Session().commit() h.flash(_('Successfully deleted pull request'), category='success') - return redirect(url('admin_settings_my_account')) + return redirect(url('admin_settings_my_account', anchor='pullrequests')) raise HTTPForbidden() def _load_compare_data(self, pull_request, enable_comments=True): @@ -251,13 +263,15 @@ class PullrequestsController(BaseRepoCon :param pull_request: :type pull_request: """ + rev_start = request.GET.get('rev_start') + rev_end = request.GET.get('rev_end') org_repo = pull_request.org_repo (org_ref_type, org_ref_name, org_ref_rev) = pull_request.org_ref.split(':') - other_repo = pull_request.other_repo + other_repo = org_repo (other_ref_type, other_ref_name, other_ref_rev) = pull_request.other_ref.split(':') @@ -270,36 +284,48 @@ class PullrequestsController(BaseRepoCon c.org_repo = org_repo c.other_repo = other_repo - c.cs_ranges, discovery_data = PullRequestModel().get_compare_data( - org_repo, org_ref, other_repo, other_ref - ) - if c.cs_ranges: - # case we want a simple diff without incoming changesets, just - # for review purposes. Make the diff on the forked repo, with - # revision that is common ancestor - other_ref = ('rev', c.cs_ranges[-1].parents[0].raw_id) - other_repo = org_repo + c.fulldiff = fulldiff = request.GET.get('fulldiff') + + c.cs_ranges = [org_repo.get_changeset(x) for x in pull_request.revisions] + + other_ref = ('rev', getattr(c.cs_ranges[0].parents[0] + if c.cs_ranges[0].parents + else EmptyChangeset(), 'raw_id')) c.statuses = org_repo.statuses([x.raw_id for x in c.cs_ranges]) + c.target_repo = c.repo_name # defines that we need hidden inputs with changesets c.as_form = request.GET.get('as_form', False) c.org_ref = org_ref[1] c.other_ref = other_ref[1] - # diff needs to have swapped org with other to generate proper diff - _diff = diffs.differ(other_repo, other_ref, org_repo, org_ref, - discovery_data) - diff_processor = diffs.DiffProcessor(_diff, format='gitdiff') + + diff_limit = self.cut_off_limit if not fulldiff else None + + #we swap org/other ref since we run a simple diff on one repo + _diff = diffs.differ(org_repo, other_ref, other_repo, org_ref) + + diff_processor = diffs.DiffProcessor(_diff or '', format='gitdiff', + diff_limit=diff_limit) _parsed = diff_processor.prepare() + c.limited_diff = False + if isinstance(_parsed, LimitedDiffContainer): + c.limited_diff = True + c.files = [] c.changes = {} - + c.lines_added = 0 + c.lines_deleted = 0 for f in _parsed: + st = f['stats'] + if st[0] != 'b': + c.lines_added += st[0] + c.lines_deleted += st[1] fid = h.FID('', f['filename']) c.files.append([fid, f['operation'], f['filename'], f['stats']]) diff = diff_processor.as_html(enable_comments=enable_comments, - diff_lines=[f]) + parsed_lines=[f]) c.changes[fid] = [f['operation'], f['filename'], diff] def show(self, repo_name, pull_request_id): diff --git a/rhodecode/controllers/search.py b/rhodecode/controllers/search.py --- a/rhodecode/controllers/search.py +++ b/rhodecode/controllers/search.py @@ -24,7 +24,7 @@ # along with this program. If not, see . import logging import traceback - +import urllib from pylons.i18n.translation import _ from pylons import request, config, tmpl_context as c @@ -42,6 +42,7 @@ from whoosh.query import Phrase, Wildcar from rhodecode.model.repo import RepoModel from rhodecode.lib.utils2 import safe_str, safe_int + log = logging.getLogger(__name__) @@ -116,8 +117,9 @@ class SearchController(BaseController): ) def url_generator(**kw): + q = urllib.quote(safe_str(c.cur_query)) return update_params("?q=%s&type=%s" \ - % (safe_str(c.cur_query), safe_str(c.cur_type)), **kw) + % (q, safe_str(c.cur_type)), **kw) repo_location = RepoModel().repos_path c.formated_results = Page( WhooshResultWrapper(search_type, searcher, matcher, diff --git a/rhodecode/controllers/settings.py b/rhodecode/controllers/settings.py --- a/rhodecode/controllers/settings.py +++ b/rhodecode/controllers/settings.py @@ -65,23 +65,38 @@ class SettingsController(BaseRepoControl choices, c.landing_revs = ScmModel().get_repo_landing_revs() c.landing_revs_choices = choices - @HasRepoPermissionAllDecorator('repository.admin') - def index(self, repo_name): - repo_model = RepoModel() - c.repo_info = repo = repo_model.get_by_repo_name(repo_name) - if not repo: + def __load_data(self, repo_name=None): + """ + Load defaults settings for edit, and update + + :param repo_name: + """ + self.__load_defaults() + + c.repo_info = db_repo = Repository.get_by_repo_name(repo_name) + repo = db_repo.scm_instance + + if c.repo_info is None: h.flash(_('%s repository is not mapped to db perhaps' - ' it was created or renamed from the file system' + ' it was created or renamed from the filesystem' ' please run the application again' ' in order to rescan repositories') % repo_name, category='error') return redirect(url('home')) - self.__load_defaults() + ##override defaults for exact repo info here git/hg etc + choices, c.landing_revs = ScmModel().get_repo_landing_revs(c.repo_info) + c.landing_revs_choices = choices defaults = RepoModel()._get_defaults(repo_name) + return defaults + + @HasRepoPermissionAllDecorator('repository.admin') + def index(self, repo_name): + defaults = self.__load_data(repo_name) + return htmlfill.render( render('settings/repo_settings.html'), defaults=defaults, @@ -91,10 +106,12 @@ class SettingsController(BaseRepoControl @HasRepoPermissionAllDecorator('repository.admin') def update(self, repo_name): + self.__load_defaults() repo_model = RepoModel() changed_name = repo_name - - self.__load_defaults() + #override the choices with extracted revisions ! + choices, c.landing_revs = ScmModel().get_repo_landing_revs(repo_name) + c.landing_revs_choices = choices _form = RepoSettingsForm(edit=True, old_data={'repo_name': repo_name}, @@ -102,8 +119,7 @@ class SettingsController(BaseRepoControl landing_revs=c.landing_revs_choices)() try: form_result = _form.to_python(dict(request.POST)) - - repo_model.update(repo_name, form_result) + repo_model.update(repo_name, **form_result) invalidate_cache('get_repo_cached_%s' % repo_name) h.flash(_('Repository %s updated successfully') % repo_name, category='success') @@ -112,15 +128,15 @@ class SettingsController(BaseRepoControl changed_name, self.ip_addr, self.sa) Session().commit() except formencode.Invalid, errors: - c.repo_info = repo_model.get_by_repo_name(repo_name) - c.users_array = repo_model.get_users_js() - errors.value.update({'user': c.repo_info.user.username}) + defaults = self.__load_data(repo_name) + defaults.update(errors.value) return htmlfill.render( render('settings/repo_settings.html'), defaults=errors.value, errors=errors.error_dict or {}, prefix_error=False, encoding="UTF-8") + except Exception: log.error(traceback.format_exc()) h.flash(_('error occurred during update of repository %s') \ @@ -160,7 +176,7 @@ class SettingsController(BaseRepoControl h.flash(_('An error occurred during deletion of %s') % repo_name, category='error') - return redirect(url('home')) + return redirect(url('admin_settings_my_account', anchor='my')) @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin') def toggle_locking(self, repo_name): diff --git a/rhodecode/controllers/shortlog.py b/rhodecode/controllers/shortlog.py --- a/rhodecode/controllers/shortlog.py +++ b/rhodecode/controllers/shortlog.py @@ -26,12 +26,16 @@ import logging from pylons import tmpl_context as c, request, url +from pylons.i18n.translation import _ +from rhodecode.lib import helpers as h from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator from rhodecode.lib.base import BaseRepoController, render from rhodecode.lib.helpers import RepoPage from pylons.controllers.util import redirect from rhodecode.lib.utils2 import safe_int +from rhodecode.lib.vcs.exceptions import NodeDoesNotExistError, ChangesetError,\ + RepositoryError log = logging.getLogger(__name__) @@ -44,19 +48,56 @@ class ShortlogController(BaseRepoControl def __before__(self): super(ShortlogController, self).__before__() - def index(self, repo_name): + def __get_cs_or_redirect(self, rev, repo_name, redirect_after=True): + """ + Safe way to get changeset if error occur it redirects to tip with + proper message + + :param rev: revision to fetch + :param repo_name: repo name to redirect after + """ + + try: + return c.rhodecode_repo.get_changeset(rev) + except RepositoryError, e: + h.flash(str(e), category='warning') + redirect(h.url('shortlog_home', repo_name=repo_name)) + + def index(self, repo_name, revision=None, f_path=None): p = safe_int(request.params.get('page', 1), 1) size = safe_int(request.params.get('size', 20), 20) + collection = c.rhodecode_repo + c.file_history = f_path def url_generator(**kw): + if f_path: + return url('shortlog_file_home', repo_name=repo_name, + revision=revision, f_path=f_path, size=size, **kw) return url('shortlog_home', repo_name=repo_name, size=size, **kw) - c.repo_changesets = RepoPage(c.rhodecode_repo, page=p, - items_per_page=size, url=url_generator) + if f_path: + log.debug('generating shortlog for path %s' % f_path) + # get the history for the file ! + tip_cs = c.rhodecode_repo.get_changeset() + try: + collection = tip_cs.get_file_history(f_path) + except (NodeDoesNotExistError, ChangesetError): + #this node is not present at tip ! + try: + cs = self.__get_cs_or_redirect(revision, repo_name) + collection = cs.get_file_history(f_path) + except RepositoryError, e: + h.flash(str(e), category='warning') + redirect(h.url('shortlog_home', repo_name=repo_name)) + collection = list(reversed(collection)) + + c.repo_changesets = RepoPage(collection, page=p, + items_per_page=size, url=url_generator) page_revisions = [x.raw_id for x in list(c.repo_changesets)] c.statuses = c.rhodecode_db_repo.statuses(page_revisions) if not c.repo_changesets: + h.flash(_('There are no changesets yet'), category='warning') return redirect(url('summary_home', repo_name=repo_name)) c.shortlog_data = render('shortlog/shortlog_data.html') diff --git a/rhodecode/controllers/summary.py b/rhodecode/controllers/summary.py --- a/rhodecode/controllers/summary.py +++ b/rhodecode/controllers/summary.py @@ -97,7 +97,7 @@ class SummaryController(BaseRepoControll uri_tmpl = uri_tmpl.replace('{', '%(').replace('}', ')s') decoded_path = safe_unicode(urllib.unquote(parsed_url.path)) uri_dict = { - 'user': username, + 'user': urllib.quote(username), 'pass': password, 'scheme': parsed_url.scheme, 'netloc': parsed_url.netloc, diff --git a/rhodecode/i18n/en/LC_MESSAGES/rhodecode.mo b/rhodecode/i18n/en/LC_MESSAGES/rhodecode.mo index d4711db7e3a2cb56fcfcb621796de1ef9f4258ac..8cbf7e8c5911a564a3110e73d3892a447ef35477 GIT binary patch literal 55780 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

AJH?-d%K8=}@>q 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 TeIhgUiOkd|GXH=7MCShi)BeUN diff --git a/rhodecode/i18n/en/LC_MESSAGES/rhodecode.po b/rhodecode/i18n/en/LC_MESSAGES/rhodecode.po --- a/rhodecode/i18n/en/LC_MESSAGES/rhodecode.po +++ b/rhodecode/i18n/en/LC_MESSAGES/rhodecode.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: rhodecode 0.1\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2012-09-02 20:30+0200\n" +"POT-Creation-Date: 2012-12-03 03:21+0100\n" "PO-Revision-Date: 2011-02-25 19:13+0100\n" "Last-Translator: FULL NAME \n" "Language-Team: en \n" @@ -17,35 +17,38 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 0.9.6\n" -#: rhodecode/controllers/changelog.py:94 +#: rhodecode/controllers/changelog.py:95 msgid "All Branches" msgstr "" -#: rhodecode/controllers/changeset.py:83 +#: rhodecode/controllers/changeset.py:84 msgid "show white space" msgstr "" -#: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97 +#: rhodecode/controllers/changeset.py:91 rhodecode/controllers/changeset.py:98 msgid "ignore white space" msgstr "" -#: rhodecode/controllers/changeset.py:157 +#: rhodecode/controllers/changeset.py:164 #, python-format msgid "%s line context" msgstr "" -#: rhodecode/controllers/changeset.py:333 -#: rhodecode/controllers/changeset.py:348 rhodecode/lib/diffs.py:70 -msgid "binary file" -msgstr "" - -#: rhodecode/controllers/changeset.py:408 +#: rhodecode/controllers/changeset.py:315 +#: rhodecode/controllers/pullrequests.py:411 +#, python-format +msgid "Status change -> %s" +msgstr "" + +#: rhodecode/controllers/changeset.py:346 msgid "" "Changing status on a changeset associated witha closed pull request is " "not allowed" msgstr "" -#: rhodecode/controllers/compare.py:69 +#: rhodecode/controllers/compare.py:75 +#: rhodecode/controllers/pullrequests.py:117 +#: rhodecode/controllers/shortlog.py:100 msgid "There are no changesets yet" msgstr "" @@ -75,99 +78,109 @@ msgid "" "fulfilling the request." msgstr "" -#: rhodecode/controllers/feed.py:49 +#: rhodecode/controllers/feed.py:52 #, python-format msgid "Changes on %s repository" msgstr "" -#: rhodecode/controllers/feed.py:50 +#: rhodecode/controllers/feed.py:53 #, python-format msgid "%s %s feed" msgstr "" -#: rhodecode/controllers/feed.py:75 +#: rhodecode/controllers/feed.py:86 +#: rhodecode/templates/changeset/changeset.html:126 +#: rhodecode/templates/changeset/changeset.html:138 +#: rhodecode/templates/compare/compare_diff.html:62 +#: rhodecode/templates/compare/compare_diff.html:73 +#: rhodecode/templates/pullrequests/pullrequest_show.html:94 +#: rhodecode/templates/pullrequests/pullrequest_show.html:153 +msgid "Changeset was too big and was cut off..." +msgstr "" + +#: rhodecode/controllers/feed.py:92 msgid "commited on" msgstr "" -#: rhodecode/controllers/files.py:84 +#: rhodecode/controllers/files.py:86 msgid "click here to add new file" msgstr "" -#: rhodecode/controllers/files.py:85 +#: rhodecode/controllers/files.py:87 #, python-format msgid "There are no files yet %s" msgstr "" -#: rhodecode/controllers/files.py:239 rhodecode/controllers/files.py:299 +#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325 #, python-format msgid "This repository is has been locked by %s on %s" msgstr "" -#: rhodecode/controllers/files.py:266 +#: rhodecode/controllers/files.py:292 #, python-format msgid "Edited %s via RhodeCode" msgstr "" -#: rhodecode/controllers/files.py:271 +#: rhodecode/controllers/files.py:297 msgid "No changes" msgstr "" -#: rhodecode/controllers/files.py:282 rhodecode/controllers/files.py:346 +#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372 #, python-format msgid "Successfully committed to %s" msgstr "" -#: rhodecode/controllers/files.py:287 rhodecode/controllers/files.py:352 +#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378 msgid "Error occurred during commit" msgstr "" -#: rhodecode/controllers/files.py:318 +#: rhodecode/controllers/files.py:344 #, python-format msgid "Added %s via RhodeCode" msgstr "" -#: rhodecode/controllers/files.py:332 +#: rhodecode/controllers/files.py:358 msgid "No content" msgstr "" -#: rhodecode/controllers/files.py:336 +#: rhodecode/controllers/files.py:362 msgid "No filename" msgstr "" -#: rhodecode/controllers/files.py:378 +#: rhodecode/controllers/files.py:404 msgid "downloads disabled" msgstr "" -#: rhodecode/controllers/files.py:389 +#: rhodecode/controllers/files.py:415 #, python-format msgid "Unknown revision %s" msgstr "" -#: rhodecode/controllers/files.py:391 +#: rhodecode/controllers/files.py:417 msgid "Empty repository" msgstr "" -#: rhodecode/controllers/files.py:393 +#: rhodecode/controllers/files.py:419 msgid "Unknown archive type" msgstr "" -#: rhodecode/controllers/files.py:494 +#: rhodecode/controllers/files.py:564 #: rhodecode/templates/changeset/changeset_range.html:13 #: rhodecode/templates/changeset/changeset_range.html:31 msgid "Changesets" msgstr "" -#: rhodecode/controllers/files.py:495 rhodecode/controllers/pullrequests.py:72 -#: rhodecode/controllers/summary.py:232 rhodecode/model/scm.py:543 +#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:76 +#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550 msgid "Branches" msgstr "" -#: rhodecode/controllers/files.py:496 rhodecode/controllers/pullrequests.py:76 -#: rhodecode/controllers/summary.py:233 rhodecode/model/scm.py:554 +#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:80 +#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561 msgid "Tags" msgstr "" -#: rhodecode/controllers/forks.py:73 rhodecode/controllers/admin/repos.py:90 +#: rhodecode/controllers/forks.py:74 rhodecode/controllers/admin/repos.py:92 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -175,7 +188,7 @@ msgid "" "repositories" msgstr "" -#: rhodecode/controllers/forks.py:133 rhodecode/controllers/settings.py:72 +#: rhodecode/controllers/forks.py:134 rhodecode/controllers/settings.py:73 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -183,22 +196,22 @@ msgid "" "repositories" msgstr "" -#: rhodecode/controllers/forks.py:167 +#: rhodecode/controllers/forks.py:168 #, python-format msgid "forked %s repository as %s" msgstr "" -#: rhodecode/controllers/forks.py:181 +#: rhodecode/controllers/forks.py:182 #, python-format msgid "An error occurred during repository forking %s" msgstr "" -#: rhodecode/controllers/journal.py:202 rhodecode/controllers/journal.py:239 -msgid "public journal" -msgstr "" - #: rhodecode/controllers/journal.py:206 rhodecode/controllers/journal.py:243 -#: rhodecode/templates/base/base.html:220 +msgid "public journal" +msgstr "" + +#: rhodecode/controllers/journal.py:210 rhodecode/controllers/journal.py:247 +#: rhodecode/templates/base/base.html:232 msgid "journal" msgstr "" @@ -216,56 +229,56 @@ msgid "" "email" msgstr "" -#: rhodecode/controllers/pullrequests.py:74 rhodecode/model/scm.py:549 +#: rhodecode/controllers/pullrequests.py:78 rhodecode/model/scm.py:556 msgid "Bookmarks" msgstr "" -#: rhodecode/controllers/pullrequests.py:158 +#: rhodecode/controllers/pullrequests.py:186 msgid "Pull request requires a title with min. 3 chars" msgstr "" -#: rhodecode/controllers/pullrequests.py:160 +#: rhodecode/controllers/pullrequests.py:188 msgid "error during creation of pull request" msgstr "" -#: rhodecode/controllers/pullrequests.py:181 +#: rhodecode/controllers/pullrequests.py:220 msgid "Successfully opened new pull request" msgstr "" -#: rhodecode/controllers/pullrequests.py:184 +#: rhodecode/controllers/pullrequests.py:223 msgid "Error occurred during sending pull request" msgstr "" -#: rhodecode/controllers/pullrequests.py:217 +#: rhodecode/controllers/pullrequests.py:256 msgid "Successfully deleted pull request" msgstr "" -#: rhodecode/controllers/search.py:131 +#: rhodecode/controllers/search.py:134 msgid "Invalid search query. Try quoting it." msgstr "" -#: rhodecode/controllers/search.py:136 +#: rhodecode/controllers/search.py:139 msgid "There is no index to search in. Please run whoosh indexer" msgstr "" -#: rhodecode/controllers/search.py:140 +#: rhodecode/controllers/search.py:143 msgid "An error occurred during this search operation" msgstr "" -#: rhodecode/controllers/settings.py:107 -#: rhodecode/controllers/admin/repos.py:266 +#: rhodecode/controllers/settings.py:108 +#: rhodecode/controllers/admin/repos.py:268 #, python-format msgid "Repository %s updated successfully" msgstr "" -#: rhodecode/controllers/settings.py:125 -#: rhodecode/controllers/admin/repos.py:284 +#: rhodecode/controllers/settings.py:126 +#: rhodecode/controllers/admin/repos.py:286 #, python-format msgid "error occurred during update of repository %s" msgstr "" -#: rhodecode/controllers/settings.py:143 -#: rhodecode/controllers/admin/repos.py:302 +#: rhodecode/controllers/settings.py:144 +#: rhodecode/controllers/admin/repos.py:304 #, python-format msgid "" "%s repository is not mapped to db perhaps it was moved or renamed from " @@ -273,28 +286,54 @@ msgid "" "repositories" msgstr "" -#: rhodecode/controllers/settings.py:155 -#: rhodecode/controllers/admin/repos.py:314 +#: rhodecode/controllers/settings.py:156 +#: rhodecode/controllers/admin/repos.py:316 #, python-format msgid "deleted repository %s" msgstr "" -#: rhodecode/controllers/settings.py:159 -#: rhodecode/controllers/admin/repos.py:324 -#: rhodecode/controllers/admin/repos.py:330 +#: rhodecode/controllers/settings.py:160 +#: rhodecode/controllers/admin/repos.py:326 +#: rhodecode/controllers/admin/repos.py:332 #, python-format msgid "An error occurred during deletion of %s" msgstr "" -#: rhodecode/controllers/summary.py:138 +#: rhodecode/controllers/settings.py:179 +msgid "unlocked" +msgstr "" + +#: rhodecode/controllers/settings.py:182 +msgid "locked" +msgstr "" + +#: rhodecode/controllers/settings.py:184 +#, python-format +msgid "Repository has been %s" +msgstr "" + +#: rhodecode/controllers/settings.py:188 +#: rhodecode/controllers/admin/repos.py:424 +msgid "An error occurred during unlocking" +msgstr "" + +#: rhodecode/controllers/summary.py:140 msgid "No data loaded yet" msgstr "" -#: rhodecode/controllers/summary.py:142 -#: rhodecode/templates/summary/summary.html:148 +#: rhodecode/controllers/summary.py:144 +#: rhodecode/templates/summary/summary.html:157 msgid "Statistics are disabled for this repository" msgstr "" +#: rhodecode/controllers/admin/defaults.py:96 +msgid "Default settings updated successfully" +msgstr "" + +#: rhodecode/controllers/admin/defaults.py:110 +msgid "error occurred during update of defaults" +msgstr "" + #: rhodecode/controllers/admin/ldap_settings.py:50 msgid "BASE" msgstr "" @@ -352,18 +391,23 @@ msgid "error occurred during update of l msgstr "" #: rhodecode/controllers/admin/permissions.py:59 +#: rhodecode/controllers/admin/permissions.py:63 msgid "None" msgstr "" #: rhodecode/controllers/admin/permissions.py:60 +#: rhodecode/controllers/admin/permissions.py:64 msgid "Read" msgstr "" #: rhodecode/controllers/admin/permissions.py:61 +#: rhodecode/controllers/admin/permissions.py:65 msgid "Write" msgstr "" #: rhodecode/controllers/admin/permissions.py:62 +#: rhodecode/controllers/admin/permissions.py:66 +#: rhodecode/templates/admin/defaults/defaults.html:9 #: rhodecode/templates/admin/ldap/ldap.html:9 #: rhodecode/templates/admin/permissions/permissions.html:9 #: rhodecode/templates/admin/repos/repo_add.html:9 @@ -376,229 +420,225 @@ msgstr "" #: rhodecode/templates/admin/settings/settings.html:9 #: rhodecode/templates/admin/users/user_add.html:8 #: rhodecode/templates/admin/users/user_edit.html:9 -#: rhodecode/templates/admin/users/user_edit.html:122 +#: rhodecode/templates/admin/users/user_edit.html:126 #: rhodecode/templates/admin/users/users.html:9 #: rhodecode/templates/admin/users_groups/users_group_add.html:8 #: rhodecode/templates/admin/users_groups/users_group_edit.html:9 #: rhodecode/templates/admin/users_groups/users_groups.html:9 #: rhodecode/templates/base/base.html:197 -#: rhodecode/templates/base/base.html:337 -#: rhodecode/templates/base/base.html:339 -#: rhodecode/templates/base/base.html:341 +#: rhodecode/templates/base/base.html:350 +#: rhodecode/templates/base/base.html:352 +#: rhodecode/templates/base/base.html:354 msgid "Admin" msgstr "" -#: rhodecode/controllers/admin/permissions.py:65 -msgid "disabled" -msgstr "" - -#: rhodecode/controllers/admin/permissions.py:67 -msgid "allowed with manual account activation" -msgstr "" - #: rhodecode/controllers/admin/permissions.py:69 -msgid "allowed with automatic account activation" +msgid "disabled" msgstr "" #: rhodecode/controllers/admin/permissions.py:71 -#: rhodecode/controllers/admin/permissions.py:74 +msgid "allowed with manual account activation" +msgstr "" + +#: rhodecode/controllers/admin/permissions.py:73 +msgid "allowed with automatic account activation" +msgstr "" + +#: rhodecode/controllers/admin/permissions.py:75 +#: rhodecode/controllers/admin/permissions.py:78 msgid "Disabled" msgstr "" -#: rhodecode/controllers/admin/permissions.py:72 -#: rhodecode/controllers/admin/permissions.py:75 +#: rhodecode/controllers/admin/permissions.py:76 +#: rhodecode/controllers/admin/permissions.py:79 msgid "Enabled" msgstr "" -#: rhodecode/controllers/admin/permissions.py:116 +#: rhodecode/controllers/admin/permissions.py:122 msgid "Default permissions updated successfully" msgstr "" -#: rhodecode/controllers/admin/permissions.py:130 +#: rhodecode/controllers/admin/permissions.py:136 msgid "error occurred during update of permissions" msgstr "" -#: rhodecode/controllers/admin/repos.py:123 +#: rhodecode/controllers/admin/repos.py:125 msgid "--REMOVE FORK--" msgstr "" -#: rhodecode/controllers/admin/repos.py:192 +#: rhodecode/controllers/admin/repos.py:194 #, python-format msgid "created repository %s from %s" msgstr "" -#: rhodecode/controllers/admin/repos.py:196 +#: rhodecode/controllers/admin/repos.py:198 #, python-format msgid "created repository %s" msgstr "" -#: rhodecode/controllers/admin/repos.py:227 +#: rhodecode/controllers/admin/repos.py:229 #, python-format msgid "error occurred during creation of repository %s" msgstr "" -#: rhodecode/controllers/admin/repos.py:319 +#: rhodecode/controllers/admin/repos.py:321 #, python-format msgid "Cannot delete %s it still contains attached forks" msgstr "" -#: rhodecode/controllers/admin/repos.py:348 +#: rhodecode/controllers/admin/repos.py:350 msgid "An error occurred during deletion of repository user" msgstr "" -#: rhodecode/controllers/admin/repos.py:367 +#: rhodecode/controllers/admin/repos.py:369 msgid "An error occurred during deletion of repository users groups" msgstr "" -#: rhodecode/controllers/admin/repos.py:385 +#: rhodecode/controllers/admin/repos.py:387 msgid "An error occurred during deletion of repository stats" msgstr "" -#: rhodecode/controllers/admin/repos.py:402 +#: rhodecode/controllers/admin/repos.py:404 msgid "An error occurred during cache invalidation" msgstr "" -#: rhodecode/controllers/admin/repos.py:422 -msgid "An error occurred during unlocking" -msgstr "" - -#: rhodecode/controllers/admin/repos.py:442 +#: rhodecode/controllers/admin/repos.py:444 msgid "Updated repository visibility in public journal" msgstr "" -#: rhodecode/controllers/admin/repos.py:446 +#: rhodecode/controllers/admin/repos.py:448 msgid "An error occurred during setting this repository in public journal" msgstr "" -#: rhodecode/controllers/admin/repos.py:451 rhodecode/model/validators.py:299 +#: rhodecode/controllers/admin/repos.py:453 rhodecode/model/validators.py:300 msgid "Token mismatch" msgstr "" -#: rhodecode/controllers/admin/repos.py:464 -msgid "Pulled from remote location" -msgstr "" - #: rhodecode/controllers/admin/repos.py:466 +msgid "Pulled from remote location" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:468 msgid "An error occurred during pull from remote location" msgstr "" -#: rhodecode/controllers/admin/repos.py:482 -msgid "Nothing" -msgstr "" - #: rhodecode/controllers/admin/repos.py:484 +msgid "Nothing" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:486 #, python-format msgid "Marked repo %s as fork of %s" msgstr "" -#: rhodecode/controllers/admin/repos.py:488 +#: rhodecode/controllers/admin/repos.py:490 msgid "An error occurred during this operation" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:116 +#: rhodecode/controllers/admin/repos_groups.py:120 #, python-format msgid "created repos group %s" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:129 +#: rhodecode/controllers/admin/repos_groups.py:133 #, python-format msgid "error occurred during creation of repos group %s" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:163 +#: rhodecode/controllers/admin/repos_groups.py:167 #, python-format msgid "updated repos group %s" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:176 +#: rhodecode/controllers/admin/repos_groups.py:180 #, python-format msgid "error occurred during update of repos group %s" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:194 +#: rhodecode/controllers/admin/repos_groups.py:198 #, python-format msgid "This group contains %s repositores and cannot be deleted" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:202 +#: rhodecode/controllers/admin/repos_groups.py:206 #, python-format msgid "removed repos group %s" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:208 +#: rhodecode/controllers/admin/repos_groups.py:212 msgid "Cannot delete this group it still contains subgroups" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:213 -#: rhodecode/controllers/admin/repos_groups.py:218 +#: rhodecode/controllers/admin/repos_groups.py:217 +#: rhodecode/controllers/admin/repos_groups.py:222 #, python-format msgid "error occurred during deletion of repos group %s" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:238 +#: rhodecode/controllers/admin/repos_groups.py:243 msgid "An error occurred during deletion of group user" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:258 +#: rhodecode/controllers/admin/repos_groups.py:264 msgid "An error occurred during deletion of group users groups" msgstr "" -#: rhodecode/controllers/admin/settings.py:121 +#: rhodecode/controllers/admin/settings.py:123 #, python-format msgid "Repositories successfully rescanned added: %s,removed: %s" msgstr "" -#: rhodecode/controllers/admin/settings.py:129 +#: rhodecode/controllers/admin/settings.py:131 msgid "Whoosh reindex task scheduled" msgstr "" -#: rhodecode/controllers/admin/settings.py:160 +#: rhodecode/controllers/admin/settings.py:162 msgid "Updated application settings" msgstr "" -#: rhodecode/controllers/admin/settings.py:164 -#: rhodecode/controllers/admin/settings.py:275 +#: rhodecode/controllers/admin/settings.py:166 +#: rhodecode/controllers/admin/settings.py:299 msgid "error occurred during updating application settings" msgstr "" -#: rhodecode/controllers/admin/settings.py:200 +#: rhodecode/controllers/admin/settings.py:207 msgid "Updated visualisation settings" msgstr "" -#: rhodecode/controllers/admin/settings.py:205 +#: rhodecode/controllers/admin/settings.py:212 msgid "error occurred during updating visualisation settings" msgstr "" -#: rhodecode/controllers/admin/settings.py:271 +#: rhodecode/controllers/admin/settings.py:295 msgid "Updated VCS settings" msgstr "" -#: rhodecode/controllers/admin/settings.py:285 +#: rhodecode/controllers/admin/settings.py:309 msgid "Added new hook" msgstr "" -#: rhodecode/controllers/admin/settings.py:297 +#: rhodecode/controllers/admin/settings.py:321 msgid "Updated hooks" msgstr "" -#: rhodecode/controllers/admin/settings.py:301 +#: rhodecode/controllers/admin/settings.py:325 msgid "error occurred during hook creation" msgstr "" -#: rhodecode/controllers/admin/settings.py:320 +#: rhodecode/controllers/admin/settings.py:344 msgid "Email task created" msgstr "" -#: rhodecode/controllers/admin/settings.py:375 +#: rhodecode/controllers/admin/settings.py:399 msgid "You can't edit this user since it's crucial for entire application" msgstr "" -#: rhodecode/controllers/admin/settings.py:406 +#: rhodecode/controllers/admin/settings.py:430 msgid "Your account was updated successfully" msgstr "" -#: rhodecode/controllers/admin/settings.py:421 -#: rhodecode/controllers/admin/users.py:191 +#: rhodecode/controllers/admin/settings.py:445 +#: rhodecode/controllers/admin/users.py:196 #, python-format msgid "error occurred during update of user %s" msgstr "" @@ -613,97 +653,97 @@ msgstr "" msgid "error occurred during creation of user %s" msgstr "" -#: rhodecode/controllers/admin/users.py:171 +#: rhodecode/controllers/admin/users.py:176 msgid "User updated successfully" msgstr "" -#: rhodecode/controllers/admin/users.py:207 -msgid "successfully deleted user" -msgstr "" - #: rhodecode/controllers/admin/users.py:212 +msgid "successfully deleted user" +msgstr "" + +#: rhodecode/controllers/admin/users.py:217 msgid "An error occurred during deletion of user" msgstr "" -#: rhodecode/controllers/admin/users.py:226 +#: rhodecode/controllers/admin/users.py:231 msgid "You can't edit this user" msgstr "" -#: rhodecode/controllers/admin/users.py:266 +#: rhodecode/controllers/admin/users.py:272 msgid "Granted 'repository create' permission to user" msgstr "" -#: rhodecode/controllers/admin/users.py:271 -msgid "Revoked 'repository create' permission to user" -msgstr "" - #: rhodecode/controllers/admin/users.py:277 +msgid "Revoked 'repository create' permission to user" +msgstr "" + +#: rhodecode/controllers/admin/users.py:283 msgid "Granted 'repository fork' permission to user" msgstr "" -#: rhodecode/controllers/admin/users.py:282 -msgid "Revoked 'repository fork' permission to user" -msgstr "" - #: rhodecode/controllers/admin/users.py:288 -#: rhodecode/controllers/admin/users_groups.py:255 +msgid "Revoked 'repository fork' permission to user" +msgstr "" + +#: rhodecode/controllers/admin/users.py:294 +#: rhodecode/controllers/admin/users_groups.py:279 msgid "An error occurred during permissions saving" msgstr "" -#: rhodecode/controllers/admin/users.py:303 -#, python-format -msgid "Added email %s to user" -msgstr "" - #: rhodecode/controllers/admin/users.py:309 +#, python-format +msgid "Added email %s to user" +msgstr "" + +#: rhodecode/controllers/admin/users.py:315 msgid "An error occurred during email saving" msgstr "" -#: rhodecode/controllers/admin/users.py:319 +#: rhodecode/controllers/admin/users.py:325 msgid "Removed email from user" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:84 +#: rhodecode/controllers/admin/users_groups.py:86 #, python-format msgid "created users group %s" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:95 +#: rhodecode/controllers/admin/users_groups.py:97 #, python-format msgid "error occurred during creation of users group %s" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:135 +#: rhodecode/controllers/admin/users_groups.py:164 #, python-format msgid "updated users group %s" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:157 +#: rhodecode/controllers/admin/users_groups.py:186 #, python-format msgid "error occurred during update of users group %s" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:174 +#: rhodecode/controllers/admin/users_groups.py:203 msgid "successfully deleted users group" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:179 +#: rhodecode/controllers/admin/users_groups.py:208 msgid "An error occurred during deletion of users group" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:233 +#: rhodecode/controllers/admin/users_groups.py:257 msgid "Granted 'repository create' permission to users group" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:238 +#: rhodecode/controllers/admin/users_groups.py:262 msgid "Revoked 'repository create' permission to users group" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:244 +#: rhodecode/controllers/admin/users_groups.py:268 msgid "Granted 'repository fork' permission to users group" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:249 +#: rhodecode/controllers/admin/users_groups.py:273 msgid "Revoked 'repository fork' permission to users group" msgstr "" @@ -715,298 +755,323 @@ msgstr "" msgid "You need to be a signed in to view this page" msgstr "" -#: rhodecode/lib/diffs.py:86 +#: rhodecode/lib/diffs.py:74 +msgid "binary file" +msgstr "" + +#: rhodecode/lib/diffs.py:90 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "" -#: rhodecode/lib/diffs.py:96 +#: rhodecode/lib/diffs.py:100 msgid "No changes detected" msgstr "" -#: rhodecode/lib/helpers.py:372 +#: rhodecode/lib/helpers.py:373 #, python-format msgid "%a, %d %b %Y %H:%M:%S" msgstr "" -#: rhodecode/lib/helpers.py:484 +#: rhodecode/lib/helpers.py:485 msgid "True" msgstr "" -#: rhodecode/lib/helpers.py:488 +#: rhodecode/lib/helpers.py:489 msgid "False" msgstr "" +#: rhodecode/lib/helpers.py:529 +#, python-format +msgid "Deleted branch: %s" +msgstr "" + #: rhodecode/lib/helpers.py:532 +#, python-format +msgid "Created tag: %s" +msgstr "" + +#: rhodecode/lib/helpers.py:545 msgid "Changeset not found" msgstr "" -#: rhodecode/lib/helpers.py:555 +#: rhodecode/lib/helpers.py:588 #, python-format msgid "Show all combined changesets %s->%s" msgstr "" -#: rhodecode/lib/helpers.py:561 +#: rhodecode/lib/helpers.py:594 msgid "compare view" msgstr "" -#: rhodecode/lib/helpers.py:581 +#: rhodecode/lib/helpers.py:614 msgid "and" msgstr "" -#: rhodecode/lib/helpers.py:582 +#: rhodecode/lib/helpers.py:615 #, python-format msgid "%s more" msgstr "" -#: rhodecode/lib/helpers.py:583 rhodecode/templates/changelog/changelog.html:48 +#: rhodecode/lib/helpers.py:616 rhodecode/templates/changelog/changelog.html:51 msgid "revisions" msgstr "" -#: rhodecode/lib/helpers.py:606 -msgid "fork name " -msgstr "" - -#: rhodecode/lib/helpers.py:620 +#: rhodecode/lib/helpers.py:640 +#, python-format +msgid "fork name %s" +msgstr "" + +#: rhodecode/lib/helpers.py:653 #: rhodecode/templates/pullrequests/pullrequest_show.html:4 #: rhodecode/templates/pullrequests/pullrequest_show.html:12 #, python-format msgid "Pull request #%s" msgstr "" -#: rhodecode/lib/helpers.py:626 +#: rhodecode/lib/helpers.py:659 msgid "[deleted] repository" msgstr "" -#: rhodecode/lib/helpers.py:628 rhodecode/lib/helpers.py:638 +#: rhodecode/lib/helpers.py:661 rhodecode/lib/helpers.py:671 msgid "[created] repository" msgstr "" -#: rhodecode/lib/helpers.py:630 +#: rhodecode/lib/helpers.py:663 msgid "[created] repository as fork" msgstr "" -#: rhodecode/lib/helpers.py:632 rhodecode/lib/helpers.py:640 +#: rhodecode/lib/helpers.py:665 rhodecode/lib/helpers.py:673 msgid "[forked] repository" msgstr "" -#: rhodecode/lib/helpers.py:634 rhodecode/lib/helpers.py:642 +#: rhodecode/lib/helpers.py:667 rhodecode/lib/helpers.py:675 msgid "[updated] repository" msgstr "" -#: rhodecode/lib/helpers.py:636 +#: rhodecode/lib/helpers.py:669 msgid "[delete] repository" msgstr "" -#: rhodecode/lib/helpers.py:644 +#: rhodecode/lib/helpers.py:677 msgid "[created] user" msgstr "" -#: rhodecode/lib/helpers.py:646 +#: rhodecode/lib/helpers.py:679 msgid "[updated] user" msgstr "" -#: rhodecode/lib/helpers.py:648 +#: rhodecode/lib/helpers.py:681 msgid "[created] users group" msgstr "" -#: rhodecode/lib/helpers.py:650 +#: rhodecode/lib/helpers.py:683 msgid "[updated] users group" msgstr "" -#: rhodecode/lib/helpers.py:652 +#: rhodecode/lib/helpers.py:685 msgid "[commented] on revision in repository" msgstr "" -#: rhodecode/lib/helpers.py:654 +#: rhodecode/lib/helpers.py:687 msgid "[commented] on pull request for" msgstr "" -#: rhodecode/lib/helpers.py:656 +#: rhodecode/lib/helpers.py:689 msgid "[closed] pull request for" msgstr "" -#: rhodecode/lib/helpers.py:658 +#: rhodecode/lib/helpers.py:691 msgid "[pushed] into" msgstr "" -#: rhodecode/lib/helpers.py:660 +#: rhodecode/lib/helpers.py:693 msgid "[committed via RhodeCode] into repository" msgstr "" -#: rhodecode/lib/helpers.py:662 +#: rhodecode/lib/helpers.py:695 msgid "[pulled from remote] into repository" msgstr "" -#: rhodecode/lib/helpers.py:664 +#: rhodecode/lib/helpers.py:697 msgid "[pulled] from" msgstr "" -#: rhodecode/lib/helpers.py:666 +#: rhodecode/lib/helpers.py:699 msgid "[started following] repository" msgstr "" -#: rhodecode/lib/helpers.py:668 +#: rhodecode/lib/helpers.py:701 msgid "[stopped following] repository" msgstr "" -#: rhodecode/lib/helpers.py:840 +#: rhodecode/lib/helpers.py:877 #, python-format msgid " and %s more" msgstr "" -#: rhodecode/lib/helpers.py:844 +#: rhodecode/lib/helpers.py:881 msgid "No Files" msgstr "" -#: rhodecode/lib/utils2.py:335 +#: rhodecode/lib/utils2.py:403 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:336 +#: rhodecode/lib/utils2.py:404 #, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:337 +#: rhodecode/lib/utils2.py:405 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:338 +#: rhodecode/lib/utils2.py:406 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:339 +#: rhodecode/lib/utils2.py:407 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:340 +#: rhodecode/lib/utils2.py:408 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:355 +#: rhodecode/lib/utils2.py:424 +#, python-format +msgid "in %s" +msgstr "" + +#: rhodecode/lib/utils2.py:426 #, python-format msgid "%s ago" msgstr "" -#: rhodecode/lib/utils2.py:357 +#: rhodecode/lib/utils2.py:428 +#, python-format +msgid "in %s and %s" +msgstr "" + +#: rhodecode/lib/utils2.py:431 #, python-format msgid "%s and %s ago" msgstr "" -#: rhodecode/lib/utils2.py:360 +#: rhodecode/lib/utils2.py:434 msgid "just now" msgstr "" -#: rhodecode/lib/celerylib/tasks.py:269 +#: rhodecode/lib/celerylib/tasks.py:270 msgid "password reset link" msgstr "" +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 rhodecode/model/db.py:1180 +msgid "Repository no access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1181 +msgid "Repository read access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1182 +msgid "Repository write access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1183 +msgid "Repository admin access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1185 +msgid "Repositories Group no access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1186 +msgid "Repositories Group read access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1187 +msgid "Repositories Group write access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1188 +msgid "Repositories Group admin access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1190 +msgid "RhodeCode Administrator" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1191 +msgid "Repository creation disabled" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1192 +msgid "Repository creation enabled" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1193 +msgid "Repository forking disabled" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1194 +msgid "Repository forking enabled" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1195 +msgid "Register disabled" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1196 +msgid "Register new user with RhodeCode with manual activation" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1199 +msgid "Register new user with RhodeCode with auto activation" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1640 +msgid "Not Reviewed" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1641 +msgid "Approved" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1642 +msgid "Rejected" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1643 +msgid "Under Review" +msgstr "" + #: rhodecode/model/comment.py:110 #, python-format msgid "on line %s" msgstr "" -#: rhodecode/model/comment.py:157 +#: rhodecode/model/comment.py:173 msgid "[Mention]" msgstr "" -#: rhodecode/model/db.py:1140 -msgid "Repository no access" -msgstr "" - -#: rhodecode/model/db.py:1141 -msgid "Repository read access" -msgstr "" - -#: rhodecode/model/db.py:1142 -msgid "Repository write access" -msgstr "" - -#: rhodecode/model/db.py:1143 -msgid "Repository admin access" -msgstr "" - -#: rhodecode/model/db.py:1145 -msgid "Repositories Group no access" -msgstr "" - -#: rhodecode/model/db.py:1146 -msgid "Repositories Group read access" -msgstr "" - -#: rhodecode/model/db.py:1147 -msgid "Repositories Group write access" -msgstr "" - -#: rhodecode/model/db.py:1148 -msgid "Repositories Group admin access" -msgstr "" - -#: rhodecode/model/db.py:1150 -msgid "RhodeCode Administrator" -msgstr "" - -#: rhodecode/model/db.py:1151 -msgid "Repository creation disabled" -msgstr "" - -#: rhodecode/model/db.py:1152 -msgid "Repository creation enabled" -msgstr "" - -#: rhodecode/model/db.py:1153 -msgid "Repository forking disabled" -msgstr "" - -#: rhodecode/model/db.py:1154 -msgid "Repository forking enabled" -msgstr "" - -#: rhodecode/model/db.py:1155 -msgid "Register disabled" -msgstr "" - -#: rhodecode/model/db.py:1156 -msgid "Register new user with RhodeCode with manual activation" -msgstr "" - -#: rhodecode/model/db.py:1159 -msgid "Register new user with RhodeCode with auto activation" -msgstr "" - -#: rhodecode/model/db.py:1579 -msgid "Not Reviewed" -msgstr "" - -#: rhodecode/model/db.py:1580 -msgid "Approved" -msgstr "" - -#: rhodecode/model/db.py:1581 -msgid "Rejected" -msgstr "" - -#: rhodecode/model/db.py:1582 -msgid "Under Review" -msgstr "" - #: rhodecode/model/forms.py:43 msgid "Please enter a login" msgstr "" @@ -1026,35 +1091,41 @@ msgid "Enter %(min)i characters or more" msgstr "" #: rhodecode/model/notification.py:220 -msgid "commented on commit" +#, python-format +msgid "commented on commit at %(when)s" msgstr "" #: rhodecode/model/notification.py:221 -msgid "sent message" +#, python-format +msgid "sent message at %(when)s" msgstr "" #: rhodecode/model/notification.py:222 -msgid "mentioned you" +#, python-format +msgid "mentioned you at %(when)s" msgstr "" #: rhodecode/model/notification.py:223 -msgid "registered in RhodeCode" +#, python-format +msgid "registered in RhodeCode at %(when)s" msgstr "" #: rhodecode/model/notification.py:224 -msgid "opened new pull request" +#, python-format +msgid "opened new pull request at %(when)s" msgstr "" #: rhodecode/model/notification.py:225 -msgid "commented on pull request" -msgstr "" - -#: rhodecode/model/pull_request.py:84 +#, python-format +msgid "commented on pull request at %(when)s" +msgstr "" + +#: rhodecode/model/pull_request.py:90 #, python-format msgid "%(user)s wants you to review pull request #%(pr_id)s" msgstr "" -#: rhodecode/model/scm.py:535 +#: rhodecode/model/scm.py:542 msgid "latest tip" msgstr "" @@ -1062,152 +1133,156 @@ msgstr "" msgid "new user registration" msgstr "" -#: rhodecode/model/user.py:255 rhodecode/model/user.py:277 -#: rhodecode/model/user.py:299 +#: rhodecode/model/user.py:255 rhodecode/model/user.py:279 +#: rhodecode/model/user.py:301 msgid "You can't Edit this user since it's crucial for entire application" msgstr "" -#: rhodecode/model/user.py:323 +#: rhodecode/model/user.py:325 msgid "You can't remove this user since it's crucial for entire application" msgstr "" -#: rhodecode/model/user.py:329 +#: rhodecode/model/user.py:331 #, python-format msgid "" "user \"%s\" still owns %s repositories and cannot be removed. Switch " "owners or remove those repositories. %s" msgstr "" -#: rhodecode/model/validators.py:35 rhodecode/model/validators.py:36 +#: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37 msgid "Value cannot be an empty list" msgstr "" -#: rhodecode/model/validators.py:82 +#: rhodecode/model/validators.py:83 #, python-format msgid "Username \"%(username)s\" already exists" msgstr "" -#: rhodecode/model/validators.py:84 +#: rhodecode/model/validators.py:85 #, python-format msgid "Username \"%(username)s\" is forbidden" msgstr "" -#: rhodecode/model/validators.py:86 +#: rhodecode/model/validators.py:87 msgid "" "Username may only contain alphanumeric characters underscores, periods or" " dashes and must begin with alphanumeric character" msgstr "" -#: rhodecode/model/validators.py:114 +#: rhodecode/model/validators.py:115 #, python-format msgid "Username %(username)s is not valid" msgstr "" -#: rhodecode/model/validators.py:133 -msgid "Invalid users group name" -msgstr "" - #: rhodecode/model/validators.py:134 +msgid "Invalid users group name" +msgstr "" + +#: rhodecode/model/validators.py:135 #, python-format msgid "Users group \"%(usersgroup)s\" already exists" msgstr "" -#: rhodecode/model/validators.py:136 +#: rhodecode/model/validators.py:137 msgid "" "users group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" msgstr "" -#: rhodecode/model/validators.py:174 +#: rhodecode/model/validators.py:175 msgid "Cannot assign this group as parent" msgstr "" -#: rhodecode/model/validators.py:175 +#: rhodecode/model/validators.py:176 #, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "" -#: rhodecode/model/validators.py:177 +#: rhodecode/model/validators.py:178 #, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "" -#: rhodecode/model/validators.py:235 +#: rhodecode/model/validators.py:236 msgid "Invalid characters (non-ascii) in password" msgstr "" -#: rhodecode/model/validators.py:250 +#: rhodecode/model/validators.py:251 msgid "Passwords do not match" msgstr "" -#: rhodecode/model/validators.py:267 -msgid "invalid password" -msgstr "" - #: rhodecode/model/validators.py:268 -msgid "invalid user name" +msgid "invalid password" msgstr "" #: rhodecode/model/validators.py:269 +msgid "invalid user name" +msgstr "" + +#: rhodecode/model/validators.py:270 msgid "Your account is disabled" msgstr "" -#: rhodecode/model/validators.py:313 +#: rhodecode/model/validators.py:314 #, python-format msgid "Repository name %(repo)s is disallowed" msgstr "" -#: rhodecode/model/validators.py:315 -#, python-format -msgid "Repository named %(repo)s already exists" -msgstr "" - #: rhodecode/model/validators.py:316 #, python-format +msgid "Repository named %(repo)s already exists" +msgstr "" + +#: rhodecode/model/validators.py:317 +#, python-format msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" msgstr "" -#: rhodecode/model/validators.py:318 +#: rhodecode/model/validators.py:319 #, python-format msgid "Repositories group with name \"%(repo)s\" already exists" msgstr "" -#: rhodecode/model/validators.py:431 -msgid "invalid clone url" -msgstr "" - #: rhodecode/model/validators.py:432 +msgid "invalid clone url" +msgstr "" + +#: rhodecode/model/validators.py:433 msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url" msgstr "" -#: rhodecode/model/validators.py:457 +#: rhodecode/model/validators.py:458 msgid "Fork have to be the same type as parent" msgstr "" -#: rhodecode/model/validators.py:478 +#: rhodecode/model/validators.py:473 +msgid "You don't have permissions to create repository in this group" +msgstr "" + +#: rhodecode/model/validators.py:498 msgid "This username or users group name is not valid" msgstr "" -#: rhodecode/model/validators.py:562 +#: rhodecode/model/validators.py:582 msgid "This is not a valid path" msgstr "" -#: rhodecode/model/validators.py:577 -msgid "This e-mail address is already taken" -msgstr "" - #: rhodecode/model/validators.py:597 +msgid "This e-mail address is already taken" +msgstr "" + +#: rhodecode/model/validators.py:617 #, python-format msgid "e-mail \"%(email)s\" does not exist." msgstr "" -#: rhodecode/model/validators.py:634 +#: rhodecode/model/validators.py:654 msgid "" "The LDAP Login attribute of the CN must be specified - this is the name " "of the attribute that is equivalent to \"username\"" msgstr "" -#: rhodecode/model/validators.py:653 +#: rhodecode/model/validators.py:673 #, python-format msgid "Revisions %(revs)s are already part of pull request or have set status" msgstr "" @@ -1230,7 +1305,7 @@ msgstr "" #: rhodecode/templates/index_base.html:6 #: rhodecode/templates/admin/repos/repos.html:9 -#: rhodecode/templates/base/base.html:221 +#: rhodecode/templates/base/base.html:233 msgid "repositories" msgstr "" @@ -1241,6 +1316,7 @@ msgid "ADD REPOSITORY" msgstr "" #: rhodecode/templates/index_base.html:29 +#: rhodecode/templates/index_base.html:136 #: 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 @@ -1250,9 +1326,10 @@ msgid "Group name" msgstr "" #: rhodecode/templates/index_base.html:30 -#: rhodecode/templates/index_base.html:71 -#: rhodecode/templates/index_base.html:142 -#: rhodecode/templates/index_base.html:168 +#: rhodecode/templates/index_base.html:72 +#: rhodecode/templates/index_base.html:138 +#: rhodecode/templates/index_base.html:176 +#: rhodecode/templates/index_base.html:266 #: rhodecode/templates/admin/repos/repo_add_base.html:56 #: rhodecode/templates/admin/repos/repo_edit.html:75 #: rhodecode/templates/admin/repos/repos.html:72 @@ -1261,142 +1338,137 @@ msgstr "" #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34 #: rhodecode/templates/forks/fork.html:59 #: rhodecode/templates/settings/repo_settings.html:66 -#: rhodecode/templates/summary/summary.html:105 +#: rhodecode/templates/summary/summary.html:114 msgid "Description" msgstr "" #: rhodecode/templates/index_base.html:40 -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47 msgid "Repositories group" msgstr "" -#: rhodecode/templates/index_base.html:70 -#: rhodecode/templates/index_base.html:166 +#: rhodecode/templates/index_base.html:71 +#: rhodecode/templates/index_base.html:174 +#: rhodecode/templates/index_base.html:264 #: rhodecode/templates/admin/repos/repo_add_base.html:9 #: rhodecode/templates/admin/repos/repo_edit.html:32 #: rhodecode/templates/admin/repos/repos.html:70 -#: rhodecode/templates/admin/users/user_edit.html:192 +#: rhodecode/templates/admin/users/user_edit.html:196 #: rhodecode/templates/admin/users/user_edit_my_account.html:59 -#: rhodecode/templates/admin/users/user_edit_my_account.html:157 -#: rhodecode/templates/admin/users/user_edit_my_account.html:193 +#: rhodecode/templates/admin/users/user_edit_my_account.html:180 +#: rhodecode/templates/admin/users/user_edit_my_account.html:216 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:6 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:184 #: rhodecode/templates/bookmarks/bookmarks.html:36 #: rhodecode/templates/bookmarks/bookmarks_data.html:6 -#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches.html:50 +#: rhodecode/templates/branches/branches_data.html:6 #: rhodecode/templates/files/files_browser.html:47 -#: rhodecode/templates/journal/journal.html:59 -#: rhodecode/templates/journal/journal.html:107 -#: rhodecode/templates/journal/journal.html:186 +#: rhodecode/templates/journal/journal.html:62 +#: rhodecode/templates/journal/journal.html:168 +#: rhodecode/templates/journal/journal_page_repos.html:7 #: rhodecode/templates/settings/repo_settings.html:31 #: rhodecode/templates/summary/summary.html:43 -#: rhodecode/templates/summary/summary.html:123 -#: rhodecode/templates/tags/tags.html:36 +#: rhodecode/templates/summary/summary.html:132 +#: rhodecode/templates/tags/tags.html:51 #: rhodecode/templates/tags/tags_data.html:6 msgid "Name" msgstr "" -#: rhodecode/templates/index_base.html:72 -msgid "Last change" -msgstr "" - #: rhodecode/templates/index_base.html:73 -#: rhodecode/templates/index_base.html:171 -#: rhodecode/templates/admin/users/user_edit_my_account.html:159 -#: rhodecode/templates/journal/journal.html:188 -msgid "Tip" +msgid "Last change" msgstr "" #: rhodecode/templates/index_base.html:74 -#: rhodecode/templates/index_base.html:173 +#: rhodecode/templates/index_base.html:179 +#: rhodecode/templates/admin/users/user_edit_my_account.html:182 +#: rhodecode/templates/journal/journal.html:170 +msgid "Tip" +msgstr "" + +#: rhodecode/templates/index_base.html:75 +#: rhodecode/templates/index_base.html:181 +#: rhodecode/templates/index_base.html:269 #: rhodecode/templates/admin/repos/repo_edit.html:121 #: rhodecode/templates/admin/repos/repos.html:73 msgid "Owner" msgstr "" -#: rhodecode/templates/index_base.html:75 -#: rhodecode/templates/summary/summary.html:48 -#: rhodecode/templates/summary/summary.html:51 -msgid "RSS" -msgstr "" - #: rhodecode/templates/index_base.html:76 +#: rhodecode/templates/summary/summary.html:48 +#: rhodecode/templates/summary/summary.html:51 +msgid "RSS" +msgstr "" + +#: rhodecode/templates/index_base.html:77 msgid "Atom" msgstr "" -#: rhodecode/templates/index_base.html:110 -#: rhodecode/templates/index_base.html:112 -#, python-format -msgid "Subscribe to %s rss feed" -msgstr "" - -#: rhodecode/templates/index_base.html:117 -#: rhodecode/templates/index_base.html:119 -#, python-format -msgid "Subscribe to %s atom feed" -msgstr "" - -#: rhodecode/templates/index_base.html:140 -msgid "Group Name" -msgstr "" - -#: rhodecode/templates/index_base.html:158 -#: rhodecode/templates/index_base.html:198 +#: rhodecode/templates/index_base.html:167 +#: rhodecode/templates/index_base.html:207 +#: rhodecode/templates/index_base.html:291 #: rhodecode/templates/admin/repos/repos.html:94 -#: rhodecode/templates/admin/users/user_edit_my_account.html:179 +#: rhodecode/templates/admin/users/user_edit_my_account.html:202 #: rhodecode/templates/admin/users/users.html:107 #: rhodecode/templates/bookmarks/bookmarks.html:60 -#: rhodecode/templates/branches/branches.html:77 -#: rhodecode/templates/journal/journal.html:211 -#: rhodecode/templates/tags/tags.html:60 +#: rhodecode/templates/branches/branches.html:76 +#: rhodecode/templates/journal/journal.html:193 +#: rhodecode/templates/tags/tags.html:77 msgid "Click to sort ascending" msgstr "" -#: rhodecode/templates/index_base.html:159 -#: rhodecode/templates/index_base.html:199 +#: rhodecode/templates/index_base.html:168 +#: rhodecode/templates/index_base.html:208 +#: rhodecode/templates/index_base.html:292 #: rhodecode/templates/admin/repos/repos.html:95 -#: rhodecode/templates/admin/users/user_edit_my_account.html:180 +#: rhodecode/templates/admin/users/user_edit_my_account.html:203 #: rhodecode/templates/admin/users/users.html:108 #: rhodecode/templates/bookmarks/bookmarks.html:61 -#: rhodecode/templates/branches/branches.html:78 -#: rhodecode/templates/journal/journal.html:212 -#: rhodecode/templates/tags/tags.html:61 +#: rhodecode/templates/branches/branches.html:77 +#: rhodecode/templates/journal/journal.html:194 +#: rhodecode/templates/tags/tags.html:78 msgid "Click to sort descending" msgstr "" -#: rhodecode/templates/index_base.html:169 +#: rhodecode/templates/index_base.html:177 +#: rhodecode/templates/index_base.html:267 msgid "Last Change" msgstr "" -#: rhodecode/templates/index_base.html:200 +#: rhodecode/templates/index_base.html:209 +#: rhodecode/templates/index_base.html:293 #: rhodecode/templates/admin/repos/repos.html:96 -#: rhodecode/templates/admin/users/user_edit_my_account.html:181 +#: rhodecode/templates/admin/users/user_edit_my_account.html:204 #: rhodecode/templates/admin/users/users.html:109 #: rhodecode/templates/bookmarks/bookmarks.html:62 -#: rhodecode/templates/branches/branches.html:79 -#: rhodecode/templates/journal/journal.html:213 -#: rhodecode/templates/tags/tags.html:62 +#: rhodecode/templates/branches/branches.html:78 +#: rhodecode/templates/journal/journal.html:195 +#: rhodecode/templates/tags/tags.html:79 msgid "No records found." msgstr "" -#: rhodecode/templates/index_base.html:201 +#: rhodecode/templates/index_base.html:210 +#: rhodecode/templates/index_base.html:294 #: rhodecode/templates/admin/repos/repos.html:97 -#: rhodecode/templates/admin/users/user_edit_my_account.html:182 +#: rhodecode/templates/admin/users/user_edit_my_account.html:205 #: rhodecode/templates/admin/users/users.html:110 #: rhodecode/templates/bookmarks/bookmarks.html:63 -#: rhodecode/templates/branches/branches.html:80 -#: rhodecode/templates/journal/journal.html:214 -#: rhodecode/templates/tags/tags.html:63 +#: rhodecode/templates/branches/branches.html:79 +#: rhodecode/templates/journal/journal.html:196 +#: rhodecode/templates/tags/tags.html:80 msgid "Data error." msgstr "" -#: rhodecode/templates/index_base.html:202 +#: rhodecode/templates/index_base.html:211 +#: rhodecode/templates/index_base.html:295 #: rhodecode/templates/admin/repos/repos.html:98 -#: rhodecode/templates/admin/users/user_edit_my_account.html:183 +#: rhodecode/templates/admin/users/user_edit_my_account.html:206 #: rhodecode/templates/admin/users/users.html:111 #: rhodecode/templates/bookmarks/bookmarks.html:64 -#: rhodecode/templates/branches/branches.html:81 -#: rhodecode/templates/journal/journal.html:215 -#: rhodecode/templates/tags/tags.html:64 +#: rhodecode/templates/branches/branches.html:80 +#: rhodecode/templates/journal/journal.html:54 +#: rhodecode/templates/journal/journal.html:197 +#: rhodecode/templates/tags/tags.html:81 msgid "Loading..." msgstr "" @@ -1414,7 +1486,7 @@ msgstr "" #: rhodecode/templates/admin/users/user_edit.html:50 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:26 #: rhodecode/templates/base/base.html:83 -#: rhodecode/templates/summary/summary.html:122 +#: rhodecode/templates/summary/summary.html:131 msgid "Username" msgstr "" @@ -1471,23 +1543,23 @@ msgstr "" #: rhodecode/templates/register.html:47 #: rhodecode/templates/admin/users/user_add.html:59 -#: rhodecode/templates/admin/users/user_edit.html:86 +#: rhodecode/templates/admin/users/user_edit.html:90 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:53 msgid "First Name" msgstr "" #: rhodecode/templates/register.html:56 #: rhodecode/templates/admin/users/user_add.html:68 -#: rhodecode/templates/admin/users/user_edit.html:95 +#: rhodecode/templates/admin/users/user_edit.html:99 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:62 msgid "Last Name" msgstr "" #: rhodecode/templates/register.html:65 #: rhodecode/templates/admin/users/user_add.html:77 -#: rhodecode/templates/admin/users/user_edit.html:104 +#: rhodecode/templates/admin/users/user_edit.html:108 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:71 -#: rhodecode/templates/summary/summary.html:124 +#: rhodecode/templates/summary/summary.html:133 msgid "Email" msgstr "" @@ -1500,6 +1572,7 @@ msgid "Your account must wait for activa msgstr "" #: rhodecode/templates/repo_switcher_list.html:11 +#: rhodecode/templates/admin/defaults/defaults.html:44 #: rhodecode/templates/admin/repos/repo_add_base.html:65 #: rhodecode/templates/admin/repos/repo_edit.html:85 #: rhodecode/templates/settings/repo_settings.html:76 @@ -1527,7 +1600,7 @@ msgid "tags" msgstr "" #: rhodecode/templates/switch_to_list.html:22 -#: rhodecode/templates/tags/tags_data.html:33 +#: rhodecode/templates/tags/tags_data.html:38 msgid "There are no tags yet" msgstr "" @@ -1550,20 +1623,22 @@ msgstr "" #: rhodecode/templates/admin/repos/repos.html:74 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:9 -#: rhodecode/templates/journal/journal.html:61 -#: rhodecode/templates/journal/journal.html:62 +#: rhodecode/templates/journal/journal_page_repos.html:9 +#: rhodecode/templates/journal/journal_page_repos.html:10 msgid "Action" msgstr "" #: rhodecode/templates/admin/admin_log.html:7 +#: rhodecode/templates/admin/permissions/permissions.html:41 msgid "Repository" msgstr "" #: rhodecode/templates/admin/admin_log.html:8 #: rhodecode/templates/bookmarks/bookmarks.html:37 #: rhodecode/templates/bookmarks/bookmarks_data.html:7 -#: rhodecode/templates/branches/branches.html:52 -#: rhodecode/templates/tags/tags.html:37 +#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches_data.html:7 +#: rhodecode/templates/tags/tags.html:52 #: rhodecode/templates/tags/tags_data.html:7 msgid "Date" msgstr "" @@ -1572,10 +1647,79 @@ msgstr "" msgid "From IP" msgstr "" -#: rhodecode/templates/admin/admin_log.html:53 +#: rhodecode/templates/admin/admin_log.html:57 msgid "No actions yet" msgstr "" +#: rhodecode/templates/admin/defaults/defaults.html:5 +#: rhodecode/templates/admin/defaults/defaults.html:25 +msgid "Repositories defaults" +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:11 +msgid "Defaults" +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:35 +#: rhodecode/templates/admin/repos/repo_add_base.html:38 +#: rhodecode/templates/admin/repos/repo_edit.html:58 +msgid "Type" +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:48 +#: rhodecode/templates/admin/repos/repo_add_base.html:69 +#: rhodecode/templates/admin/repos/repo_edit.html:89 +#: rhodecode/templates/forks/fork.html:72 +#: rhodecode/templates/settings/repo_settings.html:80 +msgid "" +"Private repositories are only visible to people explicitly added as " +"collaborators." +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:55 +#: rhodecode/templates/admin/repos/repo_edit.html:94 +msgid "Enable statistics" +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:59 +#: rhodecode/templates/admin/repos/repo_edit.html:98 +msgid "Enable statistics window on summary page." +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:65 +#: rhodecode/templates/admin/repos/repo_edit.html:103 +msgid "Enable downloads" +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:69 +#: rhodecode/templates/admin/repos/repo_edit.html:107 +msgid "Enable download menu on summary page." +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:75 +#: rhodecode/templates/admin/repos/repo_edit.html:112 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66 +msgid "Enable locking" +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:79 +#: rhodecode/templates/admin/repos/repo_edit.html:116 +msgid "Enable lock-by-pulling on repository." +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:84 +#: rhodecode/templates/admin/ldap/ldap.html:89 +#: rhodecode/templates/admin/repos/repo_edit.html:141 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74 +#: rhodecode/templates/admin/settings/hooks.html:73 +#: rhodecode/templates/admin/users/user_edit.html:133 +#: rhodecode/templates/admin/users/user_edit.html:178 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:135 +#: rhodecode/templates/settings/repo_settings.html:93 +msgid "Save" +msgstr "" + #: rhodecode/templates/admin/ldap/ldap.html:5 msgid "LDAP administration" msgstr "" @@ -1648,18 +1792,6 @@ msgstr "" msgid "E-mail Attribute" msgstr "" -#: rhodecode/templates/admin/ldap/ldap.html:89 -#: rhodecode/templates/admin/repos/repo_edit.html:141 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74 -#: rhodecode/templates/admin/settings/hooks.html:73 -#: rhodecode/templates/admin/users/user_edit.html:129 -#: rhodecode/templates/admin/users/user_edit.html:174 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79 -#: rhodecode/templates/admin/users_groups/users_group_edit.html:135 -#: rhodecode/templates/settings/repo_settings.html:93 -msgid "Save" -msgstr "" - #: rhodecode/templates/admin/notifications/notifications.html:5 #: rhodecode/templates/admin/notifications/notifications.html:9 msgid "My Notifications" @@ -1675,8 +1807,8 @@ msgid "Comments" msgstr "" #: rhodecode/templates/admin/notifications/notifications.html:31 -#: rhodecode/templates/base/base.html:254 -#: rhodecode/templates/base/base.html:256 +#: rhodecode/templates/base/base.html:267 +#: rhodecode/templates/base/base.html:269 msgid "Pull requests" msgstr "" @@ -1704,7 +1836,7 @@ msgstr "" #: rhodecode/templates/admin/permissions/permissions.html:11 #: rhodecode/templates/admin/repos/repo_edit.html:134 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58 -#: rhodecode/templates/admin/users/user_edit.html:139 +#: rhodecode/templates/admin/users/user_edit.html:143 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100 #: rhodecode/templates/settings/repo_settings.html:86 msgid "Permissions" @@ -1718,10 +1850,6 @@ msgstr "" 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 " @@ -1730,23 +1858,40 @@ msgid "" msgstr "" #: rhodecode/templates/admin/permissions/permissions.html:50 +#: rhodecode/templates/admin/permissions/permissions.html:63 msgid "overwrite existing settings" msgstr "" #: rhodecode/templates/admin/permissions/permissions.html:55 +#: rhodecode/templates/admin/repos/repo_add_base.html:29 +#: rhodecode/templates/admin/repos/repo_edit.html:49 +#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 +#: rhodecode/templates/forks/fork.html:50 +#: rhodecode/templates/settings/repo_settings.html:48 +msgid "Repository group" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:62 +msgid "" +"All default permissions on each repository group will be reset to choosen" +" permission, note that all custom default permission on repositories " +"group will be lost" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:69 msgid "Registration" msgstr "" -#: rhodecode/templates/admin/permissions/permissions.html:63 +#: rhodecode/templates/admin/permissions/permissions.html:77 msgid "Repository creation" msgstr "" -#: rhodecode/templates/admin/permissions/permissions.html:71 +#: rhodecode/templates/admin/permissions/permissions.html:85 msgid "Repository forking" msgstr "" -#: rhodecode/templates/admin/permissions/permissions.html:78 -#: rhodecode/templates/admin/repos/repo_edit.html:241 +#: rhodecode/templates/admin/permissions/permissions.html:92 +#: rhodecode/templates/admin/repos/repo_edit.html:264 msgid "set" msgstr "" @@ -1766,8 +1911,8 @@ msgid "add new" msgstr "" #: rhodecode/templates/admin/repos/repo_add_base.html:20 -#: rhodecode/templates/summary/summary.html:95 -#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:104 +#: rhodecode/templates/summary/summary.html:105 msgid "Clone from" msgstr "" @@ -1777,24 +1922,11 @@ msgstr "" msgid "Optional http[s] url from which repository should be cloned." msgstr "" -#: rhodecode/templates/admin/repos/repo_add_base.html:29 -#: rhodecode/templates/admin/repos/repo_edit.html:49 -#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 -#: rhodecode/templates/forks/fork.html:50 -#: rhodecode/templates/settings/repo_settings.html:48 -msgid "Repository group" -msgstr "" - #: rhodecode/templates/admin/repos/repo_add_base.html:33 #: rhodecode/templates/forks/fork.html:54 msgid "Optionaly select a group to put this repository into." msgstr "" -#: rhodecode/templates/admin/repos/repo_add_base.html:38 -#: rhodecode/templates/admin/repos/repo_edit.html:58 -msgid "Type" -msgstr "" - #: rhodecode/templates/admin/repos/repo_add_base.html:42 msgid "Type of repository to create." msgstr "" @@ -1820,15 +1952,6 @@ msgstr "" msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "" -#: rhodecode/templates/admin/repos/repo_add_base.html:69 -#: rhodecode/templates/admin/repos/repo_edit.html:89 -#: rhodecode/templates/forks/fork.html:72 -#: rhodecode/templates/settings/repo_settings.html:80 -msgid "" -"Private repositories are only visible to people explicitly added as " -"collaborators." -msgstr "" - #: rhodecode/templates/admin/repos/repo_add_base.html:73 msgid "add" msgstr "" @@ -1843,12 +1966,14 @@ msgstr "" #: rhodecode/templates/admin/repos/repo_edit.html:13 #: rhodecode/templates/admin/users/user_edit.html:13 -#: rhodecode/templates/admin/users/user_edit.html:224 -#: rhodecode/templates/admin/users/user_edit.html:226 +#: rhodecode/templates/admin/users/user_edit.html:228 +#: rhodecode/templates/admin/users/user_edit.html:230 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28 #: rhodecode/templates/admin/users_groups/users_group_edit.html:13 -#: rhodecode/templates/files/files_source.html:44 -#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:207 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:209 +#: rhodecode/templates/files/files_source.html:29 +#: rhodecode/templates/journal/journal_page_repos.html:29 msgid "edit" msgstr "" @@ -1862,31 +1987,6 @@ msgstr "" msgid "Optional select a group to put this repository into." msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:94 -msgid "Enable statistics" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:98 -msgid "Enable statistics window on summary page." -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:103 -msgid "Enable downloads" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:107 -msgid "Enable download menu on summary page." -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:112 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66 -msgid "Enable locking" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:116 -msgid "Enable lock-by-pulling on repository." -msgstr "" - #: rhodecode/templates/admin/repos/repo_edit.html:126 msgid "Change owner of this repository." msgstr "" @@ -1894,11 +1994,11 @@ msgstr "" #: rhodecode/templates/admin/repos/repo_edit.html:142 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:75 #: rhodecode/templates/admin/settings/settings.html:113 -#: rhodecode/templates/admin/settings/settings.html:168 -#: rhodecode/templates/admin/settings/settings.html:258 -#: rhodecode/templates/admin/users/user_edit.html:130 -#: rhodecode/templates/admin/users/user_edit.html:175 -#: rhodecode/templates/admin/users/user_edit.html:278 +#: rhodecode/templates/admin/settings/settings.html:179 +#: rhodecode/templates/admin/settings/settings.html:269 +#: rhodecode/templates/admin/users/user_edit.html:134 +#: rhodecode/templates/admin/users/user_edit.html:179 +#: rhodecode/templates/admin/users/user_edit.html:282 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:80 #: rhodecode/templates/admin/users_groups/users_group_edit.html:136 #: rhodecode/templates/files/files_add.html:82 @@ -1956,78 +2056,103 @@ msgstr "" msgid "Confirm to invalidate repository cache" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:195 -#: rhodecode/templates/base/base.html:318 -#: rhodecode/templates/base/base.html:320 -#: rhodecode/templates/base/base.html:322 -msgid "Public journal" +#: rhodecode/templates/admin/repos/repo_edit.html:193 +msgid "" +"Manually invalidate cache for this repository. On first access repository" +" will be cached again" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:198 +msgid "List of cached values" msgstr "" #: rhodecode/templates/admin/repos/repo_edit.html:201 -msgid "Remove from public journal" +msgid "Prefix" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:202 +msgid "Key" msgstr "" #: rhodecode/templates/admin/repos/repo_edit.html:203 +#: rhodecode/templates/admin/users/user_add.html:86 +#: rhodecode/templates/admin/users/user_edit.html:117 +#: 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/repos/repo_edit.html:218 +#: rhodecode/templates/base/base.html:331 +#: rhodecode/templates/base/base.html:333 +#: rhodecode/templates/base/base.html:335 +msgid "Public journal" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:224 +msgid "Remove from public journal" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:226 msgid "Add to public journal" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:208 +#: rhodecode/templates/admin/repos/repo_edit.html:231 msgid "" "All actions made on this repository will be accessible to everyone in " "public journal" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:215 +#: rhodecode/templates/admin/repos/repo_edit.html:238 msgid "Locking" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:220 +#: rhodecode/templates/admin/repos/repo_edit.html:243 msgid "Unlock locked repo" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:220 +#: rhodecode/templates/admin/repos/repo_edit.html:243 msgid "Confirm to unlock repository" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:223 +#: rhodecode/templates/admin/repos/repo_edit.html:246 msgid "lock repo" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:223 +#: rhodecode/templates/admin/repos/repo_edit.html:246 msgid "Confirm to lock repository" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:224 +#: rhodecode/templates/admin/repos/repo_edit.html:247 msgid "Repository is not locked" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:229 +#: rhodecode/templates/admin/repos/repo_edit.html:252 msgid "Force locking on repository. Works only when anonymous access is disabled" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:236 -msgid "Set as fork of" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:245 -msgid "Manually set this repository as a fork of another from the list" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:251 -#: rhodecode/templates/changeset/changeset_file_comment.html:26 -msgid "Delete" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:255 -msgid "Remove this repository" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:255 -#: rhodecode/templates/journal/journal.html:84 -msgid "Confirm to delete this repository" -msgstr "" - #: rhodecode/templates/admin/repos/repo_edit.html:259 +msgid "Set as fork of" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:268 +msgid "Manually set this repository as a fork of another from the list" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:274 +#: rhodecode/templates/changeset/changeset_file_comment.html:26 +msgid "Delete" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:278 +msgid "Remove this repository" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:278 +msgid "Confirm to delete this repository" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:282 msgid "" "This repository will be renamed in a special way in order to be " "unaccesible for RhodeCode and VCS systems.\n" @@ -2053,7 +2178,7 @@ msgstr "" #: rhodecode/templates/admin/repos/repo_edit_perms.html:6 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6 #: rhodecode/templates/admin/users/users.html:85 -#: rhodecode/templates/base/base.html:217 +#: rhodecode/templates/base/base.html:229 msgid "admin" msgstr "" @@ -2064,8 +2189,8 @@ msgstr "" #: rhodecode/templates/admin/repos/repo_edit_perms.html:16 #: rhodecode/templates/data_table/_dt_elements.html:67 -#: rhodecode/templates/journal/journal.html:132 -#: rhodecode/templates/summary/summary.html:76 +#: rhodecode/templates/journal/journal.html:87 +#: rhodecode/templates/summary/summary.html:85 msgid "private repository" msgstr "" @@ -2088,12 +2213,12 @@ msgid "Add another member" msgstr "" #: rhodecode/templates/admin/repos/repo_edit_perms.html:97 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:81 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 msgid "Failed to remove user" msgstr "" #: rhodecode/templates/admin/repos/repo_edit_perms.html:112 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:96 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:103 msgid "Failed to remove users group" msgstr "" @@ -2101,11 +2226,44 @@ msgstr "" msgid "Repositories administration" msgstr "" -#: rhodecode/templates/admin/repos_groups/repos_groups.html:8 -msgid "Groups" -msgstr "" - -#: rhodecode/templates/admin/repos_groups/repos_groups.html:12 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73 +msgid "apply to children" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74 +msgid "" +"Set or revoke permission to all children of that group, including " +"repositories and other groups" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups.html:9 +#: rhodecode/templates/base/base.html:122 +#: rhodecode/templates/base/base.html:313 +#: rhodecode/templates/base/base.html:315 +#: rhodecode/templates/base/base.html:317 +#: rhodecode/templates/bookmarks/bookmarks.html:11 +#: rhodecode/templates/branches/branches.html:10 +#: rhodecode/templates/changelog/changelog.html:10 +#: rhodecode/templates/changeset/changeset.html:10 +#: rhodecode/templates/changeset/changeset_range.html:9 +#: rhodecode/templates/compare/compare_diff.html:9 +#: rhodecode/templates/files/file_diff.html:8 +#: rhodecode/templates/files/files.html:8 +#: rhodecode/templates/files/files_add.html:15 +#: rhodecode/templates/files/files_edit.html:15 +#: rhodecode/templates/followers/followers.html:9 +#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9 +#: rhodecode/templates/pullrequests/pullrequest.html:8 +#: rhodecode/templates/pullrequests/pullrequest_show.html:8 +#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 +#: rhodecode/templates/settings/repo_settings.html:9 +#: rhodecode/templates/shortlog/shortlog.html:10 +#: rhodecode/templates/summary/summary.html:8 +#: rhodecode/templates/tags/tags.html:11 +msgid "Home" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups.html:13 msgid "with" msgstr "" @@ -2131,7 +2289,7 @@ msgstr "" #: rhodecode/templates/admin/users/user_add.html:94 #: rhodecode/templates/admin/users_groups/users_group_add.html:49 #: rhodecode/templates/admin/users_groups/users_group_edit.html:90 -#: rhodecode/templates/pullrequests/pullrequest_show.html:113 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 msgid "save" msgstr "" @@ -2167,20 +2325,22 @@ msgstr "" msgid "action" msgstr "" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54 -#: rhodecode/templates/admin/users/user_edit.html:255 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 +#: rhodecode/templates/admin/users/user_edit.html:259 #: rhodecode/templates/admin/users_groups/users_groups.html:44 #: rhodecode/templates/data_table/_dt_elements.html:7 -#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:121 msgid "delete" msgstr "" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 #, python-format -msgid "Confirm to delete this group: %s" -msgstr "" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:62 +msgid "Confirm to delete this group: %s with %s repository" +msgid_plural "Confirm to delete this group: %s with %s repositories" +msgstr[0] "" +msgstr[1] "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63 msgid "There are no repositories groups yet" msgstr "" @@ -2273,8 +2433,8 @@ msgid "GA code" msgstr "" #: rhodecode/templates/admin/settings/settings.html:112 -#: rhodecode/templates/admin/settings/settings.html:167 -#: rhodecode/templates/admin/settings/settings.html:257 +#: rhodecode/templates/admin/settings/settings.html:178 +#: rhodecode/templates/admin/settings/settings.html:268 msgid "Save settings" msgstr "" @@ -2282,124 +2442,133 @@ msgstr "" msgid "Visualisation settings" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:128 +#: rhodecode/templates/admin/settings/settings.html:127 +msgid "General" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:132 +msgid "Use lightweight dashboard" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:139 msgid "Icons" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:133 -msgid "Show public repo icon on repositories" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:137 -msgid "Show private repo icon on repositories" -msgstr "" - #: rhodecode/templates/admin/settings/settings.html:144 +msgid "Show public repo icon on repositories" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:148 +msgid "Show private repo icon on repositories" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:155 msgid "Meta-Tagging" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:149 +#: rhodecode/templates/admin/settings/settings.html:160 msgid "Stylify recognised metatags:" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:176 +#: rhodecode/templates/admin/settings/settings.html:187 msgid "VCS settings" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:185 +#: rhodecode/templates/admin/settings/settings.html:196 msgid "Web" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:190 +#: rhodecode/templates/admin/settings/settings.html:201 msgid "require ssl for vcs operations" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:192 -msgid "" -"RhodeCode will require SSL for pushing or pulling. If SSL is missing it " -"will return HTTP Error 406: Not Acceptable" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:198 -msgid "Hooks" -msgstr "" - #: rhodecode/templates/admin/settings/settings.html:203 +msgid "" +"RhodeCode will require SSL for pushing or pulling. If SSL is missing it " +"will return HTTP Error 406: Not Acceptable" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:209 +msgid "Hooks" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:214 msgid "Update repository after push (hg update)" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:207 +#: rhodecode/templates/admin/settings/settings.html:218 msgid "Show repository size after push" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:211 +#: rhodecode/templates/admin/settings/settings.html:222 msgid "Log user push commands" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:215 +#: rhodecode/templates/admin/settings/settings.html:226 msgid "Log user pull commands" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:219 +#: rhodecode/templates/admin/settings/settings.html:230 msgid "advanced setup" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:224 -msgid "Mercurial Extensions" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:229 -msgid "largefiles extensions" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:233 -msgid "hgsubversion extensions" -msgstr "" - #: rhodecode/templates/admin/settings/settings.html:235 +msgid "Mercurial Extensions" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:240 +msgid "largefiles extensions" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:244 +msgid "hgsubversion extensions" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:246 msgid "" "Requires hgsubversion library installed. Allows clonning from svn remote " "locations" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:245 +#: rhodecode/templates/admin/settings/settings.html:256 msgid "Repositories location" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:250 +#: rhodecode/templates/admin/settings/settings.html:261 msgid "" "This a crucial application setting. If you are really sure you need to " "change this, you must restart application in order to make this setting " "take effect. Click this label to unlock." msgstr "" -#: rhodecode/templates/admin/settings/settings.html:251 +#: rhodecode/templates/admin/settings/settings.html:262 +#: rhodecode/templates/base/base.html:221 msgid "unlock" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:252 +#: rhodecode/templates/admin/settings/settings.html:263 msgid "" "Location where repositories are stored. After changing this value a " "restart, and rescan is required" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:272 +#: rhodecode/templates/admin/settings/settings.html:283 msgid "Test Email" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:280 +#: rhodecode/templates/admin/settings/settings.html:291 msgid "Email to" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:288 +#: rhodecode/templates/admin/settings/settings.html:299 msgid "Send" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:294 +#: rhodecode/templates/admin/settings/settings.html:305 msgid "System Info and Packages" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:297 +#: rhodecode/templates/admin/settings/settings.html:308 msgid "show" msgstr "" @@ -2420,13 +2589,6 @@ msgstr "" msgid "Password confirmation" msgstr "" -#: rhodecode/templates/admin/users/user_add.html:86 -#: rhodecode/templates/admin/users/user_edit.html:113 -#: 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 "" @@ -2446,26 +2608,26 @@ msgstr "" msgid "API key" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:59 +#: rhodecode/templates/admin/users/user_edit.html:63 msgid "LDAP DN" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:68 +#: rhodecode/templates/admin/users/user_edit.html:72 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:35 msgid "New password" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:77 +#: rhodecode/templates/admin/users/user_edit.html:81 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 msgid "New password confirmation" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:147 +#: rhodecode/templates/admin/users/user_edit.html:151 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108 msgid "Inherit default permissions" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:152 +#: rhodecode/templates/admin/users/user_edit.html:156 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113 #, python-format msgid "" @@ -2473,46 +2635,48 @@ msgid "" "options does not have any action" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:158 +#: rhodecode/templates/admin/users/user_edit.html:162 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119 msgid "Create repositories" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:166 +#: rhodecode/templates/admin/users/user_edit.html:170 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127 msgid "Fork repositories" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:186 +#: rhodecode/templates/admin/users/user_edit.html:190 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:22 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:39 msgid "Nothing here yet" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:193 +#: rhodecode/templates/admin/users/user_edit.html:197 #: rhodecode/templates/admin/users/user_edit_my_account.html:60 -#: rhodecode/templates/admin/users/user_edit_my_account.html:194 +#: rhodecode/templates/admin/users/user_edit_my_account.html:217 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:185 msgid "Permission" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:194 +#: rhodecode/templates/admin/users/user_edit.html:198 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:186 msgid "Edit Permission" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:243 +#: rhodecode/templates/admin/users/user_edit.html:247 msgid "Email addresses" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:256 +#: rhodecode/templates/admin/users/user_edit.html:260 #, python-format msgid "Confirm to delete this email: %s" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:270 +#: rhodecode/templates/admin/users/user_edit.html:274 msgid "New email address" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:277 +#: rhodecode/templates/admin/users/user_edit.html:281 msgid "Add" msgstr "" @@ -2568,31 +2732,33 @@ msgstr "" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:7 #: rhodecode/templates/bookmarks/bookmarks.html:40 #: rhodecode/templates/bookmarks/bookmarks_data.html:9 -#: rhodecode/templates/branches/branches.html:55 -#: rhodecode/templates/journal/journal.html:60 -#: rhodecode/templates/tags/tags.html:40 +#: rhodecode/templates/branches/branches.html:54 +#: rhodecode/templates/branches/branches_data.html:9 +#: rhodecode/templates/journal/journal_page_repos.html:8 +#: rhodecode/templates/tags/tags.html:55 #: rhodecode/templates/tags/tags_data.html:9 msgid "Revision" msgstr "" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28 -#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/journal/journal_page_repos.html:29 msgid "private" msgstr "" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:31 #: rhodecode/templates/data_table/_dt_elements.html:7 +#: rhodecode/templates/journal/journal_page_repos.html:32 #, python-format msgid "Confirm to delete this repository: %s" msgstr "" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:38 -#: rhodecode/templates/journal/journal.html:94 +#: rhodecode/templates/journal/journal_page_repos.html:42 msgid "No repositories yet" msgstr "" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40 -#: rhodecode/templates/journal/journal.html:96 +#: rhodecode/templates/journal/journal_page_repos.html:44 msgid "create one now" msgstr "" @@ -2601,7 +2767,7 @@ msgid "Users administration" msgstr "" #: rhodecode/templates/admin/users/users.html:9 -#: rhodecode/templates/base/base.html:223 +#: rhodecode/templates/base/base.html:235 msgid "users" msgstr "" @@ -2631,7 +2797,7 @@ msgid "active" msgstr "" #: rhodecode/templates/admin/users/users.html:86 -#: rhodecode/templates/base/base.html:226 +#: rhodecode/templates/base/base.html:238 msgid "ldap" msgstr "" @@ -2680,6 +2846,18 @@ msgstr "" msgid "Group members" msgstr "" +#: rhodecode/templates/admin/users_groups/users_group_edit.html:163 +msgid "No members yet" +msgstr "" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:171 +msgid "Permissions defined for this group" +msgstr "" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:178 +msgid "No permissions set yet" +msgstr "" + #: rhodecode/templates/admin/users_groups/users_groups.html:5 msgid "Users groups administration" msgstr "" @@ -2722,36 +2900,10 @@ msgstr "" msgid "Inbox" msgstr "" -#: rhodecode/templates/base/base.html:122 -#: rhodecode/templates/base/base.html:300 -#: rhodecode/templates/base/base.html:302 -#: rhodecode/templates/base/base.html:304 -#: rhodecode/templates/bookmarks/bookmarks.html:11 -#: rhodecode/templates/branches/branches.html:10 -#: rhodecode/templates/changelog/changelog.html:10 -#: rhodecode/templates/changeset/changeset.html:10 -#: rhodecode/templates/changeset/changeset_range.html:9 -#: rhodecode/templates/compare/compare_diff.html:9 -#: rhodecode/templates/files/file_diff.html:8 -#: rhodecode/templates/files/files.html:8 -#: rhodecode/templates/files/files_add.html:15 -#: rhodecode/templates/files/files_edit.html:15 -#: rhodecode/templates/followers/followers.html:9 -#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9 -#: rhodecode/templates/pullrequests/pullrequest.html:8 -#: rhodecode/templates/pullrequests/pullrequest_show.html:8 -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 -#: rhodecode/templates/settings/repo_settings.html:9 -#: rhodecode/templates/shortlog/shortlog.html:10 -#: rhodecode/templates/summary/summary.html:8 -#: rhodecode/templates/tags/tags.html:11 -msgid "Home" -msgstr "" - #: rhodecode/templates/base/base.html:123 -#: rhodecode/templates/base/base.html:309 -#: rhodecode/templates/base/base.html:311 -#: rhodecode/templates/base/base.html:313 +#: rhodecode/templates/base/base.html:322 +#: rhodecode/templates/base/base.html:324 +#: rhodecode/templates/base/base.html:326 #: rhodecode/templates/journal/journal.html:4 #: rhodecode/templates/journal/journal.html:21 #: rhodecode/templates/journal/public_journal.html:4 @@ -2771,7 +2923,7 @@ msgid "Products" msgstr "" #: rhodecode/templates/base/base.html:152 -#: rhodecode/templates/base/base.html:182 +#: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47 msgid "loading..." msgstr "" @@ -2816,50 +2968,66 @@ msgstr "" #: rhodecode/templates/base/base.html:204 #: rhodecode/templates/base/base.html:206 -#: rhodecode/templates/base/base.html:227 -msgid "settings" -msgstr "" - -#: rhodecode/templates/base/base.html:209 +msgid "repository settings" +msgstr "" + +#: rhodecode/templates/base/base.html:210 #: rhodecode/templates/data_table/_dt_elements.html:80 #: rhodecode/templates/forks/fork.html:13 msgid "fork" msgstr "" -#: rhodecode/templates/base/base.html:211 -#: rhodecode/templates/changelog/changelog.html:40 +#: rhodecode/templates/base/base.html:212 rhodecode/templates/base/root.html:50 +#: rhodecode/templates/changelog/changelog.html:43 msgid "Open new pull request" msgstr "" -#: rhodecode/templates/base/base.html:213 +#: rhodecode/templates/base/base.html:215 +#: rhodecode/templates/forks/forks_data.html:21 +msgid "Compare fork" +msgstr "" + +#: rhodecode/templates/base/base.html:217 msgid "search" msgstr "" -#: rhodecode/templates/base/base.html:222 +#: rhodecode/templates/base/base.html:223 +msgid "lock" +msgstr "" + +#: rhodecode/templates/base/base.html:234 msgid "repositories groups" msgstr "" -#: rhodecode/templates/base/base.html:224 +#: rhodecode/templates/base/base.html:236 msgid "users groups" msgstr "" -#: rhodecode/templates/base/base.html:225 +#: rhodecode/templates/base/base.html:237 msgid "permissions" msgstr "" -#: rhodecode/templates/base/base.html:238 +#: rhodecode/templates/base/base.html:239 +msgid "defaults" +msgstr "" + #: rhodecode/templates/base/base.html:240 +msgid "settings" +msgstr "" + +#: rhodecode/templates/base/base.html:251 +#: rhodecode/templates/base/base.html:253 msgid "Followers" msgstr "" -#: rhodecode/templates/base/base.html:246 -#: rhodecode/templates/base/base.html:248 +#: rhodecode/templates/base/base.html:259 +#: rhodecode/templates/base/base.html:261 msgid "Forks" msgstr "" -#: rhodecode/templates/base/base.html:327 -#: rhodecode/templates/base/base.html:329 -#: rhodecode/templates/base/base.html:331 +#: rhodecode/templates/base/base.html:340 +#: rhodecode/templates/base/base.html:342 +#: rhodecode/templates/base/base.html:344 #: rhodecode/templates/search/search.html:52 msgid "Search" msgstr "" @@ -2869,7 +3037,7 @@ msgid "add another comment" msgstr "" #: rhodecode/templates/base/root.html:43 -#: rhodecode/templates/journal/journal.html:120 +#: rhodecode/templates/journal/journal.html:75 #: rhodecode/templates/summary/summary.html:57 msgid "Stop following this repository" msgstr "" @@ -2883,14 +3051,26 @@ msgstr "" msgid "Group" msgstr "" -#: rhodecode/templates/base/root.html:47 +#: rhodecode/templates/base/root.html:48 msgid "search truncated" msgstr "" -#: rhodecode/templates/base/root.html:48 +#: rhodecode/templates/base/root.html:49 msgid "no matching files" msgstr "" +#: rhodecode/templates/base/root.html:51 +msgid "Open new pull request for selected changesets" +msgstr "" + +#: rhodecode/templates/base/root.html:52 +msgid "Show selected changes __S -> __E" +msgstr "" + +#: rhodecode/templates/base/root.html:53 +msgid "Selection link" +msgstr "" + #: rhodecode/templates/bookmarks/bookmarks.html:5 #, python-format msgid "%s Bookmarks" @@ -2898,8 +3078,9 @@ msgstr "" #: rhodecode/templates/bookmarks/bookmarks.html:39 #: rhodecode/templates/bookmarks/bookmarks_data.html:8 -#: rhodecode/templates/branches/branches.html:54 -#: rhodecode/templates/tags/tags.html:39 +#: rhodecode/templates/branches/branches.html:53 +#: rhodecode/templates/branches/branches_data.html:8 +#: rhodecode/templates/tags/tags.html:54 #: rhodecode/templates/tags/tags_data.html:8 msgid "Author" msgstr "" @@ -2913,34 +3094,15 @@ msgstr "" msgid "Compare branches" msgstr "" -#: rhodecode/templates/branches/branches.html:57 +#: rhodecode/templates/branches/branches.html:56 +#: rhodecode/templates/branches/branches_data.html:10 #: rhodecode/templates/compare/compare_diff.html:5 #: rhodecode/templates/compare/compare_diff.html:13 +#: rhodecode/templates/tags/tags.html:57 +#: rhodecode/templates/tags/tags_data.html:10 msgid "Compare" msgstr "" -#: rhodecode/templates/branches/branches_data.html:6 -msgid "name" -msgstr "" - -#: rhodecode/templates/branches/branches_data.html:7 -msgid "date" -msgstr "" - -#: rhodecode/templates/branches/branches_data.html:8 -#: rhodecode/templates/shortlog/shortlog_data.html:8 -msgid "author" -msgstr "" - -#: rhodecode/templates/branches/branches_data.html:9 -#: rhodecode/templates/shortlog/shortlog_data.html:5 -msgid "revision" -msgstr "" - -#: rhodecode/templates/branches/branches_data.html:10 -msgid "compare" -msgstr "" - #: rhodecode/templates/changelog/changelog.html:6 #, python-format msgid "%s Changelog" @@ -2954,57 +3116,63 @@ msgstr[0] "" msgstr[1] "" #: rhodecode/templates/changelog/changelog.html:37 +msgid "Clear selection" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:40 #: rhodecode/templates/forks/forks_data.html:19 #, python-format msgid "compare fork with %s" msgstr "" -#: rhodecode/templates/changelog/changelog.html:37 -#: rhodecode/templates/forks/forks_data.html:21 -msgid "Compare fork" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:46 +#: rhodecode/templates/changelog/changelog.html:40 +msgid "Compare fork with parent" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:49 msgid "Show" msgstr "" -#: rhodecode/templates/changelog/changelog.html:72 -#: rhodecode/templates/summary/summary.html:364 +#: rhodecode/templates/changelog/changelog.html:74 +#: rhodecode/templates/summary/summary.html:375 msgid "show more" msgstr "" -#: rhodecode/templates/changelog/changelog.html:76 +#: rhodecode/templates/changelog/changelog.html:78 msgid "Affected number of files, click to show more details" msgstr "" -#: rhodecode/templates/changelog/changelog.html:89 -#: rhodecode/templates/changeset/changeset.html:38 +#: rhodecode/templates/changelog/changelog.html:91 +#: rhodecode/templates/changeset/changeset.html:44 #: rhodecode/templates/changeset/changeset_file_comment.html:20 #: rhodecode/templates/changeset/changeset_range.html:46 msgid "Changeset status" msgstr "" -#: rhodecode/templates/changelog/changelog.html:92 +#: rhodecode/templates/changelog/changelog.html:94 +#: rhodecode/templates/shortlog/shortlog_data.html:20 msgid "Click to open associated pull request" msgstr "" -#: rhodecode/templates/changelog/changelog.html:102 -#: rhodecode/templates/changeset/changeset.html:78 +#: rhodecode/templates/changelog/changelog.html:104 +#: rhodecode/templates/changeset/changeset.html:85 msgid "Parent" msgstr "" -#: rhodecode/templates/changelog/changelog.html:108 -#: rhodecode/templates/changeset/changeset.html:84 +#: rhodecode/templates/changelog/changelog.html:110 +#: rhodecode/templates/changeset/changeset.html:91 msgid "No parents" msgstr "" -#: rhodecode/templates/changelog/changelog.html:113 -#: rhodecode/templates/changeset/changeset.html:88 +#: rhodecode/templates/changelog/changelog.html:115 +#: rhodecode/templates/changeset/changeset.html:95 +#: rhodecode/templates/changeset/changeset_range.html:79 msgid "merge" msgstr "" -#: rhodecode/templates/changelog/changelog.html:116 -#: rhodecode/templates/changeset/changeset.html:91 +#: rhodecode/templates/changelog/changelog.html:118 +#: rhodecode/templates/changeset/changeset.html:98 +#: rhodecode/templates/changeset/changeset_range.html:82 #: rhodecode/templates/files/files.html:29 #: rhodecode/templates/files/files_add.html:33 #: rhodecode/templates/files/files_edit.html:33 @@ -3012,44 +3180,42 @@ msgstr "" msgid "branch" msgstr "" -#: rhodecode/templates/changelog/changelog.html:122 +#: rhodecode/templates/changelog/changelog.html:124 +#: rhodecode/templates/changeset/changeset_range.html:88 msgid "bookmark" msgstr "" -#: rhodecode/templates/changelog/changelog.html:128 -#: rhodecode/templates/changeset/changeset.html:96 +#: rhodecode/templates/changelog/changelog.html:130 +#: rhodecode/templates/changeset/changeset.html:103 +#: rhodecode/templates/changeset/changeset_range.html:94 msgid "tag" msgstr "" -#: rhodecode/templates/changelog/changelog.html:164 -msgid "Show selected changes __S -> __E" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:255 +#: rhodecode/templates/changelog/changelog.html:301 msgid "There are no changes yet" msgstr "" #: rhodecode/templates/changelog/changelog_details.html:4 -#: rhodecode/templates/changeset/changeset.html:66 +#: rhodecode/templates/changeset/changeset.html:73 msgid "removed" msgstr "" #: rhodecode/templates/changelog/changelog_details.html:5 -#: rhodecode/templates/changeset/changeset.html:67 +#: rhodecode/templates/changeset/changeset.html:74 msgid "changed" msgstr "" #: rhodecode/templates/changelog/changelog_details.html:6 -#: rhodecode/templates/changeset/changeset.html:68 +#: rhodecode/templates/changeset/changeset.html:75 msgid "added" msgstr "" #: rhodecode/templates/changelog/changelog_details.html:8 #: rhodecode/templates/changelog/changelog_details.html:9 #: rhodecode/templates/changelog/changelog_details.html:10 -#: rhodecode/templates/changeset/changeset.html:70 -#: rhodecode/templates/changeset/changeset.html:71 -#: rhodecode/templates/changeset/changeset.html:72 +#: rhodecode/templates/changeset/changeset.html:77 +#: rhodecode/templates/changeset/changeset.html:78 +#: rhodecode/templates/changeset/changeset.html:79 #, python-format msgid "affected %s files" msgstr "" @@ -3063,17 +3229,21 @@ msgstr "" msgid "Changeset" msgstr "" -#: rhodecode/templates/changeset/changeset.html:43 +#: rhodecode/templates/changeset/changeset.html:49 #: rhodecode/templates/changeset/diff_block.html:20 msgid "raw diff" msgstr "" -#: rhodecode/templates/changeset/changeset.html:44 +#: rhodecode/templates/changeset/changeset.html:50 +msgid "patch diff" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:51 #: rhodecode/templates/changeset/diff_block.html:21 msgid "download diff" msgstr "" -#: rhodecode/templates/changeset/changeset.html:48 +#: rhodecode/templates/changeset/changeset.html:55 #: rhodecode/templates/changeset/changeset_file_comment.html:82 #, python-format msgid "%d comment" @@ -3081,7 +3251,7 @@ msgid_plural "%d comments" msgstr[0] "" msgstr[1] "" -#: rhodecode/templates/changeset/changeset.html:48 +#: rhodecode/templates/changeset/changeset.html:55 #: rhodecode/templates/changeset/changeset_file_comment.html:82 #, python-format msgid "(%d inline)" @@ -3089,14 +3259,23 @@ msgid_plural "(%d inline)" msgstr[0] "" msgstr[1] "" -#: rhodecode/templates/changeset/changeset.html:103 +#: rhodecode/templates/changeset/changeset.html:111 +#: rhodecode/templates/compare/compare_diff.html:44 +#: rhodecode/templates/pullrequests/pullrequest_show.html:76 #, python-format -msgid "%s files affected with %s insertions and %s deletions:" -msgstr "" - -#: rhodecode/templates/changeset/changeset.html:119 -msgid "Changeset was too big and was cut off..." -msgstr "" +msgid "%s file changed" +msgid_plural "%s files changed" +msgstr[0] "" +msgstr[1] "" + +#: rhodecode/templates/changeset/changeset.html:113 +#: rhodecode/templates/compare/compare_diff.html:46 +#: rhodecode/templates/pullrequests/pullrequest_show.html:78 +#, python-format +msgid "%s file changed with %s insertions and %s deletions" +msgid_plural "%s files changed with %s insertions and %s deletions" +msgstr[0] "" +msgstr[1] "" #: rhodecode/templates/changeset/changeset_file_comment.html:42 msgid "Submitting..." @@ -3161,14 +3340,16 @@ msgstr "" msgid "Compare View" msgstr "" +#: rhodecode/templates/changeset/changeset_range.html:29 +msgid "Show combined compare" +msgstr "" + #: rhodecode/templates/changeset/changeset_range.html:54 -#: rhodecode/templates/compare/compare_diff.html:41 -#: rhodecode/templates/pullrequests/pullrequest_show.html:69 msgid "Files affected" msgstr "" #: rhodecode/templates/changeset/diff_block.html:19 -msgid "diff" +msgid "show full diff for this file" msgstr "" #: rhodecode/templates/changeset/diff_block.html:27 @@ -3180,7 +3361,16 @@ msgid "No changesets" msgstr "" #: rhodecode/templates/compare/compare_diff.html:37 -msgid "Outgoing changesets" +#: rhodecode/templates/pullrequests/pullrequest_show.html:69 +#, python-format +msgid "Showing %s commit" +msgid_plural "Showing %s commits" +msgstr[0] "" +msgstr[1] "" + +#: rhodecode/templates/compare/compare_diff.html:52 +#: rhodecode/templates/pullrequests/pullrequest_show.html:84 +msgid "No files" msgstr "" #: rhodecode/templates/data_table/_dt_elements.html:39 @@ -3190,40 +3380,117 @@ msgid "Fork" msgstr "" #: rhodecode/templates/data_table/_dt_elements.html:60 -#: rhodecode/templates/journal/journal.html:126 -#: rhodecode/templates/summary/summary.html:68 +#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/summary/summary.html:77 msgid "Mercurial repository" msgstr "" #: rhodecode/templates/data_table/_dt_elements.html:62 -#: rhodecode/templates/journal/journal.html:128 -#: rhodecode/templates/summary/summary.html:71 +#: rhodecode/templates/journal/journal.html:83 +#: rhodecode/templates/summary/summary.html:80 msgid "Git repository" msgstr "" #: rhodecode/templates/data_table/_dt_elements.html:69 -#: rhodecode/templates/journal/journal.html:134 -#: rhodecode/templates/summary/summary.html:78 +#: rhodecode/templates/journal/journal.html:89 +#: rhodecode/templates/summary/summary.html:87 msgid "public repository" msgstr "" #: rhodecode/templates/data_table/_dt_elements.html:80 -#: rhodecode/templates/summary/summary.html:87 -#: rhodecode/templates/summary/summary.html:88 +#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:97 msgid "Fork of" msgstr "" -#: rhodecode/templates/data_table/_dt_elements.html:92 +#: rhodecode/templates/data_table/_dt_elements.html:94 msgid "No changesets yet" msgstr "" -#: rhodecode/templates/data_table/_dt_elements.html:104 +#: rhodecode/templates/data_table/_dt_elements.html:101 +#: rhodecode/templates/data_table/_dt_elements.html:103 +#, python-format +msgid "Subscribe to %s rss feed" +msgstr "" + +#: rhodecode/templates/data_table/_dt_elements.html:109 +#: rhodecode/templates/data_table/_dt_elements.html:111 +#, python-format +msgid "Subscribe to %s atom feed" +msgstr "" + +#: rhodecode/templates/data_table/_dt_elements.html:122 #, python-format msgid "Confirm to delete this user: %s" msgstr "" +#: rhodecode/templates/email_templates/changeset_comment.html:10 +msgid "New status$" +msgstr "" + #: rhodecode/templates/email_templates/main.html:8 -msgid "This is an notification from RhodeCode." +msgid "This is a notification from RhodeCode." +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:4 +msgid "Hello" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:6 +msgid "We received a request to create a new password for your account." +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:8 +msgid "You can generate it by clicking following URL" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:12 +msgid "If you didn't request new password please ignore this email." +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:4 +#, python-format +msgid "" +"User %s opened pull request for repository %s and wants you to review " +"changes." +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:5 +msgid "title" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:6 +#: rhodecode/templates/pullrequests/pullrequest.html:115 +msgid "description" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:11 +msgid "revisions for reviewing" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:18 +msgid "View this pull request here" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request_comment.html:4 +#, python-format +msgid "User %s commented on pull request #%s for repository %s" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request_comment.html:10 +msgid "New status" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request_comment.html:14 +msgid "View this comment here" +msgstr "" + +#: rhodecode/templates/email_templates/registration.html:4 +msgid "A new user have registered in RhodeCode" +msgstr "" + +#: rhodecode/templates/email_templates/registration.html:9 +msgid "View this user here" msgstr "" #: rhodecode/templates/errors/error_document.html:46 @@ -3241,13 +3508,13 @@ msgid "File diff" msgstr "" #: rhodecode/templates/files/files.html:4 -#: rhodecode/templates/files/files.html:72 +#: rhodecode/templates/files/files.html:74 #, python-format msgid "%s files" msgstr "" #: rhodecode/templates/files/files.html:12 -#: rhodecode/templates/summary/summary.html:340 +#: rhodecode/templates/summary/summary.html:351 msgid "files" msgstr "" @@ -3325,7 +3592,7 @@ msgid "search file list" msgstr "" #: rhodecode/templates/files/files_browser.html:31 -#: rhodecode/templates/shortlog/shortlog_data.html:65 +#: rhodecode/templates/shortlog/shortlog_data.html:78 msgid "add new file" msgstr "" @@ -3358,18 +3625,18 @@ msgid "edit file" msgstr "" #: rhodecode/templates/files/files_edit.html:49 -#: rhodecode/templates/files/files_source.html:38 +#: rhodecode/templates/files/files_source.html:23 msgid "show annotation" msgstr "" #: rhodecode/templates/files/files_edit.html:50 -#: rhodecode/templates/files/files_source.html:40 -#: rhodecode/templates/files/files_source.html:68 +#: rhodecode/templates/files/files_source.html:25 +#: rhodecode/templates/files/files_source.html:53 msgid "show as raw" msgstr "" #: rhodecode/templates/files/files_edit.html:51 -#: rhodecode/templates/files/files_source.html:41 +#: rhodecode/templates/files/files_source.html:26 msgid "download as raw" msgstr "" @@ -3381,43 +3648,47 @@ msgstr "" msgid "Editing file" msgstr "" -#: rhodecode/templates/files/files_source.html:2 +#: rhodecode/templates/files/files_history_box.html:2 msgid "History" msgstr "" -#: rhodecode/templates/files/files_source.html:9 +#: rhodecode/templates/files/files_history_box.html:9 msgid "diff to revision" msgstr "" -#: rhodecode/templates/files/files_source.html:10 +#: rhodecode/templates/files/files_history_box.html:10 #, fuzzy msgid "show at revision" msgstr "" -#: rhodecode/templates/files/files_source.html:14 +#: rhodecode/templates/files/files_history_box.html:11 +msgid "show full history" +msgstr "" + +#: rhodecode/templates/files/files_history_box.html:16 #, fuzzy, python-format msgid "%s author" msgid_plural "%s authors" msgstr[0] "" msgstr[1] "" -#: rhodecode/templates/files/files_source.html:36 +#: rhodecode/templates/files/files_source.html:6 +msgid "Load file history" +msgstr "" + +#: rhodecode/templates/files/files_source.html:21 msgid "show source" msgstr "" -#: rhodecode/templates/files/files_source.html:59 +#: rhodecode/templates/files/files_source.html:44 #, python-format msgid "Binary file (%s)" msgstr "" -#: rhodecode/templates/files/files_source.html:68 +#: rhodecode/templates/files/files_source.html:53 msgid "File is too big to display" msgstr "" -#: rhodecode/templates/files/files_source.html:124 -msgid "Selection link" -msgstr "" - #: rhodecode/templates/files/files_ypjax.html:5 msgid "annotation" msgstr "" @@ -3489,7 +3760,7 @@ msgstr "" msgid "forked" msgstr "" -#: rhodecode/templates/forks/forks_data.html:38 +#: rhodecode/templates/forks/forks_data.html:42 msgid "There are no forks yet" msgstr "" @@ -3502,7 +3773,7 @@ msgid "RSS journal feed" msgstr "" #: rhodecode/templates/journal/journal.html:24 -#: rhodecode/templates/pullrequests/pullrequest.html:27 +#: rhodecode/templates/pullrequests/pullrequest.html:55 msgid "Refresh" msgstr "" @@ -3524,19 +3795,19 @@ msgstr "" msgid "ADD" msgstr "" -#: rhodecode/templates/journal/journal.html:114 +#: rhodecode/templates/journal/journal.html:69 msgid "following user" msgstr "" -#: rhodecode/templates/journal/journal.html:114 +#: rhodecode/templates/journal/journal.html:69 msgid "user" msgstr "" -#: rhodecode/templates/journal/journal.html:147 +#: rhodecode/templates/journal/journal.html:102 msgid "You are not following any users or repositories" msgstr "" -#: rhodecode/templates/journal/journal_data.html:47 +#: rhodecode/templates/journal/journal_data.html:51 msgid "No entries yet" msgstr "" @@ -3557,7 +3828,7 @@ msgstr "" msgid "New pull request" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:28 +#: rhodecode/templates/pullrequests/pullrequest.html:54 msgid "refresh overview" msgstr "" @@ -3566,17 +3837,17 @@ msgid "Detailed compare view" msgstr "" #: rhodecode/templates/pullrequests/pullrequest.html:70 -#: rhodecode/templates/pullrequests/pullrequest_show.html:82 +#: rhodecode/templates/pullrequests/pullrequest_show.html:100 msgid "Pull request reviewers" msgstr "" #: rhodecode/templates/pullrequests/pullrequest.html:79 -#: rhodecode/templates/pullrequests/pullrequest_show.html:94 +#: rhodecode/templates/pullrequests/pullrequest_show.html:112 msgid "owner" msgstr "" #: rhodecode/templates/pullrequests/pullrequest.html:91 -#: rhodecode/templates/pullrequests/pullrequest_show.html:109 +#: rhodecode/templates/pullrequests/pullrequest_show.html:127 msgid "Add reviewer to this pull request." msgstr "" @@ -3590,10 +3861,6 @@ msgstr "" msgid "Title" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:115 -msgid "description" -msgstr "" - #: rhodecode/templates/pullrequests/pullrequest.html:123 msgid "Send pull request" msgstr "" @@ -3603,6 +3870,11 @@ msgstr "" msgid "Closed %s" msgstr "" +#: rhodecode/templates/pullrequests/pullrequest_show.html:23 +#, python-format +msgid "with status %s" +msgstr "" + #: rhodecode/templates/pullrequests/pullrequest_show.html:31 msgid "Status" msgstr "" @@ -3615,23 +3887,23 @@ msgstr "" msgid "Still not reviewed by" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:47 +#: rhodecode/templates/pullrequests/pullrequest_show.html:48 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" msgstr[0] "" msgstr[1] "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:54 +#: rhodecode/templates/pullrequests/pullrequest_show.html:50 +msgid "pull request was reviewed by all reviewers" +msgstr "" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:58 msgid "Created on" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:61 -msgid "Compare view" -msgstr "" - #: rhodecode/templates/pullrequests/pullrequest_show.html:65 -msgid "Incoming changesets" +msgid "Compare view" msgstr "" #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4 @@ -3703,27 +3975,32 @@ msgstr "" msgid "%s Shortlog" msgstr "" -#: rhodecode/templates/shortlog/shortlog.html:14 +#: rhodecode/templates/shortlog/shortlog.html:15 +#: rhodecode/templates/shortlog/shortlog.html:19 msgid "shortlog" msgstr "" +#: rhodecode/templates/shortlog/shortlog_data.html:5 +msgid "revision" +msgstr "" + #: rhodecode/templates/shortlog/shortlog_data.html:7 msgid "age" msgstr "" -#: rhodecode/templates/shortlog/shortlog_data.html:18 -msgid "No commit message" -msgstr "" - -#: rhodecode/templates/shortlog/shortlog_data.html:62 +#: rhodecode/templates/shortlog/shortlog_data.html:8 +msgid "author" +msgstr "" + +#: rhodecode/templates/shortlog/shortlog_data.html:75 msgid "Add or upload files directly via RhodeCode" msgstr "" -#: rhodecode/templates/shortlog/shortlog_data.html:71 +#: rhodecode/templates/shortlog/shortlog_data.html:84 msgid "Push new repo" msgstr "" -#: rhodecode/templates/shortlog/shortlog_data.html:79 +#: rhodecode/templates/shortlog/shortlog_data.html:92 msgid "Existing repository?" msgstr "" @@ -3751,128 +4028,137 @@ msgstr "" msgid "ATOM" msgstr "" -#: rhodecode/templates/summary/summary.html:82 +#: rhodecode/templates/summary/summary.html:70 +#, python-format +msgid "Repository locked by %s" +msgstr "" + +#: rhodecode/templates/summary/summary.html:72 +msgid "Repository unlocked" +msgstr "" + +#: rhodecode/templates/summary/summary.html:91 #, python-format msgid "Non changable ID %s" msgstr "" -#: rhodecode/templates/summary/summary.html:87 +#: rhodecode/templates/summary/summary.html:96 msgid "public" msgstr "" -#: rhodecode/templates/summary/summary.html:95 +#: rhodecode/templates/summary/summary.html:104 msgid "remote clone" msgstr "" -#: rhodecode/templates/summary/summary.html:116 +#: rhodecode/templates/summary/summary.html:125 msgid "Contact" msgstr "" -#: rhodecode/templates/summary/summary.html:130 +#: rhodecode/templates/summary/summary.html:139 msgid "Clone url" msgstr "" -#: rhodecode/templates/summary/summary.html:133 -msgid "Show by Name" -msgstr "" - -#: rhodecode/templates/summary/summary.html:134 -msgid "Show by ID" -msgstr "" - #: rhodecode/templates/summary/summary.html:142 +msgid "Show by Name" +msgstr "" + +#: rhodecode/templates/summary/summary.html:143 +msgid "Show by ID" +msgstr "" + +#: rhodecode/templates/summary/summary.html:151 msgid "Trending files" msgstr "" -#: rhodecode/templates/summary/summary.html:150 -#: rhodecode/templates/summary/summary.html:166 -#: rhodecode/templates/summary/summary.html:194 +#: rhodecode/templates/summary/summary.html:159 +#: rhodecode/templates/summary/summary.html:175 +#: rhodecode/templates/summary/summary.html:203 msgid "enable" msgstr "" -#: rhodecode/templates/summary/summary.html:158 +#: rhodecode/templates/summary/summary.html:167 msgid "Download" msgstr "" -#: rhodecode/templates/summary/summary.html:162 +#: rhodecode/templates/summary/summary.html:171 msgid "There are no downloads yet" msgstr "" -#: rhodecode/templates/summary/summary.html:164 -msgid "Downloads are disabled for this repository" -msgstr "" - -#: rhodecode/templates/summary/summary.html:170 -msgid "Download as zip" -msgstr "" - -#: rhodecode/templates/summary/summary.html:173 -msgid "Check this to download archive with subrepos" -msgstr "" - #: rhodecode/templates/summary/summary.html:173 +msgid "Downloads are disabled for this repository" +msgstr "" + +#: rhodecode/templates/summary/summary.html:179 +msgid "Download as zip" +msgstr "" + +#: rhodecode/templates/summary/summary.html:182 +msgid "Check this to download archive with subrepos" +msgstr "" + +#: rhodecode/templates/summary/summary.html:182 msgid "with subrepos" msgstr "" -#: rhodecode/templates/summary/summary.html:186 +#: rhodecode/templates/summary/summary.html:195 msgid "Commit activity by day / author" msgstr "" -#: rhodecode/templates/summary/summary.html:197 +#: rhodecode/templates/summary/summary.html:206 msgid "Stats gathered: " msgstr "" -#: rhodecode/templates/summary/summary.html:218 +#: rhodecode/templates/summary/summary.html:227 msgid "Shortlog" msgstr "" -#: rhodecode/templates/summary/summary.html:220 +#: rhodecode/templates/summary/summary.html:229 msgid "Quick start" msgstr "" -#: rhodecode/templates/summary/summary.html:233 +#: rhodecode/templates/summary/summary.html:243 #, python-format msgid "Readme file at revision '%s'" msgstr "" -#: rhodecode/templates/summary/summary.html:236 +#: rhodecode/templates/summary/summary.html:246 msgid "Permalink to this readme" msgstr "" -#: rhodecode/templates/summary/summary.html:293 +#: rhodecode/templates/summary/summary.html:304 #, python-format msgid "Download %s as %s" msgstr "" -#: rhodecode/templates/summary/summary.html:650 +#: rhodecode/templates/summary/summary.html:661 msgid "commits" msgstr "" -#: rhodecode/templates/summary/summary.html:651 +#: rhodecode/templates/summary/summary.html:662 msgid "files added" msgstr "" -#: rhodecode/templates/summary/summary.html:652 +#: rhodecode/templates/summary/summary.html:663 msgid "files changed" msgstr "" -#: rhodecode/templates/summary/summary.html:653 +#: rhodecode/templates/summary/summary.html:664 msgid "files removed" msgstr "" -#: rhodecode/templates/summary/summary.html:656 +#: rhodecode/templates/summary/summary.html:667 msgid "commit" msgstr "" -#: rhodecode/templates/summary/summary.html:657 +#: rhodecode/templates/summary/summary.html:668 msgid "file added" msgstr "" -#: rhodecode/templates/summary/summary.html:658 +#: rhodecode/templates/summary/summary.html:669 msgid "file changed" msgstr "" -#: rhodecode/templates/summary/summary.html:659 +#: rhodecode/templates/summary/summary.html:670 msgid "file removed" msgstr "" @@ -3881,3 +4167,7 @@ msgstr "" msgid "%s Tags" msgstr "" +#: rhodecode/templates/tags/tags.html:29 +msgid "Compare tags" +msgstr "" + diff --git a/rhodecode/i18n/fr/LC_MESSAGES/rhodecode.mo b/rhodecode/i18n/fr/LC_MESSAGES/rhodecode.mo index c9b42f6da1c7108470b81b4d5d1c5c92ddb9fb7b..0733cb32b08905fcf38dcd34249aa8a876ca8257 GIT binary patch literal 59418 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 diff --git a/rhodecode/i18n/fr/LC_MESSAGES/rhodecode.po b/rhodecode/i18n/fr/LC_MESSAGES/rhodecode.po --- a/rhodecode/i18n/fr/LC_MESSAGES/rhodecode.po +++ b/rhodecode/i18n/fr/LC_MESSAGES/rhodecode.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: RhodeCode 1.1.5\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2012-10-02 11:23+0200\n" +"POT-Creation-Date: 2012-12-03 03:21+0100\n" "PO-Revision-Date: 2012-10-02 11:32+0100\n" "Last-Translator: Vincent Duvert \n" "Language-Team: fr \n" @@ -21,38 +21,36 @@ msgstr "" msgid "All Branches" msgstr "Toutes les branches" -#: rhodecode/controllers/changeset.py:83 +#: rhodecode/controllers/changeset.py:84 msgid "show white space" msgstr "Afficher les espaces et tabulations" -#: rhodecode/controllers/changeset.py:90 -#: rhodecode/controllers/changeset.py:97 +#: rhodecode/controllers/changeset.py:91 rhodecode/controllers/changeset.py:98 msgid "ignore white space" msgstr "Ignorer les espaces et tabulations" -#: rhodecode/controllers/changeset.py:157 +#: rhodecode/controllers/changeset.py:164 #, python-format msgid "%s line context" msgstr "Afficher %s lignes de contexte" -#: rhodecode/controllers/changeset.py:333 -#: rhodecode/controllers/changeset.py:348 -#: rhodecode/lib/diffs.py:71 -msgid "binary file" -msgstr "Fichier binaire" - -#: rhodecode/controllers/changeset.py:381 -#: rhodecode/controllers/pullrequests.py:376 +#: rhodecode/controllers/changeset.py:315 +#: rhodecode/controllers/pullrequests.py:411 #, python-format msgid "Status change -> %s" msgstr "Changement de statut -> %s" -#: rhodecode/controllers/changeset.py:412 -msgid "Changing status on a changeset associated witha closed pull request is not allowed" -msgstr "Le changement de statut d’un changeset associé à une pull request fermée n’est pas autorisé." - -#: rhodecode/controllers/compare.py:72 -#: rhodecode/controllers/pullrequests.py:114 +#: rhodecode/controllers/changeset.py:346 +msgid "" +"Changing status on a changeset associated witha closed pull request is " +"not allowed" +msgstr "" +"Le changement de statut d’un changeset associé à une pull request fermée " +"n’est pas autorisé." + +#: rhodecode/controllers/compare.py:75 +#: rhodecode/controllers/pullrequests.py:117 +#: rhodecode/controllers/shortlog.py:100 msgid "There are no changesets yet" msgstr "Il n’y a aucun changement pour le moment" @@ -62,7 +60,9 @@ msgstr "Accueil" #: rhodecode/controllers/error.py:98 msgid "The request could not be understood by the server due to malformed syntax." -msgstr "Le serveur n’a pas pu interpréter la requête à cause d’une erreur de syntaxe" +msgstr "" +"Le serveur n’a pas pu interpréter la requête à cause d’une erreur de " +"syntaxe" #: rhodecode/controllers/error.py:101 msgid "Unauthorized access to resource" @@ -77,124 +77,136 @@ msgid "The resource could not be found" msgstr "Ressource introuvable" #: rhodecode/controllers/error.py:107 -msgid "The server encountered an unexpected condition which prevented it from fulfilling the request." -msgstr "La requête n’a pu être traitée en raison d’une erreur survenue sur le serveur." - -#: rhodecode/controllers/feed.py:49 +msgid "" +"The server encountered an unexpected condition which prevented it from " +"fulfilling the request." +msgstr "" +"La requête n’a pu être traitée en raison d’une erreur survenue sur le " +"serveur." + +#: rhodecode/controllers/feed.py:52 #, python-format msgid "Changes on %s repository" msgstr "Changements sur le dépôt %s" -#: rhodecode/controllers/feed.py:50 +#: rhodecode/controllers/feed.py:53 #, python-format msgid "%s %s feed" msgstr "Flux %s de %s" -#: rhodecode/controllers/feed.py:67 -#: rhodecode/templates/changeset/changeset.html:119 +#: rhodecode/controllers/feed.py:86 +#: rhodecode/templates/changeset/changeset.html:126 +#: rhodecode/templates/changeset/changeset.html:138 +#: rhodecode/templates/compare/compare_diff.html:62 +#: rhodecode/templates/compare/compare_diff.html:73 +#: rhodecode/templates/pullrequests/pullrequest_show.html:94 +#: rhodecode/templates/pullrequests/pullrequest_show.html:153 msgid "Changeset was too big and was cut off..." msgstr "Cet ensemble de changements était trop important et a été découpé…" -#: rhodecode/controllers/feed.py:81 +#: rhodecode/controllers/feed.py:92 msgid "commited on" msgstr "a commité, le" -#: rhodecode/controllers/files.py:84 +#: rhodecode/controllers/files.py:86 msgid "click here to add new file" msgstr "Ajouter un nouveau fichier" -#: rhodecode/controllers/files.py:85 +#: rhodecode/controllers/files.py:87 #, python-format msgid "There are no files yet %s" msgstr "Il n’y a pas encore de fichiers %s" -#: rhodecode/controllers/files.py:239 -#: rhodecode/controllers/files.py:299 +#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325 #, python-format msgid "This repository is has been locked by %s on %s" msgstr "Ce dépôt a été verrouillé par %s sur %s." -#: rhodecode/controllers/files.py:266 +#: rhodecode/controllers/files.py:292 #, python-format msgid "Edited %s via RhodeCode" msgstr "%s édité via RhodeCode" -#: rhodecode/controllers/files.py:271 +#: rhodecode/controllers/files.py:297 msgid "No changes" msgstr "Aucun changement" -#: rhodecode/controllers/files.py:282 -#: rhodecode/controllers/files.py:346 +#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372 #, python-format msgid "Successfully committed to %s" msgstr "Commit réalisé avec succès sur %s" -#: rhodecode/controllers/files.py:287 -#: rhodecode/controllers/files.py:352 +#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378 msgid "Error occurred during commit" msgstr "Une erreur est survenue durant le commit" -#: rhodecode/controllers/files.py:318 +#: rhodecode/controllers/files.py:344 #, python-format msgid "Added %s via RhodeCode" msgstr "%s ajouté par RhodeCode" -#: rhodecode/controllers/files.py:332 +#: rhodecode/controllers/files.py:358 msgid "No content" msgstr "Aucun contenu" -#: rhodecode/controllers/files.py:336 +#: rhodecode/controllers/files.py:362 msgid "No filename" msgstr "Aucun nom de fichier" -#: rhodecode/controllers/files.py:378 +#: rhodecode/controllers/files.py:404 msgid "downloads disabled" msgstr "Les téléchargements sont désactivés" -#: rhodecode/controllers/files.py:389 +#: rhodecode/controllers/files.py:415 #, python-format msgid "Unknown revision %s" msgstr "Révision %s inconnue." -#: rhodecode/controllers/files.py:391 +#: rhodecode/controllers/files.py:417 msgid "Empty repository" msgstr "Dépôt vide." -#: rhodecode/controllers/files.py:393 +#: rhodecode/controllers/files.py:419 msgid "Unknown archive type" msgstr "Type d’archive inconnu" -#: rhodecode/controllers/files.py:494 +#: rhodecode/controllers/files.py:564 #: rhodecode/templates/changeset/changeset_range.html:13 #: rhodecode/templates/changeset/changeset_range.html:31 msgid "Changesets" msgstr "Changesets" -#: rhodecode/controllers/files.py:495 -#: rhodecode/controllers/pullrequests.py:73 -#: rhodecode/controllers/summary.py:236 -#: rhodecode/model/scm.py:543 +#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:76 +#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550 msgid "Branches" msgstr "Branches" -#: rhodecode/controllers/files.py:496 -#: rhodecode/controllers/pullrequests.py:77 -#: rhodecode/controllers/summary.py:237 -#: rhodecode/model/scm.py:554 +#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:80 +#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561 msgid "Tags" msgstr "Tags" -#: rhodecode/controllers/forks.py:74 -#: rhodecode/controllers/admin/repos.py:90 +#: rhodecode/controllers/forks.py:74 rhodecode/controllers/admin/repos.py:92 #, 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 "Le dépôt %s n’est pas représenté dans la base de données. Il a probablement été créé ou renommé manuellement. Veuillez relancer l’application pour rescanner les dépôts." - -#: rhodecode/controllers/forks.py:134 -#: rhodecode/controllers/settings.py:73 +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 "" +"Le dépôt %s n’est pas représenté dans la base de données. Il a " +"probablement été créé ou renommé manuellement. Veuillez relancer " +"l’application pour rescanner les dépôts." + +#: rhodecode/controllers/forks.py:134 rhodecode/controllers/settings.py:73 #, python-format -msgid "%s repository is not mapped to db perhaps it was created or renamed from the file system please run the application again in order to rescan repositories" -msgstr "Le dépôt %s n’est pas représenté dans la base de données. Il a probablement été créé ou renommé manuellement. Veuillez relancer l’application pour rescanner les dépôts." +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 "" +"Le dépôt %s n’est pas représenté dans la base de données. Il a " +"probablement été créé ou renommé manuellement. Veuillez relancer " +"l’application pour rescanner les dépôts." #: rhodecode/controllers/forks.py:168 #, python-format @@ -206,14 +218,12 @@ msgstr "dépôt %s forké en tant que %s" msgid "An error occurred during repository forking %s" msgstr "Une erreur est survenue durant le fork du dépôt %s." -#: rhodecode/controllers/journal.py:203 -#: rhodecode/controllers/journal.py:240 +#: rhodecode/controllers/journal.py:206 rhodecode/controllers/journal.py:243 msgid "public journal" msgstr "Journal public" -#: rhodecode/controllers/journal.py:207 -#: rhodecode/controllers/journal.py:244 -#: rhodecode/templates/base/base.html:229 +#: rhodecode/controllers/journal.py:210 rhodecode/controllers/journal.py:247 +#: rhodecode/templates/base/base.html:232 msgid "journal" msgstr "Journal" @@ -226,95 +236,103 @@ msgid "Your password reset link was sent msgstr "Un lien de rénitialisation de votre mot de passe vous a été envoyé." #: rhodecode/controllers/login.py:184 -msgid "Your password reset was successful, new password has been sent to your email" -msgstr "Votre mot de passe a été réinitialisé. Votre nouveau mot de passe vous a été envoyé par e-mail." - -#: rhodecode/controllers/pullrequests.py:75 -#: rhodecode/model/scm.py:549 +msgid "" +"Your password reset was successful, new password has been sent to your " +"email" +msgstr "" +"Votre mot de passe a été réinitialisé. Votre nouveau mot de passe vous a " +"été envoyé par e-mail." + +#: rhodecode/controllers/pullrequests.py:78 rhodecode/model/scm.py:556 msgid "Bookmarks" msgstr "Signets" -#: rhodecode/controllers/pullrequests.py:182 +#: rhodecode/controllers/pullrequests.py:186 msgid "Pull request requires a title with min. 3 chars" msgstr "Les requêtes de pull nécessitent un titre d’au moins 3 caractères." -#: rhodecode/controllers/pullrequests.py:184 +#: rhodecode/controllers/pullrequests.py:188 msgid "error during creation of pull request" msgstr "Une erreur est survenue lors de la création de la requête de pull." -#: rhodecode/controllers/pullrequests.py:205 +#: rhodecode/controllers/pullrequests.py:220 msgid "Successfully opened new pull request" msgstr "La requête de pull a été ouverte avec succès." -#: rhodecode/controllers/pullrequests.py:208 +#: rhodecode/controllers/pullrequests.py:223 msgid "Error occurred during sending pull request" msgstr "Une erreur est survenue durant l’envoi de la requête de pull." -#: rhodecode/controllers/pullrequests.py:241 +#: rhodecode/controllers/pullrequests.py:256 msgid "Successfully deleted pull request" msgstr "La requête de pull a été supprimée avec succès." -#: rhodecode/controllers/search.py:132 +#: rhodecode/controllers/search.py:134 msgid "Invalid search query. Try quoting it." msgstr "Requête invalide. Essayer de la mettre entre guillemets." -#: rhodecode/controllers/search.py:137 +#: rhodecode/controllers/search.py:139 msgid "There is no index to search in. Please run whoosh indexer" -msgstr "L’index de recherche n’est pas présent. Veuillez exécuter l’indexeur de code Whoosh." - -#: rhodecode/controllers/search.py:141 +msgstr "" +"L’index de recherche n’est pas présent. Veuillez exécuter l’indexeur de " +"code Whoosh." + +#: rhodecode/controllers/search.py:143 msgid "An error occurred during this search operation" msgstr "Une erreur est survenue durant l’opération de recherche." #: rhodecode/controllers/settings.py:108 -#: rhodecode/controllers/admin/repos.py:266 +#: rhodecode/controllers/admin/repos.py:268 #, python-format msgid "Repository %s updated successfully" msgstr "Dépôt %s mis à jour avec succès." #: rhodecode/controllers/settings.py:126 -#: rhodecode/controllers/admin/repos.py:284 +#: rhodecode/controllers/admin/repos.py:286 #, python-format msgid "error occurred during update of repository %s" msgstr "Une erreur est survenue lors de la mise à jour du dépôt %s." #: rhodecode/controllers/settings.py:144 -#: rhodecode/controllers/admin/repos.py:302 +#: rhodecode/controllers/admin/repos.py:304 #, 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 "Le dépôt %s n’est pas représenté dans la base de données. Il a probablement été déplacé ou renommé manuellement. Veuillez relancer l’application pour rescanner les dépôts." +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 "" +"Le dépôt %s n’est pas représenté dans la base de données. Il a " +"probablement été déplacé ou renommé manuellement. Veuillez relancer " +"l’application pour rescanner les dépôts." #: rhodecode/controllers/settings.py:156 -#: rhodecode/controllers/admin/repos.py:314 +#: rhodecode/controllers/admin/repos.py:316 #, python-format msgid "deleted repository %s" msgstr "Dépôt %s supprimé" #: rhodecode/controllers/settings.py:160 -#: rhodecode/controllers/admin/repos.py:324 -#: rhodecode/controllers/admin/repos.py:330 +#: rhodecode/controllers/admin/repos.py:326 +#: rhodecode/controllers/admin/repos.py:332 #, python-format msgid "An error occurred during deletion of %s" msgstr "Erreur pendant la suppression de %s" #: rhodecode/controllers/settings.py:179 -#| msgid "unlock" msgid "unlocked" msgstr "déverrouillé" #: rhodecode/controllers/settings.py:182 -#| msgid "unlock" msgid "locked" msgstr "verrouillé" #: rhodecode/controllers/settings.py:184 #, python-format -#| msgid "forked %s repository as %s" msgid "Repository has been %s" msgstr "Le dépôt a été %s." #: rhodecode/controllers/settings.py:188 -#: rhodecode/controllers/admin/repos.py:422 +#: rhodecode/controllers/admin/repos.py:424 msgid "An error occurred during unlocking" msgstr "Une erreur est survenue durant le déverrouillage." @@ -323,10 +341,20 @@ msgid "No data loaded yet" msgstr "Aucune donnée actuellement disponible." #: rhodecode/controllers/summary.py:144 -#: rhodecode/templates/summary/summary.html:148 +#: rhodecode/templates/summary/summary.html:157 msgid "Statistics are disabled for this repository" msgstr "La mise à jour des statistiques est désactivée pour ce dépôt." +#: rhodecode/controllers/admin/defaults.py:96 +#, fuzzy +msgid "Default settings updated successfully" +msgstr "Mise à jour réussie des réglages LDAP" + +#: rhodecode/controllers/admin/defaults.py:110 +#, fuzzy +msgid "error occurred during update of defaults" +msgstr "Une erreur est survenue durant la mise à jour de l’utilisateur %s." + #: rhodecode/controllers/admin/ldap_settings.py:50 msgid "BASE" msgstr "Base" @@ -384,18 +412,23 @@ msgid "error occurred during update of l msgstr "Une erreur est survenue durant la mise à jour des réglages du LDAP." #: rhodecode/controllers/admin/permissions.py:59 +#: rhodecode/controllers/admin/permissions.py:63 msgid "None" msgstr "Aucun" #: rhodecode/controllers/admin/permissions.py:60 +#: rhodecode/controllers/admin/permissions.py:64 msgid "Read" msgstr "Lire" #: rhodecode/controllers/admin/permissions.py:61 +#: rhodecode/controllers/admin/permissions.py:65 msgid "Write" msgstr "Écrire" #: rhodecode/controllers/admin/permissions.py:62 +#: rhodecode/controllers/admin/permissions.py:66 +#: rhodecode/templates/admin/defaults/defaults.html:9 #: rhodecode/templates/admin/ldap/ldap.html:9 #: rhodecode/templates/admin/permissions/permissions.html:9 #: rhodecode/templates/admin/repos/repo_add.html:9 @@ -408,226 +441,235 @@ msgstr "Écrire" #: rhodecode/templates/admin/settings/settings.html:9 #: rhodecode/templates/admin/users/user_add.html:8 #: rhodecode/templates/admin/users/user_edit.html:9 -#: rhodecode/templates/admin/users/user_edit.html:122 +#: rhodecode/templates/admin/users/user_edit.html:126 #: rhodecode/templates/admin/users/users.html:9 #: rhodecode/templates/admin/users_groups/users_group_add.html:8 #: rhodecode/templates/admin/users_groups/users_group_edit.html:9 #: rhodecode/templates/admin/users_groups/users_groups.html:9 #: rhodecode/templates/base/base.html:197 -#: rhodecode/templates/base/base.html:346 -#: rhodecode/templates/base/base.html:348 #: rhodecode/templates/base/base.html:350 +#: rhodecode/templates/base/base.html:352 +#: rhodecode/templates/base/base.html:354 msgid "Admin" msgstr "Administration" -#: rhodecode/controllers/admin/permissions.py:65 +#: rhodecode/controllers/admin/permissions.py:69 msgid "disabled" msgstr "Désactivé" -#: rhodecode/controllers/admin/permissions.py:67 -msgid "allowed with manual account activation" -msgstr "Autorisé avec activation manuelle du compte" - -#: rhodecode/controllers/admin/permissions.py:69 -msgid "allowed with automatic account activation" -msgstr "Autorisé avec activation automatique du compte" - #: rhodecode/controllers/admin/permissions.py:71 -#: rhodecode/controllers/admin/permissions.py:74 +msgid "allowed with manual account activation" +msgstr "Autorisé avec activation manuelle du compte" + +#: rhodecode/controllers/admin/permissions.py:73 +msgid "allowed with automatic account activation" +msgstr "Autorisé avec activation automatique du compte" + +#: rhodecode/controllers/admin/permissions.py:75 +#: rhodecode/controllers/admin/permissions.py:78 msgid "Disabled" msgstr "Interdite" -#: rhodecode/controllers/admin/permissions.py:72 -#: rhodecode/controllers/admin/permissions.py:75 +#: rhodecode/controllers/admin/permissions.py:76 +#: rhodecode/controllers/admin/permissions.py:79 msgid "Enabled" msgstr "Autorisée" -#: rhodecode/controllers/admin/permissions.py:116 +#: rhodecode/controllers/admin/permissions.py:122 msgid "Default permissions updated successfully" msgstr "Permissions par défaut mises à jour avec succès" -#: rhodecode/controllers/admin/permissions.py:130 +#: rhodecode/controllers/admin/permissions.py:136 msgid "error occurred during update of permissions" msgstr "erreur pendant la mise à jour des permissions" -#: rhodecode/controllers/admin/repos.py:123 +#: rhodecode/controllers/admin/repos.py:125 msgid "--REMOVE FORK--" msgstr "[Pas un fork]" -#: rhodecode/controllers/admin/repos.py:192 +#: rhodecode/controllers/admin/repos.py:194 #, python-format msgid "created repository %s from %s" msgstr "Le dépôt %s a été créé depuis %s." -#: rhodecode/controllers/admin/repos.py:196 +#: rhodecode/controllers/admin/repos.py:198 #, python-format msgid "created repository %s" msgstr "Le dépôt %s a été créé." -#: rhodecode/controllers/admin/repos.py:227 +#: rhodecode/controllers/admin/repos.py:229 #, python-format msgid "error occurred during creation of repository %s" msgstr "Une erreur est survenue durant la création du dépôt %s." -#: rhodecode/controllers/admin/repos.py:319 +#: rhodecode/controllers/admin/repos.py:321 #, python-format msgid "Cannot delete %s it still contains attached forks" msgstr "Impossible de supprimer le dépôt %s : Des forks y sont attachés." -#: rhodecode/controllers/admin/repos.py:348 +#: rhodecode/controllers/admin/repos.py:350 msgid "An error occurred during deletion of repository user" msgstr "Une erreur est survenue durant la suppression de l’utilisateur du dépôt." -#: rhodecode/controllers/admin/repos.py:367 +#: rhodecode/controllers/admin/repos.py:369 msgid "An error occurred during deletion of repository users groups" -msgstr "Une erreur est survenue durant la suppression du groupe d’utilisateurs de ce dépôt." - -#: rhodecode/controllers/admin/repos.py:385 +msgstr "" +"Une erreur est survenue durant la suppression du groupe d’utilisateurs de" +" ce dépôt." + +#: rhodecode/controllers/admin/repos.py:387 msgid "An error occurred during deletion of repository stats" msgstr "Une erreur est survenue durant la suppression des statistiques du dépôt." -#: rhodecode/controllers/admin/repos.py:402 +#: rhodecode/controllers/admin/repos.py:404 msgid "An error occurred during cache invalidation" msgstr "Une erreur est survenue durant l’invalidation du cache." -#: rhodecode/controllers/admin/repos.py:442 +#: rhodecode/controllers/admin/repos.py:444 msgid "Updated repository visibility in public journal" msgstr "La visibilité du dépôt dans le journal public a été mise à jour." -#: rhodecode/controllers/admin/repos.py:446 +#: rhodecode/controllers/admin/repos.py:448 msgid "An error occurred during setting this repository in public journal" -msgstr "Une erreur est survenue durant la configuration du journal public pour ce dépôt." - -#: rhodecode/controllers/admin/repos.py:451 -#: rhodecode/model/validators.py:300 +msgstr "" +"Une erreur est survenue durant la configuration du journal public pour ce" +" dépôt." + +#: rhodecode/controllers/admin/repos.py:453 rhodecode/model/validators.py:300 msgid "Token mismatch" msgstr "Jeton d’authentification incorrect." -#: rhodecode/controllers/admin/repos.py:464 +#: rhodecode/controllers/admin/repos.py:466 msgid "Pulled from remote location" msgstr "Les changements distants ont été récupérés." -#: rhodecode/controllers/admin/repos.py:466 +#: rhodecode/controllers/admin/repos.py:468 msgid "An error occurred during pull from remote location" msgstr "Une erreur est survenue durant le pull depuis la source distante." -#: rhodecode/controllers/admin/repos.py:482 +#: rhodecode/controllers/admin/repos.py:484 msgid "Nothing" msgstr "[Aucun dépôt]" -#: rhodecode/controllers/admin/repos.py:484 +#: rhodecode/controllers/admin/repos.py:486 #, python-format msgid "Marked repo %s as fork of %s" msgstr "Le dépôt %s a été marké comme fork de %s" -#: rhodecode/controllers/admin/repos.py:488 +#: rhodecode/controllers/admin/repos.py:490 msgid "An error occurred during this operation" msgstr "Une erreur est survenue durant cette opération." -#: rhodecode/controllers/admin/repos_groups.py:117 +#: rhodecode/controllers/admin/repos_groups.py:120 #, python-format msgid "created repos group %s" msgstr "Le groupe de dépôts %s a été créé." -#: rhodecode/controllers/admin/repos_groups.py:130 +#: rhodecode/controllers/admin/repos_groups.py:133 #, python-format msgid "error occurred during creation of repos group %s" msgstr "Une erreur est survenue durant la création du groupe de dépôts %s." -#: rhodecode/controllers/admin/repos_groups.py:164 +#: rhodecode/controllers/admin/repos_groups.py:167 #, python-format msgid "updated repos group %s" msgstr "Le groupe de dépôts %s a été mis à jour." -#: rhodecode/controllers/admin/repos_groups.py:177 +#: rhodecode/controllers/admin/repos_groups.py:180 #, python-format msgid "error occurred during update of repos group %s" msgstr "Une erreur est survenue durant la mise à jour du groupe de dépôts %s." -#: rhodecode/controllers/admin/repos_groups.py:195 +#: rhodecode/controllers/admin/repos_groups.py:198 #, python-format msgid "This group contains %s repositores and cannot be deleted" msgstr "Ce groupe contient %s dépôts et ne peut être supprimé." -#: rhodecode/controllers/admin/repos_groups.py:203 +#: rhodecode/controllers/admin/repos_groups.py:206 #, python-format msgid "removed repos group %s" msgstr "Le groupe de dépôts %s a été supprimé." -#: rhodecode/controllers/admin/repos_groups.py:209 +#: rhodecode/controllers/admin/repos_groups.py:212 msgid "Cannot delete this group it still contains subgroups" msgstr "Impossible de supprimer ce groupe : Il contient des sous-groupes." -#: rhodecode/controllers/admin/repos_groups.py:214 -#: rhodecode/controllers/admin/repos_groups.py:219 +#: rhodecode/controllers/admin/repos_groups.py:217 +#: rhodecode/controllers/admin/repos_groups.py:222 #, python-format msgid "error occurred during deletion of repos group %s" msgstr "Une erreur est survenue durant la suppression du groupe de dépôts %s." -#: rhodecode/controllers/admin/repos_groups.py:240 +#: rhodecode/controllers/admin/repos_groups.py:243 msgid "An error occurred during deletion of group user" -msgstr "Une erreur est survenue durant la suppression de l’utilisateur du groupe de dépôts." - -#: rhodecode/controllers/admin/repos_groups.py:261 +msgstr "" +"Une erreur est survenue durant la suppression de l’utilisateur du groupe " +"de dépôts." + +#: rhodecode/controllers/admin/repos_groups.py:264 msgid "An error occurred during deletion of group users groups" -msgstr "Une erreur est survenue durant la suppression du groupe d’utilisateurs du groupe de dépôts." - -#: rhodecode/controllers/admin/settings.py:122 +msgstr "" +"Une erreur est survenue durant la suppression du groupe d’utilisateurs du" +" groupe de dépôts." + +#: rhodecode/controllers/admin/settings.py:123 #, python-format msgid "Repositories successfully rescanned added: %s,removed: %s" msgstr "Après re-scan : %s ajouté(s), %s enlevé(s)" -#: rhodecode/controllers/admin/settings.py:130 +#: rhodecode/controllers/admin/settings.py:131 msgid "Whoosh reindex task scheduled" msgstr "La tâche de réindexation Whoosh a été planifiée." -#: rhodecode/controllers/admin/settings.py:161 +#: rhodecode/controllers/admin/settings.py:162 msgid "Updated application settings" msgstr "Réglages mis à jour" -#: rhodecode/controllers/admin/settings.py:165 -#: rhodecode/controllers/admin/settings.py:293 +#: rhodecode/controllers/admin/settings.py:166 +#: rhodecode/controllers/admin/settings.py:299 msgid "error occurred during updating application settings" msgstr "Une erreur est survenue durant la mise à jour des options." -#: rhodecode/controllers/admin/settings.py:201 +#: rhodecode/controllers/admin/settings.py:207 msgid "Updated visualisation settings" msgstr "Réglages d’affichage mis à jour." -#: rhodecode/controllers/admin/settings.py:206 +#: rhodecode/controllers/admin/settings.py:212 msgid "error occurred during updating visualisation settings" msgstr "Une erreur est survenue durant la mise à jour des réglages d’affichages." -#: rhodecode/controllers/admin/settings.py:289 +#: rhodecode/controllers/admin/settings.py:295 msgid "Updated VCS settings" msgstr "Réglages des gestionnaires de versions mis à jour." -#: rhodecode/controllers/admin/settings.py:303 +#: rhodecode/controllers/admin/settings.py:309 msgid "Added new hook" msgstr "Le nouveau hook a été ajouté." -#: rhodecode/controllers/admin/settings.py:315 +#: rhodecode/controllers/admin/settings.py:321 msgid "Updated hooks" msgstr "Hooks mis à jour" -#: rhodecode/controllers/admin/settings.py:319 +#: rhodecode/controllers/admin/settings.py:325 msgid "error occurred during hook creation" msgstr "Une erreur est survenue durant la création du hook." -#: rhodecode/controllers/admin/settings.py:338 +#: rhodecode/controllers/admin/settings.py:344 msgid "Email task created" msgstr "La tâche d’e-mail a été créée." -#: rhodecode/controllers/admin/settings.py:393 +#: rhodecode/controllers/admin/settings.py:399 msgid "You can't edit this user since it's crucial for entire application" -msgstr "Vous ne pouvez pas éditer cet utilisateur ; il est nécessaire pour le bon fonctionnement de l’application." - -#: rhodecode/controllers/admin/settings.py:424 +msgstr "" +"Vous ne pouvez pas éditer cet utilisateur ; il est nécessaire pour le bon" +" fonctionnement de l’application." + +#: rhodecode/controllers/admin/settings.py:430 msgid "Your account was updated successfully" msgstr "Votre compte a été mis à jour avec succès" -#: rhodecode/controllers/admin/settings.py:439 -#: rhodecode/controllers/admin/users.py:191 +#: rhodecode/controllers/admin/settings.py:445 +#: rhodecode/controllers/admin/users.py:196 #, python-format msgid "error occurred during update of user %s" msgstr "Une erreur est survenue durant la mise à jour de l’utilisateur %s." @@ -642,97 +684,101 @@ msgstr "utilisateur %s créé" msgid "error occurred during creation of user %s" msgstr "Une erreur est survenue durant la création de l’utilisateur %s." -#: rhodecode/controllers/admin/users.py:171 +#: rhodecode/controllers/admin/users.py:176 msgid "User updated successfully" msgstr "L’utilisateur a été mis à jour avec succès." -#: rhodecode/controllers/admin/users.py:207 -msgid "successfully deleted user" -msgstr "L’utilisateur a été supprimé avec succès." - #: rhodecode/controllers/admin/users.py:212 +msgid "successfully deleted user" +msgstr "L’utilisateur a été supprimé avec succès." + +#: rhodecode/controllers/admin/users.py:217 msgid "An error occurred during deletion of user" msgstr "Une erreur est survenue durant la suppression de l’utilisateur." -#: rhodecode/controllers/admin/users.py:226 +#: rhodecode/controllers/admin/users.py:231 msgid "You can't edit this user" msgstr "Vous ne pouvez pas éditer cet utilisateur" -#: rhodecode/controllers/admin/users.py:266 +#: rhodecode/controllers/admin/users.py:272 msgid "Granted 'repository create' permission to user" msgstr "La permission de création de dépôts a été accordée à l’utilisateur." -#: rhodecode/controllers/admin/users.py:271 +#: rhodecode/controllers/admin/users.py:277 msgid "Revoked 'repository create' permission to user" msgstr "La permission de création de dépôts a été révoquée à l’utilisateur." -#: rhodecode/controllers/admin/users.py:277 +#: rhodecode/controllers/admin/users.py:283 msgid "Granted 'repository fork' permission to user" msgstr "La permission de fork de dépôts a été accordée à l’utilisateur." -#: rhodecode/controllers/admin/users.py:282 +#: rhodecode/controllers/admin/users.py:288 msgid "Revoked 'repository fork' permission to user" msgstr "La permission de fork de dépôts a été révoquée à l’utilisateur." -#: rhodecode/controllers/admin/users.py:288 -#: rhodecode/controllers/admin/users_groups.py:255 +#: rhodecode/controllers/admin/users.py:294 +#: rhodecode/controllers/admin/users_groups.py:279 msgid "An error occurred during permissions saving" msgstr "Une erreur est survenue durant l’enregistrement des permissions." -#: rhodecode/controllers/admin/users.py:303 +#: rhodecode/controllers/admin/users.py:309 #, python-format msgid "Added email %s to user" msgstr "L’e-mail « %s » a été ajouté à l’utilisateur." -#: rhodecode/controllers/admin/users.py:309 +#: rhodecode/controllers/admin/users.py:315 msgid "An error occurred during email saving" msgstr "Une erreur est survenue durant l’enregistrement de l’e-mail." -#: rhodecode/controllers/admin/users.py:319 +#: rhodecode/controllers/admin/users.py:325 msgid "Removed email from user" msgstr "L’e-mail a été enlevé de l’utilisateur." -#: rhodecode/controllers/admin/users_groups.py:84 +#: rhodecode/controllers/admin/users_groups.py:86 #, python-format msgid "created users group %s" msgstr "Le groupe d’utilisateurs %s a été créé." -#: rhodecode/controllers/admin/users_groups.py:95 +#: rhodecode/controllers/admin/users_groups.py:97 #, python-format msgid "error occurred during creation of users group %s" msgstr "Une erreur est survenue durant la création du groupe d’utilisateurs %s." -#: rhodecode/controllers/admin/users_groups.py:135 +#: rhodecode/controllers/admin/users_groups.py:164 #, python-format msgid "updated users group %s" msgstr "Le groupe d’utilisateurs %s a été mis à jour." -#: rhodecode/controllers/admin/users_groups.py:157 +#: rhodecode/controllers/admin/users_groups.py:186 #, python-format msgid "error occurred during update of users group %s" msgstr "Une erreur est survenue durant la mise à jour du groupe d’utilisateurs %s." -#: rhodecode/controllers/admin/users_groups.py:174 +#: rhodecode/controllers/admin/users_groups.py:203 msgid "successfully deleted users group" msgstr "Le groupe d’utilisateurs a été supprimé avec succès." -#: rhodecode/controllers/admin/users_groups.py:179 +#: rhodecode/controllers/admin/users_groups.py:208 msgid "An error occurred during deletion of users group" msgstr "Une erreur est survenue lors de la suppression du groupe d’utilisateurs." -#: rhodecode/controllers/admin/users_groups.py:233 +#: rhodecode/controllers/admin/users_groups.py:257 msgid "Granted 'repository create' permission to users group" -msgstr "La permission de création de dépôts a été accordée au groupe d’utilisateurs." - -#: rhodecode/controllers/admin/users_groups.py:238 +msgstr "" +"La permission de création de dépôts a été accordée au groupe " +"d’utilisateurs." + +#: rhodecode/controllers/admin/users_groups.py:262 msgid "Revoked 'repository create' permission to users group" -msgstr "La permission de création de dépôts a été révoquée au groupe d’utilisateurs." - -#: rhodecode/controllers/admin/users_groups.py:244 +msgstr "" +"La permission de création de dépôts a été révoquée au groupe " +"d’utilisateurs." + +#: rhodecode/controllers/admin/users_groups.py:268 msgid "Granted 'repository fork' permission to users group" msgstr "La permission de fork de dépôts a été accordée au groupe d’utilisateur." -#: rhodecode/controllers/admin/users_groups.py:249 +#: rhodecode/controllers/admin/users_groups.py:273 msgid "Revoked 'repository fork' permission to users group" msgstr "La permission de fork de dépôts a été révoquée au groupe d’utilisateurs." @@ -744,11 +790,17 @@ msgstr "Vous devez être un utilisateur enregistré pour effectuer cette action." msgid "You need to be a signed in to view this page" msgstr "Vous devez être connecté pour visualiser cette page." -#: rhodecode/lib/diffs.py:87 +#: rhodecode/lib/diffs.py:74 +msgid "binary file" +msgstr "Fichier binaire" + +#: rhodecode/lib/diffs.py:90 msgid "Changeset was too big and was cut off, use diff menu to display this diff" -msgstr "Cet ensemble de changements était trop gros pour être affiché et a été découpé, utilisez le menu « Diff » pour afficher les différences." - -#: rhodecode/lib/diffs.py:97 +msgstr "" +"Cet ensemble de changements était trop gros pour être affiché et a été " +"découpé, utilisez le menu « Diff » pour afficher les différences." + +#: rhodecode/lib/diffs.py:100 msgid "No changes detected" msgstr "Aucun changement détecté." @@ -765,192 +817,289 @@ msgstr "Vrai" msgid "False" msgstr "Faux" -#: rhodecode/lib/helpers.py:533 +#: rhodecode/lib/helpers.py:529 +#, fuzzy, python-format +msgid "Deleted branch: %s" +msgstr "Dépôt %s supprimé" + +#: rhodecode/lib/helpers.py:532 +#, fuzzy, python-format +msgid "Created tag: %s" +msgstr "utilisateur %s créé" + +#: rhodecode/lib/helpers.py:545 msgid "Changeset not found" msgstr "Ensemble de changements non trouvé" -#: rhodecode/lib/helpers.py:556 +#: rhodecode/lib/helpers.py:588 #, python-format msgid "Show all combined changesets %s->%s" msgstr "Afficher les changements combinés %s->%s" -#: rhodecode/lib/helpers.py:562 +#: rhodecode/lib/helpers.py:594 msgid "compare view" msgstr "vue de comparaison" -#: rhodecode/lib/helpers.py:582 +#: rhodecode/lib/helpers.py:614 msgid "and" msgstr "et" -#: rhodecode/lib/helpers.py:583 +#: rhodecode/lib/helpers.py:615 #, python-format msgid "%s more" msgstr "%s de plus" -#: rhodecode/lib/helpers.py:584 -#: rhodecode/templates/changelog/changelog.html:49 +#: rhodecode/lib/helpers.py:616 rhodecode/templates/changelog/changelog.html:51 msgid "revisions" msgstr "révisions" -#: rhodecode/lib/helpers.py:607 -msgid "fork name " -msgstr "Nom du fork" - -#: rhodecode/lib/helpers.py:621 +#: rhodecode/lib/helpers.py:640 +#, fuzzy, python-format +msgid "fork name %s" +msgstr "Nom du fork %s" + +#: rhodecode/lib/helpers.py:653 #: rhodecode/templates/pullrequests/pullrequest_show.html:4 #: rhodecode/templates/pullrequests/pullrequest_show.html:12 #, python-format msgid "Pull request #%s" -msgstr "Requête de pull nº%s" - -#: rhodecode/lib/helpers.py:627 +msgstr "Requête de pull #%s" + +#: rhodecode/lib/helpers.py:659 msgid "[deleted] repository" msgstr "[a supprimé] le dépôt" -#: rhodecode/lib/helpers.py:629 -#: rhodecode/lib/helpers.py:639 +#: rhodecode/lib/helpers.py:661 rhodecode/lib/helpers.py:671 msgid "[created] repository" msgstr "[a créé] le dépôt" -#: rhodecode/lib/helpers.py:631 +#: rhodecode/lib/helpers.py:663 msgid "[created] repository as fork" msgstr "[a créé] le dépôt en tant que fork" -#: rhodecode/lib/helpers.py:633 -#: rhodecode/lib/helpers.py:641 +#: rhodecode/lib/helpers.py:665 rhodecode/lib/helpers.py:673 msgid "[forked] repository" msgstr "[a forké] le dépôt" -#: rhodecode/lib/helpers.py:635 -#: rhodecode/lib/helpers.py:643 +#: rhodecode/lib/helpers.py:667 rhodecode/lib/helpers.py:675 msgid "[updated] repository" msgstr "[a mis à jour] le dépôt" -#: rhodecode/lib/helpers.py:637 +#: rhodecode/lib/helpers.py:669 msgid "[delete] repository" msgstr "[a supprimé] le dépôt" -#: rhodecode/lib/helpers.py:645 +#: rhodecode/lib/helpers.py:677 msgid "[created] user" msgstr "[a créé] l’utilisateur" -#: rhodecode/lib/helpers.py:647 +#: rhodecode/lib/helpers.py:679 msgid "[updated] user" msgstr "[a mis à jour] l’utilisateur" -#: rhodecode/lib/helpers.py:649 +#: rhodecode/lib/helpers.py:681 msgid "[created] users group" msgstr "[a créé] le groupe d’utilisateurs" -#: rhodecode/lib/helpers.py:651 +#: rhodecode/lib/helpers.py:683 msgid "[updated] users group" msgstr "[a mis à jour] le groupe d’utilisateurs" -#: rhodecode/lib/helpers.py:653 +#: rhodecode/lib/helpers.py:685 msgid "[commented] on revision in repository" msgstr "[a commenté] une révision du dépôt" -#: rhodecode/lib/helpers.py:655 +#: rhodecode/lib/helpers.py:687 msgid "[commented] on pull request for" msgstr "[a commenté] la requête de pull pour" -#: rhodecode/lib/helpers.py:657 +#: rhodecode/lib/helpers.py:689 msgid "[closed] pull request for" msgstr "[a fermé] la requête de pull de" -#: rhodecode/lib/helpers.py:659 +#: rhodecode/lib/helpers.py:691 msgid "[pushed] into" msgstr "[a pushé] dans" -#: rhodecode/lib/helpers.py:661 +#: rhodecode/lib/helpers.py:693 msgid "[committed via RhodeCode] into repository" msgstr "[a commité via RhodeCode] dans le dépôt" -#: rhodecode/lib/helpers.py:663 +#: rhodecode/lib/helpers.py:695 msgid "[pulled from remote] into repository" msgstr "[a pullé depuis un site distant] dans le dépôt" -#: rhodecode/lib/helpers.py:665 +#: rhodecode/lib/helpers.py:697 msgid "[pulled] from" msgstr "[a pullé] depuis" -#: rhodecode/lib/helpers.py:667 +#: rhodecode/lib/helpers.py:699 msgid "[started following] repository" msgstr "[suit maintenant] le dépôt" -#: rhodecode/lib/helpers.py:669 +#: rhodecode/lib/helpers.py:701 msgid "[stopped following] repository" msgstr "[ne suit plus] le dépôt" -#: rhodecode/lib/helpers.py:845 +#: rhodecode/lib/helpers.py:877 #, python-format msgid " and %s more" msgstr "et %s de plus" -#: rhodecode/lib/helpers.py:849 +#: rhodecode/lib/helpers.py:881 msgid "No Files" msgstr "Aucun fichier" -#: rhodecode/lib/utils2.py:352 +#: rhodecode/lib/utils2.py:403 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d an" msgstr[1] "%d ans" -#: rhodecode/lib/utils2.py:353 +#: rhodecode/lib/utils2.py:404 #, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "%d mois" msgstr[1] "%d mois" -#: rhodecode/lib/utils2.py:354 +#: rhodecode/lib/utils2.py:405 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d jour" msgstr[1] "%d jours" -#: rhodecode/lib/utils2.py:355 +#: rhodecode/lib/utils2.py:406 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d heure" msgstr[1] "%d heures" -#: rhodecode/lib/utils2.py:356 +#: rhodecode/lib/utils2.py:407 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minute" msgstr[1] "%d minutes" -#: rhodecode/lib/utils2.py:357 +#: rhodecode/lib/utils2.py:408 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d seconde" msgstr[1] "%d secondes" -#: rhodecode/lib/utils2.py:372 +#: rhodecode/lib/utils2.py:424 +#, fuzzy, python-format +msgid "in %s" +msgstr "à la ligne %s" + +#: rhodecode/lib/utils2.py:426 #, python-format msgid "%s ago" msgstr "Il y a %s" -#: rhodecode/lib/utils2.py:374 +#: rhodecode/lib/utils2.py:428 +#, fuzzy, python-format +msgid "in %s and %s" +msgstr "Il y a %s et %s" + +#: rhodecode/lib/utils2.py:431 #, python-format msgid "%s and %s ago" msgstr "Il y a %s et %s" -#: rhodecode/lib/utils2.py:377 +#: rhodecode/lib/utils2.py:434 msgid "just now" msgstr "à l’instant" -#: rhodecode/lib/celerylib/tasks.py:269 +#: rhodecode/lib/celerylib/tasks.py:270 msgid "password reset link" msgstr "Réinitialisation du mot de passe" +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 rhodecode/model/db.py:1180 +msgid "Repository no access" +msgstr "Aucun accès au dépôt" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1181 +msgid "Repository read access" +msgstr "Accès en lecture au dépôt" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1182 +msgid "Repository write access" +msgstr "Accès en écriture au dépôt" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1183 +msgid "Repository admin access" +msgstr "Accès administrateur au dépôt" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1185 +msgid "Repositories Group no access" +msgstr "Aucun accès au groupe de dépôts" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1186 +msgid "Repositories Group read access" +msgstr "Accès en lecture au groupe de dépôts" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1187 +msgid "Repositories Group write access" +msgstr "Accès en écriture au groupe de dépôts" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1188 +msgid "Repositories Group admin access" +msgstr "Accès administrateur au groupe de dépôts" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1190 +msgid "RhodeCode Administrator" +msgstr "Administrateur RhodeCode" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1191 +msgid "Repository creation disabled" +msgstr "Création de dépôt désactivée" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1192 +msgid "Repository creation enabled" +msgstr "Création de dépôt activée" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1193 +msgid "Repository forking disabled" +msgstr "Fork de dépôt désactivé" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1194 +msgid "Repository forking enabled" +msgstr "Fork de dépôt activé" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1195 +msgid "Register disabled" +msgstr "Enregistrement désactivé" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1196 +msgid "Register new user with RhodeCode with manual activation" +msgstr "Enregistrer un nouvel utilisateur Rhodecode manuellement activé" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1199 +msgid "Register new user with RhodeCode with auto activation" +msgstr "Enregistrer un nouvel utilisateur Rhodecode auto-activé" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1640 +msgid "Not Reviewed" +msgstr "Pas encore relue" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1641 +msgid "Approved" +msgstr "Approuvée " + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1642 +msgid "Rejected" +msgstr "Rejetée" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1643 +msgid "Under Review" +msgstr "En cours de relecture" + #: rhodecode/model/comment.py:110 #, python-format msgid "on line %s" @@ -960,86 +1109,6 @@ msgstr "à la ligne %s" msgid "[Mention]" msgstr "[Mention]" -#: rhodecode/model/db.py:1164 -msgid "Repository no access" -msgstr "Aucun accès au dépôt" - -#: rhodecode/model/db.py:1165 -msgid "Repository read access" -msgstr "Accès en lecture au dépôt" - -#: rhodecode/model/db.py:1166 -msgid "Repository write access" -msgstr "Accès en écriture au dépôt" - -#: rhodecode/model/db.py:1167 -msgid "Repository admin access" -msgstr "Accès administrateur au dépôt" - -#: rhodecode/model/db.py:1169 -msgid "Repositories Group no access" -msgstr "Aucun accès au groupe de dépôts" - -#: rhodecode/model/db.py:1170 -msgid "Repositories Group read access" -msgstr "Accès en lecture au groupe de dépôts" - -#: rhodecode/model/db.py:1171 -msgid "Repositories Group write access" -msgstr "Accès en écriture au groupe de dépôts" - -#: rhodecode/model/db.py:1172 -msgid "Repositories Group admin access" -msgstr "Accès administrateur au groupe de dépôts" - -#: rhodecode/model/db.py:1174 -msgid "RhodeCode Administrator" -msgstr "Administrateur RhodeCode" - -#: rhodecode/model/db.py:1175 -msgid "Repository creation disabled" -msgstr "Création de dépôt désactivée" - -#: rhodecode/model/db.py:1176 -msgid "Repository creation enabled" -msgstr "Création de dépôt activée" - -#: rhodecode/model/db.py:1177 -msgid "Repository forking disabled" -msgstr "Fork de dépôt désactivé" - -#: rhodecode/model/db.py:1178 -msgid "Repository forking enabled" -msgstr "Fork de dépôt activé" - -#: rhodecode/model/db.py:1179 -msgid "Register disabled" -msgstr "Enregistrement désactivé" - -#: rhodecode/model/db.py:1180 -msgid "Register new user with RhodeCode with manual activation" -msgstr "Enregistrer un nouvel utilisateur Rhodecode manuellement activé" - -#: rhodecode/model/db.py:1183 -msgid "Register new user with RhodeCode with auto activation" -msgstr "Enregistrer un nouvel utilisateur Rhodecode auto-activé" - -#: rhodecode/model/db.py:1611 -msgid "Not Reviewed" -msgstr "Pas encore relue" - -#: rhodecode/model/db.py:1612 -msgid "Approved" -msgstr "Approuvée " - -#: rhodecode/model/db.py:1613 -msgid "Rejected" -msgstr "Rejetée" - -#: rhodecode/model/db.py:1614 -msgid "Under Review" -msgstr "En cours de relecture" - #: rhodecode/model/forms.py:43 msgid "Please enter a login" msgstr "Veuillez entrer un identifiant" @@ -1059,35 +1128,41 @@ msgid "Enter %(min)i characters or more" msgstr "Entrez au moins %(min)i caractères" #: rhodecode/model/notification.py:220 -msgid "commented on commit" -msgstr "a posté un commentaire sur le commit" +#, fuzzy, python-format +msgid "commented on commit at %(when)s" +msgstr "a posté un commentaire sur le commit %(when)s" #: rhodecode/model/notification.py:221 -msgid "sent message" -msgstr "a envoyé un message" +#, fuzzy, python-format +msgid "sent message at %(when)s" +msgstr "a envoyé un message %(when)s" #: rhodecode/model/notification.py:222 -msgid "mentioned you" -msgstr "vous a mentioné" +#, fuzzy, python-format +msgid "mentioned you at %(when)s" +msgstr "vous a mentioné %(when)s" #: rhodecode/model/notification.py:223 -msgid "registered in RhodeCode" -msgstr "s’est enregistré sur RhodeCode" +#, fuzzy, python-format +msgid "registered in RhodeCode at %(when)s" +msgstr "s’est enregistré sur RhodeCode %(when)s" #: rhodecode/model/notification.py:224 -msgid "opened new pull request" -msgstr "a ouvert une nouvelle requête de pull" +#, fuzzy, python-format +msgid "opened new pull request at %(when)s" +msgstr "a ouvert une nouvelle requête de pull %(when)s" #: rhodecode/model/notification.py:225 -msgid "commented on pull request" -msgstr "a commenté sur la requête de pull" - -#: rhodecode/model/pull_request.py:89 +#, fuzzy, python-format +msgid "commented on pull request at %(when)s" +msgstr "a commenté sur la requête de pull %(when)s" + +#: rhodecode/model/pull_request.py:90 #, python-format msgid "%(user)s wants you to review pull request #%(pr_id)s" msgstr "%(user)s voudrait que vous examiniez sa requête de pull nº%(pr_id)s" -#: rhodecode/model/scm.py:535 +#: rhodecode/model/scm.py:542 msgid "latest tip" msgstr "Dernier sommet" @@ -1095,23 +1170,29 @@ msgstr "Dernier sommet" msgid "new user registration" msgstr "Nouveau compte utilisateur enregistré" -#: rhodecode/model/user.py:255 -#: rhodecode/model/user.py:277 -#: rhodecode/model/user.py:299 +#: rhodecode/model/user.py:255 rhodecode/model/user.py:279 +#: rhodecode/model/user.py:301 msgid "You can't Edit this user since it's crucial for entire application" -msgstr "Vous ne pouvez pas éditer cet utilisateur ; il est nécessaire pour le bon fonctionnement de l’application." - -#: rhodecode/model/user.py:323 +msgstr "" +"Vous ne pouvez pas éditer cet utilisateur ; il est nécessaire pour le bon" +" fonctionnement de l’application." + +#: rhodecode/model/user.py:325 msgid "You can't remove this user since it's crucial for entire application" -msgstr "Vous ne pouvez pas supprimer cet utilisateur ; il est nécessaire pour le bon fonctionnement de l’application." - -#: rhodecode/model/user.py:329 +msgstr "" +"Vous ne pouvez pas supprimer cet utilisateur ; il est nécessaire pour le " +"bon fonctionnement de l’application." + +#: rhodecode/model/user.py:331 #, python-format -msgid "user \"%s\" still owns %s repositories and cannot be removed. Switch owners or remove those repositories. %s" -msgstr "L’utilisateur « %s » possède %s dépôts et ne peut être supprimé. Changez les propriétaires de ces dépôts. %s" - -#: rhodecode/model/validators.py:36 -#: rhodecode/model/validators.py:37 +msgid "" +"user \"%s\" still owns %s repositories and cannot be removed. Switch " +"owners or remove those repositories. %s" +msgstr "" +"L’utilisateur « %s » possède %s dépôts et ne peut être supprimé. Changez " +"les propriétaires de ces dépôts. %s" + +#: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37 msgid "Value cannot be an empty list" msgstr "Cette valeur ne peut être une liste vide." @@ -1126,8 +1207,13 @@ msgid "Username \"%(username)s\" is forb msgstr "Le nom d’utilisateur « %(username)s » n’est pas autorisé" #: rhodecode/model/validators.py:87 -msgid "Username may only contain alphanumeric characters underscores, periods or dashes and must begin with alphanumeric character" -msgstr "Le nom d’utilisateur peut contenir uniquement des caractères alpha-numériques ainsi que les caractères suivants : « _ . - ». Il doit commencer par un caractère alpha-numérique." +msgid "" +"Username may only contain alphanumeric characters underscores, periods or" +" dashes and must begin with alphanumeric character" +msgstr "" +"Le nom d’utilisateur peut contenir uniquement des caractères alpha-" +"numériques ainsi que les caractères suivants : « _ . - ». Il doit " +"commencer par un caractère alpha-numérique." #: rhodecode/model/validators.py:115 #, python-format @@ -1144,8 +1230,13 @@ msgid "Users group \"%(usersgroup)s\" al msgstr "Le groupe d’utilisateurs « %(usersgroup)s » existe déjà." #: rhodecode/model/validators.py:137 -msgid "users group name may only contain alphanumeric characters underscores, periods or dashes and must begin with alphanumeric character" -msgstr "Le nom de groupe d’utilisateurs peut contenir uniquement des caractères alpha-numériques ainsi que les caractères suivants : « _ . - ». Il doit commencer par un caractère alpha-numérique." +msgid "" +"users group name may only contain alphanumeric characters underscores, " +"periods or dashes and must begin with alphanumeric character" +msgstr "" +"Le nom de groupe d’utilisateurs peut contenir uniquement des caractères " +"alpha-numériques ainsi que les caractères suivants : « _ . - ». Il doit " +"commencer par un caractère alpha-numérique." #: rhodecode/model/validators.py:175 msgid "Cannot assign this group as parent" @@ -1207,14 +1298,15 @@ msgstr "URL de clonage invalide." #: rhodecode/model/validators.py:433 msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url" -msgstr "URL à cloner invalide. Veuillez fournir une URL valide en http(s) ou svn+http(s)." +msgstr "" +"URL à cloner invalide. Veuillez fournir une URL valide en http(s) ou " +"svn+http(s)." #: rhodecode/model/validators.py:458 msgid "Fork have to be the same type as parent" msgstr "Le fork doit être du même type que le parent." #: rhodecode/model/validators.py:473 -#| msgid "You don't have permission to view this page" msgid "You don't have permissions to create repository in this group" msgstr "Vous n’avez pas la permission de créer un dépôt dans ce groupe." @@ -1236,13 +1328,19 @@ msgid "e-mail \"%(email)s\" does not exi msgstr "L’adresse e-mail « %(email)s » n’existe pas" #: rhodecode/model/validators.py:654 -msgid "The LDAP Login attribute of the CN must be specified - this is the name of the attribute that is equivalent to \"username\"" -msgstr "L’attribut Login du CN doit être spécifié. Cet attribut correspond au nom d’utilisateur." +msgid "" +"The LDAP Login attribute of the CN must be specified - this is the name " +"of the attribute that is equivalent to \"username\"" +msgstr "" +"L’attribut Login du CN doit être spécifié. Cet attribut correspond au nom" +" d’utilisateur." #: rhodecode/model/validators.py:673 #, python-format msgid "Revisions %(revs)s are already part of pull request or have set status" -msgstr "Les révisions %(revs)s font déjà partie de la requête de pull ou on des statuts définis." +msgstr "" +"Les révisions %(revs)s font déjà partie de la requête de pull ou on des " +"statuts définis." #: rhodecode/templates/index.html:3 msgid "Dashboard" @@ -1262,7 +1360,7 @@ msgstr "Filtre rapide…" #: rhodecode/templates/index_base.html:6 #: rhodecode/templates/admin/repos/repos.html:9 -#: rhodecode/templates/base/base.html:230 +#: rhodecode/templates/base/base.html:233 msgid "repositories" msgstr "Dépôts" @@ -1273,6 +1371,7 @@ msgid "ADD REPOSITORY" msgstr "AJOUTER UN DÉPÔT" #: rhodecode/templates/index_base.html:29 +#: rhodecode/templates/index_base.html:136 #: 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 @@ -1282,9 +1381,10 @@ msgid "Group name" msgstr "Nom de groupe" #: rhodecode/templates/index_base.html:30 -#: rhodecode/templates/index_base.html:71 -#: rhodecode/templates/index_base.html:142 -#: rhodecode/templates/index_base.html:168 +#: rhodecode/templates/index_base.html:72 +#: rhodecode/templates/index_base.html:138 +#: rhodecode/templates/index_base.html:176 +#: rhodecode/templates/index_base.html:266 #: rhodecode/templates/admin/repos/repo_add_base.html:56 #: rhodecode/templates/admin/repos/repo_edit.html:75 #: rhodecode/templates/admin/repos/repos.html:72 @@ -1293,147 +1393,141 @@ msgstr "Nom de groupe" #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34 #: rhodecode/templates/forks/fork.html:59 #: rhodecode/templates/settings/repo_settings.html:66 -#: rhodecode/templates/summary/summary.html:105 +#: rhodecode/templates/summary/summary.html:114 msgid "Description" msgstr "Description" #: rhodecode/templates/index_base.html:40 -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47 msgid "Repositories group" msgstr "Groupe de dépôts" -#: rhodecode/templates/index_base.html:70 -#: rhodecode/templates/index_base.html:166 +#: rhodecode/templates/index_base.html:71 +#: rhodecode/templates/index_base.html:174 +#: rhodecode/templates/index_base.html:264 #: rhodecode/templates/admin/repos/repo_add_base.html:9 #: rhodecode/templates/admin/repos/repo_edit.html:32 #: rhodecode/templates/admin/repos/repos.html:70 -#: rhodecode/templates/admin/users/user_edit.html:192 +#: rhodecode/templates/admin/users/user_edit.html:196 #: rhodecode/templates/admin/users/user_edit_my_account.html:59 -#: rhodecode/templates/admin/users/user_edit_my_account.html:181 -#: rhodecode/templates/admin/users/user_edit_my_account.html:217 +#: rhodecode/templates/admin/users/user_edit_my_account.html:180 +#: rhodecode/templates/admin/users/user_edit_my_account.html:216 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:6 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:184 #: rhodecode/templates/bookmarks/bookmarks.html:36 #: rhodecode/templates/bookmarks/bookmarks_data.html:6 -#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches.html:50 +#: rhodecode/templates/branches/branches_data.html:6 #: rhodecode/templates/files/files_browser.html:47 -#: rhodecode/templates/journal/journal.html:59 -#: rhodecode/templates/journal/journal.html:107 -#: rhodecode/templates/journal/journal.html:186 +#: rhodecode/templates/journal/journal.html:62 +#: rhodecode/templates/journal/journal.html:168 +#: rhodecode/templates/journal/journal_page_repos.html:7 #: rhodecode/templates/settings/repo_settings.html:31 #: rhodecode/templates/summary/summary.html:43 -#: rhodecode/templates/summary/summary.html:123 -#: rhodecode/templates/tags/tags.html:36 +#: rhodecode/templates/summary/summary.html:132 +#: rhodecode/templates/tags/tags.html:51 #: rhodecode/templates/tags/tags_data.html:6 msgid "Name" msgstr "Nom" -#: rhodecode/templates/index_base.html:72 +#: rhodecode/templates/index_base.html:73 msgid "Last change" msgstr "Dernière modification" -#: rhodecode/templates/index_base.html:73 -#: rhodecode/templates/index_base.html:171 -#: rhodecode/templates/admin/users/user_edit_my_account.html:183 -#: rhodecode/templates/journal/journal.html:188 +#: rhodecode/templates/index_base.html:74 +#: rhodecode/templates/index_base.html:179 +#: rhodecode/templates/admin/users/user_edit_my_account.html:182 +#: rhodecode/templates/journal/journal.html:170 msgid "Tip" msgstr "Sommet" -#: rhodecode/templates/index_base.html:74 -#: rhodecode/templates/index_base.html:173 +#: rhodecode/templates/index_base.html:75 +#: rhodecode/templates/index_base.html:181 +#: rhodecode/templates/index_base.html:269 #: rhodecode/templates/admin/repos/repo_edit.html:121 #: rhodecode/templates/admin/repos/repos.html:73 msgid "Owner" msgstr "Propriétaire" -#: rhodecode/templates/index_base.html:75 +#: rhodecode/templates/index_base.html:76 #: rhodecode/templates/summary/summary.html:48 #: rhodecode/templates/summary/summary.html:51 msgid "RSS" msgstr "RSS" -#: rhodecode/templates/index_base.html:76 +#: rhodecode/templates/index_base.html:77 msgid "Atom" msgstr "Atom" -#: rhodecode/templates/index_base.html:110 -#: rhodecode/templates/index_base.html:112 -#, python-format -msgid "Subscribe to %s rss feed" -msgstr "S’abonner au flux RSS de %s" - -#: rhodecode/templates/index_base.html:117 -#: rhodecode/templates/index_base.html:119 -#, python-format -msgid "Subscribe to %s atom feed" -msgstr "S’abonner au flux ATOM de %s" - -#: rhodecode/templates/index_base.html:140 -msgid "Group Name" -msgstr "Nom du groupe" - -#: rhodecode/templates/index_base.html:158 -#: rhodecode/templates/index_base.html:198 +#: rhodecode/templates/index_base.html:167 +#: rhodecode/templates/index_base.html:207 +#: rhodecode/templates/index_base.html:291 #: rhodecode/templates/admin/repos/repos.html:94 -#: rhodecode/templates/admin/users/user_edit_my_account.html:203 +#: rhodecode/templates/admin/users/user_edit_my_account.html:202 #: rhodecode/templates/admin/users/users.html:107 #: rhodecode/templates/bookmarks/bookmarks.html:60 -#: rhodecode/templates/branches/branches.html:77 -#: rhodecode/templates/journal/journal.html:211 -#: rhodecode/templates/tags/tags.html:60 +#: rhodecode/templates/branches/branches.html:76 +#: rhodecode/templates/journal/journal.html:193 +#: rhodecode/templates/tags/tags.html:77 msgid "Click to sort ascending" msgstr "Tri ascendant" -#: rhodecode/templates/index_base.html:159 -#: rhodecode/templates/index_base.html:199 +#: rhodecode/templates/index_base.html:168 +#: rhodecode/templates/index_base.html:208 +#: rhodecode/templates/index_base.html:292 #: rhodecode/templates/admin/repos/repos.html:95 -#: rhodecode/templates/admin/users/user_edit_my_account.html:204 +#: rhodecode/templates/admin/users/user_edit_my_account.html:203 #: rhodecode/templates/admin/users/users.html:108 #: rhodecode/templates/bookmarks/bookmarks.html:61 -#: rhodecode/templates/branches/branches.html:78 -#: rhodecode/templates/journal/journal.html:212 -#: rhodecode/templates/tags/tags.html:61 +#: rhodecode/templates/branches/branches.html:77 +#: rhodecode/templates/journal/journal.html:194 +#: rhodecode/templates/tags/tags.html:78 msgid "Click to sort descending" msgstr "Tri descendant" -#: rhodecode/templates/index_base.html:169 +#: rhodecode/templates/index_base.html:177 +#: rhodecode/templates/index_base.html:267 msgid "Last Change" msgstr "Dernière modification" -#: rhodecode/templates/index_base.html:200 +#: rhodecode/templates/index_base.html:209 +#: rhodecode/templates/index_base.html:293 #: rhodecode/templates/admin/repos/repos.html:96 -#: rhodecode/templates/admin/users/user_edit_my_account.html:205 +#: rhodecode/templates/admin/users/user_edit_my_account.html:204 #: rhodecode/templates/admin/users/users.html:109 #: rhodecode/templates/bookmarks/bookmarks.html:62 -#: rhodecode/templates/branches/branches.html:79 -#: rhodecode/templates/journal/journal.html:213 -#: rhodecode/templates/tags/tags.html:62 +#: rhodecode/templates/branches/branches.html:78 +#: rhodecode/templates/journal/journal.html:195 +#: rhodecode/templates/tags/tags.html:79 msgid "No records found." msgstr "Aucun élément n’a été trouvé." -#: rhodecode/templates/index_base.html:201 +#: rhodecode/templates/index_base.html:210 +#: rhodecode/templates/index_base.html:294 #: rhodecode/templates/admin/repos/repos.html:97 -#: rhodecode/templates/admin/users/user_edit_my_account.html:206 +#: rhodecode/templates/admin/users/user_edit_my_account.html:205 #: rhodecode/templates/admin/users/users.html:110 #: rhodecode/templates/bookmarks/bookmarks.html:63 -#: rhodecode/templates/branches/branches.html:80 -#: rhodecode/templates/journal/journal.html:214 -#: rhodecode/templates/tags/tags.html:63 +#: rhodecode/templates/branches/branches.html:79 +#: rhodecode/templates/journal/journal.html:196 +#: rhodecode/templates/tags/tags.html:80 msgid "Data error." msgstr "Erreur d’intégrité des données." -#: rhodecode/templates/index_base.html:202 +#: rhodecode/templates/index_base.html:211 +#: rhodecode/templates/index_base.html:295 #: rhodecode/templates/admin/repos/repos.html:98 -#: rhodecode/templates/admin/users/user_edit_my_account.html:207 +#: rhodecode/templates/admin/users/user_edit_my_account.html:206 #: rhodecode/templates/admin/users/users.html:111 #: rhodecode/templates/bookmarks/bookmarks.html:64 -#: rhodecode/templates/branches/branches.html:81 -#: rhodecode/templates/journal/journal.html:215 -#: rhodecode/templates/tags/tags.html:64 +#: rhodecode/templates/branches/branches.html:80 +#: rhodecode/templates/journal/journal.html:54 +#: rhodecode/templates/journal/journal.html:197 +#: rhodecode/templates/tags/tags.html:81 msgid "Loading..." msgstr "Chargement…" -#: rhodecode/templates/login.html:5 -#: rhodecode/templates/login.html:54 +#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54 msgid "Sign In" msgstr "Connexion" @@ -1441,19 +1535,17 @@ msgstr "Connexion" msgid "Sign In to" msgstr "Connexion à" -#: rhodecode/templates/login.html:31 -#: rhodecode/templates/register.html:20 +#: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20 #: rhodecode/templates/admin/admin_log.html:5 #: rhodecode/templates/admin/users/user_add.html:32 #: rhodecode/templates/admin/users/user_edit.html:50 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:26 #: rhodecode/templates/base/base.html:83 -#: rhodecode/templates/summary/summary.html:122 +#: rhodecode/templates/summary/summary.html:131 msgid "Username" msgstr "Nom d’utilisateur" -#: rhodecode/templates/login.html:40 -#: rhodecode/templates/register.html:29 +#: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29 #: rhodecode/templates/admin/ldap/ldap.html:46 #: rhodecode/templates/admin/users/user_add.html:41 #: rhodecode/templates/base/base.html:92 @@ -1468,8 +1560,7 @@ msgstr "Se souvenir de moi" msgid "Forgot your password ?" msgstr "Mot de passe oublié ?" -#: rhodecode/templates/login.html:63 -#: rhodecode/templates/base/base.html:103 +#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103 msgid "Don't have an account ?" msgstr "Vous n’avez pas de compte ?" @@ -1493,8 +1584,7 @@ msgstr "Réinitialiser mon mot de passe" msgid "Password reset link will be send to matching email address" msgstr "Votre nouveau mot de passe sera envoyé à l’adresse correspondante." -#: rhodecode/templates/register.html:5 -#: rhodecode/templates/register.html:74 +#: rhodecode/templates/register.html:5 rhodecode/templates/register.html:74 msgid "Sign Up" msgstr "Inscription" @@ -1508,23 +1598,23 @@ msgstr "Confirmation" #: rhodecode/templates/register.html:47 #: rhodecode/templates/admin/users/user_add.html:59 -#: rhodecode/templates/admin/users/user_edit.html:86 +#: rhodecode/templates/admin/users/user_edit.html:90 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:53 msgid "First Name" msgstr "Prénom" #: rhodecode/templates/register.html:56 #: rhodecode/templates/admin/users/user_add.html:68 -#: rhodecode/templates/admin/users/user_edit.html:95 +#: rhodecode/templates/admin/users/user_edit.html:99 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:62 msgid "Last Name" msgstr "Nom" #: rhodecode/templates/register.html:65 #: rhodecode/templates/admin/users/user_add.html:77 -#: rhodecode/templates/admin/users/user_edit.html:104 +#: rhodecode/templates/admin/users/user_edit.html:108 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:71 -#: rhodecode/templates/summary/summary.html:124 +#: rhodecode/templates/summary/summary.html:133 msgid "Email" msgstr "E-mail" @@ -1537,6 +1627,7 @@ msgid "Your account must wait for activa msgstr "Votre compte utilisateur devra être activé par un administrateur." #: rhodecode/templates/repo_switcher_list.html:11 +#: rhodecode/templates/admin/defaults/defaults.html:44 #: rhodecode/templates/admin/repos/repo_add_base.html:65 #: rhodecode/templates/admin/repos/repo_edit.html:85 #: rhodecode/templates/settings/repo_settings.html:76 @@ -1564,7 +1655,7 @@ msgid "tags" msgstr "Tags" #: rhodecode/templates/switch_to_list.html:22 -#: rhodecode/templates/tags/tags_data.html:33 +#: rhodecode/templates/tags/tags_data.html:38 msgid "There are no tags yet" msgstr "Aucun tag n’a été créé pour le moment." @@ -1587,20 +1678,22 @@ msgstr "Historique d’administration" #: rhodecode/templates/admin/repos/repos.html:74 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:9 -#: rhodecode/templates/journal/journal.html:61 -#: rhodecode/templates/journal/journal.html:62 +#: rhodecode/templates/journal/journal_page_repos.html:9 +#: rhodecode/templates/journal/journal_page_repos.html:10 msgid "Action" msgstr "Action" #: rhodecode/templates/admin/admin_log.html:7 +#: rhodecode/templates/admin/permissions/permissions.html:41 msgid "Repository" msgstr "Dépôt" #: rhodecode/templates/admin/admin_log.html:8 #: rhodecode/templates/bookmarks/bookmarks.html:37 #: rhodecode/templates/bookmarks/bookmarks_data.html:7 -#: rhodecode/templates/branches/branches.html:52 -#: rhodecode/templates/tags/tags.html:37 +#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches_data.html:7 +#: rhodecode/templates/tags/tags.html:52 #: rhodecode/templates/tags/tags_data.html:7 msgid "Date" msgstr "Date" @@ -1609,10 +1702,83 @@ msgstr "Date" msgid "From IP" msgstr "Depuis l’adresse IP" -#: rhodecode/templates/admin/admin_log.html:53 +#: rhodecode/templates/admin/admin_log.html:57 msgid "No actions yet" msgstr "Aucune action n’a été enregistrée pour le moment." +#: rhodecode/templates/admin/defaults/defaults.html:5 +#: rhodecode/templates/admin/defaults/defaults.html:25 +#, fuzzy +msgid "Repositories defaults" +msgstr "Groupes de dépôts" + +#: rhodecode/templates/admin/defaults/defaults.html:11 +#, fuzzy +msgid "Defaults" +msgstr "[Par défaut]" + +#: rhodecode/templates/admin/defaults/defaults.html:35 +#: rhodecode/templates/admin/repos/repo_add_base.html:38 +#: rhodecode/templates/admin/repos/repo_edit.html:58 +msgid "Type" +msgstr "Type" + +#: rhodecode/templates/admin/defaults/defaults.html:48 +#: rhodecode/templates/admin/repos/repo_add_base.html:69 +#: rhodecode/templates/admin/repos/repo_edit.html:89 +#: rhodecode/templates/forks/fork.html:72 +#: rhodecode/templates/settings/repo_settings.html:80 +msgid "" +"Private repositories are only visible to people explicitly added as " +"collaborators." +msgstr "" +"Les dépôts privés sont visibles seulement par les utilisateurs ajoutés " +"comme collaborateurs." + +#: rhodecode/templates/admin/defaults/defaults.html:55 +#: rhodecode/templates/admin/repos/repo_edit.html:94 +msgid "Enable statistics" +msgstr "Activer les statistiques" + +#: rhodecode/templates/admin/defaults/defaults.html:59 +#: rhodecode/templates/admin/repos/repo_edit.html:98 +msgid "Enable statistics window on summary page." +msgstr "Afficher les statistiques sur la page du dépôt." + +#: rhodecode/templates/admin/defaults/defaults.html:65 +#: rhodecode/templates/admin/repos/repo_edit.html:103 +msgid "Enable downloads" +msgstr "Activer les téléchargements" + +#: rhodecode/templates/admin/defaults/defaults.html:69 +#: rhodecode/templates/admin/repos/repo_edit.html:107 +msgid "Enable download menu on summary page." +msgstr "Afficher le menu de téléchargements sur la page du dépôt." + +#: rhodecode/templates/admin/defaults/defaults.html:75 +#: rhodecode/templates/admin/repos/repo_edit.html:112 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66 +msgid "Enable locking" +msgstr "Activer le verrouillage" + +#: rhodecode/templates/admin/defaults/defaults.html:79 +#: rhodecode/templates/admin/repos/repo_edit.html:116 +msgid "Enable lock-by-pulling on repository." +msgstr "Activer le verrouillage lors d’un pull sur le dépôt." + +#: rhodecode/templates/admin/defaults/defaults.html:84 +#: rhodecode/templates/admin/ldap/ldap.html:89 +#: rhodecode/templates/admin/repos/repo_edit.html:141 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74 +#: rhodecode/templates/admin/settings/hooks.html:73 +#: rhodecode/templates/admin/users/user_edit.html:133 +#: rhodecode/templates/admin/users/user_edit.html:178 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:135 +#: rhodecode/templates/settings/repo_settings.html:93 +msgid "Save" +msgstr "Enregistrer" + #: rhodecode/templates/admin/ldap/ldap.html:5 msgid "LDAP administration" msgstr "Administration LDAP" @@ -1685,18 +1851,6 @@ msgstr "Attribut pour le nom de famille" msgid "E-mail Attribute" msgstr "Attribut pour l’e-mail" -#: rhodecode/templates/admin/ldap/ldap.html:89 -#: rhodecode/templates/admin/repos/repo_edit.html:141 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74 -#: rhodecode/templates/admin/settings/hooks.html:73 -#: rhodecode/templates/admin/users/user_edit.html:129 -#: rhodecode/templates/admin/users/user_edit.html:174 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79 -#: rhodecode/templates/admin/users_groups/users_group_edit.html:135 -#: rhodecode/templates/settings/repo_settings.html:93 -msgid "Save" -msgstr "Enregistrer" - #: rhodecode/templates/admin/notifications/notifications.html:5 #: rhodecode/templates/admin/notifications/notifications.html:9 msgid "My Notifications" @@ -1711,8 +1865,8 @@ msgid "Comments" msgstr "Commentaires" #: rhodecode/templates/admin/notifications/notifications.html:31 -#: rhodecode/templates/base/base.html:263 -#: rhodecode/templates/base/base.html:265 +#: rhodecode/templates/base/base.html:267 +#: rhodecode/templates/base/base.html:269 msgid "Pull requests" msgstr "Requêtes de pull" @@ -1740,7 +1894,7 @@ msgstr "Gestion des permissions" #: rhodecode/templates/admin/permissions/permissions.html:11 #: rhodecode/templates/admin/repos/repo_edit.html:134 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58 -#: rhodecode/templates/admin/users/user_edit.html:139 +#: rhodecode/templates/admin/users/user_edit.html:143 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100 #: rhodecode/templates/settings/repo_settings.html:86 msgid "Permissions" @@ -1754,32 +1908,55 @@ msgstr "Permissions par défaut" msgid "Anonymous access" msgstr "Accès anonyme" -#: rhodecode/templates/admin/permissions/permissions.html:41 -msgid "Repository permission" -msgstr "Permissions du dépôt" - #: 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 "Les permissions par défaut de chaque dépôt vont être remplacées par la permission choisie. Toutes les permissions par défaut des dépôts seront perdues." +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 "" +"Les permissions par défaut de chaque dépôt vont être remplacées par la " +"permission choisie. Toutes les permissions par défaut des dépôts seront " +"perdues." #: rhodecode/templates/admin/permissions/permissions.html:50 +#: rhodecode/templates/admin/permissions/permissions.html:63 msgid "overwrite existing settings" msgstr "Écraser les permissions existantes" #: rhodecode/templates/admin/permissions/permissions.html:55 +#: rhodecode/templates/admin/repos/repo_add_base.html:29 +#: rhodecode/templates/admin/repos/repo_edit.html:49 +#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 +#: rhodecode/templates/forks/fork.html:50 +#: rhodecode/templates/settings/repo_settings.html:48 +msgid "Repository group" +msgstr "Groupe de dépôt" + +#: rhodecode/templates/admin/permissions/permissions.html:62 +#, fuzzy +msgid "" +"All default permissions on each repository group will be reset to choosen" +" permission, note that all custom default permission on repositories " +"group will be lost" +msgstr "" +"Les permissions par défaut de chaque dépôt vont être remplacées par la " +"permission choisie. Toutes les permissions par défaut des dépôts seront " +"perdues." + +#: rhodecode/templates/admin/permissions/permissions.html:69 msgid "Registration" msgstr "Enregistrement" -#: rhodecode/templates/admin/permissions/permissions.html:63 +#: rhodecode/templates/admin/permissions/permissions.html:77 msgid "Repository creation" msgstr "Création de dépôt" -#: rhodecode/templates/admin/permissions/permissions.html:71 +#: rhodecode/templates/admin/permissions/permissions.html:85 msgid "Repository forking" msgstr "Fork de dépôt" -#: rhodecode/templates/admin/permissions/permissions.html:78 -#: rhodecode/templates/admin/repos/repo_edit.html:255 +#: rhodecode/templates/admin/permissions/permissions.html:92 +#: rhodecode/templates/admin/repos/repo_edit.html:264 msgid "set" msgstr "Définir" @@ -1799,8 +1976,8 @@ msgid "add new" msgstr "ajouter un nouveau" #: rhodecode/templates/admin/repos/repo_add_base.html:20 -#: rhodecode/templates/summary/summary.html:95 -#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:104 +#: rhodecode/templates/summary/summary.html:105 msgid "Clone from" msgstr "Cloner depuis" @@ -1810,24 +1987,11 @@ msgstr "Cloner depuis" msgid "Optional http[s] url from which repository should be cloned." msgstr "URL http(s) depuis laquelle le dépôt doit être cloné." -#: rhodecode/templates/admin/repos/repo_add_base.html:29 -#: rhodecode/templates/admin/repos/repo_edit.html:49 -#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 -#: rhodecode/templates/forks/fork.html:50 -#: rhodecode/templates/settings/repo_settings.html:48 -msgid "Repository group" -msgstr "Groupe de dépôt" - #: rhodecode/templates/admin/repos/repo_add_base.html:33 #: rhodecode/templates/forks/fork.html:54 msgid "Optionaly select a group to put this repository into." msgstr "Sélectionnez un groupe (optionel) dans lequel sera placé le dépôt." -#: rhodecode/templates/admin/repos/repo_add_base.html:38 -#: rhodecode/templates/admin/repos/repo_edit.html:58 -msgid "Type" -msgstr "Type" - #: rhodecode/templates/admin/repos/repo_add_base.html:42 msgid "Type of repository to create." msgstr "Type de dépôt à créer." @@ -1844,21 +2008,18 @@ msgstr "Révision d’arrivée" #: rhodecode/templates/forks/fork.html:45 #: rhodecode/templates/settings/repo_settings.html:61 msgid "Default revision for files page, downloads, whoosh and readme" -msgstr "Révision par défaut pour les pages de fichiers, de téléchargements, de recherche et de documentation." +msgstr "" +"Révision par défaut pour les pages de fichiers, de téléchargements, de " +"recherche et de documentation." #: rhodecode/templates/admin/repos/repo_add_base.html:60 #: rhodecode/templates/admin/repos/repo_edit.html:79 #: rhodecode/templates/forks/fork.html:63 #: rhodecode/templates/settings/repo_settings.html:70 msgid "Keep it short and to the point. Use a README file for longer descriptions." -msgstr "Gardez cette description précise et concise. Utilisez un fichier README pour des descriptions plus détaillées." - -#: rhodecode/templates/admin/repos/repo_add_base.html:69 -#: rhodecode/templates/admin/repos/repo_edit.html:89 -#: rhodecode/templates/forks/fork.html:72 -#: rhodecode/templates/settings/repo_settings.html:80 -msgid "Private repositories are only visible to people explicitly added as collaborators." -msgstr "Les dépôts privés sont visibles seulement par les utilisateurs ajoutés comme collaborateurs." +msgstr "" +"Gardez cette description précise et concise. Utilisez un fichier README " +"pour des descriptions plus détaillées." #: rhodecode/templates/admin/repos/repo_add_base.html:73 msgid "add" @@ -1874,12 +2035,14 @@ msgstr "Éditer le dépôt" #: rhodecode/templates/admin/repos/repo_edit.html:13 #: rhodecode/templates/admin/users/user_edit.html:13 -#: rhodecode/templates/admin/users/user_edit.html:224 -#: rhodecode/templates/admin/users/user_edit.html:226 +#: rhodecode/templates/admin/users/user_edit.html:228 +#: rhodecode/templates/admin/users/user_edit.html:230 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28 #: rhodecode/templates/admin/users_groups/users_group_edit.html:13 -#: rhodecode/templates/files/files_source.html:44 -#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:207 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:209 +#: rhodecode/templates/files/files_source.html:29 +#: rhodecode/templates/journal/journal_page_repos.html:29 msgid "edit" msgstr "éditer" @@ -1893,31 +2056,6 @@ msgstr "URL de clone" msgid "Optional select a group to put this repository into." msgstr "Sélectionnez un groupe (optionel) dans lequel sera placé le dépôt." -#: rhodecode/templates/admin/repos/repo_edit.html:94 -msgid "Enable statistics" -msgstr "Activer les statistiques" - -#: rhodecode/templates/admin/repos/repo_edit.html:98 -msgid "Enable statistics window on summary page." -msgstr "Afficher les statistiques sur la page du dépôt." - -#: rhodecode/templates/admin/repos/repo_edit.html:103 -msgid "Enable downloads" -msgstr "Activer les téléchargements" - -#: rhodecode/templates/admin/repos/repo_edit.html:107 -msgid "Enable download menu on summary page." -msgstr "Afficher le menu de téléchargements sur la page du dépôt." - -#: rhodecode/templates/admin/repos/repo_edit.html:112 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66 -msgid "Enable locking" -msgstr "Activer le verrouillage" - -#: rhodecode/templates/admin/repos/repo_edit.html:116 -msgid "Enable lock-by-pulling on repository." -msgstr "Activer le verrouillage lors d’un pull sur le dépôt." - #: rhodecode/templates/admin/repos/repo_edit.html:126 msgid "Change owner of this repository." msgstr "Changer le propriétaire de ce dépôt." @@ -1925,16 +2063,16 @@ msgstr "Changer le propriétaire de ce dépôt." #: rhodecode/templates/admin/repos/repo_edit.html:142 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:75 #: rhodecode/templates/admin/settings/settings.html:113 -#: rhodecode/templates/admin/settings/settings.html:168 -#: rhodecode/templates/admin/settings/settings.html:258 -#: rhodecode/templates/admin/users/user_edit.html:130 -#: rhodecode/templates/admin/users/user_edit.html:175 -#: rhodecode/templates/admin/users/user_edit.html:278 +#: rhodecode/templates/admin/settings/settings.html:179 +#: rhodecode/templates/admin/settings/settings.html:269 +#: rhodecode/templates/admin/users/user_edit.html:134 +#: rhodecode/templates/admin/users/user_edit.html:179 +#: rhodecode/templates/admin/users/user_edit.html:282 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:80 #: rhodecode/templates/admin/users_groups/users_group_edit.html:136 #: rhodecode/templates/files/files_add.html:82 #: rhodecode/templates/files/files_edit.html:68 -#: rhodecode/templates/pullrequests/pullrequest.html:122 +#: rhodecode/templates/pullrequests/pullrequest.html:124 #: rhodecode/templates/settings/repo_settings.html:94 msgid "Reset" msgstr "Réinitialiser" @@ -1988,90 +2126,122 @@ msgid "Confirm to invalidate repository msgstr "Voulez-vous vraiment invalider le cache du dépôt ?" #: rhodecode/templates/admin/repos/repo_edit.html:193 -msgid "Manually invalidate cache for this repository. On first access repository will be cached again" -msgstr "Invalide manuellement le cache de ce dépôt. Au prochain accès sur ce dépôt, il sera à nouveau mis en cache." +msgid "" +"Manually invalidate cache for this repository. On first access repository" +" will be cached again" +msgstr "" +"Invalide manuellement le cache de ce dépôt. Au prochain accès sur ce " +"dépôt, il sera à nouveau mis en cache." #: rhodecode/templates/admin/repos/repo_edit.html:198 msgid "List of cached values" msgstr "Liste des valeurs en cache" -#: rhodecode/templates/admin/repos/repo_edit.html:209 -#: rhodecode/templates/base/base.html:327 -#: rhodecode/templates/base/base.html:329 +#: rhodecode/templates/admin/repos/repo_edit.html:201 +msgid "Prefix" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:202 +#, fuzzy +msgid "Key" +msgstr "Clé d’API" + +#: rhodecode/templates/admin/repos/repo_edit.html:203 +#: rhodecode/templates/admin/users/user_add.html:86 +#: rhodecode/templates/admin/users/user_edit.html:117 +#: rhodecode/templates/admin/users_groups/users_group_add.html:41 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:42 +msgid "Active" +msgstr "Actif" + +#: rhodecode/templates/admin/repos/repo_edit.html:218 #: rhodecode/templates/base/base.html:331 +#: rhodecode/templates/base/base.html:333 +#: rhodecode/templates/base/base.html:335 msgid "Public journal" msgstr "Journal public" -#: rhodecode/templates/admin/repos/repo_edit.html:215 +#: rhodecode/templates/admin/repos/repo_edit.html:224 msgid "Remove from public journal" msgstr "Supprimer du journal public" -#: rhodecode/templates/admin/repos/repo_edit.html:217 +#: rhodecode/templates/admin/repos/repo_edit.html:226 msgid "Add to public journal" msgstr "Ajouter le dépôt au journal public" -#: rhodecode/templates/admin/repos/repo_edit.html:222 -msgid "All actions made on this repository will be accessible to everyone in public journal" -msgstr "Le descriptif des actions réalisées sur ce dépôt sera visible à tous depuis le journal public." - -#: rhodecode/templates/admin/repos/repo_edit.html:229 +#: rhodecode/templates/admin/repos/repo_edit.html:231 +msgid "" +"All actions made on this repository will be accessible to everyone in " +"public journal" +msgstr "" +"Le descriptif des actions réalisées sur ce dépôt sera visible à tous " +"depuis le journal public." + +#: rhodecode/templates/admin/repos/repo_edit.html:238 msgid "Locking" msgstr "Verrouillage" -#: rhodecode/templates/admin/repos/repo_edit.html:234 +#: rhodecode/templates/admin/repos/repo_edit.html:243 msgid "Unlock locked repo" msgstr "Déverrouiller le dépôt" -#: rhodecode/templates/admin/repos/repo_edit.html:234 +#: rhodecode/templates/admin/repos/repo_edit.html:243 msgid "Confirm to unlock repository" msgstr "Veuillez confirmer le déverrouillage de ce dépôt." -#: rhodecode/templates/admin/repos/repo_edit.html:237 +#: rhodecode/templates/admin/repos/repo_edit.html:246 msgid "lock repo" msgstr "Verrouiller le dépôt" -#: rhodecode/templates/admin/repos/repo_edit.html:237 +#: rhodecode/templates/admin/repos/repo_edit.html:246 msgid "Confirm to lock repository" msgstr "Veuillez confirmer le verrouillage de ce dépôt." -#: rhodecode/templates/admin/repos/repo_edit.html:238 +#: rhodecode/templates/admin/repos/repo_edit.html:247 msgid "Repository is not locked" msgstr "Ce dépôt n’est pas verrouillé." -#: rhodecode/templates/admin/repos/repo_edit.html:243 +#: rhodecode/templates/admin/repos/repo_edit.html:252 msgid "Force locking on repository. Works only when anonymous access is disabled" -msgstr "Forcer le verrouillage du dépôt. Ce réglage fonctionne uniquement quand l‘accès anonyme est désactivé." - -#: rhodecode/templates/admin/repos/repo_edit.html:250 +msgstr "" +"Forcer le verrouillage du dépôt. Ce réglage fonctionne uniquement quand " +"l‘accès anonyme est désactivé." + +#: rhodecode/templates/admin/repos/repo_edit.html:259 msgid "Set as fork of" msgstr "Indiquer comme fork" -#: rhodecode/templates/admin/repos/repo_edit.html:259 +#: rhodecode/templates/admin/repos/repo_edit.html:268 msgid "Manually set this repository as a fork of another from the list" msgstr "Marquer ce dépôt comme fork d’un autre dépôt de la liste." -#: rhodecode/templates/admin/repos/repo_edit.html:265 +#: rhodecode/templates/admin/repos/repo_edit.html:274 #: rhodecode/templates/changeset/changeset_file_comment.html:26 msgid "Delete" msgstr "Supprimer" -#: rhodecode/templates/admin/repos/repo_edit.html:269 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "Remove this repository" msgstr "Supprimer ce dépôt" -#: rhodecode/templates/admin/repos/repo_edit.html:269 -#: rhodecode/templates/journal/journal.html:84 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "Confirm to delete this repository" msgstr "Voulez-vous vraiment supprimer ce dépôt ?" -#: rhodecode/templates/admin/repos/repo_edit.html:273 +#: rhodecode/templates/admin/repos/repo_edit.html:282 msgid "" -"This repository will be renamed in a special way in order to be unaccesible for RhodeCode and VCS systems.\n" -" If you need fully delete it from filesystem please do it manually" +"This repository will be renamed in a special way in order to be " +"unaccesible for RhodeCode and VCS systems.\n" +" If you need fully delete it from filesystem " +"please do it manually" msgstr "" -"Ce dépôt sera renommé de manière à le rendre inaccessible à RhodeCode et au système de gestion de versions.\n" -"Si vous voulez le supprimer complètement, effectuez la suppression manuellement. Ce dépôt sera renommé de manière à le rendre inaccessible à RhodeCode et au système de gestion de versions.\n" -"Si vous voulez le supprimer complètement, effectuez la suppression manuellement." +"Ce dépôt sera renommé de manière à le rendre inaccessible à RhodeCode et " +"au système de gestion de versions.\n" +"Si vous voulez le supprimer complètement, effectuez la suppression " +"manuellement. Ce dépôt sera renommé de manière à le rendre inaccessible à" +" RhodeCode et au système de gestion de versions.\n" +"Si vous voulez le supprimer complètement, effectuez la suppression " +"manuellement." #: rhodecode/templates/admin/repos/repo_edit_perms.html:3 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3 @@ -2091,7 +2261,7 @@ msgstr "Écriture" #: rhodecode/templates/admin/repos/repo_edit_perms.html:6 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6 #: rhodecode/templates/admin/users/users.html:85 -#: rhodecode/templates/base/base.html:226 +#: rhodecode/templates/base/base.html:229 msgid "admin" msgstr "Administration" @@ -2102,8 +2272,8 @@ msgstr "Membre" #: rhodecode/templates/admin/repos/repo_edit_perms.html:16 #: rhodecode/templates/data_table/_dt_elements.html:67 -#: rhodecode/templates/journal/journal.html:132 -#: rhodecode/templates/summary/summary.html:76 +#: rhodecode/templates/journal/journal.html:87 +#: rhodecode/templates/summary/summary.html:85 msgid "private repository" msgstr "Dépôt privé" @@ -2144,14 +2314,18 @@ msgid "apply to children" msgstr "Appliquer aux enfants" #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74 -msgid "Set or revoke permission to all children of that group, including repositories and other groups" -msgstr "Applique ou révoque les permissions sur tous les éléments de ce groupe, notamment les dépôts et sous-groupes." +msgid "" +"Set or revoke permission to all children of that group, including " +"repositories and other groups" +msgstr "" +"Applique ou révoque les permissions sur tous les éléments de ce groupe, " +"notamment les dépôts et sous-groupes." #: rhodecode/templates/admin/repos_groups/repos_groups.html:9 #: rhodecode/templates/base/base.html:122 -#: rhodecode/templates/base/base.html:309 -#: rhodecode/templates/base/base.html:311 #: rhodecode/templates/base/base.html:313 +#: rhodecode/templates/base/base.html:315 +#: rhodecode/templates/base/base.html:317 #: rhodecode/templates/bookmarks/bookmarks.html:11 #: rhodecode/templates/branches/branches.html:10 #: rhodecode/templates/changelog/changelog.html:10 @@ -2163,8 +2337,7 @@ msgstr "Applique ou révoque les permissions sur tous les éléments de ce groupe, notamment les dépôts et sous-groupes." #: rhodecode/templates/files/files_add.html:15 #: rhodecode/templates/files/files_edit.html:15 #: rhodecode/templates/followers/followers.html:9 -#: rhodecode/templates/forks/fork.html:9 -#: rhodecode/templates/forks/forks.html:9 +#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9 #: rhodecode/templates/pullrequests/pullrequest.html:8 #: rhodecode/templates/pullrequests/pullrequest_show.html:8 #: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 @@ -2201,7 +2374,7 @@ msgstr "Parent du groupe" #: rhodecode/templates/admin/users/user_add.html:94 #: rhodecode/templates/admin/users_groups/users_group_add.html:49 #: rhodecode/templates/admin/users_groups/users_group_edit.html:90 -#: rhodecode/templates/pullrequests/pullrequest_show.html:117 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 msgid "save" msgstr "Enregistrer" @@ -2214,8 +2387,12 @@ msgid "edit repos group" msgstr "Édition du groupe de dépôt" #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70 -msgid "Enable lock-by-pulling on group. This option will be applied to all other groups and repositories inside" -msgstr "Activer le verrou lors d’un pull sur le groupe. Cette option sera appliquée à tous les sous-groupes et dépôts de ce groupe." +msgid "" +"Enable lock-by-pulling on group. This option will be applied to all other" +" groups and repositories inside" +msgstr "" +"Activer le verrou lors d’un pull sur le groupe. Cette option sera " +"appliquée à tous les sous-groupes et dépôts de ce groupe." #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5 msgid "Repositories groups administration" @@ -2235,20 +2412,22 @@ msgstr "Nombre de sous-dépôts" msgid "action" msgstr "Action" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54 -#: rhodecode/templates/admin/users/user_edit.html:255 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 +#: rhodecode/templates/admin/users/user_edit.html:259 #: rhodecode/templates/admin/users_groups/users_groups.html:44 #: rhodecode/templates/data_table/_dt_elements.html:7 -#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:121 msgid "delete" msgstr "Supprimer" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54 -#, python-format -msgid "Confirm to delete this group: %s" -msgstr "Voulez-vous vraiment supprimer le groupe « %s » ?" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:62 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 +#, fuzzy, python-format +msgid "Confirm to delete this group: %s with %s repository" +msgid_plural "Confirm to delete this group: %s with %s repositories" +msgstr[0] "" +msgstr[1] "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63 msgid "There are no repositories groups yet" msgstr "Aucun groupe de dépôts n’a été créé pour le moment." @@ -2288,16 +2467,26 @@ msgid "rescan option" msgstr "Option de re-scan" #: 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 "Cochez cette option pour supprimer d’éventuelles données obsolètes (concernant des dépôts manuellement supprimés) de la base de données." +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 "" +"Cochez cette option pour supprimer d’éventuelles données obsolètes " +"(concernant des dépôts manuellement supprimés) de la base de données." #: rhodecode/templates/admin/settings/settings.html:39 msgid "destroy old data" msgstr "Supprimer les données obsolètes" #: rhodecode/templates/admin/settings/settings.html:41 -msgid "Rescan repositories location for new repositories. Also deletes obsolete if `destroy` flag is checked " -msgstr "Rescanner le dossier contenant les dépôts pour en trouver de nouveaux. Supprime égalements les entrées de dépôts obsolètes si « Supprimer les données obsolètes » est coché." +msgid "" +"Rescan repositories location for new repositories. Also deletes obsolete " +"if `destroy` flag is checked " +msgstr "" +"Rescanner le dossier contenant les dépôts pour en trouver de nouveaux. " +"Supprime égalements les entrées de dépôts obsolètes si « Supprimer les " +"données obsolètes » est coché." #: rhodecode/templates/admin/settings/settings.html:46 msgid "Rescan repositories" @@ -2336,8 +2525,8 @@ msgid "GA code" msgstr "Code GA" #: rhodecode/templates/admin/settings/settings.html:112 -#: rhodecode/templates/admin/settings/settings.html:167 -#: rhodecode/templates/admin/settings/settings.html:257 +#: rhodecode/templates/admin/settings/settings.html:178 +#: rhodecode/templates/admin/settings/settings.html:268 msgid "Save settings" msgstr "Enregister les options" @@ -2345,116 +2534,143 @@ msgstr "Enregister les options" msgid "Visualisation settings" msgstr "Réglages d’affichage" -#: rhodecode/templates/admin/settings/settings.html:128 +#: rhodecode/templates/admin/settings/settings.html:127 +#, fuzzy +msgid "General" +msgstr "Activer" + +#: rhodecode/templates/admin/settings/settings.html:132 +msgid "Use lightweight dashboard" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:139 msgid "Icons" msgstr "Icônes" -#: rhodecode/templates/admin/settings/settings.html:133 -msgid "Show public repo icon on repositories" -msgstr "Afficher l’icône de dépôt public sur les dépôts" - -#: rhodecode/templates/admin/settings/settings.html:137 -msgid "Show private repo icon on repositories" -msgstr "Afficher l’icône de dépôt privé sur les dépôts" - #: rhodecode/templates/admin/settings/settings.html:144 +msgid "Show public repo icon on repositories" +msgstr "Afficher l’icône de dépôt public sur les dépôts" + +#: rhodecode/templates/admin/settings/settings.html:148 +msgid "Show private repo icon on repositories" +msgstr "Afficher l’icône de dépôt privé sur les dépôts" + +#: rhodecode/templates/admin/settings/settings.html:155 msgid "Meta-Tagging" msgstr "Meta-Tagging" -#: rhodecode/templates/admin/settings/settings.html:149 +#: rhodecode/templates/admin/settings/settings.html:160 msgid "Stylify recognised metatags:" msgstr "Styliser les méta-tags reconnus :" -#: rhodecode/templates/admin/settings/settings.html:176 +#: rhodecode/templates/admin/settings/settings.html:187 msgid "VCS settings" msgstr "Réglages de gestionnaire de version" -#: rhodecode/templates/admin/settings/settings.html:185 +#: rhodecode/templates/admin/settings/settings.html:196 msgid "Web" msgstr "Web" -#: rhodecode/templates/admin/settings/settings.html:190 +#: rhodecode/templates/admin/settings/settings.html:201 msgid "require ssl for vcs operations" msgstr "SSL requis pour les opérations de push/pull" -#: rhodecode/templates/admin/settings/settings.html:192 -msgid "RhodeCode will require SSL for pushing or pulling. If SSL is missing it will return HTTP Error 406: Not Acceptable" -msgstr "RhodeCode requièrera SSL pour les pushs et pulls. Si le SSL n’est pas utilisé l’erreur HTTP 406 (Non Acceptable) sera renvoyée." - -#: rhodecode/templates/admin/settings/settings.html:198 -msgid "Hooks" -msgstr "Hooks" - #: rhodecode/templates/admin/settings/settings.html:203 +msgid "" +"RhodeCode will require SSL for pushing or pulling. If SSL is missing it " +"will return HTTP Error 406: Not Acceptable" +msgstr "" +"RhodeCode requièrera SSL pour les pushs et pulls. Si le SSL n’est pas " +"utilisé l’erreur HTTP 406 (Non Acceptable) sera renvoyée." + +#: rhodecode/templates/admin/settings/settings.html:209 +msgid "Hooks" +msgstr "Hooks" + +#: rhodecode/templates/admin/settings/settings.html:214 msgid "Update repository after push (hg update)" msgstr "Mettre à jour les dépôts après un push (hg update)" -#: rhodecode/templates/admin/settings/settings.html:207 +#: rhodecode/templates/admin/settings/settings.html:218 msgid "Show repository size after push" msgstr "Afficher la taille du dépôt après un push" -#: rhodecode/templates/admin/settings/settings.html:211 +#: rhodecode/templates/admin/settings/settings.html:222 msgid "Log user push commands" msgstr "Journaliser les commandes de push" -#: rhodecode/templates/admin/settings/settings.html:215 +#: rhodecode/templates/admin/settings/settings.html:226 msgid "Log user pull commands" msgstr "Journaliser les commandes de pull" -#: rhodecode/templates/admin/settings/settings.html:219 +#: rhodecode/templates/admin/settings/settings.html:230 msgid "advanced setup" msgstr "Avancé" -#: rhodecode/templates/admin/settings/settings.html:224 +#: rhodecode/templates/admin/settings/settings.html:235 msgid "Mercurial Extensions" msgstr "Extensions Mercurial" -#: rhodecode/templates/admin/settings/settings.html:229 +#: rhodecode/templates/admin/settings/settings.html:240 msgid "largefiles extensions" msgstr "Extensions largefiles" -#: rhodecode/templates/admin/settings/settings.html:233 +#: rhodecode/templates/admin/settings/settings.html:244 msgid "hgsubversion extensions" msgstr "Extensions hgsubversion" -#: rhodecode/templates/admin/settings/settings.html:235 -msgid "Requires hgsubversion library installed. Allows clonning from svn remote locations" -msgstr "Ceci nécessite l’installation de la bibliothèque hgsubversion. Permet de clôner à partir de dépôts Suversion." - -#: rhodecode/templates/admin/settings/settings.html:245 +#: rhodecode/templates/admin/settings/settings.html:246 +msgid "" +"Requires hgsubversion library installed. Allows clonning from svn remote " +"locations" +msgstr "" +"Ceci nécessite l’installation de la bibliothèque hgsubversion. Permet de " +"clôner à partir de dépôts Suversion." + +#: rhodecode/templates/admin/settings/settings.html:256 msgid "Repositories location" msgstr "Emplacement des dépôts" -#: rhodecode/templates/admin/settings/settings.html:250 -msgid "This a crucial application setting. If you are really sure you need to change this, you must restart application in order to make this setting take effect. Click this label to unlock." -msgstr "Ce réglage ne devrait pas être modifié en temps normal. Si vous devez vraiment le faire, redémarrer l’application une fois le changement effectué. Cliquez sur ce texte pour déverrouiller." - -#: rhodecode/templates/admin/settings/settings.html:251 -#: rhodecode/templates/base/base.html:218 +#: rhodecode/templates/admin/settings/settings.html:261 +msgid "" +"This a crucial application setting. If you are really sure you need to " +"change this, you must restart application in order to make this setting " +"take effect. Click this label to unlock." +msgstr "" +"Ce réglage ne devrait pas être modifié en temps normal. Si vous devez " +"vraiment le faire, redémarrer l’application une fois le changement " +"effectué. Cliquez sur ce texte pour déverrouiller." + +#: rhodecode/templates/admin/settings/settings.html:262 +#: rhodecode/templates/base/base.html:221 msgid "unlock" msgstr "Déverrouiller" -#: rhodecode/templates/admin/settings/settings.html:252 -msgid "Location where repositories are stored. After changing this value a restart, and rescan is required" -msgstr "Emplacement de stockage des dépôts. Si cette valeur est changée, Rhodecode devra être redémarré les les dépôts rescannés." - -#: rhodecode/templates/admin/settings/settings.html:272 +#: rhodecode/templates/admin/settings/settings.html:263 +msgid "" +"Location where repositories are stored. After changing this value a " +"restart, and rescan is required" +msgstr "" +"Emplacement de stockage des dépôts. Si cette valeur est changée, " +"Rhodecode devra être redémarré les les dépôts rescannés." + +#: rhodecode/templates/admin/settings/settings.html:283 msgid "Test Email" msgstr "E-mail de test" -#: rhodecode/templates/admin/settings/settings.html:280 +#: rhodecode/templates/admin/settings/settings.html:291 msgid "Email to" msgstr "Envoyer l’e-mail à" -#: rhodecode/templates/admin/settings/settings.html:288 +#: rhodecode/templates/admin/settings/settings.html:299 msgid "Send" msgstr "Envoyer" -#: rhodecode/templates/admin/settings/settings.html:294 +#: rhodecode/templates/admin/settings/settings.html:305 msgid "System Info and Packages" msgstr "Information système et paquets" -#: rhodecode/templates/admin/settings/settings.html:297 +#: rhodecode/templates/admin/settings/settings.html:308 msgid "show" msgstr "Montrer" @@ -2475,13 +2691,6 @@ msgstr "nouvel utilisateur" msgid "Password confirmation" msgstr "Confirmation" -#: rhodecode/templates/admin/users/user_add.html:86 -#: rhodecode/templates/admin/users/user_edit.html:113 -#: rhodecode/templates/admin/users_groups/users_group_add.html:41 -#: rhodecode/templates/admin/users_groups/users_group_edit.html:42 -msgid "Active" -msgstr "Actif" - #: rhodecode/templates/admin/users/user_edit.html:5 msgid "Edit user" msgstr "Éditer l'utilisateur" @@ -2501,71 +2710,77 @@ msgstr "en utilisant l’adresse" msgid "API key" msgstr "Clé d’API" -#: rhodecode/templates/admin/users/user_edit.html:59 +#: rhodecode/templates/admin/users/user_edit.html:63 msgid "LDAP DN" msgstr "DN LDAP" -#: rhodecode/templates/admin/users/user_edit.html:68 +#: rhodecode/templates/admin/users/user_edit.html:72 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:35 msgid "New password" msgstr "Nouveau mot de passe" -#: rhodecode/templates/admin/users/user_edit.html:77 +#: rhodecode/templates/admin/users/user_edit.html:81 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 msgid "New password confirmation" msgstr "Confirmation du nouveau mot de passe" -#: rhodecode/templates/admin/users/user_edit.html:147 +#: rhodecode/templates/admin/users/user_edit.html:151 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108 msgid "Inherit default permissions" msgstr "Utiliser les permissions par défaut" -#: rhodecode/templates/admin/users/user_edit.html:152 +#: rhodecode/templates/admin/users/user_edit.html:156 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113 #, python-format -msgid "Select to inherit permissions from %s settings. With this selected below options does not have any action" -msgstr "Cochez pour utiliser les permissions des les réglages %s. Si cette option est activée, les réglages ci-dessous n’auront pas d’effet." - -#: rhodecode/templates/admin/users/user_edit.html:158 +msgid "" +"Select to inherit permissions from %s settings. With this selected below " +"options does not have any action" +msgstr "" +"Cochez pour utiliser les permissions des les réglages %s. Si cette option" +" est activée, les réglages ci-dessous n’auront pas d’effet." + +#: rhodecode/templates/admin/users/user_edit.html:162 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119 msgid "Create repositories" msgstr "Création de dépôts" -#: rhodecode/templates/admin/users/user_edit.html:166 +#: rhodecode/templates/admin/users/user_edit.html:170 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127 msgid "Fork repositories" msgstr "Forker les dépôts" -#: rhodecode/templates/admin/users/user_edit.html:186 +#: rhodecode/templates/admin/users/user_edit.html:190 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:22 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:39 msgid "Nothing here yet" msgstr "Rien ici pour le moment" -#: rhodecode/templates/admin/users/user_edit.html:193 +#: rhodecode/templates/admin/users/user_edit.html:197 #: rhodecode/templates/admin/users/user_edit_my_account.html:60 -#: rhodecode/templates/admin/users/user_edit_my_account.html:218 +#: rhodecode/templates/admin/users/user_edit_my_account.html:217 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:185 msgid "Permission" msgstr "Permission" -#: rhodecode/templates/admin/users/user_edit.html:194 +#: rhodecode/templates/admin/users/user_edit.html:198 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:186 msgid "Edit Permission" msgstr "Éditer" -#: rhodecode/templates/admin/users/user_edit.html:243 +#: rhodecode/templates/admin/users/user_edit.html:247 msgid "Email addresses" msgstr "Adresses e-mail" -#: rhodecode/templates/admin/users/user_edit.html:256 +#: rhodecode/templates/admin/users/user_edit.html:260 #, python-format msgid "Confirm to delete this email: %s" msgstr "Veuillez confirmer la suppression de l’e-mail : %s" -#: rhodecode/templates/admin/users/user_edit.html:270 +#: rhodecode/templates/admin/users/user_edit.html:274 msgid "New email address" msgstr "Nouvelle adrese" -#: rhodecode/templates/admin/users/user_edit.html:277 +#: rhodecode/templates/admin/users/user_edit.html:281 msgid "Add" msgstr "Ajouter" @@ -2621,31 +2836,33 @@ msgstr "Requête de pull nº%s ouverte par %s le %s" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:7 #: rhodecode/templates/bookmarks/bookmarks.html:40 #: rhodecode/templates/bookmarks/bookmarks_data.html:9 -#: rhodecode/templates/branches/branches.html:55 -#: rhodecode/templates/journal/journal.html:60 -#: rhodecode/templates/tags/tags.html:40 +#: rhodecode/templates/branches/branches.html:54 +#: rhodecode/templates/branches/branches_data.html:9 +#: rhodecode/templates/journal/journal_page_repos.html:8 +#: rhodecode/templates/tags/tags.html:55 #: rhodecode/templates/tags/tags_data.html:9 msgid "Revision" msgstr "Révision" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28 -#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/journal/journal_page_repos.html:29 msgid "private" msgstr "privé" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:31 #: rhodecode/templates/data_table/_dt_elements.html:7 +#: rhodecode/templates/journal/journal_page_repos.html:32 #, python-format msgid "Confirm to delete this repository: %s" msgstr "Voulez-vous vraiment supprimer le dépôt %s ?" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:38 -#: rhodecode/templates/journal/journal.html:94 +#: rhodecode/templates/journal/journal_page_repos.html:42 msgid "No repositories yet" msgstr "Aucun dépôt pour le moment" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40 -#: rhodecode/templates/journal/journal.html:96 +#: rhodecode/templates/journal/journal_page_repos.html:44 msgid "create one now" msgstr "En créer un maintenant" @@ -2654,7 +2871,7 @@ msgid "Users administration" msgstr "Administration des utilisateurs" #: rhodecode/templates/admin/users/users.html:9 -#: rhodecode/templates/base/base.html:232 +#: rhodecode/templates/base/base.html:235 msgid "users" msgstr "Utilisateurs" @@ -2684,7 +2901,7 @@ msgid "active" msgstr "Actif" #: rhodecode/templates/admin/users/users.html:86 -#: rhodecode/templates/base/base.html:235 +#: rhodecode/templates/base/base.html:238 msgid "ldap" msgstr "LDAP" @@ -2733,6 +2950,21 @@ msgstr "Tout ajouter" msgid "Group members" msgstr "Membres du groupe" +#: rhodecode/templates/admin/users_groups/users_group_edit.html:163 +#, fuzzy +msgid "No members yet" +msgstr "Membres" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:171 +#, fuzzy +msgid "Permissions defined for this group" +msgstr "Gestion des permissions" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:178 +#, fuzzy +msgid "No permissions set yet" +msgstr "Copier les permissions" + #: rhodecode/templates/admin/users_groups/users_groups.html:5 msgid "Users groups administration" msgstr "Gestion des groupes d’utilisateurs" @@ -2776,9 +3008,9 @@ msgid "Inbox" msgstr "Boîte de réception" #: rhodecode/templates/base/base.html:123 -#: rhodecode/templates/base/base.html:318 -#: rhodecode/templates/base/base.html:320 #: rhodecode/templates/base/base.html:322 +#: rhodecode/templates/base/base.html:324 +#: rhodecode/templates/base/base.html:326 #: rhodecode/templates/journal/journal.html:4 #: rhodecode/templates/journal/journal.html:21 #: rhodecode/templates/journal/public_journal.html:4 @@ -2798,7 +3030,7 @@ msgid "Products" msgstr "Produits" #: rhodecode/templates/base/base.html:152 -#: rhodecode/templates/base/base.html:182 +#: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47 msgid "loading..." msgstr "Chargement…" @@ -2843,7 +3075,6 @@ msgstr "Options" #: rhodecode/templates/base/base.html:204 #: rhodecode/templates/base/base.html:206 -#| msgid "Repository creation" msgid "repository settings" msgstr "Réglages de dépôt" @@ -2853,49 +3084,58 @@ msgstr "Réglages de dépôt" msgid "fork" msgstr "Fork" -#: rhodecode/templates/base/base.html:212 -#: rhodecode/templates/changelog/changelog.html:41 +#: rhodecode/templates/base/base.html:212 rhodecode/templates/base/root.html:50 +#: rhodecode/templates/changelog/changelog.html:43 msgid "Open new pull request" msgstr "Nouvelle requête de pull" -#: rhodecode/templates/base/base.html:214 +#: rhodecode/templates/base/base.html:215 +#: rhodecode/templates/forks/forks_data.html:21 +msgid "Compare fork" +msgstr "Comparer le fork" + +#: rhodecode/templates/base/base.html:217 msgid "search" msgstr "Rechercher" -#: rhodecode/templates/base/base.html:220 -#| msgid "unlock" +#: rhodecode/templates/base/base.html:223 msgid "lock" msgstr "Verrouiller" -#: rhodecode/templates/base/base.html:231 +#: rhodecode/templates/base/base.html:234 msgid "repositories groups" msgstr "Groupes de dépôts" -#: rhodecode/templates/base/base.html:233 +#: rhodecode/templates/base/base.html:236 msgid "users groups" msgstr "Groupes d’utilisateurs" -#: rhodecode/templates/base/base.html:234 +#: rhodecode/templates/base/base.html:237 msgid "permissions" msgstr "Permissions" -#: rhodecode/templates/base/base.html:236 +#: rhodecode/templates/base/base.html:239 +#, fuzzy +msgid "defaults" +msgstr "[Par défaut]" + +#: rhodecode/templates/base/base.html:240 msgid "settings" msgstr "Réglages" -#: rhodecode/templates/base/base.html:247 -#: rhodecode/templates/base/base.html:249 +#: rhodecode/templates/base/base.html:251 +#: rhodecode/templates/base/base.html:253 msgid "Followers" msgstr "Followers" -#: rhodecode/templates/base/base.html:255 -#: rhodecode/templates/base/base.html:257 +#: rhodecode/templates/base/base.html:259 +#: rhodecode/templates/base/base.html:261 msgid "Forks" msgstr "Forks" -#: rhodecode/templates/base/base.html:336 -#: rhodecode/templates/base/base.html:338 #: rhodecode/templates/base/base.html:340 +#: rhodecode/templates/base/base.html:342 +#: rhodecode/templates/base/base.html:344 #: rhodecode/templates/search/search.html:52 msgid "Search" msgstr "Rechercher" @@ -2905,7 +3145,7 @@ msgid "add another comment" msgstr "Nouveau commentaire" #: rhodecode/templates/base/root.html:43 -#: rhodecode/templates/journal/journal.html:120 +#: rhodecode/templates/journal/journal.html:75 #: rhodecode/templates/summary/summary.html:57 msgid "Stop following this repository" msgstr "Arrêter de suivre ce dépôt" @@ -2919,14 +3159,27 @@ msgstr "Suivre ce dépôt" msgid "Group" msgstr "Groupe" -#: rhodecode/templates/base/root.html:47 +#: rhodecode/templates/base/root.html:48 msgid "search truncated" msgstr "Résultats tronqués" -#: rhodecode/templates/base/root.html:48 +#: rhodecode/templates/base/root.html:49 msgid "no matching files" msgstr "Aucun fichier ne correspond" +#: rhodecode/templates/base/root.html:51 +#, fuzzy +msgid "Open new pull request for selected changesets" +msgstr "a ouvert une nouvelle requête de pull" + +#: rhodecode/templates/base/root.html:52 +msgid "Show selected changes __S -> __E" +msgstr "Afficher les changements sélections de __S à __E" + +#: rhodecode/templates/base/root.html:53 +msgid "Selection link" +msgstr "Lien vers la sélection" + #: rhodecode/templates/bookmarks/bookmarks.html:5 #, python-format msgid "%s Bookmarks" @@ -2934,8 +3187,9 @@ msgstr "Signets de %s" #: rhodecode/templates/bookmarks/bookmarks.html:39 #: rhodecode/templates/bookmarks/bookmarks_data.html:8 -#: rhodecode/templates/branches/branches.html:54 -#: rhodecode/templates/tags/tags.html:39 +#: rhodecode/templates/branches/branches.html:53 +#: rhodecode/templates/branches/branches_data.html:8 +#: rhodecode/templates/tags/tags.html:54 #: rhodecode/templates/tags/tags_data.html:8 msgid "Author" msgstr "Auteur" @@ -2949,34 +3203,15 @@ msgstr "Branches de %s" msgid "Compare branches" msgstr "Comparer les branches" -#: rhodecode/templates/branches/branches.html:57 +#: rhodecode/templates/branches/branches.html:56 +#: rhodecode/templates/branches/branches_data.html:10 #: rhodecode/templates/compare/compare_diff.html:5 #: rhodecode/templates/compare/compare_diff.html:13 +#: rhodecode/templates/tags/tags.html:57 +#: rhodecode/templates/tags/tags_data.html:10 msgid "Compare" msgstr "Comparer" -#: rhodecode/templates/branches/branches_data.html:6 -msgid "name" -msgstr "Prénom" - -#: rhodecode/templates/branches/branches_data.html:7 -msgid "date" -msgstr "Date" - -#: rhodecode/templates/branches/branches_data.html:8 -#: rhodecode/templates/shortlog/shortlog_data.html:8 -msgid "author" -msgstr "Auteur" - -#: rhodecode/templates/branches/branches_data.html:9 -#: rhodecode/templates/shortlog/shortlog_data.html:5 -msgid "revision" -msgstr "Révision" - -#: rhodecode/templates/branches/branches_data.html:10 -msgid "compare" -msgstr "Comparer" - #: rhodecode/templates/changelog/changelog.html:6 #, python-format msgid "%s Changelog" @@ -2989,59 +3224,66 @@ msgid_plural "showing %d out of %d revis msgstr[0] "Affichage de %d révision sur %d" msgstr[1] "Affichage de %d révisions sur %d" -#: rhodecode/templates/changelog/changelog.html:38 +#: rhodecode/templates/changelog/changelog.html:37 +#, fuzzy +msgid "Clear selection" +msgstr "Réglages de recherche" + +#: rhodecode/templates/changelog/changelog.html:40 #: rhodecode/templates/forks/forks_data.html:19 #, python-format msgid "compare fork with %s" msgstr "Comparer le fork avec %s" -#: rhodecode/templates/changelog/changelog.html:38 -#: rhodecode/templates/forks/forks_data.html:21 -msgid "Compare fork" -msgstr "Comparer le fork" - -#: rhodecode/templates/changelog/changelog.html:47 +#: rhodecode/templates/changelog/changelog.html:40 +#, fuzzy +msgid "Compare fork with parent" +msgstr "Comparer le fork avec %s" + +#: rhodecode/templates/changelog/changelog.html:49 msgid "Show" msgstr "Afficher" -#: rhodecode/templates/changelog/changelog.html:72 -#: rhodecode/templates/summary/summary.html:364 +#: rhodecode/templates/changelog/changelog.html:74 +#: rhodecode/templates/summary/summary.html:375 msgid "show more" msgstr "montrer plus" -#: rhodecode/templates/changelog/changelog.html:76 +#: rhodecode/templates/changelog/changelog.html:78 msgid "Affected number of files, click to show more details" msgstr "Nombre de fichiers modifiés, cliquez pour plus de détails" -#: rhodecode/templates/changelog/changelog.html:89 -#: rhodecode/templates/changeset/changeset.html:38 +#: rhodecode/templates/changelog/changelog.html:91 +#: rhodecode/templates/changeset/changeset.html:44 #: rhodecode/templates/changeset/changeset_file_comment.html:20 #: rhodecode/templates/changeset/changeset_range.html:46 msgid "Changeset status" msgstr "Statut du changeset" -#: rhodecode/templates/changelog/changelog.html:92 +#: rhodecode/templates/changelog/changelog.html:94 #: rhodecode/templates/shortlog/shortlog_data.html:20 msgid "Click to open associated pull request" msgstr "Cliquez ici pour ouvrir la requête de pull associée." -#: rhodecode/templates/changelog/changelog.html:102 -#: rhodecode/templates/changeset/changeset.html:78 +#: rhodecode/templates/changelog/changelog.html:104 +#: rhodecode/templates/changeset/changeset.html:85 msgid "Parent" msgstr "Parent" -#: rhodecode/templates/changelog/changelog.html:108 -#: rhodecode/templates/changeset/changeset.html:84 +#: rhodecode/templates/changelog/changelog.html:110 +#: rhodecode/templates/changeset/changeset.html:91 msgid "No parents" msgstr "Aucun parent" -#: rhodecode/templates/changelog/changelog.html:113 -#: rhodecode/templates/changeset/changeset.html:88 +#: rhodecode/templates/changelog/changelog.html:115 +#: rhodecode/templates/changeset/changeset.html:95 +#: rhodecode/templates/changeset/changeset_range.html:79 msgid "merge" msgstr "Fusion" -#: rhodecode/templates/changelog/changelog.html:116 -#: rhodecode/templates/changeset/changeset.html:91 +#: rhodecode/templates/changelog/changelog.html:118 +#: rhodecode/templates/changeset/changeset.html:98 +#: rhodecode/templates/changeset/changeset_range.html:82 #: rhodecode/templates/files/files.html:29 #: rhodecode/templates/files/files_add.html:33 #: rhodecode/templates/files/files_edit.html:33 @@ -3049,44 +3291,42 @@ msgstr "Fusion" msgid "branch" msgstr "Branche" -#: rhodecode/templates/changelog/changelog.html:122 +#: rhodecode/templates/changelog/changelog.html:124 +#: rhodecode/templates/changeset/changeset_range.html:88 msgid "bookmark" msgstr "Signet" -#: rhodecode/templates/changelog/changelog.html:128 -#: rhodecode/templates/changeset/changeset.html:96 +#: rhodecode/templates/changelog/changelog.html:130 +#: rhodecode/templates/changeset/changeset.html:103 +#: rhodecode/templates/changeset/changeset_range.html:94 msgid "tag" msgstr "Tag" -#: rhodecode/templates/changelog/changelog.html:164 -msgid "Show selected changes __S -> __E" -msgstr "Afficher les changements sélections de __S à __E" - -#: rhodecode/templates/changelog/changelog.html:255 +#: rhodecode/templates/changelog/changelog.html:301 msgid "There are no changes yet" msgstr "Il n’y a aucun changement pour le moment" #: rhodecode/templates/changelog/changelog_details.html:4 -#: rhodecode/templates/changeset/changeset.html:66 +#: rhodecode/templates/changeset/changeset.html:73 msgid "removed" msgstr "Supprimés" #: rhodecode/templates/changelog/changelog_details.html:5 -#: rhodecode/templates/changeset/changeset.html:67 +#: rhodecode/templates/changeset/changeset.html:74 msgid "changed" msgstr "Modifiés" #: rhodecode/templates/changelog/changelog_details.html:6 -#: rhodecode/templates/changeset/changeset.html:68 +#: rhodecode/templates/changeset/changeset.html:75 msgid "added" msgstr "Ajoutés" #: rhodecode/templates/changelog/changelog_details.html:8 #: rhodecode/templates/changelog/changelog_details.html:9 #: rhodecode/templates/changelog/changelog_details.html:10 -#: rhodecode/templates/changeset/changeset.html:70 -#: rhodecode/templates/changeset/changeset.html:71 -#: rhodecode/templates/changeset/changeset.html:72 +#: rhodecode/templates/changeset/changeset.html:77 +#: rhodecode/templates/changeset/changeset.html:78 +#: rhodecode/templates/changeset/changeset.html:79 #, python-format msgid "affected %s files" msgstr "%s fichiers affectés" @@ -3100,17 +3340,22 @@ msgstr "Changeset de %s" msgid "Changeset" msgstr "Changements" -#: rhodecode/templates/changeset/changeset.html:43 +#: rhodecode/templates/changeset/changeset.html:49 #: rhodecode/templates/changeset/diff_block.html:20 msgid "raw diff" msgstr "Diff brut" -#: rhodecode/templates/changeset/changeset.html:44 +#: rhodecode/templates/changeset/changeset.html:50 +#, fuzzy +msgid "patch diff" +msgstr "Diff brut" + +#: rhodecode/templates/changeset/changeset.html:51 #: rhodecode/templates/changeset/diff_block.html:21 msgid "download diff" msgstr "Télécharger le diff" -#: rhodecode/templates/changeset/changeset.html:48 +#: rhodecode/templates/changeset/changeset.html:55 #: rhodecode/templates/changeset/changeset_file_comment.html:82 #, python-format msgid "%d comment" @@ -3118,7 +3363,7 @@ msgid_plural "%d comments" msgstr[0] "%d commentaire" msgstr[1] "%d commentaires" -#: rhodecode/templates/changeset/changeset.html:48 +#: rhodecode/templates/changeset/changeset.html:55 #: rhodecode/templates/changeset/changeset_file_comment.html:82 #, python-format msgid "(%d inline)" @@ -3126,10 +3371,23 @@ msgid_plural "(%d inline)" msgstr[0] "(et %d en ligne)" msgstr[1] "(et %d en ligne)" -#: rhodecode/templates/changeset/changeset.html:103 -#, python-format -msgid "%s files affected with %s insertions and %s deletions:" -msgstr "%s fichiers affectés avec %s insertions et %s suppressions :" +#: rhodecode/templates/changeset/changeset.html:111 +#: rhodecode/templates/compare/compare_diff.html:44 +#: rhodecode/templates/pullrequests/pullrequest_show.html:76 +#, fuzzy, python-format +msgid "%s file changed" +msgid_plural "%s files changed" +msgstr[0] "%s fichié modifié" +msgstr[1] "%s fichié modifié" + +#: rhodecode/templates/changeset/changeset.html:113 +#: rhodecode/templates/compare/compare_diff.html:46 +#: rhodecode/templates/pullrequests/pullrequest_show.html:78 +#, fuzzy, python-format +msgid "%s file changed with %s insertions and %s deletions" +msgid_plural "%s files changed with %s insertions and %s deletions" +msgstr[0] "%s fichiers affectés avec %s insertions et %s suppressions" +msgstr[1] "%s fichiers affectés avec %s insertions et %s suppressions" #: rhodecode/templates/changeset/changeset_file_comment.html:42 msgid "Submitting..." @@ -3143,12 +3401,16 @@ msgstr "Commentaire sur la ligne {1}." #: rhodecode/templates/changeset/changeset_file_comment.html:121 #, python-format msgid "Comments parsed using %s syntax with %s support." -msgstr "Les commentaires sont analysés avec la syntaxe %s, avec le support de la commande %s." +msgstr "" +"Les commentaires sont analysés avec la syntaxe %s, avec le support de la " +"commande %s." #: rhodecode/templates/changeset/changeset_file_comment.html:48 #: rhodecode/templates/changeset/changeset_file_comment.html:123 msgid "Use @username inside this text to send notification to this RhodeCode user" -msgstr "Utilisez @nomutilisateur dans ce texte pour envoyer une notification à l’utilisateur RhodeCode en question." +msgstr "" +"Utilisez @nomutilisateur dans ce texte pour envoyer une notification à " +"l’utilisateur RhodeCode en question." #: rhodecode/templates/changeset/changeset_file_comment.html:59 #: rhodecode/templates/changeset/changeset_file_comment.html:138 @@ -3194,15 +3456,18 @@ msgstr "Changesets de %s" msgid "Compare View" msgstr "Comparaison" +#: rhodecode/templates/changeset/changeset_range.html:29 +#, fuzzy +msgid "Show combined compare" +msgstr "Afficher les commentaires" + #: rhodecode/templates/changeset/changeset_range.html:54 -#: rhodecode/templates/compare/compare_diff.html:41 -#: rhodecode/templates/pullrequests/pullrequest_show.html:73 msgid "Files affected" msgstr "Fichiers affectés" #: rhodecode/templates/changeset/diff_block.html:19 -msgid "diff" -msgstr "Diff" +msgid "show full diff for this file" +msgstr "" #: rhodecode/templates/changeset/diff_block.html:27 msgid "show inline comments" @@ -3213,8 +3478,18 @@ msgid "No changesets" msgstr "Aucun changeset" #: rhodecode/templates/compare/compare_diff.html:37 -msgid "Outgoing changesets" -msgstr "Changesets sortants" +#: rhodecode/templates/pullrequests/pullrequest_show.html:69 +#, fuzzy, python-format +msgid "Showing %s commit" +msgid_plural "Showing %s commits" +msgstr[0] "Afficher %s les commentaires" +msgstr[1] "Afficher %s les commentaires" + +#: rhodecode/templates/compare/compare_diff.html:52 +#: rhodecode/templates/pullrequests/pullrequest_show.html:84 +#, fuzzy +msgid "No files" +msgstr "Fichiers" #: rhodecode/templates/data_table/_dt_elements.html:39 #: rhodecode/templates/data_table/_dt_elements.html:41 @@ -3223,42 +3498,125 @@ msgid "Fork" msgstr "Fork" #: rhodecode/templates/data_table/_dt_elements.html:60 -#: rhodecode/templates/journal/journal.html:126 -#: rhodecode/templates/summary/summary.html:68 +#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/summary/summary.html:77 msgid "Mercurial repository" msgstr "Dépôt Mercurial" #: rhodecode/templates/data_table/_dt_elements.html:62 -#: rhodecode/templates/journal/journal.html:128 -#: rhodecode/templates/summary/summary.html:71 +#: rhodecode/templates/journal/journal.html:83 +#: rhodecode/templates/summary/summary.html:80 msgid "Git repository" msgstr "Dépôt Git" #: rhodecode/templates/data_table/_dt_elements.html:69 -#: rhodecode/templates/journal/journal.html:134 -#: rhodecode/templates/summary/summary.html:78 +#: rhodecode/templates/journal/journal.html:89 +#: rhodecode/templates/summary/summary.html:87 msgid "public repository" msgstr "Dépôt public" #: rhodecode/templates/data_table/_dt_elements.html:80 -#: rhodecode/templates/summary/summary.html:87 -#: rhodecode/templates/summary/summary.html:88 +#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:97 msgid "Fork of" msgstr "Fork de" -#: rhodecode/templates/data_table/_dt_elements.html:92 +#: rhodecode/templates/data_table/_dt_elements.html:94 msgid "No changesets yet" msgstr "Dépôt vide" -#: rhodecode/templates/data_table/_dt_elements.html:104 +#: rhodecode/templates/data_table/_dt_elements.html:101 +#: rhodecode/templates/data_table/_dt_elements.html:103 +#, python-format +msgid "Subscribe to %s rss feed" +msgstr "S’abonner au flux RSS de %s" + +#: rhodecode/templates/data_table/_dt_elements.html:109 +#: rhodecode/templates/data_table/_dt_elements.html:111 +#, python-format +msgid "Subscribe to %s atom feed" +msgstr "S’abonner au flux ATOM de %s" + +#: rhodecode/templates/data_table/_dt_elements.html:122 #, python-format msgid "Confirm to delete this user: %s" msgstr "Voulez-vous vraiment supprimer l’utilisateur « %s » ?" +#: rhodecode/templates/email_templates/changeset_comment.html:10 +#, fuzzy +msgid "New status$" +msgstr "Modifier le statut" + #: rhodecode/templates/email_templates/main.html:8 -msgid "This is an notification from RhodeCode." +#, fuzzy +msgid "This is a notification from RhodeCode." msgstr "Ceci est une notification de RhodeCode." +#: rhodecode/templates/email_templates/password_reset.html:4 +msgid "Hello" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:6 +msgid "We received a request to create a new password for your account." +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:8 +msgid "You can generate it by clicking following URL" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:12 +msgid "If you didn't request new password please ignore this email." +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:4 +#, python-format +msgid "" +"User %s opened pull request for repository %s and wants you to review " +"changes." +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:5 +#, fuzzy +msgid "title" +msgstr "Titre" + +#: rhodecode/templates/email_templates/pull_request.html:6 +#: rhodecode/templates/pullrequests/pullrequest.html:115 +msgid "description" +msgstr "Description" + +#: rhodecode/templates/email_templates/pull_request.html:11 +msgid "revisions for reviewing" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:18 +#, fuzzy +msgid "View this pull request here" +msgstr "Ajouter un relecteur à cette requête de pull." + +#: rhodecode/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +msgid "User %s commented on pull request #%s for repository %s" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request_comment.html:10 +#, fuzzy +msgid "New status" +msgstr "Modifier le statut" + +#: rhodecode/templates/email_templates/pull_request_comment.html:14 +msgid "View this comment here" +msgstr "" + +#: rhodecode/templates/email_templates/registration.html:4 +#, fuzzy +msgid "A new user have registered in RhodeCode" +msgstr "Vous vous êtes inscrits avec succès à RhodeCode" + +#: rhodecode/templates/email_templates/registration.html:9 +msgid "View this user here" +msgstr "" + #: rhodecode/templates/errors/error_document.html:46 #, python-format msgid "You will be redirected to %s in %s seconds" @@ -3274,21 +3632,16 @@ msgid "File diff" msgstr "Diff de fichier" #: rhodecode/templates/files/files.html:4 -#: rhodecode/templates/files/files.html:72 +#: rhodecode/templates/files/files.html:74 #, python-format msgid "%s files" msgstr "Fichiers de %s" #: rhodecode/templates/files/files.html:12 -#: rhodecode/templates/summary/summary.html:340 +#: rhodecode/templates/summary/summary.html:351 msgid "files" msgstr "Fichiers" -#: rhodecode/templates/files/files.html:92 -#: rhodecode/templates/files/files_source.html:124 -msgid "Selection link" -msgstr "Lien vers la sélection" - #: rhodecode/templates/files/files_add.html:4 #: rhodecode/templates/files/files_edit.html:4 #, python-format @@ -3363,7 +3716,7 @@ msgid "search file list" msgstr "Rechercher un fichier" #: rhodecode/templates/files/files_browser.html:31 -#: rhodecode/templates/shortlog/shortlog_data.html:80 +#: rhodecode/templates/shortlog/shortlog_data.html:78 msgid "add new file" msgstr "Ajouter un fichier" @@ -3396,18 +3749,18 @@ msgid "edit file" msgstr "Éditer le fichier" #: rhodecode/templates/files/files_edit.html:49 -#: rhodecode/templates/files/files_source.html:38 +#: rhodecode/templates/files/files_source.html:23 msgid "show annotation" msgstr "Afficher les annotations" #: rhodecode/templates/files/files_edit.html:50 -#: rhodecode/templates/files/files_source.html:40 -#: rhodecode/templates/files/files_source.html:68 +#: rhodecode/templates/files/files_source.html:25 +#: rhodecode/templates/files/files_source.html:53 msgid "show as raw" msgstr "montrer le fichier brut" #: rhodecode/templates/files/files_edit.html:51 -#: rhodecode/templates/files/files_source.html:41 +#: rhodecode/templates/files/files_source.html:26 msgid "download as raw" msgstr "télécharger le fichier brut" @@ -3419,35 +3772,45 @@ msgstr "Source" msgid "Editing file" msgstr "Édition du fichier" -#: rhodecode/templates/files/files_source.html:2 +#: rhodecode/templates/files/files_history_box.html:2 msgid "History" msgstr "Historique" -#: rhodecode/templates/files/files_source.html:9 +#: rhodecode/templates/files/files_history_box.html:9 msgid "diff to revision" msgstr "Diff avec la révision" -#: rhodecode/templates/files/files_source.html:10 +#: rhodecode/templates/files/files_history_box.html:10 msgid "show at revision" msgstr "Afficher à la révision" -#: rhodecode/templates/files/files_source.html:14 +#: rhodecode/templates/files/files_history_box.html:11 +#, fuzzy +msgid "show full history" +msgstr "Chargement de la liste des fichiers…" + +#: rhodecode/templates/files/files_history_box.html:16 #, python-format msgid "%s author" msgid_plural "%s authors" msgstr[0] "%s auteur" msgstr[1] "%s auteurs" -#: rhodecode/templates/files/files_source.html:36 +#: rhodecode/templates/files/files_source.html:6 +#, fuzzy +msgid "Load file history" +msgstr "Chargement de la liste des fichiers…" + +#: rhodecode/templates/files/files_source.html:21 msgid "show source" msgstr "montrer les sources" -#: rhodecode/templates/files/files_source.html:59 +#: rhodecode/templates/files/files_source.html:44 #, python-format msgid "Binary file (%s)" msgstr "Fichier binaire (%s)" -#: rhodecode/templates/files/files_source.html:68 +#: rhodecode/templates/files/files_source.html:53 msgid "File is too big to display" msgstr "Ce fichier est trop gros pour être affiché." @@ -3522,7 +3885,7 @@ msgstr "forks" msgid "forked" msgstr "forké" -#: rhodecode/templates/forks/forks_data.html:38 +#: rhodecode/templates/forks/forks_data.html:42 msgid "There are no forks yet" msgstr "Il n’y a pas encore de forks." @@ -3535,7 +3898,7 @@ msgid "RSS journal feed" msgstr "Flux RSS du journal" #: rhodecode/templates/journal/journal.html:24 -#: rhodecode/templates/pullrequests/pullrequest.html:53 +#: rhodecode/templates/pullrequests/pullrequest.html:55 msgid "Refresh" msgstr "Rafraîchir" @@ -3557,19 +3920,19 @@ msgstr "Surveillé" msgid "ADD" msgstr "AJOUTER" -#: rhodecode/templates/journal/journal.html:114 +#: rhodecode/templates/journal/journal.html:69 msgid "following user" msgstr "utilisateur suivant" -#: rhodecode/templates/journal/journal.html:114 +#: rhodecode/templates/journal/journal.html:69 msgid "user" msgstr "utilisateur" -#: rhodecode/templates/journal/journal.html:147 +#: rhodecode/templates/journal/journal.html:102 msgid "You are not following any users or repositories" msgstr "Vous ne suivez aucun utilisateur ou dépôt" -#: rhodecode/templates/journal/journal_data.html:47 +#: rhodecode/templates/journal/journal_data.html:51 msgid "No entries yet" msgstr "Aucune entrée pour le moment" @@ -3590,44 +3953,40 @@ msgstr "Journal public" msgid "New pull request" msgstr "Nouvelle requête de pull" -#: rhodecode/templates/pullrequests/pullrequest.html:52 +#: rhodecode/templates/pullrequests/pullrequest.html:54 msgid "refresh overview" msgstr "Rafraîchir les informations" -#: rhodecode/templates/pullrequests/pullrequest.html:64 +#: rhodecode/templates/pullrequests/pullrequest.html:66 msgid "Detailed compare view" msgstr "Comparaison détaillée" -#: rhodecode/templates/pullrequests/pullrequest.html:68 -#: rhodecode/templates/pullrequests/pullrequest_show.html:86 +#: rhodecode/templates/pullrequests/pullrequest.html:70 +#: rhodecode/templates/pullrequests/pullrequest_show.html:100 msgid "Pull request reviewers" msgstr "Relecteurs de la requête de pull" -#: rhodecode/templates/pullrequests/pullrequest.html:77 -#: rhodecode/templates/pullrequests/pullrequest_show.html:98 +#: rhodecode/templates/pullrequests/pullrequest.html:79 +#: rhodecode/templates/pullrequests/pullrequest_show.html:112 msgid "owner" msgstr "Propriétaire" -#: rhodecode/templates/pullrequests/pullrequest.html:89 -#: rhodecode/templates/pullrequests/pullrequest_show.html:113 +#: rhodecode/templates/pullrequests/pullrequest.html:91 +#: rhodecode/templates/pullrequests/pullrequest_show.html:127 msgid "Add reviewer to this pull request." msgstr "Ajouter un relecteur à cette requête de pull." -#: rhodecode/templates/pullrequests/pullrequest.html:95 +#: rhodecode/templates/pullrequests/pullrequest.html:97 msgid "Create new pull request" msgstr "Nouvelle requête de pull" -#: rhodecode/templates/pullrequests/pullrequest.html:104 +#: rhodecode/templates/pullrequests/pullrequest.html:106 #: rhodecode/templates/pullrequests/pullrequest_show.html:25 #: rhodecode/templates/pullrequests/pullrequest_show_all.html:33 msgid "Title" msgstr "Titre" -#: rhodecode/templates/pullrequests/pullrequest.html:113 -msgid "description" -msgstr "Description" - -#: rhodecode/templates/pullrequests/pullrequest.html:121 +#: rhodecode/templates/pullrequests/pullrequest.html:123 msgid "Send pull request" msgstr "Envoyer la requête de pull" @@ -3661,7 +4020,6 @@ msgstr[0] "%d relecteur" msgstr[1] "%d relecteurs" #: rhodecode/templates/pullrequests/pullrequest_show.html:50 -#| msgid "Pull request reviewers" msgid "pull request was reviewed by all reviewers" msgstr "La requête de pull a été relue par tous les relecteurs." @@ -3673,10 +4031,6 @@ msgstr "Créé le" msgid "Compare view" msgstr "Vue de comparaison" -#: rhodecode/templates/pullrequests/pullrequest_show.html:69 -msgid "Incoming changesets" -msgstr "Changesets entrants" - #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4 msgid "all pull requests" msgstr "Requêtes de pull" @@ -3746,27 +4100,32 @@ msgstr "Réglages de %s" msgid "%s Shortlog" msgstr "Résumé de %s" -#: rhodecode/templates/shortlog/shortlog.html:14 +#: rhodecode/templates/shortlog/shortlog.html:15 +#: rhodecode/templates/shortlog/shortlog.html:19 msgid "shortlog" msgstr "Résumé" +#: rhodecode/templates/shortlog/shortlog_data.html:5 +msgid "revision" +msgstr "Révision" + #: rhodecode/templates/shortlog/shortlog_data.html:7 msgid "age" msgstr "Âge" -#: rhodecode/templates/shortlog/shortlog_data.html:33 -msgid "No commit message" -msgstr "Pas de message de commit" - -#: rhodecode/templates/shortlog/shortlog_data.html:77 +#: rhodecode/templates/shortlog/shortlog_data.html:8 +msgid "author" +msgstr "Auteur" + +#: rhodecode/templates/shortlog/shortlog_data.html:75 msgid "Add or upload files directly via RhodeCode" msgstr "Ajouter ou téléverser des fichiers directement via RhodeCode…" -#: rhodecode/templates/shortlog/shortlog_data.html:86 +#: rhodecode/templates/shortlog/shortlog_data.html:84 msgid "Push new repo" msgstr "Pusher le nouveau dépôt" -#: rhodecode/templates/shortlog/shortlog_data.html:94 +#: rhodecode/templates/shortlog/shortlog_data.html:92 msgid "Existing repository?" msgstr "Le dépôt existe déjà ?" @@ -3794,128 +4153,138 @@ msgstr "Flux RSS du dépôt %s" msgid "ATOM" msgstr "ATOM" -#: rhodecode/templates/summary/summary.html:82 +#: rhodecode/templates/summary/summary.html:70 +#, fuzzy, python-format +msgid "Repository locked by %s" +msgstr "Ce dépôt n’est pas verrouillé %s." + +#: rhodecode/templates/summary/summary.html:72 +#, fuzzy +msgid "Repository unlocked" +msgstr "Ce dépôt n’est pas verrouillé." + +#: rhodecode/templates/summary/summary.html:91 #, python-format msgid "Non changable ID %s" msgstr "Identifiant permanent : %s" -#: rhodecode/templates/summary/summary.html:87 +#: rhodecode/templates/summary/summary.html:96 msgid "public" msgstr "publique" -#: rhodecode/templates/summary/summary.html:95 +#: rhodecode/templates/summary/summary.html:104 msgid "remote clone" msgstr "Clone distant" -#: rhodecode/templates/summary/summary.html:116 +#: rhodecode/templates/summary/summary.html:125 msgid "Contact" msgstr "Contact" -#: rhodecode/templates/summary/summary.html:130 +#: rhodecode/templates/summary/summary.html:139 msgid "Clone url" msgstr "URL de clone" -#: rhodecode/templates/summary/summary.html:133 +#: rhodecode/templates/summary/summary.html:142 msgid "Show by Name" msgstr "Afficher par nom" -#: rhodecode/templates/summary/summary.html:134 +#: rhodecode/templates/summary/summary.html:143 msgid "Show by ID" msgstr "Afficher par ID" -#: rhodecode/templates/summary/summary.html:142 +#: rhodecode/templates/summary/summary.html:151 msgid "Trending files" msgstr "Populaires" -#: rhodecode/templates/summary/summary.html:150 -#: rhodecode/templates/summary/summary.html:166 -#: rhodecode/templates/summary/summary.html:194 +#: rhodecode/templates/summary/summary.html:159 +#: rhodecode/templates/summary/summary.html:175 +#: rhodecode/templates/summary/summary.html:203 msgid "enable" msgstr "Activer" -#: rhodecode/templates/summary/summary.html:158 +#: rhodecode/templates/summary/summary.html:167 msgid "Download" msgstr "Téléchargements" -#: rhodecode/templates/summary/summary.html:162 +#: rhodecode/templates/summary/summary.html:171 msgid "There are no downloads yet" msgstr "Il n’y a pas encore de téléchargements proposés." -#: rhodecode/templates/summary/summary.html:164 +#: rhodecode/templates/summary/summary.html:173 msgid "Downloads are disabled for this repository" msgstr "Les téléchargements sont désactivés pour ce dépôt." -#: rhodecode/templates/summary/summary.html:170 +#: rhodecode/templates/summary/summary.html:179 msgid "Download as zip" msgstr "Télécharger en ZIP" -#: rhodecode/templates/summary/summary.html:173 +#: rhodecode/templates/summary/summary.html:182 msgid "Check this to download archive with subrepos" msgstr "Télécharger une archive contenant également les sous-dépôts éventuels" -#: rhodecode/templates/summary/summary.html:173 +#: rhodecode/templates/summary/summary.html:182 msgid "with subrepos" msgstr "avec les sous-dépôts" -#: rhodecode/templates/summary/summary.html:186 +#: rhodecode/templates/summary/summary.html:195 msgid "Commit activity by day / author" msgstr "Activité de commit par jour et par auteur" -#: rhodecode/templates/summary/summary.html:197 +#: rhodecode/templates/summary/summary.html:206 msgid "Stats gathered: " msgstr "Statistiques obtenues :" -#: rhodecode/templates/summary/summary.html:218 +#: rhodecode/templates/summary/summary.html:227 msgid "Shortlog" msgstr "Résumé des changements" -#: rhodecode/templates/summary/summary.html:220 +#: rhodecode/templates/summary/summary.html:229 msgid "Quick start" msgstr "Démarrage rapide" -#: rhodecode/templates/summary/summary.html:233 +#: rhodecode/templates/summary/summary.html:243 #, python-format msgid "Readme file at revision '%s'" msgstr "Fichier « Lisez-moi » à la révision « %s »" -#: rhodecode/templates/summary/summary.html:236 +#: rhodecode/templates/summary/summary.html:246 msgid "Permalink to this readme" msgstr "Lien permanent vers ce fichier « Lisez-moi »" -#: rhodecode/templates/summary/summary.html:293 +#: rhodecode/templates/summary/summary.html:304 #, python-format msgid "Download %s as %s" msgstr "Télécharger %s comme archive %s" -#: rhodecode/templates/summary/summary.html:650 +#: rhodecode/templates/summary/summary.html:661 msgid "commits" msgstr "commits" -#: rhodecode/templates/summary/summary.html:651 +#: rhodecode/templates/summary/summary.html:662 msgid "files added" msgstr "fichiers ajoutés" -#: rhodecode/templates/summary/summary.html:652 +#: rhodecode/templates/summary/summary.html:663 msgid "files changed" msgstr "fichiers modifiés" -#: rhodecode/templates/summary/summary.html:653 +#: rhodecode/templates/summary/summary.html:664 msgid "files removed" msgstr "fichiers supprimés" -#: rhodecode/templates/summary/summary.html:656 +#: rhodecode/templates/summary/summary.html:667 msgid "commit" msgstr "commit" -#: rhodecode/templates/summary/summary.html:657 +#: rhodecode/templates/summary/summary.html:668 msgid "file added" msgstr "fichier ajouté" -#: rhodecode/templates/summary/summary.html:658 +#: rhodecode/templates/summary/summary.html:669 msgid "file changed" msgstr "fichié modifié" -#: rhodecode/templates/summary/summary.html:659 +#: rhodecode/templates/summary/summary.html:670 msgid "file removed" msgstr "fichier supprimé" @@ -3924,5 +4293,8 @@ msgstr "fichier supprimé" msgid "%s Tags" msgstr "Tags de %s" -#~ msgid "Groups" -#~ msgstr "Groupes" +#: rhodecode/templates/tags/tags.html:29 +#, fuzzy +msgid "Compare tags" +msgstr "Comparer" + diff --git a/rhodecode/i18n/ja/LC_MESSAGES/rhodecode.mo b/rhodecode/i18n/ja/LC_MESSAGES/rhodecode.mo index 75399ccda196e369894ade4a9a4aefe0260b6c98..2f94cd23b5009fe843b7a38ebd7d54300142115d GIT binary patch literal 61119 zc%1FM2Y8&-l{fyTkqsmvA#6xUVHVcdCPO@bE_{D|O11V4AZrhSLt#n&S~>w4ttOYnSxh1aA0@dPg*I9b9|1kNJ(HG&UF zc%#7G0*?~>GQpn`{1<}HNj5e|!V- z=Mh{@a0tOw1X~EMBslZOREFSpdLn-hf`me?PfygF+Y|jO=m|Vb=m|VU34V!Sbx+hk zm*5u(E++UDg3Abgli-G)z}v%;@8>Ua0?Lg0~R7 z;wPHco!~@*J-Gh_yAXWjC#dgzf<%Ja*C=x~&kMo61S7YgoqZDj#x20ZS9$}FR}1Xj z8~7O78}l=&H}E^QH}D_njs90kdR=eK(;_Lqyf@}^yVUbA!AlvRy@9`%d!yYq2wqF@ z@4Yd;Yi>n5eu5re2e)E=R^5vF8gB(%9Fg#g1i!`W?pCz>3Bf_UaBm}A61e>~(0`0z z0l|9-=5aZKS2NxBp|#KS+6V0f`v8yk^#Ofv>x1@A^g%tZ^g+At3;eJT@bL!;|E&-3 za9$4Z^Yt9mpld`j>N zf)~-`{u{xbebN6r`=b7P30}$TN#Ij`F%KX01%AHV599CA5BzULKj1Sea85t;XH7r! zV@p5K&;EYs@0yk^H~P#r(XR3q1ZI7wvu~;cw>w-l<5-jFABCGkh{ zQ18$4(Es=IK(8O?VZHxe%6+~+==7rgXunH;l+W&u{@&If^Kgg6-%YTLV2#9o*dO!$ z%>n4QX8_jobpwF!u>&x_eu7y9XAi*q>>q$}y)XcL`>z9lmv0ONymFw(v4QCK=z(Zw z!a$5OJP_lUD&aW;K@Up?V%{30+#xAKhlz$b?f!n~FZ z0-cl(LjL80Fs_Y*kblP@v~yJAPYHZ_5ZZm7;P(i=Bk_M31b+4T+rba7y&dbflpu*T zZQ1Rp?`O9Izt7z+^L0D=|M@#GpI^HJ{k!xIm|bw{^2mt!<7Pi4@130!_YtfFw`F= zIG*6FVTxsI$zkZ%75Sj!Yx7ax(0ue`q`=Afn9rH{=+B~j^lwEz@UdCK`|?3gCnWwE z$^Ujf=BYU!Z75I|^^mkYR`dL%}{CEq{&tL)C znN|S)Usr&B*B1cad!^jd1)$rP3m|vDS%`JjzYz7^QwaRbD#X0bFGM{L6r!Fr1bgv# z3eo=$3qjAHFGBynSA_mwS%h)kR0KYgTZH+WPy{|3FT!{h7NMO7iqQV5BFO7aMZn*G z6rug|MgV^o3jE;+w39Ug^6$10z=L-LV%BBhl{xBcaa~jzs&TMxy?SBhml6N22|CBQcJ(BSE*DMgk8fMq)falYB3X1fG90 z68hbDMqxhkMqsyc2kCB1kH<_V}IP2mg5|=KK4j2`2=v8;x;=Bs^s_^6eds z_Fo>2{(UqW?P+%jUhhKvH%oZ%UFd(=UBGAUU7(+3cR^3ta~Jf1m+u0-{QWMB^P(}J z*Y0D`-uN+~lgcq@_vZvlczurn{pOBEy|<4A{(WPSFEJMN%^NFvKS2`7+Rm|%Grt>) zdAe*IRd0pq!3qUfCyMem%5 zayb*RF8WWzJWiSjI!R1KeKiw-|78=!o|uS!zdsTB$mhHm=jC3Mze>VCmT+$`+8O9Y zxglQQyIj(%y|7OfdeQGAUd;c~Ua{-EqUU)*r+@GQzZVyypVt-xueTP1Uk)w?-b#v* z@4jO2fpx{uYfl!Vf5~Eu@55r?{qIul%Ra1cj}QI+cOUxMonRHg8+?$*jXsR$KYfr_ z-}PhOruxy32mPpTk012?Q%V1gr2pLydb=cmeq{$R&cXoJQIOzaf)7dh7$V}Em|jXy z@6i&_zjc#Kz*f&VurquoDA z{x5`({*@5M|LqXwqlpuk~K;CEyc_1_f*9fYHp zhbd9a+kKM0FbX={B=P$t{?VxT6$HK^?YDez@=^@rcrONi&?@=A5Es8u9QA%TF8Y65 z{Dg6gudn1A76*Nfj{}d1IOuReT>Mp%epKptAujw>^1mzX{2>m0`?&<*MG5r#iUjJp zI)Q%QlE64_PhkCxOMrjOOkmuzrTpRq+S!xhJ=$<=-0;*{*Nm3`?D(a?_Z{g zJvI&N|B`9w$Fz@_lJK=BMK76-`I|Hy^-P(L`tO|% z`kpf#^{tn3O_Kl7>FD3H)4_kfS*$WUzq{^@LS1u!M%i2g5S6o{hofW z*mneH5uAT7@Oa^U$p3wT|8^hd@yh#v&mZ51a{UNaeNNK`N%|8rp_jij6Lj|FYT)As z)#zVVHO75|gm0B_UNz`un8X(g3`%@OHR`LC`c_MLXEo;Kl)%@j(f>~+{WB?laSh6K z6?kI}+8rR_;S%-=oLqzU6Ezs`JvFFzzT{sia7PX1<1oQ*6CO?pe5Drfx3e(cUz~&a z|Lz>r+j9=+v$w#pb0FuZ&%rph&jEf<%|U;jnuB?Geh%p5tH)j_UbT8Hp$bpZkuG7t5XOL)#a(8r>A7}w*H{tUqgk7pkCM@G!Y{>UHaqn!l{;1}An z0Q%T(7r=j?y%75<@r4-2&jntz2=QYUL9c#z5%Pbq2;=E-KjcU0{a9~n?}y#@+WpYe zE?bQGC|->GixwmQlZ!!5e_jkcUa$n?>beB;lf4A^xqb=8H%P*Tk{(MVx~yD+ z`j#yLeeGC+b`LDU{JksTPnH0`mp-6rWYTMcA3(iZAHcjE6Zq}}=+76IVty}JihNfs z#k};9__C$&+s<8z@xCbeE`AVp^i>Z6Uo!|!ep5P@84d5abC9q_20Y# z>4OALkod$3=*P2HVE#_5fIji*3hawrwi5GRuoC!Py%P4wFIPf8xpWoqaEHJLR)HQ~ zU4?#peKq=f)oS4@t3~dw2EE?3TI`?I!2eMRzrPyvp{+rG&tHS_cqH6)4eIGF@%d}8 zPDZUk|0~wO@32AAzquChJ8Mz?G70~9E&6-QTGSU?3p$yz7X4^gi}mu0wHVL0)?pmi ztV6!r)(PKOhw?MlVg8q_!@A$M4(+`puvOq^0xw<Vun z_tJXokNjyp^vH=D(62cg(2p$}uwEb8fbso#1Nh+o73kS0`)V6OuhETY|KLX8|2+x+ z%O>FE`c2@olQyB9icJ{*!c7?OI)P1_KtGR5`X4u8-p|`Cc-t)dTbt3(o|}?DBi{#$|y=KA|;N$Ks$hTq(_{Bq8pf5bO1^s$^f4&v- z`N~%G<2?!ghrqvY1$}*a8}eVd4dc9i8}>&kwjtkFx1;~x-VQ&+t=rN683cbq@Z@&P z*I%{+Z(Vkve}y~X5A*E+KYexw^uAy3fP8G*0X_CFJAkh*)q`%oS&#l+Uyt$huZJEu zq#k$()Pp|nm3+(U1t0Z-k9yGkamn|V!2eT^as10plvf*#M?CF_0{=qi5~@`rZ8-&C~=a`LrZ=9d|MhY&ZY*WzbNq^ zG(g|`Q-kp1-RR#pc8fkP;jX(eo@|NF-HrJ#lJvWFV_v{>3NN4r?L_0%LN{5M7{4e zf)2jig#Lc73H4nr@VX|9udk%v*@SWvnt-3V5?&(tj}RO|@Mi=I3I6b5(iI6tA4d9< z4`W_mei-9^N8&$ySoEpAq7wN|GE$D z^x21Uw@Y~VKKR4N>_a`T?!!2Kw-4j|Pk|Ti2kf#R?+$>Ef8(I=#e?GSIS74tHh3!x6xdN5Jo=9zng29|7IG zbOidvl}EvE?mUY6DvqMPIY&|NLjq3;eDf&$41bdFMaR(p>|@w>n{W*J^qOO^GoC*t z`&!4K|NiwD+RJ}L(?~_v${s;KKYaxIBi}j>d`&wJI-7eO^S$pl+Iv;te;mhnE<6GH zxJ+Ql3CNW_Cm?UMlQcF0Lr$XI?I)q9oID9UUV94sdiW{K-{@1QccO$VPQm{<nZf_nN#T3>!&a;pGo`=9u@ueQOJWnkHQY!^(g8)`Y7^0`Y7n(-AA!M@@GlE^D)#j z;W30m0%MPXuTFam^5c=m(9fp@zWNyEq2)2~vF|(%`PTn&=pnU_Bj47?A%_k;F8)A) zFFlU+n|fUI`^SN=OP>(E_6gK?^AqTI_6ifqwkr3C!zXpAh}}N#Lc& zlZfyCB>GkMr0DGe4?GFI=G`aJ?zf%-zAk+V^M3PF!25`&u)e1~g?#rug?45WEGM|? zDag6=ev15)ehPWD_@`*+V~PLn)2RPef#aS=`aMr$zIQy0e9u3Pe*IqZb^96Q-T;Ev zkX?QFXV9-(eh&WJ^%ofL41xm)K1lHQyncQGJ?DjAqW|YVgZcjYGpP4_&j7!@o`HNX zdMe-8XP@I361`<@4$o_ikc|L60d&#%0Ib5ggzfOS(xkVsoQ_=51k z7g2BRi{Mu)Uc`9cdQtY(Bz*Bp;2T*lpB1A7VWuaSJaUP3<(zXbgL z`6bl%x0j%Q|Ld=0oe{i)*V(VIUK)Od^w)odaee<~qA8x=m$5(c)0aWl7yKIeZ}~Os z&`H0Bz4FUn1D_Yag7O1j!FXb?z&>933h?^DD_BPtz6v<_RmjVEuVVdu={3l`3kCLk z4R+x;flFS)x_ja^;P;)^uud;{9e&CyUPt->fyJ+5oy~Y1`8T`{dHl=Q!Ixfs9e(hn zz^}c5ayPz#dJEn_y_4Pmp6?g9;SJ!i@eR=D!8btfFTR0!Xn6zU|NR@l*SFpT-Q~QA zc;B1AQ_Y*GXOF-GZ=(K3-o(89@=ZBcDCIwua^HFj@Yc65&%w9Qe)(IF*R^lS`L4H6 z&&IbvcSi*N@-5W+j=&G!!g~7iTj<|)Z=*lM-$wY(x8?lv+ZgXG32zd(N8*pYjsCy# zHu}^2Hss;o-p2mqweMhF?|KJ%NcB6A!#m!A9D4m7wEO-$$logAZ@!CueCJ*8r5oQx zI};=vc^B=kd>3@O|6S-Qr{6{S@4tusT=5?0@aFeWe*Al&`|x{^mwVsC`uXfVtmE6> zhyF0*eWXAAKJ>GTe}nq(_zmd3_BTjB{2P@2ViM)^k|VNWyc ziyqC0@7WBzj}bUc;Ob`4$D2V9bl<|NWA_L(&@sKG}+XzR@av2FZ6`8^T{}1Aq8I8~UHqhV-EVN3?2V4@mw) zQvQuL)c=8`pZ5X$+duk1{AdCPeE@zm`UBK^x4@|a@B2XfG9O^PTRyOV51>e17yH_|hLgMEn2t z5!&e`Fh}6PkAUA{9|1pskH81ke1!G&%tvzG@3*o)@>{ew{kMo;K#)Yaw(7TX&g5gk z!^hx+Roe=bQk7-@JS9`ip9mSq5qdi>)_UbaESC>MKVtkSE z@<2Fl`Hb1Cpg%#6KUh+t0+CQCf{t+@I$4J*qA(DT2g9ZKE{jCt(o|uhocdG6pG96IdrKn< zV7By7B2J~uFO`$~p*}*vaDXr$jt8cyK4Xewgsh54EEtbOt31J&Cme};%Doj80YA^R zzt~d|h?aRPVjddO6mQJqiw3-LN{mFQVAxwupC!>qxhGy0P)&JaRk3)W+*1(>cw+%i zG!a%wRAVUU^TvabF!k0O414JRNYo#Qf}~Mik~1*aDXHg1r1; zg@cNQ6^zz$1`i%KO3TR~|_TD)Oz$P!bLD5l{!5`4Z$f*3-M zk4LFMWkAdE`}v>8OY9{O3V=_j2*Pt24Zl24UQElJqr$|8)H>q;AvjSHig^9NDy_L_ zz!wiyc`AcmPeED4ALvK_R942D@e%WsMk9#|Gpr_7g5V>J@^~3dwUy~*t1OgaADfD0 zzG-||8VIQ6n${tT4wQR?Ax@+U_0j>1u#ET-1&RIPucajl1!M837YHmVp#gKD1Y^h( zDFG&~_V}oOley+tS!9Y@_#S^CP7M-fLm~cW@;MH8)r=73di?=UB#g0Jh<-|tG8Ge% z`h0;{ELcp-o+=Mi2BK9FVlvc4Cr&88KTzULgyOt9%7avj8=$%aUSFBDZiOqOg(x#s zuG~jhhy}uy(pU4sqlU}8aYZb?L@Z9rD!mzQ#kx`)O@tz`_?dL@AKJCFPFX3ACWpEc zjS{6te7;09N^|W`L`h_LeAG!se5E%O^b0v;%Il|PrT7XFNSAi%wB`fKK$vHiU(nsj zb}V>~#l7u~I76wo zy09Rmgj5oaYL7f(&{oozgUjmARD~)Up<#8wC( zU92NgA}YL5R-Pq`BCr693(_%Sab_B<*^!z+BaO$oHouz0n4^TH()5zCM6s-aet~E_ zSi*=3kZv3BaXm`K^+cwGAzB>Mo~>sfD*9@susy95r3h&4qp#jEdwtOVW zOX93qdDWsdn!y}=|QC83NYiDHZ@kUX#rnt6546Ke!7g`8Y zfhrCrDk`X#C`qe@wW7*kyvkEt#pbH#8r|TMbeRi1SWf)LD`8%}I`oXB88iaLI(N_` zc-0z#N@NX}1f%6@S}m(s$&6mWg=+@;gt+IiF2jy;wAU6(xsK9>@i?;?N=v{hMSS3h zW;SN&8M>!+K)VXYt3O(kZu+`J(+31 z;*I+0EAEBh%;xWamYc5ky2X)o-sNjLevnM$4=T23Q4A|J4R3A~R$P zGn6v5R9Wz_L9>(CgIdFliq60|Jtv>57Cn1+*SsD!>S%fl|+$iD6#WY!X;bq-RNGLqyfHFLY$Y)VdKNQ^-)+Sh&FRPMh`RliN^kL6;rH{~x#i&Zq}8mrS| ze{YDyXa7K4X^-&qYRY{%lr?4brTm91L`}D*`U;x*lc{PUiPdc6m%pTKz)?ZLD5*nI zyZ&ieZKk`le}vT(nPLY4ct)|Js}yNsF|3q0w0@6L_=JH_O{JuKRgmT~B@*=$>yQ|w zxZ0y9t3Tj2G_2x)a?QoKlkuvGfJHA?`IJGSz9J=nHVzFxZ+~X}gYvZjIZC6`2H5$< zfKa5^8?w3o4EZvEy5RLq)&`Kyz?`G2RbHxv-_`0{&^<|KmR+X?w^A&zI^9I3%w_|| zU(e-Tx~a$sjKc1*%ZWv>gsAcanBrrSOIJY=QrO0)Ov1pNf?RE2fM`Y=$n0Yvm1Ud` zj8IPgqgFY6v0NO;9+p8|lsH1Lg5_y2tPS$9^cz&7Haq-5KMNaOZC7Ggrw?)0lA*@l zG*cnV)&_-1d7&h)&1poW0)0rl(iYDzb3f*W0VR(@fs#0_%qTNKMQ$W?y~SLi&(!dR zx3V71e&9%PETVKR&dcSDGT^LgsR!fSx8lfD`b(_^<8BTwN>kdHm6dg)<&;G#d@$Hu z8TWz$GpnwpU+rOAnlKN>Xe5=z;}zXv-LHvNhJPgAN~zZ?5X+vh%&WPG&~v5DA9k*`5(dS^9&nK!X_ zzp0kQvNe{NZ0ajWjEr!D??QCH&_@;#V!U?8EXNfx>lBSq8|(#h*OexUAo_xpiEqUd zjV}vJRB;8iaz0Br$Q14whsq%j6R|%yQtBBLR$y2nt{_v47zZ>SFK_)>qDd3AMiXUQu&l!2$Q1b^ zqJdvSwk(Et!wJ%2s;tHfT(B-$WVUA*sl`gZi9B-gCJTnuR*zY|@-RF6Ys5*sin;Q{ z=$j(OjuKA?m8Vp%QXEJl=8)JKq7>_;NjV-OJatGQ%9ag@p1i3f;lT{dNQ;CTLJE3T zk++nmN*fX^53nfIhE#d<{T%un8WHyqs;M#&XE%&EXmfB65nWXqnm019KvT7=cGJ*^2YLv7=zAPh0Tr(s@8&0Okw8r`^{0SskV56zciDuF3#xI}U^w*sy0S!Z>qvC9;XkTk3e zgzW0hu%UT_X%Yu(!`M-jX2WtUVW_x@#5x7IPNFjw4`X8ESUiBHr<4Wl+b_h)6CuA^ zGAvwZq(kPOVq% zd9v@76n}4Vgt`=olITsVvWlW2{)CSxKOcJyy1>u3Z#_uRS}>Ed$k-ssx1Vf@r9~*$ zCup~e__H(SaY+@?#cVuI!xrBxO+vQkdZl-z<=0QM*rLT9o^Ruy9MV9TAPjOSU~yBRXc5YR*WwuJ+9lSN6GJ4Z z_y|ftpoEZ6MzEBqkJT;RL^EQzvr1Yk3>h901igtkxOgRo*SS*VO0=ezi|T=3*dLfm za1wZb0jD5{hq4}DkT^9fj=eESayp(6tse_e1(l&yV7i)O z2$)^5EH{`%YGvy?UoPq4NIQvYb1HN46fz(JuIUbbVoQVNmmY<=VJXO_AmhQs2uv^5 zeq#pV+hVQyuFNT~Q^k7NHGMVACG~BVtg?J&?joB@>olD$)I;zvbay0SnRgZ zm~qynlb#p|r=`jMu1l0_ReG9BO^z8g4n(o5#-3Bnu8uj~B_ms4j%E^@T_>anLr$W z-F8EeP+n!_>>Oirk-5dO$JsDW^^cgE&B|DJr~x{{+4I8Mqit)HMyR}Pmi=C;CNjD6 z-mWvtZnC8GQW?EnXOh`yzz{>0Q(KX!W))9@2O=|1Vc}pk-E5`?;Yk+nceZCxiAtvV zRBb6YiC#KRQpGc{s3_k9xAF}=diG*#jE%EEMVyzfR#=o%P&A=va3L!v%3on|O%#sk zTU3yjrxnsHs6VFr5q=Hi9z)Rm&yo>9ybI{$l21B!0K80go2tZSl$Nmm!;>i(_Nza3 z1E)|O2heS86;x+HnRXn6qRxnw1w*9uhjF%oO+cobt7$O4P{MC>`YS0*%~|(Qv_can z;^A?~M&m>=eN0h*&~Bu>ILH#vV$^ntW!=iy<~*e24$3t?l|iloR+|(t6&5Ys6ZEB@ zZj)@LO5RQ`tHl?brk_yY<$!c!&U96N!h}Lk)~y7HcKP_sps)^^DXGs96*@%JG#U!) zzcfe8v|SD}Azf__>N&DFPG^+nXUBVqoR_$PSGjuqj$kj3ib!ykypoyhMDJ%igJL5U z?RK*&6fCJyK7dl1^8oMVQGMRhSTC(GQLK(Hc#0FH5{QeZjza9>ELQdy`-XVmSSk0; zlxQrbCs_0+xEtfxE@FzYChGof`>L?!5F07YH=rMQFC@8bv;OrMo<2Cw2Zc)_YBA({ zeUsI3i=u+jnmQ(5!~zBTr$uGh@$|r*=QWObsl^uX^c(6aPf%_)$twargouh*7s9cWY^h34?AYqUNvR^UjzCzs+nBO=n>-OFBU_eBB+T2($|uX7 zl?tM=fZDs^I}2)OA`v3nEd(+%IQHF0OryLgy3e@`7W3OGlMLlvWh1 zpnq{v--<|o2(#)3XJAoOP72_nPf;{MS=b}be;ntWnWmH~oUM((nF!N`LY9f&tIlqa zkyKF?FN=h;IOcNG$T1X7Ra~8YBN?jOTXHW&u_sDre8Z(ofyrT7#l~4gwPBz~8vY@g z*%3H;C3CLaR3ntREaD&M5+%yIC1NNCo^EBOVq$lfj54LVdZb6X?y&2LI69?=EG;Sb zWiZ620MpMo>-i}Y%`xc$&dQD3DH`uP_AzE3$6e&`W?*U@j3(^2DOrZI*Q8fvjc`?= zU};%=N`U`*{KiSI5$psrU6D3Jt3>IdR>uU+y{2FE6Xu+a>RjCyBV-`P2bS|WPgAuk05Px>lvy#z@jM?GcuhEF+BR-XJ$r7!Eyaz_ro=dOmjE*vNXM+AcMj zE=m1>I{KwH1o_CR92l1KvMk#y(aK*cajwKW%BzkAX`^`I`2s<9PI?V$G8hZR*^Wst znOS#Ev#Ek&ZIne^@<=2c4TzZKlWZ|=F2UZWQS67&MvJh-$#7i}W~&U0(@M{5MR0z0 zrIZrwN4?<8Bt_I!D8(*~Iz|)>)^m4_QH#I$EGqGv$0zM3Xr)04>WmEMg(Jr9E`^I-30dY4%!$+~rqLF)r5M}xMpo5L zwcitEjTWtlDV`!QdN5n+L$3sLXq$|Z4B-(j7t+Blme`CVkF#Qx*_UqjveHJ z6=^#NJ5GqqniI!c$8{8`J69L-Gw#A`8dX(yoHDD?KQKKTnbb<0N{~1yG-z?uX>$9c*u46s>1MI<5z}A}YsNi~;sh0! zT>)QIsqkXwiN6~mzlKY@$_8aE-HLWOIqb7tG?5^#0N^{O`7F0e^ouQ;?PR^kZ9b>R z=biLh^p+V_MXb@f%IF@eyIPIZ1k_Ml*iyBeLe#L}G~H`tZ^?2LPm^s8PbB15hix=< z%}W$kwew&wa=+#1f7Cn046BpNrfb0{AjU6gZHf!B!e+REmByB>u@F~(Fc$&m4FGJC zX}FrGANAJv;vD-OT87)amh6s+=wtx{aUJK^r>Ao{JM2o@72A#qu&rh8Zf3aA36qbi z3|S8`c9`3G)~utvo$9P3dk1JXbGMIVd%n(fLTSHlHf#rFG8m^guA$hl`qa6Q3dokY z2L3CD)Qr3_TjrQ0cQh7PW+6nEvC}9lvBWstZ|dSoLMX|tIF{4T4f!j;evMQv`{2^6 z<&>~(zcyf=ZIqMSQ_6UgH&)^G1vI4{YOq1Trm+>I1)V3IjTmDyG-x@cjD~fuz$Dfm znYD(z(b51=Wa&qU59;ES6@RLtA)*Ghs)7|7)4LWj&(<1u(=>SpLq8N>4t0$W9kQhq zC$pI^Lv-g9YF9H(#n_a}Fnb#ez8SWhM8jN%+2NvJqa@^zyyL^^*cuP$*HH{AQn!OO z7bR7*u0-}Z2l;x2(XebCX%*=Qz2IZf9Ilp%v~yi|tMg1H>RdJ>ir784ygCCL#bF~4 zcV3A-n<-;;0a_3zJNEE8fvPo~xCJ`7hJMJ_d=N#CG0s=ntW+0|w5IO?$6_$$Dt(qq z@|=t_{~%2Rh5AR#{1PV*kC&}%Y&~i*-r0p4TY!0xTaSoG6JejaNTw_U(J*Yt;R6K5 zyvOvtMSfsJ{qa~-Cxjt^@ok|w6~UGfZfhGmXG*xLL_B0;J{n~_VuCO6II3^!YUT)a zv6q&yy2{O8wq`S?QX5jK+kTefQ5jQoH9#(wX>o5U|BGpGvTF&eQ_&=w)F9*JfXr z-Q#>d4it@N4T+To{aJkzrLnA{NH0&`keoq-`{d;27UUHco}WLgD6607FIjw}wwLF+ z9@k!%MgRA>-qYjyUe{gwqaN4x=s_8?^fNKGd_A(RyU}y)k9+m#`J)~;Q$D`CkyS)O zG8SULLN8DM5rYSNhUN^(^W0)<`c}#sE=|zV%qj|a%X@hyc|Erb9^5As%#K7$Z#_Rh zl!$smS^Xo?@>nlVxIzVEy|4X=2cNxroIhmHkUVqv*V2&t;V63+?;rG1?&xbOLNu8_ z!P(S6ymumAl68}rk2_ith-T%5eGwK@y*xJ+2jk}t5XT$gt*V!&ui9(sk$rP^&+|1; zvbvs0^zYBC{5As*4ZjQ=Vd#HI`9lmxa zYadM3ZcEl|N!A|csFoc|Ro0^ih%_Ce7ceR}a+lz9lE1Q!wTa&d7sl$zGI1;;)8>wwl zgD|7a-r2*g^?Oo{Yxt{WRIFW3r}NHL;rOcXX|0X|jeIopbug%+#^%`uwPQr~EYw^x_SQbXKY& zdliNcCu=d2OIsQ!+h*0Pr7hevjb%Iczj_mQgYZ7H=6})hzi2rFv~*K^ZmVK6JMqB} z{aF`yYBsgIG&OI2+v=@ZSz7C<6RG)|wB{8Ls~Ts~qGm)eKU+!p(voYpt7;CZza1pI z)s!}Cjgnxz9+<4z!+gqkKhVZumHwHMAs0yw~IVb;U)v$ zdYCAIi>%Pml$u?yu->Q`;U;rfsk&_xtIL-qnXqFeH9gr-Em{sPY+1IKh=``Q`TlLL zxfMARxiu+Dsa3?XM;}ur)TWW+8BI*G`aw0cm8#G#g{FG7OzN0o?K0AW5!X4O#VO-p zy4T#vsbeZi$C;AF?lo{HH>(;NY`N5=oCH&_PZE} zk=6hEK;v0G&}g4NmxZG#Cijpcw8Ol3svBEoZBETUnp(Jm6jCJ#>eZ|h`7Uf(eXM2K zMjIJA=2+2nbtAa?=_7kOQGs<`*;nDYsD;LDU$|#dsgqqnA|F=_=ZwbasL0;Ib5xOa zm}gk&*>~sMv@cANik&{SKDB36rzo$verMb2C1+Mf;cSaOg~Yz*r53M9om_b~$QM$# zsx+Od<{Z3N38vYp)|$7jYdNrm>ArEJV!ABu+SaUflvIl7BI|nEq8R-ih@eg(H?{B- zsinFC^9U^$Et48a`LyPFr&@O{!n2mCy&IZm?ogI0sS?YSqWQ39+HTG3<`GXyR`0SZ zHueWDIgVA7`D&U>jRmh=x>&q#2gDMRpjvOKN3_89T0hih7v)jK(+ zu9n!yzo~UQi#sI`7a5xWSv-!JtU1X2bg-}`4Z0mM%T(G8sq4n?oIPo+Ki<6R{^qqu ztTup)>eW1NCgEPG7fWGkKqK9%oEZBNo2;(WZ4;K&o?afB&~43o4!BxJJD592Rj%#? zRpLQaLZwwNbhV?>@)_)zJpxD1;WM1B-Bh+0kV-Q4e(OB6tgCKWzRkfq+(!C8_N`7g z%aGRoOx;cqOjYot@gWS2erK!p_gG^Bkjho`vBG=Mb9j-_~+yjl$d` z3VGX96})aFO}yN?L_MVzSe>cgs)S`&5O(*OvoDMwDJH9LnbOvDmYK-`gtco;b|-(y zmp*|=5MK%cysM!k!%-em?IuI3(jRy*RBBvV&y4ay3MQ>?RjQ39$-_m?QASf4O!Z}a4t=#iFT|nt##LK z(z%?Rs&(i7mIDuKSVc~EpsK7|c}lh`dZbC7mD+S5wWN+6EliO#lzCcu=dm@ilol~d zZV-2Rrn?5^x0jrmu7Lbh!)t52WWoSI#ywd_2WJ}K%6 zKP41kC^g7hY~Ehey1m+@bJw}!UMv7L+N&^BEf>u%t*QTEkM3I8va_p@1D!&bo^`uY zc=oHIZ+FKMqBQ-jT~f7DdsboxIdy6_*Q>-y#~G}uQYSqVu0HWb&{3zVNbOmrWF&Ou zbOF86V(=P{Y2D4kO32o|&C6GI>{seURyRkIdoer+oLYQ8Ek{e&O=fIcx$JbXh3Cvp zH6FD`VYj+a)|-voZvkw02t3QYZGdZ9JvC+%=Bk8n*HTbTgkB?k@b% zxo>{%UK&o;KA=dY$yn2=Q>(C#=qh8*EVpGV-=?yQbEH1Cgo>_GY;UVfwJd^#3QO}1 z=3`NMbi|rUP%n>*Ft9f$J3Q77S)5c<2T4IITON?3R-h7r1A=iUtIg=tnq7aI74k+= z=$h*uN!wbgZt!$<)Q3gd)nh0vr;psv9+gfkj{j<9E)`hObdLJe*(xp7*aGQKA}LB+ ztrlK`&bT^q3)m8vj+hFqO1|5-iz_QxyH;h~WPTZP!eogmQFc}w83RCd0vvqMP9Is+yyqe1rgmQ*>>t;~ z#Ti)ETH59=ABS4Zd;iK))^c!zZX?)^VYDqjOdqg2AjiaxvFo!yu=_y{>!Z^8!G#88 z(H&QDz*0-oEJBBhkbP(Mq%`bXO?TqV6&;EZVi(iR>t-tdpE!nTR7xK1St+2K@zS&| z6^#-dR7I9!s_qdp*1D%Kv*ln7EJQX|)elbaAF%HX)}z(2MmZW6@MOBbLT$zJ=_4~+ zx9{Mce9MLcDQ0{S+$D+xYV*9A|CHyc4Lw=I={g+NF#_Utbt-eBaWXbG=xXuO*7{X# z3-`I5sE`5%X}4F*?1W79=||=(ZokBu=92v%{pfXO?-jO&p{qBZeq==kquHvH=*w+p zb@RLhsRgv$b_m^>l1$&cZ(g}Y(THxPxa_JZOW(O2X^Nah4|6}+&HDhbW|51=8`{cp zXwtV)_M2yr%p6Wli0WbeO`X6rUfOmZX=UQx4}C?&e=xKA5Ds7xiO4mgro+jH(Ky5M@Zq4{Utb`%Ubx44{@xxHns z&;7bxrgo?{D_keRb%dH~5C`t4iq%4;j&0lJ51Y@Mch;@jI(HWtzcdov&0DiedC7#P zKRLd}zH8^^DyVMcw;jh6j-#&;1%q9jp^jR6c`~upw%LnXPBcn0cDG$y^^xZJ8#30( zJ$3h7E+mn1HZ^L-KDY}ZIaO9?*yJv)JNKzA8(_|bcc~+ScKz43M}ZOThgSh(qc zfaOR7mS2Xp&6nO?&qTH#nToRgJ5G7oN?*=~|8Bl1m0|Wk2N6j`rYk%*)CO+jnttZCiE!@lhcrs#zYQw;kc; zi<9jg@#geS90bqEGE$TjYaxxfVl=%wbY^m zWIK28f_?Mu&8f8;FpDgq7A(gq<^v3J^PTR!!`oqfioRX1UFKRc^npc>&Hd`)2IfU{Y`a>( z@U85(PD*lSjR&%z7cPwPthpU~aE2X&^0+!Hk=W4L5sUezyBr#b+otB*w`elG!SCt< zKKobr+wtC>?Q{HRLO<0_meU~1T?`IK0VXozF@D}$sNb7f+_|E*av3M;OkVVNp?-(w zS~m2zx(vG$9k8uc+rtq`;%?QCLDuQp$~L*HUkKABW7-m;N@A5^VQAJ3+#h z42@5k&f<#?e12;8W;u1OZwtsFIzCS?C|IJ{_-@n7qu&`YPdxD!81!MhQ)D%id8+px zC!<);q0H~h8II^DX!Wz_)eBv8>&_kcUg@}?+nzhsRz{wyNXKNVZZ69vxmaL7?`}`C zya*tw4ByCjK&_FzatwigSwePWlrsRDpctmu!ew^AliF{nejOLiNawB_pLsepyKPgQ zp*ni9l&hA>uE}$`RW1{!U|UB&(E}e(>cp1R@x_GgwiOSyv13m^!)m>-#4~?fu5Ga5 zpN9Uq+lk9rZX?(pP=LOtUl_^cum1=C>V&=>;Jjbf&fbc3mNR71w}Z|u+3kF8#;n#| z6=x>wSs3|tb~v=mM|U%p0h@4fJ3~3Jy-U%U?nO#3NwkWeyHM8x((>CD=yvn)hC$pJ z-@d4BY@54CSyQ|8y;@lt=3NYZVk~yo%4E%4Wi>5e1B~C_SV^?6=Ui!?pEDv^XI<31 ziha~A4Tmh_Z|_|WvbkCh9#&h)j5625bkqSk)U>#%wf2Our7Sya!tQs86inxbO(p?BEU7BRJSP++k@e&F0SF6i@R&7-Awr zJ%-UhTySK+LMyY@t!eYXp~76HHb6 z)vdrfhkpjU0P0|f^^C0g(GWNNPY#c2)(a@@1y)l6+~H#+WIw$wK&TEWS3<;gO$+C2~LoIJB#_O@Se zRH`=~|1(s$jx=*-9LDJ>E@S)E6J8*?(Uj?wl{=Sfw~Xbv6qn>P{izh)oanfp&bM#O zO&IkE)DFwfsKBIG3%=gCuWi{xabEJPZZM24=VtFe?MGD{-kkOv)DA}B3_E{J#VREj zEj5eNuMKrnLHpibduiLxv`|?at4d>XPy-r-4Y5E})&nc8SS>SUS=X>t*lj|0#fO(E zqNUX^uUmF^xmBjGm2O$x6`~d>8mO}}3iZ8FuRN_$u<;!W)CnAS$!;5fEns*G+b50aJ}@5 ztWJZF7m!Q6nHBj4buffA9V{kd1;j?0cW*K@`g8M(HhQ=8`(!ms*+y+g>>EE=1IGon z&y_tubN9gMM^^E{6sJ1sID2S+>%}x32+^p{hNT_2l9Yj|r1igT#XdgBoL05Np_X>y z!}cJ7#pJLZ>9vLlgangKoOw{_i>1V`g) z8uSM*Z14M}Z>^o(X)uw;?Qd(@w!$+Vj#USTYm~LJF|)nbpq%6L&9=>7=gH(I8)JRg zB2%{NhA~#s8Rw?GIZp39`#TemOn+|!zw&z*Jf$f*-~=lmH|0ive0HLT(TGrE7v z`DQXJCF&-tM(d`n`hIz`y5m;{ad1m5vowzByn?MeBRbB?KY*mz(Ea)@hCa#ZzlCJp z`^ofBn3m~{uy&pevjy;|uI)7zDDH9!DWfOSxesGJJRswgR|q;7)wfq!27@SL3H^tlj6;BKy>Zzw zl7~N1i?^!DGafiun(4@)Rhl*8PP(Bw8W$AxRe(Kc2Tiy<=3&(1_RxpRhQXOX=wbU+ zD&9b{8IMZ8HJ;9Je^8@6<|vt*OyC^6eb8B=J?mE@&#(dq^`7Ba+M()mij^~bzKOhsdKMh>Tk-NL79%J;Or~2o$fqaDmcs1E)#bqHFeGv+o`%T`BXbs z*nVrn{)C3(5qw*k@L0DrTi_qjfLvJAS-W-PcL%lCdU&&D(T1CnmN&la9-Ep44*#C@ zF^i1%QZqim(Mg$VybP70qO>;^tVdE6Gj_X9+OqRl%jy%j-`=`?h5V{nx_)Hg6S~9B zxSa2Jb5ZPk=jNYz70Q|HaQ2FqzWm%rUiT=R~$^+gM7AoI_w>ALF?F>v`o&ERn9!^^+r7S z`t$w`g@t?>R6kNA4^26KDlVP=?BPtm8<$$VqWMsrWdL8Gl>Ob`n>!AHsCCNUf(JUDS2GsH+KJX#VZ~5}o7MR-B#;y>B(j?Okt#&F6L{ z%HYltZvR*6j0&9lgvPU79qbd@XhuIKCr8)-To0^tT3b64lh3sT9xd68M>)ZcQwxvb zY@R%=dyTQN>$Y+E&;0$n_I6-1j{g6T+nt_vh)7>c_0HeebAOy#ju*|;_t*YEJ^C{# diff --git a/rhodecode/i18n/ja/LC_MESSAGES/rhodecode.po b/rhodecode/i18n/ja/LC_MESSAGES/rhodecode.po --- a/rhodecode/i18n/ja/LC_MESSAGES/rhodecode.po +++ b/rhodecode/i18n/ja/LC_MESSAGES/rhodecode.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: RhodeCode 1.2.0\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2012-09-02 20:30+0200\n" -"PO-Revision-Date: 2012-07-14 03:16+0900\n" +"POT-Creation-Date: 2012-12-03 03:21+0100\n" +"PO-Revision-Date: 2012-10-27 15:06+0900\n" "Last-Translator: FULL NAME \n" "Language-Team: ja \n" "Plural-Forms: nplurals=1; plural=0\n" @@ -22,36 +22,38 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 0.9.6\n" -#: rhodecode/controllers/changelog.py:94 +#: rhodecode/controllers/changelog.py:95 msgid "All Branches" msgstr "すべてのブランチ" -#: rhodecode/controllers/changeset.py:83 +#: rhodecode/controllers/changeset.py:84 msgid "show white space" msgstr "空白を表示" -#: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97 +#: rhodecode/controllers/changeset.py:91 rhodecode/controllers/changeset.py:98 msgid "ignore white space" msgstr "空白を無視" -#: rhodecode/controllers/changeset.py:157 +#: rhodecode/controllers/changeset.py:164 #, python-format msgid "%s line context" msgstr "" -#: rhodecode/controllers/changeset.py:333 -#: rhodecode/controllers/changeset.py:348 rhodecode/lib/diffs.py:70 -msgid "binary file" -msgstr "バイナリファイル" - -#: rhodecode/controllers/changeset.py:408 +#: rhodecode/controllers/changeset.py:315 +#: rhodecode/controllers/pullrequests.py:411 +#, fuzzy, python-format +msgid "Status change -> %s" +msgstr "" + +#: rhodecode/controllers/changeset.py:346 msgid "" "Changing status on a changeset associated witha closed pull request is " "not allowed" msgstr "" -#: rhodecode/controllers/compare.py:69 -#, fuzzy +#: rhodecode/controllers/compare.py:75 +#: rhodecode/controllers/pullrequests.py:117 +#: rhodecode/controllers/shortlog.py:100 msgid "There are no changesets yet" msgstr "まだ変更がありません" @@ -81,100 +83,109 @@ msgid "" "fulfilling the request." msgstr "" -#: rhodecode/controllers/feed.py:49 +#: rhodecode/controllers/feed.py:52 #, python-format msgid "Changes on %s repository" msgstr "%s リポジトリでの変更" -#: rhodecode/controllers/feed.py:50 +#: rhodecode/controllers/feed.py:53 #, python-format msgid "%s %s feed" msgstr "%s %s フィード" -#: rhodecode/controllers/feed.py:75 +#: rhodecode/controllers/feed.py:86 +#: rhodecode/templates/changeset/changeset.html:126 +#: rhodecode/templates/changeset/changeset.html:138 +#: rhodecode/templates/compare/compare_diff.html:62 +#: rhodecode/templates/compare/compare_diff.html:73 +#: rhodecode/templates/pullrequests/pullrequest_show.html:94 +#: rhodecode/templates/pullrequests/pullrequest_show.html:153 +msgid "Changeset was too big and was cut off..." +msgstr "チェンジセットが大きすぎるため、省略しました" + +#: rhodecode/controllers/feed.py:92 msgid "commited on" msgstr "コミット" -#: rhodecode/controllers/files.py:84 -#, fuzzy +#: rhodecode/controllers/files.py:86 msgid "click here to add new file" msgstr "新しいファイルを追加" -#: rhodecode/controllers/files.py:85 +#: rhodecode/controllers/files.py:87 #, python-format msgid "There are no files yet %s" msgstr "まだファイルがありません %s" -#: rhodecode/controllers/files.py:239 rhodecode/controllers/files.py:299 +#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325 #, python-format msgid "This repository is has been locked by %s on %s" -msgstr "" - -#: rhodecode/controllers/files.py:266 +msgstr "このリポジトリは %s によって %s にロックされました" + +#: rhodecode/controllers/files.py:292 #, python-format msgid "Edited %s via RhodeCode" msgstr "RhodeCode経由で %s を変更" -#: rhodecode/controllers/files.py:271 +#: rhodecode/controllers/files.py:297 msgid "No changes" msgstr "変更点なし" -#: rhodecode/controllers/files.py:282 rhodecode/controllers/files.py:346 +#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372 #, python-format msgid "Successfully committed to %s" msgstr "%s へのコミットが成功しました" -#: rhodecode/controllers/files.py:287 rhodecode/controllers/files.py:352 +#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378 msgid "Error occurred during commit" msgstr "コミット中にエラーが発生しました" -#: rhodecode/controllers/files.py:318 +#: rhodecode/controllers/files.py:344 #, python-format msgid "Added %s via RhodeCode" msgstr "RhodeCode経由で %s を追加" -#: rhodecode/controllers/files.py:332 +#: rhodecode/controllers/files.py:358 msgid "No content" msgstr "内容がありません" -#: rhodecode/controllers/files.py:336 +#: rhodecode/controllers/files.py:362 msgid "No filename" msgstr "ファイル名がありません" -#: rhodecode/controllers/files.py:378 +#: rhodecode/controllers/files.py:404 msgid "downloads disabled" msgstr "ダウンロードは無効化されています" -#: rhodecode/controllers/files.py:389 +#: rhodecode/controllers/files.py:415 #, python-format msgid "Unknown revision %s" msgstr "%s は未知のリビジョンです" -#: rhodecode/controllers/files.py:391 +#: rhodecode/controllers/files.py:417 msgid "Empty repository" msgstr "空のリポジトリ" -#: rhodecode/controllers/files.py:393 +#: rhodecode/controllers/files.py:419 msgid "Unknown archive type" msgstr "未知のアーカイブ種別です" -#: rhodecode/controllers/files.py:494 +#: rhodecode/controllers/files.py:564 #: rhodecode/templates/changeset/changeset_range.html:13 #: rhodecode/templates/changeset/changeset_range.html:31 msgid "Changesets" msgstr "チェンジセット" -#: rhodecode/controllers/files.py:495 rhodecode/controllers/pullrequests.py:72 -#: rhodecode/controllers/summary.py:232 rhodecode/model/scm.py:543 +#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:76 +#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550 msgid "Branches" msgstr "ブランチ" -#: rhodecode/controllers/files.py:496 rhodecode/controllers/pullrequests.py:76 -#: rhodecode/controllers/summary.py:233 rhodecode/model/scm.py:554 +#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:80 +#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561 msgid "Tags" msgstr "タグ" -#: rhodecode/controllers/forks.py:73 rhodecode/controllers/admin/repos.py:90 +#: rhodecode/controllers/forks.py:74 rhodecode/controllers/admin/repos.py:92 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -184,7 +195,7 @@ msgstr "" "%s " "リポジトリはDB内に見つかりませんでした。おそらくファイルシステム上で作られたか名前が変更されたためです。リポジトリをもう一度チェックするためにアプリケーションを立ち上げ直してください。" -#: rhodecode/controllers/forks.py:133 rhodecode/controllers/settings.py:72 +#: rhodecode/controllers/forks.py:134 rhodecode/controllers/settings.py:73 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -194,22 +205,22 @@ msgstr "" "%s " "リポジトリはDB内に見つかりませんでした。おそらくファイルシステム上で作られたか名前が変更されたためです。リポジトリをもう一度チェックするためにアプリケーションを立ち上げ直してください。" -#: rhodecode/controllers/forks.py:167 +#: rhodecode/controllers/forks.py:168 #, python-format msgid "forked %s repository as %s" msgstr "リポジトリ %s を %s としてフォーク" -#: rhodecode/controllers/forks.py:181 +#: rhodecode/controllers/forks.py:182 #, python-format msgid "An error occurred during repository forking %s" msgstr "リポジトリ %s のフォーク中にエラーが発生しました" -#: rhodecode/controllers/journal.py:202 rhodecode/controllers/journal.py:239 +#: rhodecode/controllers/journal.py:206 rhodecode/controllers/journal.py:243 msgid "public journal" msgstr "公開ジャーナル" -#: rhodecode/controllers/journal.py:206 rhodecode/controllers/journal.py:243 -#: rhodecode/templates/base/base.html:220 +#: rhodecode/controllers/journal.py:210 rhodecode/controllers/journal.py:247 +#: rhodecode/templates/base/base.html:232 msgid "journal" msgstr "ジャーナル" @@ -227,58 +238,56 @@ msgid "" "email" msgstr "パスワードをリセットしました。新しいパスワードをあなたのメールアドレスに送りました" -#: rhodecode/controllers/pullrequests.py:74 rhodecode/model/scm.py:549 +#: rhodecode/controllers/pullrequests.py:78 rhodecode/model/scm.py:556 msgid "Bookmarks" msgstr "ブックマーク" -#: rhodecode/controllers/pullrequests.py:158 +#: rhodecode/controllers/pullrequests.py:186 msgid "Pull request requires a title with min. 3 chars" -msgstr "" - -#: rhodecode/controllers/pullrequests.py:160 -#, fuzzy +msgstr "プルリクエストには3文字以上のタイトルが必要です" + +#: rhodecode/controllers/pullrequests.py:188 msgid "error during creation of pull request" -msgstr "ユーザー %s の作成中にエラーが発生しました" - -#: rhodecode/controllers/pullrequests.py:181 +msgstr "プルリクエストの作成中にエラーが発生しました" + +#: rhodecode/controllers/pullrequests.py:220 msgid "Successfully opened new pull request" msgstr "新しいプルリクエストを作成しました" -#: rhodecode/controllers/pullrequests.py:184 +#: rhodecode/controllers/pullrequests.py:223 msgid "Error occurred during sending pull request" msgstr "プルリクエストの作成中にエラーが発生しました" -#: rhodecode/controllers/pullrequests.py:217 -#, fuzzy +#: rhodecode/controllers/pullrequests.py:256 msgid "Successfully deleted pull request" -msgstr "新しいプルリクエストを作成しました" - -#: rhodecode/controllers/search.py:131 +msgstr "プルリクエストを削除しました" + +#: rhodecode/controllers/search.py:134 msgid "Invalid search query. Try quoting it." msgstr "無効な検索クエリーです。\\\"で囲んで下さい" -#: rhodecode/controllers/search.py:136 +#: rhodecode/controllers/search.py:139 msgid "There is no index to search in. Please run whoosh indexer" msgstr "検索するためのインデックスがありません。whooshでインデックスを作成して下さい" -#: rhodecode/controllers/search.py:140 +#: rhodecode/controllers/search.py:143 msgid "An error occurred during this search operation" msgstr "検索を実行する際にエラーがおきました" -#: rhodecode/controllers/settings.py:107 -#: rhodecode/controllers/admin/repos.py:266 +#: rhodecode/controllers/settings.py:108 +#: rhodecode/controllers/admin/repos.py:268 #, python-format msgid "Repository %s updated successfully" msgstr "リポジトリ %s の更新に成功しました" -#: rhodecode/controllers/settings.py:125 -#: rhodecode/controllers/admin/repos.py:284 +#: rhodecode/controllers/settings.py:126 +#: rhodecode/controllers/admin/repos.py:286 #, python-format msgid "error occurred during update of repository %s" msgstr "リポジトリ %s の更新中にエラーが発生しました" -#: rhodecode/controllers/settings.py:143 -#: rhodecode/controllers/admin/repos.py:302 +#: rhodecode/controllers/settings.py:144 +#: rhodecode/controllers/admin/repos.py:304 #, python-format msgid "" "%s repository is not mapped to db perhaps it was moved or renamed from " @@ -288,28 +297,58 @@ msgstr "" "%s " "リポジトリはDB内に見つかりませんでした。おそらくファイルシステム上で作られたか名前が変更されたためです。リポジトリをもう一度チェックするためにアプリケーションを立ち上げ直してください。" -#: rhodecode/controllers/settings.py:155 -#: rhodecode/controllers/admin/repos.py:314 +#: rhodecode/controllers/settings.py:156 +#: rhodecode/controllers/admin/repos.py:316 #, python-format msgid "deleted repository %s" msgstr "リポジトリ %s を削除しました" -#: rhodecode/controllers/settings.py:159 -#: rhodecode/controllers/admin/repos.py:324 -#: rhodecode/controllers/admin/repos.py:330 +#: rhodecode/controllers/settings.py:160 +#: rhodecode/controllers/admin/repos.py:326 +#: rhodecode/controllers/admin/repos.py:332 #, python-format msgid "An error occurred during deletion of %s" msgstr "リポジトリ %s の削除中にエラーが発生しました" -#: rhodecode/controllers/summary.py:138 -msgid "No data loaded yet" +#: rhodecode/controllers/settings.py:179 +#, fuzzy +msgid "unlocked" +msgstr "変更可能にする" + +#: rhodecode/controllers/settings.py:182 +#, fuzzy +msgid "locked" +msgstr "変更可能にする" + +#: rhodecode/controllers/settings.py:184 +#, fuzzy, python-format +msgid "Repository has been %s" msgstr "" -#: rhodecode/controllers/summary.py:142 -#: rhodecode/templates/summary/summary.html:148 +#: rhodecode/controllers/settings.py:188 +#: rhodecode/controllers/admin/repos.py:424 +msgid "An error occurred during unlocking" +msgstr "アンロック時にエラーが発生しました" + +#: rhodecode/controllers/summary.py:140 +msgid "No data loaded yet" +msgstr "まだデータが読み込まれていません" + +#: rhodecode/controllers/summary.py:144 +#: rhodecode/templates/summary/summary.html:157 msgid "Statistics are disabled for this repository" msgstr "このリポジトリの統計は無効化されています" +#: rhodecode/controllers/admin/defaults.py:96 +#, fuzzy +msgid "Default settings updated successfully" +msgstr "LDAP設定を更新しました" + +#: rhodecode/controllers/admin/defaults.py:110 +#, fuzzy +msgid "error occurred during update of defaults" +msgstr "ユーザー %s の更新中にエラーが発生しました" + #: rhodecode/controllers/admin/ldap_settings.py:50 msgid "BASE" msgstr "BASE" @@ -367,18 +406,23 @@ msgid "error occurred during update of l msgstr "LDAP設定の更新中にエラーが発生しました" #: rhodecode/controllers/admin/permissions.py:59 +#: rhodecode/controllers/admin/permissions.py:63 msgid "None" msgstr "なし" #: rhodecode/controllers/admin/permissions.py:60 +#: rhodecode/controllers/admin/permissions.py:64 msgid "Read" msgstr "読込" #: rhodecode/controllers/admin/permissions.py:61 +#: rhodecode/controllers/admin/permissions.py:65 msgid "Write" msgstr "書込" #: rhodecode/controllers/admin/permissions.py:62 +#: rhodecode/controllers/admin/permissions.py:66 +#: rhodecode/templates/admin/defaults/defaults.html:9 #: rhodecode/templates/admin/ldap/ldap.html:9 #: rhodecode/templates/admin/permissions/permissions.html:9 #: rhodecode/templates/admin/repos/repo_add.html:9 @@ -391,233 +435,225 @@ msgstr "書込" #: rhodecode/templates/admin/settings/settings.html:9 #: rhodecode/templates/admin/users/user_add.html:8 #: rhodecode/templates/admin/users/user_edit.html:9 -#: rhodecode/templates/admin/users/user_edit.html:122 +#: rhodecode/templates/admin/users/user_edit.html:126 #: rhodecode/templates/admin/users/users.html:9 #: rhodecode/templates/admin/users_groups/users_group_add.html:8 #: rhodecode/templates/admin/users_groups/users_group_edit.html:9 #: rhodecode/templates/admin/users_groups/users_groups.html:9 #: rhodecode/templates/base/base.html:197 -#: rhodecode/templates/base/base.html:337 -#: rhodecode/templates/base/base.html:339 -#: rhodecode/templates/base/base.html:341 +#: rhodecode/templates/base/base.html:350 +#: rhodecode/templates/base/base.html:352 +#: rhodecode/templates/base/base.html:354 msgid "Admin" msgstr "管理" -#: rhodecode/controllers/admin/permissions.py:65 +#: rhodecode/controllers/admin/permissions.py:69 msgid "disabled" msgstr "無効にする" -#: rhodecode/controllers/admin/permissions.py:67 -msgid "allowed with manual account activation" -msgstr "手動でアカウントを有効にする" - -#: rhodecode/controllers/admin/permissions.py:69 -msgid "allowed with automatic account activation" -msgstr "自動でアカウントを有効にする" - #: rhodecode/controllers/admin/permissions.py:71 -#: rhodecode/controllers/admin/permissions.py:74 +msgid "allowed with manual account activation" +msgstr "手動でアカウントを有効にする" + +#: rhodecode/controllers/admin/permissions.py:73 +msgid "allowed with automatic account activation" +msgstr "自動でアカウントを有効にする" + +#: rhodecode/controllers/admin/permissions.py:75 +#: rhodecode/controllers/admin/permissions.py:78 msgid "Disabled" msgstr "無効" -#: rhodecode/controllers/admin/permissions.py:72 -#: rhodecode/controllers/admin/permissions.py:75 +#: rhodecode/controllers/admin/permissions.py:76 +#: rhodecode/controllers/admin/permissions.py:79 msgid "Enabled" msgstr "有効" -#: rhodecode/controllers/admin/permissions.py:116 +#: rhodecode/controllers/admin/permissions.py:122 msgid "Default permissions updated successfully" msgstr "デフォルトの権限を更新しました" -#: rhodecode/controllers/admin/permissions.py:130 +#: rhodecode/controllers/admin/permissions.py:136 msgid "error occurred during update of permissions" msgstr "権限の更新中にエラーが発生しました" -#: rhodecode/controllers/admin/repos.py:123 +#: rhodecode/controllers/admin/repos.py:125 msgid "--REMOVE FORK--" -msgstr "" - -#: rhodecode/controllers/admin/repos.py:192 +msgstr "--フォーク元を削除--" + +#: rhodecode/controllers/admin/repos.py:194 #, python-format msgid "created repository %s from %s" msgstr "リポジトリ %s を %s から作成" -#: rhodecode/controllers/admin/repos.py:196 +#: rhodecode/controllers/admin/repos.py:198 #, python-format msgid "created repository %s" msgstr "リポジトリ %s を作成しました" -#: rhodecode/controllers/admin/repos.py:227 +#: rhodecode/controllers/admin/repos.py:229 #, python-format msgid "error occurred during creation of repository %s" msgstr "リポジトリ %s を作成中にエラーが発生しました" -#: rhodecode/controllers/admin/repos.py:319 +#: rhodecode/controllers/admin/repos.py:321 #, python-format msgid "Cannot delete %s it still contains attached forks" msgstr "" -#: rhodecode/controllers/admin/repos.py:348 +#: rhodecode/controllers/admin/repos.py:350 msgid "An error occurred during deletion of repository user" msgstr "リポジトリユーザーの削除中にエラーが発生しました" -#: rhodecode/controllers/admin/repos.py:367 +#: rhodecode/controllers/admin/repos.py:369 msgid "An error occurred during deletion of repository users groups" msgstr "リポジトリユーザーグループの削除中にエラーが発生しました" -#: rhodecode/controllers/admin/repos.py:385 +#: rhodecode/controllers/admin/repos.py:387 msgid "An error occurred during deletion of repository stats" msgstr "リポジトリステートの削除中にエラーが発生しました" -#: rhodecode/controllers/admin/repos.py:402 +#: rhodecode/controllers/admin/repos.py:404 msgid "An error occurred during cache invalidation" msgstr "キャッシュの無効化時にエラーが発生しました" -#: rhodecode/controllers/admin/repos.py:422 -#, fuzzy -msgid "An error occurred during unlocking" -msgstr "メールの保存時にエラーが発生しました" - -#: rhodecode/controllers/admin/repos.py:442 +#: rhodecode/controllers/admin/repos.py:444 msgid "Updated repository visibility in public journal" msgstr "" -#: rhodecode/controllers/admin/repos.py:446 +#: rhodecode/controllers/admin/repos.py:448 msgid "An error occurred during setting this repository in public journal" msgstr "" -#: rhodecode/controllers/admin/repos.py:451 rhodecode/model/validators.py:299 +#: rhodecode/controllers/admin/repos.py:453 rhodecode/model/validators.py:300 msgid "Token mismatch" msgstr "トークンが合いません" -#: rhodecode/controllers/admin/repos.py:464 -msgid "Pulled from remote location" -msgstr "リモートから取得" - #: rhodecode/controllers/admin/repos.py:466 +msgid "Pulled from remote location" +msgstr "リモートから取得" + +#: rhodecode/controllers/admin/repos.py:468 msgid "An error occurred during pull from remote location" msgstr "リモートから取得中にエラーが発生しました" -#: rhodecode/controllers/admin/repos.py:482 +#: rhodecode/controllers/admin/repos.py:484 msgid "Nothing" msgstr "ありません" -#: rhodecode/controllers/admin/repos.py:484 +#: rhodecode/controllers/admin/repos.py:486 #, python-format msgid "Marked repo %s as fork of %s" msgstr "%s リポジトリを %s のフォークとして印をつける" -#: rhodecode/controllers/admin/repos.py:488 +#: rhodecode/controllers/admin/repos.py:490 msgid "An error occurred during this operation" msgstr "操作中にエラーが発生しました" -#: rhodecode/controllers/admin/repos_groups.py:116 +#: rhodecode/controllers/admin/repos_groups.py:120 #, python-format msgid "created repos group %s" msgstr "リポジトリグループ %s を作成しました" -#: rhodecode/controllers/admin/repos_groups.py:129 +#: rhodecode/controllers/admin/repos_groups.py:133 #, python-format msgid "error occurred during creation of repos group %s" msgstr "リポジトリグループ %s を作成中にエラーが発生しました" -#: rhodecode/controllers/admin/repos_groups.py:163 +#: rhodecode/controllers/admin/repos_groups.py:167 #, python-format msgid "updated repos group %s" msgstr "リポジトリグループ %s を更新しました" -#: rhodecode/controllers/admin/repos_groups.py:176 +#: rhodecode/controllers/admin/repos_groups.py:180 #, python-format msgid "error occurred during update of repos group %s" msgstr "リポジトリグループ %s を更新中にエラーが発生しました" -#: rhodecode/controllers/admin/repos_groups.py:194 +#: rhodecode/controllers/admin/repos_groups.py:198 #, python-format msgid "This group contains %s repositores and cannot be deleted" msgstr "このグループは %s リポジトリを含んでいるため削除出来ません" -#: rhodecode/controllers/admin/repos_groups.py:202 +#: rhodecode/controllers/admin/repos_groups.py:206 #, python-format msgid "removed repos group %s" msgstr "リポジトリグループ %s を削除しました" -#: rhodecode/controllers/admin/repos_groups.py:208 +#: rhodecode/controllers/admin/repos_groups.py:212 msgid "Cannot delete this group it still contains subgroups" msgstr "サブグループを含んでいるため、このグループを削除できません" -#: rhodecode/controllers/admin/repos_groups.py:213 -#: rhodecode/controllers/admin/repos_groups.py:218 +#: rhodecode/controllers/admin/repos_groups.py:217 +#: rhodecode/controllers/admin/repos_groups.py:222 #, python-format msgid "error occurred during deletion of repos group %s" -msgstr "リポジトリグループの削除中にエラーが発生しました" - -#: rhodecode/controllers/admin/repos_groups.py:238 +msgstr "リポジトリグループ %s の削除中にエラーが発生しました" + +#: rhodecode/controllers/admin/repos_groups.py:243 msgid "An error occurred during deletion of group user" msgstr "グループユーザーを削除中にエラーが発生しました" -#: rhodecode/controllers/admin/repos_groups.py:258 +#: rhodecode/controllers/admin/repos_groups.py:264 msgid "An error occurred during deletion of group users groups" -msgstr "" - -#: rhodecode/controllers/admin/settings.py:121 +msgstr "グループユーザーのグループを削除中にエラーが発生しました" + +#: rhodecode/controllers/admin/settings.py:123 #, python-format msgid "Repositories successfully rescanned added: %s,removed: %s" msgstr "リポジトリを再度スキャンしました。 追加: %s 削除: %s" -#: rhodecode/controllers/admin/settings.py:129 +#: rhodecode/controllers/admin/settings.py:131 msgid "Whoosh reindex task scheduled" msgstr "Whooshの再インデックスタスクを予定に入れました" -#: rhodecode/controllers/admin/settings.py:160 +#: rhodecode/controllers/admin/settings.py:162 msgid "Updated application settings" msgstr "アプリケーション設定を更新しました" -#: rhodecode/controllers/admin/settings.py:164 -#: rhodecode/controllers/admin/settings.py:275 +#: rhodecode/controllers/admin/settings.py:166 +#: rhodecode/controllers/admin/settings.py:299 msgid "error occurred during updating application settings" msgstr "アプリケーション設定を更新中にエラーが発生しました" -#: rhodecode/controllers/admin/settings.py:200 -#, fuzzy +#: rhodecode/controllers/admin/settings.py:207 msgid "Updated visualisation settings" -msgstr "アプリケーション設定を更新しました" - -#: rhodecode/controllers/admin/settings.py:205 -#, fuzzy +msgstr "表示の設定を更新しました" + +#: rhodecode/controllers/admin/settings.py:212 msgid "error occurred during updating visualisation settings" -msgstr "アプリケーション設定を更新中にエラーが発生しました" - -#: rhodecode/controllers/admin/settings.py:271 -#, fuzzy +msgstr "表示の設定を更新中にエラーが発生しました" + +#: rhodecode/controllers/admin/settings.py:295 msgid "Updated VCS settings" -msgstr "Mercurialの設定を更新しました" - -#: rhodecode/controllers/admin/settings.py:285 +msgstr "VCSの設定を更新しました" + +#: rhodecode/controllers/admin/settings.py:309 msgid "Added new hook" msgstr "新しいフックを追加しました" -#: rhodecode/controllers/admin/settings.py:297 +#: rhodecode/controllers/admin/settings.py:321 msgid "Updated hooks" msgstr "フックを更新しました" -#: rhodecode/controllers/admin/settings.py:301 +#: rhodecode/controllers/admin/settings.py:325 msgid "error occurred during hook creation" msgstr "フックの作成時にエラーが発生しました" -#: rhodecode/controllers/admin/settings.py:320 +#: rhodecode/controllers/admin/settings.py:344 msgid "Email task created" msgstr "メールのタスクを作成しました" -#: rhodecode/controllers/admin/settings.py:375 +#: rhodecode/controllers/admin/settings.py:399 msgid "You can't edit this user since it's crucial for entire application" msgstr "このユーザーを編集出来ません。このユーザーはアプリケーションにとって必要不可欠です。" -#: rhodecode/controllers/admin/settings.py:406 +#: rhodecode/controllers/admin/settings.py:430 msgid "Your account was updated successfully" msgstr "アカウントを更新しました" -#: rhodecode/controllers/admin/settings.py:421 -#: rhodecode/controllers/admin/users.py:191 +#: rhodecode/controllers/admin/settings.py:445 +#: rhodecode/controllers/admin/users.py:196 #, python-format msgid "error occurred during update of user %s" msgstr "ユーザー %s の更新中にエラーが発生しました" @@ -632,106 +668,99 @@ msgstr "ユーザー %s を作成しました" msgid "error occurred during creation of user %s" msgstr "ユーザー %s の作成中にエラーが発生しました" -#: rhodecode/controllers/admin/users.py:171 +#: rhodecode/controllers/admin/users.py:176 msgid "User updated successfully" msgstr "ユーザーの更新に成功しました" -#: rhodecode/controllers/admin/users.py:207 -msgid "successfully deleted user" -msgstr "ユーザーの削除に成功しました" - #: rhodecode/controllers/admin/users.py:212 +msgid "successfully deleted user" +msgstr "ユーザーの削除に成功しました" + +#: rhodecode/controllers/admin/users.py:217 msgid "An error occurred during deletion of user" msgstr "ユーザーの削除中にエラーが発生しました" -#: rhodecode/controllers/admin/users.py:226 +#: rhodecode/controllers/admin/users.py:231 msgid "You can't edit this user" msgstr "このユーザーは編集できません" -#: rhodecode/controllers/admin/users.py:266 +#: rhodecode/controllers/admin/users.py:272 msgid "Granted 'repository create' permission to user" msgstr "ユーザーに 'リポジトリ作成' 権限を与えました" -#: rhodecode/controllers/admin/users.py:271 +#: rhodecode/controllers/admin/users.py:277 msgid "Revoked 'repository create' permission to user" msgstr "ユーザーの 'リポジトリ作成' 権限を取り消しました" -#: rhodecode/controllers/admin/users.py:277 -#, fuzzy +#: rhodecode/controllers/admin/users.py:283 msgid "Granted 'repository fork' permission to user" -msgstr "ユーザーに 'リポジトリ作成' 権限を与えました" - -#: rhodecode/controllers/admin/users.py:282 -#, fuzzy -msgid "Revoked 'repository fork' permission to user" -msgstr "ユーザーの 'リポジトリ作成' 権限を取り消しました" +msgstr "ユーザーに 'リポジトリフォーク' 権限を与えました" #: rhodecode/controllers/admin/users.py:288 -#: rhodecode/controllers/admin/users_groups.py:255 -#, fuzzy +msgid "Revoked 'repository fork' permission to user" +msgstr "ユーザーの 'リポジトリフォーク' 権限を取り消しました" + +#: rhodecode/controllers/admin/users.py:294 +#: rhodecode/controllers/admin/users_groups.py:279 msgid "An error occurred during permissions saving" -msgstr "メールの保存時にエラーが発生しました" - -#: rhodecode/controllers/admin/users.py:303 +msgstr "権限の保存時にエラーが発生しました" + +#: rhodecode/controllers/admin/users.py:309 #, python-format msgid "Added email %s to user" msgstr "ユーザーにメール %s を追加しました" -#: rhodecode/controllers/admin/users.py:309 +#: rhodecode/controllers/admin/users.py:315 msgid "An error occurred during email saving" msgstr "メールの保存時にエラーが発生しました" -#: rhodecode/controllers/admin/users.py:319 +#: rhodecode/controllers/admin/users.py:325 msgid "Removed email from user" msgstr "ユーザーからメールを削除しました" -#: rhodecode/controllers/admin/users_groups.py:84 +#: rhodecode/controllers/admin/users_groups.py:86 #, python-format msgid "created users group %s" msgstr "ユーザーグループ %s を作成しました" -#: rhodecode/controllers/admin/users_groups.py:95 +#: rhodecode/controllers/admin/users_groups.py:97 #, python-format msgid "error occurred during creation of users group %s" msgstr "ユーザーグループ %s の作成中にエラーが発生しました" -#: rhodecode/controllers/admin/users_groups.py:135 +#: rhodecode/controllers/admin/users_groups.py:164 #, python-format msgid "updated users group %s" msgstr "ユーザーグループ %s を更新しました" -#: rhodecode/controllers/admin/users_groups.py:157 +#: rhodecode/controllers/admin/users_groups.py:186 #, python-format msgid "error occurred during update of users group %s" msgstr "ユーザーグループ %s の更新中にエラーが発生しました" -#: rhodecode/controllers/admin/users_groups.py:174 +#: rhodecode/controllers/admin/users_groups.py:203 msgid "successfully deleted users group" msgstr "ユーザーグループ" -#: rhodecode/controllers/admin/users_groups.py:179 +#: rhodecode/controllers/admin/users_groups.py:208 msgid "An error occurred during deletion of users group" msgstr "ユーザーグループの削除中にエラーが発生しました" -#: rhodecode/controllers/admin/users_groups.py:233 -#, fuzzy +#: rhodecode/controllers/admin/users_groups.py:257 msgid "Granted 'repository create' permission to users group" -msgstr "ユーザーに 'リポジトリ作成' 権限を与えました" - -#: rhodecode/controllers/admin/users_groups.py:238 -#, fuzzy +msgstr "ユーザーグループに 'リポジトリ作成' 権限を与えました" + +#: rhodecode/controllers/admin/users_groups.py:262 msgid "Revoked 'repository create' permission to users group" -msgstr "ユーザーの 'リポジトリ作成' 権限を取り消しました" - -#: rhodecode/controllers/admin/users_groups.py:244 -#, fuzzy +msgstr "ユーザーグループの 'リポジトリ作成' 権限を取り消しました" + +#: rhodecode/controllers/admin/users_groups.py:268 msgid "Granted 'repository fork' permission to users group" -msgstr "ユーザーに 'リポジトリ作成' 権限を与えました" - -#: rhodecode/controllers/admin/users_groups.py:249 -#, fuzzy +msgstr "ユーザーグループに 'リポジトリフォーク' 権限を与えました" + +#: rhodecode/controllers/admin/users_groups.py:273 msgid "Revoked 'repository fork' permission to users group" -msgstr "ユーザーの 'リポジトリ作成' 権限を取り消しました" +msgstr "ユーザーグループの 'リポジトリフォーク' 権限を取り消しました" #: rhodecode/lib/auth.py:499 msgid "You need to be a registered user to perform this action" @@ -741,293 +770,316 @@ msgstr "このアクションを実行するためには登録ユーザーである必要があります" msgid "You need to be a signed in to view this page" msgstr "このページを閲覧するためにはサインインが必要です" -#: rhodecode/lib/diffs.py:86 +#: rhodecode/lib/diffs.py:74 +msgid "binary file" +msgstr "バイナリファイル" + +#: rhodecode/lib/diffs.py:90 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "" -#: rhodecode/lib/diffs.py:96 +#: rhodecode/lib/diffs.py:100 msgid "No changes detected" msgstr "検出された変更はありません" -#: rhodecode/lib/helpers.py:372 +#: rhodecode/lib/helpers.py:373 #, python-format msgid "%a, %d %b %Y %H:%M:%S" msgstr "%a, %d %b %Y %H:%M:%S" -#: rhodecode/lib/helpers.py:484 +#: rhodecode/lib/helpers.py:485 msgid "True" msgstr "True" -#: rhodecode/lib/helpers.py:488 +#: rhodecode/lib/helpers.py:489 msgid "False" msgstr "False" +#: rhodecode/lib/helpers.py:529 +#, fuzzy, python-format +msgid "Deleted branch: %s" +msgstr "リポジトリ %s を削除しました" + #: rhodecode/lib/helpers.py:532 +#, fuzzy, python-format +msgid "Created tag: %s" +msgstr "ユーザー %s を作成しました" + +#: rhodecode/lib/helpers.py:545 msgid "Changeset not found" msgstr "リビジョンが見つかりません" -#: rhodecode/lib/helpers.py:555 +#: rhodecode/lib/helpers.py:588 #, python-format msgid "Show all combined changesets %s->%s" msgstr "%s から %s までのすべてのチェンジセットを表示" -#: rhodecode/lib/helpers.py:561 +#: rhodecode/lib/helpers.py:594 msgid "compare view" msgstr "比較の表示" -#: rhodecode/lib/helpers.py:581 +#: rhodecode/lib/helpers.py:614 msgid "and" msgstr "" -#: rhodecode/lib/helpers.py:582 +#: rhodecode/lib/helpers.py:615 #, python-format msgid "%s more" msgstr "" -#: rhodecode/lib/helpers.py:583 rhodecode/templates/changelog/changelog.html:48 +#: rhodecode/lib/helpers.py:616 rhodecode/templates/changelog/changelog.html:51 msgid "revisions" msgstr "リビジョン" -#: rhodecode/lib/helpers.py:606 -msgid "fork name " -msgstr "フォーク名 " - -#: rhodecode/lib/helpers.py:620 +#: rhodecode/lib/helpers.py:640 +#, fuzzy, python-format +msgid "fork name %s" +msgstr "" + +#: rhodecode/lib/helpers.py:653 #: rhodecode/templates/pullrequests/pullrequest_show.html:4 #: rhodecode/templates/pullrequests/pullrequest_show.html:12 #, python-format msgid "Pull request #%s" msgstr "プルリクエスト #%s" -#: rhodecode/lib/helpers.py:626 +#: rhodecode/lib/helpers.py:659 msgid "[deleted] repository" msgstr "リポジトリを[削除]" -#: rhodecode/lib/helpers.py:628 rhodecode/lib/helpers.py:638 +#: rhodecode/lib/helpers.py:661 rhodecode/lib/helpers.py:671 msgid "[created] repository" msgstr "リポジトリを[作成]" -#: rhodecode/lib/helpers.py:630 +#: rhodecode/lib/helpers.py:663 msgid "[created] repository as fork" msgstr "フォークしてリポジトリを[作成]" -#: rhodecode/lib/helpers.py:632 rhodecode/lib/helpers.py:640 +#: rhodecode/lib/helpers.py:665 rhodecode/lib/helpers.py:673 msgid "[forked] repository" msgstr "リポジトリを[フォーク]" -#: rhodecode/lib/helpers.py:634 rhodecode/lib/helpers.py:642 +#: rhodecode/lib/helpers.py:667 rhodecode/lib/helpers.py:675 msgid "[updated] repository" msgstr "リポジトリを[更新]" -#: rhodecode/lib/helpers.py:636 +#: rhodecode/lib/helpers.py:669 msgid "[delete] repository" msgstr "リポジトリを[削除]" -#: rhodecode/lib/helpers.py:644 +#: rhodecode/lib/helpers.py:677 msgid "[created] user" msgstr "ユーザーを[作成]" -#: rhodecode/lib/helpers.py:646 +#: rhodecode/lib/helpers.py:679 msgid "[updated] user" msgstr "ユーザーを[更新]" -#: rhodecode/lib/helpers.py:648 +#: rhodecode/lib/helpers.py:681 msgid "[created] users group" msgstr "ユーザーグループを[作成]" -#: rhodecode/lib/helpers.py:650 +#: rhodecode/lib/helpers.py:683 msgid "[updated] users group" msgstr "ユーザーグループを[更新]" -#: rhodecode/lib/helpers.py:652 +#: rhodecode/lib/helpers.py:685 msgid "[commented] on revision in repository" msgstr "リポジトリのリビジョンに[コメント]" -#: rhodecode/lib/helpers.py:654 -#, fuzzy +#: rhodecode/lib/helpers.py:687 msgid "[commented] on pull request for" msgstr "プルリクエストに[コメント]" -#: rhodecode/lib/helpers.py:656 -#, fuzzy +#: rhodecode/lib/helpers.py:689 msgid "[closed] pull request for" -msgstr "プルリクエストに[コメント]" - -#: rhodecode/lib/helpers.py:658 +msgstr "プルリクエストを[クローズ]" + +#: rhodecode/lib/helpers.py:691 msgid "[pushed] into" msgstr "[プッシュ]" -#: rhodecode/lib/helpers.py:660 +#: rhodecode/lib/helpers.py:693 msgid "[committed via RhodeCode] into repository" msgstr "リポジトリに[RhodeCode経由でコミット]" -#: rhodecode/lib/helpers.py:662 +#: rhodecode/lib/helpers.py:695 msgid "[pulled from remote] into repository" msgstr "リポジトリに[リモートからプル]" -#: rhodecode/lib/helpers.py:664 +#: rhodecode/lib/helpers.py:697 msgid "[pulled] from" msgstr "[プル]" -#: rhodecode/lib/helpers.py:666 +#: rhodecode/lib/helpers.py:699 msgid "[started following] repository" msgstr "リポジトリの[フォローを開始]" -#: rhodecode/lib/helpers.py:668 +#: rhodecode/lib/helpers.py:701 msgid "[stopped following] repository" msgstr "リポジトリの[フォローを停止]" -#: rhodecode/lib/helpers.py:840 +#: rhodecode/lib/helpers.py:877 #, python-format msgid " and %s more" msgstr " と %s 以上" -#: rhodecode/lib/helpers.py:844 +#: rhodecode/lib/helpers.py:881 msgid "No Files" -msgstr "" - -#: rhodecode/lib/utils2.py:335 +msgstr "ファイルなし" + +#: rhodecode/lib/utils2.py:403 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d 年" -#: rhodecode/lib/utils2.py:336 +#: rhodecode/lib/utils2.py:404 #, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "%d ヶ月" -#: rhodecode/lib/utils2.py:337 +#: rhodecode/lib/utils2.py:405 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d 日" -#: rhodecode/lib/utils2.py:338 +#: rhodecode/lib/utils2.py:406 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d 時間" -#: rhodecode/lib/utils2.py:339 +#: rhodecode/lib/utils2.py:407 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d 分" -#: rhodecode/lib/utils2.py:340 +#: rhodecode/lib/utils2.py:408 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d 秒" -#: rhodecode/lib/utils2.py:355 +#: rhodecode/lib/utils2.py:424 +#, python-format +msgid "in %s" +msgstr "" + +#: rhodecode/lib/utils2.py:426 #, python-format msgid "%s ago" msgstr "%s 前" -#: rhodecode/lib/utils2.py:357 +#: rhodecode/lib/utils2.py:428 +#, fuzzy, python-format +msgid "in %s and %s" +msgstr "%s と %s 前" + +#: rhodecode/lib/utils2.py:431 #, python-format msgid "%s and %s ago" msgstr "%s と %s 前" -#: rhodecode/lib/utils2.py:360 +#: rhodecode/lib/utils2.py:434 msgid "just now" msgstr "ちょうどいま" -#: rhodecode/lib/celerylib/tasks.py:269 +#: rhodecode/lib/celerylib/tasks.py:270 msgid "password reset link" msgstr "パスワードリセットのリンク" +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 rhodecode/model/db.py:1180 +msgid "Repository no access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1181 +msgid "Repository read access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1182 +msgid "Repository write access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1183 +msgid "Repository admin access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1185 +msgid "Repositories Group no access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1186 +msgid "Repositories Group read access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1187 +msgid "Repositories Group write access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1188 +msgid "Repositories Group admin access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1190 +msgid "RhodeCode Administrator" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1191 +msgid "Repository creation disabled" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1192 +msgid "Repository creation enabled" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1193 +msgid "Repository forking disabled" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1194 +msgid "Repository forking enabled" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1195 +msgid "Register disabled" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1196 +msgid "Register new user with RhodeCode with manual activation" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1199 +msgid "Register new user with RhodeCode with auto activation" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1640 +msgid "Not Reviewed" +msgstr "未レビュー" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1641 +msgid "Approved" +msgstr "承認" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1642 +msgid "Rejected" +msgstr "却下" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1643 +msgid "Under Review" +msgstr "レビュー中" + #: rhodecode/model/comment.py:110 #, python-format msgid "on line %s" msgstr "" -#: rhodecode/model/comment.py:157 +#: rhodecode/model/comment.py:173 msgid "[Mention]" -msgstr "" - -#: rhodecode/model/db.py:1140 -msgid "Repository no access" -msgstr "" - -#: rhodecode/model/db.py:1141 -msgid "Repository read access" -msgstr "" - -#: rhodecode/model/db.py:1142 -msgid "Repository write access" -msgstr "" - -#: rhodecode/model/db.py:1143 -msgid "Repository admin access" -msgstr "" - -#: rhodecode/model/db.py:1145 -msgid "Repositories Group no access" -msgstr "" - -#: rhodecode/model/db.py:1146 -msgid "Repositories Group read access" -msgstr "" - -#: rhodecode/model/db.py:1147 -msgid "Repositories Group write access" -msgstr "" - -#: rhodecode/model/db.py:1148 -msgid "Repositories Group admin access" -msgstr "" - -#: rhodecode/model/db.py:1150 -msgid "RhodeCode Administrator" -msgstr "" - -#: rhodecode/model/db.py:1151 -msgid "Repository creation disabled" -msgstr "" - -#: rhodecode/model/db.py:1152 -msgid "Repository creation enabled" -msgstr "" - -#: rhodecode/model/db.py:1153 -msgid "Repository forking disabled" -msgstr "" - -#: rhodecode/model/db.py:1154 -msgid "Repository forking enabled" -msgstr "" - -#: rhodecode/model/db.py:1155 -msgid "Register disabled" -msgstr "" - -#: rhodecode/model/db.py:1156 -msgid "Register new user with RhodeCode with manual activation" -msgstr "" - -#: rhodecode/model/db.py:1159 -msgid "Register new user with RhodeCode with auto activation" -msgstr "" - -#: rhodecode/model/db.py:1579 -msgid "Not Reviewed" -msgstr "未レビュー" - -#: rhodecode/model/db.py:1580 -msgid "Approved" -msgstr "承認" - -#: rhodecode/model/db.py:1581 -msgid "Rejected" -msgstr "却下" - -#: rhodecode/model/db.py:1582 -msgid "Under Review" -msgstr "レビュー中" +msgstr "[Mention]" #: rhodecode/model/forms.py:43 msgid "Please enter a login" @@ -1048,35 +1100,41 @@ msgid "Enter %(min)i characters or more" msgstr "%(min)i 文字以上必要です" #: rhodecode/model/notification.py:220 -msgid "commented on commit" -msgstr "コミットに対するコメント" +#, fuzzy, python-format +msgid "commented on commit at %(when)s" +msgstr "" #: rhodecode/model/notification.py:221 -msgid "sent message" +#, python-format +msgid "sent message at %(when)s" msgstr "" #: rhodecode/model/notification.py:222 -msgid "mentioned you" +#, python-format +msgid "mentioned you at %(when)s" msgstr "" #: rhodecode/model/notification.py:223 -msgid "registered in RhodeCode" +#, python-format +msgid "registered in RhodeCode at %(when)s" msgstr "" #: rhodecode/model/notification.py:224 -msgid "opened new pull request" +#, fuzzy, python-format +msgid "opened new pull request at %(when)s" msgstr "" #: rhodecode/model/notification.py:225 -msgid "commented on pull request" +#, fuzzy, python-format +msgid "commented on pull request at %(when)s" msgstr "" -#: rhodecode/model/pull_request.py:84 +#: rhodecode/model/pull_request.py:90 #, python-format msgid "%(user)s wants you to review pull request #%(pr_id)s" msgstr "" -#: rhodecode/model/scm.py:535 +#: rhodecode/model/scm.py:542 msgid "latest tip" msgstr "最新のtip" @@ -1084,57 +1142,57 @@ msgstr "最新のtip" msgid "new user registration" msgstr "新規ユーザー登録" -#: rhodecode/model/user.py:255 rhodecode/model/user.py:277 -#: rhodecode/model/user.py:299 +#: rhodecode/model/user.py:255 rhodecode/model/user.py:279 +#: rhodecode/model/user.py:301 msgid "You can't Edit this user since it's crucial for entire application" msgstr "" -#: rhodecode/model/user.py:323 +#: rhodecode/model/user.py:325 msgid "You can't remove this user since it's crucial for entire application" msgstr "" -#: rhodecode/model/user.py:329 +#: rhodecode/model/user.py:331 #, python-format msgid "" "user \"%s\" still owns %s repositories and cannot be removed. Switch " "owners or remove those repositories. %s" msgstr "" -#: rhodecode/model/validators.py:35 rhodecode/model/validators.py:36 +#: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37 msgid "Value cannot be an empty list" msgstr "" -#: rhodecode/model/validators.py:82 +#: rhodecode/model/validators.py:83 #, python-format msgid "Username \"%(username)s\" already exists" msgstr "ユーザー名 \"%(username)s\" はすでに使われています" -#: rhodecode/model/validators.py:84 +#: rhodecode/model/validators.py:85 #, python-format msgid "Username \"%(username)s\" is forbidden" msgstr "ユーザー名 \"%(username)s\" は許可されていません" -#: rhodecode/model/validators.py:86 +#: rhodecode/model/validators.py:87 msgid "" "Username may only contain alphanumeric characters underscores, periods or" " dashes and must begin with alphanumeric character" msgstr "ユーザー名はアルファベット、アンダースコア(_)、ピリオド(.)、ダッシュ(-)しか使えません。また、アルファベットから始まる必要があります" -#: rhodecode/model/validators.py:114 +#: rhodecode/model/validators.py:115 #, python-format msgid "Username %(username)s is not valid" msgstr "ユーザー名 %(username)s は不正です" -#: rhodecode/model/validators.py:133 +#: rhodecode/model/validators.py:134 msgid "Invalid users group name" msgstr "不正なユーザーグループ名です" -#: rhodecode/model/validators.py:134 +#: rhodecode/model/validators.py:135 #, python-format msgid "Users group \"%(usersgroup)s\" already exists" msgstr "ユーザーグループ \"%(usersgroup)s\" はすでに存在します" -#: rhodecode/model/validators.py:136 +#: rhodecode/model/validators.py:137 msgid "" "users group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" @@ -1142,96 +1200,101 @@ msgstr "" "ユーザーグループ名はアルファベット、アンダースコア(_)、ピリオド(.)、ダッシュ(-)しか使えません。また、アルファベットから始まる必要があります" " " -#: rhodecode/model/validators.py:174 +#: rhodecode/model/validators.py:175 msgid "Cannot assign this group as parent" msgstr "このグループは親にできません" -#: rhodecode/model/validators.py:175 +#: rhodecode/model/validators.py:176 #, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "グループ \"%(group_name)s\" はすでに存在します" -#: rhodecode/model/validators.py:177 +#: rhodecode/model/validators.py:178 #, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "グループ名 \"%(group_name)s\" を持つリポジトリはすでに存在します" -#: rhodecode/model/validators.py:235 +#: rhodecode/model/validators.py:236 msgid "Invalid characters (non-ascii) in password" msgstr "パスワードに利用出来ない文字列(non-ascii)です" -#: rhodecode/model/validators.py:250 +#: rhodecode/model/validators.py:251 msgid "Passwords do not match" msgstr "パスワードが一致しません" -#: rhodecode/model/validators.py:267 +#: rhodecode/model/validators.py:268 msgid "invalid password" msgstr "不正なパスワードです" -#: rhodecode/model/validators.py:268 +#: rhodecode/model/validators.py:269 msgid "invalid user name" msgstr "不正なユーザー名です" -#: rhodecode/model/validators.py:269 +#: rhodecode/model/validators.py:270 msgid "Your account is disabled" msgstr "アカウントは無効です" -#: rhodecode/model/validators.py:313 +#: rhodecode/model/validators.py:314 #, python-format msgid "Repository name %(repo)s is disallowed" msgstr "リポジトリ名 %(repo)s は許可されていません" -#: rhodecode/model/validators.py:315 +#: rhodecode/model/validators.py:316 #, python-format msgid "Repository named %(repo)s already exists" msgstr "リポジトリ %(repo)s はすでに存在します" -#: rhodecode/model/validators.py:316 +#: rhodecode/model/validators.py:317 #, python-format msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" msgstr "リポジトリ \"%(repo)s\" は グループ \"%(group)s\" にすでに存在します" -#: rhodecode/model/validators.py:318 +#: rhodecode/model/validators.py:319 #, python-format msgid "Repositories group with name \"%(repo)s\" already exists" msgstr "リポジトリグループ名 \"%(repo)s\" はすでに存在します" -#: rhodecode/model/validators.py:431 +#: rhodecode/model/validators.py:432 msgid "invalid clone url" msgstr "無効なクローンURIです" -#: rhodecode/model/validators.py:432 +#: rhodecode/model/validators.py:433 msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url" msgstr "" -#: rhodecode/model/validators.py:457 +#: rhodecode/model/validators.py:458 msgid "Fork have to be the same type as parent" msgstr "フォークは親と同じタイプの必要があります" -#: rhodecode/model/validators.py:478 +#: rhodecode/model/validators.py:473 +#, fuzzy +msgid "You don't have permissions to create repository in this group" +msgstr "このページを見る権限がありません" + +#: rhodecode/model/validators.py:498 msgid "This username or users group name is not valid" msgstr "ユーザー名かユーザーグループが不正です" -#: rhodecode/model/validators.py:562 +#: rhodecode/model/validators.py:582 msgid "This is not a valid path" msgstr "不正なパスです" -#: rhodecode/model/validators.py:577 +#: rhodecode/model/validators.py:597 msgid "This e-mail address is already taken" msgstr "このメールアドレスはすでに取得されています" -#: rhodecode/model/validators.py:597 +#: rhodecode/model/validators.py:617 #, python-format msgid "e-mail \"%(email)s\" does not exist." msgstr "メールアドレス \"%(email)s\" は存在しません" -#: rhodecode/model/validators.py:634 +#: rhodecode/model/validators.py:654 msgid "" "The LDAP Login attribute of the CN must be specified - this is the name " "of the attribute that is equivalent to \"username\"" msgstr "LDAPのこのCNに対するログイン属性は必須です。 - これは \"ユーザー名\" と同じです" -#: rhodecode/model/validators.py:653 +#: rhodecode/model/validators.py:673 #, python-format msgid "Revisions %(revs)s are already part of pull request or have set status" msgstr "" @@ -1254,7 +1317,7 @@ msgstr "クイックフィルタ..." #: rhodecode/templates/index_base.html:6 #: rhodecode/templates/admin/repos/repos.html:9 -#: rhodecode/templates/base/base.html:221 +#: rhodecode/templates/base/base.html:233 msgid "repositories" msgstr "リポジトリ" @@ -1265,6 +1328,7 @@ msgid "ADD REPOSITORY" msgstr "リポジトリの追加" #: rhodecode/templates/index_base.html:29 +#: rhodecode/templates/index_base.html:136 #: 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 @@ -1274,9 +1338,10 @@ msgid "Group name" msgstr "グループ名" #: rhodecode/templates/index_base.html:30 -#: rhodecode/templates/index_base.html:71 -#: rhodecode/templates/index_base.html:142 -#: rhodecode/templates/index_base.html:168 +#: rhodecode/templates/index_base.html:72 +#: rhodecode/templates/index_base.html:138 +#: rhodecode/templates/index_base.html:176 +#: rhodecode/templates/index_base.html:266 #: rhodecode/templates/admin/repos/repo_add_base.html:56 #: rhodecode/templates/admin/repos/repo_edit.html:75 #: rhodecode/templates/admin/repos/repos.html:72 @@ -1285,142 +1350,137 @@ msgstr "グループ名" #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34 #: rhodecode/templates/forks/fork.html:59 #: rhodecode/templates/settings/repo_settings.html:66 -#: rhodecode/templates/summary/summary.html:105 +#: rhodecode/templates/summary/summary.html:114 msgid "Description" msgstr "説明" #: rhodecode/templates/index_base.html:40 -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47 msgid "Repositories group" msgstr "リポジトリグループ" -#: rhodecode/templates/index_base.html:70 -#: rhodecode/templates/index_base.html:166 +#: rhodecode/templates/index_base.html:71 +#: rhodecode/templates/index_base.html:174 +#: rhodecode/templates/index_base.html:264 #: rhodecode/templates/admin/repos/repo_add_base.html:9 #: rhodecode/templates/admin/repos/repo_edit.html:32 #: rhodecode/templates/admin/repos/repos.html:70 -#: rhodecode/templates/admin/users/user_edit.html:192 +#: rhodecode/templates/admin/users/user_edit.html:196 #: rhodecode/templates/admin/users/user_edit_my_account.html:59 -#: rhodecode/templates/admin/users/user_edit_my_account.html:157 -#: rhodecode/templates/admin/users/user_edit_my_account.html:193 +#: rhodecode/templates/admin/users/user_edit_my_account.html:180 +#: rhodecode/templates/admin/users/user_edit_my_account.html:216 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:6 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:184 #: rhodecode/templates/bookmarks/bookmarks.html:36 #: rhodecode/templates/bookmarks/bookmarks_data.html:6 -#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches.html:50 +#: rhodecode/templates/branches/branches_data.html:6 #: rhodecode/templates/files/files_browser.html:47 -#: rhodecode/templates/journal/journal.html:59 -#: rhodecode/templates/journal/journal.html:107 -#: rhodecode/templates/journal/journal.html:186 +#: rhodecode/templates/journal/journal.html:62 +#: rhodecode/templates/journal/journal.html:168 +#: rhodecode/templates/journal/journal_page_repos.html:7 #: rhodecode/templates/settings/repo_settings.html:31 #: rhodecode/templates/summary/summary.html:43 -#: rhodecode/templates/summary/summary.html:123 -#: rhodecode/templates/tags/tags.html:36 +#: rhodecode/templates/summary/summary.html:132 +#: rhodecode/templates/tags/tags.html:51 #: rhodecode/templates/tags/tags_data.html:6 msgid "Name" msgstr "名前" -#: rhodecode/templates/index_base.html:72 +#: rhodecode/templates/index_base.html:73 msgid "Last change" msgstr "最後の変更時刻" -#: rhodecode/templates/index_base.html:73 -#: rhodecode/templates/index_base.html:171 -#: rhodecode/templates/admin/users/user_edit_my_account.html:159 -#: rhodecode/templates/journal/journal.html:188 +#: rhodecode/templates/index_base.html:74 +#: rhodecode/templates/index_base.html:179 +#: rhodecode/templates/admin/users/user_edit_my_account.html:182 +#: rhodecode/templates/journal/journal.html:170 msgid "Tip" msgstr "Tip" -#: rhodecode/templates/index_base.html:74 -#: rhodecode/templates/index_base.html:173 +#: rhodecode/templates/index_base.html:75 +#: rhodecode/templates/index_base.html:181 +#: rhodecode/templates/index_base.html:269 #: rhodecode/templates/admin/repos/repo_edit.html:121 #: rhodecode/templates/admin/repos/repos.html:73 msgid "Owner" msgstr "所有者" -#: rhodecode/templates/index_base.html:75 +#: rhodecode/templates/index_base.html:76 #: rhodecode/templates/summary/summary.html:48 #: rhodecode/templates/summary/summary.html:51 msgid "RSS" msgstr "RSS" -#: rhodecode/templates/index_base.html:76 +#: rhodecode/templates/index_base.html:77 msgid "Atom" msgstr "Atom" -#: rhodecode/templates/index_base.html:110 -#: rhodecode/templates/index_base.html:112 -#, python-format -msgid "Subscribe to %s rss feed" -msgstr "%s の RSS フィードを購読" - -#: rhodecode/templates/index_base.html:117 -#: rhodecode/templates/index_base.html:119 -#, python-format -msgid "Subscribe to %s atom feed" -msgstr "%s の ATOM フィードを購読" - -#: rhodecode/templates/index_base.html:140 -msgid "Group Name" -msgstr "グループ名" - -#: rhodecode/templates/index_base.html:158 -#: rhodecode/templates/index_base.html:198 +#: rhodecode/templates/index_base.html:167 +#: rhodecode/templates/index_base.html:207 +#: rhodecode/templates/index_base.html:291 #: rhodecode/templates/admin/repos/repos.html:94 -#: rhodecode/templates/admin/users/user_edit_my_account.html:179 +#: rhodecode/templates/admin/users/user_edit_my_account.html:202 #: rhodecode/templates/admin/users/users.html:107 #: rhodecode/templates/bookmarks/bookmarks.html:60 -#: rhodecode/templates/branches/branches.html:77 -#: rhodecode/templates/journal/journal.html:211 -#: rhodecode/templates/tags/tags.html:60 +#: rhodecode/templates/branches/branches.html:76 +#: rhodecode/templates/journal/journal.html:193 +#: rhodecode/templates/tags/tags.html:77 msgid "Click to sort ascending" msgstr "昇順で並び換え" -#: rhodecode/templates/index_base.html:159 -#: rhodecode/templates/index_base.html:199 +#: rhodecode/templates/index_base.html:168 +#: rhodecode/templates/index_base.html:208 +#: rhodecode/templates/index_base.html:292 #: rhodecode/templates/admin/repos/repos.html:95 -#: rhodecode/templates/admin/users/user_edit_my_account.html:180 +#: rhodecode/templates/admin/users/user_edit_my_account.html:203 #: rhodecode/templates/admin/users/users.html:108 #: rhodecode/templates/bookmarks/bookmarks.html:61 -#: rhodecode/templates/branches/branches.html:78 -#: rhodecode/templates/journal/journal.html:212 -#: rhodecode/templates/tags/tags.html:61 +#: rhodecode/templates/branches/branches.html:77 +#: rhodecode/templates/journal/journal.html:194 +#: rhodecode/templates/tags/tags.html:78 msgid "Click to sort descending" msgstr "降順で並び替え" -#: rhodecode/templates/index_base.html:169 +#: rhodecode/templates/index_base.html:177 +#: rhodecode/templates/index_base.html:267 msgid "Last Change" msgstr "最後の変更点" -#: rhodecode/templates/index_base.html:200 +#: rhodecode/templates/index_base.html:209 +#: rhodecode/templates/index_base.html:293 #: rhodecode/templates/admin/repos/repos.html:96 -#: rhodecode/templates/admin/users/user_edit_my_account.html:181 +#: rhodecode/templates/admin/users/user_edit_my_account.html:204 #: rhodecode/templates/admin/users/users.html:109 #: rhodecode/templates/bookmarks/bookmarks.html:62 -#: rhodecode/templates/branches/branches.html:79 -#: rhodecode/templates/journal/journal.html:213 -#: rhodecode/templates/tags/tags.html:62 +#: rhodecode/templates/branches/branches.html:78 +#: rhodecode/templates/journal/journal.html:195 +#: rhodecode/templates/tags/tags.html:79 msgid "No records found." msgstr "レコードが見つかりません" -#: rhodecode/templates/index_base.html:201 +#: rhodecode/templates/index_base.html:210 +#: rhodecode/templates/index_base.html:294 #: rhodecode/templates/admin/repos/repos.html:97 -#: rhodecode/templates/admin/users/user_edit_my_account.html:182 +#: rhodecode/templates/admin/users/user_edit_my_account.html:205 #: rhodecode/templates/admin/users/users.html:110 #: rhodecode/templates/bookmarks/bookmarks.html:63 -#: rhodecode/templates/branches/branches.html:80 -#: rhodecode/templates/journal/journal.html:214 -#: rhodecode/templates/tags/tags.html:63 +#: rhodecode/templates/branches/branches.html:79 +#: rhodecode/templates/journal/journal.html:196 +#: rhodecode/templates/tags/tags.html:80 msgid "Data error." msgstr "データエラー" -#: rhodecode/templates/index_base.html:202 +#: rhodecode/templates/index_base.html:211 +#: rhodecode/templates/index_base.html:295 #: rhodecode/templates/admin/repos/repos.html:98 -#: rhodecode/templates/admin/users/user_edit_my_account.html:183 +#: rhodecode/templates/admin/users/user_edit_my_account.html:206 #: rhodecode/templates/admin/users/users.html:111 #: rhodecode/templates/bookmarks/bookmarks.html:64 -#: rhodecode/templates/branches/branches.html:81 -#: rhodecode/templates/journal/journal.html:215 -#: rhodecode/templates/tags/tags.html:64 +#: rhodecode/templates/branches/branches.html:80 +#: rhodecode/templates/journal/journal.html:54 +#: rhodecode/templates/journal/journal.html:197 +#: rhodecode/templates/tags/tags.html:81 msgid "Loading..." msgstr "読み込み中..." @@ -1438,7 +1498,7 @@ msgstr "" #: rhodecode/templates/admin/users/user_edit.html:50 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:26 #: rhodecode/templates/base/base.html:83 -#: rhodecode/templates/summary/summary.html:122 +#: rhodecode/templates/summary/summary.html:131 msgid "Username" msgstr "ユーザー名" @@ -1495,23 +1555,23 @@ msgstr "パスワード再入力" #: rhodecode/templates/register.html:47 #: rhodecode/templates/admin/users/user_add.html:59 -#: rhodecode/templates/admin/users/user_edit.html:86 +#: rhodecode/templates/admin/users/user_edit.html:90 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:53 msgid "First Name" msgstr "名前" #: rhodecode/templates/register.html:56 #: rhodecode/templates/admin/users/user_add.html:68 -#: rhodecode/templates/admin/users/user_edit.html:95 +#: rhodecode/templates/admin/users/user_edit.html:99 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:62 msgid "Last Name" msgstr "名字" #: rhodecode/templates/register.html:65 #: rhodecode/templates/admin/users/user_add.html:77 -#: rhodecode/templates/admin/users/user_edit.html:104 +#: rhodecode/templates/admin/users/user_edit.html:108 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:71 -#: rhodecode/templates/summary/summary.html:124 +#: rhodecode/templates/summary/summary.html:133 msgid "Email" msgstr "メールアドレス" @@ -1524,6 +1584,7 @@ msgid "Your account must wait for activa msgstr "アカウントは管理者のアクティベーションを待つ必要があります" #: rhodecode/templates/repo_switcher_list.html:11 +#: rhodecode/templates/admin/defaults/defaults.html:44 #: rhodecode/templates/admin/repos/repo_add_base.html:65 #: rhodecode/templates/admin/repos/repo_edit.html:85 #: rhodecode/templates/settings/repo_settings.html:76 @@ -1551,7 +1612,7 @@ msgid "tags" msgstr "タグ" #: rhodecode/templates/switch_to_list.html:22 -#: rhodecode/templates/tags/tags_data.html:33 +#: rhodecode/templates/tags/tags_data.html:38 msgid "There are no tags yet" msgstr "まだタグがありません" @@ -1574,20 +1635,22 @@ msgstr "管理者ジャーナル" #: rhodecode/templates/admin/repos/repos.html:74 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:9 -#: rhodecode/templates/journal/journal.html:61 -#: rhodecode/templates/journal/journal.html:62 +#: rhodecode/templates/journal/journal_page_repos.html:9 +#: rhodecode/templates/journal/journal_page_repos.html:10 msgid "Action" msgstr "アクション" #: rhodecode/templates/admin/admin_log.html:7 +#: rhodecode/templates/admin/permissions/permissions.html:41 msgid "Repository" msgstr "リポジトリ" #: rhodecode/templates/admin/admin_log.html:8 #: rhodecode/templates/bookmarks/bookmarks.html:37 #: rhodecode/templates/bookmarks/bookmarks_data.html:7 -#: rhodecode/templates/branches/branches.html:52 -#: rhodecode/templates/tags/tags.html:37 +#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches_data.html:7 +#: rhodecode/templates/tags/tags.html:52 #: rhodecode/templates/tags/tags_data.html:7 msgid "Date" msgstr "日時" @@ -1596,10 +1659,81 @@ msgstr "日時" msgid "From IP" msgstr "アクセス元IPアドレス" -#: rhodecode/templates/admin/admin_log.html:53 +#: rhodecode/templates/admin/admin_log.html:57 msgid "No actions yet" msgstr "まだアクションがありません" +#: rhodecode/templates/admin/defaults/defaults.html:5 +#: rhodecode/templates/admin/defaults/defaults.html:25 +#, fuzzy +msgid "Repositories defaults" +msgstr "リポジトリグループ" + +#: rhodecode/templates/admin/defaults/defaults.html:11 +#, fuzzy +msgid "Defaults" +msgstr "default" + +#: rhodecode/templates/admin/defaults/defaults.html:35 +#: rhodecode/templates/admin/repos/repo_add_base.html:38 +#: rhodecode/templates/admin/repos/repo_edit.html:58 +msgid "Type" +msgstr "リポジトリのタイプ" + +#: rhodecode/templates/admin/defaults/defaults.html:48 +#: rhodecode/templates/admin/repos/repo_add_base.html:69 +#: rhodecode/templates/admin/repos/repo_edit.html:89 +#: rhodecode/templates/forks/fork.html:72 +#: rhodecode/templates/settings/repo_settings.html:80 +msgid "" +"Private repositories are only visible to people explicitly added as " +"collaborators." +msgstr "非公開リポジトリはコラボレーターとして明示的に追加された人でないと見つけられません" + +#: rhodecode/templates/admin/defaults/defaults.html:55 +#: rhodecode/templates/admin/repos/repo_edit.html:94 +msgid "Enable statistics" +msgstr "統計を有効にする" + +#: rhodecode/templates/admin/defaults/defaults.html:59 +#: rhodecode/templates/admin/repos/repo_edit.html:98 +msgid "Enable statistics window on summary page." +msgstr "概要ページの統計ウィンドウを有効にします" + +#: rhodecode/templates/admin/defaults/defaults.html:65 +#: rhodecode/templates/admin/repos/repo_edit.html:103 +msgid "Enable downloads" +msgstr "ダウンロードを有効にする" + +#: rhodecode/templates/admin/defaults/defaults.html:69 +#: rhodecode/templates/admin/repos/repo_edit.html:107 +msgid "Enable download menu on summary page." +msgstr "概要ページのダウンロードメニューを有効にします" + +#: rhodecode/templates/admin/defaults/defaults.html:75 +#: rhodecode/templates/admin/repos/repo_edit.html:112 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66 +msgid "Enable locking" +msgstr "ロックを有効にする" + +#: rhodecode/templates/admin/defaults/defaults.html:79 +#: rhodecode/templates/admin/repos/repo_edit.html:116 +msgid "Enable lock-by-pulling on repository." +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:84 +#: rhodecode/templates/admin/ldap/ldap.html:89 +#: rhodecode/templates/admin/repos/repo_edit.html:141 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74 +#: rhodecode/templates/admin/settings/hooks.html:73 +#: rhodecode/templates/admin/users/user_edit.html:133 +#: rhodecode/templates/admin/users/user_edit.html:178 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:135 +#: rhodecode/templates/settings/repo_settings.html:93 +msgid "Save" +msgstr "保存" + #: rhodecode/templates/admin/ldap/ldap.html:5 msgid "LDAP administration" msgstr "LDAP管理" @@ -1672,18 +1806,6 @@ msgstr "名字(Last Name)属性" msgid "E-mail Attribute" msgstr "メールアドレス属性" -#: rhodecode/templates/admin/ldap/ldap.html:89 -#: rhodecode/templates/admin/repos/repo_edit.html:141 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74 -#: rhodecode/templates/admin/settings/hooks.html:73 -#: rhodecode/templates/admin/users/user_edit.html:129 -#: rhodecode/templates/admin/users/user_edit.html:174 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79 -#: rhodecode/templates/admin/users_groups/users_group_edit.html:135 -#: rhodecode/templates/settings/repo_settings.html:93 -msgid "Save" -msgstr "保存" - #: rhodecode/templates/admin/notifications/notifications.html:5 #: rhodecode/templates/admin/notifications/notifications.html:9 msgid "My Notifications" @@ -1698,8 +1820,8 @@ msgid "Comments" msgstr "コメント" #: rhodecode/templates/admin/notifications/notifications.html:31 -#: rhodecode/templates/base/base.html:254 -#: rhodecode/templates/base/base.html:256 +#: rhodecode/templates/base/base.html:267 +#: rhodecode/templates/base/base.html:269 msgid "Pull requests" msgstr "プルリクエスト" @@ -1727,7 +1849,7 @@ msgstr "権限管理" #: rhodecode/templates/admin/permissions/permissions.html:11 #: rhodecode/templates/admin/repos/repo_edit.html:134 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58 -#: rhodecode/templates/admin/users/user_edit.html:139 +#: rhodecode/templates/admin/users/user_edit.html:143 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100 #: rhodecode/templates/settings/repo_settings.html:86 msgid "Permissions" @@ -1741,10 +1863,6 @@ msgstr "デフォルトの権限" 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 " @@ -1753,24 +1871,40 @@ msgid "" msgstr "" #: rhodecode/templates/admin/permissions/permissions.html:50 +#: rhodecode/templates/admin/permissions/permissions.html:63 msgid "overwrite existing settings" msgstr "現在の設定を上書きする" #: rhodecode/templates/admin/permissions/permissions.html:55 +#: rhodecode/templates/admin/repos/repo_add_base.html:29 +#: rhodecode/templates/admin/repos/repo_edit.html:49 +#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 +#: rhodecode/templates/forks/fork.html:50 +#: rhodecode/templates/settings/repo_settings.html:48 +msgid "Repository group" +msgstr "リポジトリグループ" + +#: rhodecode/templates/admin/permissions/permissions.html:62 +msgid "" +"All default permissions on each repository group will be reset to choosen" +" permission, note that all custom default permission on repositories " +"group will be lost" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:69 msgid "Registration" msgstr "登録" -#: rhodecode/templates/admin/permissions/permissions.html:63 +#: rhodecode/templates/admin/permissions/permissions.html:77 msgid "Repository creation" msgstr "リポジトリ作成" -#: rhodecode/templates/admin/permissions/permissions.html:71 -#, fuzzy +#: rhodecode/templates/admin/permissions/permissions.html:85 msgid "Repository forking" -msgstr "リポジトリ作成" - -#: rhodecode/templates/admin/permissions/permissions.html:78 -#: rhodecode/templates/admin/repos/repo_edit.html:241 +msgstr "リポジトリフォーク" + +#: rhodecode/templates/admin/permissions/permissions.html:92 +#: rhodecode/templates/admin/repos/repo_edit.html:264 msgid "set" msgstr "保存" @@ -1790,8 +1924,8 @@ msgid "add new" msgstr "新規追加" #: rhodecode/templates/admin/repos/repo_add_base.html:20 -#: rhodecode/templates/summary/summary.html:95 -#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:104 +#: rhodecode/templates/summary/summary.html:105 msgid "Clone from" msgstr "クローン元" @@ -1801,24 +1935,11 @@ msgstr "クローン元" msgid "Optional http[s] url from which repository should be cloned." msgstr "オプション:クローンするリポジトリのHTTP[S]のURLを指定します" -#: rhodecode/templates/admin/repos/repo_add_base.html:29 -#: rhodecode/templates/admin/repos/repo_edit.html:49 -#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 -#: rhodecode/templates/forks/fork.html:50 -#: rhodecode/templates/settings/repo_settings.html:48 -msgid "Repository group" -msgstr "リポジトリグループ" - #: rhodecode/templates/admin/repos/repo_add_base.html:33 #: rhodecode/templates/forks/fork.html:54 msgid "Optionaly select a group to put this repository into." msgstr "オプション:このリポジトリが属するグループを選択します" -#: rhodecode/templates/admin/repos/repo_add_base.html:38 -#: rhodecode/templates/admin/repos/repo_edit.html:58 -msgid "Type" -msgstr "リポジトリのタイプ" - #: rhodecode/templates/admin/repos/repo_add_base.html:42 msgid "Type of repository to create." msgstr "作成するリポジトリのタイプを指定します" @@ -1844,15 +1965,6 @@ msgstr "ファイルページ、ダウンロード、検索、READMEのデフォルトのリビジョンを指定します" msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "短く要点を絞ってください。長い説明にはREADMEファイルを利用してください。" -#: rhodecode/templates/admin/repos/repo_add_base.html:69 -#: rhodecode/templates/admin/repos/repo_edit.html:89 -#: rhodecode/templates/forks/fork.html:72 -#: rhodecode/templates/settings/repo_settings.html:80 -msgid "" -"Private repositories are only visible to people explicitly added as " -"collaborators." -msgstr "非公開リポジトリはコラボレーターとして明示的に追加された人でないと見つけられません" - #: rhodecode/templates/admin/repos/repo_add_base.html:73 msgid "add" msgstr "追加" @@ -1867,12 +1979,14 @@ msgstr "リポジトリを編集" #: rhodecode/templates/admin/repos/repo_edit.html:13 #: rhodecode/templates/admin/users/user_edit.html:13 -#: rhodecode/templates/admin/users/user_edit.html:224 -#: rhodecode/templates/admin/users/user_edit.html:226 +#: rhodecode/templates/admin/users/user_edit.html:228 +#: rhodecode/templates/admin/users/user_edit.html:230 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28 #: rhodecode/templates/admin/users_groups/users_group_edit.html:13 -#: rhodecode/templates/files/files_source.html:44 -#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:207 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:209 +#: rhodecode/templates/files/files_source.html:29 +#: rhodecode/templates/journal/journal_page_repos.html:29 msgid "edit" msgstr "編集" @@ -1886,32 +2000,6 @@ msgstr "クローンURI" msgid "Optional select a group to put this repository into." msgstr "オプション: このリポジトリを配置するグループを選択します" -#: rhodecode/templates/admin/repos/repo_edit.html:94 -msgid "Enable statistics" -msgstr "統計を有効にする" - -#: rhodecode/templates/admin/repos/repo_edit.html:98 -msgid "Enable statistics window on summary page." -msgstr "概要ページの統計ウィンドウを有効にします" - -#: rhodecode/templates/admin/repos/repo_edit.html:103 -msgid "Enable downloads" -msgstr "ダウンロードを有効にする" - -#: rhodecode/templates/admin/repos/repo_edit.html:107 -msgid "Enable download menu on summary page." -msgstr "概要ページのダウンロードメニューを有効にします" - -#: rhodecode/templates/admin/repos/repo_edit.html:112 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66 -#, fuzzy -msgid "Enable locking" -msgstr "有効にする" - -#: rhodecode/templates/admin/repos/repo_edit.html:116 -msgid "Enable lock-by-pulling on repository." -msgstr "" - #: rhodecode/templates/admin/repos/repo_edit.html:126 msgid "Change owner of this repository." msgstr "リポジトリの所有者を変更" @@ -1919,11 +2007,11 @@ msgstr "リポジトリの所有者を変更" #: rhodecode/templates/admin/repos/repo_edit.html:142 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:75 #: rhodecode/templates/admin/settings/settings.html:113 -#: rhodecode/templates/admin/settings/settings.html:168 -#: rhodecode/templates/admin/settings/settings.html:258 -#: rhodecode/templates/admin/users/user_edit.html:130 -#: rhodecode/templates/admin/users/user_edit.html:175 -#: rhodecode/templates/admin/users/user_edit.html:278 +#: rhodecode/templates/admin/settings/settings.html:179 +#: rhodecode/templates/admin/settings/settings.html:269 +#: rhodecode/templates/admin/users/user_edit.html:134 +#: rhodecode/templates/admin/users/user_edit.html:179 +#: rhodecode/templates/admin/users/user_edit.html:282 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:80 #: rhodecode/templates/admin/users_groups/users_group_edit.html:136 #: rhodecode/templates/files/files_add.html:82 @@ -1947,7 +2035,7 @@ msgstr "現在の統計情報をリセットする" #: rhodecode/templates/admin/repos/repo_edit.html:159 msgid "Confirm to remove current statistics" -msgstr "現在の統計情報をリセットしてもよろしいですか" +msgstr "現在の統計情報をリセットしてもよろしいですか?" #: rhodecode/templates/admin/repos/repo_edit.html:162 msgid "Fetched to rev" @@ -1981,82 +2069,104 @@ msgstr "リポジトリのキャッシュを無効化" msgid "Confirm to invalidate repository cache" msgstr "リポジトリのキャッシュを無効化してもよろしいですか?" -#: rhodecode/templates/admin/repos/repo_edit.html:195 -#: rhodecode/templates/base/base.html:318 -#: rhodecode/templates/base/base.html:320 -#: rhodecode/templates/base/base.html:322 -msgid "Public journal" -msgstr "公開ジャーナル" +#: rhodecode/templates/admin/repos/repo_edit.html:193 +msgid "" +"Manually invalidate cache for this repository. On first access repository" +" will be cached again" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:198 +msgid "List of cached values" +msgstr "" #: rhodecode/templates/admin/repos/repo_edit.html:201 -msgid "Remove from public journal" -msgstr "公開ジャーナルから削除する" +msgid "Prefix" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:202 +#, fuzzy +msgid "Key" +msgstr "APIキー" #: rhodecode/templates/admin/repos/repo_edit.html:203 +#: rhodecode/templates/admin/users/user_add.html:86 +#: rhodecode/templates/admin/users/user_edit.html:117 +#: 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/repos/repo_edit.html:218 +#: rhodecode/templates/base/base.html:331 +#: rhodecode/templates/base/base.html:333 +#: rhodecode/templates/base/base.html:335 +msgid "Public journal" +msgstr "公開ジャーナル" + +#: rhodecode/templates/admin/repos/repo_edit.html:224 +msgid "Remove from public journal" +msgstr "公開ジャーナルから削除する" + +#: rhodecode/templates/admin/repos/repo_edit.html:226 msgid "Add to public journal" msgstr "公開ジャーナルに追加する" -#: rhodecode/templates/admin/repos/repo_edit.html:208 +#: rhodecode/templates/admin/repos/repo_edit.html:231 msgid "" "All actions made on this repository will be accessible to everyone in " "public journal" msgstr "公開ジャーナルでは、このリポジトリに対して行った操作のすべてが公開されます" -#: rhodecode/templates/admin/repos/repo_edit.html:215 -#, fuzzy +#: rhodecode/templates/admin/repos/repo_edit.html:238 msgid "Locking" -msgstr "変更可能にする" - -#: rhodecode/templates/admin/repos/repo_edit.html:220 +msgstr "ロック" + +#: rhodecode/templates/admin/repos/repo_edit.html:243 msgid "Unlock locked repo" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:220 -#, fuzzy +msgstr "リポジトリのアンロック" + +#: rhodecode/templates/admin/repos/repo_edit.html:243 msgid "Confirm to unlock repository" -msgstr "このリポジトリを削除しますか?" - -#: rhodecode/templates/admin/repos/repo_edit.html:223 +msgstr "このリポジトリのロックを外しますか?" + +#: rhodecode/templates/admin/repos/repo_edit.html:246 msgid "lock repo" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:223 -#, fuzzy +msgstr "リポジトリのロック" + +#: rhodecode/templates/admin/repos/repo_edit.html:246 msgid "Confirm to lock repository" -msgstr "このリポジトリを削除しますか?" - -#: rhodecode/templates/admin/repos/repo_edit.html:224 -#, fuzzy +msgstr "このリポジトリをロックしますか?" + +#: rhodecode/templates/admin/repos/repo_edit.html:247 msgid "Repository is not locked" -msgstr "リポジトリロケーション" - -#: rhodecode/templates/admin/repos/repo_edit.html:229 +msgstr "リポジトリはロックされていません" + +#: rhodecode/templates/admin/repos/repo_edit.html:252 msgid "Force locking on repository. Works only when anonymous access is disabled" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:236 +#: rhodecode/templates/admin/repos/repo_edit.html:259 msgid "Set as fork of" msgstr "フォーク元の設定" -#: rhodecode/templates/admin/repos/repo_edit.html:245 +#: rhodecode/templates/admin/repos/repo_edit.html:268 msgid "Manually set this repository as a fork of another from the list" msgstr "このリポジトリをリスト中の他のリポジトリのフォークとして、手動で設定します" -#: rhodecode/templates/admin/repos/repo_edit.html:251 +#: rhodecode/templates/admin/repos/repo_edit.html:274 #: rhodecode/templates/changeset/changeset_file_comment.html:26 msgid "Delete" msgstr "削除" -#: rhodecode/templates/admin/repos/repo_edit.html:255 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "Remove this repository" msgstr "このリポジトリを削除" -#: rhodecode/templates/admin/repos/repo_edit.html:255 -#: rhodecode/templates/journal/journal.html:84 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "Confirm to delete this repository" msgstr "このリポジトリを削除しますか?" -#: rhodecode/templates/admin/repos/repo_edit.html:259 +#: rhodecode/templates/admin/repos/repo_edit.html:282 msgid "" "This repository will be renamed in a special way in order to be " "unaccesible for RhodeCode and VCS systems.\n" @@ -2084,7 +2194,7 @@ msgstr "書込" #: rhodecode/templates/admin/repos/repo_edit_perms.html:6 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6 #: rhodecode/templates/admin/users/users.html:85 -#: rhodecode/templates/base/base.html:217 +#: rhodecode/templates/base/base.html:229 msgid "admin" msgstr "管理" @@ -2095,8 +2205,8 @@ msgstr "メンバー" #: rhodecode/templates/admin/repos/repo_edit_perms.html:16 #: rhodecode/templates/data_table/_dt_elements.html:67 -#: rhodecode/templates/journal/journal.html:132 -#: rhodecode/templates/summary/summary.html:76 +#: rhodecode/templates/journal/journal.html:87 +#: rhodecode/templates/summary/summary.html:85 msgid "private repository" msgstr "非公開リポジトリ" @@ -2119,12 +2229,12 @@ msgid "Add another member" msgstr "別のメンバーを追加" #: rhodecode/templates/admin/repos/repo_edit_perms.html:97 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:81 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 msgid "Failed to remove user" msgstr "ユーザーの削除に失敗しました" #: rhodecode/templates/admin/repos/repo_edit_perms.html:112 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:96 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:103 msgid "Failed to remove users group" msgstr "ユーザーグループの削除に失敗しました" @@ -2132,11 +2242,44 @@ msgstr "ユーザーグループの削除に失敗しました" msgid "Repositories administration" msgstr "リポジトリ管理" -#: rhodecode/templates/admin/repos_groups/repos_groups.html:8 -msgid "Groups" -msgstr "グループ" - -#: rhodecode/templates/admin/repos_groups/repos_groups.html:12 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73 +msgid "apply to children" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74 +msgid "" +"Set or revoke permission to all children of that group, including " +"repositories and other groups" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups.html:9 +#: rhodecode/templates/base/base.html:122 +#: rhodecode/templates/base/base.html:313 +#: rhodecode/templates/base/base.html:315 +#: rhodecode/templates/base/base.html:317 +#: rhodecode/templates/bookmarks/bookmarks.html:11 +#: rhodecode/templates/branches/branches.html:10 +#: rhodecode/templates/changelog/changelog.html:10 +#: rhodecode/templates/changeset/changeset.html:10 +#: rhodecode/templates/changeset/changeset_range.html:9 +#: rhodecode/templates/compare/compare_diff.html:9 +#: rhodecode/templates/files/file_diff.html:8 +#: rhodecode/templates/files/files.html:8 +#: rhodecode/templates/files/files_add.html:15 +#: rhodecode/templates/files/files_edit.html:15 +#: rhodecode/templates/followers/followers.html:9 +#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9 +#: rhodecode/templates/pullrequests/pullrequest.html:8 +#: rhodecode/templates/pullrequests/pullrequest_show.html:8 +#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 +#: rhodecode/templates/settings/repo_settings.html:9 +#: rhodecode/templates/shortlog/shortlog.html:10 +#: rhodecode/templates/summary/summary.html:8 +#: rhodecode/templates/tags/tags.html:11 +msgid "Home" +msgstr "ホーム" + +#: rhodecode/templates/admin/repos_groups/repos_groups.html:13 msgid "with" msgstr "と" @@ -2162,7 +2305,7 @@ msgstr "親グループ" #: rhodecode/templates/admin/users/user_add.html:94 #: rhodecode/templates/admin/users_groups/users_group_add.html:49 #: rhodecode/templates/admin/users_groups/users_group_edit.html:90 -#: rhodecode/templates/pullrequests/pullrequest_show.html:113 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 msgid "save" msgstr "保存" @@ -2198,20 +2341,21 @@ msgstr "トップレベルリポジトリの数" msgid "action" msgstr "アクション" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54 -#: rhodecode/templates/admin/users/user_edit.html:255 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 +#: rhodecode/templates/admin/users/user_edit.html:259 #: rhodecode/templates/admin/users_groups/users_groups.html:44 #: rhodecode/templates/data_table/_dt_elements.html:7 -#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:121 msgid "delete" msgstr "削除" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54 -#, python-format -msgid "Confirm to delete this group: %s" -msgstr "グループ %s を削除してもよろしいですか" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:62 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 +#, fuzzy, python-format +msgid "Confirm to delete this group: %s with %s repository" +msgid_plural "Confirm to delete this group: %s with %s repositories" +msgstr[0] "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63 msgid "There are no repositories groups yet" msgstr "まだリポジトリグループがありません" @@ -2236,7 +2380,7 @@ msgstr "カスタムフック" #: rhodecode/templates/admin/settings/hooks.html:56 msgid "remove" -msgstr "" +msgstr "削除" #: rhodecode/templates/admin/settings/hooks.html:88 msgid "Failed to remove hook" @@ -2304,140 +2448,143 @@ msgid "GA code" msgstr "GAコード" #: rhodecode/templates/admin/settings/settings.html:112 -#: rhodecode/templates/admin/settings/settings.html:167 -#: rhodecode/templates/admin/settings/settings.html:257 +#: rhodecode/templates/admin/settings/settings.html:178 +#: rhodecode/templates/admin/settings/settings.html:268 msgid "Save settings" msgstr "設定を保存" #: rhodecode/templates/admin/settings/settings.html:119 +msgid "Visualisation settings" +msgstr "表示の設定" + +#: rhodecode/templates/admin/settings/settings.html:127 #, fuzzy -msgid "Visualisation settings" -msgstr "アプリケーション全体の設定" - -#: rhodecode/templates/admin/settings/settings.html:128 -#, fuzzy +msgid "General" +msgstr "有効にする" + +#: rhodecode/templates/admin/settings/settings.html:132 +msgid "Use lightweight dashboard" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:139 msgid "Icons" -msgstr "オプション" - -#: rhodecode/templates/admin/settings/settings.html:133 -msgid "Show public repo icon on repositories" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:137 -#, fuzzy -msgid "Show private repo icon on repositories" -msgstr "非公開リポジトリ" +msgstr "アイコン" #: rhodecode/templates/admin/settings/settings.html:144 -#, fuzzy +msgid "Show public repo icon on repositories" +msgstr "公開リポジトリのアイコンを表示" + +#: rhodecode/templates/admin/settings/settings.html:148 +msgid "Show private repo icon on repositories" +msgstr "非公開リポジトリのアイコンを表示" + +#: rhodecode/templates/admin/settings/settings.html:155 msgid "Meta-Tagging" -msgstr "設定" - -#: rhodecode/templates/admin/settings/settings.html:149 +msgstr "メタタグ" + +#: rhodecode/templates/admin/settings/settings.html:160 msgid "Stylify recognised metatags:" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:176 -#, fuzzy +msgstr "次のメタタグを変換する" + +#: rhodecode/templates/admin/settings/settings.html:187 msgid "VCS settings" -msgstr "設定" - -#: rhodecode/templates/admin/settings/settings.html:185 +msgstr "VCSの設定" + +#: rhodecode/templates/admin/settings/settings.html:196 msgid "Web" msgstr "Web" -#: rhodecode/templates/admin/settings/settings.html:190 -#, fuzzy +#: rhodecode/templates/admin/settings/settings.html:201 msgid "require ssl for vcs operations" -msgstr "プッシュにSSLを必須とする" - -#: rhodecode/templates/admin/settings/settings.html:192 +msgstr "VCSの操作にSSLを必須とする" + +#: rhodecode/templates/admin/settings/settings.html:203 msgid "" "RhodeCode will require SSL for pushing or pulling. If SSL is missing it " "will return HTTP Error 406: Not Acceptable" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:198 +#: rhodecode/templates/admin/settings/settings.html:209 msgid "Hooks" msgstr "フック" -#: rhodecode/templates/admin/settings/settings.html:203 +#: rhodecode/templates/admin/settings/settings.html:214 msgid "Update repository after push (hg update)" msgstr "プッシュ後にリポジトリをを更新する (hg update)" -#: rhodecode/templates/admin/settings/settings.html:207 +#: rhodecode/templates/admin/settings/settings.html:218 msgid "Show repository size after push" msgstr "プッシュ後にリポジトリのサイズを表示する" -#: rhodecode/templates/admin/settings/settings.html:211 +#: rhodecode/templates/admin/settings/settings.html:222 msgid "Log user push commands" msgstr "ユーザーのプッシュコマンドを記録する" -#: rhodecode/templates/admin/settings/settings.html:215 +#: rhodecode/templates/admin/settings/settings.html:226 msgid "Log user pull commands" msgstr "ユーザーのプルコマンドを記録する" -#: rhodecode/templates/admin/settings/settings.html:219 +#: rhodecode/templates/admin/settings/settings.html:230 msgid "advanced setup" msgstr "高度な設定" -#: rhodecode/templates/admin/settings/settings.html:224 -#, fuzzy +#: rhodecode/templates/admin/settings/settings.html:235 msgid "Mercurial Extensions" -msgstr "Mercurialリポジトリ" - -#: rhodecode/templates/admin/settings/settings.html:229 +msgstr "Mercurialエクステンション" + +#: rhodecode/templates/admin/settings/settings.html:240 msgid "largefiles extensions" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:233 +msgstr "largefilesエクステンション" + +#: rhodecode/templates/admin/settings/settings.html:244 msgid "hgsubversion extensions" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:235 +msgstr "hgsubversionエクステンション" + +#: rhodecode/templates/admin/settings/settings.html:246 msgid "" "Requires hgsubversion library installed. Allows clonning from svn remote " "locations" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:245 +msgstr "hgsubversion のインストールが必要です。リモートロケーションのsvnからクローン出来るようになります" + +#: rhodecode/templates/admin/settings/settings.html:256 msgid "Repositories location" msgstr "リポジトリロケーション" -#: rhodecode/templates/admin/settings/settings.html:250 +#: rhodecode/templates/admin/settings/settings.html:261 msgid "" "This a crucial application setting. If you are really sure you need to " "change this, you must restart application in order to make this setting " "take effect. Click this label to unlock." msgstr "これはアプリケーションの重要な設定です。本当に変更が必要でしょうか。もし、変更した場合、変更を反映さ競るためにアプリケーションを再起動する必要があります。変更可能にするにはこのラベルをクリックして下さい" -#: rhodecode/templates/admin/settings/settings.html:251 +#: rhodecode/templates/admin/settings/settings.html:262 +#: rhodecode/templates/base/base.html:221 msgid "unlock" msgstr "変更可能にする" -#: rhodecode/templates/admin/settings/settings.html:252 +#: rhodecode/templates/admin/settings/settings.html:263 msgid "" "Location where repositories are stored. After changing this value a " "restart, and rescan is required" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:272 +#: rhodecode/templates/admin/settings/settings.html:283 msgid "Test Email" msgstr "テストメール" -#: rhodecode/templates/admin/settings/settings.html:280 +#: rhodecode/templates/admin/settings/settings.html:291 msgid "Email to" msgstr "送信先" -#: rhodecode/templates/admin/settings/settings.html:288 +#: rhodecode/templates/admin/settings/settings.html:299 msgid "Send" msgstr "送る" -#: rhodecode/templates/admin/settings/settings.html:294 +#: rhodecode/templates/admin/settings/settings.html:305 msgid "System Info and Packages" msgstr "システム情報とパッケージ" -#: rhodecode/templates/admin/settings/settings.html:297 +#: rhodecode/templates/admin/settings/settings.html:308 msgid "show" msgstr "表示" @@ -2458,13 +2605,6 @@ msgstr "新しいユーザーを追加" msgid "Password confirmation" msgstr "パスワード再入力" -#: rhodecode/templates/admin/users/user_add.html:86 -#: rhodecode/templates/admin/users/user_edit.html:113 -#: 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 "ユーザー編集" @@ -2484,27 +2624,26 @@ msgstr "メールアドレス:" msgid "API key" msgstr "APIキー" -#: rhodecode/templates/admin/users/user_edit.html:59 +#: rhodecode/templates/admin/users/user_edit.html:63 msgid "LDAP DN" msgstr "LDAP DN" -#: rhodecode/templates/admin/users/user_edit.html:68 +#: rhodecode/templates/admin/users/user_edit.html:72 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:35 msgid "New password" msgstr "新しいパスワード" -#: rhodecode/templates/admin/users/user_edit.html:77 +#: rhodecode/templates/admin/users/user_edit.html:81 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 msgid "New password confirmation" msgstr "新しいパスワード 再入力" -#: rhodecode/templates/admin/users/user_edit.html:147 +#: rhodecode/templates/admin/users/user_edit.html:151 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108 -#, fuzzy msgid "Inherit default permissions" -msgstr "デフォルトの権限" - -#: rhodecode/templates/admin/users/user_edit.html:152 +msgstr "デフォルトの権限を継承する" + +#: rhodecode/templates/admin/users/user_edit.html:156 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113 #, python-format msgid "" @@ -2512,49 +2651,48 @@ msgid "" "options does not have any action" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:158 +#: rhodecode/templates/admin/users/user_edit.html:162 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119 msgid "Create repositories" msgstr "リポジトリを作成する" -#: rhodecode/templates/admin/users/user_edit.html:166 +#: rhodecode/templates/admin/users/user_edit.html:170 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127 -#, fuzzy msgid "Fork repositories" -msgstr "リポジトリ" - -#: rhodecode/templates/admin/users/user_edit.html:186 +msgstr "リポジトリをフォークする" + +#: rhodecode/templates/admin/users/user_edit.html:190 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:22 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:39 -#, fuzzy msgid "Nothing here yet" -msgstr "通知はまだありません" - -#: rhodecode/templates/admin/users/user_edit.html:193 +msgstr "まだありません" + +#: rhodecode/templates/admin/users/user_edit.html:197 #: rhodecode/templates/admin/users/user_edit_my_account.html:60 -#: rhodecode/templates/admin/users/user_edit_my_account.html:194 +#: rhodecode/templates/admin/users/user_edit_my_account.html:217 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:185 msgid "Permission" msgstr "権限" -#: rhodecode/templates/admin/users/user_edit.html:194 -#, fuzzy +#: rhodecode/templates/admin/users/user_edit.html:198 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:186 msgid "Edit Permission" -msgstr "リポジトリの権限" - -#: rhodecode/templates/admin/users/user_edit.html:243 +msgstr "権限の編集" + +#: rhodecode/templates/admin/users/user_edit.html:247 msgid "Email addresses" msgstr "メールアドレス" -#: rhodecode/templates/admin/users/user_edit.html:256 +#: rhodecode/templates/admin/users/user_edit.html:260 #, python-format msgid "Confirm to delete this email: %s" msgstr "このメールを削除してよろしいですか: %s" -#: rhodecode/templates/admin/users/user_edit.html:270 +#: rhodecode/templates/admin/users/user_edit.html:274 msgid "New email address" msgstr "新しいメールアドレス" -#: rhodecode/templates/admin/users/user_edit.html:277 +#: rhodecode/templates/admin/users/user_edit.html:281 msgid "Add" msgstr "追加" @@ -2577,67 +2715,66 @@ msgid "My repos" msgstr "リポジトリ" #: rhodecode/templates/admin/users/user_edit_my_account.html:41 -#, fuzzy msgid "My pull requests" -msgstr "すべてのプルリクエスト" +msgstr "プルリクエスト" #: rhodecode/templates/admin/users/user_edit_my_account.html:45 -#, fuzzy msgid "Add repo" -msgstr "新規追加" +msgstr "リポジトリの追加" #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:2 msgid "Opened by me" -msgstr "" +msgstr "自分が作成" #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10 -#, fuzzy, python-format +#, python-format msgid "Pull request #%s opened on %s" -msgstr "プルリクエスト #%s" +msgstr "プルリクエスト #%s %s に作成" #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15 -#, fuzzy msgid "Confirm to delete this pull request" -msgstr "このリポジトリを削除しますか?" +msgstr "このプルリクエストを削除しますか?" #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:26 msgid "I participate in" -msgstr "" +msgstr "レビュアーとして参加" #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:33 #: rhodecode/templates/pullrequests/pullrequest_show_all.html:30 #, python-format msgid "Pull request #%s opened by %s on %s" -msgstr "" +msgstr "プルリクエスト #%s %s によって %s に作成" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:7 #: rhodecode/templates/bookmarks/bookmarks.html:40 #: rhodecode/templates/bookmarks/bookmarks_data.html:9 -#: rhodecode/templates/branches/branches.html:55 -#: rhodecode/templates/journal/journal.html:60 -#: rhodecode/templates/tags/tags.html:40 +#: rhodecode/templates/branches/branches.html:54 +#: rhodecode/templates/branches/branches_data.html:9 +#: rhodecode/templates/journal/journal_page_repos.html:8 +#: rhodecode/templates/tags/tags.html:55 #: rhodecode/templates/tags/tags_data.html:9 msgid "Revision" msgstr "リビジョン" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28 -#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/journal/journal_page_repos.html:29 msgid "private" msgstr "非公開" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:31 #: rhodecode/templates/data_table/_dt_elements.html:7 +#: rhodecode/templates/journal/journal_page_repos.html:32 #, python-format msgid "Confirm to delete this repository: %s" msgstr "このリポジトリを削除しますか? : %s" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:38 -#: rhodecode/templates/journal/journal.html:94 +#: rhodecode/templates/journal/journal_page_repos.html:42 msgid "No repositories yet" msgstr "まだリポジトリがありません" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40 -#: rhodecode/templates/journal/journal.html:96 +#: rhodecode/templates/journal/journal_page_repos.html:44 msgid "create one now" msgstr "今すぐ作成する" @@ -2646,7 +2783,7 @@ msgid "Users administration" msgstr "ユーザー管理" #: rhodecode/templates/admin/users/users.html:9 -#: rhodecode/templates/base/base.html:223 +#: rhodecode/templates/base/base.html:235 msgid "users" msgstr "ユーザー" @@ -2659,7 +2796,6 @@ msgid "username" msgstr "ユーザー名" #: rhodecode/templates/admin/users/users.html:80 -#, fuzzy msgid "firstname" msgstr "名前" @@ -2677,7 +2813,7 @@ msgid "active" msgstr "アクティブ" #: rhodecode/templates/admin/users/users.html:86 -#: rhodecode/templates/base/base.html:226 +#: rhodecode/templates/base/base.html:238 msgid "ldap" msgstr "LDAP" @@ -2726,6 +2862,21 @@ msgstr "全ての要素を追加" msgid "Group members" msgstr "グループメンバー" +#: rhodecode/templates/admin/users_groups/users_group_edit.html:163 +#, fuzzy +msgid "No members yet" +msgstr "メンバー" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:171 +#, fuzzy +msgid "Permissions defined for this group" +msgstr "権限管理" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:178 +#, fuzzy +msgid "No permissions set yet" +msgstr "権限のコピー" + #: rhodecode/templates/admin/users_groups/users_groups.html:5 msgid "Users groups administration" msgstr "ユーザーグループ管理" @@ -2746,7 +2897,7 @@ msgstr "メンバー" #: rhodecode/templates/admin/users_groups/users_groups.html:45 #, python-format msgid "Confirm to delete this users group: %s" -msgstr "" +msgstr "ユーザグループを削除しますか?: %s" #: rhodecode/templates/base/base.html:41 msgid "Submit a bug" @@ -2768,36 +2919,10 @@ msgstr "ログイン" msgid "Inbox" msgstr "受信箱" -#: rhodecode/templates/base/base.html:122 -#: rhodecode/templates/base/base.html:300 -#: rhodecode/templates/base/base.html:302 -#: rhodecode/templates/base/base.html:304 -#: rhodecode/templates/bookmarks/bookmarks.html:11 -#: rhodecode/templates/branches/branches.html:10 -#: rhodecode/templates/changelog/changelog.html:10 -#: rhodecode/templates/changeset/changeset.html:10 -#: rhodecode/templates/changeset/changeset_range.html:9 -#: rhodecode/templates/compare/compare_diff.html:9 -#: rhodecode/templates/files/file_diff.html:8 -#: rhodecode/templates/files/files.html:8 -#: rhodecode/templates/files/files_add.html:15 -#: rhodecode/templates/files/files_edit.html:15 -#: rhodecode/templates/followers/followers.html:9 -#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9 -#: rhodecode/templates/pullrequests/pullrequest.html:8 -#: rhodecode/templates/pullrequests/pullrequest_show.html:8 -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 -#: rhodecode/templates/settings/repo_settings.html:9 -#: rhodecode/templates/shortlog/shortlog.html:10 -#: rhodecode/templates/summary/summary.html:8 -#: rhodecode/templates/tags/tags.html:11 -msgid "Home" -msgstr "ホーム" - #: rhodecode/templates/base/base.html:123 -#: rhodecode/templates/base/base.html:309 -#: rhodecode/templates/base/base.html:311 -#: rhodecode/templates/base/base.html:313 +#: rhodecode/templates/base/base.html:322 +#: rhodecode/templates/base/base.html:324 +#: rhodecode/templates/base/base.html:326 #: rhodecode/templates/journal/journal.html:4 #: rhodecode/templates/journal/journal.html:21 #: rhodecode/templates/journal/public_journal.html:4 @@ -2817,7 +2942,7 @@ msgid "Products" msgstr "" #: rhodecode/templates/base/base.html:152 -#: rhodecode/templates/base/base.html:182 +#: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47 msgid "loading..." msgstr "読み込み中..." @@ -2862,50 +2987,69 @@ msgstr "オプション" #: rhodecode/templates/base/base.html:204 #: rhodecode/templates/base/base.html:206 -#: rhodecode/templates/base/base.html:227 -msgid "settings" -msgstr "設定" - -#: rhodecode/templates/base/base.html:209 +#, fuzzy +msgid "repository settings" +msgstr "リポジトリ作成" + +#: rhodecode/templates/base/base.html:210 #: rhodecode/templates/data_table/_dt_elements.html:80 #: rhodecode/templates/forks/fork.html:13 msgid "fork" msgstr "フォーク" -#: rhodecode/templates/base/base.html:211 -#: rhodecode/templates/changelog/changelog.html:40 +#: rhodecode/templates/base/base.html:212 rhodecode/templates/base/root.html:50 +#: rhodecode/templates/changelog/changelog.html:43 msgid "Open new pull request" msgstr "新しいプルリクエストを作成" -#: rhodecode/templates/base/base.html:213 +#: rhodecode/templates/base/base.html:215 +#: rhodecode/templates/forks/forks_data.html:21 +msgid "Compare fork" +msgstr "フォークを比較" + +#: rhodecode/templates/base/base.html:217 msgid "search" msgstr "検索" -#: rhodecode/templates/base/base.html:222 +#: rhodecode/templates/base/base.html:223 +#, fuzzy +msgid "lock" +msgstr "変更可能にする" + +#: rhodecode/templates/base/base.html:234 msgid "repositories groups" msgstr "リポジトリグループ" -#: rhodecode/templates/base/base.html:224 +#: rhodecode/templates/base/base.html:236 msgid "users groups" msgstr "ユーザーグループ" -#: rhodecode/templates/base/base.html:225 +#: rhodecode/templates/base/base.html:237 msgid "permissions" msgstr "権限" -#: rhodecode/templates/base/base.html:238 +#: rhodecode/templates/base/base.html:239 +#, fuzzy +msgid "defaults" +msgstr "default" + #: rhodecode/templates/base/base.html:240 +msgid "settings" +msgstr "設定" + +#: rhodecode/templates/base/base.html:251 +#: rhodecode/templates/base/base.html:253 msgid "Followers" msgstr "フォロワー" -#: rhodecode/templates/base/base.html:246 -#: rhodecode/templates/base/base.html:248 +#: rhodecode/templates/base/base.html:259 +#: rhodecode/templates/base/base.html:261 msgid "Forks" msgstr "フォーク" -#: rhodecode/templates/base/base.html:327 -#: rhodecode/templates/base/base.html:329 -#: rhodecode/templates/base/base.html:331 +#: rhodecode/templates/base/base.html:340 +#: rhodecode/templates/base/base.html:342 +#: rhodecode/templates/base/base.html:344 #: rhodecode/templates/search/search.html:52 msgid "Search" msgstr "検索" @@ -2915,7 +3059,7 @@ msgid "add another comment" msgstr "別のコメントを追加" #: rhodecode/templates/base/root.html:43 -#: rhodecode/templates/journal/journal.html:120 +#: rhodecode/templates/journal/journal.html:75 #: rhodecode/templates/summary/summary.html:57 msgid "Stop following this repository" msgstr "このリポジトリのフォローをやめる" @@ -2929,14 +3073,27 @@ msgstr "このリポジトリのフォローする" msgid "Group" msgstr "グループ" -#: rhodecode/templates/base/root.html:47 +#: rhodecode/templates/base/root.html:48 msgid "search truncated" msgstr "検索結果は省略されています" -#: rhodecode/templates/base/root.html:48 +#: rhodecode/templates/base/root.html:49 msgid "no matching files" msgstr "マッチするファイルはありません" +#: rhodecode/templates/base/root.html:51 +#, fuzzy +msgid "Open new pull request for selected changesets" +msgstr "新しいプルリクエストを作成" + +#: rhodecode/templates/base/root.html:52 +msgid "Show selected changes __S -> __E" +msgstr "" + +#: rhodecode/templates/base/root.html:53 +msgid "Selection link" +msgstr "" + #: rhodecode/templates/bookmarks/bookmarks.html:5 #, python-format msgid "%s Bookmarks" @@ -2944,8 +3101,9 @@ msgstr "%s ブックマーク" #: rhodecode/templates/bookmarks/bookmarks.html:39 #: rhodecode/templates/bookmarks/bookmarks_data.html:8 -#: rhodecode/templates/branches/branches.html:54 -#: rhodecode/templates/tags/tags.html:39 +#: rhodecode/templates/branches/branches.html:53 +#: rhodecode/templates/branches/branches_data.html:8 +#: rhodecode/templates/tags/tags.html:54 #: rhodecode/templates/tags/tags_data.html:8 msgid "Author" msgstr "作成者" @@ -2959,34 +3117,15 @@ msgstr "%s ブランチ" msgid "Compare branches" msgstr "ブランチの比較" -#: rhodecode/templates/branches/branches.html:57 +#: rhodecode/templates/branches/branches.html:56 +#: rhodecode/templates/branches/branches_data.html:10 #: rhodecode/templates/compare/compare_diff.html:5 #: rhodecode/templates/compare/compare_diff.html:13 +#: rhodecode/templates/tags/tags.html:57 +#: rhodecode/templates/tags/tags_data.html:10 msgid "Compare" msgstr "比較" -#: rhodecode/templates/branches/branches_data.html:6 -msgid "name" -msgstr "名前" - -#: rhodecode/templates/branches/branches_data.html:7 -msgid "date" -msgstr "日付" - -#: rhodecode/templates/branches/branches_data.html:8 -#: rhodecode/templates/shortlog/shortlog_data.html:8 -msgid "author" -msgstr "作成者" - -#: rhodecode/templates/branches/branches_data.html:9 -#: rhodecode/templates/shortlog/shortlog_data.html:5 -msgid "revision" -msgstr "リビジョン" - -#: rhodecode/templates/branches/branches_data.html:10 -msgid "compare" -msgstr "比較" - #: rhodecode/templates/changelog/changelog.html:6 #, python-format msgid "%s Changelog" @@ -2999,57 +3138,65 @@ msgid_plural "showing %d out of %d revis msgstr[0] "" #: rhodecode/templates/changelog/changelog.html:37 +#, fuzzy +msgid "Clear selection" +msgstr "検索設定" + +#: rhodecode/templates/changelog/changelog.html:40 #: rhodecode/templates/forks/forks_data.html:19 #, python-format msgid "compare fork with %s" msgstr "%s とフォークを比較" -#: rhodecode/templates/changelog/changelog.html:37 -#: rhodecode/templates/forks/forks_data.html:21 -msgid "Compare fork" -msgstr "フォークを比較" - -#: rhodecode/templates/changelog/changelog.html:46 +#: rhodecode/templates/changelog/changelog.html:40 +#, fuzzy +msgid "Compare fork with parent" +msgstr "%s とフォークを比較" + +#: rhodecode/templates/changelog/changelog.html:49 msgid "Show" msgstr "表示" -#: rhodecode/templates/changelog/changelog.html:72 -#: rhodecode/templates/summary/summary.html:364 +#: rhodecode/templates/changelog/changelog.html:74 +#: rhodecode/templates/summary/summary.html:375 msgid "show more" msgstr "もっと表示" -#: rhodecode/templates/changelog/changelog.html:76 +#: rhodecode/templates/changelog/changelog.html:78 msgid "Affected number of files, click to show more details" msgstr "" -#: rhodecode/templates/changelog/changelog.html:89 -#: rhodecode/templates/changeset/changeset.html:38 +#: rhodecode/templates/changelog/changelog.html:91 +#: rhodecode/templates/changeset/changeset.html:44 #: rhodecode/templates/changeset/changeset_file_comment.html:20 #: rhodecode/templates/changeset/changeset_range.html:46 msgid "Changeset status" msgstr "リビジョンステータス" -#: rhodecode/templates/changelog/changelog.html:92 +#: rhodecode/templates/changelog/changelog.html:94 +#: rhodecode/templates/shortlog/shortlog_data.html:20 msgid "Click to open associated pull request" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:102 -#: rhodecode/templates/changeset/changeset.html:78 +msgstr "関連するプルリクエストを開く" + +#: rhodecode/templates/changelog/changelog.html:104 +#: rhodecode/templates/changeset/changeset.html:85 msgid "Parent" msgstr "親リビジョン" -#: rhodecode/templates/changelog/changelog.html:108 -#: rhodecode/templates/changeset/changeset.html:84 +#: rhodecode/templates/changelog/changelog.html:110 +#: rhodecode/templates/changeset/changeset.html:91 msgid "No parents" msgstr "親リビジョンはありません" -#: rhodecode/templates/changelog/changelog.html:113 -#: rhodecode/templates/changeset/changeset.html:88 +#: rhodecode/templates/changelog/changelog.html:115 +#: rhodecode/templates/changeset/changeset.html:95 +#: rhodecode/templates/changeset/changeset_range.html:79 msgid "merge" msgstr "マージ" -#: rhodecode/templates/changelog/changelog.html:116 -#: rhodecode/templates/changeset/changeset.html:91 +#: rhodecode/templates/changelog/changelog.html:118 +#: rhodecode/templates/changeset/changeset.html:98 +#: rhodecode/templates/changeset/changeset_range.html:82 #: rhodecode/templates/files/files.html:29 #: rhodecode/templates/files/files_add.html:33 #: rhodecode/templates/files/files_edit.html:33 @@ -3057,47 +3204,45 @@ msgstr "マージ" msgid "branch" msgstr "ブランチ" -#: rhodecode/templates/changelog/changelog.html:122 +#: rhodecode/templates/changelog/changelog.html:124 +#: rhodecode/templates/changeset/changeset_range.html:88 msgid "bookmark" msgstr "ブックマーク" -#: rhodecode/templates/changelog/changelog.html:128 -#: rhodecode/templates/changeset/changeset.html:96 +#: rhodecode/templates/changelog/changelog.html:130 +#: rhodecode/templates/changeset/changeset.html:103 +#: rhodecode/templates/changeset/changeset_range.html:94 msgid "tag" msgstr "タグ" -#: rhodecode/templates/changelog/changelog.html:164 -msgid "Show selected changes __S -> __E" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:255 +#: rhodecode/templates/changelog/changelog.html:301 msgid "There are no changes yet" msgstr "まだ変更がありません" #: rhodecode/templates/changelog/changelog_details.html:4 -#: rhodecode/templates/changeset/changeset.html:66 +#: rhodecode/templates/changeset/changeset.html:73 msgid "removed" msgstr "削除" #: rhodecode/templates/changelog/changelog_details.html:5 -#: rhodecode/templates/changeset/changeset.html:67 +#: rhodecode/templates/changeset/changeset.html:74 msgid "changed" msgstr "変更" #: rhodecode/templates/changelog/changelog_details.html:6 -#: rhodecode/templates/changeset/changeset.html:68 +#: rhodecode/templates/changeset/changeset.html:75 msgid "added" msgstr "追加" #: rhodecode/templates/changelog/changelog_details.html:8 #: rhodecode/templates/changelog/changelog_details.html:9 #: rhodecode/templates/changelog/changelog_details.html:10 -#: rhodecode/templates/changeset/changeset.html:70 -#: rhodecode/templates/changeset/changeset.html:71 -#: rhodecode/templates/changeset/changeset.html:72 +#: rhodecode/templates/changeset/changeset.html:77 +#: rhodecode/templates/changeset/changeset.html:78 +#: rhodecode/templates/changeset/changeset.html:79 #, python-format msgid "affected %s files" -msgstr "" +msgstr "%s ファイルに影響" #: rhodecode/templates/changeset/changeset.html:6 #, python-format @@ -3108,38 +3253,50 @@ msgstr "%s チェンジセット" msgid "Changeset" msgstr "チェンジセット" -#: rhodecode/templates/changeset/changeset.html:43 +#: rhodecode/templates/changeset/changeset.html:49 #: rhodecode/templates/changeset/diff_block.html:20 msgid "raw diff" msgstr "差分を表示" -#: rhodecode/templates/changeset/changeset.html:44 +#: rhodecode/templates/changeset/changeset.html:50 +#, fuzzy +msgid "patch diff" +msgstr "差分を表示" + +#: rhodecode/templates/changeset/changeset.html:51 #: rhodecode/templates/changeset/diff_block.html:21 msgid "download diff" msgstr "差分をダウンロード" -#: rhodecode/templates/changeset/changeset.html:48 +#: rhodecode/templates/changeset/changeset.html:55 #: rhodecode/templates/changeset/changeset_file_comment.html:82 #, python-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d コメント" -#: rhodecode/templates/changeset/changeset.html:48 +#: rhodecode/templates/changeset/changeset.html:55 #: rhodecode/templates/changeset/changeset_file_comment.html:82 #, python-format msgid "(%d inline)" msgid_plural "(%d inline)" msgstr[0] "(%d インライン)" -#: rhodecode/templates/changeset/changeset.html:103 -#, python-format -msgid "%s files affected with %s insertions and %s deletions:" -msgstr "%s ファイルに影響。 %s 個の追加と %s 個の削除:" - -#: rhodecode/templates/changeset/changeset.html:119 -msgid "Changeset was too big and was cut off..." -msgstr "チェンジセットが大きすぎるため、省略しました" +#: rhodecode/templates/changeset/changeset.html:111 +#: rhodecode/templates/compare/compare_diff.html:44 +#: rhodecode/templates/pullrequests/pullrequest_show.html:76 +#, fuzzy, python-format +msgid "%s file changed" +msgid_plural "%s files changed" +msgstr[0] "" + +#: rhodecode/templates/changeset/changeset.html:113 +#: rhodecode/templates/compare/compare_diff.html:46 +#: rhodecode/templates/pullrequests/pullrequest_show.html:78 +#, fuzzy, python-format +msgid "%s file changed with %s insertions and %s deletions" +msgid_plural "%s files changed with %s insertions and %s deletions" +msgstr[0] "%s ファイルに影響。 %s 個の追加と %s 個の削除:" #: rhodecode/templates/changeset/changeset_file_comment.html:42 msgid "Submitting..." @@ -3192,7 +3349,7 @@ msgstr "ステータスを変更する" #: rhodecode/templates/changeset/changeset_file_comment.html:140 msgid "Comment and close" -msgstr "" +msgstr "コメントしてクローズ" #: rhodecode/templates/changeset/changeset_range.html:5 #, python-format @@ -3204,15 +3361,18 @@ msgstr "%s チェンジセット" msgid "Compare View" msgstr "比較ビュー" +#: rhodecode/templates/changeset/changeset_range.html:29 +#, fuzzy +msgid "Show combined compare" +msgstr "インラインコメントを表示" + #: rhodecode/templates/changeset/changeset_range.html:54 -#: rhodecode/templates/compare/compare_diff.html:41 -#: rhodecode/templates/pullrequests/pullrequest_show.html:69 msgid "Files affected" -msgstr "" +msgstr "影響のあるファイル" #: rhodecode/templates/changeset/diff_block.html:19 -msgid "diff" -msgstr "差分" +msgid "show full diff for this file" +msgstr "" #: rhodecode/templates/changeset/diff_block.html:27 msgid "show inline comments" @@ -3223,8 +3383,17 @@ msgid "No changesets" msgstr "チェンジセットはありません" #: rhodecode/templates/compare/compare_diff.html:37 -msgid "Outgoing changesets" -msgstr "送信可能なチェンジセット" +#: rhodecode/templates/pullrequests/pullrequest_show.html:69 +#, fuzzy, python-format +msgid "Showing %s commit" +msgid_plural "Showing %s commits" +msgstr[0] "" + +#: rhodecode/templates/compare/compare_diff.html:52 +#: rhodecode/templates/pullrequests/pullrequest_show.html:84 +#, fuzzy +msgid "No files" +msgstr "ファイル" #: rhodecode/templates/data_table/_dt_elements.html:39 #: rhodecode/templates/data_table/_dt_elements.html:41 @@ -3233,42 +3402,125 @@ msgid "Fork" msgstr "フォーク" #: rhodecode/templates/data_table/_dt_elements.html:60 -#: rhodecode/templates/journal/journal.html:126 -#: rhodecode/templates/summary/summary.html:68 +#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/summary/summary.html:77 msgid "Mercurial repository" msgstr "Mercurialリポジトリ" #: rhodecode/templates/data_table/_dt_elements.html:62 -#: rhodecode/templates/journal/journal.html:128 -#: rhodecode/templates/summary/summary.html:71 +#: rhodecode/templates/journal/journal.html:83 +#: rhodecode/templates/summary/summary.html:80 msgid "Git repository" msgstr "Gitリポジトリ" #: rhodecode/templates/data_table/_dt_elements.html:69 -#: rhodecode/templates/journal/journal.html:134 -#: rhodecode/templates/summary/summary.html:78 +#: rhodecode/templates/journal/journal.html:89 +#: rhodecode/templates/summary/summary.html:87 msgid "public repository" msgstr "公開リポジトリ" #: rhodecode/templates/data_table/_dt_elements.html:80 -#: rhodecode/templates/summary/summary.html:87 -#: rhodecode/templates/summary/summary.html:88 +#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:97 msgid "Fork of" msgstr "フォーク元: " -#: rhodecode/templates/data_table/_dt_elements.html:92 +#: rhodecode/templates/data_table/_dt_elements.html:94 msgid "No changesets yet" msgstr "まだチェンジセットがありません" -#: rhodecode/templates/data_table/_dt_elements.html:104 +#: rhodecode/templates/data_table/_dt_elements.html:101 +#: rhodecode/templates/data_table/_dt_elements.html:103 +#, python-format +msgid "Subscribe to %s rss feed" +msgstr "%s の RSS フィードを購読" + +#: rhodecode/templates/data_table/_dt_elements.html:109 +#: rhodecode/templates/data_table/_dt_elements.html:111 +#, python-format +msgid "Subscribe to %s atom feed" +msgstr "%s の ATOM フィードを購読" + +#: rhodecode/templates/data_table/_dt_elements.html:122 #, python-format msgid "Confirm to delete this user: %s" msgstr "このユーザーを本当に削除してよろしいですか?: %s" +#: rhodecode/templates/email_templates/changeset_comment.html:10 +#, fuzzy +msgid "New status$" +msgstr "ステータスを変更する" + #: rhodecode/templates/email_templates/main.html:8 -msgid "This is an notification from RhodeCode." +#, fuzzy +msgid "This is a notification from RhodeCode." msgstr "RhodeCodeからの通知があります" +#: rhodecode/templates/email_templates/password_reset.html:4 +msgid "Hello" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:6 +msgid "We received a request to create a new password for your account." +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:8 +msgid "You can generate it by clicking following URL" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:12 +msgid "If you didn't request new password please ignore this email." +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:4 +#, python-format +msgid "" +"User %s opened pull request for repository %s and wants you to review " +"changes." +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:5 +#, fuzzy +msgid "title" +msgstr "タイトル" + +#: rhodecode/templates/email_templates/pull_request.html:6 +#: rhodecode/templates/pullrequests/pullrequest.html:115 +msgid "description" +msgstr "説明" + +#: rhodecode/templates/email_templates/pull_request.html:11 +msgid "revisions for reviewing" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:18 +#, fuzzy +msgid "View this pull request here" +msgstr "このプルリクエストにレビュアーを追加" + +#: rhodecode/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +msgid "User %s commented on pull request #%s for repository %s" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request_comment.html:10 +#, fuzzy +msgid "New status" +msgstr "ステータスを変更する" + +#: rhodecode/templates/email_templates/pull_request_comment.html:14 +msgid "View this comment here" +msgstr "" + +#: rhodecode/templates/email_templates/registration.html:4 +#, fuzzy +msgid "A new user have registered in RhodeCode" +msgstr "rhodecodeへの登録を受け付けました" + +#: rhodecode/templates/email_templates/registration.html:9 +msgid "View this user here" +msgstr "" + #: rhodecode/templates/errors/error_document.html:46 #, python-format msgid "You will be redirected to %s in %s seconds" @@ -3284,13 +3536,13 @@ msgid "File diff" msgstr "ファイル差分" #: rhodecode/templates/files/files.html:4 -#: rhodecode/templates/files/files.html:72 -#, fuzzy, python-format +#: rhodecode/templates/files/files.html:74 +#, python-format msgid "%s files" msgstr "%s ファイル" #: rhodecode/templates/files/files.html:12 -#: rhodecode/templates/summary/summary.html:340 +#: rhodecode/templates/summary/summary.html:351 msgid "files" msgstr "ファイル" @@ -3368,7 +3620,7 @@ msgid "search file list" msgstr "ファイル一覧を検索" #: rhodecode/templates/files/files_browser.html:31 -#: rhodecode/templates/shortlog/shortlog_data.html:65 +#: rhodecode/templates/shortlog/shortlog_data.html:78 msgid "add new file" msgstr "新しいファイルを追加" @@ -3401,18 +3653,18 @@ msgid "edit file" msgstr "ファイルを編集" #: rhodecode/templates/files/files_edit.html:49 -#: rhodecode/templates/files/files_source.html:38 +#: rhodecode/templates/files/files_source.html:23 msgid "show annotation" msgstr "アノテーションを表示" #: rhodecode/templates/files/files_edit.html:50 -#: rhodecode/templates/files/files_source.html:40 -#: rhodecode/templates/files/files_source.html:68 +#: rhodecode/templates/files/files_source.html:25 +#: rhodecode/templates/files/files_source.html:53 msgid "show as raw" msgstr "元のファイルを表示" #: rhodecode/templates/files/files_edit.html:51 -#: rhodecode/templates/files/files_source.html:41 +#: rhodecode/templates/files/files_source.html:26 msgid "download as raw" msgstr "元のファイルをダウンロード" @@ -3424,41 +3676,47 @@ msgstr "ソース" msgid "Editing file" msgstr "ファイルを編集" -#: rhodecode/templates/files/files_source.html:2 +#: rhodecode/templates/files/files_history_box.html:2 msgid "History" msgstr "変更履歴" -#: rhodecode/templates/files/files_source.html:9 +#: rhodecode/templates/files/files_history_box.html:9 msgid "diff to revision" msgstr "このリビジョンの差分を見る" -#: rhodecode/templates/files/files_source.html:10 +#: rhodecode/templates/files/files_history_box.html:10 msgid "show at revision" msgstr "このリビジョンを見る" -#: rhodecode/templates/files/files_source.html:14 +#: rhodecode/templates/files/files_history_box.html:11 +#, fuzzy +msgid "show full history" +msgstr "ファイル一覧を読み込み中..." + +#: rhodecode/templates/files/files_history_box.html:16 #, python-format msgid "%s author" msgid_plural "%s authors" msgstr[0] "%s 作成者" -#: rhodecode/templates/files/files_source.html:36 +#: rhodecode/templates/files/files_source.html:6 +#, fuzzy +msgid "Load file history" +msgstr "ファイル一覧を読み込み中..." + +#: rhodecode/templates/files/files_source.html:21 msgid "show source" msgstr "ソースを表示" -#: rhodecode/templates/files/files_source.html:59 +#: rhodecode/templates/files/files_source.html:44 #, python-format msgid "Binary file (%s)" msgstr "バイナリファイル (%s)" -#: rhodecode/templates/files/files_source.html:68 +#: rhodecode/templates/files/files_source.html:53 msgid "File is too big to display" msgstr "表示するには大きすぎるファイルです" -#: rhodecode/templates/files/files_source.html:124 -msgid "Selection link" -msgstr "" - #: rhodecode/templates/files/files_ypjax.html:5 msgid "annotation" msgstr "アノテーション" @@ -3530,7 +3788,7 @@ msgstr "フォーク" msgid "forked" msgstr "フォークしました" -#: rhodecode/templates/forks/forks_data.html:38 +#: rhodecode/templates/forks/forks_data.html:42 msgid "There are no forks yet" msgstr "まだフォークがありません" @@ -3543,7 +3801,7 @@ msgid "RSS journal feed" msgstr "RSS ジャーナルフィード" #: rhodecode/templates/journal/journal.html:24 -#: rhodecode/templates/pullrequests/pullrequest.html:27 +#: rhodecode/templates/pullrequests/pullrequest.html:55 msgid "Refresh" msgstr "更新" @@ -3565,19 +3823,19 @@ msgstr "ウォッチ" msgid "ADD" msgstr "追加" -#: rhodecode/templates/journal/journal.html:114 +#: rhodecode/templates/journal/journal.html:69 msgid "following user" msgstr "フォローしているユーザー" -#: rhodecode/templates/journal/journal.html:114 +#: rhodecode/templates/journal/journal.html:69 msgid "user" msgstr "ユーザー" -#: rhodecode/templates/journal/journal.html:147 +#: rhodecode/templates/journal/journal.html:102 msgid "You are not following any users or repositories" msgstr "まだどのユーザーもリポジトリもフォローしていません" -#: rhodecode/templates/journal/journal_data.html:47 +#: rhodecode/templates/journal/journal_data.html:51 msgid "No entries yet" msgstr "まだエントリがありません" @@ -3598,30 +3856,28 @@ msgstr "公開ジャーナル" msgid "New pull request" msgstr "新しいプルリクエスト" -#: rhodecode/templates/pullrequests/pullrequest.html:28 +#: rhodecode/templates/pullrequests/pullrequest.html:54 msgid "refresh overview" msgstr "概要の更新" #: rhodecode/templates/pullrequests/pullrequest.html:66 msgid "Detailed compare view" -msgstr "" +msgstr "比較ビュー詳細" #: rhodecode/templates/pullrequests/pullrequest.html:70 -#: rhodecode/templates/pullrequests/pullrequest_show.html:82 +#: rhodecode/templates/pullrequests/pullrequest_show.html:100 msgid "Pull request reviewers" msgstr "プルリクエストレビュアー" #: rhodecode/templates/pullrequests/pullrequest.html:79 -#: rhodecode/templates/pullrequests/pullrequest_show.html:94 -#, fuzzy +#: rhodecode/templates/pullrequests/pullrequest_show.html:112 msgid "owner" msgstr "所有者" #: rhodecode/templates/pullrequests/pullrequest.html:91 -#: rhodecode/templates/pullrequests/pullrequest_show.html:109 -#, fuzzy +#: rhodecode/templates/pullrequests/pullrequest_show.html:127 msgid "Add reviewer to this pull request." -msgstr "新しいプルリクエスト" +msgstr "このプルリクエストにレビュアーを追加" #: rhodecode/templates/pullrequests/pullrequest.html:97 msgid "Create new pull request" @@ -3633,10 +3889,6 @@ msgstr "新しいプルリクエストを作成" msgid "Title" msgstr "タイトル" -#: rhodecode/templates/pullrequests/pullrequest.html:115 -msgid "description" -msgstr "説明" - #: rhodecode/templates/pullrequests/pullrequest.html:123 msgid "Send pull request" msgstr "プルリクエストを送る" @@ -3644,42 +3896,45 @@ msgstr "プルリクエストを送る" #: rhodecode/templates/pullrequests/pullrequest_show.html:23 #, python-format msgid "Closed %s" +msgstr "%s にクローズ" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:23 +#, python-format +msgid "with status %s" msgstr "" #: rhodecode/templates/pullrequests/pullrequest_show.html:31 -#, fuzzy msgid "Status" -msgstr "ステータスを変更する" +msgstr "ステータス" #: rhodecode/templates/pullrequests/pullrequest_show.html:36 msgid "Pull request status" msgstr "プルリクエストステータス" #: rhodecode/templates/pullrequests/pullrequest_show.html:44 -#, fuzzy msgid "Still not reviewed by" msgstr "未レビュー" -#: rhodecode/templates/pullrequests/pullrequest_show.html:47 -#, fuzzy, python-format +#: rhodecode/templates/pullrequests/pullrequest_show.html:48 +#, python-format msgid "%d reviewer" msgid_plural "%d reviewers" -msgstr[0] "レビュー中" - -#: rhodecode/templates/pullrequests/pullrequest_show.html:54 +msgstr[0] "%d レビュアー" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:50 +#, fuzzy +msgid "pull request was reviewed by all reviewers" +msgstr "プルリクエストレビュアー" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:58 msgid "Created on" msgstr "作成日" -#: rhodecode/templates/pullrequests/pullrequest_show.html:61 +#: rhodecode/templates/pullrequests/pullrequest_show.html:65 msgid "Compare view" msgstr "比較ビュー" -#: rhodecode/templates/pullrequests/pullrequest_show.html:65 -msgid "Incoming changesets" -msgstr "" - #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4 -#, fuzzy msgid "all pull requests" msgstr "すべてのプルリクエスト" @@ -3689,7 +3944,7 @@ msgstr "すべてのプルリクエスト" #: rhodecode/templates/pullrequests/pullrequest_show_all.html:27 msgid "Closed" -msgstr "" +msgstr "クローズ" #: rhodecode/templates/search/search.html:6 #, python-format @@ -3725,7 +3980,6 @@ msgid "File contents" msgstr "ファイル内容" #: rhodecode/templates/search/search.html:64 -#, fuzzy msgid "Commit messages" msgstr "コミットメッセージ" @@ -3749,27 +4003,32 @@ msgstr "%s 設定" msgid "%s Shortlog" msgstr "%s 短いログ" -#: rhodecode/templates/shortlog/shortlog.html:14 +#: rhodecode/templates/shortlog/shortlog.html:15 +#: rhodecode/templates/shortlog/shortlog.html:19 msgid "shortlog" msgstr "ログ" +#: rhodecode/templates/shortlog/shortlog_data.html:5 +msgid "revision" +msgstr "リビジョン" + #: rhodecode/templates/shortlog/shortlog_data.html:7 msgid "age" msgstr "経過時間" -#: rhodecode/templates/shortlog/shortlog_data.html:18 -msgid "No commit message" -msgstr "コミットメッセージが有りません" - -#: rhodecode/templates/shortlog/shortlog_data.html:62 +#: rhodecode/templates/shortlog/shortlog_data.html:8 +msgid "author" +msgstr "作成者" + +#: rhodecode/templates/shortlog/shortlog_data.html:75 msgid "Add or upload files directly via RhodeCode" msgstr "RhodeCode経由で直接ファイルを追加またはアップロード" -#: rhodecode/templates/shortlog/shortlog_data.html:71 +#: rhodecode/templates/shortlog/shortlog_data.html:84 msgid "Push new repo" msgstr "新しいリポジトリをプッシュ" -#: rhodecode/templates/shortlog/shortlog_data.html:79 +#: rhodecode/templates/shortlog/shortlog_data.html:92 msgid "Existing repository?" msgstr "存在するリポジトリをプッシュ" @@ -3797,128 +4056,138 @@ msgstr "リポジトリ %s RSS フィード" msgid "ATOM" msgstr "ATOM" -#: rhodecode/templates/summary/summary.html:82 +#: rhodecode/templates/summary/summary.html:70 +#, fuzzy, python-format +msgid "Repository locked by %s" +msgstr "" + +#: rhodecode/templates/summary/summary.html:72 +#, fuzzy +msgid "Repository unlocked" +msgstr "リポジトリはロックされていません" + +#: rhodecode/templates/summary/summary.html:91 #, python-format msgid "Non changable ID %s" msgstr "" -#: rhodecode/templates/summary/summary.html:87 +#: rhodecode/templates/summary/summary.html:96 msgid "public" msgstr "公開" -#: rhodecode/templates/summary/summary.html:95 +#: rhodecode/templates/summary/summary.html:104 msgid "remote clone" msgstr "" -#: rhodecode/templates/summary/summary.html:116 +#: rhodecode/templates/summary/summary.html:125 msgid "Contact" msgstr "コンタクト" -#: rhodecode/templates/summary/summary.html:130 +#: rhodecode/templates/summary/summary.html:139 msgid "Clone url" msgstr "クローンURL" -#: rhodecode/templates/summary/summary.html:133 +#: rhodecode/templates/summary/summary.html:142 msgid "Show by Name" msgstr "名前で表示" -#: rhodecode/templates/summary/summary.html:134 +#: rhodecode/templates/summary/summary.html:143 msgid "Show by ID" msgstr "IDで表示" -#: rhodecode/templates/summary/summary.html:142 +#: rhodecode/templates/summary/summary.html:151 msgid "Trending files" msgstr "トレンドファイル" -#: rhodecode/templates/summary/summary.html:150 -#: rhodecode/templates/summary/summary.html:166 -#: rhodecode/templates/summary/summary.html:194 +#: rhodecode/templates/summary/summary.html:159 +#: rhodecode/templates/summary/summary.html:175 +#: rhodecode/templates/summary/summary.html:203 msgid "enable" msgstr "有効にする" -#: rhodecode/templates/summary/summary.html:158 +#: rhodecode/templates/summary/summary.html:167 msgid "Download" msgstr "ダウンロード" -#: rhodecode/templates/summary/summary.html:162 +#: rhodecode/templates/summary/summary.html:171 msgid "There are no downloads yet" msgstr "まだダウンロードがありません" -#: rhodecode/templates/summary/summary.html:164 +#: rhodecode/templates/summary/summary.html:173 msgid "Downloads are disabled for this repository" msgstr "このリポジトリのダウンロードは無効化されています" -#: rhodecode/templates/summary/summary.html:170 +#: rhodecode/templates/summary/summary.html:179 msgid "Download as zip" msgstr "ZIPとしてダウンロード" -#: rhodecode/templates/summary/summary.html:173 +#: rhodecode/templates/summary/summary.html:182 msgid "Check this to download archive with subrepos" msgstr "チェックするとダウンロードアーカイブにサブリポジトリが含まれます" -#: rhodecode/templates/summary/summary.html:173 +#: rhodecode/templates/summary/summary.html:182 msgid "with subrepos" msgstr "サブリポジトリを含む" -#: rhodecode/templates/summary/summary.html:186 +#: rhodecode/templates/summary/summary.html:195 msgid "Commit activity by day / author" -msgstr "" - -#: rhodecode/templates/summary/summary.html:197 +msgstr "コミットアクティビティ 日/作成者" + +#: rhodecode/templates/summary/summary.html:206 msgid "Stats gathered: " -msgstr "" - -#: rhodecode/templates/summary/summary.html:218 +msgstr "収集した統計情報: " + +#: rhodecode/templates/summary/summary.html:227 msgid "Shortlog" msgstr "ログ" -#: rhodecode/templates/summary/summary.html:220 +#: rhodecode/templates/summary/summary.html:229 msgid "Quick start" msgstr "クイックスタート" -#: rhodecode/templates/summary/summary.html:233 +#: rhodecode/templates/summary/summary.html:243 #, python-format msgid "Readme file at revision '%s'" msgstr "" -#: rhodecode/templates/summary/summary.html:236 +#: rhodecode/templates/summary/summary.html:246 msgid "Permalink to this readme" -msgstr "" - -#: rhodecode/templates/summary/summary.html:293 +msgstr "パーマリンク" + +#: rhodecode/templates/summary/summary.html:304 #, python-format msgid "Download %s as %s" msgstr "%s を %sとしてダウンロード" -#: rhodecode/templates/summary/summary.html:650 +#: rhodecode/templates/summary/summary.html:661 msgid "commits" msgstr "コミット" -#: rhodecode/templates/summary/summary.html:651 +#: rhodecode/templates/summary/summary.html:662 msgid "files added" msgstr "追加されたファイル" -#: rhodecode/templates/summary/summary.html:652 +#: rhodecode/templates/summary/summary.html:663 msgid "files changed" msgstr "変更されたファイル" -#: rhodecode/templates/summary/summary.html:653 +#: rhodecode/templates/summary/summary.html:664 msgid "files removed" msgstr "削除されたファイル" -#: rhodecode/templates/summary/summary.html:656 +#: rhodecode/templates/summary/summary.html:667 msgid "commit" msgstr "コミット" -#: rhodecode/templates/summary/summary.html:657 +#: rhodecode/templates/summary/summary.html:668 msgid "file added" msgstr "追加されたファイル" -#: rhodecode/templates/summary/summary.html:658 +#: rhodecode/templates/summary/summary.html:669 msgid "file changed" msgstr "変更されたファイル" -#: rhodecode/templates/summary/summary.html:659 +#: rhodecode/templates/summary/summary.html:670 msgid "file removed" msgstr "削除されたファイル" @@ -3927,3 +4196,8 @@ msgstr "削除されたファイル" msgid "%s Tags" msgstr "%s タグ" +#: rhodecode/templates/tags/tags.html:29 +#, fuzzy +msgid "Compare tags" +msgstr "比較" + diff --git a/rhodecode/i18n/pl/LC_MESSAGES/rhodecode.mo b/rhodecode/i18n/pl/LC_MESSAGES/rhodecode.mo new file mode 100644 index 0000000000000000000000000000000000000000..4cb8fac01d597bd258b2380292e766170f82539e GIT binary patch literal 58586 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 Wh|3NGiQScQC1`c^FW$*ExBfTR9PjP` diff --git a/rhodecode/i18n/pl/LC_MESSAGES/rhodecode.po b/rhodecode/i18n/pl/LC_MESSAGES/rhodecode.po new file mode 100644 --- /dev/null +++ b/rhodecode/i18n/pl/LC_MESSAGES/rhodecode.po @@ -0,0 +1,4280 @@ +# English translations for rhodecode. +# Copyright (C) 2010 ORGANIZATION +# This file is distributed under the same license as the rhodecode project. +# FIRST AUTHOR , 2010. +# Nemcio , 2012. +# Nemo , 2012. +msgid "" +msgstr "" +"Project-Id-Version: rhodecode 0.1\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2012-12-03 03:21+0100\n" +"PO-Revision-Date: 2012-11-25 03:42+0200\n" +"Last-Translator: Nemo \n" +"Language-Team: Test\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && " +"(n%100<10 || n%100>=20) ? 1 : 2)\n" +"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" + +#: rhodecode/controllers/changelog.py:95 +msgid "All Branches" +msgstr "Wszystkie gałęzie" + +#: rhodecode/controllers/changeset.py:84 +msgid "show white space" +msgstr "pokazuj spacje" + +#: rhodecode/controllers/changeset.py:91 rhodecode/controllers/changeset.py:98 +msgid "ignore white space" +msgstr "ignoruj pokazywanie spacji" + +#: rhodecode/controllers/changeset.py:164 +#, python-format +msgid "%s line context" +msgstr "%s linia w kontekście" + +#: rhodecode/controllers/changeset.py:315 +#: rhodecode/controllers/pullrequests.py:411 +#, python-format +msgid "Status change -> %s" +msgstr "Zmiana statusu -> %s" + +#: rhodecode/controllers/changeset.py:346 +msgid "" +"Changing status on a changeset associated witha closed pull request is " +"not allowed" +msgstr "" +"Zmiana statusu na grupy zmian powiązania łączy zamkniętego wniosku jest " +"niedozwolona" + +#: rhodecode/controllers/compare.py:75 +#: rhodecode/controllers/pullrequests.py:117 +#: rhodecode/controllers/shortlog.py:100 +msgid "There are no changesets yet" +msgstr "Brak zestawienia zmian" + +#: rhodecode/controllers/error.py:69 +msgid "Home page" +msgstr "Strona główna" + +#: rhodecode/controllers/error.py:98 +msgid "The request could not be understood by the server due to malformed syntax." +msgstr "" +"Wniosek nie może być rozumiany przez serwer z powodu zniekształconej " +"składni." + +#: rhodecode/controllers/error.py:101 +msgid "Unauthorized access to resource" +msgstr "Nieautoryzowany dostęp do zasobów" + +#: rhodecode/controllers/error.py:103 +msgid "You don't have permission to view this page" +msgstr "Nie masz uprawnień do przeglądania tej strony" + +#: rhodecode/controllers/error.py:105 +msgid "The resource could not be found" +msgstr "Zasób nie został znaleziony" + +#: rhodecode/controllers/error.py:107 +msgid "" +"The server encountered an unexpected condition which prevented it from " +"fulfilling the request." +msgstr "" +"Serwer napotkał niespodziewany warunek, który uniemożliwia jej spełnienie" +" żądania." + +#: rhodecode/controllers/feed.py:52 +#, python-format +msgid "Changes on %s repository" +msgstr "Zmiany w %s repozytorium" + +#: rhodecode/controllers/feed.py:53 +#, python-format +msgid "%s %s feed" +msgstr "%s %s zasilać" + +#: rhodecode/controllers/feed.py:86 +#: rhodecode/templates/changeset/changeset.html:126 +#: rhodecode/templates/changeset/changeset.html:138 +#: rhodecode/templates/compare/compare_diff.html:62 +#: rhodecode/templates/compare/compare_diff.html:73 +#: rhodecode/templates/pullrequests/pullrequest_show.html:94 +#: rhodecode/templates/pullrequests/pullrequest_show.html:153 +msgid "Changeset was too big and was cut off..." +msgstr "Lista zmian była zbyt duża i została ucięta..." + +#: rhodecode/controllers/feed.py:92 +msgid "commited on" +msgstr "komunikaty w" + +#: rhodecode/controllers/files.py:86 +msgid "click here to add new file" +msgstr "Kliknij tutaj, by dodać nowy plik" + +#: rhodecode/controllers/files.py:87 +#, python-format +msgid "There are no files yet %s" +msgstr "Brak plików %s" + +#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325 +#, python-format +msgid "This repository is has been locked by %s on %s" +msgstr "Repozytorium zostało zablokowane przez %s na %s" + +#: rhodecode/controllers/files.py:292 +#, python-format +msgid "Edited %s via RhodeCode" +msgstr "Edytowanie %s w RhodeCode" + +#: rhodecode/controllers/files.py:297 +msgid "No changes" +msgstr "Bez zmian" + +#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372 +#, python-format +msgid "Successfully committed to %s" +msgstr "Committ wykonany do %s" + +#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378 +msgid "Error occurred during commit" +msgstr "Wystąpił błąd w trakcie zatwierdzania" + +#: rhodecode/controllers/files.py:344 +#, python-format +msgid "Added %s via RhodeCode" +msgstr "Dodano %s poprzez RhodeCode" + +#: rhodecode/controllers/files.py:358 +msgid "No content" +msgstr "Brak treści" + +#: rhodecode/controllers/files.py:362 +msgid "No filename" +msgstr "Brak nazwy pliku" + +#: rhodecode/controllers/files.py:404 +msgid "downloads disabled" +msgstr "Pobieranie wyłączone" + +#: rhodecode/controllers/files.py:415 +#, python-format +msgid "Unknown revision %s" +msgstr "Nieznana wersja %s" + +#: rhodecode/controllers/files.py:417 +msgid "Empty repository" +msgstr "Puste repozytorium" + +#: rhodecode/controllers/files.py:419 +msgid "Unknown archive type" +msgstr "Nieznany typ archiwum" + +#: rhodecode/controllers/files.py:564 +#: rhodecode/templates/changeset/changeset_range.html:13 +#: rhodecode/templates/changeset/changeset_range.html:31 +msgid "Changesets" +msgstr "Różnice" + +#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:76 +#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550 +msgid "Branches" +msgstr "Gałęzie" + +#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:80 +#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561 +msgid "Tags" +msgstr "Etykiety" + +#: rhodecode/controllers/forks.py:74 rhodecode/controllers/admin/repos.py:92 +#, python-format +msgid "" +"%s repository is not mapped to db perhaps it was created or renamed from " +"the filesystem please run the application again in order to rescan " +"repositories" +msgstr "" +"%s repozytorium nie jest mapowane do db może zostało utworzone lub " +"zmienione z systemie plików proszę uruchomić aplikację ponownie, aby " +"ponownie przeskanować repozytoria" + +#: rhodecode/controllers/forks.py:134 rhodecode/controllers/settings.py:73 +#, python-format +msgid "" +"%s repository is not mapped to db perhaps it was created or renamed from " +"the file system please run the application again in order to rescan " +"repositories" +msgstr "" +"%s repozytorium nie jest mapowane do db może zostało utworzone lub " +"zmienione z systemu plików proszę uruchomić aplikację ponownie, aby " +"ponownie przeskanować repozytoria" + +#: rhodecode/controllers/forks.py:168 +#, python-format +msgid "forked %s repository as %s" +msgstr "gałęzi %s w repozytorium %s" + +#: rhodecode/controllers/forks.py:182 +#, python-format +msgid "An error occurred during repository forking %s" +msgstr "Wystąpił błąd podczas rozgałęzienia %s repozytorium" + +#: rhodecode/controllers/journal.py:206 rhodecode/controllers/journal.py:243 +msgid "public journal" +msgstr "Dziennik publiczny" + +#: rhodecode/controllers/journal.py:210 rhodecode/controllers/journal.py:247 +#: rhodecode/templates/base/base.html:232 +msgid "journal" +msgstr "dziennik" + +#: rhodecode/controllers/login.py:143 +msgid "You have successfully registered into rhodecode" +msgstr "Udało Ci się zarejestrować na stronie" + +#: rhodecode/controllers/login.py:164 +msgid "Your password reset link was sent" +msgstr "Twój link zresetowania hasła został wysłany" + +#: rhodecode/controllers/login.py:184 +msgid "" +"Your password reset was successful, new password has been sent to your " +"email" +msgstr "Twoje hasło zostało zresetowane, nowe hasło zostanie wysłane na e-mail" + +#: rhodecode/controllers/pullrequests.py:78 rhodecode/model/scm.py:556 +msgid "Bookmarks" +msgstr "Zakładki" + +#: rhodecode/controllers/pullrequests.py:186 +msgid "Pull request requires a title with min. 3 chars" +msgstr "Wniosek połączenia gałęzi wymaga tytułu z min. 3 znakami" + +#: rhodecode/controllers/pullrequests.py:188 +msgid "error during creation of pull request" +msgstr "błąd podczas tworzenia prośby o łączenie gałęzi" + +#: rhodecode/controllers/pullrequests.py:220 +msgid "Successfully opened new pull request" +msgstr "Prośba o wykonanie połączenia gałęzi została wykonana prawidłowo" + +#: rhodecode/controllers/pullrequests.py:223 +msgid "Error occurred during sending pull request" +msgstr "Wystąpił błąd podczas prośby o połączenie gałęzi" + +#: rhodecode/controllers/pullrequests.py:256 +msgid "Successfully deleted pull request" +msgstr "Prośba o skasowanie połączenia gałęzi została wykonana prawidłowo" + +#: rhodecode/controllers/search.py:134 +msgid "Invalid search query. Try quoting it." +msgstr "Nieprawidłowe zapytania. Spróbuj zacytować go." + +#: rhodecode/controllers/search.py:139 +msgid "There is no index to search in. Please run whoosh indexer" +msgstr "Nie ma szukanego indeksu. Proszę uruchomić indeksowanie whoosh" + +#: rhodecode/controllers/search.py:143 +msgid "An error occurred during this search operation" +msgstr "Wystąpił błąd podczas wyszukiwania tej operacji" + +#: rhodecode/controllers/settings.py:108 +#: rhodecode/controllers/admin/repos.py:268 +#, python-format +msgid "Repository %s updated successfully" +msgstr "Repozytorium %s zostało pomyślnie zaktualizowane" + +#: rhodecode/controllers/settings.py:126 +#: rhodecode/controllers/admin/repos.py:286 +#, python-format +msgid "error occurred during update of repository %s" +msgstr "wystąpił błąd podczas aktualizacji repozytorium %s" + +#: rhodecode/controllers/settings.py:144 +#: rhodecode/controllers/admin/repos.py:304 +#, python-format +msgid "" +"%s repository is not mapped to db perhaps it was moved or renamed from " +"the filesystem please run the application again in order to rescan " +"repositories" +msgstr "" +"%s repozytorium nie jest mapowane do db może zostało przeniesione lub " +"zmienione w systemie plików proszę uruchomić aplikację ponownie, aby " +"ponownie przeskanować repozytoria" + +#: rhodecode/controllers/settings.py:156 +#: rhodecode/controllers/admin/repos.py:316 +#, python-format +msgid "deleted repository %s" +msgstr "usunięte repozytorium %s" + +#: rhodecode/controllers/settings.py:160 +#: rhodecode/controllers/admin/repos.py:326 +#: rhodecode/controllers/admin/repos.py:332 +#, python-format +msgid "An error occurred during deletion of %s" +msgstr "Wystąpił błąd podczas usuwania %s" + +#: rhodecode/controllers/settings.py:179 +msgid "unlocked" +msgstr "Odblokowany" + +#: rhodecode/controllers/settings.py:182 +msgid "locked" +msgstr "zablokowany" + +#: rhodecode/controllers/settings.py:184 +#, python-format +msgid "Repository has been %s" +msgstr "Repozytoriów jest %s" + +#: rhodecode/controllers/settings.py:188 +#: rhodecode/controllers/admin/repos.py:424 +msgid "An error occurred during unlocking" +msgstr "Wystąpił błąd podczas odblokowywania" + +#: rhodecode/controllers/summary.py:140 +msgid "No data loaded yet" +msgstr "Żadne dane nie zostały załadowane" + +#: rhodecode/controllers/summary.py:144 +#: rhodecode/templates/summary/summary.html:157 +msgid "Statistics are disabled for this repository" +msgstr "Statystyki są wyłączone dla tego repozytorium" + +#: rhodecode/controllers/admin/defaults.py:96 +#, fuzzy +msgid "Default settings updated successfully" +msgstr "Ustawienia LDAP zostały zaktualizowane" + +#: rhodecode/controllers/admin/defaults.py:110 +#, fuzzy +msgid "error occurred during update of defaults" +msgstr "wystąpił błąd podczas aktualizacji użytkownika %s" + +#: rhodecode/controllers/admin/ldap_settings.py:50 +msgid "BASE" +msgstr "PODSTAWA" + +#: rhodecode/controllers/admin/ldap_settings.py:51 +msgid "ONELEVEL" +msgstr "JEDEN POZIOM" + +#: rhodecode/controllers/admin/ldap_settings.py:52 +msgid "SUBTREE" +msgstr "DRZEWO PODRZĘDNE" + +#: rhodecode/controllers/admin/ldap_settings.py:56 +msgid "NEVER" +msgstr "NIGDY" + +#: rhodecode/controllers/admin/ldap_settings.py:57 +msgid "ALLOW" +msgstr "POZWÓL" + +#: rhodecode/controllers/admin/ldap_settings.py:58 +msgid "TRY" +msgstr "WYPRÓBUJ" + +#: rhodecode/controllers/admin/ldap_settings.py:59 +msgid "DEMAND" +msgstr "ZAPYTANIE" + +#: rhodecode/controllers/admin/ldap_settings.py:60 +msgid "HARD" +msgstr "TWARDY" + +#: rhodecode/controllers/admin/ldap_settings.py:64 +msgid "No encryption" +msgstr "Bez szyfrowania" + +#: rhodecode/controllers/admin/ldap_settings.py:65 +msgid "LDAPS connection" +msgstr "Połączenie LDAP" + +#: rhodecode/controllers/admin/ldap_settings.py:66 +msgid "START_TLS on LDAP connection" +msgstr "START_TLS dla połączenia LDAP" + +#: rhodecode/controllers/admin/ldap_settings.py:126 +msgid "Ldap settings updated successfully" +msgstr "Ustawienia LDAP zostały zaktualizowane" + +#: rhodecode/controllers/admin/ldap_settings.py:130 +msgid "Unable to activate ldap. The \"python-ldap\" library is missing." +msgstr "Nie można uaktywnić ldap.\"Python-ldap\" brakuje library." + +#: rhodecode/controllers/admin/ldap_settings.py:147 +msgid "error occurred during update of ldap settings" +msgstr "Wystąpił błąd podczas aktualizacji ustawień ldap" + +#: rhodecode/controllers/admin/permissions.py:59 +#: rhodecode/controllers/admin/permissions.py:63 +msgid "None" +msgstr "Brak" + +#: rhodecode/controllers/admin/permissions.py:60 +#: rhodecode/controllers/admin/permissions.py:64 +msgid "Read" +msgstr "Odczyt" + +#: rhodecode/controllers/admin/permissions.py:61 +#: rhodecode/controllers/admin/permissions.py:65 +msgid "Write" +msgstr "Zapis" + +#: rhodecode/controllers/admin/permissions.py:62 +#: rhodecode/controllers/admin/permissions.py:66 +#: rhodecode/templates/admin/defaults/defaults.html:9 +#: 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:9 +#: 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:126 +#: rhodecode/templates/admin/users/users.html:9 +#: rhodecode/templates/admin/users_groups/users_group_add.html:8 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:9 +#: rhodecode/templates/admin/users_groups/users_groups.html:9 +#: rhodecode/templates/base/base.html:197 +#: rhodecode/templates/base/base.html:350 +#: rhodecode/templates/base/base.html:352 +#: rhodecode/templates/base/base.html:354 +msgid "Admin" +msgstr "Administracja" + +#: rhodecode/controllers/admin/permissions.py:69 +msgid "disabled" +msgstr "wyłączona" + +#: rhodecode/controllers/admin/permissions.py:71 +msgid "allowed with manual account activation" +msgstr "dozwolona z ręczną aktywacją konta" + +#: rhodecode/controllers/admin/permissions.py:73 +msgid "allowed with automatic account activation" +msgstr "dozwolona z automatyczną aktywacją konta" + +#: rhodecode/controllers/admin/permissions.py:75 +#: rhodecode/controllers/admin/permissions.py:78 +msgid "Disabled" +msgstr "Wyłączone" + +#: rhodecode/controllers/admin/permissions.py:76 +#: rhodecode/controllers/admin/permissions.py:79 +msgid "Enabled" +msgstr "Włączone" + +#: rhodecode/controllers/admin/permissions.py:122 +msgid "Default permissions updated successfully" +msgstr "Domyślne uprawnienia zaktualizowane pomyślnie" + +#: rhodecode/controllers/admin/permissions.py:136 +msgid "error occurred during update of permissions" +msgstr "wystąpił błąd podczas aktualizacji uprawnień" + +#: rhodecode/controllers/admin/repos.py:125 +msgid "--REMOVE FORK--" +msgstr "--USUŃ ROZGAŁĘZIENIE--" + +#: rhodecode/controllers/admin/repos.py:194 +#, python-format +msgid "created repository %s from %s" +msgstr "utworzone repozytorium %s z %s" + +#: rhodecode/controllers/admin/repos.py:198 +#, python-format +msgid "created repository %s" +msgstr "utworzone repozytorium %s" + +#: rhodecode/controllers/admin/repos.py:229 +#, python-format +msgid "error occurred during creation of repository %s" +msgstr "wystąpił błąd podczas tworzenia repozytorium %s" + +#: rhodecode/controllers/admin/repos.py:321 +#, python-format +msgid "Cannot delete %s it still contains attached forks" +msgstr "Nie można usunąć %s nadal zawiera załączniki rozgałęzienia" + +#: rhodecode/controllers/admin/repos.py:350 +msgid "An error occurred during deletion of repository user" +msgstr "Wystąpił błąd podczas usunięcia użytkownika z repozytorium" + +#: rhodecode/controllers/admin/repos.py:369 +msgid "An error occurred during deletion of repository users groups" +msgstr "Wystąpił błąd podczas usunięcia grupy użytkowników z repozytorium" + +#: rhodecode/controllers/admin/repos.py:387 +msgid "An error occurred during deletion of repository stats" +msgstr "Wystąpił błąd podczas usuwania z repozytorium statystyk" + +#: rhodecode/controllers/admin/repos.py:404 +msgid "An error occurred during cache invalidation" +msgstr "Wystąpił błąd podczas unieważniania cache" + +#: rhodecode/controllers/admin/repos.py:444 +msgid "Updated repository visibility in public journal" +msgstr "Zaktualizowano widoczność stron w publicznym dzienniku" + +#: rhodecode/controllers/admin/repos.py:448 +msgid "An error occurred during setting this repository in public journal" +msgstr "Wystąpił błąd podczas ustawiania tego repozytorium w dzienniku publicznym" + +#: rhodecode/controllers/admin/repos.py:453 rhodecode/model/validators.py:300 +msgid "Token mismatch" +msgstr "Niezgodność tokenu" + +#: rhodecode/controllers/admin/repos.py:466 +msgid "Pulled from remote location" +msgstr "Pobieranie z lokalizacji zdalnej" + +#: rhodecode/controllers/admin/repos.py:468 +msgid "An error occurred during pull from remote location" +msgstr "Wystąpił błąd podczas pobierania z lokalizacji zdalnej" + +#: rhodecode/controllers/admin/repos.py:484 +msgid "Nothing" +msgstr "Brak" + +#: rhodecode/controllers/admin/repos.py:486 +#, python-format +msgid "Marked repo %s as fork of %s" +msgstr "Oznaczono %s repo jako rozwidlenie %s" + +#: rhodecode/controllers/admin/repos.py:490 +msgid "An error occurred during this operation" +msgstr "Wystąpił błąd podczas tej operacji" + +#: rhodecode/controllers/admin/repos_groups.py:120 +#, python-format +msgid "created repos group %s" +msgstr "utworzono grupę repo %s" + +#: rhodecode/controllers/admin/repos_groups.py:133 +#, python-format +msgid "error occurred during creation of repos group %s" +msgstr "Wystąpił błąd podczas tworzenia grupy repo %s" + +#: rhodecode/controllers/admin/repos_groups.py:167 +#, python-format +msgid "updated repos group %s" +msgstr "zaktualizowano grupę repo %s" + +#: rhodecode/controllers/admin/repos_groups.py:180 +#, python-format +msgid "error occurred during update of repos group %s" +msgstr "wystąpił błąd podczas aktualizacji grupy repo %s" + +#: rhodecode/controllers/admin/repos_groups.py:198 +#, python-format +msgid "This group contains %s repositores and cannot be deleted" +msgstr "Ta grupa zawiera %s repozytorium i nie może być usunięta" + +#: rhodecode/controllers/admin/repos_groups.py:206 +#, python-format +msgid "removed repos group %s" +msgstr "usunięto grupę repo %s" + +#: rhodecode/controllers/admin/repos_groups.py:212 +msgid "Cannot delete this group it still contains subgroups" +msgstr "Nie można usunąć tej grupy ponieważ nadal zawiera podgrupy" + +#: rhodecode/controllers/admin/repos_groups.py:217 +#: rhodecode/controllers/admin/repos_groups.py:222 +#, python-format +msgid "error occurred during deletion of repos group %s" +msgstr "wystąpił błąd podczas kasowania grupy repo %s" + +#: rhodecode/controllers/admin/repos_groups.py:243 +msgid "An error occurred during deletion of group user" +msgstr "Wystąpił błąd podczas usunięcia grupy użytkowników" + +#: rhodecode/controllers/admin/repos_groups.py:264 +msgid "An error occurred during deletion of group users groups" +msgstr "Wystąpił błąd podczas usuwania grup i grup użytkowników" + +#: rhodecode/controllers/admin/settings.py:123 +#, python-format +msgid "Repositories successfully rescanned added: %s,removed: %s" +msgstr "" +"Repozytoria z powodzeniem zostały ponownie zeskanowane dodano: %s, " +"usunięto: %s" + +#: rhodecode/controllers/admin/settings.py:131 +msgid "Whoosh reindex task scheduled" +msgstr "Zadanie ponownej indeksacji whoosh zostało zaplanowane" + +#: rhodecode/controllers/admin/settings.py:162 +msgid "Updated application settings" +msgstr "Aktualizacja ustawień aplikacji" + +#: rhodecode/controllers/admin/settings.py:166 +#: rhodecode/controllers/admin/settings.py:299 +msgid "error occurred during updating application settings" +msgstr "wystąpił błąd podczas aktualizacji ustawień aplikacji" + +#: rhodecode/controllers/admin/settings.py:207 +msgid "Updated visualisation settings" +msgstr "Aktualizacja ustawień wizualizacji" + +#: rhodecode/controllers/admin/settings.py:212 +msgid "error occurred during updating visualisation settings" +msgstr "Wystąpił błąd podczas aktualizacji ustawień wizualizacji" + +#: rhodecode/controllers/admin/settings.py:295 +msgid "Updated VCS settings" +msgstr "Aktualizacja ustawień VCS" + +#: rhodecode/controllers/admin/settings.py:309 +msgid "Added new hook" +msgstr "Dodano nowy hook" + +#: rhodecode/controllers/admin/settings.py:321 +msgid "Updated hooks" +msgstr "Aktualizacja hooku" + +#: rhodecode/controllers/admin/settings.py:325 +msgid "error occurred during hook creation" +msgstr "Wystąpił błąd podczas tworzenia hooku" + +#: rhodecode/controllers/admin/settings.py:344 +msgid "Email task created" +msgstr "E-mail został wysłany" + +#: rhodecode/controllers/admin/settings.py:399 +msgid "You can't edit this user since it's crucial for entire application" +msgstr "" +"Nie możesz edytować tego użytkownika ponieważ jest kluczowy dla całej " +"aplikacji" + +#: rhodecode/controllers/admin/settings.py:430 +msgid "Your account was updated successfully" +msgstr "Twoje konto zostało pomyślnie zaktualizowane" + +#: rhodecode/controllers/admin/settings.py:445 +#: rhodecode/controllers/admin/users.py:196 +#, python-format +msgid "error occurred during update of user %s" +msgstr "wystąpił błąd podczas aktualizacji użytkownika %s" + +#: rhodecode/controllers/admin/users.py:130 +#, python-format +msgid "created user %s" +msgstr "utworzono użytkownika %s" + +#: rhodecode/controllers/admin/users.py:142 +#, python-format +msgid "error occurred during creation of user %s" +msgstr "wystąpił błąd podczas tworzenia użytkownika %s" + +#: rhodecode/controllers/admin/users.py:176 +msgid "User updated successfully" +msgstr "Użytkownik został zaktualizowany" + +#: rhodecode/controllers/admin/users.py:212 +msgid "successfully deleted user" +msgstr "użytkownik został usunięty" + +#: rhodecode/controllers/admin/users.py:217 +msgid "An error occurred during deletion of user" +msgstr "Wystąpił błąd podczas usuwania użytkownika" + +#: rhodecode/controllers/admin/users.py:231 +msgid "You can't edit this user" +msgstr "Nie możesz edytować tego użytkownika" + +#: rhodecode/controllers/admin/users.py:272 +msgid "Granted 'repository create' permission to user" +msgstr "Przyznano użytkownikowi uprawnienie do 'tworzenia repozytorium'" + +#: rhodecode/controllers/admin/users.py:277 +msgid "Revoked 'repository create' permission to user" +msgstr "Cofnięto użytkownikowi uprawnienie do 'tworzenia repozytorium'" + +#: rhodecode/controllers/admin/users.py:283 +msgid "Granted 'repository fork' permission to user" +msgstr "Przyznano użytkownikowi uprawnienie do 'tworzenia rozgałęzień'" + +#: rhodecode/controllers/admin/users.py:288 +msgid "Revoked 'repository fork' permission to user" +msgstr "Cofnięto użytkownikowi uprawnienie do 'tworzenia rozgałęzień'" + +#: rhodecode/controllers/admin/users.py:294 +#: rhodecode/controllers/admin/users_groups.py:279 +msgid "An error occurred during permissions saving" +msgstr "Wystąpił błąd podczas zapisywania uprawnień" + +#: rhodecode/controllers/admin/users.py:309 +#, python-format +msgid "Added email %s to user" +msgstr "Dodano e-mail %s do użytkownika" + +#: rhodecode/controllers/admin/users.py:315 +msgid "An error occurred during email saving" +msgstr "Wystąpił błąd podczas zapisywania e-maila" + +#: rhodecode/controllers/admin/users.py:325 +msgid "Removed email from user" +msgstr "Usunięto e-mail użytkownikowi" + +#: rhodecode/controllers/admin/users_groups.py:86 +#, python-format +msgid "created users group %s" +msgstr "utworzono grupę użytkowników %s" + +#: rhodecode/controllers/admin/users_groups.py:97 +#, python-format +msgid "error occurred during creation of users group %s" +msgstr "wystąpił błąd podczas tworzenia grupy użytkowników %s" + +#: rhodecode/controllers/admin/users_groups.py:164 +#, python-format +msgid "updated users group %s" +msgstr "zaktualizowano grupę użytkowników %s" + +#: rhodecode/controllers/admin/users_groups.py:186 +#, python-format +msgid "error occurred during update of users group %s" +msgstr "wystąpił błąd podczas aktualizacji grupy użytkowników %s" + +#: rhodecode/controllers/admin/users_groups.py:203 +msgid "successfully deleted users group" +msgstr "grupa użytkowników została usunięta z powodzeniem" + +#: rhodecode/controllers/admin/users_groups.py:208 +msgid "An error occurred during deletion of users group" +msgstr "Wystąpił błąd podczas usuwania grupy użytkowników" + +#: rhodecode/controllers/admin/users_groups.py:257 +msgid "Granted 'repository create' permission to users group" +msgstr "Przyznano grupie użytkowników uprawnienia do 'tworzenia repozytorium'" + +#: rhodecode/controllers/admin/users_groups.py:262 +msgid "Revoked 'repository create' permission to users group" +msgstr "Cofnięto grupie użytkowników uprawnienia do 'tworzenia repozytorium'" + +#: rhodecode/controllers/admin/users_groups.py:268 +msgid "Granted 'repository fork' permission to users group" +msgstr "Przyznano grupie użytkowników uprawnienia do 'tworzenia rozgałęzień'" + +#: rhodecode/controllers/admin/users_groups.py:273 +msgid "Revoked 'repository fork' permission to users group" +msgstr "Cofnięto grupie użytkowników uprawnienia do 'tworzenia rozgałęzień'" + +#: rhodecode/lib/auth.py:499 +msgid "You need to be a registered user to perform this action" +msgstr "Musisz być zarejestrowanym użytkownikiem, żeby wykonać to działanie" + +#: rhodecode/lib/auth.py:540 +msgid "You need to be a signed in to view this page" +msgstr "Musisz być zalogowany, żeby oglądać stronę" + +#: rhodecode/lib/diffs.py:74 +msgid "binary file" +msgstr "plik binarny" + +#: rhodecode/lib/diffs.py:90 +msgid "Changeset was too big and was cut off, use diff menu to display this diff" +msgstr "" +"Lista zmian była zbyt duża i została obcięta, użyj menu porównań żeby " +"wyświetlić różnice" + +#: rhodecode/lib/diffs.py:100 +msgid "No changes detected" +msgstr "Nie wykryto zmian" + +#: rhodecode/lib/helpers.py:373 +#, python-format +msgid "%a, %d %b %Y %H:%M:%S" +msgstr "%d.%m.%Y, %H:%M:%S" + +#: rhodecode/lib/helpers.py:485 +msgid "True" +msgstr "Prawda" + +#: rhodecode/lib/helpers.py:489 +msgid "False" +msgstr "Fałsz" + +#: rhodecode/lib/helpers.py:529 +#, python-format +msgid "Deleted branch: %s" +msgstr "Usunięta gałąź: %s" + +#: rhodecode/lib/helpers.py:532 +#, python-format +msgid "Created tag: %s" +msgstr "Utworzony tag: %s" + +#: rhodecode/lib/helpers.py:545 +msgid "Changeset not found" +msgstr "Nie znaleziono changeset" + +#: rhodecode/lib/helpers.py:588 +#, python-format +msgid "Show all combined changesets %s->%s" +msgstr "Pokaż wszystkie zestawienia zmian changesets %s->%s" + +#: rhodecode/lib/helpers.py:594 +msgid "compare view" +msgstr "Wyświetl porównanie" + +#: rhodecode/lib/helpers.py:614 +msgid "and" +msgstr "i" + +#: rhodecode/lib/helpers.py:615 +#, python-format +msgid "%s more" +msgstr "%s więcej" + +#: rhodecode/lib/helpers.py:616 rhodecode/templates/changelog/changelog.html:51 +msgid "revisions" +msgstr "rewizja" + +#: rhodecode/lib/helpers.py:640 +#, python-format +msgid "fork name %s" +msgstr "nazwa rozgałęzienia %s" + +#: rhodecode/lib/helpers.py:653 +#: rhodecode/templates/pullrequests/pullrequest_show.html:4 +#: rhodecode/templates/pullrequests/pullrequest_show.html:12 +#, python-format +msgid "Pull request #%s" +msgstr "Połączonych gałęzi #%s" + +#: rhodecode/lib/helpers.py:659 +msgid "[deleted] repository" +msgstr "[usunięte] repozytorium" + +#: rhodecode/lib/helpers.py:661 rhodecode/lib/helpers.py:671 +msgid "[created] repository" +msgstr "[utworzone] repozytorium" + +#: rhodecode/lib/helpers.py:663 +msgid "[created] repository as fork" +msgstr "[utworzone] repozytorium jako rozgałęzienie" + +#: rhodecode/lib/helpers.py:665 rhodecode/lib/helpers.py:673 +msgid "[forked] repository" +msgstr "[rozgałęzione] repozytorium" + +#: rhodecode/lib/helpers.py:667 rhodecode/lib/helpers.py:675 +msgid "[updated] repository" +msgstr "[zaktualizowane] repozytorium" + +#: rhodecode/lib/helpers.py:669 +msgid "[delete] repository" +msgstr "[skasowane] repozytorium" + +#: rhodecode/lib/helpers.py:677 +msgid "[created] user" +msgstr "[utworzony] użytkownik" + +#: rhodecode/lib/helpers.py:679 +msgid "[updated] user" +msgstr "[zaktualizowany] użytkownik" + +#: rhodecode/lib/helpers.py:681 +msgid "[created] users group" +msgstr "[utworzona] grupa użytkowników" + +#: rhodecode/lib/helpers.py:683 +msgid "[updated] users group" +msgstr "[zaktualizowana] grupa użytkowników" + +#: rhodecode/lib/helpers.py:685 +msgid "[commented] on revision in repository" +msgstr "[komentarz] do zmiany w repozytorium" + +#: rhodecode/lib/helpers.py:687 +msgid "[commented] on pull request for" +msgstr "[komentarz] wniosek o połączenie gałęzi" + +#: rhodecode/lib/helpers.py:689 +msgid "[closed] pull request for" +msgstr "[zamknięty] wniosek o połączenie gałęzi" + +#: rhodecode/lib/helpers.py:691 +msgid "[pushed] into" +msgstr "[wysłane zmiany] w" + +#: rhodecode/lib/helpers.py:693 +msgid "[committed via RhodeCode] into repository" +msgstr "[committed przez RhodeCode] do repozytorium" + +#: rhodecode/lib/helpers.py:695 +msgid "[pulled from remote] into repository" +msgstr "[pobieranie z zdalnego] do repozytorium" + +#: rhodecode/lib/helpers.py:697 +msgid "[pulled] from" +msgstr "[pobrano] z" + +#: rhodecode/lib/helpers.py:699 +msgid "[started following] repository" +msgstr "[start następnego] repozytorium" + +#: rhodecode/lib/helpers.py:701 +msgid "[stopped following] repository" +msgstr "[zatrzymany po] repozytorium" + +#: rhodecode/lib/helpers.py:877 +#, python-format +msgid " and %s more" +msgstr "i %s więcej" + +#: rhodecode/lib/helpers.py:881 +msgid "No Files" +msgstr "Brak Plików" + +#: rhodecode/lib/utils2.py:403 +#, python-format +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d rok" +msgstr[1] "%d lata" +msgstr[2] "%d lat" + +#: rhodecode/lib/utils2.py:404 +#, python-format +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d miesiąc" +msgstr[1] "%d miesięcy" +msgstr[2] "%d miesięcy" + +#: rhodecode/lib/utils2.py:405 +#, python-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dzień" +msgstr[1] "%d dni" +msgstr[2] "%d dni" + +#: rhodecode/lib/utils2.py:406 +#, python-format +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d godzina" +msgstr[1] "%d godziny" +msgstr[2] "%d godzin" + +#: rhodecode/lib/utils2.py:407 +#, python-format +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuta" +msgstr[1] "%d minuty" +msgstr[2] "%d minut" + +#: rhodecode/lib/utils2.py:408 +#, python-format +msgid "%d second" +msgid_plural "%d seconds" +msgstr[0] "%d sekunda" +msgstr[1] "%d sekund" +msgstr[2] "%d sekund" + +#: rhodecode/lib/utils2.py:424 +#, python-format +msgid "in %s" +msgstr "w %s" + +#: rhodecode/lib/utils2.py:426 +#, python-format +msgid "%s ago" +msgstr "%s temu" + +#: rhodecode/lib/utils2.py:428 +#, python-format +msgid "in %s and %s" +msgstr "w %s i %s" + +#: rhodecode/lib/utils2.py:431 +#, python-format +msgid "%s and %s ago" +msgstr "%s i %s temu" + +#: rhodecode/lib/utils2.py:434 +msgid "just now" +msgstr "przed chwilą" + +#: rhodecode/lib/celerylib/tasks.py:270 +msgid "password reset link" +msgstr "łącze resetowania hasła" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 rhodecode/model/db.py:1180 +msgid "Repository no access" +msgstr "Brak dostępu do repozytorium" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1181 +msgid "Repository read access" +msgstr "Repozytorium do odczytu" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1182 +msgid "Repository write access" +msgstr "Repozytorium do zapisu" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1183 +msgid "Repository admin access" +msgstr "Administracja dostępu do repozytorium" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1185 +msgid "Repositories Group no access" +msgstr "Grupy repozytoriów brak dostępu" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1186 +msgid "Repositories Group read access" +msgstr "Grupy repozytoriów dostęp do odczytu" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1187 +msgid "Repositories Group write access" +msgstr "Grupy repozytoriów dostęp do zapisu" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1188 +msgid "Repositories Group admin access" +msgstr "Repozytoria Grupy dostęp administratora" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1190 +msgid "RhodeCode Administrator" +msgstr "Administrator Repo" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1191 +msgid "Repository creation disabled" +msgstr "Repozytorium wyłączone" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1192 +msgid "Repository creation enabled" +msgstr "Repozytorium włączone" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1193 +msgid "Repository forking disabled" +msgstr "Rozwidlenie repozytorium wyłączone" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1194 +msgid "Repository forking enabled" +msgstr "Rozwidlenie repozytorium włączone" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1195 +msgid "Register disabled" +msgstr "Rejestracja wyłączona" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1196 +msgid "Register new user with RhodeCode with manual activation" +msgstr "Rejestracja nowego użytkownika na stronie z ręczną aktywacją" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1199 +msgid "Register new user with RhodeCode with auto activation" +msgstr "Rejestracja nowego użytkownika na stronie z automatyczną aktywacją" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1640 +msgid "Not Reviewed" +msgstr "Brak Korekty" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1641 +msgid "Approved" +msgstr "Zaakceptowano" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1642 +msgid "Rejected" +msgstr "Odrzucono" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1643 +msgid "Under Review" +msgstr "Objęty Przeglądem" + +#: rhodecode/model/comment.py:110 +#, python-format +msgid "on line %s" +msgstr "widziany %s" + +#: rhodecode/model/comment.py:173 +msgid "[Mention]" +msgstr "[Wymieniony]" + +#: rhodecode/model/forms.py:43 +msgid "Please enter a login" +msgstr "Wpisz login" + +#: rhodecode/model/forms.py:44 +#, python-format +msgid "Enter a value %(min)i characters long or more" +msgstr "Wprowadź wartość %(min)i znaków lub więcej" + +#: rhodecode/model/forms.py:52 +msgid "Please enter a password" +msgstr "Wpisz hasło" + +#: rhodecode/model/forms.py:53 +#, python-format +msgid "Enter %(min)i characters or more" +msgstr "Wpisz %(min)i lub więcej znaków" + +#: rhodecode/model/notification.py:220 +#, python-format +msgid "commented on commit at %(when)s" +msgstr "skomentował zatwierdzenie %(when)s" + +#: rhodecode/model/notification.py:221 +#, python-format +msgid "sent message at %(when)s" +msgstr "wysłano wiadomość do %(when)s" + +#: rhodecode/model/notification.py:222 +#, python-format +msgid "mentioned you at %(when)s" +msgstr "wspomniał o Tobie w %(when)s" + +#: rhodecode/model/notification.py:223 +#, python-format +msgid "registered in RhodeCode at %(when)s" +msgstr "zarejestrowany na stronie w %(when)s" + +#: rhodecode/model/notification.py:224 +#, python-format +msgid "opened new pull request at %(when)s" +msgstr "otworzył nowe połączenie gałęzi w %(when)s" + +#: rhodecode/model/notification.py:225 +#, python-format +msgid "commented on pull request at %(when)s" +msgstr "skomentował nowe połączenie gałęzi w %(when)s" + +#: rhodecode/model/pull_request.py:90 +#, python-format +msgid "%(user)s wants you to review pull request #%(pr_id)s" +msgstr "%(user)s chce żeby przejrzeć nowe gałęzie #%(pr_id)s" + +#: rhodecode/model/scm.py:542 +msgid "latest tip" +msgstr "ostatni tip" + +#: rhodecode/model/user.py:230 +msgid "new user registration" +msgstr "nowy użytkownik się zarejestrował" + +#: rhodecode/model/user.py:255 rhodecode/model/user.py:279 +#: rhodecode/model/user.py:301 +msgid "You can't Edit this user since it's crucial for entire application" +msgstr "" +"Nie możesz edytować tego użytkownika ponieważ jest kluczowy dla całej " +"aplikacji" + +#: rhodecode/model/user.py:325 +msgid "You can't remove this user since it's crucial for entire application" +msgstr "" +"Nie możesz usunąć tego użytkownika ponieważ jest kluczowy dla całej " +"aplikacji" + +#: rhodecode/model/user.py:331 +#, python-format +msgid "" +"user \"%s\" still owns %s repositories and cannot be removed. Switch " +"owners or remove those repositories. %s" +msgstr "" +"użytkownik \"%s\" wciąż posiada repozytoria następujące %s i nie może " +"zostać usunięty. Zmień właściciela lub usuń te repozytoria. %s" + +#: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37 +msgid "Value cannot be an empty list" +msgstr "Wartość listy nie może być pusta" + +#: rhodecode/model/validators.py:83 +#, python-format +msgid "Username \"%(username)s\" already exists" +msgstr "Użytkownik \"%(username)s\" już istnieje" + +#: rhodecode/model/validators.py:85 +#, python-format +msgid "Username \"%(username)s\" is forbidden" +msgstr "Nazwa użytkownika \"%(username)s\" jest zabroniona" + +#: rhodecode/model/validators.py:87 +msgid "" +"Username may only contain alphanumeric characters underscores, periods or" +" dashes and must begin with alphanumeric character" +msgstr "" +"Nazwa użytkownika może zawierać tylko znaki alfanumeryczne, podkreślenia," +" kropki lub myślniki i musi zaczynać się znakiem alfanumerycznym" + +#: rhodecode/model/validators.py:115 +#, python-format +msgid "Username %(username)s is not valid" +msgstr "Nazwa użytkownika %(username)s jest nieprawidłowa" + +#: rhodecode/model/validators.py:134 +msgid "Invalid users group name" +msgstr "Niewłaściwa nazwa grupy" + +#: rhodecode/model/validators.py:135 +#, python-format +msgid "Users group \"%(usersgroup)s\" already exists" +msgstr "Nazwa grupy \"%(usersgroup)s\" już istnieje" + +#: rhodecode/model/validators.py:137 +msgid "" +"users group name may only contain alphanumeric characters underscores, " +"periods or dashes and must begin with alphanumeric character" +msgstr "" +"Nazwa grupy może zawierać tylko znaki alfanumeryczne, podkreślenia, " +"kropki lub myślniki i musi zaczynać się znakiem alfanumerycznym" + +#: rhodecode/model/validators.py:175 +msgid "Cannot assign this group as parent" +msgstr "Nie można przypisać do tej grupy jako rodzic" + +#: rhodecode/model/validators.py:176 +#, python-format +msgid "Group \"%(group_name)s\" already exists" +msgstr "Nazwa grupy \"%(group_name)s\" już istnieje" + +#: rhodecode/model/validators.py:178 +#, python-format +msgid "Repository with name \"%(group_name)s\" already exists" +msgstr "Repozytorium o nazwie \"%(group_name)s\" już istnieje" + +#: rhodecode/model/validators.py:236 +msgid "Invalid characters (non-ascii) in password" +msgstr "Nieprawidłowe znaki (nie-ascii) w haśle" + +#: rhodecode/model/validators.py:251 +msgid "Passwords do not match" +msgstr "Hasła różnią się" + +#: rhodecode/model/validators.py:268 +msgid "invalid password" +msgstr "nieprawidłowe hasło" + +#: rhodecode/model/validators.py:269 +msgid "invalid user name" +msgstr "niepoprawna nazwa użytkownika" + +#: rhodecode/model/validators.py:270 +msgid "Your account is disabled" +msgstr "Twoje konto jest wyłączone" + +#: rhodecode/model/validators.py:314 +#, python-format +msgid "Repository name %(repo)s is disallowed" +msgstr "Nazwa repozytorium %(repo)s jest zabroniona" + +#: rhodecode/model/validators.py:316 +#, python-format +msgid "Repository named %(repo)s already exists" +msgstr "Repozytorium o nazwie %(repo)s już istnieje" + +#: rhodecode/model/validators.py:317 +#, python-format +msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" +msgstr "Repozytorium \"%(repo)s\" już istnieje w grupie \"%(group)s\"" + +#: rhodecode/model/validators.py:319 +#, python-format +msgid "Repositories group with name \"%(repo)s\" already exists" +msgstr "Grupa repozytoriów z nazwą \"%(repo)s\" już istnieje" + +#: rhodecode/model/validators.py:432 +msgid "invalid clone url" +msgstr "nieprawidłowe url klonowania" + +#: rhodecode/model/validators.py:433 +msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url" +msgstr "Nieprawidłowe url klonowania, wstaw prawidłowy url http(s)/svn+http(s)" + +#: rhodecode/model/validators.py:458 +msgid "Fork have to be the same type as parent" +msgstr "Fork musi być tego samego typu, jak rodzic" + +#: rhodecode/model/validators.py:473 +msgid "You don't have permissions to create repository in this group" +msgstr "Nie masz uprawnień do tworzenia repozytorium w tej grupie" + +#: rhodecode/model/validators.py:498 +msgid "This username or users group name is not valid" +msgstr "Ta nazwa użytkownika lub grupy użytkowników nie jest prawidłowa" + +#: rhodecode/model/validators.py:582 +msgid "This is not a valid path" +msgstr "To nie jest prawidłowa ścieżka" + +#: rhodecode/model/validators.py:597 +msgid "This e-mail address is already taken" +msgstr "Ten adres e-mail jest już zajęty" + +#: rhodecode/model/validators.py:617 +#, python-format +msgid "e-mail \"%(email)s\" does not exist." +msgstr "e-mail \"%(email)s\" nie istnieje." + +#: rhodecode/model/validators.py:654 +msgid "" +"The LDAP Login attribute of the CN must be specified - this is the name " +"of the attribute that is equivalent to \"username\"" +msgstr "" +"Atrybut logowania CN do LDAP należy określić, jest to nazwa atrybutu, " +"który jest odpowiednikiem \"username\"" + +#: rhodecode/model/validators.py:673 +#, python-format +msgid "Revisions %(revs)s are already part of pull request or have set status" +msgstr "Rewizja %(revs)s jest już częścią nowej gałęzi więc określ jego status" + +#: rhodecode/templates/index.html:3 +msgid "Dashboard" +msgstr "Repozytorium" + +#: rhodecode/templates/index_base.html:6 +#: rhodecode/templates/repo_switcher_list.html:4 +#: rhodecode/templates/admin/repos/repos.html:9 +#: rhodecode/templates/admin/users/user_edit_my_account.html:31 +#: rhodecode/templates/admin/users/users.html:9 +#: rhodecode/templates/bookmarks/bookmarks.html:10 +#: rhodecode/templates/branches/branches.html:9 +#: rhodecode/templates/journal/journal.html:40 +#: rhodecode/templates/tags/tags.html:10 +msgid "quick filter..." +msgstr "szybki filtr..." + +#: rhodecode/templates/index_base.html:6 +#: rhodecode/templates/admin/repos/repos.html:9 +#: rhodecode/templates/base/base.html:233 +msgid "repositories" +msgstr "repozytoria" + +#: rhodecode/templates/index_base.html:13 +#: rhodecode/templates/index_base.html:15 +#: rhodecode/templates/admin/repos/repos.html:21 +msgid "ADD REPOSITORY" +msgstr "DODAJ REPOZYTORIUM" + +#: rhodecode/templates/index_base.html:29 +#: rhodecode/templates/index_base.html:136 +#: 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 "Nazwa grupy" + +#: rhodecode/templates/index_base.html:30 +#: rhodecode/templates/index_base.html:72 +#: rhodecode/templates/index_base.html:138 +#: rhodecode/templates/index_base.html:176 +#: rhodecode/templates/index_base.html:266 +#: rhodecode/templates/admin/repos/repo_add_base.html:56 +#: rhodecode/templates/admin/repos/repo_edit.html:75 +#: rhodecode/templates/admin/repos/repos.html:72 +#: 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/forks/fork.html:59 +#: rhodecode/templates/settings/repo_settings.html:66 +#: rhodecode/templates/summary/summary.html:114 +msgid "Description" +msgstr "Opis" + +#: rhodecode/templates/index_base.html:40 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47 +msgid "Repositories group" +msgstr "Grupy w repozytorium" + +#: rhodecode/templates/index_base.html:71 +#: rhodecode/templates/index_base.html:174 +#: rhodecode/templates/index_base.html:264 +#: rhodecode/templates/admin/repos/repo_add_base.html:9 +#: rhodecode/templates/admin/repos/repo_edit.html:32 +#: rhodecode/templates/admin/repos/repos.html:70 +#: rhodecode/templates/admin/users/user_edit.html:196 +#: rhodecode/templates/admin/users/user_edit_my_account.html:59 +#: rhodecode/templates/admin/users/user_edit_my_account.html:180 +#: rhodecode/templates/admin/users/user_edit_my_account.html:216 +#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:6 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:184 +#: rhodecode/templates/bookmarks/bookmarks.html:36 +#: rhodecode/templates/bookmarks/bookmarks_data.html:6 +#: rhodecode/templates/branches/branches.html:50 +#: rhodecode/templates/branches/branches_data.html:6 +#: rhodecode/templates/files/files_browser.html:47 +#: rhodecode/templates/journal/journal.html:62 +#: rhodecode/templates/journal/journal.html:168 +#: rhodecode/templates/journal/journal_page_repos.html:7 +#: rhodecode/templates/settings/repo_settings.html:31 +#: rhodecode/templates/summary/summary.html:43 +#: rhodecode/templates/summary/summary.html:132 +#: rhodecode/templates/tags/tags.html:51 +#: rhodecode/templates/tags/tags_data.html:6 +msgid "Name" +msgstr "Nazwa" + +#: rhodecode/templates/index_base.html:73 +msgid "Last change" +msgstr "Ostatnia aktywność" + +#: rhodecode/templates/index_base.html:74 +#: rhodecode/templates/index_base.html:179 +#: rhodecode/templates/admin/users/user_edit_my_account.html:182 +#: rhodecode/templates/journal/journal.html:170 +msgid "Tip" +msgstr "Ostatnia zmiana" + +#: rhodecode/templates/index_base.html:75 +#: rhodecode/templates/index_base.html:181 +#: rhodecode/templates/index_base.html:269 +#: rhodecode/templates/admin/repos/repo_edit.html:121 +#: rhodecode/templates/admin/repos/repos.html:73 +msgid "Owner" +msgstr "Właściciel" + +#: rhodecode/templates/index_base.html:76 +#: rhodecode/templates/summary/summary.html:48 +#: rhodecode/templates/summary/summary.html:51 +msgid "RSS" +msgstr "RSS" + +#: rhodecode/templates/index_base.html:77 +msgid "Atom" +msgstr "Atom" + +#: rhodecode/templates/index_base.html:167 +#: rhodecode/templates/index_base.html:207 +#: rhodecode/templates/index_base.html:291 +#: rhodecode/templates/admin/repos/repos.html:94 +#: rhodecode/templates/admin/users/user_edit_my_account.html:202 +#: rhodecode/templates/admin/users/users.html:107 +#: rhodecode/templates/bookmarks/bookmarks.html:60 +#: rhodecode/templates/branches/branches.html:76 +#: rhodecode/templates/journal/journal.html:193 +#: rhodecode/templates/tags/tags.html:77 +msgid "Click to sort ascending" +msgstr "Kliknij, aby posortować rosnąco" + +#: rhodecode/templates/index_base.html:168 +#: rhodecode/templates/index_base.html:208 +#: rhodecode/templates/index_base.html:292 +#: rhodecode/templates/admin/repos/repos.html:95 +#: rhodecode/templates/admin/users/user_edit_my_account.html:203 +#: rhodecode/templates/admin/users/users.html:108 +#: rhodecode/templates/bookmarks/bookmarks.html:61 +#: rhodecode/templates/branches/branches.html:77 +#: rhodecode/templates/journal/journal.html:194 +#: rhodecode/templates/tags/tags.html:78 +msgid "Click to sort descending" +msgstr "Kliknij, aby posortować malejąco" + +#: rhodecode/templates/index_base.html:177 +#: rhodecode/templates/index_base.html:267 +msgid "Last Change" +msgstr "Ostatnia akytwność" + +#: rhodecode/templates/index_base.html:209 +#: rhodecode/templates/index_base.html:293 +#: rhodecode/templates/admin/repos/repos.html:96 +#: rhodecode/templates/admin/users/user_edit_my_account.html:204 +#: rhodecode/templates/admin/users/users.html:109 +#: rhodecode/templates/bookmarks/bookmarks.html:62 +#: rhodecode/templates/branches/branches.html:78 +#: rhodecode/templates/journal/journal.html:195 +#: rhodecode/templates/tags/tags.html:79 +msgid "No records found." +msgstr "Nie znaleziono rekordów." + +#: rhodecode/templates/index_base.html:210 +#: rhodecode/templates/index_base.html:294 +#: rhodecode/templates/admin/repos/repos.html:97 +#: rhodecode/templates/admin/users/user_edit_my_account.html:205 +#: rhodecode/templates/admin/users/users.html:110 +#: rhodecode/templates/bookmarks/bookmarks.html:63 +#: rhodecode/templates/branches/branches.html:79 +#: rhodecode/templates/journal/journal.html:196 +#: rhodecode/templates/tags/tags.html:80 +msgid "Data error." +msgstr "Błąd danych." + +#: rhodecode/templates/index_base.html:211 +#: rhodecode/templates/index_base.html:295 +#: rhodecode/templates/admin/repos/repos.html:98 +#: rhodecode/templates/admin/users/user_edit_my_account.html:206 +#: rhodecode/templates/admin/users/users.html:111 +#: rhodecode/templates/bookmarks/bookmarks.html:64 +#: rhodecode/templates/branches/branches.html:80 +#: rhodecode/templates/journal/journal.html:54 +#: rhodecode/templates/journal/journal.html:197 +#: rhodecode/templates/tags/tags.html:81 +msgid "Loading..." +msgstr "Wczytywanie..." + +#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54 +msgid "Sign In" +msgstr "Zaloguj się" + +#: rhodecode/templates/login.html:21 +msgid "Sign In to" +msgstr "Zarejestruj się" + +#: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20 +#: rhodecode/templates/admin/admin_log.html:5 +#: rhodecode/templates/admin/users/user_add.html:32 +#: rhodecode/templates/admin/users/user_edit.html:50 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26 +#: rhodecode/templates/base/base.html:83 +#: rhodecode/templates/summary/summary.html:131 +msgid "Username" +msgstr "Nazwa użytkownika" + +#: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29 +#: rhodecode/templates/admin/ldap/ldap.html:46 +#: rhodecode/templates/admin/users/user_add.html:41 +#: rhodecode/templates/base/base.html:92 +msgid "Password" +msgstr "Hasło" + +#: rhodecode/templates/login.html:50 +msgid "Remember me" +msgstr "Zapamiętaj mnie" + +#: rhodecode/templates/login.html:60 +msgid "Forgot your password ?" +msgstr "Zapomniałeś hasła?" + +#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103 +msgid "Don't have an account ?" +msgstr "Nie masz konta?" + +#: rhodecode/templates/password_reset.html:5 +msgid "Reset your password" +msgstr "Zresetuj swoje hasło" + +#: rhodecode/templates/password_reset.html:11 +msgid "Reset your password to" +msgstr "Resetowanie hasła dla" + +#: rhodecode/templates/password_reset.html:21 +msgid "Email address" +msgstr "Adres e-mail" + +#: rhodecode/templates/password_reset.html:30 +msgid "Reset my password" +msgstr "Zresetuj swoje hasło" + +#: rhodecode/templates/password_reset.html:31 +msgid "Password reset link will be send to matching email address" +msgstr "Link do zresetowania hasła zostanie wysłany na adres e-mail" + +#: rhodecode/templates/register.html:5 rhodecode/templates/register.html:74 +msgid "Sign Up" +msgstr "Zarejestruj się" + +#: rhodecode/templates/register.html:11 +msgid "Sign Up to" +msgstr "Zarejestruj się do" + +#: rhodecode/templates/register.html:38 +msgid "Re-enter password" +msgstr "Ponownie wprowadź hasło" + +#: rhodecode/templates/register.html:47 +#: rhodecode/templates/admin/users/user_add.html:59 +#: rhodecode/templates/admin/users/user_edit.html:90 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53 +msgid "First Name" +msgstr "Imię" + +#: rhodecode/templates/register.html:56 +#: rhodecode/templates/admin/users/user_add.html:68 +#: rhodecode/templates/admin/users/user_edit.html:99 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62 +msgid "Last Name" +msgstr "Nazwisko" + +#: rhodecode/templates/register.html:65 +#: rhodecode/templates/admin/users/user_add.html:77 +#: rhodecode/templates/admin/users/user_edit.html:108 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71 +#: rhodecode/templates/summary/summary.html:133 +msgid "Email" +msgstr "E-mail" + +#: rhodecode/templates/register.html:76 +msgid "Your account will be activated right after registration" +msgstr "Twoje konto zostanie aktywowane zaraz po rejestracji" + +#: rhodecode/templates/register.html:78 +msgid "Your account must wait for activation by administrator" +msgstr "Twoje konto musi zostać aktywowane przez administratora" + +#: rhodecode/templates/repo_switcher_list.html:11 +#: rhodecode/templates/admin/defaults/defaults.html:44 +#: rhodecode/templates/admin/repos/repo_add_base.html:65 +#: rhodecode/templates/admin/repos/repo_edit.html:85 +#: rhodecode/templates/settings/repo_settings.html:76 +msgid "Private repository" +msgstr "Prywatne repozytorium" + +#: rhodecode/templates/repo_switcher_list.html:16 +msgid "Public repository" +msgstr "Publiczne repozytorium" + +#: rhodecode/templates/switch_to_list.html:3 +#: rhodecode/templates/branches/branches.html:14 +msgid "branches" +msgstr "gałęzie" + +#: rhodecode/templates/switch_to_list.html:10 +#: rhodecode/templates/branches/branches_data.html:57 +msgid "There are no branches yet" +msgstr "Nie ma jeszcze gałęzi" + +#: rhodecode/templates/switch_to_list.html:15 +#: rhodecode/templates/shortlog/shortlog_data.html:10 +#: rhodecode/templates/tags/tags.html:15 +msgid "tags" +msgstr "Tagi" + +#: rhodecode/templates/switch_to_list.html:22 +#: rhodecode/templates/tags/tags_data.html:38 +msgid "There are no tags yet" +msgstr "Nie ma jeszcze tagów" + +#: rhodecode/templates/switch_to_list.html:28 +#: rhodecode/templates/bookmarks/bookmarks.html:15 +msgid "bookmarks" +msgstr "zakładki" + +#: rhodecode/templates/switch_to_list.html:35 +#: rhodecode/templates/bookmarks/bookmarks_data.html:32 +msgid "There are no bookmarks yet" +msgstr "Nie ma jeszcze zakładek" + +#: rhodecode/templates/admin/admin.html:5 +#: rhodecode/templates/admin/admin.html:9 +msgid "Admin journal" +msgstr "Dziennik administratora" + +#: rhodecode/templates/admin/admin_log.html:6 +#: rhodecode/templates/admin/repos/repos.html:74 +#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8 +#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:9 +#: rhodecode/templates/journal/journal_page_repos.html:9 +#: rhodecode/templates/journal/journal_page_repos.html:10 +msgid "Action" +msgstr "Działanie" + +#: rhodecode/templates/admin/admin_log.html:7 +#: rhodecode/templates/admin/permissions/permissions.html:41 +msgid "Repository" +msgstr "Repozytorium" + +#: rhodecode/templates/admin/admin_log.html:8 +#: rhodecode/templates/bookmarks/bookmarks.html:37 +#: rhodecode/templates/bookmarks/bookmarks_data.html:7 +#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches_data.html:7 +#: rhodecode/templates/tags/tags.html:52 +#: rhodecode/templates/tags/tags_data.html:7 +msgid "Date" +msgstr "Data" + +#: rhodecode/templates/admin/admin_log.html:9 +msgid "From IP" +msgstr "z IP" + +#: rhodecode/templates/admin/admin_log.html:57 +msgid "No actions yet" +msgstr "Brak akcji" + +#: rhodecode/templates/admin/defaults/defaults.html:5 +#: rhodecode/templates/admin/defaults/defaults.html:25 +#, fuzzy +msgid "Repositories defaults" +msgstr "grupy w repozytorium" + +#: rhodecode/templates/admin/defaults/defaults.html:11 +#, fuzzy +msgid "Defaults" +msgstr "domyślne" + +#: rhodecode/templates/admin/defaults/defaults.html:35 +#: rhodecode/templates/admin/repos/repo_add_base.html:38 +#: rhodecode/templates/admin/repos/repo_edit.html:58 +msgid "Type" +msgstr "Typ" + +#: rhodecode/templates/admin/defaults/defaults.html:48 +#: rhodecode/templates/admin/repos/repo_add_base.html:69 +#: rhodecode/templates/admin/repos/repo_edit.html:89 +#: rhodecode/templates/forks/fork.html:72 +#: rhodecode/templates/settings/repo_settings.html:80 +msgid "" +"Private repositories are only visible to people explicitly added as " +"collaborators." +msgstr "" +"Prywatne repozytoria są widoczne tylko dla osób bezpośrednio dodanych " +"jako współpracownicy." + +#: rhodecode/templates/admin/defaults/defaults.html:55 +#: rhodecode/templates/admin/repos/repo_edit.html:94 +msgid "Enable statistics" +msgstr "Włącz statystyki" + +#: rhodecode/templates/admin/defaults/defaults.html:59 +#: rhodecode/templates/admin/repos/repo_edit.html:98 +msgid "Enable statistics window on summary page." +msgstr "Włącz okno statystyk na stronie podsumowania." + +#: rhodecode/templates/admin/defaults/defaults.html:65 +#: rhodecode/templates/admin/repos/repo_edit.html:103 +msgid "Enable downloads" +msgstr "Włącz pobieranie" + +#: rhodecode/templates/admin/defaults/defaults.html:69 +#: rhodecode/templates/admin/repos/repo_edit.html:107 +msgid "Enable download menu on summary page." +msgstr "Włącz menu pobierania na stronie podsumowania." + +#: rhodecode/templates/admin/defaults/defaults.html:75 +#: rhodecode/templates/admin/repos/repo_edit.html:112 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66 +msgid "Enable locking" +msgstr "Włącz blokowanie" + +#: rhodecode/templates/admin/defaults/defaults.html:79 +#: rhodecode/templates/admin/repos/repo_edit.html:116 +msgid "Enable lock-by-pulling on repository." +msgstr "Włącz blokowanie pobierania w repozytorium." + +#: rhodecode/templates/admin/defaults/defaults.html:84 +#: rhodecode/templates/admin/ldap/ldap.html:89 +#: rhodecode/templates/admin/repos/repo_edit.html:141 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74 +#: rhodecode/templates/admin/settings/hooks.html:73 +#: rhodecode/templates/admin/users/user_edit.html:133 +#: rhodecode/templates/admin/users/user_edit.html:178 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:135 +#: rhodecode/templates/settings/repo_settings.html:93 +msgid "Save" +msgstr "Zapisz" + +#: rhodecode/templates/admin/ldap/ldap.html:5 +msgid "LDAP administration" +msgstr "Administracja LDAP" + +#: rhodecode/templates/admin/ldap/ldap.html:11 +msgid "Ldap" +msgstr "Ldap" + +#: rhodecode/templates/admin/ldap/ldap.html:28 +msgid "Connection settings" +msgstr "Ustawienia połączeń" + +#: rhodecode/templates/admin/ldap/ldap.html:30 +msgid "Enable LDAP" +msgstr "Włącz LDAP" + +#: rhodecode/templates/admin/ldap/ldap.html:34 +msgid "Host" +msgstr "Host" + +#: rhodecode/templates/admin/ldap/ldap.html:38 +msgid "Port" +msgstr "Port" + +#: rhodecode/templates/admin/ldap/ldap.html:42 +msgid "Account" +msgstr "Konto" + +#: rhodecode/templates/admin/ldap/ldap.html:50 +msgid "Connection security" +msgstr "Zabezpieczenie połączenia" + +#: rhodecode/templates/admin/ldap/ldap.html:54 +msgid "Certificate Checks" +msgstr "Kontrola certyfikatów" + +#: rhodecode/templates/admin/ldap/ldap.html:57 +msgid "Search settings" +msgstr "Ustawienia wyszukiwania" + +#: rhodecode/templates/admin/ldap/ldap.html:59 +msgid "Base DN" +msgstr "Bazowy DN" + +#: rhodecode/templates/admin/ldap/ldap.html:63 +msgid "LDAP Filter" +msgstr "Filtr LDAP" + +#: rhodecode/templates/admin/ldap/ldap.html:67 +msgid "LDAP Search Scope" +msgstr "Zakres wyszukiwania LDAP" + +#: rhodecode/templates/admin/ldap/ldap.html:70 +msgid "Attribute mappings" +msgstr "Mapowanie atrybutów" + +#: rhodecode/templates/admin/ldap/ldap.html:72 +msgid "Login Attribute" +msgstr "Atrybuty logowania" + +#: rhodecode/templates/admin/ldap/ldap.html:76 +msgid "First Name Attribute" +msgstr "Atrybut Nazwiska" + +#: rhodecode/templates/admin/ldap/ldap.html:80 +msgid "Last Name Attribute" +msgstr "Atrybut Imienia" + +#: rhodecode/templates/admin/ldap/ldap.html:84 +msgid "E-mail Attribute" +msgstr "Atrybut E-maila" + +#: rhodecode/templates/admin/notifications/notifications.html:5 +#: rhodecode/templates/admin/notifications/notifications.html:9 +msgid "My Notifications" +msgstr "Opcje powiadomień" + +#: rhodecode/templates/admin/notifications/notifications.html:29 +msgid "All" +msgstr "Wszystkie" + +#: rhodecode/templates/admin/notifications/notifications.html:30 +msgid "Comments" +msgstr "Komentarze" + +#: rhodecode/templates/admin/notifications/notifications.html:31 +#: rhodecode/templates/base/base.html:267 +#: rhodecode/templates/base/base.html:269 +msgid "Pull requests" +msgstr "Połączone gałęzie" + +#: rhodecode/templates/admin/notifications/notifications.html:35 +msgid "Mark all read" +msgstr "Oznacz wszystko jako przeczytane" + +#: rhodecode/templates/admin/notifications/notifications_data.html:39 +msgid "No notifications here yet" +msgstr "Brak powiadomień" + +#: rhodecode/templates/admin/notifications/show_notification.html:5 +#: rhodecode/templates/admin/notifications/show_notification.html:11 +msgid "Show notification" +msgstr "Pokaż powiadomienia" + +#: rhodecode/templates/admin/notifications/show_notification.html:9 +msgid "Notifications" +msgstr "Powiadomienia" + +#: rhodecode/templates/admin/permissions/permissions.html:5 +msgid "Permissions administration" +msgstr "Uprawnienia administracji" + +#: rhodecode/templates/admin/permissions/permissions.html:11 +#: rhodecode/templates/admin/repos/repo_edit.html:134 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58 +#: rhodecode/templates/admin/users/user_edit.html:143 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:100 +#: rhodecode/templates/settings/repo_settings.html:86 +msgid "Permissions" +msgstr "Uprawnienia" + +#: rhodecode/templates/admin/permissions/permissions.html:24 +msgid "Default permissions" +msgstr "Domyślne uprawnienia" + +#: rhodecode/templates/admin/permissions/permissions.html:31 +msgid "Anonymous access" +msgstr "Dostęp anonimowy" + +#: rhodecode/templates/admin/permissions/permissions.html:49 +msgid "" +"All default permissions on each repository will be reset to choosen " +"permission, note that all custom default permission on repositories will " +"be lost" +msgstr "" +"Wszystkie uprawnienia domyślne każdego repozytorium zostaną przywrócone. " +"Wybrane uprawnienie zostaną skasowane. Pamiętaj, że wszystkie " +"niestandardowe uprawnienia w repozytoriach zostaną utracone." + +#: rhodecode/templates/admin/permissions/permissions.html:50 +#: rhodecode/templates/admin/permissions/permissions.html:63 +msgid "overwrite existing settings" +msgstr "Nadpisz ustawienia" + +#: rhodecode/templates/admin/permissions/permissions.html:55 +#: rhodecode/templates/admin/repos/repo_add_base.html:29 +#: rhodecode/templates/admin/repos/repo_edit.html:49 +#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 +#: rhodecode/templates/forks/fork.html:50 +#: rhodecode/templates/settings/repo_settings.html:48 +msgid "Repository group" +msgstr "Repozytorium grupy" + +#: rhodecode/templates/admin/permissions/permissions.html:62 +msgid "" +"All default permissions on each repository group will be reset to choosen" +" permission, note that all custom default permission on repositories " +"group will be lost" +msgstr "" +"Wszystkie uprawnienia domyślne każdego repozytorium zostaną przywrócone. " +"Wybrane uprawnienie zostaną skasowane. Pamiętaj, że wszystkie " +"niestandardowe uprawnienia w repozytoriach zostaną utracone." + +#: rhodecode/templates/admin/permissions/permissions.html:69 +msgid "Registration" +msgstr "Rejestracja" + +#: rhodecode/templates/admin/permissions/permissions.html:77 +msgid "Repository creation" +msgstr "Tworzenie repozytorium" + +#: rhodecode/templates/admin/permissions/permissions.html:85 +msgid "Repository forking" +msgstr "Rozwidlanie repozytorium" + +#: rhodecode/templates/admin/permissions/permissions.html:92 +#: rhodecode/templates/admin/repos/repo_edit.html:264 +msgid "set" +msgstr "ustaw" + +#: rhodecode/templates/admin/repos/repo_add.html:5 +#: rhodecode/templates/admin/repos/repo_add_create_repository.html:5 +msgid "Add repository" +msgstr "Dodaj repozytorium" + +#: rhodecode/templates/admin/repos/repo_add.html:11 +#: rhodecode/templates/admin/repos/repo_edit.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10 +msgid "Repositories" +msgstr "Repozytoria" + +#: rhodecode/templates/admin/repos/repo_add.html:13 +msgid "add new" +msgstr "dodaj nowe" + +#: rhodecode/templates/admin/repos/repo_add_base.html:20 +#: rhodecode/templates/summary/summary.html:104 +#: rhodecode/templates/summary/summary.html:105 +msgid "Clone from" +msgstr "Klonuj z" + +#: rhodecode/templates/admin/repos/repo_add_base.html:24 +#: rhodecode/templates/admin/repos/repo_edit.html:44 +#: rhodecode/templates/settings/repo_settings.html:43 +msgid "Optional http[s] url from which repository should be cloned." +msgstr "Opcjonalnie http[s] url z którego repozytorium powinno być klonowane." + +#: rhodecode/templates/admin/repos/repo_add_base.html:33 +#: rhodecode/templates/forks/fork.html:54 +msgid "Optionaly select a group to put this repository into." +msgstr "Opcjonalnie wybierz grupę do wprowadzenia tego repozytorium." + +#: rhodecode/templates/admin/repos/repo_add_base.html:42 +msgid "Type of repository to create." +msgstr "Rodzaj repozytorium do stworzenia." + +#: rhodecode/templates/admin/repos/repo_add_base.html:47 +#: rhodecode/templates/admin/repos/repo_edit.html:66 +#: rhodecode/templates/forks/fork.html:41 +#: rhodecode/templates/settings/repo_settings.html:57 +msgid "Landing revision" +msgstr "Docelowa rewizja" + +#: rhodecode/templates/admin/repos/repo_add_base.html:51 +#: rhodecode/templates/admin/repos/repo_edit.html:70 +#: rhodecode/templates/forks/fork.html:45 +#: rhodecode/templates/settings/repo_settings.html:61 +msgid "Default revision for files page, downloads, whoosh and readme" +msgstr "Wersja domyślna dla plików stronicowania, pobierania plików, readme" + +#: rhodecode/templates/admin/repos/repo_add_base.html:60 +#: rhodecode/templates/admin/repos/repo_edit.html:79 +#: rhodecode/templates/forks/fork.html:63 +#: rhodecode/templates/settings/repo_settings.html:70 +msgid "Keep it short and to the point. Use a README file for longer descriptions." +msgstr "Powinna być krótka i na temat. Użyj pliku README dla dłuższych opisów." + +#: rhodecode/templates/admin/repos/repo_add_base.html:73 +msgid "add" +msgstr "dodaj" + +#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9 +msgid "add new repository" +msgstr "dodaj nowe repozytorium" + +#: rhodecode/templates/admin/repos/repo_edit.html:5 +msgid "Edit repository" +msgstr "Edytuj repozytorium" + +#: rhodecode/templates/admin/repos/repo_edit.html:13 +#: rhodecode/templates/admin/users/user_edit.html:13 +#: rhodecode/templates/admin/users/user_edit.html:228 +#: rhodecode/templates/admin/users/user_edit.html:230 +#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:13 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:207 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:209 +#: rhodecode/templates/files/files_source.html:29 +#: rhodecode/templates/journal/journal_page_repos.html:29 +msgid "edit" +msgstr "edycja" + +#: rhodecode/templates/admin/repos/repo_edit.html:40 +#: rhodecode/templates/settings/repo_settings.html:39 +msgid "Clone uri" +msgstr "Klonowane uri" + +#: rhodecode/templates/admin/repos/repo_edit.html:53 +#: rhodecode/templates/settings/repo_settings.html:52 +msgid "Optional select a group to put this repository into." +msgstr "Opcjonalnie wybierz grupę do wprowadzenia tego repozytorium." + +#: rhodecode/templates/admin/repos/repo_edit.html:126 +msgid "Change owner of this repository." +msgstr "Zmiana właściciela tego repozytorium." + +#: rhodecode/templates/admin/repos/repo_edit.html:142 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:75 +#: rhodecode/templates/admin/settings/settings.html:113 +#: rhodecode/templates/admin/settings/settings.html:179 +#: rhodecode/templates/admin/settings/settings.html:269 +#: rhodecode/templates/admin/users/user_edit.html:134 +#: rhodecode/templates/admin/users/user_edit.html:179 +#: rhodecode/templates/admin/users/user_edit.html:282 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:136 +#: rhodecode/templates/files/files_add.html:82 +#: rhodecode/templates/files/files_edit.html:68 +#: rhodecode/templates/pullrequests/pullrequest.html:124 +#: rhodecode/templates/settings/repo_settings.html:94 +msgid "Reset" +msgstr "Zresetuj" + +#: rhodecode/templates/admin/repos/repo_edit.html:152 +msgid "Administration" +msgstr "Administracja" + +#: rhodecode/templates/admin/repos/repo_edit.html:155 +msgid "Statistics" +msgstr "Statystyki" + +#: rhodecode/templates/admin/repos/repo_edit.html:159 +msgid "Reset current statistics" +msgstr "Zresetuj bieżące statystyki" + +#: rhodecode/templates/admin/repos/repo_edit.html:159 +msgid "Confirm to remove current statistics" +msgstr "Potwierdź usunięcie aktualnych statystyk" + +#: rhodecode/templates/admin/repos/repo_edit.html:162 +msgid "Fetched to rev" +msgstr "Ściągnięte do rev" + +#: rhodecode/templates/admin/repos/repo_edit.html:163 +msgid "Stats gathered" +msgstr "statystyki zgromadzone" + +#: rhodecode/templates/admin/repos/repo_edit.html:171 +msgid "Remote" +msgstr "Zdalnie" + +#: rhodecode/templates/admin/repos/repo_edit.html:175 +msgid "Pull changes from remote location" +msgstr "Prożba połączenia zmian z lokalizacji zdalnej" + +#: rhodecode/templates/admin/repos/repo_edit.html:175 +msgid "Confirm to pull changes from remote side" +msgstr "Potwierdź pull z zdalnej strony" + +#: rhodecode/templates/admin/repos/repo_edit.html:186 +msgid "Cache" +msgstr "Pamięć podręczna" + +#: rhodecode/templates/admin/repos/repo_edit.html:190 +msgid "Invalidate repository cache" +msgstr "Unieważnij pamięć podręczną repozytorium" + +#: rhodecode/templates/admin/repos/repo_edit.html:190 +msgid "Confirm to invalidate repository cache" +msgstr "Potwierdź unieważnienie pamięci podręcznej repozytorium" + +#: rhodecode/templates/admin/repos/repo_edit.html:193 +msgid "" +"Manually invalidate cache for this repository. On first access repository" +" will be cached again" +msgstr "" +"Ręcznie unieważnienie cache dla tego repozytorium. Przy pierwszym " +"dostępie do repozytorium zostanie dodany do bufora ponownie" + +#: rhodecode/templates/admin/repos/repo_edit.html:198 +msgid "List of cached values" +msgstr "Lista buforowanych wartości" + +#: rhodecode/templates/admin/repos/repo_edit.html:201 +msgid "Prefix" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:202 +#, fuzzy +msgid "Key" +msgstr "Klucz API" + +#: rhodecode/templates/admin/repos/repo_edit.html:203 +#: rhodecode/templates/admin/users/user_add.html:86 +#: rhodecode/templates/admin/users/user_edit.html:117 +#: rhodecode/templates/admin/users_groups/users_group_add.html:41 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:42 +msgid "Active" +msgstr "Aktywny" + +#: rhodecode/templates/admin/repos/repo_edit.html:218 +#: rhodecode/templates/base/base.html:331 +#: rhodecode/templates/base/base.html:333 +#: rhodecode/templates/base/base.html:335 +msgid "Public journal" +msgstr "Dziennik publiczny" + +#: rhodecode/templates/admin/repos/repo_edit.html:224 +msgid "Remove from public journal" +msgstr "Usuń z dziennika publicznego" + +#: rhodecode/templates/admin/repos/repo_edit.html:226 +msgid "Add to public journal" +msgstr "Dodaj do dziennika publicznego" + +#: rhodecode/templates/admin/repos/repo_edit.html:231 +msgid "" +"All actions made on this repository will be accessible to everyone in " +"public journal" +msgstr "" +"Wszystkie działania wykonywane na tym repozytorium będą dostępne dla " +"wszystkich w dzienniku publicznym" + +#: rhodecode/templates/admin/repos/repo_edit.html:238 +msgid "Locking" +msgstr "Blokuj" + +#: rhodecode/templates/admin/repos/repo_edit.html:243 +msgid "Unlock locked repo" +msgstr "Odblokuj zablokowane repo" + +#: rhodecode/templates/admin/repos/repo_edit.html:243 +msgid "Confirm to unlock repository" +msgstr "Potwierdź odblokowanie repozytorium" + +#: rhodecode/templates/admin/repos/repo_edit.html:246 +msgid "lock repo" +msgstr "blokada repo" + +#: rhodecode/templates/admin/repos/repo_edit.html:246 +msgid "Confirm to lock repository" +msgstr "Potwierdź blokowanie repozytorium" + +#: rhodecode/templates/admin/repos/repo_edit.html:247 +msgid "Repository is not locked" +msgstr "Repozytorium nie jest zablokowane" + +#: rhodecode/templates/admin/repos/repo_edit.html:252 +msgid "Force locking on repository. Works only when anonymous access is disabled" +msgstr "" +"Wymuś blokowanie na repozytorium. Działa tylko wtedy, gdy dostęp " +"anonimowy jest wyłączony" + +#: rhodecode/templates/admin/repos/repo_edit.html:259 +msgid "Set as fork of" +msgstr "Ustaw jako rozwidlenie" + +#: rhodecode/templates/admin/repos/repo_edit.html:268 +msgid "Manually set this repository as a fork of another from the list" +msgstr "Ręczne ustawienie rozwidlenia z listy" + +#: rhodecode/templates/admin/repos/repo_edit.html:274 +#: rhodecode/templates/changeset/changeset_file_comment.html:26 +msgid "Delete" +msgstr "Usuń" + +#: rhodecode/templates/admin/repos/repo_edit.html:278 +msgid "Remove this repository" +msgstr "Usuń to repozytorium" + +#: rhodecode/templates/admin/repos/repo_edit.html:278 +msgid "Confirm to delete this repository" +msgstr "Potwierdź, aby usunąć repozytorium" + +#: rhodecode/templates/admin/repos/repo_edit.html:282 +msgid "" +"This repository will be renamed in a special way in order to be " +"unaccesible for RhodeCode and VCS systems.\n" +" If you need fully delete it from filesystem " +"please do it manually" +msgstr "" +"To repozytorium zostanie zmienione w sposób szczególny, żeby było " +"niedostępne dla strony i systemów VCS.\n" +" Jeśli chcesz całkowicie usunąć go z systemu " +"plików prosimy zrobić to ręcznie" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:3 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3 +msgid "none" +msgstr "brak" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:4 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:4 +msgid "read" +msgstr "odczyt" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:5 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:5 +msgid "write" +msgstr "zapis" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:6 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6 +#: rhodecode/templates/admin/users/users.html:85 +#: rhodecode/templates/base/base.html:229 +msgid "admin" +msgstr "administracja" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:7 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:7 +msgid "member" +msgstr "użytkownik" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:16 +#: rhodecode/templates/data_table/_dt_elements.html:67 +#: rhodecode/templates/journal/journal.html:87 +#: rhodecode/templates/summary/summary.html:85 +msgid "private repository" +msgstr "prywatne repozytorium" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:19 +#: rhodecode/templates/admin/repos/repo_edit_perms.html:28 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:18 +msgid "default" +msgstr "domyślne" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:33 +#: rhodecode/templates/admin/repos/repo_edit_perms.html:58 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42 +msgid "revoke" +msgstr "odwołane" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:83 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:67 +msgid "Add another member" +msgstr "Dodaj kolejnego użytkownika" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:97 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 +msgid "Failed to remove user" +msgstr "Nie udało się usunąć użytkownika" + +#: rhodecode/templates/admin/repos/repo_edit_perms.html:112 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:103 +msgid "Failed to remove users group" +msgstr "Nie udało się usunąć grupy użytkowników" + +#: rhodecode/templates/admin/repos/repos.html:5 +msgid "Repositories administration" +msgstr "Administracja repozytoriami" + +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73 +msgid "apply to children" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74 +msgid "" +"Set or revoke permission to all children of that group, including " +"repositories and other groups" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups.html:9 +#: rhodecode/templates/base/base.html:122 +#: rhodecode/templates/base/base.html:313 +#: rhodecode/templates/base/base.html:315 +#: rhodecode/templates/base/base.html:317 +#: rhodecode/templates/bookmarks/bookmarks.html:11 +#: rhodecode/templates/branches/branches.html:10 +#: rhodecode/templates/changelog/changelog.html:10 +#: rhodecode/templates/changeset/changeset.html:10 +#: rhodecode/templates/changeset/changeset_range.html:9 +#: rhodecode/templates/compare/compare_diff.html:9 +#: rhodecode/templates/files/file_diff.html:8 +#: rhodecode/templates/files/files.html:8 +#: rhodecode/templates/files/files_add.html:15 +#: rhodecode/templates/files/files_edit.html:15 +#: rhodecode/templates/followers/followers.html:9 +#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9 +#: rhodecode/templates/pullrequests/pullrequest.html:8 +#: rhodecode/templates/pullrequests/pullrequest_show.html:8 +#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 +#: rhodecode/templates/settings/repo_settings.html:9 +#: rhodecode/templates/shortlog/shortlog.html:10 +#: rhodecode/templates/summary/summary.html:8 +#: rhodecode/templates/tags/tags.html:11 +msgid "Home" +msgstr "Strona Główna" + +#: rhodecode/templates/admin/repos_groups/repos_groups.html:13 +msgid "with" +msgstr "używając" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5 +msgid "Add repos group" +msgstr "Dodaj grupę repos" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10 +msgid "Repos groups" +msgstr "Grupy repos" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12 +msgid "add new repos group" +msgstr "dodaj nową grupę repozytorium" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50 +msgid "Group parent" +msgstr "Dominująca grupa" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58 +#: rhodecode/templates/admin/users/user_add.html:94 +#: rhodecode/templates/admin/users_groups/users_group_add.html:49 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:90 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +msgid "save" +msgstr "zapisz" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5 +msgid "Edit repos group" +msgstr "Edytuj grupy repo" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12 +msgid "edit repos group" +msgstr "edytuj grupy repo" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70 +msgid "" +"Enable lock-by-pulling on group. This option will be applied to all other" +" groups and repositories inside" +msgstr "" +"Włącz blokowanie pulling przez grupy. Opcja ta będzie stosowana do " +"wszystkich innych grup i repozytoriów wewnątrz" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5 +msgid "Repositories groups administration" +msgstr "Repozytoria grup administracyjnych" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22 +msgid "ADD NEW GROUP" +msgstr "DODAJ NOWĄ GRUPĘ" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35 +msgid "Number of toplevel repositories" +msgstr "Liczba najwyższego poziomu repozytorium" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36 +#: rhodecode/templates/admin/users/users.html:87 +#: rhodecode/templates/admin/users_groups/users_groups.html:35 +msgid "action" +msgstr "działanie" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 +#: rhodecode/templates/admin/users/user_edit.html:259 +#: rhodecode/templates/admin/users_groups/users_groups.html:44 +#: rhodecode/templates/data_table/_dt_elements.html:7 +#: rhodecode/templates/data_table/_dt_elements.html:121 +msgid "delete" +msgstr "usuń" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 +#, fuzzy, python-format +msgid "Confirm to delete this group: %s with %s repository" +msgid_plural "Confirm to delete this group: %s with %s repositories" +msgstr[0] "Potwierdz aby usunąć grupę %s wraz z %s repozytorium" +msgstr[1] "Potwierdz aby usunąć grupę %s wraz z %s repozytoriami" +msgstr[2] "Potwierdz aby usunąć grupę %s wraz z %s repozytoriami" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63 +msgid "There are no repositories groups yet" +msgstr "Nie ma jeszcze grup repozytoriów" + +#: rhodecode/templates/admin/settings/hooks.html:5 +#: rhodecode/templates/admin/settings/settings.html:5 +msgid "Settings administration" +msgstr "Ustawienia administracji" + +#: rhodecode/templates/admin/settings/hooks.html:9 +#: rhodecode/templates/admin/settings/settings.html:9 +#: rhodecode/templates/settings/repo_settings.html:13 +msgid "Settings" +msgstr "Ustawienia" + +#: rhodecode/templates/admin/settings/hooks.html:24 +msgid "Built in hooks - read only" +msgstr "Wbudowana w aktualizację - tylko do odczytu" + +#: rhodecode/templates/admin/settings/hooks.html:40 +msgid "Custom hooks" +msgstr "Niestandardowa aktualizacja" + +#: rhodecode/templates/admin/settings/hooks.html:56 +msgid "remove" +msgstr "usuń" + +#: rhodecode/templates/admin/settings/hooks.html:88 +msgid "Failed to remove hook" +msgstr "Nie udało się usunąć hooka" + +#: rhodecode/templates/admin/settings/settings.html:24 +msgid "Remap and rescan repositories" +msgstr "Mapowanie i skanowanie repozytorów" + +#: rhodecode/templates/admin/settings/settings.html:32 +msgid "rescan option" +msgstr "ponowne skanowanie opcji" + +#: rhodecode/templates/admin/settings/settings.html:38 +msgid "" +"In case a repository was deleted from filesystem and there are leftovers " +"in the database check this option to scan obsolete data in database and " +"remove it." +msgstr "" +"W przypadku repozytoriów zostaną usunięte systemy plików i jeśli są " +"pozostałości w bazie danych to ta opcja sprawdzi ją oraz przeskanuje, a " +"następnie usunie je z bazy danych." + +#: rhodecode/templates/admin/settings/settings.html:39 +msgid "destroy old data" +msgstr "zniszcz stare dane" + +#: rhodecode/templates/admin/settings/settings.html:41 +msgid "" +"Rescan repositories location for new repositories. Also deletes obsolete " +"if `destroy` flag is checked " +msgstr "" +"Skanowanie ponowne lokalizacji dla nowych repozytoriów. Usuwa również " +"nieaktualne jeśli została zaznaczona flaga `zniszcz` do sprawdzana" + +#: rhodecode/templates/admin/settings/settings.html:46 +msgid "Rescan repositories" +msgstr "Skanuj ponownie repozytoria" + +#: rhodecode/templates/admin/settings/settings.html:52 +msgid "Whoosh indexing" +msgstr "indeksowanie Whoosh" + +#: rhodecode/templates/admin/settings/settings.html:60 +msgid "index build option" +msgstr "opcja budowania indeksowania" + +#: rhodecode/templates/admin/settings/settings.html:65 +msgid "build from scratch" +msgstr "buduj od podstaw" + +#: rhodecode/templates/admin/settings/settings.html:71 +msgid "Reindex" +msgstr "Indeksuj ponownie" + +#: rhodecode/templates/admin/settings/settings.html:77 +msgid "Global application settings" +msgstr "Globalne ustawienia aplikacji" + +#: rhodecode/templates/admin/settings/settings.html:86 +msgid "Application name" +msgstr "Nazwa aplikacji" + +#: rhodecode/templates/admin/settings/settings.html:95 +msgid "Realm text" +msgstr "Realny tekst" + +#: rhodecode/templates/admin/settings/settings.html:104 +msgid "GA code" +msgstr "GA kod" + +#: rhodecode/templates/admin/settings/settings.html:112 +#: rhodecode/templates/admin/settings/settings.html:178 +#: rhodecode/templates/admin/settings/settings.html:268 +msgid "Save settings" +msgstr "Zapisz ustawienia" + +#: rhodecode/templates/admin/settings/settings.html:119 +msgid "Visualisation settings" +msgstr "Ustawienia wizualizacji" + +#: rhodecode/templates/admin/settings/settings.html:127 +#, fuzzy +msgid "General" +msgstr "włącz" + +#: rhodecode/templates/admin/settings/settings.html:132 +msgid "Use lightweight dashboard" +msgstr "Użyj lekkiego pulpitu" + +#: rhodecode/templates/admin/settings/settings.html:139 +msgid "Icons" +msgstr "Ikony" + +#: rhodecode/templates/admin/settings/settings.html:144 +msgid "Show public repo icon on repositories" +msgstr "Pokazuj w publicznym repo ikonę w repozytoriach" + +#: rhodecode/templates/admin/settings/settings.html:148 +msgid "Show private repo icon on repositories" +msgstr "Pokazuj w prywatnym repo ikonę w repozytoriach" + +#: rhodecode/templates/admin/settings/settings.html:155 +msgid "Meta-Tagging" +msgstr "Tagowanie meta" + +#: rhodecode/templates/admin/settings/settings.html:160 +msgid "Stylify recognised metatags:" +msgstr "Stylizacja rozpoznanych meta tagów:" + +#: rhodecode/templates/admin/settings/settings.html:187 +msgid "VCS settings" +msgstr "VCS ustawienia" + +#: rhodecode/templates/admin/settings/settings.html:196 +msgid "Web" +msgstr "www" + +#: rhodecode/templates/admin/settings/settings.html:201 +msgid "require ssl for vcs operations" +msgstr "wymagaj ssl dla operacji vcs" + +#: rhodecode/templates/admin/settings/settings.html:203 +msgid "" +"RhodeCode will require SSL for pushing or pulling. If SSL is missing it " +"will return HTTP Error 406: Not Acceptable" +msgstr "" +"RhodeCode wymaga SSL do wysłania zmian lub pobierania. Jeśli brakuje SSL " +"zwróci błąd HTTP 406: Not Acceptable" + +#: rhodecode/templates/admin/settings/settings.html:209 +msgid "Hooks" +msgstr "Aktualizacja" + +#: rhodecode/templates/admin/settings/settings.html:214 +msgid "Update repository after push (hg update)" +msgstr "Aktualizacja repozytorium po wysłaniu zmian (aktualizacja hg)" + +#: rhodecode/templates/admin/settings/settings.html:218 +msgid "Show repository size after push" +msgstr "Pokaż rozmiar repozytorium po wysłaniu zmian" + +#: rhodecode/templates/admin/settings/settings.html:222 +msgid "Log user push commands" +msgstr "Logi poleceń wysłania zmian użytkowników" + +#: rhodecode/templates/admin/settings/settings.html:226 +msgid "Log user pull commands" +msgstr "Logi poleceń połączenia gałęzi użytkowników" + +#: rhodecode/templates/admin/settings/settings.html:230 +msgid "advanced setup" +msgstr "zaawansowane ustawienia" + +#: rhodecode/templates/admin/settings/settings.html:235 +msgid "Mercurial Extensions" +msgstr "Rozszerzenia Mercurial" + +#: rhodecode/templates/admin/settings/settings.html:240 +msgid "largefiles extensions" +msgstr "rozszerzenia dużych pliów" + +#: rhodecode/templates/admin/settings/settings.html:244 +msgid "hgsubversion extensions" +msgstr "rozszerzenia hgsubversion" + +#: rhodecode/templates/admin/settings/settings.html:246 +msgid "" +"Requires hgsubversion library installed. Allows clonning from svn remote " +"locations" +msgstr "" +"Wymaga biblioteki hgsubversion zainstalowanej. Umożliwia klonowanie z " +"zdalnych lokalizacji svn" + +#: rhodecode/templates/admin/settings/settings.html:256 +msgid "Repositories location" +msgstr "Położenie repozytorium" + +#: rhodecode/templates/admin/settings/settings.html:261 +msgid "" +"This a crucial application setting. If you are really sure you need to " +"change this, you must restart application in order to make this setting " +"take effect. Click this label to unlock." +msgstr "" +"To kluczowe ustawienia aplikacji. Jeśli jesteś pewny, że chcesz to " +"zmienić, należy ponownie uruchomić aplikację w celu zaktualizowania " +"lokalizacji. Kliknij tą etykietę, żeby odblokować." + +#: rhodecode/templates/admin/settings/settings.html:262 +#: rhodecode/templates/base/base.html:221 +msgid "unlock" +msgstr "odblokowany" + +#: rhodecode/templates/admin/settings/settings.html:263 +msgid "" +"Location where repositories are stored. After changing this value a " +"restart, and rescan is required" +msgstr "" +"Miejsce, w którym przechowywane są repozytoria. Po zmianie tej wartości " +"jest wymagany restart i ponowne skanowanie" + +#: rhodecode/templates/admin/settings/settings.html:283 +msgid "Test Email" +msgstr "Test e-maila" + +#: rhodecode/templates/admin/settings/settings.html:291 +msgid "Email to" +msgstr "E-mail do" + +#: rhodecode/templates/admin/settings/settings.html:299 +msgid "Send" +msgstr "Wyślij" + +#: rhodecode/templates/admin/settings/settings.html:305 +msgid "System Info and Packages" +msgstr "Informacje Systemowe i pakiety" + +#: rhodecode/templates/admin/settings/settings.html:308 +msgid "show" +msgstr "pokaż" + +#: rhodecode/templates/admin/users/user_add.html:5 +msgid "Add user" +msgstr "Dodaj użytkownika" + +#: rhodecode/templates/admin/users/user_add.html:10 +#: rhodecode/templates/admin/users/user_edit.html:11 +msgid "Users" +msgstr "Użytkownicy" + +#: rhodecode/templates/admin/users/user_add.html:12 +msgid "add new user" +msgstr "dodaj nowego użytkownika" + +#: rhodecode/templates/admin/users/user_add.html:50 +msgid "Password confirmation" +msgstr "Potwierdzenie hasła" + +#: rhodecode/templates/admin/users/user_edit.html:5 +msgid "Edit user" +msgstr "Edytuj użytkownika" + +#: rhodecode/templates/admin/users/user_edit.html:34 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:10 +msgid "Change your avatar at" +msgstr "Zmiana awataru na" + +#: rhodecode/templates/admin/users/user_edit.html:35 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:11 +msgid "Using" +msgstr "Używa:" + +#: rhodecode/templates/admin/users/user_edit.html:43 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:20 +msgid "API key" +msgstr "Klucz API" + +#: rhodecode/templates/admin/users/user_edit.html:63 +msgid "LDAP DN" +msgstr "LDAP DN" + +#: rhodecode/templates/admin/users/user_edit.html:72 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35 +msgid "New password" +msgstr "Nowe hasło" + +#: rhodecode/templates/admin/users/user_edit.html:81 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 +msgid "New password confirmation" +msgstr "Potwierdzenie nowego hasła" + +#: rhodecode/templates/admin/users/user_edit.html:151 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:108 +msgid "Inherit default permissions" +msgstr "Dziedziczą uprawnienia domyślne" + +#: rhodecode/templates/admin/users/user_edit.html:156 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:113 +#, python-format +msgid "" +"Select to inherit permissions from %s settings. With this selected below " +"options does not have any action" +msgstr "" +"Zaznacz, żeby dziedziczyć uprawnienia z %s ustawień. Po wybraniu tej " +"opcji, poniżej nie ma żadnych działań" + +#: rhodecode/templates/admin/users/user_edit.html:162 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:119 +msgid "Create repositories" +msgstr "Utwórz repozytorium" + +#: rhodecode/templates/admin/users/user_edit.html:170 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:127 +msgid "Fork repositories" +msgstr "Rozwidlenie repozytorium" + +#: rhodecode/templates/admin/users/user_edit.html:190 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:22 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:39 +msgid "Nothing here yet" +msgstr "Nic tu nie ma jeszcze" + +#: rhodecode/templates/admin/users/user_edit.html:197 +#: rhodecode/templates/admin/users/user_edit_my_account.html:60 +#: rhodecode/templates/admin/users/user_edit_my_account.html:217 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:185 +msgid "Permission" +msgstr "Uprawnienia" + +#: rhodecode/templates/admin/users/user_edit.html:198 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:186 +msgid "Edit Permission" +msgstr "Edycja Uprawnień" + +#: rhodecode/templates/admin/users/user_edit.html:247 +msgid "Email addresses" +msgstr "Adresy e-mail" + +#: rhodecode/templates/admin/users/user_edit.html:260 +#, python-format +msgid "Confirm to delete this email: %s" +msgstr "Potwierdź, aby usunąć ten e-mail: %s" + +#: rhodecode/templates/admin/users/user_edit.html:274 +msgid "New email address" +msgstr "Nowy adres e-mail" + +#: rhodecode/templates/admin/users/user_edit.html:281 +msgid "Add" +msgstr "Dodaj" + +#: rhodecode/templates/admin/users/user_edit_my_account.html:5 +#: rhodecode/templates/base/base.html:124 +msgid "My account" +msgstr "Moje konto" + +#: rhodecode/templates/admin/users/user_edit_my_account.html:9 +msgid "My Account" +msgstr "Moje konto" + +#: rhodecode/templates/admin/users/user_edit_my_account.html:35 +msgid "My permissions" +msgstr "Moje uprawnienia" + +#: rhodecode/templates/admin/users/user_edit_my_account.html:38 +#: rhodecode/templates/journal/journal.html:41 +msgid "My repos" +msgstr "Moje repo" + +#: rhodecode/templates/admin/users/user_edit_my_account.html:41 +msgid "My pull requests" +msgstr "Moje prośby połączenia gałęzi" + +#: rhodecode/templates/admin/users/user_edit_my_account.html:45 +msgid "Add repo" +msgstr "Dodaj repo" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:2 +msgid "Opened by me" +msgstr "Otwarty przez mnie" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10 +#, python-format +msgid "Pull request #%s opened on %s" +msgstr "Wniosek połączenia gałęzi #%s otwarty %s" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15 +msgid "Confirm to delete this pull request" +msgstr "Potwierdź usunięcie połączenia gałęzi" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:26 +msgid "I participate in" +msgstr "Biorę udział w" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:33 +#: rhodecode/templates/pullrequests/pullrequest_show_all.html:30 +#, python-format +msgid "Pull request #%s opened by %s on %s" +msgstr "Wniosek połączenia gałęzi #%s otwarty %s dnia %s" + +#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:7 +#: rhodecode/templates/bookmarks/bookmarks.html:40 +#: rhodecode/templates/bookmarks/bookmarks_data.html:9 +#: rhodecode/templates/branches/branches.html:54 +#: rhodecode/templates/branches/branches_data.html:9 +#: rhodecode/templates/journal/journal_page_repos.html:8 +#: rhodecode/templates/tags/tags.html:55 +#: rhodecode/templates/tags/tags_data.html:9 +msgid "Revision" +msgstr "Rewizja" + +#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28 +#: rhodecode/templates/journal/journal_page_repos.html:29 +msgid "private" +msgstr "prywatny" + +#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:31 +#: rhodecode/templates/data_table/_dt_elements.html:7 +#: rhodecode/templates/journal/journal_page_repos.html:32 +#, python-format +msgid "Confirm to delete this repository: %s" +msgstr "Potwierdź usunięcie repozytorium: %s" + +#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:38 +#: rhodecode/templates/journal/journal_page_repos.html:42 +msgid "No repositories yet" +msgstr "Nie ma jeszcze repozytoriów" + +#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40 +#: rhodecode/templates/journal/journal_page_repos.html:44 +msgid "create one now" +msgstr "utwórz je teraz" + +#: rhodecode/templates/admin/users/users.html:5 +msgid "Users administration" +msgstr "Administracja użytkownikami" + +#: rhodecode/templates/admin/users/users.html:9 +#: rhodecode/templates/base/base.html:235 +msgid "users" +msgstr "użytkownicy" + +#: rhodecode/templates/admin/users/users.html:23 +msgid "ADD NEW USER" +msgstr "DODAJ NOWEGO UŻYTKOWNIKA" + +#: rhodecode/templates/admin/users/users.html:77 +msgid "username" +msgstr "nazwa użytkownika" + +#: rhodecode/templates/admin/users/users.html:80 +msgid "firstname" +msgstr "imię" + +#: rhodecode/templates/admin/users/users.html:81 +msgid "lastname" +msgstr "nazwisko" + +#: rhodecode/templates/admin/users/users.html:82 +msgid "last login" +msgstr "ostatnio zalogowany" + +#: rhodecode/templates/admin/users/users.html:84 +#: rhodecode/templates/admin/users_groups/users_groups.html:34 +msgid "active" +msgstr "aktywny" + +#: rhodecode/templates/admin/users/users.html:86 +#: rhodecode/templates/base/base.html:238 +msgid "ldap" +msgstr "ldap" + +#: rhodecode/templates/admin/users_groups/users_group_add.html:5 +msgid "Add users group" +msgstr "Dodaj grupę użytkowników" + +#: rhodecode/templates/admin/users_groups/users_group_add.html:10 +#: rhodecode/templates/admin/users_groups/users_groups.html:9 +msgid "Users groups" +msgstr "Grupy użytkowników" + +#: rhodecode/templates/admin/users_groups/users_group_add.html:12 +msgid "add new users group" +msgstr "dodaj nową grupę użytkowników" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:5 +msgid "Edit users group" +msgstr "Edytuj grupę użytkowników" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:11 +msgid "UsersGroups" +msgstr "Grupy użytkowników" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:50 +msgid "Members" +msgstr "Użytkownik" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:58 +msgid "Choosen group members" +msgstr "Wybrane grupy użytkowników" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:61 +msgid "Remove all elements" +msgstr "Usuń wszystkie elementy" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:75 +msgid "Available members" +msgstr "Dostępni użytkownicy" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:79 +msgid "Add all elements" +msgstr "Dodaj wszystkie elementy" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:146 +msgid "Group members" +msgstr "Grupy użytkowników" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:163 +msgid "No members yet" +msgstr "Nie ma jeszcze żadnego użytkownika" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:171 +msgid "Permissions defined for this group" +msgstr "Uprawnienia określone dla tej grupy" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:178 +msgid "No permissions set yet" +msgstr "Nie ma jeszcze ustawionych uprawnień" + +#: rhodecode/templates/admin/users_groups/users_groups.html:5 +msgid "Users groups administration" +msgstr "Użytkownicy grupy administracji" + +#: rhodecode/templates/admin/users_groups/users_groups.html:23 +msgid "ADD NEW USER GROUP" +msgstr "DODAJ NOWĄ GRUPĘ UŻYTKOWNIKÓW" + +#: rhodecode/templates/admin/users_groups/users_groups.html:32 +msgid "group name" +msgstr "nazwa grupy" + +#: rhodecode/templates/admin/users_groups/users_groups.html:33 +#: rhodecode/templates/base/root.html:46 +msgid "members" +msgstr "użytkownik" + +#: rhodecode/templates/admin/users_groups/users_groups.html:45 +#, python-format +msgid "Confirm to delete this users group: %s" +msgstr "Potwierdź usunięcie grupy użytkowników: %s" + +#: rhodecode/templates/base/base.html:41 +msgid "Submit a bug" +msgstr "Prześlij błąd" + +#: rhodecode/templates/base/base.html:77 +msgid "Login to your account" +msgstr "Zaloguj się do swojego konta" + +#: rhodecode/templates/base/base.html:100 +msgid "Forgot password ?" +msgstr "Nie pamiętasz hasła?" + +#: rhodecode/templates/base/base.html:107 +msgid "Log In" +msgstr "Zaloguj się" + +#: rhodecode/templates/base/base.html:118 +msgid "Inbox" +msgstr "Odebrana poczta" + +#: rhodecode/templates/base/base.html:123 +#: rhodecode/templates/base/base.html:322 +#: rhodecode/templates/base/base.html:324 +#: rhodecode/templates/base/base.html:326 +#: rhodecode/templates/journal/journal.html:4 +#: rhodecode/templates/journal/journal.html:21 +#: rhodecode/templates/journal/public_journal.html:4 +msgid "Journal" +msgstr "Dziennik" + +#: rhodecode/templates/base/base.html:125 +msgid "Log Out" +msgstr "Wyloguj się" + +#: rhodecode/templates/base/base.html:144 +msgid "Switch repository" +msgstr "Przełącz repozytorium" + +#: rhodecode/templates/base/base.html:146 +msgid "Products" +msgstr "Produkty" + +#: rhodecode/templates/base/base.html:152 +#: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47 +msgid "loading..." +msgstr "wczytywanie..." + +#: rhodecode/templates/base/base.html:158 +#: rhodecode/templates/base/base.html:160 +#: rhodecode/templates/base/base.html:162 +#: rhodecode/templates/data_table/_dt_elements.html:15 +#: rhodecode/templates/data_table/_dt_elements.html:17 +#: rhodecode/templates/data_table/_dt_elements.html:19 +msgid "Summary" +msgstr "Podsumowanie" + +#: rhodecode/templates/base/base.html:166 +#: rhodecode/templates/base/base.html:168 +#: rhodecode/templates/base/base.html:170 +#: rhodecode/templates/changelog/changelog.html:15 +#: rhodecode/templates/data_table/_dt_elements.html:23 +#: rhodecode/templates/data_table/_dt_elements.html:25 +#: rhodecode/templates/data_table/_dt_elements.html:27 +msgid "Changelog" +msgstr "Dziennik zmian" + +#: rhodecode/templates/base/base.html:175 +#: rhodecode/templates/base/base.html:177 +#: rhodecode/templates/base/base.html:179 +msgid "Switch to" +msgstr "Przełącz do" + +#: rhodecode/templates/base/base.html:186 +#: rhodecode/templates/base/base.html:188 +#: rhodecode/templates/base/base.html:190 +#: rhodecode/templates/data_table/_dt_elements.html:31 +#: rhodecode/templates/data_table/_dt_elements.html:33 +#: rhodecode/templates/data_table/_dt_elements.html:35 +msgid "Files" +msgstr "Pliki" + +#: rhodecode/templates/base/base.html:195 +#: rhodecode/templates/base/base.html:199 +msgid "Options" +msgstr "Opcje" + +#: rhodecode/templates/base/base.html:204 +#: rhodecode/templates/base/base.html:206 +msgid "repository settings" +msgstr "ustawienia repozytorium" + +#: rhodecode/templates/base/base.html:210 +#: rhodecode/templates/data_table/_dt_elements.html:80 +#: rhodecode/templates/forks/fork.html:13 +msgid "fork" +msgstr "gałąż" + +#: rhodecode/templates/base/base.html:212 rhodecode/templates/base/root.html:50 +#: rhodecode/templates/changelog/changelog.html:43 +msgid "Open new pull request" +msgstr "Otwórz nową prośbę o połączenie gałęzi" + +#: rhodecode/templates/base/base.html:215 +#: rhodecode/templates/forks/forks_data.html:21 +msgid "Compare fork" +msgstr "Porównaj rozwidlenie" + +#: rhodecode/templates/base/base.html:217 +msgid "search" +msgstr "szukaj" + +#: rhodecode/templates/base/base.html:223 +msgid "lock" +msgstr "zablokowane" + +#: rhodecode/templates/base/base.html:234 +msgid "repositories groups" +msgstr "grupy w repozytorium" + +#: rhodecode/templates/base/base.html:236 +msgid "users groups" +msgstr "grupy użytkowników" + +#: rhodecode/templates/base/base.html:237 +msgid "permissions" +msgstr "uprawnienia" + +#: rhodecode/templates/base/base.html:239 +#, fuzzy +msgid "defaults" +msgstr "domyślne" + +#: rhodecode/templates/base/base.html:240 +msgid "settings" +msgstr "ustawienia" + +#: rhodecode/templates/base/base.html:251 +#: rhodecode/templates/base/base.html:253 +msgid "Followers" +msgstr "Obserwowane" + +#: rhodecode/templates/base/base.html:259 +#: rhodecode/templates/base/base.html:261 +msgid "Forks" +msgstr "Gałęzie" + +#: rhodecode/templates/base/base.html:340 +#: rhodecode/templates/base/base.html:342 +#: rhodecode/templates/base/base.html:344 +#: rhodecode/templates/search/search.html:52 +msgid "Search" +msgstr "Szukaj" + +#: rhodecode/templates/base/root.html:42 +msgid "add another comment" +msgstr "dodaj kolejny komentarz" + +#: rhodecode/templates/base/root.html:43 +#: rhodecode/templates/journal/journal.html:75 +#: rhodecode/templates/summary/summary.html:57 +msgid "Stop following this repository" +msgstr "Zakończyć obserwację tego repozytorium" + +#: rhodecode/templates/base/root.html:44 +#: rhodecode/templates/summary/summary.html:61 +msgid "Start following this repository" +msgstr "Zacznij obserwację tego repozytorium" + +#: rhodecode/templates/base/root.html:45 +msgid "Group" +msgstr "Grupa" + +#: rhodecode/templates/base/root.html:48 +msgid "search truncated" +msgstr "wyszukaj obcięte" + +#: rhodecode/templates/base/root.html:49 +msgid "no matching files" +msgstr "nie ma plików pasujących" + +#: rhodecode/templates/base/root.html:51 +msgid "Open new pull request for selected changesets" +msgstr "Otwórz nową prośbę o połączenie gałęzi w zestawieniu zmian" + +#: rhodecode/templates/base/root.html:52 +msgid "Show selected changes __S -> __E" +msgstr "Pokaż wybrane zmiany __S -> __E" + +#: rhodecode/templates/base/root.html:53 +msgid "Selection link" +msgstr "Wybór linku" + +#: rhodecode/templates/bookmarks/bookmarks.html:5 +#, python-format +msgid "%s Bookmarks" +msgstr "%s Zakładki" + +#: rhodecode/templates/bookmarks/bookmarks.html:39 +#: rhodecode/templates/bookmarks/bookmarks_data.html:8 +#: rhodecode/templates/branches/branches.html:53 +#: rhodecode/templates/branches/branches_data.html:8 +#: rhodecode/templates/tags/tags.html:54 +#: rhodecode/templates/tags/tags_data.html:8 +msgid "Author" +msgstr "Autor" + +#: rhodecode/templates/branches/branches.html:5 +#, python-format +msgid "%s Branches" +msgstr "%s Gałęzie" + +#: rhodecode/templates/branches/branches.html:29 +msgid "Compare branches" +msgstr "porównaj gałęzie" + +#: rhodecode/templates/branches/branches.html:56 +#: rhodecode/templates/branches/branches_data.html:10 +#: rhodecode/templates/compare/compare_diff.html:5 +#: rhodecode/templates/compare/compare_diff.html:13 +#: rhodecode/templates/tags/tags.html:57 +#: rhodecode/templates/tags/tags_data.html:10 +msgid "Compare" +msgstr "Porównaj" + +#: rhodecode/templates/changelog/changelog.html:6 +#, python-format +msgid "%s Changelog" +msgstr "%s Dziennik zmian" + +#: rhodecode/templates/changelog/changelog.html:15 +#, python-format +msgid "showing %d out of %d revision" +msgid_plural "showing %d out of %d revisions" +msgstr[0] "pokazano %d z rewizji %d" +msgstr[1] "pokazano %d w rewizjach %d" +msgstr[2] "pokazano %d w rewizjach %d" + +#: rhodecode/templates/changelog/changelog.html:37 +msgid "Clear selection" +msgstr "Wyczyść zaznaczenie" + +#: rhodecode/templates/changelog/changelog.html:40 +#: rhodecode/templates/forks/forks_data.html:19 +#, python-format +msgid "compare fork with %s" +msgstr "porównaj gałęzie %s" + +#: rhodecode/templates/changelog/changelog.html:40 +#, fuzzy +msgid "Compare fork with parent" +msgstr "porównaj fork w rodzicem" + +#: rhodecode/templates/changelog/changelog.html:49 +msgid "Show" +msgstr "Wyświetl" + +#: rhodecode/templates/changelog/changelog.html:74 +#: rhodecode/templates/summary/summary.html:375 +msgid "show more" +msgstr "pokaż więcej" + +#: rhodecode/templates/changelog/changelog.html:78 +msgid "Affected number of files, click to show more details" +msgstr "Dotyczy liczby plików, kliknij, aby zobaczyć więcej szczegółów" + +#: rhodecode/templates/changelog/changelog.html:91 +#: rhodecode/templates/changeset/changeset.html:44 +#: rhodecode/templates/changeset/changeset_file_comment.html:20 +#: rhodecode/templates/changeset/changeset_range.html:46 +msgid "Changeset status" +msgstr "Status grupy zmian" + +#: rhodecode/templates/changelog/changelog.html:94 +#: rhodecode/templates/shortlog/shortlog_data.html:20 +msgid "Click to open associated pull request" +msgstr "Kliknij żeby otworzyć prośbę o połączenie gałęzi" + +#: rhodecode/templates/changelog/changelog.html:104 +#: rhodecode/templates/changeset/changeset.html:85 +msgid "Parent" +msgstr "Rewizja" + +#: rhodecode/templates/changelog/changelog.html:110 +#: rhodecode/templates/changeset/changeset.html:91 +msgid "No parents" +msgstr "Brak rewizji" + +#: rhodecode/templates/changelog/changelog.html:115 +#: rhodecode/templates/changeset/changeset.html:95 +#: rhodecode/templates/changeset/changeset_range.html:79 +msgid "merge" +msgstr "połącz" + +#: rhodecode/templates/changelog/changelog.html:118 +#: rhodecode/templates/changeset/changeset.html:98 +#: rhodecode/templates/changeset/changeset_range.html:82 +#: rhodecode/templates/files/files.html:29 +#: rhodecode/templates/files/files_add.html:33 +#: rhodecode/templates/files/files_edit.html:33 +#: rhodecode/templates/shortlog/shortlog_data.html:9 +msgid "branch" +msgstr "gałąź" + +#: rhodecode/templates/changelog/changelog.html:124 +#: rhodecode/templates/changeset/changeset_range.html:88 +msgid "bookmark" +msgstr "zakładka" + +#: rhodecode/templates/changelog/changelog.html:130 +#: rhodecode/templates/changeset/changeset.html:103 +#: rhodecode/templates/changeset/changeset_range.html:94 +msgid "tag" +msgstr "etykieta" + +#: rhodecode/templates/changelog/changelog.html:301 +msgid "There are no changes yet" +msgstr "Nie ma jeszcze zmian" + +#: rhodecode/templates/changelog/changelog_details.html:4 +#: rhodecode/templates/changeset/changeset.html:73 +msgid "removed" +msgstr "usunięto" + +#: rhodecode/templates/changelog/changelog_details.html:5 +#: rhodecode/templates/changeset/changeset.html:74 +msgid "changed" +msgstr "zmiana" + +#: rhodecode/templates/changelog/changelog_details.html:6 +#: rhodecode/templates/changeset/changeset.html:75 +msgid "added" +msgstr "dodana" + +#: rhodecode/templates/changelog/changelog_details.html:8 +#: rhodecode/templates/changelog/changelog_details.html:9 +#: rhodecode/templates/changelog/changelog_details.html:10 +#: rhodecode/templates/changeset/changeset.html:77 +#: rhodecode/templates/changeset/changeset.html:78 +#: rhodecode/templates/changeset/changeset.html:79 +#, python-format +msgid "affected %s files" +msgstr "zarażone pliki %s" + +#: rhodecode/templates/changeset/changeset.html:6 +#, python-format +msgid "%s Changeset" +msgstr "%s Grupy zmian" + +#: rhodecode/templates/changeset/changeset.html:14 +msgid "Changeset" +msgstr "Grupy zmian" + +#: rhodecode/templates/changeset/changeset.html:49 +#: rhodecode/templates/changeset/diff_block.html:20 +msgid "raw diff" +msgstr "raw różnic" + +#: rhodecode/templates/changeset/changeset.html:50 +msgid "patch diff" +msgstr "poprawka różnic" + +#: rhodecode/templates/changeset/changeset.html:51 +#: rhodecode/templates/changeset/diff_block.html:21 +msgid "download diff" +msgstr "pobierz różnice" + +#: rhodecode/templates/changeset/changeset.html:55 +#: rhodecode/templates/changeset/changeset_file_comment.html:82 +#, python-format +msgid "%d comment" +msgid_plural "%d comments" +msgstr[0] "%d komentarz" +msgstr[1] "%d komentarzy" +msgstr[2] "%d komentarzy" + +#: rhodecode/templates/changeset/changeset.html:55 +#: rhodecode/templates/changeset/changeset_file_comment.html:82 +#, python-format +msgid "(%d inline)" +msgid_plural "(%d inline)" +msgstr[0] "(%d linii)" +msgstr[1] "(%d linii)" +msgstr[2] "(%d linii)" + +#: rhodecode/templates/changeset/changeset.html:111 +#: rhodecode/templates/compare/compare_diff.html:44 +#: rhodecode/templates/pullrequests/pullrequest_show.html:76 +#, fuzzy, python-format +msgid "%s file changed" +msgid_plural "%s files changed" +msgstr[0] "%s plik zmieniony" +msgstr[1] "%s plików zmienionych" +msgstr[2] "%s plików zmienionych" + +#: rhodecode/templates/changeset/changeset.html:113 +#: rhodecode/templates/compare/compare_diff.html:46 +#: rhodecode/templates/pullrequests/pullrequest_show.html:78 +#, fuzzy, python-format +msgid "%s file changed with %s insertions and %s deletions" +msgid_plural "%s files changed with %s insertions and %s deletions" +msgstr[0] "%s plik zmieniony z %s inserjcami i %s usunieciami" +msgstr[1] "%s plików zmienionych z %s inserjcami i %s usunieciami" +msgstr[2] "%s plików zmienionych z %s inserjcami i %s usunieciami" + +#: rhodecode/templates/changeset/changeset_file_comment.html:42 +msgid "Submitting..." +msgstr "Przesyłanie..." + +#: rhodecode/templates/changeset/changeset_file_comment.html:45 +msgid "Commenting on line {1}." +msgstr "Komentując linię {1}." + +#: rhodecode/templates/changeset/changeset_file_comment.html:46 +#: rhodecode/templates/changeset/changeset_file_comment.html:121 +#, python-format +msgid "Comments parsed using %s syntax with %s support." +msgstr "Komentarze analizowane za pomocą %s składni od %s wsparcia." + +#: rhodecode/templates/changeset/changeset_file_comment.html:48 +#: rhodecode/templates/changeset/changeset_file_comment.html:123 +msgid "Use @username inside this text to send notification to this RhodeCode user" +msgstr "" +"Użyj @username wewnątrz tego tekstu, aby wysłać powiadomienie do " +"użytkownika strony" + +#: rhodecode/templates/changeset/changeset_file_comment.html:59 +#: rhodecode/templates/changeset/changeset_file_comment.html:138 +msgid "Comment" +msgstr "Komentarz" + +#: rhodecode/templates/changeset/changeset_file_comment.html:60 +#: rhodecode/templates/changeset/changeset_file_comment.html:71 +msgid "Hide" +msgstr "Ukryj" + +#: rhodecode/templates/changeset/changeset_file_comment.html:67 +msgid "You need to be logged in to comment." +msgstr "Musisz być zalogowany żeby komentarz." + +#: rhodecode/templates/changeset/changeset_file_comment.html:67 +msgid "Login now" +msgstr "Zaloguj się teraz" + +#: rhodecode/templates/changeset/changeset_file_comment.html:118 +msgid "Leave a comment" +msgstr "Napisz komentarz" + +#: rhodecode/templates/changeset/changeset_file_comment.html:124 +msgid "Check this to change current status of code-review for this changeset" +msgstr "Zaznacz to, aby zmienić bieżący stan code przeglądu tego zestawienia zmian" + +#: rhodecode/templates/changeset/changeset_file_comment.html:124 +msgid "change status" +msgstr "zmień status" + +#: rhodecode/templates/changeset/changeset_file_comment.html:140 +msgid "Comment and close" +msgstr "Skomentuj i zamknij" + +#: rhodecode/templates/changeset/changeset_range.html:5 +#, python-format +msgid "%s Changesets" +msgstr "%s Zestawienie zmian" + +#: rhodecode/templates/changeset/changeset_range.html:29 +#: rhodecode/templates/compare/compare_diff.html:29 +msgid "Compare View" +msgstr "Wyświetl Porównanie" + +#: rhodecode/templates/changeset/changeset_range.html:29 +#, fuzzy +msgid "Show combined compare" +msgstr "pokaż online komentarz" + +#: rhodecode/templates/changeset/changeset_range.html:54 +msgid "Files affected" +msgstr "pliki naruszone" + +#: rhodecode/templates/changeset/diff_block.html:19 +msgid "show full diff for this file" +msgstr "pokaż pełną edycja tego pliku" + +#: rhodecode/templates/changeset/diff_block.html:27 +msgid "show inline comments" +msgstr "pokaż online komentarz" + +#: rhodecode/templates/compare/compare_cs.html:5 +msgid "No changesets" +msgstr "Brak zestawienia zmian" + +#: rhodecode/templates/compare/compare_diff.html:37 +#: rhodecode/templates/pullrequests/pullrequest_show.html:69 +#, fuzzy, python-format +msgid "Showing %s commit" +msgid_plural "Showing %s commits" +msgstr[0] "Wyswietlane %s commit" +msgstr[1] "Wyswietlane %s commits" +msgstr[2] "Wyswietlane %s commits" + +#: rhodecode/templates/compare/compare_diff.html:52 +#: rhodecode/templates/pullrequests/pullrequest_show.html:84 +#, fuzzy +msgid "No files" +msgstr "pliki" + +#: rhodecode/templates/data_table/_dt_elements.html:39 +#: rhodecode/templates/data_table/_dt_elements.html:41 +#: rhodecode/templates/data_table/_dt_elements.html:43 +msgid "Fork" +msgstr "Gałąź" + +#: rhodecode/templates/data_table/_dt_elements.html:60 +#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/summary/summary.html:77 +msgid "Mercurial repository" +msgstr "Repozytorium mercurial" + +#: rhodecode/templates/data_table/_dt_elements.html:62 +#: rhodecode/templates/journal/journal.html:83 +#: rhodecode/templates/summary/summary.html:80 +msgid "Git repository" +msgstr "Repozytorium git" + +#: rhodecode/templates/data_table/_dt_elements.html:69 +#: rhodecode/templates/journal/journal.html:89 +#: rhodecode/templates/summary/summary.html:87 +msgid "public repository" +msgstr "Publiczne repozytorium" + +#: rhodecode/templates/data_table/_dt_elements.html:80 +#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:97 +msgid "Fork of" +msgstr "Gałąź z" + +#: rhodecode/templates/data_table/_dt_elements.html:94 +msgid "No changesets yet" +msgstr "Nie ma jeszcze zestawienia zmian" + +#: rhodecode/templates/data_table/_dt_elements.html:101 +#: rhodecode/templates/data_table/_dt_elements.html:103 +#, python-format +msgid "Subscribe to %s rss feed" +msgstr "Subskrybuj %s kanał rss" + +#: rhodecode/templates/data_table/_dt_elements.html:109 +#: rhodecode/templates/data_table/_dt_elements.html:111 +#, python-format +msgid "Subscribe to %s atom feed" +msgstr "Subskrybuj %s kanał atom" + +#: rhodecode/templates/data_table/_dt_elements.html:122 +#, python-format +msgid "Confirm to delete this user: %s" +msgstr "Potwierdź usunięcie tego użytkownika: %s" + +#: rhodecode/templates/email_templates/changeset_comment.html:10 +#, fuzzy +msgid "New status$" +msgstr "zmień status" + +#: rhodecode/templates/email_templates/main.html:8 +#, fuzzy +msgid "This is a notification from RhodeCode." +msgstr "To jest powiadomienie z strony" + +#: rhodecode/templates/email_templates/password_reset.html:4 +msgid "Hello" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:6 +msgid "We received a request to create a new password for your account." +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:8 +msgid "You can generate it by clicking following URL" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:12 +msgid "If you didn't request new password please ignore this email." +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:4 +#, python-format +msgid "" +"User %s opened pull request for repository %s and wants you to review " +"changes." +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:5 +#, fuzzy +msgid "title" +msgstr "Tytuł" + +#: rhodecode/templates/email_templates/pull_request.html:6 +#: rhodecode/templates/pullrequests/pullrequest.html:115 +msgid "description" +msgstr "opis" + +#: rhodecode/templates/email_templates/pull_request.html:11 +msgid "revisions for reviewing" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:18 +#, fuzzy +msgid "View this pull request here" +msgstr "Pokarz wszystkie zmiany" + +#: rhodecode/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +msgid "User %s commented on pull request #%s for repository %s" +msgstr "" +"Użytkownik %s skomentował wniosek o połączenie gałęzi #%s dla " +"repozytorium %s" + +#: rhodecode/templates/email_templates/pull_request_comment.html:10 +#, fuzzy +msgid "New status" +msgstr "zmień status" + +#: rhodecode/templates/email_templates/pull_request_comment.html:14 +msgid "View this comment here" +msgstr "" + +#: rhodecode/templates/email_templates/registration.html:4 +#, fuzzy +msgid "A new user have registered in RhodeCode" +msgstr "Udało Ci się zarejestrować na stronie" + +#: rhodecode/templates/email_templates/registration.html:9 +msgid "View this user here" +msgstr "" + +#: rhodecode/templates/errors/error_document.html:46 +#, python-format +msgid "You will be redirected to %s in %s seconds" +msgstr "Zostaniesz przekierowany do %s za %s sekund" + +#: rhodecode/templates/files/file_diff.html:4 +#, python-format +msgid "%s File diff" +msgstr "%s Pliki różnic" + +#: rhodecode/templates/files/file_diff.html:12 +msgid "File diff" +msgstr "Pliki różnic" + +#: rhodecode/templates/files/files.html:4 +#: rhodecode/templates/files/files.html:74 +#, python-format +msgid "%s files" +msgstr "Pliki %s" + +#: rhodecode/templates/files/files.html:12 +#: rhodecode/templates/summary/summary.html:351 +msgid "files" +msgstr "pliki" + +#: rhodecode/templates/files/files_add.html:4 +#: rhodecode/templates/files/files_edit.html:4 +#, python-format +msgid "%s Edit file" +msgstr "Edytuj plik %s" + +#: rhodecode/templates/files/files_add.html:19 +msgid "add file" +msgstr "dodaj plik" + +#: rhodecode/templates/files/files_add.html:40 +msgid "Add new file" +msgstr "Dodaj nowy plik" + +#: rhodecode/templates/files/files_add.html:45 +msgid "File Name" +msgstr "Nazwa Pliku" + +#: rhodecode/templates/files/files_add.html:49 +#: rhodecode/templates/files/files_add.html:58 +msgid "or" +msgstr "lub" + +#: rhodecode/templates/files/files_add.html:49 +#: rhodecode/templates/files/files_add.html:54 +msgid "Upload file" +msgstr "Dodaj plik" + +#: rhodecode/templates/files/files_add.html:58 +msgid "Create new file" +msgstr "Utwórz nowy plik" + +#: rhodecode/templates/files/files_add.html:63 +#: rhodecode/templates/files/files_edit.html:39 +#: rhodecode/templates/files/files_ypjax.html:3 +msgid "Location" +msgstr "Położenie" + +#: rhodecode/templates/files/files_add.html:67 +msgid "use / to separate directories" +msgstr "Użyj / do oddzielenia katalogów" + +#: rhodecode/templates/files/files_add.html:77 +#: rhodecode/templates/files/files_edit.html:63 +#: rhodecode/templates/shortlog/shortlog_data.html:6 +msgid "commit message" +msgstr "komentarz" + +#: rhodecode/templates/files/files_add.html:81 +#: rhodecode/templates/files/files_edit.html:67 +msgid "Commit changes" +msgstr "Zatwierdź zmiany" + +#: rhodecode/templates/files/files_browser.html:13 +msgid "view" +msgstr "widok" + +#: rhodecode/templates/files/files_browser.html:14 +msgid "previous revision" +msgstr "poprzednia wersja" + +#: rhodecode/templates/files/files_browser.html:16 +msgid "next revision" +msgstr "następna wersja" + +#: rhodecode/templates/files/files_browser.html:23 +msgid "follow current branch" +msgstr "śledź mierzącą gałąź" + +#: rhodecode/templates/files/files_browser.html:27 +msgid "search file list" +msgstr "lista szukanych plików" + +#: rhodecode/templates/files/files_browser.html:31 +#: rhodecode/templates/shortlog/shortlog_data.html:78 +msgid "add new file" +msgstr "dodaj nowy plik" + +#: rhodecode/templates/files/files_browser.html:35 +msgid "Loading file list..." +msgstr "Wczytywanie listy plików..." + +#: rhodecode/templates/files/files_browser.html:48 +msgid "Size" +msgstr "Rozmiar" + +#: rhodecode/templates/files/files_browser.html:49 +msgid "Mimetype" +msgstr "Typ MIME" + +#: rhodecode/templates/files/files_browser.html:50 +msgid "Last Revision" +msgstr "Rewizja" + +#: rhodecode/templates/files/files_browser.html:51 +msgid "Last modified" +msgstr "Ostatnio modyfikowany" + +#: rhodecode/templates/files/files_browser.html:52 +msgid "Last commiter" +msgstr "Autor" + +#: rhodecode/templates/files/files_edit.html:19 +msgid "edit file" +msgstr "edytuj plik" + +#: rhodecode/templates/files/files_edit.html:49 +#: rhodecode/templates/files/files_source.html:23 +msgid "show annotation" +msgstr "pokaż adnotacje" + +#: rhodecode/templates/files/files_edit.html:50 +#: rhodecode/templates/files/files_source.html:25 +#: rhodecode/templates/files/files_source.html:53 +msgid "show as raw" +msgstr "wyświetl jako raw" + +#: rhodecode/templates/files/files_edit.html:51 +#: rhodecode/templates/files/files_source.html:26 +msgid "download as raw" +msgstr "Pobierz jako raw" + +#: rhodecode/templates/files/files_edit.html:54 +msgid "source" +msgstr "źródło" + +#: rhodecode/templates/files/files_edit.html:59 +msgid "Editing file" +msgstr "Edycja pliku" + +#: rhodecode/templates/files/files_history_box.html:2 +msgid "History" +msgstr "Historia" + +#: rhodecode/templates/files/files_history_box.html:9 +msgid "diff to revision" +msgstr "różnice do rewizji" + +#: rhodecode/templates/files/files_history_box.html:10 +msgid "show at revision" +msgstr "wskaż zmiany" + +#: rhodecode/templates/files/files_history_box.html:11 +#, fuzzy +msgid "show full history" +msgstr "Wczytywanie listy plików..." + +#: rhodecode/templates/files/files_history_box.html:16 +#, python-format +msgid "%s author" +msgid_plural "%s authors" +msgstr[0] "%s autor" +msgstr[1] "%s autorzy" +msgstr[2] "%s autorzy" + +#: rhodecode/templates/files/files_source.html:6 +#, fuzzy +msgid "Load file history" +msgstr "Wczytywanie listy plików..." + +#: rhodecode/templates/files/files_source.html:21 +msgid "show source" +msgstr "pokaż źródło" + +#: rhodecode/templates/files/files_source.html:44 +#, python-format +msgid "Binary file (%s)" +msgstr "Plik binarny (%s)" + +#: rhodecode/templates/files/files_source.html:53 +msgid "File is too big to display" +msgstr "Plik jest za duży do wyświetlenia" + +#: rhodecode/templates/files/files_ypjax.html:5 +msgid "annotation" +msgstr "adnotacja" + +#: rhodecode/templates/files/files_ypjax.html:15 +msgid "Go back" +msgstr "Idź wstecz" + +#: rhodecode/templates/files/files_ypjax.html:16 +msgid "No files at given path" +msgstr "Brak plików w danej ścieżce" + +#: rhodecode/templates/followers/followers.html:5 +#, python-format +msgid "%s Followers" +msgstr "Obserwatorzy %s" + +#: rhodecode/templates/followers/followers.html:13 +msgid "followers" +msgstr "obserwatorzy" + +#: rhodecode/templates/followers/followers_data.html:12 +msgid "Started following -" +msgstr "Rozpoczęto obserwację -" + +#: rhodecode/templates/forks/fork.html:5 +#, python-format +msgid "%s Fork" +msgstr "Gałęzi %s" + +#: rhodecode/templates/forks/fork.html:31 +msgid "Fork name" +msgstr "Nazwa rozgałęzienia" + +#: rhodecode/templates/forks/fork.html:68 +msgid "Private" +msgstr "Prywatny" + +#: rhodecode/templates/forks/fork.html:77 +msgid "Copy permissions" +msgstr "Skopiuj uprawnienia" + +#: rhodecode/templates/forks/fork.html:81 +msgid "Copy permissions from forked repository" +msgstr "Skopiuj zezwolenia z rozwidlenia repozytorium" + +#: rhodecode/templates/forks/fork.html:86 +msgid "Update after clone" +msgstr "Aktualizuj po klonowaniu" + +#: rhodecode/templates/forks/fork.html:90 +msgid "Checkout source after making a clone" +msgstr "Sprawdź źródło po wykonaniu klonowania" + +#: rhodecode/templates/forks/fork.html:94 +msgid "fork this repository" +msgstr "gałąź tego repozytorium" + +#: rhodecode/templates/forks/forks.html:5 +#, python-format +msgid "%s Forks" +msgstr "Gałęzi %s" + +#: rhodecode/templates/forks/forks.html:13 +msgid "forks" +msgstr "gałąź" + +#: rhodecode/templates/forks/forks_data.html:17 +msgid "forked" +msgstr "rozgałęziony" + +#: rhodecode/templates/forks/forks_data.html:42 +msgid "There are no forks yet" +msgstr "Nie ma jeszcze gałęzi" + +#: rhodecode/templates/journal/journal.html:13 +msgid "ATOM journal feed" +msgstr "Dziennik kanału ATOM" + +#: rhodecode/templates/journal/journal.html:14 +msgid "RSS journal feed" +msgstr "Dziennik kanału RSS" + +#: rhodecode/templates/journal/journal.html:24 +#: rhodecode/templates/pullrequests/pullrequest.html:55 +msgid "Refresh" +msgstr "Odśwież" + +#: rhodecode/templates/journal/journal.html:27 +#: rhodecode/templates/journal/public_journal.html:24 +msgid "RSS feed" +msgstr "Kanał RSS" + +#: rhodecode/templates/journal/journal.html:30 +#: rhodecode/templates/journal/public_journal.html:27 +msgid "ATOM feed" +msgstr "Kanał ATOM" + +#: rhodecode/templates/journal/journal.html:41 +msgid "Watched" +msgstr "Obserwowane" + +#: rhodecode/templates/journal/journal.html:46 +msgid "ADD" +msgstr "DODAJ" + +#: rhodecode/templates/journal/journal.html:69 +msgid "following user" +msgstr "następujący użytkownik" + +#: rhodecode/templates/journal/journal.html:69 +msgid "user" +msgstr "użytkownik" + +#: rhodecode/templates/journal/journal.html:102 +msgid "You are not following any users or repositories" +msgstr "Nie obserwujesz żadnych użytkowników lub repozytoriów" + +#: rhodecode/templates/journal/journal_data.html:51 +msgid "No entries yet" +msgstr "Brak wpisów jeszcze" + +#: rhodecode/templates/journal/public_journal.html:13 +msgid "ATOM public journal feed" +msgstr "Publiczny dziennik kanału ATOM" + +#: rhodecode/templates/journal/public_journal.html:14 +msgid "RSS public journal feed" +msgstr "Publiczny dziennik kanału RSS" + +#: rhodecode/templates/journal/public_journal.html:21 +msgid "Public Journal" +msgstr "Dziennik Publiczny" + +#: rhodecode/templates/pullrequests/pullrequest.html:4 +#: rhodecode/templates/pullrequests/pullrequest.html:12 +msgid "New pull request" +msgstr "Nowa prośba o połączenie gałęzi" + +#: rhodecode/templates/pullrequests/pullrequest.html:54 +msgid "refresh overview" +msgstr "odśwież informacje" + +#: rhodecode/templates/pullrequests/pullrequest.html:66 +msgid "Detailed compare view" +msgstr "Szczegółowe porównanie widoku" + +#: rhodecode/templates/pullrequests/pullrequest.html:70 +#: rhodecode/templates/pullrequests/pullrequest_show.html:100 +msgid "Pull request reviewers" +msgstr "Recenzje wniosków połączenia gałęzi" + +#: rhodecode/templates/pullrequests/pullrequest.html:79 +#: rhodecode/templates/pullrequests/pullrequest_show.html:112 +msgid "owner" +msgstr "właściciel" + +#: rhodecode/templates/pullrequests/pullrequest.html:91 +#: rhodecode/templates/pullrequests/pullrequest_show.html:127 +msgid "Add reviewer to this pull request." +msgstr "Pokarz wszystkie zmiany" + +#: rhodecode/templates/pullrequests/pullrequest.html:97 +msgid "Create new pull request" +msgstr "Stwórz nowe żądanie połączenia gałęzi" + +#: rhodecode/templates/pullrequests/pullrequest.html:106 +#: rhodecode/templates/pullrequests/pullrequest_show.html:25 +#: rhodecode/templates/pullrequests/pullrequest_show_all.html:33 +msgid "Title" +msgstr "Tytuł" + +#: rhodecode/templates/pullrequests/pullrequest.html:123 +msgid "Send pull request" +msgstr "Wyślij prośbę o połączenie gałęzi" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:23 +#, python-format +msgid "Closed %s" +msgstr "Zamknięty %s" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:23 +#, python-format +msgid "with status %s" +msgstr "stanu z %s" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:31 +msgid "Status" +msgstr "Status" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:36 +msgid "Pull request status" +msgstr "Żądanie statusu połączenia gałęzi" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:44 +msgid "Still not reviewed by" +msgstr "Nie ma jeszcze recenzenta" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:48 +#, python-format +msgid "%d reviewer" +msgid_plural "%d reviewers" +msgstr[0] "%d recenzent" +msgstr[1] "%d recenzenci" +msgstr[2] "%d recenzentów" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:50 +msgid "pull request was reviewed by all reviewers" +msgstr "połączenie gałęzi zostało zweryfikowane przez wszystkich recenzentów" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:58 +msgid "Created on" +msgstr "Utworzono" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:65 +msgid "Compare view" +msgstr "Wyświetl porównanie" + +#: rhodecode/templates/pullrequests/pullrequest_show_all.html:4 +msgid "all pull requests" +msgstr "wszystkie prośby połączenia gałęzi" + +#: rhodecode/templates/pullrequests/pullrequest_show_all.html:12 +msgid "All pull requests" +msgstr "Wszystkie prośby połączenia gałęzi" + +#: rhodecode/templates/pullrequests/pullrequest_show_all.html:27 +msgid "Closed" +msgstr "Zamknięte" + +#: rhodecode/templates/search/search.html:6 +#, python-format +msgid "Search \"%s\" in repository: %s" +msgstr "Wyszukiwanie \"%s\" w repozytorium: %s" + +#: rhodecode/templates/search/search.html:8 +#, python-format +msgid "Search \"%s\" in all repositories" +msgstr "Wyszukiwanie \"%s\" w wszystkich repozytoriach" + +#: rhodecode/templates/search/search.html:12 +#: rhodecode/templates/search/search.html:32 +#, python-format +msgid "Search in repository: %s" +msgstr "Szukaj w repozytorium: %s" + +#: rhodecode/templates/search/search.html:14 +#: rhodecode/templates/search/search.html:34 +msgid "Search in all repositories" +msgstr "Szukaj we wszystkich repozytoriach" + +#: rhodecode/templates/search/search.html:48 +msgid "Search term" +msgstr "Szukana fraza" + +#: rhodecode/templates/search/search.html:60 +msgid "Search in" +msgstr "Szukaj w" + +#: rhodecode/templates/search/search.html:63 +msgid "File contents" +msgstr "Zawartość pliku" + +#: rhodecode/templates/search/search.html:64 +msgid "Commit messages" +msgstr "Komunikaty" + +#: rhodecode/templates/search/search.html:65 +msgid "File names" +msgstr "Nazwy plików" + +#: rhodecode/templates/search/search_commit.html:35 +#: rhodecode/templates/search/search_content.html:21 +#: rhodecode/templates/search/search_path.html:15 +msgid "Permission denied" +msgstr "Brak uprawnień" + +#: rhodecode/templates/settings/repo_settings.html:5 +#, python-format +msgid "%s Settings" +msgstr "Ustawienia %s" + +#: rhodecode/templates/shortlog/shortlog.html:5 +#, python-format +msgid "%s Shortlog" +msgstr "%s Lista zmian" + +#: rhodecode/templates/shortlog/shortlog.html:15 +#: rhodecode/templates/shortlog/shortlog.html:19 +msgid "shortlog" +msgstr "lista zmian" + +#: rhodecode/templates/shortlog/shortlog_data.html:5 +msgid "revision" +msgstr "rewizja" + +#: rhodecode/templates/shortlog/shortlog_data.html:7 +msgid "age" +msgstr "ostatnia zmiana" + +#: rhodecode/templates/shortlog/shortlog_data.html:8 +msgid "author" +msgstr "autor" + +#: rhodecode/templates/shortlog/shortlog_data.html:75 +msgid "Add or upload files directly via RhodeCode" +msgstr "Dodaj lub prześlij pliki bezpośrednio przez stronę" + +#: rhodecode/templates/shortlog/shortlog_data.html:84 +msgid "Push new repo" +msgstr "Wyślij zmiany do nowego repo" + +#: rhodecode/templates/shortlog/shortlog_data.html:92 +msgid "Existing repository?" +msgstr "Istniejące repozytorium?" + +#: rhodecode/templates/summary/summary.html:4 +#, python-format +msgid "%s Summary" +msgstr "Podsumowanie %s" + +#: rhodecode/templates/summary/summary.html:12 +msgid "summary" +msgstr "Podsumowanie" + +#: rhodecode/templates/summary/summary.html:20 +#, python-format +msgid "repo %s ATOM feed" +msgstr "repo %s kanał ATOM" + +#: rhodecode/templates/summary/summary.html:21 +#, python-format +msgid "repo %s RSS feed" +msgstr "repo %s kanał RSS" + +#: rhodecode/templates/summary/summary.html:49 +#: rhodecode/templates/summary/summary.html:52 +msgid "ATOM" +msgstr "ATOM" + +#: rhodecode/templates/summary/summary.html:70 +#, python-format +msgid "Repository locked by %s" +msgstr "Repozytorium zablokowane przez %s" + +#: rhodecode/templates/summary/summary.html:72 +msgid "Repository unlocked" +msgstr "Repozytorium odblokowane" + +#: rhodecode/templates/summary/summary.html:91 +#, python-format +msgid "Non changable ID %s" +msgstr "Brak ID pełnej zmiany %s" + +#: rhodecode/templates/summary/summary.html:96 +msgid "public" +msgstr "publiczny" + +#: rhodecode/templates/summary/summary.html:104 +msgid "remote clone" +msgstr "zdalne klonowanie" + +#: rhodecode/templates/summary/summary.html:125 +msgid "Contact" +msgstr "Kontakt" + +#: rhodecode/templates/summary/summary.html:139 +msgid "Clone url" +msgstr "Url klonowania" + +#: rhodecode/templates/summary/summary.html:142 +msgid "Show by Name" +msgstr "Pokaż nazwę" + +#: rhodecode/templates/summary/summary.html:143 +msgid "Show by ID" +msgstr "Pokaż ID" + +#: rhodecode/templates/summary/summary.html:151 +msgid "Trending files" +msgstr "Statystyki" + +#: rhodecode/templates/summary/summary.html:159 +#: rhodecode/templates/summary/summary.html:175 +#: rhodecode/templates/summary/summary.html:203 +msgid "enable" +msgstr "włącz" + +#: rhodecode/templates/summary/summary.html:167 +msgid "Download" +msgstr "Pobierz" + +#: rhodecode/templates/summary/summary.html:171 +msgid "There are no downloads yet" +msgstr "Nie pobrano jeszcze plików" + +#: rhodecode/templates/summary/summary.html:173 +msgid "Downloads are disabled for this repository" +msgstr "Pliki do pobrania są zostały wyłączone dla tego repozytorium" + +#: rhodecode/templates/summary/summary.html:179 +msgid "Download as zip" +msgstr "Pobierz jako zip" + +#: rhodecode/templates/summary/summary.html:182 +msgid "Check this to download archive with subrepos" +msgstr "Zaznacz tu żeby pobrać archiwum z subrepozytorium" + +#: rhodecode/templates/summary/summary.html:182 +msgid "with subrepos" +msgstr "z subrepozytorium" + +#: rhodecode/templates/summary/summary.html:195 +msgid "Commit activity by day / author" +msgstr "komunikaty aktywne w ciągu dnia / autor" + +#: rhodecode/templates/summary/summary.html:206 +msgid "Stats gathered: " +msgstr "Statystyki zebrane: " + +#: rhodecode/templates/summary/summary.html:227 +msgid "Shortlog" +msgstr "Lista zmian" + +#: rhodecode/templates/summary/summary.html:229 +msgid "Quick start" +msgstr "Szybki start" + +#: rhodecode/templates/summary/summary.html:243 +#, python-format +msgid "Readme file at revision '%s'" +msgstr "Plik readme w rewizji '%s'" + +#: rhodecode/templates/summary/summary.html:246 +msgid "Permalink to this readme" +msgstr "Link do tego readme" + +#: rhodecode/templates/summary/summary.html:304 +#, python-format +msgid "Download %s as %s" +msgstr "Pobierz %s jak %s" + +#: rhodecode/templates/summary/summary.html:661 +msgid "commits" +msgstr "komunikaty" + +#: rhodecode/templates/summary/summary.html:662 +msgid "files added" +msgstr "pliki dodane" + +#: rhodecode/templates/summary/summary.html:663 +msgid "files changed" +msgstr "pliki zmienione" + +#: rhodecode/templates/summary/summary.html:664 +msgid "files removed" +msgstr "pliki usunięte" + +#: rhodecode/templates/summary/summary.html:667 +msgid "commit" +msgstr "komunikaty" + +#: rhodecode/templates/summary/summary.html:668 +msgid "file added" +msgstr "plik dodany" + +#: rhodecode/templates/summary/summary.html:669 +msgid "file changed" +msgstr "plik zmieniony" + +#: rhodecode/templates/summary/summary.html:670 +msgid "file removed" +msgstr "plik usunięty" + +#: rhodecode/templates/tags/tags.html:5 +#, python-format +msgid "%s Tags" +msgstr "Etykiety pliku %s" + +#: rhodecode/templates/tags/tags.html:29 +#, fuzzy +msgid "Compare tags" +msgstr "porównanie" + diff --git a/rhodecode/i18n/pt_BR/LC_MESSAGES/rhodecode.mo b/rhodecode/i18n/pt_BR/LC_MESSAGES/rhodecode.mo index a28cc6841a8372c932a5fb23c4e497a92e71c005..9d334c102b305f3f326470faa25fc203408872f0 GIT binary patch literal 46472 zc%1Eh37AyXmH&&0iP20Z>tvt2kPyUlw}=r00cpCMrnNVEVG$dARrRX7pz6Kyy{d*r z5J6Eu5m!(XB)G9Co5bvkv9o=dam=F8Op?j2nMoYuOq{Hf|NorxJ8!G12Apw{`G4Qv zPy5un?=I(_d-i+Z^`GAGidzl(XU9o~@lJw|zsX4abKOM4cn!g=1V2dd4uWqc_!z;z zA^0d|CQid2wq)>`gan1Il+T<=;y&Y;QeqN@OZQic>a*! z$poLPL;o)jdBshcMCkRetx)7v) zjd!0#I1ub6*ueD&&SCnVg??Yq@^?)JecBZcOa@(@$)J}%8FajQGVt4~?{`fGz3 z4@|~7e0DPE^%a6|C;0Wrpvx~NgRajLJd4-oY~VllY>aamL6hl!Ht2rnZ1ne~v%!at z>GRJCzLDU+5o}}nQzxhMJUEmJY?LkdTyV*Dqkg8o04igo?fRPgCr&qck{ z&&9Yi&ISH$=K}w3f~OI@=v=I4R_m`g7vruYIFsOBZTGa+fA(Cg@9)mVd{3H&=eJJ- z9o{<)a&^u$;B|?@OQ!*^4bw3GOu1v;AHSIny1nN-@Y_U!^~@LNL65FF5Bl!b^S~$j z6+W!*zkMF?`}gy(uD?4E^EqV(@O{G!JexDX|7XkqKefz2yY3liw?ND785pmq?KaK; zUvHZMyuUL8dgd21uudnwd#5`U<6aBtTpWm%;!c2^FCc$?wKWh0!Ga>gWZFl2L z;Jsre@VR#;*5U9>jQ3fs_lQ1!Rr`5VpPx{C{!#1wRLlQmCf4J*nb1$hEW`K^ftj;V z?>n=wK0lZR{7yb!*M;B(ye|4&Iv?x2=6uj&)A``jJI+V{2lf5u&j%iVr|+LQAM^TW zeg7MMe)(*`*Utu?@1704^uF2P&(_&k?}f9mE``~k%ZAzDzpVt*1h>zIT>O4E@O)V# z*6Gy>%|`S$wGnu=HlpA81eX#VYy=)(ZdCi-h<=`L#JIm}#CWfrgYn-oN9~wCpFIcb zJ8KT=b<6=>7tF!DE}nyRv0sI|uk0 zO=$PpCeZa=O_=Y*CX6$?3GFUwLO*sB`dz8;+9tIhO~CJ-Cd~Ut6Z-#T6ZGL%ntM3wtm;7wdBy!S@o}NAO)NXLDiye=!&MzM~a%oZJd}&25GJ^yzc46?k9X3V&lu zE5^CL75ILn75sK@E9U!1tIBgL{E8=9;b)vS4|Hythxgs{Fpov^fR{B7%ywHV^c9Z5!n8J#AQ@W`fh0f7*cGE&6^}8~T5w4Rrc; z8|eIumQN?8ktNu90oMPa3$U)Az5w%o`~uW_`U2qf`wK9i*I!69B>46Vp%*QJ9>E(f z1f5>qj`^GIpx^23pmTjY=6zl}!NR z>DmFlvO4fQ(t-LLI=~OtbbucBcYux`>p(xF9nhmsbU<$Y&;h&lj!xh`qZ93#^|?!* z7j~lmR43XEYWX#t@IPrT+;ja|TJQWxklvkQ9Q!YwbbjyoUamuva$^Rezn=fj`++I-CCx%uF?lZlx=PVoF5y#EbBa&e4z_M*T3Uhs!Q z@Jj@D>T|jec;D0qdTm#DZy)CIQH7uEgWPcp1U> zE`;3dS_nMuT?o8BwGi_9m4)d4CtB~hg_zF^3qjX6E&|?XEW$d^A~>7i+(n?zHH#o0 z*DgZ44=qAJpIij|Kfeh2{kcVmQ{J^0biZUVo<|6h$~Hc;82tINi_otABIv7ui{R(q zdJ*RJ$VKo&pScMAykUu9kc(}6U`Lw@#7`n%QG(q9j09jdUsx| z{;`&?)8|_*#yad(__2#2A751X6Rm&J0QALM6#nf1=rVo){Y)HCJ23$I%^d*!JN5mN z0q}vVi1_pQo2X9{+PG z_~VVsz%OSl!~4c%=y%aF)LXU;da1k&cwDXZw=Kgu>{eO zh}WK327Y?$C7{#1OHl49y!#U9;m0olpZ@j|@ZtL{=z$&!r$BS))er+I|aHONMT-|NrA3kNMSzTPC@T|U;F*7 zj{Bz+?8~dupv!v{elU%7Z%uv<&r@mO^F!_D=``l|M;-6f4ElLz2K~H;;7J7QGSEL~X29sztr(w$Y9>T&tN@Hv(f&ow#HL7_-}%Z_p@xp!v_A# zZ1h*KG4Ej;biP9Sxy@F8SD){(G2Z?qD5HaW(#O;U~{_u}*0h^03}TKexER z|A^LqRN+rutivB%%;Cl;`0Z(}|9lC4)^GILEF&&@KS2r!jEl?g zL-v-zkI$B|4zC#oJ?n=xZ$1qFZeSSWtQ|(bHxne$Fg`PkdA@HY+6}BkJX2bUyyaI` z!Y}=+RiJC@Dy(0A73j5T73}!IRiO71tH4kHXBFu3>Jh-VjexHvj^O>I5$K8OBUrb& zBcRu!5zx6f0y}qP1oL`g1oZun5%AZkt1)i-%3_20ncG8m#9V)}a1d*1-S! zz#8N&7p=iK+t*;ecdmi_?O%iWetZq&^076*@2NFd=jYa7obhWRN9V3Z{|nZFp3B!l zkFH*eb-raS^v;2`!1Hrj|4VBz&Ue;g{O8xA-~U_-{9kuD#(VeWsNa7%@|L;FLAP&S zj`qL39DMM)b>Pzr)`1`T*Fip3ufsa*U5EOAr|>81faf39VLjh`1^9W|6&U~gD=?qV zD=`11`dq#O{cpSi`0l>~bo%TS;Fm97p?TRW(Erm{054-b@|LHqN4x&@Sihn5p!-^V z-m)I!>{^e04y^}1pIwiB{(e2^`Q&==+0WO5u7AA&^71zuFpsVcsMo&%{bV~O}73BZMtFSJ6uEKmje--fkhpRxJA72H2dhRNWbIL}%f7?bp z*X#4Fjli>KBlP9Mjp+Xxg*!I_ucI45mv3zZ9e%VCdCO-uf}R&%t^HgLJG)Tfbys7Z zzi>71`qtH0w;x`Oc>9H`F;3q#7=QUSnC~6esGYh7^#9~FnExZ!p#DGT^G~l)Iac`c zO~CJOHmU!&N&UY~&=+-^F#ma*K)1!4FwT&cuiFGUyHal zXKqIQ*3FO~XEW;ExEbT#wHbEvbDM$xcQ=D>&u<1@e!Cg?p1cKkow^0_z}vQ9{w-V3 zu5%0IG_wWmZrTFb>te&}rs%=y%C=n2&WG)^F%K=%3I#{0k40(4s`jA z!c(?lUT@n9J%8p_lsj9YXVz`SICpOae|%vp@PB?Q`1h3S!I$s69`rxsdaTp@>miSq zUJrj`{q>;hMt#2JdaTE7TJNFjHJ-a3di1gD;TN5}P2=coct2O4ySKqkF5U)wuiS?D z-?9zy(ucNT-9M(!-`obgpWOz0UvUHM;Tvv1`PnxhuDIX^;9n-#NbuGhu+C53fcgFO z2I$GtZbZBBH^R=(xDj;Tb|dnZ_uL44PP+;G_=cO%?wp&zuU$7`{)0DZJa!ZEmRoPa zydS>_dCS+_4E)#K48FMIX7qdS%^3fIn?aY+n?c`4Zw7yS?`H7N3pXQg`Knv+eCaJ{ zf2BTexdnO458r}y_~R|W_cga--e=ybdB~^frrtOfc?b|`G$G2l%zub=TPTqm~@7Mu4 z&fEcfF4_TkS+N83UbzG9ZrlMoxPOQG2|K{QPig&M?!df%yF2(D)N zy$y2v&~1>9*W3>OdD86|Z_DlAgL`hrx_$C?jQ_YkKYKgyJ>?GY)A&2^zWomPp*F#P zVm$8ve{cQ}=y3Ey;LGPf1bg-R50fuWaQ26xch27lJ#ghtjK6s&=yvB$@Xg0|LLYr$ zC*=9dJCRrX=}yq`%sa6z^X~+HOYa0;m)!}ye#@QUw>@_v@AkPnAulgzxw#8?PTd9m zC=(oDzTO48{CF4gmVexZd0hArtk;T) zu}(X8V?Oun1|E;-`|s?=IzPJ`e(-?yP*HBybJpM5rXpx z{^~B^H|K8BIV`VtL*74eH}v6Y_rOk^cMtNKgZChw*?$k#@4NbZ^1YbPlzZX-_1=qq zx84iC%jagJo%eOR}Z_W|Dx_hFpd?!!F4cpuj1y9$4OANv2RJ*a=i9_Y8( z3avd@hYfo$-w*H6JmVhFd*2@D%cFas7arS#b^OsDjQ6WOkndORMZNmH;IFp5;2&!* zlfA8G~J@W~z_wYXGpC|TVodpLZTW zyVe8X?==T7pHCkEe*d8G2M0jkUmei>YOVL$gPLDFsQKiBp#NNbo_`SYP9Ma27Y|}S z*B%64+Tgb9m4zGL!h^#<->=--&Y?(e;+=C z@%A6m{TVI)q?Ui>kmfD5pQjZ5P{;fEA_`H~002Wf@F4?-R`KL|d)PwRj2LE!g|2SLvtJcu~&_YXo&&prx2cG^+M z|DvP7d%eOfM}gnX3U?lbp4@X3^7;4L{#mX6nvY_?>&+ikfB&OscNal&p^OJU3VU$= zL!fi7!i5iM-tr;PZ}~&$Z{0&Il$Mh*$NOf%^=xDO>1E&cCi><|%PINhh+8&GuIbss zIeVp9Ea&s|`_i)Qm(2H$KfUNJ%Vj3|#(1mF98Z0u%<+rO@$;sS@0dQm*PxQLTPWC0 zDfZLn-x+H}fjkbmWiNnIP{=vuk{$g*q3e`}!XHuuv}`Z_TVD8f+I2F~FDV?cEiZsn z;Pafbww>Xh)}Si@l+dSq&anw^r(~}x86kmu8mj2}xsvORm^t5c+>%+aibXral***c zqU{Y?Mc>Soh={(K_H3&}FI|rsI#z*xW<9rHmWFIIo6Fm#KjN3{f?3SlmT#M0*^yV& zV?LL*N;%gde5{;f(!Z{ku{|t^pSGL`lbr3p^qBp{5G%ODNwofF@H(BCA?NTaPfYx- zukUH;=vvTX&h6^Cu)f}CY;NZN%+8jDW@}GZe|PxQ-`moYc!<64Y3c6jZR_jmS!^`6 zw|6Zx8oS%f750eH*w@t|f53f>>9kuW8EH&2>H>ysqcM{)Es{1nZ$oUPfCx84^C{Sc z6mdNlIV6@$6L}ztm5X`T%79E}Cg<7dQhvl7&RJ&9kejia=s&3{gfIs^w_J>#Wr6e& z(!``I4bhUtMZZC+(3@g8MI<+uliWI1UP@Vegg;^f*dka}cu=ujuyT2RNgW2QZA@&) zbyv_MDFOVAjYLm5zvNky+0tp-_j4%{U+UZ*w!IOTlm($!NfWA{ zv9ne=Ut%sV~0cfvmD9PtPte>*U?^ zaaJ*ge%AF?aM7_AlX$hnuu@WLh{9N1NK==X_c)kIJ)f*M$xXbv>x>lKvadpEG{y`8 zn-8OrWQ6{dyj+T$39&rX9aSushFqfdFzEw}MHzb4H|8|{9egjDMCaUM5z? zM!)2`W-2!*KA3nX`)@(ctUUQZ!2D!Vj6pB5)ghACTO2f-4#6{H>FJ~brZ zj)2RX0^3NkjbC=w+J>N9B!@dG`%qHkNfW!T0)_aoTr3iDXh1T-#(g+f8ZlEN z9DA5&nie#GzSkw-N0v!*0WAv@#DQ$v97EZ8f81K zchk@}Q8igjom#>a__<7?A{P%Q`ITI(Tv`ToZ1IdZo}%?EjU>y&1V}wnP`s4Ik+`>0 zRRBC#i`fa+vq>V7$f?!mgxB5#pGP#U(cIF}*x76}TmDeWwY&`dDp@ce4gA|Snya0! zT4m%oXN39vvRIKUQEeow$igaa6^ko;>!LMi*M-tauI5S>vLRt#*8T+^n%9wlpZ0P^ zF;>kvpDhjH={gfi=8#1Mr?A9A3}Bv5<>)Z{A@L~3s$mH|vm2{DMH(bV$Ci3=szaM+ zv}AIngwG!pXbXN8=Og?TuUgA}=W-T2S*aEt5PwZ8lkwOP<_m0VMn z+6i&fAVN4H9wr7ccdM*XYr;Rklc0y6>Zs0Z>}fXU*+e{J9!tYKVjD(lo=Y|PkMJ=4 zVg)^qN2K?y6nB`894}Q8?A~zN$W8gK*krED z?ZP%t5yI`c662O~SJ7Xw%t5R|vtvf;BQ!59yCPz!JGTA4Kx3v0Z5!_Vka%BC1_>D= zv72*B4Q9X4p{J#>xuXRk3Y!C#dD04*$nf|L25VN1X9SX{kaocDUSQdqCO;4*Rx-W9 zWxXt%YVeJAi&hJ+G=7Vag}-7lCS^TpJ@J%|wS(qiMEI%TlE{-THrg{*QT~K{UE4gj z+hRY%G;=%QEDkoJB+-e!(N4x8uv6qk`Xvqov=BcvBo2PCoO?;HLpX=o+|D$ZjpAdc zgZM!h2Ktv-lC-;5s#C@g?h)I3X*uWd)Z9U{%@NR5E(v4-R41v=VJ{uKS(Yv@e z*P(ud(b=+~rNClD;0c z^NIeAuFjTrT9bC8iz7^@lGrs%g*AQBhs4BIogkm?MOP5fN*l4I!DlYK{IJAV` zUpbUZrd3IGmh%~5UJgQu3}IsoLsE;tSc0WejZ9X_4H^*|oFy^3VG6qg7VECbUSTOx zy5uCT2qlT)aZ%<}HO-{eJb2(c2Th5|T-`6BdPX<#y(RqwiFu7Rx|=2@py7KTFAO$N#6_UvqK6@lC^$65-jHK%w_Yy>o6UbLBCOnVi3 zFgf0#uq5fv$r|#?tdvVAxgJ@qsxC*U$jy|~#1Y-dF9x=(qFwW`KxdmT20V%%MeSFwYjJy{dk&shKE7Dk)Khr@;BCo)?)B zmNce@F~7{I8?jSHPj9c$W7lJO!^Q1kh2A5a1+!_zV&Dnm{R#XsUod57w8zfUl!gcn z5-(9VJdju~nOzt#;?XLXpjwB4+KII)h$X9T=LHWGN7<_gE{8(yA!#bcZE!*_(Oa=c ztVw!=R07zSh;O-RnNYMMm#wcV~I(DmYr4yxbXGsac zj486l*`zvnuJSu-ITHKHTwc@l>Zu4T5@U~qvru*)8uZI4_PKMC$V+*a=v87t=2`Nn zI1=+kK|A8AG0FX5r;?Ew%Ua7>RTj1oa}scV@RkSkgFKrbdH1=jc?mhqCC?qX#LVWc zK~oa56cy0)c^JEdzqOKNcu^RMOA(hOBEMQ?oDKTGV&+s@$}jy9Bbg!saOcv&mGF;$^JXog<+qM<*1IZPv^^- zL~cg(2=yONSaJUW5j1Y9P#V1)NAi{p{a7h~Fs@rj<(!1SMTDuJMQTCnkhyDX4u6V= zEe~-g6eY#T>YBN9^+q&m#oe>q>R{J`*$nS1{XcWrvR<=(76IZ3-a(@fN+C;+{Om6V z5JjsAM>cW9!K__s>{0UjKzgH}$Iq^EUDC>y4WQTxsQ0+qVOW8yNB z&t*r%Wgny!vpMZaJzInRbfdSNk_`+qRUXubl18ue#8G}q{3?#SI5{o{ODf-Zz8}1Z znFWO4CFJCIy^)7Bddco49OxNitq zT@x{?74E|dkK1Nbr&%adZT5+ac3Lt3W zG;T0XMhttA+kj!*A+*Od!;tRoG~fe@X7PE?tJhFJ4y}OmF}@6`odOb zU(^Q$b{wTLFK}wV?2wnM%D* z1^dquza?MkhII9tK#;0lgz59@SBN~RnE4|4#;rNLSHo+ms>B=}E0rx&Q`|R6w*`8= z!R(ICcj?}W)FN{wd3=iuS~;Dood^~C#3@Eg5;>9t@ynje5Vm(%$k#oU#FKFu36OVqwspeS!=<3NzK~L$XXecRF=Kv{A&XqJ! zAP2QC*gb{v@Zy^hP$)_&A(YXVD;j-dlpS_w5Nr2&*wMyV^jNlyK2B5dpNfM%%uV86 zH5mQa^|A%xZ+4@$aU(uWL)G4hfb68i^Tt zSmBWThGzpLixw1y0UNDpzi?o%+7bo!i(9Xz7v}`DC^oOiFq@|j4QePbQ7dL@Z$Shv zu|pd?#X6NlKrYWa@ztk<`lADk24}ZthiizGm6@)a#3C)7{Zy7>Z8%BUmMU}&5)^ICldZJ$KkX!|DNcNV>X}x zQ#lIHoTyTPBuw%rstrh86lt(>f&AHYe5VgqEzKIDj(y9Vn~{A&o~kMhHMDGp5scUD zO2+o_x6*;^kDq9ZKh&()8r0+5;Q~pKM|z8lqb<9@oRc^Bu!Ww4(Ssmt9%99k8<4Vv zmTV##3z=2Zc8(7VTj838qDWbmBXo`V8TB7d)kBA6Uc$$t@vp2 zM8!0>o#2P2kLSckWW2=r=U5kZqKh$K{FnOnVo8wyLMNH%2t+ax8V=W7HWIlm;@f08 z19>AcNGyje@3LFEIA-Eg*pmsX3YwCD^w`70C>p|5wd1pTuy?hQidCkNYA~#-4BQ}< zBI}9M*ny+XbtU%1_X&$*jG5R`PP`ELU1{Z@nWAhMb5l(ITrb&-H%Du#q-3q|Y%|Oj z>1qlq@SsQgr~w*_N;!k6q$d!Et;3fJS^HmIyrr8D)8S6C@pSS1fg#s2OHCZ&cnKXqOu>=76l!q^i^ME!_#4rcP7eGtcvJ>$`l?9 zh=Sxvcs;_2bNf*YY9uyBD5kL;ETx@Xu$szS-k=SV#4yP7i5zSJ^G|8Y>}lkqlQR-iN-(KkqyLe8O4wxYIq?=TrfDvmgCcU z;gCh$tu9t?Eh82+id9?3iKvkMm{?|4kH7>wwU^57YE}+dF_B22LXXNR84sJKCQnIh zhVF1700&DN0cR?#6y8K^Q6uMO=$@x?NjUM~hadgY2$wP8;0GHMhR@qB$iyj#4o?LI zC9mwHTSmFf#I+-B5ho5hmKjqR2~pj~RVA9Dc)xUz!k+ z-*G|V0{I|-3uaS<4_I`;L_}-ccz>LJ>_cWcnJLUwr3#gy8cfaQ%O^h?uWBsk z`pNSf4T=p?7lNfxl}fA1QT!Q_6p3%^M3lI;fzM;`tqozG{8~no2p=HfV*>SUnfe7# zz0+gqqO%$%H%vN}_p-fGeTP4o%hb;)5Bl|e?sT)Iqp_`hc4KpMPfKs_soh-l4Y>E`4~XHBlBe8weUsA7GvuN$v7>74q>lg+cHO#k3iYC!e) z6l8rL*&jd8LELn+u{_9MJDBsxRFb3Ym@_PtGz@9U>_IscOENNxnmdDK@>uKpY^yNc zES8qd=`m-tx6jV!8eDI1)~Vh3vS;P%=ThYBPdA;SJo+;ypJ(Fd%+nonmU-61Q#;x^ zS|Zw~wqloNmP^_CbEA4Zi>&R{w>T7(lfX?k&rRh@ zr?zSegorva-JByC@<|QT8m63Tn9N5xS+$q^76L+PbT=_u#UpMb$XN>XHUiHIV00US z8~sAz=zc)5I>)<|saZiqW<@e=SU<}gzxi2wg-=rl+f=l&N=gKtH!3t+X06;Ht}2|ebVwz>U1 zO^u`1jBek`_U+PXR$d!k=vXV-!*v$dzcyQ{LWzqfyMeNS6exl}frTfz#xu^M`} z!syN1u)C$Fqph#4hrj3?=It=EvAeDEmIe7V&1e)t7>y+&n9-QYrTH8vCj?0-P5M`l zez|_^B~#6nk0QKy8zP$<&^}Syw4LD`e<7>uB8IyZkl4<L_eEUe5H=B74RToJ#;$J2kZ0el zh%tL7UPRTfWSyg*A_u^YGrVbKiLSJAa?Jxx8*E*0xs?Z7!k0bd^>PQJFIeUtiz@M> zCFj(6h==${sGTd(qeJdpavgYUp9RQb&u{d=ur1rq;2Ng}b;F)D5Ru-CRz^A@2})ZT ztL6Z_>yYETd2Y3p!KdL?Wk2NGyZNCUy>8$$RW^TK!nlk*B5sM$F3H{`c`O*4T4uP{ z8n;7qk-z5IWwTt6Pb-dLEbEv7w2L*C;rjUM0wKl0&FQoN4QFpl1dwy8qx#Wap6azcbS&iwf(1Tlhs zZ<4{uN-lwgkYLoR)i9OIQeY&@U18g5)wVdfU@@61C8?IUjKw*ef5k-)&;ch{kEfL? zQv_@@vb^#UrO}T%xdJH>{x~g@Fp9VwqJwR+Xns*JIAP?<4H2Y^Iz;zN`m^Xdkbm3} z(cEeBH4#Q5R1#6i!QAAchz<&rS()(>Rna)Dq5?@Uz0rO389PhD&MKsyLRpxHJZT`B zlwKOq$&(q~M|K%nCm(#IuY|>tlRHba^xQ$);gHSfv?>|}JVLs;=;p-8ndG@=EQ!`e z_Z5Q0RW&%AbJFEJD~qxFBKZl%AEQsXaiYvY7sU~>J+Ivpfx|l}*ca|7LyKfw=8YF24w*H?W(oADW93zXBul zF8H96BMc}%3!K~Mt1n9Sv8&0qm{Cpfv&eVq?`h*zVoWJ;FVJ&);zrp(TjT2@p2lvp^{e+!SV_&2Fpf2sSZx=hGO)CqiKFsoSl|K@!iEno<}umk)_zb!ed#;RWoG8@Bk zj+_wKIxBH$M@(};j@;zU9h?FX4<+hVEkHHjH>w-LRKkTGa^=R@!J@uRbfRUU4_Vnm z_jyGxI&K8m^ zQO?mdAet-ZZ=A|V6QUA%(4@{>?|8M36+!4>iNtEk_8glyzBnXL*2i)~ji&K`tlTYd zdB~d8EvlK6ZxNyR+9R$Z4LJG{mUMONZL=}ZPMjzm{Zxj1N?~X#ERJ<@=gT0hF@%X@KjO8KQx{apMqnX^GYqmBfd7(8|s_^GV1#t>VmuVOrqbVQ#@wcNii?WzB7KN4GY$ zwd-{zT@?2)B7CC>4@0qO8^wER8lqc;PxCW@wfmpA-=xW+n6+F;#x1eju=p*b2ZX(A zC4wm;7_ye*Dhed1QiN<|Z0kt2#p7lTL%I*k98U>LwcxYJco({ZIJ&<+&qlk+%B_;2 zTO>BJcm;hXVHkq5-!!_L9Vb$?65^7-$)OI>A-Vx&ET>AdgCs6A9kTIq(39e*)N-3M zxVZj=C=~<=dJjq%M2Hb*z7w(LTTysa3fjfW@Es^5khpP*f&=K9IgGZC(uyP`zn1bQ z^{(Wp*BHGcU&_%Mgn=iqG|Flyg2aoUrT8mRGb?f$V_k)prPQhv;8p1e;y#x#-6dK- zk0}`6BCCCiN)ya4`vH6mAi4FxQD^u*xKkznXSq;CSkE(hEmGEv~Mm+lHu*(&RXrr^gv#C+E zHvJh^gB6BGA(l?`uKNBKDkgRgJb^|@Nl6B0Xmodw=qG(rNJge;mXIjD+=aE8cA6e5 zLnMi>hFCRtAC;p+tEwBz-a@aW4|2tlOa4bTXH_<^p;ZI)Ob5P5D0e}5p#JzXKZ`Wh z5N|c&Q%YX@%5I&+I++$V7F41fVn~rlB%%aZLuG%-MQm%v8==tXZcZAG54x+kQ$}c; zWSZDEPjZuj*BvQHzbwZ_Jfpv(b9C$f$n7$mg>j4Nqos9{p3*L7-)rPExDO>rv+KlN7yhQamP|k#+W82+kS^LrN>-80 zp554@#2&O=9mSdA^>eN}Bk3v`Qxl+~ z^hTPB7p!GjctHccm&Qt5Op|dF+KkihQtF$68Cza#=>=JMPHYv~KytoSuc*=eTPxVq zv{Z%C8p>@o;>vxK<5EY)Jy74A4f04~1uDvPJx(3mb(QbRkzVfCoIDBLC!6wqy>Q#AvnVWCi z;MN;KAb#(S%{ry}ct=uCx3i(Q>wSrw3%LR=!g2Lxo0?}Lf>)UudwAiy>O59!?QB&- zCTl5!iuB@G2PCT6VcV&?YI}llGL`$_6-t81Cz}N^hdB~|q=)Me4(0SQ(L+*{$H#J( zZo&uWRBFvBk4?9i{8F6-V3o>o{w%lZwC8v?KzKPYS(V%K$c0x_Ddb?zSag$b!d%B# zh%#i1c@Sycz2*p2Tax~P>$gFoZ-Jn)PxX@`KhMNVn`1@7pnpieCgR!M8V4wNLm zT#$$k=bLz2JyO!?ntQ%_uaEdTdYzB979XdrIq@igS5OcO5{OtQcC}B?mYgMvgOJLw z(<+W0C2VoePf$7G$^_1`_*bzze>BL~u$q{x&Ef4-QhsE>5)b^c597-niadgxyREsk z*pkS?H&*PoRqWPCn%x?6yC%^W`-QetAFF)&7}o@KTb^tUkB#&(ZwhL05CV$7%(n#z zpKDg8k(GrUwvfZd7XIHs^1pXUzTvBa@IwFB2%cTTc7YPOGYGn@&y#>Afv%Q`&gC0} z5Vojh=+*S4&36d7{C|4uYw0BIWVDocGreTtDj{mGn@(Nf=^Xfi{FQ*@xCphT&L|p- z2f$`M4i}8>GhGRyWfvgmhBKk`Cb~t)X7xP5(M^RwPfsu!p__f|3?dvVj(#+w;h$S5 zdN$t}A|@a&XZqMR;Kh`~yrUlp_t*>gGQPkeQ5P>{+4HMC z!*k|@flP@C3Pn4UlkGE~FSp8yk8CAoQ5nk@q9aR{QNEmDs!XVm@P>MS4 zoZ%LcL-O9Q!U&rLHlJg4&S zm=Di`*WSUY6MGEa%+lIg^{&Q&(n_gWp`duvHYls!ISq*)P`q0bvwUEIkK_2_xSMhV z5@}o~GrHd)dhwoAwDCzE2Oj~-QRvy1E8+BA+#aDUz*XQJu+Kk%Em~zAOkR(j>_wrX})Mw?AHL zjd4X%7~!kyA}KyER$RlqiJkwcxHPHCF-}T$Y?CG&LA|>{-E0htnR|m>swVus1sv2)1|_CJ`x@UaoR9W+fig{GA}VZ}H^herO4_buu0W5m~;6=HH? zw=Y$;f=-jvz8B^RV+SUze3m~^9Nov8#w5Q!`^uz@S(3#qx5*M6$l4D75+@~4?~H5M zQL>+KZZ(61Xfvucw2b9rH5jZ>EovH#)i0skOLtw99CqLyUy}Qp+QdQ!IUEz$HO0;y z>BUV^jo_TuAZa!Bw_3&Y84E-|$G*$*6-~~~=X^2Gk@l1ivEp9Gi@VY(HkdGyp289_ z3kIo+PEwPa4x9@SKmNMItUNN2?9r~#;|W#zZ;cw9)Ol$pBA59^$&>J4w477W(@$Do zHcXHPEhj<}Cw>#uf`kp0i`fd%#DiN2GCEYKxy7|gpck5P2}Sap=Skq_SK>Ez1MIZ3 zfedB>$3;Hx*6*b>u43aW`49bSv^UsFR*sFGBD7*Jqp>+0@L+Y-dvt{a$xp4KmTavf zGn7!HQ6(TOoo3{J5)cLU;cg)UA}8?vdhIf*QB5vnRAv59QwfT7c~dvDS)OiD^{4tMM^ovggS1#Zvi3QXcTX@E9zI`)k9JP0Qe8 z>#DC04e`Km=SV51-bYO4+#5b!OITNE_ zX4hWi*tI6n5fy1LMsZ@-Q*NkGtsXV395AxxeD{!^^^OkHRevZXak5ZJ9C7kObAzrF zM~80X2a|E8#^cKZ;>DGhXvNQd8!*WVLcy?)dCq$%I4x|XtIy|x>NQ)+Z8~GMsGj~Y zs>Y~&tZKDMUjyl?FD0v(W6V+XSaFT_RusMYl_~Y`DBtng#ZM$0v+j#RJ!*DBWRF)r z4(a1nYm@&)Q!44N1-d5EpHY!&kgy=w9W}xfLZm(8>NhM5RZv(IZm=4f4`&Sqgi!+J z7CP^t1xVQH@axs;Y}px_lLBRxhddRQ`|MYl}j*S`2`^iw!)io-U(n?h0zmw%-b zr#zGQe|Z7m`@j4&^=`yZR3;5{(HlLwDslAHNgig4ok7x9h7)|###~$mYP$1N#kJv= z2)=QA&(nxYd4Le>dmJgE6KM(>5I5HEQ|BVdPIfkD;HzIpyX|)X2soM zxc5yzA=6mQh$JTXb%HjRFQ%)VVvjMZoGRfDuR}WNkC1d@Tq{PF(D1RNTnx94!(Y{B zioW*)9YQRWI&LO3_M(+ppekM0Y;3qSsDL%{C*e_C~A3(S|sn!PFT vv0+YBRP-YkoK\n" "Language-Team: pt_BR \n" @@ -17,35 +17,38 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 0.9.6\n" -#: rhodecode/controllers/changelog.py:94 +#: rhodecode/controllers/changelog.py:95 msgid "All Branches" msgstr "Todos os Ramos" -#: rhodecode/controllers/changeset.py:83 +#: rhodecode/controllers/changeset.py:84 msgid "show white space" msgstr "mostrar espaços em branco" -#: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97 +#: rhodecode/controllers/changeset.py:91 rhodecode/controllers/changeset.py:98 msgid "ignore white space" msgstr "ignorar espaços em branco" -#: rhodecode/controllers/changeset.py:157 +#: rhodecode/controllers/changeset.py:164 #, python-format msgid "%s line context" msgstr "contexto de %s linhas" -#: rhodecode/controllers/changeset.py:333 -#: rhodecode/controllers/changeset.py:348 rhodecode/lib/diffs.py:70 -msgid "binary file" -msgstr "arquivo binário" - -#: rhodecode/controllers/changeset.py:408 +#: rhodecode/controllers/changeset.py:315 +#: rhodecode/controllers/pullrequests.py:411 +#, fuzzy, python-format +msgid "Status change -> %s" +msgstr "Última alteração" + +#: rhodecode/controllers/changeset.py:346 msgid "" "Changing status on a changeset associated witha closed pull request is " "not allowed" msgstr "" -#: rhodecode/controllers/compare.py:69 +#: rhodecode/controllers/compare.py:75 +#: rhodecode/controllers/pullrequests.py:117 +#: rhodecode/controllers/shortlog.py:100 #, fuzzy msgid "There are no changesets yet" msgstr "Ainda não há alteações" @@ -80,101 +83,111 @@ msgstr "" "O servidor encontrou uma condição inesperada que o impediu de satisfazer " "a requisição" -#: rhodecode/controllers/feed.py:49 +#: rhodecode/controllers/feed.py:52 #, python-format msgid "Changes on %s repository" msgstr "Alterações no repositório %s" -#: rhodecode/controllers/feed.py:50 +#: rhodecode/controllers/feed.py:53 #, python-format msgid "%s %s feed" msgstr "%s - feed %s" -#: rhodecode/controllers/feed.py:75 +#: rhodecode/controllers/feed.py:86 +#: rhodecode/templates/changeset/changeset.html:126 +#: rhodecode/templates/changeset/changeset.html:138 +#: rhodecode/templates/compare/compare_diff.html:62 +#: rhodecode/templates/compare/compare_diff.html:73 +#: rhodecode/templates/pullrequests/pullrequest_show.html:94 +#: rhodecode/templates/pullrequests/pullrequest_show.html:153 +msgid "Changeset was too big and was cut off..." +msgstr "Conjunto de mudanças era grande demais e foi cortado..." + +#: rhodecode/controllers/feed.py:92 #, fuzzy msgid "commited on" msgstr "commit" -#: rhodecode/controllers/files.py:84 +#: rhodecode/controllers/files.py:86 #, fuzzy msgid "click here to add new file" msgstr "adicionar novo arquivo" -#: rhodecode/controllers/files.py:85 +#: rhodecode/controllers/files.py:87 #, python-format msgid "There are no files yet %s" msgstr "Ainda não há arquivos %s" -#: rhodecode/controllers/files.py:239 rhodecode/controllers/files.py:299 +#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325 #, python-format msgid "This repository is has been locked by %s on %s" msgstr "" -#: rhodecode/controllers/files.py:266 +#: rhodecode/controllers/files.py:292 #, python-format msgid "Edited %s via RhodeCode" msgstr "Editado %s via RhodeCode" -#: rhodecode/controllers/files.py:271 +#: rhodecode/controllers/files.py:297 msgid "No changes" msgstr "Sem alterações" -#: rhodecode/controllers/files.py:282 rhodecode/controllers/files.py:346 +#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372 #, python-format msgid "Successfully committed to %s" msgstr "Commit realizado com sucesso para %s" -#: rhodecode/controllers/files.py:287 rhodecode/controllers/files.py:352 +#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378 msgid "Error occurred during commit" msgstr "Ocorreu um erro ao realizar commit" -#: rhodecode/controllers/files.py:318 +#: rhodecode/controllers/files.py:344 #, python-format msgid "Added %s via RhodeCode" msgstr "Adicionado %s via RhodeCode" -#: rhodecode/controllers/files.py:332 +#: rhodecode/controllers/files.py:358 msgid "No content" msgstr "Nenhum conteúdo" -#: rhodecode/controllers/files.py:336 +#: rhodecode/controllers/files.py:362 msgid "No filename" msgstr "Nenhum nomes de arquivo" -#: rhodecode/controllers/files.py:378 +#: rhodecode/controllers/files.py:404 msgid "downloads disabled" msgstr "downloads desabilitados" -#: rhodecode/controllers/files.py:389 +#: rhodecode/controllers/files.py:415 #, python-format msgid "Unknown revision %s" msgstr "Revisão desconhecida %s" -#: rhodecode/controllers/files.py:391 +#: rhodecode/controllers/files.py:417 msgid "Empty repository" msgstr "Repositório vazio" -#: rhodecode/controllers/files.py:393 +#: rhodecode/controllers/files.py:419 msgid "Unknown archive type" msgstr "Arquivo de tipo desconhecido" -#: rhodecode/controllers/files.py:494 +#: rhodecode/controllers/files.py:564 #: rhodecode/templates/changeset/changeset_range.html:13 #: rhodecode/templates/changeset/changeset_range.html:31 msgid "Changesets" msgstr "Conjuntos de mudanças" -#: rhodecode/controllers/files.py:495 rhodecode/controllers/pullrequests.py:72 -#: rhodecode/controllers/summary.py:232 rhodecode/model/scm.py:543 +#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:76 +#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550 msgid "Branches" msgstr "Ramos" -#: rhodecode/controllers/files.py:496 rhodecode/controllers/pullrequests.py:76 -#: rhodecode/controllers/summary.py:233 rhodecode/model/scm.py:554 +#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:80 +#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561 msgid "Tags" msgstr "Etiquetas" -#: rhodecode/controllers/forks.py:73 rhodecode/controllers/admin/repos.py:90 +#: rhodecode/controllers/forks.py:74 rhodecode/controllers/admin/repos.py:92 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -185,7 +198,7 @@ msgstr "" "renomeado a partir do sistema de arquivos. Por favor execute a aplicação " "outra vez para varrer novamente por repositórios" -#: rhodecode/controllers/forks.py:133 rhodecode/controllers/settings.py:72 +#: rhodecode/controllers/forks.py:134 rhodecode/controllers/settings.py:73 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -196,23 +209,23 @@ msgstr "" "renomeado a partir do sistema de arquivos. Por favor execute a aplicação " "outra vez para varrer novamente por repositórios" -#: rhodecode/controllers/forks.py:167 +#: rhodecode/controllers/forks.py:168 #, python-format msgid "forked %s repository as %s" msgstr "bifurcado repositório %s como %s" -#: rhodecode/controllers/forks.py:181 +#: rhodecode/controllers/forks.py:182 #, python-format msgid "An error occurred during repository forking %s" msgstr "Ocorreu um erro ao bifurcar o repositório %s" -#: rhodecode/controllers/journal.py:202 rhodecode/controllers/journal.py:239 +#: rhodecode/controllers/journal.py:206 rhodecode/controllers/journal.py:243 #, fuzzy msgid "public journal" msgstr "Diário público" -#: rhodecode/controllers/journal.py:206 rhodecode/controllers/journal.py:243 -#: rhodecode/templates/base/base.html:220 +#: rhodecode/controllers/journal.py:210 rhodecode/controllers/journal.py:247 +#: rhodecode/templates/base/base.html:232 msgid "journal" msgstr "diário" @@ -232,60 +245,60 @@ msgstr "" "Sua reinicialização de senha foi bem sucedida, sua senha foi enviada ao " "seu e-mail" -#: rhodecode/controllers/pullrequests.py:74 rhodecode/model/scm.py:549 +#: rhodecode/controllers/pullrequests.py:78 rhodecode/model/scm.py:556 msgid "Bookmarks" msgstr "Marcadores" -#: rhodecode/controllers/pullrequests.py:158 +#: rhodecode/controllers/pullrequests.py:186 msgid "Pull request requires a title with min. 3 chars" msgstr "" -#: rhodecode/controllers/pullrequests.py:160 +#: rhodecode/controllers/pullrequests.py:188 #, fuzzy msgid "error during creation of pull request" msgstr "ocorreu um erro ao criar o usuário %s" -#: rhodecode/controllers/pullrequests.py:181 +#: rhodecode/controllers/pullrequests.py:220 #, fuzzy msgid "Successfully opened new pull request" msgstr "usuário excluído com sucesso" -#: rhodecode/controllers/pullrequests.py:184 +#: rhodecode/controllers/pullrequests.py:223 #, fuzzy msgid "Error occurred during sending pull request" msgstr "ocorreu um erro ao criar o repositório %s" -#: rhodecode/controllers/pullrequests.py:217 +#: rhodecode/controllers/pullrequests.py:256 #, fuzzy msgid "Successfully deleted pull request" msgstr "usuário excluído com sucesso" -#: rhodecode/controllers/search.py:131 +#: rhodecode/controllers/search.py:134 msgid "Invalid search query. Try quoting it." msgstr "Consulta de busca inválida. Tente usar aspas." -#: rhodecode/controllers/search.py:136 +#: rhodecode/controllers/search.py:139 msgid "There is no index to search in. Please run whoosh indexer" msgstr "Não há índice onde pesquisa. Por favor execute o indexador whoosh" -#: rhodecode/controllers/search.py:140 +#: rhodecode/controllers/search.py:143 msgid "An error occurred during this search operation" msgstr "Ocorreu um erro durante essa operação de busca" -#: rhodecode/controllers/settings.py:107 -#: rhodecode/controllers/admin/repos.py:266 +#: rhodecode/controllers/settings.py:108 +#: rhodecode/controllers/admin/repos.py:268 #, python-format msgid "Repository %s updated successfully" msgstr "Repositório %s atualizado com sucesso" -#: rhodecode/controllers/settings.py:125 -#: rhodecode/controllers/admin/repos.py:284 +#: rhodecode/controllers/settings.py:126 +#: rhodecode/controllers/admin/repos.py:286 #, python-format msgid "error occurred during update of repository %s" msgstr "ocorreu um erro ao atualizar o repositório %s" -#: rhodecode/controllers/settings.py:143 -#: rhodecode/controllers/admin/repos.py:302 +#: rhodecode/controllers/settings.py:144 +#: rhodecode/controllers/admin/repos.py:304 #, python-format msgid "" "%s repository is not mapped to db perhaps it was moved or renamed from " @@ -296,28 +309,59 @@ msgstr "" "renomeado a partir do sistema de arquivos. Por favor execute a aplicação " "outra vez para varrer novamente por repositórios" -#: rhodecode/controllers/settings.py:155 -#: rhodecode/controllers/admin/repos.py:314 +#: rhodecode/controllers/settings.py:156 +#: rhodecode/controllers/admin/repos.py:316 #, python-format msgid "deleted repository %s" msgstr "excluído o repositório %s" -#: rhodecode/controllers/settings.py:159 -#: rhodecode/controllers/admin/repos.py:324 -#: rhodecode/controllers/admin/repos.py:330 +#: rhodecode/controllers/settings.py:160 +#: rhodecode/controllers/admin/repos.py:326 +#: rhodecode/controllers/admin/repos.py:332 #, python-format msgid "An error occurred during deletion of %s" msgstr "Ocorreu um erro durante a exclusão de %s" -#: rhodecode/controllers/summary.py:138 +#: rhodecode/controllers/settings.py:179 +#, fuzzy +msgid "unlocked" +msgstr "destravar" + +#: rhodecode/controllers/settings.py:182 +#, fuzzy +msgid "locked" +msgstr "destravar" + +#: rhodecode/controllers/settings.py:184 +#, fuzzy, python-format +msgid "Repository has been %s" +msgstr "bifurcado repositório %s como %s" + +#: rhodecode/controllers/settings.py:188 +#: rhodecode/controllers/admin/repos.py:424 +#, fuzzy +msgid "An error occurred during unlocking" +msgstr "Ocorreu um erro durante essa operação" + +#: rhodecode/controllers/summary.py:140 msgid "No data loaded yet" msgstr "Ainda não há dados carregados" -#: rhodecode/controllers/summary.py:142 -#: rhodecode/templates/summary/summary.html:148 +#: rhodecode/controllers/summary.py:144 +#: rhodecode/templates/summary/summary.html:157 msgid "Statistics are disabled for this repository" msgstr "As estatísticas estão desabillitadas para este repositório" +#: rhodecode/controllers/admin/defaults.py:96 +#, fuzzy +msgid "Default settings updated successfully" +msgstr "Configurações de LDAP atualizadas com sucesso" + +#: rhodecode/controllers/admin/defaults.py:110 +#, fuzzy +msgid "error occurred during update of defaults" +msgstr "ocorreu um erro ao atualizar o usuário %s" + #: rhodecode/controllers/admin/ldap_settings.py:50 msgid "BASE" msgstr "BASE" @@ -375,18 +419,23 @@ msgid "error occurred during update of l msgstr "ocorreu um erro ao atualizar as configurações de LDAP" #: rhodecode/controllers/admin/permissions.py:59 +#: rhodecode/controllers/admin/permissions.py:63 msgid "None" msgstr "Nenhum" #: rhodecode/controllers/admin/permissions.py:60 +#: rhodecode/controllers/admin/permissions.py:64 msgid "Read" msgstr "Ler" #: rhodecode/controllers/admin/permissions.py:61 +#: rhodecode/controllers/admin/permissions.py:65 msgid "Write" msgstr "Gravar" #: rhodecode/controllers/admin/permissions.py:62 +#: rhodecode/controllers/admin/permissions.py:66 +#: rhodecode/templates/admin/defaults/defaults.html:9 #: rhodecode/templates/admin/ldap/ldap.html:9 #: rhodecode/templates/admin/permissions/permissions.html:9 #: rhodecode/templates/admin/repos/repo_add.html:9 @@ -399,233 +448,228 @@ msgstr "Gravar" #: rhodecode/templates/admin/settings/settings.html:9 #: rhodecode/templates/admin/users/user_add.html:8 #: rhodecode/templates/admin/users/user_edit.html:9 -#: rhodecode/templates/admin/users/user_edit.html:122 +#: rhodecode/templates/admin/users/user_edit.html:126 #: rhodecode/templates/admin/users/users.html:9 #: rhodecode/templates/admin/users_groups/users_group_add.html:8 #: rhodecode/templates/admin/users_groups/users_group_edit.html:9 #: rhodecode/templates/admin/users_groups/users_groups.html:9 #: rhodecode/templates/base/base.html:197 -#: rhodecode/templates/base/base.html:337 -#: rhodecode/templates/base/base.html:339 -#: rhodecode/templates/base/base.html:341 +#: rhodecode/templates/base/base.html:350 +#: rhodecode/templates/base/base.html:352 +#: rhodecode/templates/base/base.html:354 msgid "Admin" msgstr "Administrador" -#: rhodecode/controllers/admin/permissions.py:65 +#: rhodecode/controllers/admin/permissions.py:69 msgid "disabled" msgstr "desabilitado" -#: rhodecode/controllers/admin/permissions.py:67 -msgid "allowed with manual account activation" -msgstr "permitido com ativação manual de conta" - -#: rhodecode/controllers/admin/permissions.py:69 -msgid "allowed with automatic account activation" -msgstr "permitido com ativação automática de conta" - #: rhodecode/controllers/admin/permissions.py:71 -#: rhodecode/controllers/admin/permissions.py:74 +msgid "allowed with manual account activation" +msgstr "permitido com ativação manual de conta" + +#: rhodecode/controllers/admin/permissions.py:73 +msgid "allowed with automatic account activation" +msgstr "permitido com ativação automática de conta" + +#: rhodecode/controllers/admin/permissions.py:75 +#: rhodecode/controllers/admin/permissions.py:78 msgid "Disabled" msgstr "Desabilitado" -#: rhodecode/controllers/admin/permissions.py:72 -#: rhodecode/controllers/admin/permissions.py:75 +#: rhodecode/controllers/admin/permissions.py:76 +#: rhodecode/controllers/admin/permissions.py:79 msgid "Enabled" msgstr "Habilitado" -#: rhodecode/controllers/admin/permissions.py:116 +#: rhodecode/controllers/admin/permissions.py:122 msgid "Default permissions updated successfully" msgstr "Permissões padrões atualizadas com sucesso" -#: rhodecode/controllers/admin/permissions.py:130 +#: rhodecode/controllers/admin/permissions.py:136 msgid "error occurred during update of permissions" msgstr "ocorreu um erro ao atualizar as permissões" -#: rhodecode/controllers/admin/repos.py:123 +#: rhodecode/controllers/admin/repos.py:125 msgid "--REMOVE FORK--" msgstr "--REMOVER BIFURCAÇÂO--" -#: rhodecode/controllers/admin/repos.py:192 +#: rhodecode/controllers/admin/repos.py:194 #, python-format msgid "created repository %s from %s" msgstr "repositório %s criado a partir de %s" -#: rhodecode/controllers/admin/repos.py:196 +#: rhodecode/controllers/admin/repos.py:198 #, python-format msgid "created repository %s" msgstr "repositório %s criado" -#: rhodecode/controllers/admin/repos.py:227 +#: rhodecode/controllers/admin/repos.py:229 #, python-format msgid "error occurred during creation of repository %s" msgstr "ocorreu um erro ao criar o repositório %s" -#: rhodecode/controllers/admin/repos.py:319 +#: rhodecode/controllers/admin/repos.py:321 #, python-format msgid "Cannot delete %s it still contains attached forks" msgstr "Nao é possível excluir %s pois ele ainda contém bifurcações vinculadas" -#: rhodecode/controllers/admin/repos.py:348 +#: rhodecode/controllers/admin/repos.py:350 msgid "An error occurred during deletion of repository user" msgstr "Ocorreu um erro ao excluir usuário de repositório" -#: rhodecode/controllers/admin/repos.py:367 +#: rhodecode/controllers/admin/repos.py:369 msgid "An error occurred during deletion of repository users groups" msgstr "Ocorreu um erro ao excluir grupo de usuário de repositório" -#: rhodecode/controllers/admin/repos.py:385 +#: rhodecode/controllers/admin/repos.py:387 msgid "An error occurred during deletion of repository stats" msgstr "Ocorreu um erro ao excluir estatísticas de repositório" -#: rhodecode/controllers/admin/repos.py:402 +#: rhodecode/controllers/admin/repos.py:404 msgid "An error occurred during cache invalidation" msgstr "Ocorreu um erro ao invalidar o cache" -#: rhodecode/controllers/admin/repos.py:422 -#, fuzzy -msgid "An error occurred during unlocking" -msgstr "Ocorreu um erro durante essa operação" - -#: rhodecode/controllers/admin/repos.py:442 +#: rhodecode/controllers/admin/repos.py:444 msgid "Updated repository visibility in public journal" msgstr "Atualizada a visibilidade do repositório no diário público" -#: rhodecode/controllers/admin/repos.py:446 +#: rhodecode/controllers/admin/repos.py:448 msgid "An error occurred during setting this repository in public journal" msgstr "Ocorreu um erro ao ajustar esse repositório no diário público" -#: rhodecode/controllers/admin/repos.py:451 rhodecode/model/validators.py:299 +#: rhodecode/controllers/admin/repos.py:453 rhodecode/model/validators.py:300 msgid "Token mismatch" msgstr "Descompasso de Token" -#: rhodecode/controllers/admin/repos.py:464 -msgid "Pulled from remote location" -msgstr "Realizado pull de localização remota" - #: rhodecode/controllers/admin/repos.py:466 +msgid "Pulled from remote location" +msgstr "Realizado pull de localização remota" + +#: rhodecode/controllers/admin/repos.py:468 msgid "An error occurred during pull from remote location" msgstr "Ocorreu um erro ao realizar pull de localização remota" -#: rhodecode/controllers/admin/repos.py:482 +#: rhodecode/controllers/admin/repos.py:484 msgid "Nothing" msgstr "Nada" -#: rhodecode/controllers/admin/repos.py:484 +#: rhodecode/controllers/admin/repos.py:486 #, python-format msgid "Marked repo %s as fork of %s" msgstr "Marcado repositório %s como bifurcação de %s" -#: rhodecode/controllers/admin/repos.py:488 +#: rhodecode/controllers/admin/repos.py:490 msgid "An error occurred during this operation" msgstr "Ocorreu um erro durante essa operação" -#: rhodecode/controllers/admin/repos_groups.py:116 +#: rhodecode/controllers/admin/repos_groups.py:120 #, python-format msgid "created repos group %s" msgstr "criado grupo de repositórios %s" -#: rhodecode/controllers/admin/repos_groups.py:129 +#: rhodecode/controllers/admin/repos_groups.py:133 #, python-format msgid "error occurred during creation of repos group %s" msgstr "ccorreu um erro ao criar grupo de repositório %s" -#: rhodecode/controllers/admin/repos_groups.py:163 +#: rhodecode/controllers/admin/repos_groups.py:167 #, python-format msgid "updated repos group %s" msgstr "atualizado grupo de repositórios %s" -#: rhodecode/controllers/admin/repos_groups.py:176 +#: rhodecode/controllers/admin/repos_groups.py:180 #, python-format msgid "error occurred during update of repos group %s" msgstr "ocorreu um erro ao atualizar grupo de repositórios %s" -#: rhodecode/controllers/admin/repos_groups.py:194 +#: rhodecode/controllers/admin/repos_groups.py:198 #, python-format msgid "This group contains %s repositores and cannot be deleted" msgstr "Esse grupo contém %s repositórios e não pode ser excluído" -#: rhodecode/controllers/admin/repos_groups.py:202 +#: rhodecode/controllers/admin/repos_groups.py:206 #, python-format msgid "removed repos group %s" msgstr "removido grupo de repositórios %s" -#: rhodecode/controllers/admin/repos_groups.py:208 +#: rhodecode/controllers/admin/repos_groups.py:212 msgid "Cannot delete this group it still contains subgroups" msgstr "Nao é possível excluir este grupo pois ele ainda contém subgrupos" -#: rhodecode/controllers/admin/repos_groups.py:213 -#: rhodecode/controllers/admin/repos_groups.py:218 +#: rhodecode/controllers/admin/repos_groups.py:217 +#: rhodecode/controllers/admin/repos_groups.py:222 #, python-format msgid "error occurred during deletion of repos group %s" msgstr "ccorreu um erro ao excluir grupo de repositórios %s" -#: rhodecode/controllers/admin/repos_groups.py:238 +#: rhodecode/controllers/admin/repos_groups.py:243 msgid "An error occurred during deletion of group user" msgstr "Ocorreu um erro ao excluir o usuário de grupo" -#: rhodecode/controllers/admin/repos_groups.py:258 +#: rhodecode/controllers/admin/repos_groups.py:264 msgid "An error occurred during deletion of group users groups" msgstr "Ocorreu um erro ao excluir o grupo do grupo de usuários" -#: rhodecode/controllers/admin/settings.py:121 +#: rhodecode/controllers/admin/settings.py:123 #, python-format msgid "Repositories successfully rescanned added: %s,removed: %s" msgstr "Repositórios varridos com sucesso adicionados: %s, removidos: %s" -#: rhodecode/controllers/admin/settings.py:129 +#: rhodecode/controllers/admin/settings.py:131 msgid "Whoosh reindex task scheduled" msgstr "Tarefa de reindexação do whoosh agendada" -#: rhodecode/controllers/admin/settings.py:160 +#: rhodecode/controllers/admin/settings.py:162 msgid "Updated application settings" msgstr "Configurações da aplicação atualizadas" -#: rhodecode/controllers/admin/settings.py:164 -#: rhodecode/controllers/admin/settings.py:275 +#: rhodecode/controllers/admin/settings.py:166 +#: rhodecode/controllers/admin/settings.py:299 msgid "error occurred during updating application settings" msgstr "ocorreu um erro ao atualizar as configurações da aplicação" -#: rhodecode/controllers/admin/settings.py:200 +#: rhodecode/controllers/admin/settings.py:207 #, fuzzy msgid "Updated visualisation settings" msgstr "Configurações da aplicação atualizadas" -#: rhodecode/controllers/admin/settings.py:205 +#: rhodecode/controllers/admin/settings.py:212 #, fuzzy msgid "error occurred during updating visualisation settings" msgstr "ocorreu um erro ao atualizar as configurações da aplicação" -#: rhodecode/controllers/admin/settings.py:271 +#: rhodecode/controllers/admin/settings.py:295 #, fuzzy msgid "Updated VCS settings" msgstr "Atualizadas as configurações do mercurial" -#: rhodecode/controllers/admin/settings.py:285 +#: rhodecode/controllers/admin/settings.py:309 msgid "Added new hook" msgstr "Adicionado novo gancho" -#: rhodecode/controllers/admin/settings.py:297 +#: rhodecode/controllers/admin/settings.py:321 msgid "Updated hooks" msgstr "Atualizados os ganchos" -#: rhodecode/controllers/admin/settings.py:301 +#: rhodecode/controllers/admin/settings.py:325 msgid "error occurred during hook creation" msgstr "ocorreu um erro ao criar gancho" -#: rhodecode/controllers/admin/settings.py:320 +#: rhodecode/controllers/admin/settings.py:344 msgid "Email task created" msgstr "Tarefa de e-mail criada" -#: rhodecode/controllers/admin/settings.py:375 +#: rhodecode/controllers/admin/settings.py:399 msgid "You can't edit this user since it's crucial for entire application" msgstr "Você não pode editar esse usuário pois ele é crucial para toda a aplicação" -#: rhodecode/controllers/admin/settings.py:406 +#: rhodecode/controllers/admin/settings.py:430 msgid "Your account was updated successfully" msgstr "Sua conta foi atualizada com sucesso" -#: rhodecode/controllers/admin/settings.py:421 -#: rhodecode/controllers/admin/users.py:191 +#: rhodecode/controllers/admin/settings.py:445 +#: rhodecode/controllers/admin/users.py:196 #, python-format msgid "error occurred during update of user %s" msgstr "ocorreu um erro ao atualizar o usuário %s" @@ -640,105 +684,105 @@ msgstr "usuário %s criado" msgid "error occurred during creation of user %s" msgstr "ocorreu um erro ao criar o usuário %s" -#: rhodecode/controllers/admin/users.py:171 +#: rhodecode/controllers/admin/users.py:176 msgid "User updated successfully" msgstr "Usuário atualizado com sucesso" -#: rhodecode/controllers/admin/users.py:207 +#: rhodecode/controllers/admin/users.py:212 msgid "successfully deleted user" msgstr "usuário excluído com sucesso" -#: rhodecode/controllers/admin/users.py:212 +#: rhodecode/controllers/admin/users.py:217 msgid "An error occurred during deletion of user" msgstr "Ocorreu um erro ao excluir o usuário" -#: rhodecode/controllers/admin/users.py:226 +#: rhodecode/controllers/admin/users.py:231 msgid "You can't edit this user" msgstr "Você não pode editar esse usuário" -#: rhodecode/controllers/admin/users.py:266 +#: rhodecode/controllers/admin/users.py:272 msgid "Granted 'repository create' permission to user" msgstr "Concedida permissão de 'criar repositório' ao usuário" -#: rhodecode/controllers/admin/users.py:271 +#: rhodecode/controllers/admin/users.py:277 msgid "Revoked 'repository create' permission to user" msgstr "Revogada permissão de 'criar repositório' ao usuário" -#: rhodecode/controllers/admin/users.py:277 +#: rhodecode/controllers/admin/users.py:283 #, fuzzy msgid "Granted 'repository fork' permission to user" msgstr "Concedida permissão de 'criar repositório' ao usuário" -#: rhodecode/controllers/admin/users.py:282 +#: rhodecode/controllers/admin/users.py:288 #, fuzzy msgid "Revoked 'repository fork' permission to user" msgstr "Revogada permissão de 'criar repositório' ao usuário" -#: rhodecode/controllers/admin/users.py:288 -#: rhodecode/controllers/admin/users_groups.py:255 +#: rhodecode/controllers/admin/users.py:294 +#: rhodecode/controllers/admin/users_groups.py:279 #, fuzzy msgid "An error occurred during permissions saving" msgstr "Ocorreu um erro durante essa operação" -#: rhodecode/controllers/admin/users.py:303 +#: rhodecode/controllers/admin/users.py:309 #, python-format msgid "Added email %s to user" msgstr "" -#: rhodecode/controllers/admin/users.py:309 +#: rhodecode/controllers/admin/users.py:315 #, fuzzy msgid "An error occurred during email saving" msgstr "Ocorreu um erro durante essa operação" -#: rhodecode/controllers/admin/users.py:319 +#: rhodecode/controllers/admin/users.py:325 #, fuzzy msgid "Removed email from user" msgstr "removido grupo de repositórios %s" -#: rhodecode/controllers/admin/users_groups.py:84 +#: rhodecode/controllers/admin/users_groups.py:86 #, python-format msgid "created users group %s" msgstr "criado grupo de usuários %s" -#: rhodecode/controllers/admin/users_groups.py:95 +#: rhodecode/controllers/admin/users_groups.py:97 #, python-format msgid "error occurred during creation of users group %s" msgstr "ocorreu um erro ao criar o grupo de usuários %s" -#: rhodecode/controllers/admin/users_groups.py:135 +#: rhodecode/controllers/admin/users_groups.py:164 #, python-format msgid "updated users group %s" msgstr "grupo de usuários %s atualizado" -#: rhodecode/controllers/admin/users_groups.py:157 +#: rhodecode/controllers/admin/users_groups.py:186 #, python-format msgid "error occurred during update of users group %s" msgstr "ocorreu um erro ao atualizar o grupo de usuários %s" -#: rhodecode/controllers/admin/users_groups.py:174 +#: rhodecode/controllers/admin/users_groups.py:203 msgid "successfully deleted users group" msgstr "grupo de usuários excluído com sucesso" -#: rhodecode/controllers/admin/users_groups.py:179 +#: rhodecode/controllers/admin/users_groups.py:208 msgid "An error occurred during deletion of users group" msgstr "Ocorreu um erro ao excluir o grupo de usuários" -#: rhodecode/controllers/admin/users_groups.py:233 +#: rhodecode/controllers/admin/users_groups.py:257 #, fuzzy msgid "Granted 'repository create' permission to users group" msgstr "Concedida permissão de 'criar repositório' ao usuário" -#: rhodecode/controllers/admin/users_groups.py:238 +#: rhodecode/controllers/admin/users_groups.py:262 #, fuzzy msgid "Revoked 'repository create' permission to users group" msgstr "Revogada permissão de 'criar repositório' ao usuário" -#: rhodecode/controllers/admin/users_groups.py:244 +#: rhodecode/controllers/admin/users_groups.py:268 #, fuzzy msgid "Granted 'repository fork' permission to users group" msgstr "Concedida permissão de 'criar repositório' ao usuário" -#: rhodecode/controllers/admin/users_groups.py:249 +#: rhodecode/controllers/admin/users_groups.py:273 #, fuzzy msgid "Revoked 'repository fork' permission to users group" msgstr "Revogada permissão de 'criar repositório' ao usuário" @@ -751,324 +795,349 @@ msgstr "Você precisa ser um usuário registrado para realizar essa ação" msgid "You need to be a signed in to view this page" msgstr "Você precisa estar logado para ver essa página" -#: rhodecode/lib/diffs.py:86 +#: rhodecode/lib/diffs.py:74 +msgid "binary file" +msgstr "arquivo binário" + +#: rhodecode/lib/diffs.py:90 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "" "Conjunto de mudanças é grande demais e foi cortado, use o menu de " "diferenças para ver as diferenças" -#: rhodecode/lib/diffs.py:96 +#: rhodecode/lib/diffs.py:100 msgid "No changes detected" msgstr "Nenhuma alteração detectada" -#: rhodecode/lib/helpers.py:372 +#: rhodecode/lib/helpers.py:373 #, python-format msgid "%a, %d %b %Y %H:%M:%S" msgstr "" -#: rhodecode/lib/helpers.py:484 +#: rhodecode/lib/helpers.py:485 msgid "True" msgstr "Verdadeiro" -#: rhodecode/lib/helpers.py:488 +#: rhodecode/lib/helpers.py:489 msgid "False" msgstr "Falso" +#: rhodecode/lib/helpers.py:529 +#, fuzzy, python-format +msgid "Deleted branch: %s" +msgstr "excluído o repositório %s" + #: rhodecode/lib/helpers.py:532 +#, fuzzy, python-format +msgid "Created tag: %s" +msgstr "usuário %s criado" + +#: rhodecode/lib/helpers.py:545 msgid "Changeset not found" msgstr "Conjunto de alterações não encontrado" -#: rhodecode/lib/helpers.py:555 +#: rhodecode/lib/helpers.py:588 #, python-format msgid "Show all combined changesets %s->%s" msgstr "Ver todos os conjuntos de mudanças combinados %s->%s" -#: rhodecode/lib/helpers.py:561 +#: rhodecode/lib/helpers.py:594 msgid "compare view" msgstr "comparar exibir" -#: rhodecode/lib/helpers.py:581 +#: rhodecode/lib/helpers.py:614 msgid "and" msgstr "e" -#: rhodecode/lib/helpers.py:582 +#: rhodecode/lib/helpers.py:615 #, python-format msgid "%s more" msgstr "%s mais" -#: rhodecode/lib/helpers.py:583 rhodecode/templates/changelog/changelog.html:48 +#: rhodecode/lib/helpers.py:616 rhodecode/templates/changelog/changelog.html:51 msgid "revisions" msgstr "revisões" -#: rhodecode/lib/helpers.py:606 -msgid "fork name " +#: rhodecode/lib/helpers.py:640 +#, fuzzy, python-format +msgid "fork name %s" msgstr "nome da bifurcação" -#: rhodecode/lib/helpers.py:620 +#: rhodecode/lib/helpers.py:653 #: rhodecode/templates/pullrequests/pullrequest_show.html:4 #: rhodecode/templates/pullrequests/pullrequest_show.html:12 #, python-format msgid "Pull request #%s" msgstr "" -#: rhodecode/lib/helpers.py:626 +#: rhodecode/lib/helpers.py:659 msgid "[deleted] repository" msgstr "repositório [excluído]" -#: rhodecode/lib/helpers.py:628 rhodecode/lib/helpers.py:638 +#: rhodecode/lib/helpers.py:661 rhodecode/lib/helpers.py:671 msgid "[created] repository" msgstr "repositório [criado]" -#: rhodecode/lib/helpers.py:630 +#: rhodecode/lib/helpers.py:663 msgid "[created] repository as fork" msgstr "repositório [criado] como uma bifurcação" -#: rhodecode/lib/helpers.py:632 rhodecode/lib/helpers.py:640 +#: rhodecode/lib/helpers.py:665 rhodecode/lib/helpers.py:673 msgid "[forked] repository" msgstr "repositório [bifurcado]" -#: rhodecode/lib/helpers.py:634 rhodecode/lib/helpers.py:642 +#: rhodecode/lib/helpers.py:667 rhodecode/lib/helpers.py:675 msgid "[updated] repository" msgstr "repositório [atualizado]" -#: rhodecode/lib/helpers.py:636 +#: rhodecode/lib/helpers.py:669 msgid "[delete] repository" msgstr "[excluir] repositório" -#: rhodecode/lib/helpers.py:644 +#: rhodecode/lib/helpers.py:677 #, fuzzy msgid "[created] user" msgstr "usuário %s criado" -#: rhodecode/lib/helpers.py:646 +#: rhodecode/lib/helpers.py:679 #, fuzzy msgid "[updated] user" msgstr "grupo de usuários %s atualizado" -#: rhodecode/lib/helpers.py:648 +#: rhodecode/lib/helpers.py:681 #, fuzzy msgid "[created] users group" msgstr "criado grupo de usuários %s" -#: rhodecode/lib/helpers.py:650 +#: rhodecode/lib/helpers.py:683 #, fuzzy msgid "[updated] users group" msgstr "grupo de usuários %s atualizado" -#: rhodecode/lib/helpers.py:652 +#: rhodecode/lib/helpers.py:685 #, fuzzy msgid "[commented] on revision in repository" msgstr "repositório [criado]" -#: rhodecode/lib/helpers.py:654 +#: rhodecode/lib/helpers.py:687 #, fuzzy msgid "[commented] on pull request for" msgstr "repositório [criado]" -#: rhodecode/lib/helpers.py:656 +#: rhodecode/lib/helpers.py:689 #, fuzzy msgid "[closed] pull request for" msgstr "repositório [criado]" -#: rhodecode/lib/helpers.py:658 +#: rhodecode/lib/helpers.py:691 msgid "[pushed] into" msgstr "[realizado push] para" -#: rhodecode/lib/helpers.py:660 +#: rhodecode/lib/helpers.py:693 #, fuzzy msgid "[committed via RhodeCode] into repository" msgstr "[realizado commit via RhodeCode] para" -#: rhodecode/lib/helpers.py:662 +#: rhodecode/lib/helpers.py:695 #, fuzzy msgid "[pulled from remote] into repository" msgstr "[realizado pull remoto] para" -#: rhodecode/lib/helpers.py:664 +#: rhodecode/lib/helpers.py:697 msgid "[pulled] from" msgstr "[realizado pull] a partir de" -#: rhodecode/lib/helpers.py:666 +#: rhodecode/lib/helpers.py:699 msgid "[started following] repository" msgstr "[passou a seguir] o repositório" -#: rhodecode/lib/helpers.py:668 +#: rhodecode/lib/helpers.py:701 msgid "[stopped following] repository" msgstr "[parou de seguir] o repositório" -#: rhodecode/lib/helpers.py:840 +#: rhodecode/lib/helpers.py:877 #, python-format msgid " and %s more" msgstr " e mais %s" -#: rhodecode/lib/helpers.py:844 +#: rhodecode/lib/helpers.py:881 msgid "No Files" msgstr "Nenhum Arquivo" -#: rhodecode/lib/utils2.py:335 +#: rhodecode/lib/utils2.py:403 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d ano" msgstr[1] "%d anos" -#: rhodecode/lib/utils2.py:336 +#: rhodecode/lib/utils2.py:404 #, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "%d mês" msgstr[1] "%d meses" -#: rhodecode/lib/utils2.py:337 +#: rhodecode/lib/utils2.py:405 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d dia" msgstr[1] "%d dias" -#: rhodecode/lib/utils2.py:338 +#: rhodecode/lib/utils2.py:406 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d hora" msgstr[1] "%d horas" -#: rhodecode/lib/utils2.py:339 +#: rhodecode/lib/utils2.py:407 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minuto" msgstr[1] "%d minutos" -#: rhodecode/lib/utils2.py:340 +#: rhodecode/lib/utils2.py:408 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d segundo" msgstr[1] "%d segundos" -#: rhodecode/lib/utils2.py:355 +#: rhodecode/lib/utils2.py:424 +#, fuzzy, python-format +msgid "in %s" +msgstr "na linha %s" + +#: rhodecode/lib/utils2.py:426 #, python-format msgid "%s ago" msgstr "%s atrás" -#: rhodecode/lib/utils2.py:357 +#: rhodecode/lib/utils2.py:428 +#, fuzzy, python-format +msgid "in %s and %s" +msgstr "%s e %s atrás" + +#: rhodecode/lib/utils2.py:431 #, python-format msgid "%s and %s ago" msgstr "%s e %s atrás" -#: rhodecode/lib/utils2.py:360 +#: rhodecode/lib/utils2.py:434 msgid "just now" msgstr "agora há pouco" -#: rhodecode/lib/celerylib/tasks.py:269 +#: rhodecode/lib/celerylib/tasks.py:270 msgid "password reset link" msgstr "link de reinicialização de senha" +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 rhodecode/model/db.py:1180 +#, fuzzy +msgid "Repository no access" +msgstr "repositórios" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1181 +#, fuzzy +msgid "Repository read access" +msgstr "Esse repositório já existe" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1182 +#, fuzzy +msgid "Repository write access" +msgstr "repositórios" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1183 +#, fuzzy +msgid "Repository admin access" +msgstr "repositórios" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1185 +#, fuzzy +msgid "Repositories Group no access" +msgstr "grupos de repositórios" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1186 +#, fuzzy +msgid "Repositories Group read access" +msgstr "grupos de repositórios" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1187 +#, fuzzy +msgid "Repositories Group write access" +msgstr "grupos de repositórios" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1188 +#, fuzzy +msgid "Repositories Group admin access" +msgstr "grupos de repositórios" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1190 +#, fuzzy +msgid "RhodeCode Administrator" +msgstr "Administração de usuários" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1191 +#, fuzzy +msgid "Repository creation disabled" +msgstr "Criação de repositório" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1192 +#, fuzzy +msgid "Repository creation enabled" +msgstr "Criação de repositório" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1193 +#, fuzzy +msgid "Repository forking disabled" +msgstr "Criação de repositório" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1194 +#, fuzzy +msgid "Repository forking enabled" +msgstr "Criação de repositório" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1195 +#, fuzzy +msgid "Register disabled" +msgstr "desabilitado" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1196 +msgid "Register new user with RhodeCode with manual activation" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1199 +msgid "Register new user with RhodeCode with auto activation" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1640 +msgid "Not Reviewed" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1641 +#, fuzzy +msgid "Approved" +msgstr "removidos" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1642 +msgid "Rejected" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1643 +msgid "Under Review" +msgstr "" + #: rhodecode/model/comment.py:110 #, python-format msgid "on line %s" msgstr "na linha %s" -#: rhodecode/model/comment.py:157 +#: rhodecode/model/comment.py:173 msgid "[Mention]" msgstr "[Menção]" -#: rhodecode/model/db.py:1140 -#, fuzzy -msgid "Repository no access" -msgstr "repositórios" - -#: rhodecode/model/db.py:1141 -#, fuzzy -msgid "Repository read access" -msgstr "Esse repositório já existe" - -#: rhodecode/model/db.py:1142 -#, fuzzy -msgid "Repository write access" -msgstr "repositórios" - -#: rhodecode/model/db.py:1143 -#, fuzzy -msgid "Repository admin access" -msgstr "repositórios" - -#: rhodecode/model/db.py:1145 -#, fuzzy -msgid "Repositories Group no access" -msgstr "grupos de repositórios" - -#: rhodecode/model/db.py:1146 -#, fuzzy -msgid "Repositories Group read access" -msgstr "grupos de repositórios" - -#: rhodecode/model/db.py:1147 -#, fuzzy -msgid "Repositories Group write access" -msgstr "grupos de repositórios" - -#: rhodecode/model/db.py:1148 -#, fuzzy -msgid "Repositories Group admin access" -msgstr "grupos de repositórios" - -#: rhodecode/model/db.py:1150 -#, fuzzy -msgid "RhodeCode Administrator" -msgstr "Administração de usuários" - -#: rhodecode/model/db.py:1151 -#, fuzzy -msgid "Repository creation disabled" -msgstr "Criação de repositório" - -#: rhodecode/model/db.py:1152 -#, fuzzy -msgid "Repository creation enabled" -msgstr "Criação de repositório" - -#: rhodecode/model/db.py:1153 -#, fuzzy -msgid "Repository forking disabled" -msgstr "Criação de repositório" - -#: rhodecode/model/db.py:1154 -#, fuzzy -msgid "Repository forking enabled" -msgstr "Criação de repositório" - -#: rhodecode/model/db.py:1155 -#, fuzzy -msgid "Register disabled" -msgstr "desabilitado" - -#: rhodecode/model/db.py:1156 -msgid "Register new user with RhodeCode with manual activation" -msgstr "" - -#: rhodecode/model/db.py:1159 -msgid "Register new user with RhodeCode with auto activation" -msgstr "" - -#: rhodecode/model/db.py:1579 -msgid "Not Reviewed" -msgstr "" - -#: rhodecode/model/db.py:1580 -#, fuzzy -msgid "Approved" -msgstr "removidos" - -#: rhodecode/model/db.py:1581 -msgid "Rejected" -msgstr "" - -#: rhodecode/model/db.py:1582 -msgid "Under Review" -msgstr "" - #: rhodecode/model/forms.py:43 msgid "Please enter a login" msgstr "Por favor entre um login" @@ -1088,36 +1157,41 @@ msgid "Enter %(min)i characters or more" msgstr "Entre com %(min)i caracteres ou mais" #: rhodecode/model/notification.py:220 -msgid "commented on commit" +#, fuzzy, python-format +msgid "commented on commit at %(when)s" msgstr "comentado no commit" #: rhodecode/model/notification.py:221 -msgid "sent message" +#, fuzzy, python-format +msgid "sent message at %(when)s" msgstr "mensagem enviada" #: rhodecode/model/notification.py:222 -msgid "mentioned you" +#, fuzzy, python-format +msgid "mentioned you at %(when)s" msgstr "mencionou você" #: rhodecode/model/notification.py:223 -msgid "registered in RhodeCode" +#, fuzzy, python-format +msgid "registered in RhodeCode at %(when)s" msgstr "registrado no RhodeCode" #: rhodecode/model/notification.py:224 -msgid "opened new pull request" -msgstr "" +#, fuzzy, python-format +msgid "opened new pull request at %(when)s" +msgstr "comentado no commit" #: rhodecode/model/notification.py:225 -#, fuzzy -msgid "commented on pull request" +#, fuzzy, python-format +msgid "commented on pull request at %(when)s" msgstr "comentado no commit" -#: rhodecode/model/pull_request.py:84 +#: rhodecode/model/pull_request.py:90 #, python-format msgid "%(user)s wants you to review pull request #%(pr_id)s" msgstr "" -#: rhodecode/model/scm.py:535 +#: rhodecode/model/scm.py:542 #, fuzzy msgid "latest tip" msgstr "último login" @@ -1126,20 +1200,20 @@ msgstr "último login" msgid "new user registration" msgstr "registro de novo usuário" -#: rhodecode/model/user.py:255 rhodecode/model/user.py:277 -#: rhodecode/model/user.py:299 +#: rhodecode/model/user.py:255 rhodecode/model/user.py:279 +#: rhodecode/model/user.py:301 msgid "You can't Edit this user since it's crucial for entire application" msgstr "" "Você não pode Editar esse usuário, pois ele é crucial para toda a " "aplicação" -#: rhodecode/model/user.py:323 +#: rhodecode/model/user.py:325 msgid "You can't remove this user since it's crucial for entire application" msgstr "" "Você não pode remover esse usuário, pois ele é crucial para toda a " "aplicação" -#: rhodecode/model/user.py:329 +#: rhodecode/model/user.py:331 #, python-format msgid "" "user \"%s\" still owns %s repositories and cannot be removed. Switch " @@ -1148,21 +1222,21 @@ msgstr "" "usuário \"%s\" ainda é dono de %s repositórios e não pode ser removido. " "Troque os donos ou remova esses repositórios. %s" -#: rhodecode/model/validators.py:35 rhodecode/model/validators.py:36 +#: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37 msgid "Value cannot be an empty list" msgstr "" -#: rhodecode/model/validators.py:82 +#: rhodecode/model/validators.py:83 #, fuzzy, python-format msgid "Username \"%(username)s\" already exists" msgstr "Esse nome de usuário já existe" -#: rhodecode/model/validators.py:84 +#: rhodecode/model/validators.py:85 #, python-format msgid "Username \"%(username)s\" is forbidden" msgstr "" -#: rhodecode/model/validators.py:86 +#: rhodecode/model/validators.py:87 msgid "" "Username may only contain alphanumeric characters underscores, periods or" " dashes and must begin with alphanumeric character" @@ -1170,22 +1244,22 @@ msgstr "" "Nome de usuário pode conter somente caracteres alfanuméricos, sublinha, " "pontos e hífens e deve iniciar com caractere alfanumérico" -#: rhodecode/model/validators.py:114 +#: rhodecode/model/validators.py:115 #, fuzzy, python-format msgid "Username %(username)s is not valid" msgstr "Esse nome de usuário ou nome de grupo de usuários não é válido" -#: rhodecode/model/validators.py:133 +#: rhodecode/model/validators.py:134 #, fuzzy msgid "Invalid users group name" msgstr "nome de usuário inválido" -#: rhodecode/model/validators.py:134 +#: rhodecode/model/validators.py:135 #, fuzzy, python-format msgid "Users group \"%(usersgroup)s\" already exists" msgstr "Esse grupo de usuários já existe" -#: rhodecode/model/validators.py:136 +#: rhodecode/model/validators.py:137 msgid "" "users group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" @@ -1194,93 +1268,98 @@ msgstr "" "alfanuméricos, sublinha, pontos e hífens e deve iniciar com caractere " "alfanumérico" -#: rhodecode/model/validators.py:174 +#: rhodecode/model/validators.py:175 msgid "Cannot assign this group as parent" msgstr "Não é possível associar esse grupo como progenitor" -#: rhodecode/model/validators.py:175 +#: rhodecode/model/validators.py:176 #, fuzzy, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "Esse nome de usuário já existe" -#: rhodecode/model/validators.py:177 +#: rhodecode/model/validators.py:178 #, fuzzy, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "Já existe um repositório com esse nome" -#: rhodecode/model/validators.py:235 +#: rhodecode/model/validators.py:236 #, fuzzy msgid "Invalid characters (non-ascii) in password" msgstr "Caracteres inválidos na senha" -#: rhodecode/model/validators.py:250 +#: rhodecode/model/validators.py:251 msgid "Passwords do not match" msgstr "Senhas não conferem" -#: rhodecode/model/validators.py:267 -msgid "invalid password" -msgstr "senha inválida" - #: rhodecode/model/validators.py:268 -msgid "invalid user name" -msgstr "nome de usuário inválido" +msgid "invalid password" +msgstr "senha inválida" #: rhodecode/model/validators.py:269 +msgid "invalid user name" +msgstr "nome de usuário inválido" + +#: rhodecode/model/validators.py:270 msgid "Your account is disabled" msgstr "Sua conta está desabilitada" -#: rhodecode/model/validators.py:313 +#: rhodecode/model/validators.py:314 #, fuzzy, python-format msgid "Repository name %(repo)s is disallowed" msgstr "Esse nome de repositório não é permitido" -#: rhodecode/model/validators.py:315 +#: rhodecode/model/validators.py:316 #, fuzzy, python-format msgid "Repository named %(repo)s already exists" msgstr "Já existe um repositório com esse nome" -#: rhodecode/model/validators.py:316 +#: rhodecode/model/validators.py:317 #, fuzzy, python-format msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" msgstr "Esse repositório já existe em um grupo \"%s\"" -#: rhodecode/model/validators.py:318 +#: rhodecode/model/validators.py:319 #, fuzzy, python-format msgid "Repositories group with name \"%(repo)s\" already exists" msgstr "Já existe um repositório com esse nome" -#: rhodecode/model/validators.py:431 +#: rhodecode/model/validators.py:432 msgid "invalid clone url" msgstr "URL de clonagem inválida" -#: rhodecode/model/validators.py:432 +#: rhodecode/model/validators.py:433 #, fuzzy msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url" msgstr "URL de clonagem inválida, forneça uma URL válida de clonagem http\\s" -#: rhodecode/model/validators.py:457 +#: rhodecode/model/validators.py:458 #, fuzzy msgid "Fork have to be the same type as parent" msgstr "Bifurcação precisa ser do mesmo tipo que o original" -#: rhodecode/model/validators.py:478 +#: rhodecode/model/validators.py:473 +#, fuzzy +msgid "You don't have permissions to create repository in this group" +msgstr "Você não tem permissão para ver esta página" + +#: rhodecode/model/validators.py:498 msgid "This username or users group name is not valid" msgstr "Esse nome de usuário ou nome de grupo de usuários não é válido" -#: rhodecode/model/validators.py:562 +#: rhodecode/model/validators.py:582 msgid "This is not a valid path" msgstr "Esse não é um caminho válido" -#: rhodecode/model/validators.py:577 +#: rhodecode/model/validators.py:597 msgid "This e-mail address is already taken" msgstr "Esse endereço de e-mail já está tomado" -#: rhodecode/model/validators.py:597 +#: rhodecode/model/validators.py:617 #, fuzzy, python-format msgid "e-mail \"%(email)s\" does not exist." msgstr "Esse endereço de e-mail não existe." -#: rhodecode/model/validators.py:634 +#: rhodecode/model/validators.py:654 msgid "" "The LDAP Login attribute of the CN must be specified - this is the name " "of the attribute that is equivalent to \"username\"" @@ -1288,7 +1367,7 @@ msgstr "" "O atributo de login LDAP do CN deve ser especificado - isto é o nome do " "atributo que é equivalente ao 'nome de usuário'" -#: rhodecode/model/validators.py:653 +#: rhodecode/model/validators.py:673 #, python-format msgid "Revisions %(revs)s are already part of pull request or have set status" msgstr "" @@ -1311,7 +1390,7 @@ msgstr "filtro rápido..." #: rhodecode/templates/index_base.html:6 #: rhodecode/templates/admin/repos/repos.html:9 -#: rhodecode/templates/base/base.html:221 +#: rhodecode/templates/base/base.html:233 msgid "repositories" msgstr "repositórios" @@ -1322,6 +1401,7 @@ msgid "ADD REPOSITORY" msgstr "ADICIONAR REPOSITÓRIO" #: rhodecode/templates/index_base.html:29 +#: rhodecode/templates/index_base.html:136 #: 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 @@ -1331,9 +1411,10 @@ msgid "Group name" msgstr "Nome do grupo" #: rhodecode/templates/index_base.html:30 -#: rhodecode/templates/index_base.html:71 -#: rhodecode/templates/index_base.html:142 -#: rhodecode/templates/index_base.html:168 +#: rhodecode/templates/index_base.html:72 +#: rhodecode/templates/index_base.html:138 +#: rhodecode/templates/index_base.html:176 +#: rhodecode/templates/index_base.html:266 #: rhodecode/templates/admin/repos/repo_add_base.html:56 #: rhodecode/templates/admin/repos/repo_edit.html:75 #: rhodecode/templates/admin/repos/repos.html:72 @@ -1342,142 +1423,137 @@ msgstr "Nome do grupo" #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34 #: rhodecode/templates/forks/fork.html:59 #: rhodecode/templates/settings/repo_settings.html:66 -#: rhodecode/templates/summary/summary.html:105 +#: rhodecode/templates/summary/summary.html:114 msgid "Description" msgstr "Descrição" #: rhodecode/templates/index_base.html:40 -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47 msgid "Repositories group" msgstr "Grupo de repositórios" -#: rhodecode/templates/index_base.html:70 -#: rhodecode/templates/index_base.html:166 +#: rhodecode/templates/index_base.html:71 +#: rhodecode/templates/index_base.html:174 +#: rhodecode/templates/index_base.html:264 #: rhodecode/templates/admin/repos/repo_add_base.html:9 #: rhodecode/templates/admin/repos/repo_edit.html:32 #: rhodecode/templates/admin/repos/repos.html:70 -#: rhodecode/templates/admin/users/user_edit.html:192 +#: rhodecode/templates/admin/users/user_edit.html:196 #: rhodecode/templates/admin/users/user_edit_my_account.html:59 -#: rhodecode/templates/admin/users/user_edit_my_account.html:157 -#: rhodecode/templates/admin/users/user_edit_my_account.html:193 +#: rhodecode/templates/admin/users/user_edit_my_account.html:180 +#: rhodecode/templates/admin/users/user_edit_my_account.html:216 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:6 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:184 #: rhodecode/templates/bookmarks/bookmarks.html:36 #: rhodecode/templates/bookmarks/bookmarks_data.html:6 -#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches.html:50 +#: rhodecode/templates/branches/branches_data.html:6 #: rhodecode/templates/files/files_browser.html:47 -#: rhodecode/templates/journal/journal.html:59 -#: rhodecode/templates/journal/journal.html:107 -#: rhodecode/templates/journal/journal.html:186 +#: rhodecode/templates/journal/journal.html:62 +#: rhodecode/templates/journal/journal.html:168 +#: rhodecode/templates/journal/journal_page_repos.html:7 #: rhodecode/templates/settings/repo_settings.html:31 #: rhodecode/templates/summary/summary.html:43 -#: rhodecode/templates/summary/summary.html:123 -#: rhodecode/templates/tags/tags.html:36 +#: rhodecode/templates/summary/summary.html:132 +#: rhodecode/templates/tags/tags.html:51 #: rhodecode/templates/tags/tags_data.html:6 msgid "Name" msgstr "Nome" -#: rhodecode/templates/index_base.html:72 +#: rhodecode/templates/index_base.html:73 msgid "Last change" msgstr "Última alteração" -#: rhodecode/templates/index_base.html:73 -#: rhodecode/templates/index_base.html:171 -#: rhodecode/templates/admin/users/user_edit_my_account.html:159 -#: rhodecode/templates/journal/journal.html:188 +#: rhodecode/templates/index_base.html:74 +#: rhodecode/templates/index_base.html:179 +#: rhodecode/templates/admin/users/user_edit_my_account.html:182 +#: rhodecode/templates/journal/journal.html:170 msgid "Tip" msgstr "Ponta" -#: rhodecode/templates/index_base.html:74 -#: rhodecode/templates/index_base.html:173 +#: rhodecode/templates/index_base.html:75 +#: rhodecode/templates/index_base.html:181 +#: rhodecode/templates/index_base.html:269 #: rhodecode/templates/admin/repos/repo_edit.html:121 #: rhodecode/templates/admin/repos/repos.html:73 msgid "Owner" msgstr "Dono" -#: rhodecode/templates/index_base.html:75 +#: rhodecode/templates/index_base.html:76 #: rhodecode/templates/summary/summary.html:48 #: rhodecode/templates/summary/summary.html:51 msgid "RSS" msgstr "RSS" -#: rhodecode/templates/index_base.html:76 +#: rhodecode/templates/index_base.html:77 msgid "Atom" msgstr "Atom" -#: rhodecode/templates/index_base.html:110 -#: rhodecode/templates/index_base.html:112 -#, python-format -msgid "Subscribe to %s rss feed" -msgstr "Assinar o feed rss de %s" - -#: rhodecode/templates/index_base.html:117 -#: rhodecode/templates/index_base.html:119 -#, python-format -msgid "Subscribe to %s atom feed" -msgstr "Assinar o feed atom de %s" - -#: rhodecode/templates/index_base.html:140 -msgid "Group Name" -msgstr "Nome do Grupo" - -#: rhodecode/templates/index_base.html:158 -#: rhodecode/templates/index_base.html:198 +#: rhodecode/templates/index_base.html:167 +#: rhodecode/templates/index_base.html:207 +#: rhodecode/templates/index_base.html:291 #: rhodecode/templates/admin/repos/repos.html:94 -#: rhodecode/templates/admin/users/user_edit_my_account.html:179 +#: rhodecode/templates/admin/users/user_edit_my_account.html:202 #: rhodecode/templates/admin/users/users.html:107 #: rhodecode/templates/bookmarks/bookmarks.html:60 -#: rhodecode/templates/branches/branches.html:77 -#: rhodecode/templates/journal/journal.html:211 -#: rhodecode/templates/tags/tags.html:60 +#: rhodecode/templates/branches/branches.html:76 +#: rhodecode/templates/journal/journal.html:193 +#: rhodecode/templates/tags/tags.html:77 msgid "Click to sort ascending" msgstr "Clique para ordenar em ordem crescente" -#: rhodecode/templates/index_base.html:159 -#: rhodecode/templates/index_base.html:199 +#: rhodecode/templates/index_base.html:168 +#: rhodecode/templates/index_base.html:208 +#: rhodecode/templates/index_base.html:292 #: rhodecode/templates/admin/repos/repos.html:95 -#: rhodecode/templates/admin/users/user_edit_my_account.html:180 +#: rhodecode/templates/admin/users/user_edit_my_account.html:203 #: rhodecode/templates/admin/users/users.html:108 #: rhodecode/templates/bookmarks/bookmarks.html:61 -#: rhodecode/templates/branches/branches.html:78 -#: rhodecode/templates/journal/journal.html:212 -#: rhodecode/templates/tags/tags.html:61 +#: rhodecode/templates/branches/branches.html:77 +#: rhodecode/templates/journal/journal.html:194 +#: rhodecode/templates/tags/tags.html:78 msgid "Click to sort descending" msgstr "Clique para ordenar em ordem descrescente" -#: rhodecode/templates/index_base.html:169 +#: rhodecode/templates/index_base.html:177 +#: rhodecode/templates/index_base.html:267 msgid "Last Change" msgstr "Última Alteração" -#: rhodecode/templates/index_base.html:200 +#: rhodecode/templates/index_base.html:209 +#: rhodecode/templates/index_base.html:293 #: rhodecode/templates/admin/repos/repos.html:96 -#: rhodecode/templates/admin/users/user_edit_my_account.html:181 +#: rhodecode/templates/admin/users/user_edit_my_account.html:204 #: rhodecode/templates/admin/users/users.html:109 #: rhodecode/templates/bookmarks/bookmarks.html:62 -#: rhodecode/templates/branches/branches.html:79 -#: rhodecode/templates/journal/journal.html:213 -#: rhodecode/templates/tags/tags.html:62 +#: rhodecode/templates/branches/branches.html:78 +#: rhodecode/templates/journal/journal.html:195 +#: rhodecode/templates/tags/tags.html:79 msgid "No records found." msgstr "Nenhum registro encontrado." -#: rhodecode/templates/index_base.html:201 +#: rhodecode/templates/index_base.html:210 +#: rhodecode/templates/index_base.html:294 #: rhodecode/templates/admin/repos/repos.html:97 -#: rhodecode/templates/admin/users/user_edit_my_account.html:182 +#: rhodecode/templates/admin/users/user_edit_my_account.html:205 #: rhodecode/templates/admin/users/users.html:110 #: rhodecode/templates/bookmarks/bookmarks.html:63 -#: rhodecode/templates/branches/branches.html:80 -#: rhodecode/templates/journal/journal.html:214 -#: rhodecode/templates/tags/tags.html:63 +#: rhodecode/templates/branches/branches.html:79 +#: rhodecode/templates/journal/journal.html:196 +#: rhodecode/templates/tags/tags.html:80 msgid "Data error." msgstr "Erro de dados." -#: rhodecode/templates/index_base.html:202 +#: rhodecode/templates/index_base.html:211 +#: rhodecode/templates/index_base.html:295 #: rhodecode/templates/admin/repos/repos.html:98 -#: rhodecode/templates/admin/users/user_edit_my_account.html:183 +#: rhodecode/templates/admin/users/user_edit_my_account.html:206 #: rhodecode/templates/admin/users/users.html:111 #: rhodecode/templates/bookmarks/bookmarks.html:64 -#: rhodecode/templates/branches/branches.html:81 -#: rhodecode/templates/journal/journal.html:215 -#: rhodecode/templates/tags/tags.html:64 +#: rhodecode/templates/branches/branches.html:80 +#: rhodecode/templates/journal/journal.html:54 +#: rhodecode/templates/journal/journal.html:197 +#: rhodecode/templates/tags/tags.html:81 msgid "Loading..." msgstr "Carregando..." @@ -1495,7 +1571,7 @@ msgstr "Entrar em" #: rhodecode/templates/admin/users/user_edit.html:50 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:26 #: rhodecode/templates/base/base.html:83 -#: rhodecode/templates/summary/summary.html:122 +#: rhodecode/templates/summary/summary.html:131 msgid "Username" msgstr "Nome de usuário" @@ -1554,23 +1630,23 @@ msgstr "Repita a senha" #: rhodecode/templates/register.html:47 #: rhodecode/templates/admin/users/user_add.html:59 -#: rhodecode/templates/admin/users/user_edit.html:86 +#: rhodecode/templates/admin/users/user_edit.html:90 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:53 msgid "First Name" msgstr "Primeiro Nome" #: rhodecode/templates/register.html:56 #: rhodecode/templates/admin/users/user_add.html:68 -#: rhodecode/templates/admin/users/user_edit.html:95 +#: rhodecode/templates/admin/users/user_edit.html:99 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:62 msgid "Last Name" msgstr "Último Nome" #: rhodecode/templates/register.html:65 #: rhodecode/templates/admin/users/user_add.html:77 -#: rhodecode/templates/admin/users/user_edit.html:104 +#: rhodecode/templates/admin/users/user_edit.html:108 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:71 -#: rhodecode/templates/summary/summary.html:124 +#: rhodecode/templates/summary/summary.html:133 msgid "Email" msgstr "E-mail" @@ -1583,6 +1659,7 @@ msgid "Your account must wait for activa msgstr "Sua conta precisa esperar ativação por um administrador" #: rhodecode/templates/repo_switcher_list.html:11 +#: rhodecode/templates/admin/defaults/defaults.html:44 #: rhodecode/templates/admin/repos/repo_add_base.html:65 #: rhodecode/templates/admin/repos/repo_edit.html:85 #: rhodecode/templates/settings/repo_settings.html:76 @@ -1610,7 +1687,7 @@ msgid "tags" msgstr "etiquetas" #: rhodecode/templates/switch_to_list.html:22 -#: rhodecode/templates/tags/tags_data.html:33 +#: rhodecode/templates/tags/tags_data.html:38 msgid "There are no tags yet" msgstr "Ainda não há etiquetas" @@ -1633,20 +1710,22 @@ msgstr "Diário do administrador" #: rhodecode/templates/admin/repos/repos.html:74 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:9 -#: rhodecode/templates/journal/journal.html:61 -#: rhodecode/templates/journal/journal.html:62 +#: rhodecode/templates/journal/journal_page_repos.html:9 +#: rhodecode/templates/journal/journal_page_repos.html:10 msgid "Action" msgstr "Ação" #: rhodecode/templates/admin/admin_log.html:7 +#: rhodecode/templates/admin/permissions/permissions.html:41 msgid "Repository" msgstr "Repositório" #: rhodecode/templates/admin/admin_log.html:8 #: rhodecode/templates/bookmarks/bookmarks.html:37 #: rhodecode/templates/bookmarks/bookmarks_data.html:7 -#: rhodecode/templates/branches/branches.html:52 -#: rhodecode/templates/tags/tags.html:37 +#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches_data.html:7 +#: rhodecode/templates/tags/tags.html:52 #: rhodecode/templates/tags/tags_data.html:7 msgid "Date" msgstr "Data" @@ -1655,10 +1734,84 @@ msgstr "Data" msgid "From IP" msgstr "A partir do IP" -#: rhodecode/templates/admin/admin_log.html:53 +#: rhodecode/templates/admin/admin_log.html:57 msgid "No actions yet" msgstr "Ainda não há ações" +#: rhodecode/templates/admin/defaults/defaults.html:5 +#: rhodecode/templates/admin/defaults/defaults.html:25 +#, fuzzy +msgid "Repositories defaults" +msgstr "grupos de repositórios" + +#: rhodecode/templates/admin/defaults/defaults.html:11 +#, fuzzy +msgid "Defaults" +msgstr "excluir" + +#: rhodecode/templates/admin/defaults/defaults.html:35 +#: rhodecode/templates/admin/repos/repo_add_base.html:38 +#: rhodecode/templates/admin/repos/repo_edit.html:58 +msgid "Type" +msgstr "Tipo" + +#: rhodecode/templates/admin/defaults/defaults.html:48 +#: rhodecode/templates/admin/repos/repo_add_base.html:69 +#: rhodecode/templates/admin/repos/repo_edit.html:89 +#: rhodecode/templates/forks/fork.html:72 +#: rhodecode/templates/settings/repo_settings.html:80 +msgid "" +"Private repositories are only visible to people explicitly added as " +"collaborators." +msgstr "" +"Repositórios privados são visíveis somente por pessoas explicitamente " +"adicionadas como colaboradores." + +#: rhodecode/templates/admin/defaults/defaults.html:55 +#: rhodecode/templates/admin/repos/repo_edit.html:94 +msgid "Enable statistics" +msgstr "Habilitar estatísticas" + +#: rhodecode/templates/admin/defaults/defaults.html:59 +#: rhodecode/templates/admin/repos/repo_edit.html:98 +msgid "Enable statistics window on summary page." +msgstr "Habilitar janela de estatísticas na página de sumário." + +#: rhodecode/templates/admin/defaults/defaults.html:65 +#: rhodecode/templates/admin/repos/repo_edit.html:103 +msgid "Enable downloads" +msgstr "Habilitar downloads" + +#: rhodecode/templates/admin/defaults/defaults.html:69 +#: rhodecode/templates/admin/repos/repo_edit.html:107 +msgid "Enable download menu on summary page." +msgstr "Habilitar menu de descarregar na página de sumário." + +#: rhodecode/templates/admin/defaults/defaults.html:75 +#: rhodecode/templates/admin/repos/repo_edit.html:112 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66 +#, fuzzy +msgid "Enable locking" +msgstr "habilitar" + +#: rhodecode/templates/admin/defaults/defaults.html:79 +#: rhodecode/templates/admin/repos/repo_edit.html:116 +msgid "Enable lock-by-pulling on repository." +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:84 +#: rhodecode/templates/admin/ldap/ldap.html:89 +#: rhodecode/templates/admin/repos/repo_edit.html:141 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74 +#: rhodecode/templates/admin/settings/hooks.html:73 +#: rhodecode/templates/admin/users/user_edit.html:133 +#: rhodecode/templates/admin/users/user_edit.html:178 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:135 +#: rhodecode/templates/settings/repo_settings.html:93 +msgid "Save" +msgstr "Salvar" + #: rhodecode/templates/admin/ldap/ldap.html:5 msgid "LDAP administration" msgstr "Administração de LDAP" @@ -1731,18 +1884,6 @@ msgstr "Atributo do Último Nome" msgid "E-mail Attribute" msgstr "Atributo de E-mail" -#: rhodecode/templates/admin/ldap/ldap.html:89 -#: rhodecode/templates/admin/repos/repo_edit.html:141 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74 -#: rhodecode/templates/admin/settings/hooks.html:73 -#: rhodecode/templates/admin/users/user_edit.html:129 -#: rhodecode/templates/admin/users/user_edit.html:174 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79 -#: rhodecode/templates/admin/users_groups/users_group_edit.html:135 -#: rhodecode/templates/settings/repo_settings.html:93 -msgid "Save" -msgstr "Salvar" - #: rhodecode/templates/admin/notifications/notifications.html:5 #: rhodecode/templates/admin/notifications/notifications.html:9 msgid "My Notifications" @@ -1758,8 +1899,8 @@ msgid "Comments" msgstr "commits" #: rhodecode/templates/admin/notifications/notifications.html:31 -#: rhodecode/templates/base/base.html:254 -#: rhodecode/templates/base/base.html:256 +#: rhodecode/templates/base/base.html:267 +#: rhodecode/templates/base/base.html:269 msgid "Pull requests" msgstr "" @@ -1787,7 +1928,7 @@ msgstr "Administração de permissões" #: rhodecode/templates/admin/permissions/permissions.html:11 #: rhodecode/templates/admin/repos/repo_edit.html:134 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58 -#: rhodecode/templates/admin/users/user_edit.html:139 +#: rhodecode/templates/admin/users/user_edit.html:143 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100 #: rhodecode/templates/settings/repo_settings.html:86 msgid "Permissions" @@ -1801,10 +1942,6 @@ msgstr "Permissões padrão" msgid "Anonymous access" msgstr "Acesso anônimo" -#: rhodecode/templates/admin/permissions/permissions.html:41 -msgid "Repository permission" -msgstr "Permissão de repositório" - #: rhodecode/templates/admin/permissions/permissions.html:49 msgid "" "All default permissions on each repository will be reset to choosen " @@ -1816,24 +1953,45 @@ msgstr "" "customizadas nos repositórios serão perdidas" #: rhodecode/templates/admin/permissions/permissions.html:50 +#: rhodecode/templates/admin/permissions/permissions.html:63 msgid "overwrite existing settings" msgstr "sobrescrever configurações existentes" #: rhodecode/templates/admin/permissions/permissions.html:55 +#: rhodecode/templates/admin/repos/repo_add_base.html:29 +#: rhodecode/templates/admin/repos/repo_edit.html:49 +#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 +#: rhodecode/templates/forks/fork.html:50 +#: rhodecode/templates/settings/repo_settings.html:48 +msgid "Repository group" +msgstr "Grupo de repositórios" + +#: rhodecode/templates/admin/permissions/permissions.html:62 +#, fuzzy +msgid "" +"All default permissions on each repository group will be reset to choosen" +" permission, note that all custom default permission on repositories " +"group will be lost" +msgstr "" +"Todas as permissões padrão em cada repositório serão reinicializadas para" +" as permissões escolhidas. Note que todas as permissões padrão " +"customizadas nos repositórios serão perdidas" + +#: rhodecode/templates/admin/permissions/permissions.html:69 msgid "Registration" msgstr "Registro" -#: rhodecode/templates/admin/permissions/permissions.html:63 +#: rhodecode/templates/admin/permissions/permissions.html:77 msgid "Repository creation" msgstr "Criação de repositório" -#: rhodecode/templates/admin/permissions/permissions.html:71 +#: rhodecode/templates/admin/permissions/permissions.html:85 #, fuzzy msgid "Repository forking" msgstr "Criação de repositório" -#: rhodecode/templates/admin/permissions/permissions.html:78 -#: rhodecode/templates/admin/repos/repo_edit.html:241 +#: rhodecode/templates/admin/permissions/permissions.html:92 +#: rhodecode/templates/admin/repos/repo_edit.html:264 msgid "set" msgstr "ajustar" @@ -1853,8 +2011,8 @@ msgid "add new" msgstr "adicionar novo" #: rhodecode/templates/admin/repos/repo_add_base.html:20 -#: rhodecode/templates/summary/summary.html:95 -#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:104 +#: rhodecode/templates/summary/summary.html:105 msgid "Clone from" msgstr "Clonar de" @@ -1864,25 +2022,12 @@ msgstr "Clonar de" msgid "Optional http[s] url from which repository should be cloned." msgstr "URL opcional http[s] da qual o repositório deve ser clonado." -#: rhodecode/templates/admin/repos/repo_add_base.html:29 -#: rhodecode/templates/admin/repos/repo_edit.html:49 -#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 -#: rhodecode/templates/forks/fork.html:50 -#: rhodecode/templates/settings/repo_settings.html:48 -msgid "Repository group" -msgstr "Grupo de repositórios" - #: rhodecode/templates/admin/repos/repo_add_base.html:33 #: rhodecode/templates/forks/fork.html:54 #, fuzzy msgid "Optionaly select a group to put this repository into." msgstr "Opcionalmente selecione um grupo no qual colocar esse repositório." -#: rhodecode/templates/admin/repos/repo_add_base.html:38 -#: rhodecode/templates/admin/repos/repo_edit.html:58 -msgid "Type" -msgstr "Tipo" - #: rhodecode/templates/admin/repos/repo_add_base.html:42 msgid "Type of repository to create." msgstr "Tipo de repositório a criar." @@ -1911,17 +2056,6 @@ msgstr "" "Seja sucinto e objetivo. Use um arquivo README para descrições mais " "longas." -#: rhodecode/templates/admin/repos/repo_add_base.html:69 -#: rhodecode/templates/admin/repos/repo_edit.html:89 -#: rhodecode/templates/forks/fork.html:72 -#: rhodecode/templates/settings/repo_settings.html:80 -msgid "" -"Private repositories are only visible to people explicitly added as " -"collaborators." -msgstr "" -"Repositórios privados são visíveis somente por pessoas explicitamente " -"adicionadas como colaboradores." - #: rhodecode/templates/admin/repos/repo_add_base.html:73 msgid "add" msgstr "adicionar" @@ -1936,12 +2070,14 @@ msgstr "Editar repositório" #: rhodecode/templates/admin/repos/repo_edit.html:13 #: rhodecode/templates/admin/users/user_edit.html:13 -#: rhodecode/templates/admin/users/user_edit.html:224 -#: rhodecode/templates/admin/users/user_edit.html:226 +#: rhodecode/templates/admin/users/user_edit.html:228 +#: rhodecode/templates/admin/users/user_edit.html:230 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28 #: rhodecode/templates/admin/users_groups/users_group_edit.html:13 -#: rhodecode/templates/files/files_source.html:44 -#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:207 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:209 +#: rhodecode/templates/files/files_source.html:29 +#: rhodecode/templates/journal/journal_page_repos.html:29 msgid "edit" msgstr "editar" @@ -1955,32 +2091,6 @@ msgstr "URI de clonagem" msgid "Optional select a group to put this repository into." msgstr "Opcionalmente selecione um grupo no qual colocar esse repositório." -#: rhodecode/templates/admin/repos/repo_edit.html:94 -msgid "Enable statistics" -msgstr "Habilitar estatísticas" - -#: rhodecode/templates/admin/repos/repo_edit.html:98 -msgid "Enable statistics window on summary page." -msgstr "Habilitar janela de estatísticas na página de sumário." - -#: rhodecode/templates/admin/repos/repo_edit.html:103 -msgid "Enable downloads" -msgstr "Habilitar downloads" - -#: rhodecode/templates/admin/repos/repo_edit.html:107 -msgid "Enable download menu on summary page." -msgstr "Habilitar menu de descarregar na página de sumário." - -#: rhodecode/templates/admin/repos/repo_edit.html:112 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66 -#, fuzzy -msgid "Enable locking" -msgstr "habilitar" - -#: rhodecode/templates/admin/repos/repo_edit.html:116 -msgid "Enable lock-by-pulling on repository." -msgstr "" - #: rhodecode/templates/admin/repos/repo_edit.html:126 msgid "Change owner of this repository." msgstr "Mudar o dono desse repositório." @@ -1988,11 +2098,11 @@ msgstr "Mudar o dono desse repositório." #: rhodecode/templates/admin/repos/repo_edit.html:142 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:75 #: rhodecode/templates/admin/settings/settings.html:113 -#: rhodecode/templates/admin/settings/settings.html:168 -#: rhodecode/templates/admin/settings/settings.html:258 -#: rhodecode/templates/admin/users/user_edit.html:130 -#: rhodecode/templates/admin/users/user_edit.html:175 -#: rhodecode/templates/admin/users/user_edit.html:278 +#: rhodecode/templates/admin/settings/settings.html:179 +#: rhodecode/templates/admin/settings/settings.html:269 +#: rhodecode/templates/admin/users/user_edit.html:134 +#: rhodecode/templates/admin/users/user_edit.html:179 +#: rhodecode/templates/admin/users/user_edit.html:282 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:80 #: rhodecode/templates/admin/users_groups/users_group_edit.html:136 #: rhodecode/templates/files/files_add.html:82 @@ -2050,22 +2160,49 @@ msgstr "Invalidar cache do repositório" msgid "Confirm to invalidate repository cache" msgstr "Confirma invalidar cache do repositório" -#: rhodecode/templates/admin/repos/repo_edit.html:195 -#: rhodecode/templates/base/base.html:318 -#: rhodecode/templates/base/base.html:320 -#: rhodecode/templates/base/base.html:322 -msgid "Public journal" -msgstr "Diário público" +#: rhodecode/templates/admin/repos/repo_edit.html:193 +msgid "" +"Manually invalidate cache for this repository. On first access repository" +" will be cached again" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:198 +msgid "List of cached values" +msgstr "" #: rhodecode/templates/admin/repos/repo_edit.html:201 -msgid "Remove from public journal" -msgstr "Remover do diário público" +msgid "Prefix" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:202 +#, fuzzy +msgid "Key" +msgstr "Chave de API" #: rhodecode/templates/admin/repos/repo_edit.html:203 +#: rhodecode/templates/admin/users/user_add.html:86 +#: rhodecode/templates/admin/users/user_edit.html:117 +#: rhodecode/templates/admin/users_groups/users_group_add.html:41 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:42 +msgid "Active" +msgstr "Ativo" + +#: rhodecode/templates/admin/repos/repo_edit.html:218 +#: rhodecode/templates/base/base.html:331 +#: rhodecode/templates/base/base.html:333 +#: rhodecode/templates/base/base.html:335 +msgid "Public journal" +msgstr "Diário público" + +#: rhodecode/templates/admin/repos/repo_edit.html:224 +msgid "Remove from public journal" +msgstr "Remover do diário público" + +#: rhodecode/templates/admin/repos/repo_edit.html:226 msgid "Add to public journal" msgstr "Adicionar ao diário público" -#: rhodecode/templates/admin/repos/repo_edit.html:208 +#: rhodecode/templates/admin/repos/repo_edit.html:231 msgid "" "All actions made on this repository will be accessible to everyone in " "public journal" @@ -2073,63 +2210,62 @@ msgstr "" "Todas as ações feitas nesse repositório serão acessíveis a todos no " "diário público" -#: rhodecode/templates/admin/repos/repo_edit.html:215 +#: rhodecode/templates/admin/repos/repo_edit.html:238 #, fuzzy msgid "Locking" msgstr "destravar" -#: rhodecode/templates/admin/repos/repo_edit.html:220 +#: rhodecode/templates/admin/repos/repo_edit.html:243 msgid "Unlock locked repo" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:220 +#: rhodecode/templates/admin/repos/repo_edit.html:243 #, fuzzy msgid "Confirm to unlock repository" msgstr "Confirma excluir este repositório" -#: rhodecode/templates/admin/repos/repo_edit.html:223 +#: rhodecode/templates/admin/repos/repo_edit.html:246 msgid "lock repo" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:223 +#: rhodecode/templates/admin/repos/repo_edit.html:246 #, fuzzy msgid "Confirm to lock repository" msgstr "Confirma excluir este repositório" -#: rhodecode/templates/admin/repos/repo_edit.html:224 +#: rhodecode/templates/admin/repos/repo_edit.html:247 #, fuzzy msgid "Repository is not locked" msgstr "repositórios" -#: rhodecode/templates/admin/repos/repo_edit.html:229 +#: rhodecode/templates/admin/repos/repo_edit.html:252 msgid "Force locking on repository. Works only when anonymous access is disabled" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:236 +#: rhodecode/templates/admin/repos/repo_edit.html:259 #, fuzzy msgid "Set as fork of" msgstr "Marcar como bifurcação" -#: rhodecode/templates/admin/repos/repo_edit.html:245 +#: rhodecode/templates/admin/repos/repo_edit.html:268 #, fuzzy msgid "Manually set this repository as a fork of another from the list" msgstr "Marcar manualmente este repositório como sendo uma bifurcação de outro" -#: rhodecode/templates/admin/repos/repo_edit.html:251 +#: rhodecode/templates/admin/repos/repo_edit.html:274 #: rhodecode/templates/changeset/changeset_file_comment.html:26 msgid "Delete" msgstr "Excluir" -#: rhodecode/templates/admin/repos/repo_edit.html:255 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "Remove this repository" msgstr "Remover deste repositório" -#: rhodecode/templates/admin/repos/repo_edit.html:255 -#: rhodecode/templates/journal/journal.html:84 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "Confirm to delete this repository" msgstr "Confirma excluir este repositório" -#: rhodecode/templates/admin/repos/repo_edit.html:259 +#: rhodecode/templates/admin/repos/repo_edit.html:282 msgid "" "This repository will be renamed in a special way in order to be " "unaccesible for RhodeCode and VCS systems.\n" @@ -2159,7 +2295,7 @@ msgstr "escrever" #: rhodecode/templates/admin/repos/repo_edit_perms.html:6 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6 #: rhodecode/templates/admin/users/users.html:85 -#: rhodecode/templates/base/base.html:217 +#: rhodecode/templates/base/base.html:229 msgid "admin" msgstr "administrador" @@ -2170,8 +2306,8 @@ msgstr "membro" #: rhodecode/templates/admin/repos/repo_edit_perms.html:16 #: rhodecode/templates/data_table/_dt_elements.html:67 -#: rhodecode/templates/journal/journal.html:132 -#: rhodecode/templates/summary/summary.html:76 +#: rhodecode/templates/journal/journal.html:87 +#: rhodecode/templates/summary/summary.html:85 msgid "private repository" msgstr "repositório privado" @@ -2195,12 +2331,12 @@ msgid "Add another member" msgstr "Adicionar outro membro" #: rhodecode/templates/admin/repos/repo_edit_perms.html:97 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:81 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 msgid "Failed to remove user" msgstr "Falha ao reomver usuário" #: rhodecode/templates/admin/repos/repo_edit_perms.html:112 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:96 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:103 msgid "Failed to remove users group" msgstr "Falha ao remover grupo de usuários" @@ -2208,11 +2344,44 @@ msgstr "Falha ao remover grupo de usuários" msgid "Repositories administration" msgstr "Administração de repositórios" -#: rhodecode/templates/admin/repos_groups/repos_groups.html:8 -msgid "Groups" -msgstr "Grupos" - -#: rhodecode/templates/admin/repos_groups/repos_groups.html:12 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73 +msgid "apply to children" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74 +msgid "" +"Set or revoke permission to all children of that group, including " +"repositories and other groups" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups.html:9 +#: rhodecode/templates/base/base.html:122 +#: rhodecode/templates/base/base.html:313 +#: rhodecode/templates/base/base.html:315 +#: rhodecode/templates/base/base.html:317 +#: rhodecode/templates/bookmarks/bookmarks.html:11 +#: rhodecode/templates/branches/branches.html:10 +#: rhodecode/templates/changelog/changelog.html:10 +#: rhodecode/templates/changeset/changeset.html:10 +#: rhodecode/templates/changeset/changeset_range.html:9 +#: rhodecode/templates/compare/compare_diff.html:9 +#: rhodecode/templates/files/file_diff.html:8 +#: rhodecode/templates/files/files.html:8 +#: rhodecode/templates/files/files_add.html:15 +#: rhodecode/templates/files/files_edit.html:15 +#: rhodecode/templates/followers/followers.html:9 +#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9 +#: rhodecode/templates/pullrequests/pullrequest.html:8 +#: rhodecode/templates/pullrequests/pullrequest_show.html:8 +#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 +#: rhodecode/templates/settings/repo_settings.html:9 +#: rhodecode/templates/shortlog/shortlog.html:10 +#: rhodecode/templates/summary/summary.html:8 +#: rhodecode/templates/tags/tags.html:11 +msgid "Home" +msgstr "Início" + +#: rhodecode/templates/admin/repos_groups/repos_groups.html:13 msgid "with" msgstr "com" @@ -2238,7 +2407,7 @@ msgstr "Progenitor do grupo" #: rhodecode/templates/admin/users/user_add.html:94 #: rhodecode/templates/admin/users_groups/users_group_add.html:49 #: rhodecode/templates/admin/users_groups/users_group_edit.html:90 -#: rhodecode/templates/pullrequests/pullrequest_show.html:113 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 msgid "save" msgstr "salvar" @@ -2274,20 +2443,22 @@ msgstr "Número de repositórios de nível superior" msgid "action" msgstr "ação" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54 -#: rhodecode/templates/admin/users/user_edit.html:255 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 +#: rhodecode/templates/admin/users/user_edit.html:259 #: rhodecode/templates/admin/users_groups/users_groups.html:44 #: rhodecode/templates/data_table/_dt_elements.html:7 -#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:121 msgid "delete" msgstr "excluir" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54 -#, python-format -msgid "Confirm to delete this group: %s" -msgstr "Confirme para excluir esse grupo: %s" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:62 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 +#, fuzzy, python-format +msgid "Confirm to delete this group: %s with %s repository" +msgid_plural "Confirm to delete this group: %s with %s repositories" +msgstr[0] "Confirma excluir este repositório" +msgstr[1] "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63 msgid "There are no repositories groups yet" msgstr "Ainda não há grupos de repositórios" @@ -2383,8 +2554,8 @@ msgid "GA code" msgstr "Código GA" #: rhodecode/templates/admin/settings/settings.html:112 -#: rhodecode/templates/admin/settings/settings.html:167 -#: rhodecode/templates/admin/settings/settings.html:257 +#: rhodecode/templates/admin/settings/settings.html:178 +#: rhodecode/templates/admin/settings/settings.html:268 msgid "Save settings" msgstr "Salvar configurações" @@ -2393,97 +2564,106 @@ msgstr "Salvar configurações" msgid "Visualisation settings" msgstr "Configurações globais da aplicação" -#: rhodecode/templates/admin/settings/settings.html:128 +#: rhodecode/templates/admin/settings/settings.html:127 +#, fuzzy +msgid "General" +msgstr "habilitar" + +#: rhodecode/templates/admin/settings/settings.html:132 +msgid "Use lightweight dashboard" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:139 #, fuzzy msgid "Icons" msgstr "Opções" -#: rhodecode/templates/admin/settings/settings.html:133 +#: rhodecode/templates/admin/settings/settings.html:144 msgid "Show public repo icon on repositories" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:137 +#: rhodecode/templates/admin/settings/settings.html:148 #, fuzzy msgid "Show private repo icon on repositories" msgstr "repositório privado" -#: rhodecode/templates/admin/settings/settings.html:144 +#: rhodecode/templates/admin/settings/settings.html:155 #, fuzzy msgid "Meta-Tagging" msgstr "configurações" -#: rhodecode/templates/admin/settings/settings.html:149 +#: rhodecode/templates/admin/settings/settings.html:160 msgid "Stylify recognised metatags:" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:176 +#: rhodecode/templates/admin/settings/settings.html:187 #, fuzzy msgid "VCS settings" msgstr "configurações" -#: rhodecode/templates/admin/settings/settings.html:185 +#: rhodecode/templates/admin/settings/settings.html:196 msgid "Web" msgstr "Web" -#: rhodecode/templates/admin/settings/settings.html:190 +#: rhodecode/templates/admin/settings/settings.html:201 #, fuzzy msgid "require ssl for vcs operations" msgstr "exigir ssl para realizar push" -#: rhodecode/templates/admin/settings/settings.html:192 +#: rhodecode/templates/admin/settings/settings.html:203 msgid "" "RhodeCode will require SSL for pushing or pulling. If SSL is missing it " "will return HTTP Error 406: Not Acceptable" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:198 +#: rhodecode/templates/admin/settings/settings.html:209 msgid "Hooks" msgstr "Ganchos" -#: rhodecode/templates/admin/settings/settings.html:203 +#: rhodecode/templates/admin/settings/settings.html:214 msgid "Update repository after push (hg update)" msgstr "Atualizar repositório após realizar push (hg update)" -#: rhodecode/templates/admin/settings/settings.html:207 +#: rhodecode/templates/admin/settings/settings.html:218 msgid "Show repository size after push" msgstr "Mostrar tamanho do repositório após o push" -#: rhodecode/templates/admin/settings/settings.html:211 +#: rhodecode/templates/admin/settings/settings.html:222 msgid "Log user push commands" msgstr "Armazenar registro de comandos de push dos usuários" -#: rhodecode/templates/admin/settings/settings.html:215 +#: rhodecode/templates/admin/settings/settings.html:226 msgid "Log user pull commands" msgstr "Armazenar registro de comandos de pull dos usuários" -#: rhodecode/templates/admin/settings/settings.html:219 +#: rhodecode/templates/admin/settings/settings.html:230 msgid "advanced setup" msgstr "confirguações avançadas" -#: rhodecode/templates/admin/settings/settings.html:224 +#: rhodecode/templates/admin/settings/settings.html:235 #, fuzzy msgid "Mercurial Extensions" msgstr "Repositório Mercurial" -#: rhodecode/templates/admin/settings/settings.html:229 +#: rhodecode/templates/admin/settings/settings.html:240 msgid "largefiles extensions" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:233 +#: rhodecode/templates/admin/settings/settings.html:244 msgid "hgsubversion extensions" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:235 +#: rhodecode/templates/admin/settings/settings.html:246 msgid "" "Requires hgsubversion library installed. Allows clonning from svn remote " "locations" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:245 +#: rhodecode/templates/admin/settings/settings.html:256 msgid "Repositories location" msgstr "Localização dos repositórios" -#: rhodecode/templates/admin/settings/settings.html:250 +#: rhodecode/templates/admin/settings/settings.html:261 msgid "" "This a crucial application setting. If you are really sure you need to " "change this, you must restart application in order to make this setting " @@ -2493,33 +2673,34 @@ msgstr "" "certeza de que quer mudar isto, você precisa reiniciar a aplicação para " "que essa configuração tenha efeito. Clique este rótulo para destravar." -#: rhodecode/templates/admin/settings/settings.html:251 +#: rhodecode/templates/admin/settings/settings.html:262 +#: rhodecode/templates/base/base.html:221 msgid "unlock" msgstr "destravar" -#: rhodecode/templates/admin/settings/settings.html:252 +#: rhodecode/templates/admin/settings/settings.html:263 msgid "" "Location where repositories are stored. After changing this value a " "restart, and rescan is required" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:272 +#: rhodecode/templates/admin/settings/settings.html:283 msgid "Test Email" msgstr "Testar E-mail" -#: rhodecode/templates/admin/settings/settings.html:280 +#: rhodecode/templates/admin/settings/settings.html:291 msgid "Email to" msgstr "E-mail para" -#: rhodecode/templates/admin/settings/settings.html:288 +#: rhodecode/templates/admin/settings/settings.html:299 msgid "Send" msgstr "Enviar" -#: rhodecode/templates/admin/settings/settings.html:294 +#: rhodecode/templates/admin/settings/settings.html:305 msgid "System Info and Packages" msgstr "Informações de Sistema e Pacotes" -#: rhodecode/templates/admin/settings/settings.html:297 +#: rhodecode/templates/admin/settings/settings.html:308 msgid "show" msgstr "mostrar" @@ -2540,13 +2721,6 @@ msgstr "adicionar novo usuário" msgid "Password confirmation" msgstr "Confirmação de senha" -#: rhodecode/templates/admin/users/user_add.html:86 -#: rhodecode/templates/admin/users/user_edit.html:113 -#: rhodecode/templates/admin/users_groups/users_group_add.html:41 -#: rhodecode/templates/admin/users_groups/users_group_edit.html:42 -msgid "Active" -msgstr "Ativo" - #: rhodecode/templates/admin/users/user_edit.html:5 msgid "Edit user" msgstr "Editar usuário" @@ -2566,27 +2740,27 @@ msgstr "Usando" msgid "API key" msgstr "Chave de API" -#: rhodecode/templates/admin/users/user_edit.html:59 +#: rhodecode/templates/admin/users/user_edit.html:63 msgid "LDAP DN" msgstr "DN LDAP" -#: rhodecode/templates/admin/users/user_edit.html:68 +#: rhodecode/templates/admin/users/user_edit.html:72 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:35 msgid "New password" msgstr "Nova senha" -#: rhodecode/templates/admin/users/user_edit.html:77 +#: rhodecode/templates/admin/users/user_edit.html:81 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 msgid "New password confirmation" msgstr "Confirmação de nova senha" -#: rhodecode/templates/admin/users/user_edit.html:147 +#: rhodecode/templates/admin/users/user_edit.html:151 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108 #, fuzzy msgid "Inherit default permissions" msgstr "Permissões padrão" -#: rhodecode/templates/admin/users/user_edit.html:152 +#: rhodecode/templates/admin/users/user_edit.html:156 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113 #, python-format msgid "" @@ -2594,51 +2768,53 @@ msgid "" "options does not have any action" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:158 +#: rhodecode/templates/admin/users/user_edit.html:162 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119 msgid "Create repositories" msgstr "Criar repositórios" -#: rhodecode/templates/admin/users/user_edit.html:166 +#: rhodecode/templates/admin/users/user_edit.html:170 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127 #, fuzzy msgid "Fork repositories" msgstr "repositórios" -#: rhodecode/templates/admin/users/user_edit.html:186 +#: rhodecode/templates/admin/users/user_edit.html:190 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:22 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:39 #, fuzzy msgid "Nothing here yet" msgstr "Ainda não há notificações aqui" -#: rhodecode/templates/admin/users/user_edit.html:193 +#: rhodecode/templates/admin/users/user_edit.html:197 #: rhodecode/templates/admin/users/user_edit_my_account.html:60 -#: rhodecode/templates/admin/users/user_edit_my_account.html:194 +#: rhodecode/templates/admin/users/user_edit_my_account.html:217 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:185 msgid "Permission" msgstr "Permissão" -#: rhodecode/templates/admin/users/user_edit.html:194 +#: rhodecode/templates/admin/users/user_edit.html:198 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:186 #, fuzzy msgid "Edit Permission" msgstr "Permissão de repositório" -#: rhodecode/templates/admin/users/user_edit.html:243 +#: rhodecode/templates/admin/users/user_edit.html:247 #, fuzzy msgid "Email addresses" msgstr "Endereço de e-mail" -#: rhodecode/templates/admin/users/user_edit.html:256 +#: rhodecode/templates/admin/users/user_edit.html:260 #, fuzzy, python-format msgid "Confirm to delete this email: %s" msgstr "Confirma excluir este usuário: %s" -#: rhodecode/templates/admin/users/user_edit.html:270 +#: rhodecode/templates/admin/users/user_edit.html:274 #, fuzzy msgid "New email address" msgstr "Endereço de e-mail" -#: rhodecode/templates/admin/users/user_edit.html:277 +#: rhodecode/templates/admin/users/user_edit.html:281 #, fuzzy msgid "Add" msgstr "adicionar" @@ -2698,31 +2874,33 @@ msgstr "" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:7 #: rhodecode/templates/bookmarks/bookmarks.html:40 #: rhodecode/templates/bookmarks/bookmarks_data.html:9 -#: rhodecode/templates/branches/branches.html:55 -#: rhodecode/templates/journal/journal.html:60 -#: rhodecode/templates/tags/tags.html:40 +#: rhodecode/templates/branches/branches.html:54 +#: rhodecode/templates/branches/branches_data.html:9 +#: rhodecode/templates/journal/journal_page_repos.html:8 +#: rhodecode/templates/tags/tags.html:55 #: rhodecode/templates/tags/tags_data.html:9 msgid "Revision" msgstr "Revisão" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28 -#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/journal/journal_page_repos.html:29 msgid "private" msgstr "privado" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:31 #: rhodecode/templates/data_table/_dt_elements.html:7 +#: rhodecode/templates/journal/journal_page_repos.html:32 #, python-format msgid "Confirm to delete this repository: %s" msgstr "Confirma excluir esse repositório: %s" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:38 -#: rhodecode/templates/journal/journal.html:94 +#: rhodecode/templates/journal/journal_page_repos.html:42 msgid "No repositories yet" msgstr "Ainda não há repositórios" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40 -#: rhodecode/templates/journal/journal.html:96 +#: rhodecode/templates/journal/journal_page_repos.html:44 msgid "create one now" msgstr "criar um agora" @@ -2731,7 +2909,7 @@ msgid "Users administration" msgstr "Administração de usuários" #: rhodecode/templates/admin/users/users.html:9 -#: rhodecode/templates/base/base.html:223 +#: rhodecode/templates/base/base.html:235 msgid "users" msgstr "usuários" @@ -2762,7 +2940,7 @@ msgid "active" msgstr "ativo" #: rhodecode/templates/admin/users/users.html:86 -#: rhodecode/templates/base/base.html:226 +#: rhodecode/templates/base/base.html:238 msgid "ldap" msgstr "ldap" @@ -2811,6 +2989,21 @@ msgstr "Adicionar todos os elementos" msgid "Group members" msgstr "Membros do grupo" +#: rhodecode/templates/admin/users_groups/users_group_edit.html:163 +#, fuzzy +msgid "No members yet" +msgstr "membros" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:171 +#, fuzzy +msgid "Permissions defined for this group" +msgstr "Administração de permissões" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:178 +#, fuzzy +msgid "No permissions set yet" +msgstr "Copiar permissões" + #: rhodecode/templates/admin/users_groups/users_groups.html:5 msgid "Users groups administration" msgstr "Administração de grupos de usuários" @@ -2853,36 +3046,10 @@ msgstr "Entrar" msgid "Inbox" msgstr "Caixa de Entrada" -#: rhodecode/templates/base/base.html:122 -#: rhodecode/templates/base/base.html:300 -#: rhodecode/templates/base/base.html:302 -#: rhodecode/templates/base/base.html:304 -#: rhodecode/templates/bookmarks/bookmarks.html:11 -#: rhodecode/templates/branches/branches.html:10 -#: rhodecode/templates/changelog/changelog.html:10 -#: rhodecode/templates/changeset/changeset.html:10 -#: rhodecode/templates/changeset/changeset_range.html:9 -#: rhodecode/templates/compare/compare_diff.html:9 -#: rhodecode/templates/files/file_diff.html:8 -#: rhodecode/templates/files/files.html:8 -#: rhodecode/templates/files/files_add.html:15 -#: rhodecode/templates/files/files_edit.html:15 -#: rhodecode/templates/followers/followers.html:9 -#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9 -#: rhodecode/templates/pullrequests/pullrequest.html:8 -#: rhodecode/templates/pullrequests/pullrequest_show.html:8 -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 -#: rhodecode/templates/settings/repo_settings.html:9 -#: rhodecode/templates/shortlog/shortlog.html:10 -#: rhodecode/templates/summary/summary.html:8 -#: rhodecode/templates/tags/tags.html:11 -msgid "Home" -msgstr "Início" - #: rhodecode/templates/base/base.html:123 -#: rhodecode/templates/base/base.html:309 -#: rhodecode/templates/base/base.html:311 -#: rhodecode/templates/base/base.html:313 +#: rhodecode/templates/base/base.html:322 +#: rhodecode/templates/base/base.html:324 +#: rhodecode/templates/base/base.html:326 #: rhodecode/templates/journal/journal.html:4 #: rhodecode/templates/journal/journal.html:21 #: rhodecode/templates/journal/public_journal.html:4 @@ -2902,7 +3069,7 @@ msgid "Products" msgstr "Produtos" #: rhodecode/templates/base/base.html:152 -#: rhodecode/templates/base/base.html:182 +#: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47 msgid "loading..." msgstr "carregando..." @@ -2947,50 +3114,70 @@ msgstr "Opções" #: rhodecode/templates/base/base.html:204 #: rhodecode/templates/base/base.html:206 -#: rhodecode/templates/base/base.html:227 -msgid "settings" -msgstr "configurações" - -#: rhodecode/templates/base/base.html:209 +#, fuzzy +msgid "repository settings" +msgstr "Criação de repositório" + +#: rhodecode/templates/base/base.html:210 #: rhodecode/templates/data_table/_dt_elements.html:80 #: rhodecode/templates/forks/fork.html:13 msgid "fork" msgstr "bifurcação" -#: rhodecode/templates/base/base.html:211 -#: rhodecode/templates/changelog/changelog.html:40 +#: rhodecode/templates/base/base.html:212 rhodecode/templates/base/root.html:50 +#: rhodecode/templates/changelog/changelog.html:43 msgid "Open new pull request" msgstr "" -#: rhodecode/templates/base/base.html:213 +#: rhodecode/templates/base/base.html:215 +#: rhodecode/templates/forks/forks_data.html:21 +#, fuzzy +msgid "Compare fork" +msgstr "comparar exibir" + +#: rhodecode/templates/base/base.html:217 msgid "search" msgstr "pesquisar" -#: rhodecode/templates/base/base.html:222 +#: rhodecode/templates/base/base.html:223 +#, fuzzy +msgid "lock" +msgstr "destravar" + +#: rhodecode/templates/base/base.html:234 msgid "repositories groups" msgstr "grupos de repositórios" -#: rhodecode/templates/base/base.html:224 +#: rhodecode/templates/base/base.html:236 msgid "users groups" msgstr "grupos de usuários" -#: rhodecode/templates/base/base.html:225 +#: rhodecode/templates/base/base.html:237 msgid "permissions" msgstr "permissões" -#: rhodecode/templates/base/base.html:238 +#: rhodecode/templates/base/base.html:239 +#, fuzzy +msgid "defaults" +msgstr "excluir" + #: rhodecode/templates/base/base.html:240 +msgid "settings" +msgstr "configurações" + +#: rhodecode/templates/base/base.html:251 +#: rhodecode/templates/base/base.html:253 msgid "Followers" msgstr "Seguidores" -#: rhodecode/templates/base/base.html:246 -#: rhodecode/templates/base/base.html:248 +#: rhodecode/templates/base/base.html:259 +#: rhodecode/templates/base/base.html:261 msgid "Forks" msgstr "Bifurcações" -#: rhodecode/templates/base/base.html:327 -#: rhodecode/templates/base/base.html:329 -#: rhodecode/templates/base/base.html:331 +#: rhodecode/templates/base/base.html:340 +#: rhodecode/templates/base/base.html:342 +#: rhodecode/templates/base/base.html:344 #: rhodecode/templates/search/search.html:52 msgid "Search" msgstr "Pesquisar" @@ -3000,7 +3187,7 @@ msgid "add another comment" msgstr "adicionar outro comentário" #: rhodecode/templates/base/root.html:43 -#: rhodecode/templates/journal/journal.html:120 +#: rhodecode/templates/journal/journal.html:75 #: rhodecode/templates/summary/summary.html:57 msgid "Stop following this repository" msgstr "Parar de seguir este repositório" @@ -3014,14 +3201,26 @@ msgstr "Passar a seguir este repositório" msgid "Group" msgstr "Grupo" -#: rhodecode/templates/base/root.html:47 +#: rhodecode/templates/base/root.html:48 msgid "search truncated" msgstr "pesquisa truncada" -#: rhodecode/templates/base/root.html:48 +#: rhodecode/templates/base/root.html:49 msgid "no matching files" msgstr "nenhum arquivo corresponde" +#: rhodecode/templates/base/root.html:51 +msgid "Open new pull request for selected changesets" +msgstr "" + +#: rhodecode/templates/base/root.html:52 +msgid "Show selected changes __S -> __E" +msgstr "Mostrar alterações selecionadas __S -> __E" + +#: rhodecode/templates/base/root.html:53 +msgid "Selection link" +msgstr "Link da seleção" + #: rhodecode/templates/bookmarks/bookmarks.html:5 #, fuzzy, python-format msgid "%s Bookmarks" @@ -3029,8 +3228,9 @@ msgstr "marcadores" #: rhodecode/templates/bookmarks/bookmarks.html:39 #: rhodecode/templates/bookmarks/bookmarks_data.html:8 -#: rhodecode/templates/branches/branches.html:54 -#: rhodecode/templates/tags/tags.html:39 +#: rhodecode/templates/branches/branches.html:53 +#: rhodecode/templates/branches/branches_data.html:8 +#: rhodecode/templates/tags/tags.html:54 #: rhodecode/templates/tags/tags_data.html:8 msgid "Author" msgstr "Autor" @@ -3045,36 +3245,16 @@ msgstr "ramos" msgid "Compare branches" msgstr "ramos" -#: rhodecode/templates/branches/branches.html:57 +#: rhodecode/templates/branches/branches.html:56 +#: rhodecode/templates/branches/branches_data.html:10 #: rhodecode/templates/compare/compare_diff.html:5 #: rhodecode/templates/compare/compare_diff.html:13 +#: rhodecode/templates/tags/tags.html:57 +#: rhodecode/templates/tags/tags_data.html:10 #, fuzzy msgid "Compare" msgstr "comparar exibir" -#: rhodecode/templates/branches/branches_data.html:6 -msgid "name" -msgstr "nome" - -#: rhodecode/templates/branches/branches_data.html:7 -msgid "date" -msgstr "data" - -#: rhodecode/templates/branches/branches_data.html:8 -#: rhodecode/templates/shortlog/shortlog_data.html:8 -msgid "author" -msgstr "autor" - -#: rhodecode/templates/branches/branches_data.html:9 -#: rhodecode/templates/shortlog/shortlog_data.html:5 -msgid "revision" -msgstr "revisão" - -#: rhodecode/templates/branches/branches_data.html:10 -#, fuzzy -msgid "compare" -msgstr "comparar exibir" - #: rhodecode/templates/changelog/changelog.html:6 #, fuzzy, python-format msgid "%s Changelog" @@ -3088,59 +3268,66 @@ msgstr[0] "mostrando %d de %d revisão" msgstr[1] "mostrando %d de %d revisões" #: rhodecode/templates/changelog/changelog.html:37 +#, fuzzy +msgid "Clear selection" +msgstr "Configurações de busca" + +#: rhodecode/templates/changelog/changelog.html:40 #: rhodecode/templates/forks/forks_data.html:19 #, python-format msgid "compare fork with %s" msgstr "" -#: rhodecode/templates/changelog/changelog.html:37 -#: rhodecode/templates/forks/forks_data.html:21 +#: rhodecode/templates/changelog/changelog.html:40 #, fuzzy -msgid "Compare fork" +msgid "Compare fork with parent" msgstr "comparar exibir" -#: rhodecode/templates/changelog/changelog.html:46 +#: rhodecode/templates/changelog/changelog.html:49 msgid "Show" msgstr "Mostrar" -#: rhodecode/templates/changelog/changelog.html:72 -#: rhodecode/templates/summary/summary.html:364 +#: rhodecode/templates/changelog/changelog.html:74 +#: rhodecode/templates/summary/summary.html:375 msgid "show more" msgstr "mostrar mais" -#: rhodecode/templates/changelog/changelog.html:76 +#: rhodecode/templates/changelog/changelog.html:78 msgid "Affected number of files, click to show more details" msgstr "Número de arquivos afetados, clique para mostrar mais detalhes" -#: rhodecode/templates/changelog/changelog.html:89 -#: rhodecode/templates/changeset/changeset.html:38 +#: rhodecode/templates/changelog/changelog.html:91 +#: rhodecode/templates/changeset/changeset.html:44 #: rhodecode/templates/changeset/changeset_file_comment.html:20 #: rhodecode/templates/changeset/changeset_range.html:46 #, fuzzy msgid "Changeset status" msgstr "Conjuntos de mudanças" -#: rhodecode/templates/changelog/changelog.html:92 +#: rhodecode/templates/changelog/changelog.html:94 +#: rhodecode/templates/shortlog/shortlog_data.html:20 msgid "Click to open associated pull request" msgstr "" -#: rhodecode/templates/changelog/changelog.html:102 -#: rhodecode/templates/changeset/changeset.html:78 +#: rhodecode/templates/changelog/changelog.html:104 +#: rhodecode/templates/changeset/changeset.html:85 msgid "Parent" msgstr "Progenitor" -#: rhodecode/templates/changelog/changelog.html:108 -#: rhodecode/templates/changeset/changeset.html:84 +#: rhodecode/templates/changelog/changelog.html:110 +#: rhodecode/templates/changeset/changeset.html:91 msgid "No parents" msgstr "Sem progenitores" -#: rhodecode/templates/changelog/changelog.html:113 -#: rhodecode/templates/changeset/changeset.html:88 +#: rhodecode/templates/changelog/changelog.html:115 +#: rhodecode/templates/changeset/changeset.html:95 +#: rhodecode/templates/changeset/changeset_range.html:79 msgid "merge" msgstr "mesclar" -#: rhodecode/templates/changelog/changelog.html:116 -#: rhodecode/templates/changeset/changeset.html:91 +#: rhodecode/templates/changelog/changelog.html:118 +#: rhodecode/templates/changeset/changeset.html:98 +#: rhodecode/templates/changeset/changeset_range.html:82 #: rhodecode/templates/files/files.html:29 #: rhodecode/templates/files/files_add.html:33 #: rhodecode/templates/files/files_edit.html:33 @@ -3148,44 +3335,42 @@ msgstr "mesclar" msgid "branch" msgstr "ramo" -#: rhodecode/templates/changelog/changelog.html:122 +#: rhodecode/templates/changelog/changelog.html:124 +#: rhodecode/templates/changeset/changeset_range.html:88 msgid "bookmark" msgstr "marcador" -#: rhodecode/templates/changelog/changelog.html:128 -#: rhodecode/templates/changeset/changeset.html:96 +#: rhodecode/templates/changelog/changelog.html:130 +#: rhodecode/templates/changeset/changeset.html:103 +#: rhodecode/templates/changeset/changeset_range.html:94 msgid "tag" msgstr "etiqueta" -#: rhodecode/templates/changelog/changelog.html:164 -msgid "Show selected changes __S -> __E" -msgstr "Mostrar alterações selecionadas __S -> __E" - -#: rhodecode/templates/changelog/changelog.html:255 +#: rhodecode/templates/changelog/changelog.html:301 msgid "There are no changes yet" msgstr "Ainda não há alteações" #: rhodecode/templates/changelog/changelog_details.html:4 -#: rhodecode/templates/changeset/changeset.html:66 +#: rhodecode/templates/changeset/changeset.html:73 msgid "removed" msgstr "removidos" #: rhodecode/templates/changelog/changelog_details.html:5 -#: rhodecode/templates/changeset/changeset.html:67 +#: rhodecode/templates/changeset/changeset.html:74 msgid "changed" msgstr "alterados" #: rhodecode/templates/changelog/changelog_details.html:6 -#: rhodecode/templates/changeset/changeset.html:68 +#: rhodecode/templates/changeset/changeset.html:75 msgid "added" msgstr "adicionados" #: rhodecode/templates/changelog/changelog_details.html:8 #: rhodecode/templates/changelog/changelog_details.html:9 #: rhodecode/templates/changelog/changelog_details.html:10 -#: rhodecode/templates/changeset/changeset.html:70 -#: rhodecode/templates/changeset/changeset.html:71 -#: rhodecode/templates/changeset/changeset.html:72 +#: rhodecode/templates/changeset/changeset.html:77 +#: rhodecode/templates/changeset/changeset.html:78 +#: rhodecode/templates/changeset/changeset.html:79 #, python-format msgid "affected %s files" msgstr "%s arquivos afetados" @@ -3199,17 +3384,22 @@ msgstr "Conjunto de Mudanças" msgid "Changeset" msgstr "Conjunto de Mudanças" -#: rhodecode/templates/changeset/changeset.html:43 +#: rhodecode/templates/changeset/changeset.html:49 #: rhodecode/templates/changeset/diff_block.html:20 msgid "raw diff" msgstr "diff bruto" -#: rhodecode/templates/changeset/changeset.html:44 +#: rhodecode/templates/changeset/changeset.html:50 +#, fuzzy +msgid "patch diff" +msgstr "diff bruto" + +#: rhodecode/templates/changeset/changeset.html:51 #: rhodecode/templates/changeset/diff_block.html:21 msgid "download diff" msgstr "descarregar diff" -#: rhodecode/templates/changeset/changeset.html:48 +#: rhodecode/templates/changeset/changeset.html:55 #: rhodecode/templates/changeset/changeset_file_comment.html:82 #, python-format msgid "%d comment" @@ -3217,7 +3407,7 @@ msgid_plural "%d comments" msgstr[0] "%d comentário" msgstr[1] "%d comentários" -#: rhodecode/templates/changeset/changeset.html:48 +#: rhodecode/templates/changeset/changeset.html:55 #: rhodecode/templates/changeset/changeset_file_comment.html:82 #, python-format msgid "(%d inline)" @@ -3225,14 +3415,23 @@ msgid_plural "(%d inline)" msgstr[0] "(%d em linha)" msgstr[1] "(%d em linha)" -#: rhodecode/templates/changeset/changeset.html:103 -#, python-format -msgid "%s files affected with %s insertions and %s deletions:" -msgstr "%s arquivos afetados com %s inserções e %s exclusões" - -#: rhodecode/templates/changeset/changeset.html:119 -msgid "Changeset was too big and was cut off..." -msgstr "Conjunto de mudanças era grande demais e foi cortado..." +#: rhodecode/templates/changeset/changeset.html:111 +#: rhodecode/templates/compare/compare_diff.html:44 +#: rhodecode/templates/pullrequests/pullrequest_show.html:76 +#, fuzzy, python-format +msgid "%s file changed" +msgid_plural "%s files changed" +msgstr[0] "arquivo alterado" +msgstr[1] "" + +#: rhodecode/templates/changeset/changeset.html:113 +#: rhodecode/templates/compare/compare_diff.html:46 +#: rhodecode/templates/pullrequests/pullrequest_show.html:78 +#, fuzzy, python-format +msgid "%s file changed with %s insertions and %s deletions" +msgid_plural "%s files changed with %s insertions and %s deletions" +msgstr[0] "%s arquivos afetados com %s inserções e %s exclusões" +msgstr[1] "" #: rhodecode/templates/changeset/changeset_file_comment.html:42 msgid "Submitting..." @@ -3300,15 +3499,18 @@ msgstr "Conjuntos de mudanças" msgid "Compare View" msgstr "Exibir Comparação" +#: rhodecode/templates/changeset/changeset_range.html:29 +#, fuzzy +msgid "Show combined compare" +msgstr "mostrar comentários em linha" + #: rhodecode/templates/changeset/changeset_range.html:54 -#: rhodecode/templates/compare/compare_diff.html:41 -#: rhodecode/templates/pullrequests/pullrequest_show.html:69 msgid "Files affected" msgstr "Arquivos afetados" #: rhodecode/templates/changeset/diff_block.html:19 -msgid "diff" -msgstr "diff" +msgid "show full diff for this file" +msgstr "" #: rhodecode/templates/changeset/diff_block.html:27 msgid "show inline comments" @@ -3320,9 +3522,18 @@ msgid "No changesets" msgstr "Nenhum conjunto de alterações ainda." #: rhodecode/templates/compare/compare_diff.html:37 +#: rhodecode/templates/pullrequests/pullrequest_show.html:69 +#, fuzzy, python-format +msgid "Showing %s commit" +msgid_plural "Showing %s commits" +msgstr[0] "mostrar comentários em linha" +msgstr[1] "" + +#: rhodecode/templates/compare/compare_diff.html:52 +#: rhodecode/templates/pullrequests/pullrequest_show.html:84 #, fuzzy -msgid "Outgoing changesets" -msgstr "Nenhum conjunto de alterações ainda." +msgid "No files" +msgstr "arquivos" #: rhodecode/templates/data_table/_dt_elements.html:39 #: rhodecode/templates/data_table/_dt_elements.html:41 @@ -3331,42 +3542,126 @@ msgid "Fork" msgstr "Bifurcação" #: rhodecode/templates/data_table/_dt_elements.html:60 -#: rhodecode/templates/journal/journal.html:126 -#: rhodecode/templates/summary/summary.html:68 +#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/summary/summary.html:77 msgid "Mercurial repository" msgstr "Repositório Mercurial" #: rhodecode/templates/data_table/_dt_elements.html:62 -#: rhodecode/templates/journal/journal.html:128 -#: rhodecode/templates/summary/summary.html:71 +#: rhodecode/templates/journal/journal.html:83 +#: rhodecode/templates/summary/summary.html:80 msgid "Git repository" msgstr "Repositório Git" #: rhodecode/templates/data_table/_dt_elements.html:69 -#: rhodecode/templates/journal/journal.html:134 -#: rhodecode/templates/summary/summary.html:78 +#: rhodecode/templates/journal/journal.html:89 +#: rhodecode/templates/summary/summary.html:87 msgid "public repository" msgstr "repositório público" #: rhodecode/templates/data_table/_dt_elements.html:80 -#: rhodecode/templates/summary/summary.html:87 -#: rhodecode/templates/summary/summary.html:88 +#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:97 msgid "Fork of" msgstr "Bifurcação de" -#: rhodecode/templates/data_table/_dt_elements.html:92 +#: rhodecode/templates/data_table/_dt_elements.html:94 msgid "No changesets yet" msgstr "Nenhum conjunto de alterações ainda." -#: rhodecode/templates/data_table/_dt_elements.html:104 +#: rhodecode/templates/data_table/_dt_elements.html:101 +#: rhodecode/templates/data_table/_dt_elements.html:103 +#, python-format +msgid "Subscribe to %s rss feed" +msgstr "Assinar o feed rss de %s" + +#: rhodecode/templates/data_table/_dt_elements.html:109 +#: rhodecode/templates/data_table/_dt_elements.html:111 +#, python-format +msgid "Subscribe to %s atom feed" +msgstr "Assinar o feed atom de %s" + +#: rhodecode/templates/data_table/_dt_elements.html:122 #, python-format msgid "Confirm to delete this user: %s" msgstr "Confirma excluir este usuário: %s" +#: rhodecode/templates/email_templates/changeset_comment.html:10 +#, fuzzy +msgid "New status$" +msgstr "Conjuntos de mudanças" + #: rhodecode/templates/email_templates/main.html:8 -msgid "This is an notification from RhodeCode." +#, fuzzy +msgid "This is a notification from RhodeCode." msgstr "Esta é uma notificação do RhodeCode." +#: rhodecode/templates/email_templates/password_reset.html:4 +msgid "Hello" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:6 +msgid "We received a request to create a new password for your account." +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:8 +msgid "You can generate it by clicking following URL" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:12 +msgid "If you didn't request new password please ignore this email." +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:4 +#, python-format +msgid "" +"User %s opened pull request for repository %s and wants you to review " +"changes." +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:5 +#, fuzzy +msgid "title" +msgstr "escrever" + +#: rhodecode/templates/email_templates/pull_request.html:6 +#: rhodecode/templates/pullrequests/pullrequest.html:115 +#, fuzzy +msgid "description" +msgstr "Descrição" + +#: rhodecode/templates/email_templates/pull_request.html:11 +msgid "revisions for reviewing" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:18 +#, fuzzy +msgid "View this pull request here" +msgstr "Confirma excluir este repositório" + +#: rhodecode/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +msgid "User %s commented on pull request #%s for repository %s" +msgstr "repositório [criado]" + +#: rhodecode/templates/email_templates/pull_request_comment.html:10 +#, fuzzy +msgid "New status" +msgstr "Conjuntos de mudanças" + +#: rhodecode/templates/email_templates/pull_request_comment.html:14 +msgid "View this comment here" +msgstr "" + +#: rhodecode/templates/email_templates/registration.html:4 +#, fuzzy +msgid "A new user have registered in RhodeCode" +msgstr "Você se registrou com sucesso no rhodecode" + +#: rhodecode/templates/email_templates/registration.html:9 +msgid "View this user here" +msgstr "" + #: rhodecode/templates/errors/error_document.html:46 #, python-format msgid "You will be redirected to %s in %s seconds" @@ -3382,13 +3677,13 @@ msgid "File diff" msgstr "Diff do arquivo" #: rhodecode/templates/files/files.html:4 -#: rhodecode/templates/files/files.html:72 +#: rhodecode/templates/files/files.html:74 #, fuzzy, python-format msgid "%s files" msgstr "arquivos" #: rhodecode/templates/files/files.html:12 -#: rhodecode/templates/summary/summary.html:340 +#: rhodecode/templates/summary/summary.html:351 msgid "files" msgstr "arquivos" @@ -3466,7 +3761,7 @@ msgid "search file list" msgstr "pesquisar lista de arquivos" #: rhodecode/templates/files/files_browser.html:31 -#: rhodecode/templates/shortlog/shortlog_data.html:65 +#: rhodecode/templates/shortlog/shortlog_data.html:78 msgid "add new file" msgstr "adicionar novo arquivo" @@ -3499,18 +3794,18 @@ msgid "edit file" msgstr "editar arquivo" #: rhodecode/templates/files/files_edit.html:49 -#: rhodecode/templates/files/files_source.html:38 +#: rhodecode/templates/files/files_source.html:23 msgid "show annotation" msgstr "mostrar anotação" #: rhodecode/templates/files/files_edit.html:50 -#: rhodecode/templates/files/files_source.html:40 -#: rhodecode/templates/files/files_source.html:68 +#: rhodecode/templates/files/files_source.html:25 +#: rhodecode/templates/files/files_source.html:53 msgid "show as raw" msgstr "mostrar como bruto" #: rhodecode/templates/files/files_edit.html:51 -#: rhodecode/templates/files/files_source.html:41 +#: rhodecode/templates/files/files_source.html:26 msgid "download as raw" msgstr "descarregar como bruto" @@ -3522,44 +3817,50 @@ msgstr "fonte" msgid "Editing file" msgstr "Editando arquivo" -#: rhodecode/templates/files/files_source.html:2 +#: rhodecode/templates/files/files_history_box.html:2 msgid "History" msgstr "Histórico" -#: rhodecode/templates/files/files_source.html:9 +#: rhodecode/templates/files/files_history_box.html:9 #, fuzzy msgid "diff to revision" msgstr "próxima revisão" -#: rhodecode/templates/files/files_source.html:10 +#: rhodecode/templates/files/files_history_box.html:10 #, fuzzy msgid "show at revision" msgstr "próxima revisão" -#: rhodecode/templates/files/files_source.html:14 +#: rhodecode/templates/files/files_history_box.html:11 +#, fuzzy +msgid "show full history" +msgstr "Carregando lista de arquivos..." + +#: rhodecode/templates/files/files_history_box.html:16 #, fuzzy, python-format msgid "%s author" msgid_plural "%s authors" msgstr[0] "autor" msgstr[1] "autors" -#: rhodecode/templates/files/files_source.html:36 +#: rhodecode/templates/files/files_source.html:6 +#, fuzzy +msgid "Load file history" +msgstr "Carregando lista de arquivos..." + +#: rhodecode/templates/files/files_source.html:21 msgid "show source" msgstr "mostrar fonte" -#: rhodecode/templates/files/files_source.html:59 +#: rhodecode/templates/files/files_source.html:44 #, python-format msgid "Binary file (%s)" msgstr "Arquivo binário (%s)" -#: rhodecode/templates/files/files_source.html:68 +#: rhodecode/templates/files/files_source.html:53 msgid "File is too big to display" msgstr "Arquivo é grande demais para exibir" -#: rhodecode/templates/files/files_source.html:124 -msgid "Selection link" -msgstr "Link da seleção" - #: rhodecode/templates/files/files_ypjax.html:5 msgid "annotation" msgstr "anotação" @@ -3632,7 +3933,7 @@ msgstr "bifurcações" msgid "forked" msgstr "bifurcado" -#: rhodecode/templates/forks/forks_data.html:38 +#: rhodecode/templates/forks/forks_data.html:42 msgid "There are no forks yet" msgstr "Ainda não há bifurcações" @@ -3647,7 +3948,7 @@ msgid "RSS journal feed" msgstr "diário público de %s - feed %s" #: rhodecode/templates/journal/journal.html:24 -#: rhodecode/templates/pullrequests/pullrequest.html:27 +#: rhodecode/templates/pullrequests/pullrequest.html:55 msgid "Refresh" msgstr "Atualizar" @@ -3670,19 +3971,19 @@ msgstr "Seguindo" msgid "ADD" msgstr "ADICIONAR" -#: rhodecode/templates/journal/journal.html:114 +#: rhodecode/templates/journal/journal.html:69 msgid "following user" msgstr "seguindo usuário" -#: rhodecode/templates/journal/journal.html:114 +#: rhodecode/templates/journal/journal.html:69 msgid "user" msgstr "usuário" -#: rhodecode/templates/journal/journal.html:147 +#: rhodecode/templates/journal/journal.html:102 msgid "You are not following any users or repositories" msgstr "Você não está seguindo quaisquer usuários ou repositórios" -#: rhodecode/templates/journal/journal_data.html:47 +#: rhodecode/templates/journal/journal_data.html:51 msgid "No entries yet" msgstr "Ainda não há entradas" @@ -3705,7 +4006,7 @@ msgstr "Diário Público" msgid "New pull request" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:28 +#: rhodecode/templates/pullrequests/pullrequest.html:54 msgid "refresh overview" msgstr "" @@ -3715,18 +4016,18 @@ msgid "Detailed compare view" msgstr "comparar exibir" #: rhodecode/templates/pullrequests/pullrequest.html:70 -#: rhodecode/templates/pullrequests/pullrequest_show.html:82 +#: rhodecode/templates/pullrequests/pullrequest_show.html:100 msgid "Pull request reviewers" msgstr "" #: rhodecode/templates/pullrequests/pullrequest.html:79 -#: rhodecode/templates/pullrequests/pullrequest_show.html:94 +#: rhodecode/templates/pullrequests/pullrequest_show.html:112 #, fuzzy msgid "owner" msgstr "Dono" #: rhodecode/templates/pullrequests/pullrequest.html:91 -#: rhodecode/templates/pullrequests/pullrequest_show.html:109 +#: rhodecode/templates/pullrequests/pullrequest_show.html:127 msgid "Add reviewer to this pull request." msgstr "" @@ -3742,11 +4043,6 @@ msgstr "Criar novo arquivo" msgid "Title" msgstr "escrever" -#: rhodecode/templates/pullrequests/pullrequest.html:115 -#, fuzzy -msgid "description" -msgstr "Descrição" - #: rhodecode/templates/pullrequests/pullrequest.html:123 msgid "Send pull request" msgstr "" @@ -3756,6 +4052,11 @@ msgstr "" msgid "Closed %s" msgstr "" +#: rhodecode/templates/pullrequests/pullrequest_show.html:23 +#, python-format +msgid "with status %s" +msgstr "" + #: rhodecode/templates/pullrequests/pullrequest_show.html:31 #, fuzzy msgid "Status" @@ -3769,28 +4070,27 @@ msgstr "" msgid "Still not reviewed by" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:47 +#: rhodecode/templates/pullrequests/pullrequest_show.html:48 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" msgstr[0] "" msgstr[1] "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:54 +#: rhodecode/templates/pullrequests/pullrequest_show.html:50 +msgid "pull request was reviewed by all reviewers" +msgstr "" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:58 #, fuzzy msgid "Created on" msgstr "criar um agora" -#: rhodecode/templates/pullrequests/pullrequest_show.html:61 +#: rhodecode/templates/pullrequests/pullrequest_show.html:65 #, fuzzy msgid "Compare view" msgstr "comparar exibir" -#: rhodecode/templates/pullrequests/pullrequest_show.html:65 -#, fuzzy -msgid "Incoming changesets" -msgstr "Nenhum conjunto de alterações ainda." - #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4 #, fuzzy msgid "all pull requests" @@ -3863,27 +4163,32 @@ msgstr "configurações" msgid "%s Shortlog" msgstr "log resumido" -#: rhodecode/templates/shortlog/shortlog.html:14 +#: rhodecode/templates/shortlog/shortlog.html:15 +#: rhodecode/templates/shortlog/shortlog.html:19 msgid "shortlog" msgstr "log resumido" +#: rhodecode/templates/shortlog/shortlog_data.html:5 +msgid "revision" +msgstr "revisão" + #: rhodecode/templates/shortlog/shortlog_data.html:7 msgid "age" msgstr "idade" -#: rhodecode/templates/shortlog/shortlog_data.html:18 -msgid "No commit message" -msgstr "Nenhuma mensagem de commit" - -#: rhodecode/templates/shortlog/shortlog_data.html:62 +#: rhodecode/templates/shortlog/shortlog_data.html:8 +msgid "author" +msgstr "autor" + +#: rhodecode/templates/shortlog/shortlog_data.html:75 msgid "Add or upload files directly via RhodeCode" msgstr "Adicionar ou enviar arquivos diretamente pelo RhodeCode" -#: rhodecode/templates/shortlog/shortlog_data.html:71 +#: rhodecode/templates/shortlog/shortlog_data.html:84 msgid "Push new repo" msgstr "Fazer push de novo repositório" -#: rhodecode/templates/shortlog/shortlog_data.html:79 +#: rhodecode/templates/shortlog/shortlog_data.html:92 msgid "Existing repository?" msgstr "Repositório existente?" @@ -3911,129 +4216,139 @@ msgstr "Assinar o feed rss de %s" msgid "ATOM" msgstr "ATOM" -#: rhodecode/templates/summary/summary.html:82 +#: rhodecode/templates/summary/summary.html:70 +#, fuzzy, python-format +msgid "Repository locked by %s" +msgstr "repositórios" + +#: rhodecode/templates/summary/summary.html:72 +#, fuzzy +msgid "Repository unlocked" +msgstr "repositórios" + +#: rhodecode/templates/summary/summary.html:91 #, python-format msgid "Non changable ID %s" msgstr "ID não alterável %s" -#: rhodecode/templates/summary/summary.html:87 +#: rhodecode/templates/summary/summary.html:96 msgid "public" msgstr "público" -#: rhodecode/templates/summary/summary.html:95 +#: rhodecode/templates/summary/summary.html:104 msgid "remote clone" msgstr "clone remoto" -#: rhodecode/templates/summary/summary.html:116 +#: rhodecode/templates/summary/summary.html:125 msgid "Contact" msgstr "Contato" -#: rhodecode/templates/summary/summary.html:130 +#: rhodecode/templates/summary/summary.html:139 msgid "Clone url" msgstr "URL de clonagem" -#: rhodecode/templates/summary/summary.html:133 +#: rhodecode/templates/summary/summary.html:142 msgid "Show by Name" msgstr "Mostrar por Nome" -#: rhodecode/templates/summary/summary.html:134 +#: rhodecode/templates/summary/summary.html:143 msgid "Show by ID" msgstr "Mostrar por ID" -#: rhodecode/templates/summary/summary.html:142 +#: rhodecode/templates/summary/summary.html:151 msgid "Trending files" msgstr "Tendências em arquivos" -#: rhodecode/templates/summary/summary.html:150 -#: rhodecode/templates/summary/summary.html:166 -#: rhodecode/templates/summary/summary.html:194 +#: rhodecode/templates/summary/summary.html:159 +#: rhodecode/templates/summary/summary.html:175 +#: rhodecode/templates/summary/summary.html:203 msgid "enable" msgstr "habilitar" -#: rhodecode/templates/summary/summary.html:158 +#: rhodecode/templates/summary/summary.html:167 msgid "Download" msgstr "Download" -#: rhodecode/templates/summary/summary.html:162 +#: rhodecode/templates/summary/summary.html:171 msgid "There are no downloads yet" msgstr "Ainda não há downloads" -#: rhodecode/templates/summary/summary.html:164 +#: rhodecode/templates/summary/summary.html:173 msgid "Downloads are disabled for this repository" msgstr "Downloads estão desabilitados para este repositório" -#: rhodecode/templates/summary/summary.html:170 +#: rhodecode/templates/summary/summary.html:179 #, fuzzy msgid "Download as zip" msgstr "descarregar como bruto" -#: rhodecode/templates/summary/summary.html:173 +#: rhodecode/templates/summary/summary.html:182 msgid "Check this to download archive with subrepos" msgstr "Marque isto para descarregar arquivo com subrepositórios" -#: rhodecode/templates/summary/summary.html:173 +#: rhodecode/templates/summary/summary.html:182 msgid "with subrepos" msgstr "com subrepositórios" -#: rhodecode/templates/summary/summary.html:186 +#: rhodecode/templates/summary/summary.html:195 msgid "Commit activity by day / author" msgstr "Atividade de commit por dia / autor" -#: rhodecode/templates/summary/summary.html:197 +#: rhodecode/templates/summary/summary.html:206 msgid "Stats gathered: " msgstr "Estatísticas coletadas:" -#: rhodecode/templates/summary/summary.html:218 +#: rhodecode/templates/summary/summary.html:227 msgid "Shortlog" msgstr "Log resumido" -#: rhodecode/templates/summary/summary.html:220 +#: rhodecode/templates/summary/summary.html:229 msgid "Quick start" msgstr "Início rápido" -#: rhodecode/templates/summary/summary.html:233 +#: rhodecode/templates/summary/summary.html:243 #, python-format msgid "Readme file at revision '%s'" msgstr "" -#: rhodecode/templates/summary/summary.html:236 +#: rhodecode/templates/summary/summary.html:246 msgid "Permalink to this readme" msgstr "" -#: rhodecode/templates/summary/summary.html:293 +#: rhodecode/templates/summary/summary.html:304 #, python-format msgid "Download %s as %s" msgstr "Descarregar %s como %s" -#: rhodecode/templates/summary/summary.html:650 +#: rhodecode/templates/summary/summary.html:661 msgid "commits" msgstr "commits" -#: rhodecode/templates/summary/summary.html:651 +#: rhodecode/templates/summary/summary.html:662 msgid "files added" msgstr "arquivos adicionados" -#: rhodecode/templates/summary/summary.html:652 +#: rhodecode/templates/summary/summary.html:663 msgid "files changed" msgstr "arquivos alterados" -#: rhodecode/templates/summary/summary.html:653 +#: rhodecode/templates/summary/summary.html:664 msgid "files removed" msgstr "arquivos removidos" -#: rhodecode/templates/summary/summary.html:656 +#: rhodecode/templates/summary/summary.html:667 msgid "commit" msgstr "commit" -#: rhodecode/templates/summary/summary.html:657 +#: rhodecode/templates/summary/summary.html:668 msgid "file added" msgstr "arquivo adicionado" -#: rhodecode/templates/summary/summary.html:658 +#: rhodecode/templates/summary/summary.html:669 msgid "file changed" msgstr "arquivo alterado" -#: rhodecode/templates/summary/summary.html:659 +#: rhodecode/templates/summary/summary.html:670 msgid "file removed" msgstr "arquivo removido" @@ -4042,3 +4357,8 @@ msgstr "arquivo removido" msgid "%s Tags" msgstr "%s atrás" +#: rhodecode/templates/tags/tags.html:29 +#, fuzzy +msgid "Compare tags" +msgstr "comparar exibir" + diff --git a/rhodecode/i18n/rhodecode.pot b/rhodecode/i18n/rhodecode.pot --- a/rhodecode/i18n/rhodecode.pot +++ b/rhodecode/i18n/rhodecode.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: RhodeCode 1.4.0b\n" +"Project-Id-Version: RhodeCode 1.5.0b\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2012-09-02 20:30+0200\n" +"POT-Creation-Date: 2012-12-03 03:21+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,35 +17,36 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 0.9.6\n" -#: rhodecode/controllers/changelog.py:94 +#: rhodecode/controllers/changelog.py:95 msgid "All Branches" msgstr "" -#: rhodecode/controllers/changeset.py:83 +#: rhodecode/controllers/changeset.py:84 msgid "show white space" msgstr "" -#: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97 +#: rhodecode/controllers/changeset.py:91 rhodecode/controllers/changeset.py:98 msgid "ignore white space" msgstr "" -#: rhodecode/controllers/changeset.py:157 +#: rhodecode/controllers/changeset.py:164 #, python-format msgid "%s line context" msgstr "" -#: rhodecode/controllers/changeset.py:333 rhodecode/controllers/changeset.py:348 -#: rhodecode/lib/diffs.py:70 -msgid "binary file" -msgstr "" - -#: rhodecode/controllers/changeset.py:408 +#: rhodecode/controllers/changeset.py:315 rhodecode/controllers/pullrequests.py:411 +#, python-format +msgid "Status change -> %s" +msgstr "" + +#: rhodecode/controllers/changeset.py:346 msgid "" "Changing status on a changeset associated witha closed pull request is not " "allowed" msgstr "" -#: rhodecode/controllers/compare.py:69 +#: rhodecode/controllers/compare.py:75 rhodecode/controllers/pullrequests.py:117 +#: rhodecode/controllers/shortlog.py:100 msgid "There are no changesets yet" msgstr "" @@ -75,128 +76,138 @@ msgid "" "fulfilling the request." msgstr "" -#: rhodecode/controllers/feed.py:49 +#: rhodecode/controllers/feed.py:52 #, python-format msgid "Changes on %s repository" msgstr "" -#: rhodecode/controllers/feed.py:50 +#: rhodecode/controllers/feed.py:53 #, python-format msgid "%s %s feed" msgstr "" -#: rhodecode/controllers/feed.py:75 +#: rhodecode/controllers/feed.py:86 +#: rhodecode/templates/changeset/changeset.html:126 +#: rhodecode/templates/changeset/changeset.html:138 +#: rhodecode/templates/compare/compare_diff.html:62 +#: rhodecode/templates/compare/compare_diff.html:73 +#: rhodecode/templates/pullrequests/pullrequest_show.html:94 +#: rhodecode/templates/pullrequests/pullrequest_show.html:153 +msgid "Changeset was too big and was cut off..." +msgstr "" + +#: rhodecode/controllers/feed.py:92 msgid "commited on" msgstr "" -#: rhodecode/controllers/files.py:84 +#: rhodecode/controllers/files.py:86 msgid "click here to add new file" msgstr "" -#: rhodecode/controllers/files.py:85 +#: rhodecode/controllers/files.py:87 #, python-format msgid "There are no files yet %s" msgstr "" -#: rhodecode/controllers/files.py:239 rhodecode/controllers/files.py:299 +#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325 #, python-format msgid "This repository is has been locked by %s on %s" msgstr "" -#: rhodecode/controllers/files.py:266 +#: rhodecode/controllers/files.py:292 #, python-format msgid "Edited %s via RhodeCode" msgstr "" -#: rhodecode/controllers/files.py:271 +#: rhodecode/controllers/files.py:297 msgid "No changes" msgstr "" -#: rhodecode/controllers/files.py:282 rhodecode/controllers/files.py:346 +#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372 #, python-format msgid "Successfully committed to %s" msgstr "" -#: rhodecode/controllers/files.py:287 rhodecode/controllers/files.py:352 +#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378 msgid "Error occurred during commit" msgstr "" -#: rhodecode/controllers/files.py:318 +#: rhodecode/controllers/files.py:344 #, python-format msgid "Added %s via RhodeCode" msgstr "" -#: rhodecode/controllers/files.py:332 +#: rhodecode/controllers/files.py:358 msgid "No content" msgstr "" -#: rhodecode/controllers/files.py:336 +#: rhodecode/controllers/files.py:362 msgid "No filename" msgstr "" -#: rhodecode/controllers/files.py:378 +#: rhodecode/controllers/files.py:404 msgid "downloads disabled" msgstr "" -#: rhodecode/controllers/files.py:389 +#: rhodecode/controllers/files.py:415 #, python-format msgid "Unknown revision %s" msgstr "" -#: rhodecode/controllers/files.py:391 +#: rhodecode/controllers/files.py:417 msgid "Empty repository" msgstr "" -#: rhodecode/controllers/files.py:393 +#: rhodecode/controllers/files.py:419 msgid "Unknown archive type" msgstr "" -#: rhodecode/controllers/files.py:494 +#: rhodecode/controllers/files.py:564 #: rhodecode/templates/changeset/changeset_range.html:13 #: rhodecode/templates/changeset/changeset_range.html:31 msgid "Changesets" msgstr "" -#: rhodecode/controllers/files.py:495 rhodecode/controllers/pullrequests.py:72 -#: rhodecode/controllers/summary.py:232 rhodecode/model/scm.py:543 +#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:76 +#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550 msgid "Branches" msgstr "" -#: rhodecode/controllers/files.py:496 rhodecode/controllers/pullrequests.py:76 -#: rhodecode/controllers/summary.py:233 rhodecode/model/scm.py:554 +#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:80 +#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561 msgid "Tags" msgstr "" -#: rhodecode/controllers/forks.py:73 rhodecode/controllers/admin/repos.py:90 +#: rhodecode/controllers/forks.py:74 rhodecode/controllers/admin/repos.py:92 #, 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/forks.py:133 rhodecode/controllers/settings.py:72 +#: rhodecode/controllers/forks.py:134 rhodecode/controllers/settings.py:73 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from the " "file system please run the application again in order to rescan repositories" msgstr "" -#: rhodecode/controllers/forks.py:167 +#: rhodecode/controllers/forks.py:168 #, python-format msgid "forked %s repository as %s" msgstr "" -#: rhodecode/controllers/forks.py:181 +#: rhodecode/controllers/forks.py:182 #, python-format msgid "An error occurred during repository forking %s" msgstr "" -#: rhodecode/controllers/journal.py:202 rhodecode/controllers/journal.py:239 -msgid "public journal" -msgstr "" - #: rhodecode/controllers/journal.py:206 rhodecode/controllers/journal.py:243 -#: rhodecode/templates/base/base.html:220 +msgid "public journal" +msgstr "" + +#: rhodecode/controllers/journal.py:210 rhodecode/controllers/journal.py:247 +#: rhodecode/templates/base/base.html:232 msgid "journal" msgstr "" @@ -212,79 +223,104 @@ msgstr "" msgid "Your password reset was successful, new password has been sent to your email" msgstr "" -#: rhodecode/controllers/pullrequests.py:74 rhodecode/model/scm.py:549 +#: rhodecode/controllers/pullrequests.py:78 rhodecode/model/scm.py:556 msgid "Bookmarks" msgstr "" -#: rhodecode/controllers/pullrequests.py:158 +#: rhodecode/controllers/pullrequests.py:186 msgid "Pull request requires a title with min. 3 chars" msgstr "" -#: rhodecode/controllers/pullrequests.py:160 +#: rhodecode/controllers/pullrequests.py:188 msgid "error during creation of pull request" msgstr "" -#: rhodecode/controllers/pullrequests.py:181 +#: rhodecode/controllers/pullrequests.py:220 msgid "Successfully opened new pull request" msgstr "" -#: rhodecode/controllers/pullrequests.py:184 +#: rhodecode/controllers/pullrequests.py:223 msgid "Error occurred during sending pull request" msgstr "" -#: rhodecode/controllers/pullrequests.py:217 +#: rhodecode/controllers/pullrequests.py:256 msgid "Successfully deleted pull request" msgstr "" -#: rhodecode/controllers/search.py:131 +#: rhodecode/controllers/search.py:134 msgid "Invalid search query. Try quoting it." msgstr "" -#: rhodecode/controllers/search.py:136 +#: rhodecode/controllers/search.py:139 msgid "There is no index to search in. Please run whoosh indexer" msgstr "" -#: rhodecode/controllers/search.py:140 +#: rhodecode/controllers/search.py:143 msgid "An error occurred during this search operation" msgstr "" -#: rhodecode/controllers/settings.py:107 rhodecode/controllers/admin/repos.py:266 +#: rhodecode/controllers/settings.py:108 rhodecode/controllers/admin/repos.py:268 #, python-format msgid "Repository %s updated successfully" msgstr "" -#: rhodecode/controllers/settings.py:125 rhodecode/controllers/admin/repos.py:284 +#: rhodecode/controllers/settings.py:126 rhodecode/controllers/admin/repos.py:286 #, python-format msgid "error occurred during update of repository %s" msgstr "" -#: rhodecode/controllers/settings.py:143 rhodecode/controllers/admin/repos.py:302 +#: rhodecode/controllers/settings.py:144 rhodecode/controllers/admin/repos.py:304 #, 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:155 rhodecode/controllers/admin/repos.py:314 +#: rhodecode/controllers/settings.py:156 rhodecode/controllers/admin/repos.py:316 #, python-format msgid "deleted repository %s" msgstr "" -#: rhodecode/controllers/settings.py:159 rhodecode/controllers/admin/repos.py:324 -#: rhodecode/controllers/admin/repos.py:330 +#: rhodecode/controllers/settings.py:160 rhodecode/controllers/admin/repos.py:326 +#: rhodecode/controllers/admin/repos.py:332 #, python-format msgid "An error occurred during deletion of %s" msgstr "" -#: rhodecode/controllers/summary.py:138 +#: rhodecode/controllers/settings.py:179 +msgid "unlocked" +msgstr "" + +#: rhodecode/controllers/settings.py:182 +msgid "locked" +msgstr "" + +#: rhodecode/controllers/settings.py:184 +#, python-format +msgid "Repository has been %s" +msgstr "" + +#: rhodecode/controllers/settings.py:188 rhodecode/controllers/admin/repos.py:424 +msgid "An error occurred during unlocking" +msgstr "" + +#: rhodecode/controllers/summary.py:140 msgid "No data loaded yet" msgstr "" -#: rhodecode/controllers/summary.py:142 -#: rhodecode/templates/summary/summary.html:148 +#: rhodecode/controllers/summary.py:144 +#: rhodecode/templates/summary/summary.html:157 msgid "Statistics are disabled for this repository" msgstr "" +#: rhodecode/controllers/admin/defaults.py:96 +msgid "Default settings updated successfully" +msgstr "" + +#: rhodecode/controllers/admin/defaults.py:110 +msgid "error occurred during update of defaults" +msgstr "" + #: rhodecode/controllers/admin/ldap_settings.py:50 msgid "BASE" msgstr "" @@ -342,18 +378,23 @@ msgid "error occurred during update of l msgstr "" #: rhodecode/controllers/admin/permissions.py:59 +#: rhodecode/controllers/admin/permissions.py:63 msgid "None" msgstr "" #: rhodecode/controllers/admin/permissions.py:60 +#: rhodecode/controllers/admin/permissions.py:64 msgid "Read" msgstr "" #: rhodecode/controllers/admin/permissions.py:61 +#: rhodecode/controllers/admin/permissions.py:65 msgid "Write" msgstr "" #: rhodecode/controllers/admin/permissions.py:62 +#: rhodecode/controllers/admin/permissions.py:66 +#: rhodecode/templates/admin/defaults/defaults.html:9 #: rhodecode/templates/admin/ldap/ldap.html:9 #: rhodecode/templates/admin/permissions/permissions.html:9 #: rhodecode/templates/admin/repos/repo_add.html:9 @@ -366,227 +407,223 @@ msgstr "" #: rhodecode/templates/admin/settings/settings.html:9 #: rhodecode/templates/admin/users/user_add.html:8 #: rhodecode/templates/admin/users/user_edit.html:9 -#: rhodecode/templates/admin/users/user_edit.html:122 +#: rhodecode/templates/admin/users/user_edit.html:126 #: rhodecode/templates/admin/users/users.html:9 #: rhodecode/templates/admin/users_groups/users_group_add.html:8 #: rhodecode/templates/admin/users_groups/users_group_edit.html:9 #: rhodecode/templates/admin/users_groups/users_groups.html:9 -#: rhodecode/templates/base/base.html:197 rhodecode/templates/base/base.html:337 -#: rhodecode/templates/base/base.html:339 rhodecode/templates/base/base.html:341 +#: rhodecode/templates/base/base.html:197 rhodecode/templates/base/base.html:350 +#: rhodecode/templates/base/base.html:352 rhodecode/templates/base/base.html:354 msgid "Admin" msgstr "" -#: rhodecode/controllers/admin/permissions.py:65 -msgid "disabled" -msgstr "" - -#: rhodecode/controllers/admin/permissions.py:67 -msgid "allowed with manual account activation" -msgstr "" - #: rhodecode/controllers/admin/permissions.py:69 -msgid "allowed with automatic account activation" +msgid "disabled" msgstr "" #: rhodecode/controllers/admin/permissions.py:71 -#: rhodecode/controllers/admin/permissions.py:74 +msgid "allowed with manual account activation" +msgstr "" + +#: rhodecode/controllers/admin/permissions.py:73 +msgid "allowed with automatic account activation" +msgstr "" + +#: rhodecode/controllers/admin/permissions.py:75 +#: rhodecode/controllers/admin/permissions.py:78 msgid "Disabled" msgstr "" -#: rhodecode/controllers/admin/permissions.py:72 -#: rhodecode/controllers/admin/permissions.py:75 +#: rhodecode/controllers/admin/permissions.py:76 +#: rhodecode/controllers/admin/permissions.py:79 msgid "Enabled" msgstr "" -#: rhodecode/controllers/admin/permissions.py:116 +#: rhodecode/controllers/admin/permissions.py:122 msgid "Default permissions updated successfully" msgstr "" -#: rhodecode/controllers/admin/permissions.py:130 +#: rhodecode/controllers/admin/permissions.py:136 msgid "error occurred during update of permissions" msgstr "" -#: rhodecode/controllers/admin/repos.py:123 +#: rhodecode/controllers/admin/repos.py:125 msgid "--REMOVE FORK--" msgstr "" -#: rhodecode/controllers/admin/repos.py:192 +#: rhodecode/controllers/admin/repos.py:194 #, python-format msgid "created repository %s from %s" msgstr "" -#: rhodecode/controllers/admin/repos.py:196 +#: rhodecode/controllers/admin/repos.py:198 #, python-format msgid "created repository %s" msgstr "" -#: rhodecode/controllers/admin/repos.py:227 +#: rhodecode/controllers/admin/repos.py:229 #, python-format msgid "error occurred during creation of repository %s" msgstr "" -#: rhodecode/controllers/admin/repos.py:319 +#: rhodecode/controllers/admin/repos.py:321 #, python-format msgid "Cannot delete %s it still contains attached forks" msgstr "" -#: rhodecode/controllers/admin/repos.py:348 +#: rhodecode/controllers/admin/repos.py:350 msgid "An error occurred during deletion of repository user" msgstr "" -#: rhodecode/controllers/admin/repos.py:367 +#: rhodecode/controllers/admin/repos.py:369 msgid "An error occurred during deletion of repository users groups" msgstr "" -#: rhodecode/controllers/admin/repos.py:385 +#: rhodecode/controllers/admin/repos.py:387 msgid "An error occurred during deletion of repository stats" msgstr "" -#: rhodecode/controllers/admin/repos.py:402 +#: rhodecode/controllers/admin/repos.py:404 msgid "An error occurred during cache invalidation" msgstr "" -#: rhodecode/controllers/admin/repos.py:422 -msgid "An error occurred during unlocking" -msgstr "" - -#: rhodecode/controllers/admin/repos.py:442 +#: rhodecode/controllers/admin/repos.py:444 msgid "Updated repository visibility in public journal" msgstr "" -#: rhodecode/controllers/admin/repos.py:446 +#: rhodecode/controllers/admin/repos.py:448 msgid "An error occurred during setting this repository in public journal" msgstr "" -#: rhodecode/controllers/admin/repos.py:451 rhodecode/model/validators.py:299 +#: rhodecode/controllers/admin/repos.py:453 rhodecode/model/validators.py:300 msgid "Token mismatch" msgstr "" -#: rhodecode/controllers/admin/repos.py:464 -msgid "Pulled from remote location" -msgstr "" - #: rhodecode/controllers/admin/repos.py:466 +msgid "Pulled from remote location" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:468 msgid "An error occurred during pull from remote location" msgstr "" -#: rhodecode/controllers/admin/repos.py:482 -msgid "Nothing" -msgstr "" - #: rhodecode/controllers/admin/repos.py:484 +msgid "Nothing" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:486 #, python-format msgid "Marked repo %s as fork of %s" msgstr "" -#: rhodecode/controllers/admin/repos.py:488 +#: rhodecode/controllers/admin/repos.py:490 msgid "An error occurred during this operation" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:116 +#: rhodecode/controllers/admin/repos_groups.py:120 #, python-format msgid "created repos group %s" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:129 +#: rhodecode/controllers/admin/repos_groups.py:133 #, python-format msgid "error occurred during creation of repos group %s" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:163 +#: rhodecode/controllers/admin/repos_groups.py:167 #, python-format msgid "updated repos group %s" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:176 +#: rhodecode/controllers/admin/repos_groups.py:180 #, python-format msgid "error occurred during update of repos group %s" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:194 +#: rhodecode/controllers/admin/repos_groups.py:198 #, python-format msgid "This group contains %s repositores and cannot be deleted" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:202 +#: rhodecode/controllers/admin/repos_groups.py:206 #, python-format msgid "removed repos group %s" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:208 +#: rhodecode/controllers/admin/repos_groups.py:212 msgid "Cannot delete this group it still contains subgroups" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:213 -#: rhodecode/controllers/admin/repos_groups.py:218 +#: rhodecode/controllers/admin/repos_groups.py:217 +#: rhodecode/controllers/admin/repos_groups.py:222 #, python-format msgid "error occurred during deletion of repos group %s" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:238 +#: rhodecode/controllers/admin/repos_groups.py:243 msgid "An error occurred during deletion of group user" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:258 +#: rhodecode/controllers/admin/repos_groups.py:264 msgid "An error occurred during deletion of group users groups" msgstr "" -#: rhodecode/controllers/admin/settings.py:121 +#: rhodecode/controllers/admin/settings.py:123 #, python-format msgid "Repositories successfully rescanned added: %s,removed: %s" msgstr "" -#: rhodecode/controllers/admin/settings.py:129 +#: rhodecode/controllers/admin/settings.py:131 msgid "Whoosh reindex task scheduled" msgstr "" -#: rhodecode/controllers/admin/settings.py:160 +#: rhodecode/controllers/admin/settings.py:162 msgid "Updated application settings" msgstr "" -#: rhodecode/controllers/admin/settings.py:164 -#: rhodecode/controllers/admin/settings.py:275 +#: rhodecode/controllers/admin/settings.py:166 +#: rhodecode/controllers/admin/settings.py:299 msgid "error occurred during updating application settings" msgstr "" -#: rhodecode/controllers/admin/settings.py:200 +#: rhodecode/controllers/admin/settings.py:207 msgid "Updated visualisation settings" msgstr "" -#: rhodecode/controllers/admin/settings.py:205 +#: rhodecode/controllers/admin/settings.py:212 msgid "error occurred during updating visualisation settings" msgstr "" -#: rhodecode/controllers/admin/settings.py:271 +#: rhodecode/controllers/admin/settings.py:295 msgid "Updated VCS settings" msgstr "" -#: rhodecode/controllers/admin/settings.py:285 +#: rhodecode/controllers/admin/settings.py:309 msgid "Added new hook" msgstr "" -#: rhodecode/controllers/admin/settings.py:297 +#: rhodecode/controllers/admin/settings.py:321 msgid "Updated hooks" msgstr "" -#: rhodecode/controllers/admin/settings.py:301 +#: rhodecode/controllers/admin/settings.py:325 msgid "error occurred during hook creation" msgstr "" -#: rhodecode/controllers/admin/settings.py:320 +#: rhodecode/controllers/admin/settings.py:344 msgid "Email task created" msgstr "" -#: rhodecode/controllers/admin/settings.py:375 +#: rhodecode/controllers/admin/settings.py:399 msgid "You can't edit this user since it's crucial for entire application" msgstr "" -#: rhodecode/controllers/admin/settings.py:406 +#: rhodecode/controllers/admin/settings.py:430 msgid "Your account was updated successfully" msgstr "" -#: rhodecode/controllers/admin/settings.py:421 -#: rhodecode/controllers/admin/users.py:191 +#: rhodecode/controllers/admin/settings.py:445 +#: rhodecode/controllers/admin/users.py:196 #, python-format msgid "error occurred during update of user %s" msgstr "" @@ -601,97 +638,97 @@ msgstr "" msgid "error occurred during creation of user %s" msgstr "" -#: rhodecode/controllers/admin/users.py:171 +#: rhodecode/controllers/admin/users.py:176 msgid "User updated successfully" msgstr "" -#: rhodecode/controllers/admin/users.py:207 -msgid "successfully deleted user" -msgstr "" - #: rhodecode/controllers/admin/users.py:212 +msgid "successfully deleted user" +msgstr "" + +#: rhodecode/controllers/admin/users.py:217 msgid "An error occurred during deletion of user" msgstr "" -#: rhodecode/controllers/admin/users.py:226 +#: rhodecode/controllers/admin/users.py:231 msgid "You can't edit this user" msgstr "" -#: rhodecode/controllers/admin/users.py:266 +#: rhodecode/controllers/admin/users.py:272 msgid "Granted 'repository create' permission to user" msgstr "" -#: rhodecode/controllers/admin/users.py:271 -msgid "Revoked 'repository create' permission to user" -msgstr "" - #: rhodecode/controllers/admin/users.py:277 +msgid "Revoked 'repository create' permission to user" +msgstr "" + +#: rhodecode/controllers/admin/users.py:283 msgid "Granted 'repository fork' permission to user" msgstr "" -#: rhodecode/controllers/admin/users.py:282 -msgid "Revoked 'repository fork' permission to user" -msgstr "" - #: rhodecode/controllers/admin/users.py:288 -#: rhodecode/controllers/admin/users_groups.py:255 +msgid "Revoked 'repository fork' permission to user" +msgstr "" + +#: rhodecode/controllers/admin/users.py:294 +#: rhodecode/controllers/admin/users_groups.py:279 msgid "An error occurred during permissions saving" msgstr "" -#: rhodecode/controllers/admin/users.py:303 -#, python-format -msgid "Added email %s to user" -msgstr "" - #: rhodecode/controllers/admin/users.py:309 +#, python-format +msgid "Added email %s to user" +msgstr "" + +#: rhodecode/controllers/admin/users.py:315 msgid "An error occurred during email saving" msgstr "" -#: rhodecode/controllers/admin/users.py:319 +#: rhodecode/controllers/admin/users.py:325 msgid "Removed email from user" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:84 +#: rhodecode/controllers/admin/users_groups.py:86 #, python-format msgid "created users group %s" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:95 +#: rhodecode/controllers/admin/users_groups.py:97 #, python-format msgid "error occurred during creation of users group %s" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:135 +#: rhodecode/controllers/admin/users_groups.py:164 #, python-format msgid "updated users group %s" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:157 +#: rhodecode/controllers/admin/users_groups.py:186 #, python-format msgid "error occurred during update of users group %s" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:174 +#: rhodecode/controllers/admin/users_groups.py:203 msgid "successfully deleted users group" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:179 +#: rhodecode/controllers/admin/users_groups.py:208 msgid "An error occurred during deletion of users group" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:233 +#: rhodecode/controllers/admin/users_groups.py:257 msgid "Granted 'repository create' permission to users group" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:238 +#: rhodecode/controllers/admin/users_groups.py:262 msgid "Revoked 'repository create' permission to users group" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:244 +#: rhodecode/controllers/admin/users_groups.py:268 msgid "Granted 'repository fork' permission to users group" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:249 +#: rhodecode/controllers/admin/users_groups.py:273 msgid "Revoked 'repository fork' permission to users group" msgstr "" @@ -703,298 +740,323 @@ msgstr "" msgid "You need to be a signed in to view this page" msgstr "" -#: rhodecode/lib/diffs.py:86 +#: rhodecode/lib/diffs.py:74 +msgid "binary file" +msgstr "" + +#: rhodecode/lib/diffs.py:90 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "" -#: rhodecode/lib/diffs.py:96 +#: rhodecode/lib/diffs.py:100 msgid "No changes detected" msgstr "" -#: rhodecode/lib/helpers.py:372 +#: rhodecode/lib/helpers.py:373 #, python-format msgid "%a, %d %b %Y %H:%M:%S" msgstr "" -#: rhodecode/lib/helpers.py:484 +#: rhodecode/lib/helpers.py:485 msgid "True" msgstr "" -#: rhodecode/lib/helpers.py:488 +#: rhodecode/lib/helpers.py:489 msgid "False" msgstr "" +#: rhodecode/lib/helpers.py:529 +#, python-format +msgid "Deleted branch: %s" +msgstr "" + #: rhodecode/lib/helpers.py:532 +#, python-format +msgid "Created tag: %s" +msgstr "" + +#: rhodecode/lib/helpers.py:545 msgid "Changeset not found" msgstr "" -#: rhodecode/lib/helpers.py:555 +#: rhodecode/lib/helpers.py:588 #, python-format msgid "Show all combined changesets %s->%s" msgstr "" -#: rhodecode/lib/helpers.py:561 +#: rhodecode/lib/helpers.py:594 msgid "compare view" msgstr "" -#: rhodecode/lib/helpers.py:581 +#: rhodecode/lib/helpers.py:614 msgid "and" msgstr "" -#: rhodecode/lib/helpers.py:582 +#: rhodecode/lib/helpers.py:615 #, python-format msgid "%s more" msgstr "" -#: rhodecode/lib/helpers.py:583 rhodecode/templates/changelog/changelog.html:48 +#: rhodecode/lib/helpers.py:616 rhodecode/templates/changelog/changelog.html:51 msgid "revisions" msgstr "" -#: rhodecode/lib/helpers.py:606 -msgid "fork name " -msgstr "" - -#: rhodecode/lib/helpers.py:620 +#: rhodecode/lib/helpers.py:640 +#, python-format +msgid "fork name %s" +msgstr "" + +#: rhodecode/lib/helpers.py:653 #: rhodecode/templates/pullrequests/pullrequest_show.html:4 #: rhodecode/templates/pullrequests/pullrequest_show.html:12 #, python-format msgid "Pull request #%s" msgstr "" -#: rhodecode/lib/helpers.py:626 +#: rhodecode/lib/helpers.py:659 msgid "[deleted] repository" msgstr "" -#: rhodecode/lib/helpers.py:628 rhodecode/lib/helpers.py:638 +#: rhodecode/lib/helpers.py:661 rhodecode/lib/helpers.py:671 msgid "[created] repository" msgstr "" -#: rhodecode/lib/helpers.py:630 +#: rhodecode/lib/helpers.py:663 msgid "[created] repository as fork" msgstr "" -#: rhodecode/lib/helpers.py:632 rhodecode/lib/helpers.py:640 +#: rhodecode/lib/helpers.py:665 rhodecode/lib/helpers.py:673 msgid "[forked] repository" msgstr "" -#: rhodecode/lib/helpers.py:634 rhodecode/lib/helpers.py:642 +#: rhodecode/lib/helpers.py:667 rhodecode/lib/helpers.py:675 msgid "[updated] repository" msgstr "" -#: rhodecode/lib/helpers.py:636 +#: rhodecode/lib/helpers.py:669 msgid "[delete] repository" msgstr "" -#: rhodecode/lib/helpers.py:644 +#: rhodecode/lib/helpers.py:677 msgid "[created] user" msgstr "" -#: rhodecode/lib/helpers.py:646 +#: rhodecode/lib/helpers.py:679 msgid "[updated] user" msgstr "" -#: rhodecode/lib/helpers.py:648 +#: rhodecode/lib/helpers.py:681 msgid "[created] users group" msgstr "" -#: rhodecode/lib/helpers.py:650 +#: rhodecode/lib/helpers.py:683 msgid "[updated] users group" msgstr "" -#: rhodecode/lib/helpers.py:652 +#: rhodecode/lib/helpers.py:685 msgid "[commented] on revision in repository" msgstr "" -#: rhodecode/lib/helpers.py:654 +#: rhodecode/lib/helpers.py:687 msgid "[commented] on pull request for" msgstr "" -#: rhodecode/lib/helpers.py:656 +#: rhodecode/lib/helpers.py:689 msgid "[closed] pull request for" msgstr "" -#: rhodecode/lib/helpers.py:658 +#: rhodecode/lib/helpers.py:691 msgid "[pushed] into" msgstr "" -#: rhodecode/lib/helpers.py:660 +#: rhodecode/lib/helpers.py:693 msgid "[committed via RhodeCode] into repository" msgstr "" -#: rhodecode/lib/helpers.py:662 +#: rhodecode/lib/helpers.py:695 msgid "[pulled from remote] into repository" msgstr "" -#: rhodecode/lib/helpers.py:664 +#: rhodecode/lib/helpers.py:697 msgid "[pulled] from" msgstr "" -#: rhodecode/lib/helpers.py:666 +#: rhodecode/lib/helpers.py:699 msgid "[started following] repository" msgstr "" -#: rhodecode/lib/helpers.py:668 +#: rhodecode/lib/helpers.py:701 msgid "[stopped following] repository" msgstr "" -#: rhodecode/lib/helpers.py:840 +#: rhodecode/lib/helpers.py:877 #, python-format msgid " and %s more" msgstr "" -#: rhodecode/lib/helpers.py:844 +#: rhodecode/lib/helpers.py:881 msgid "No Files" msgstr "" -#: rhodecode/lib/utils2.py:335 +#: rhodecode/lib/utils2.py:403 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:336 +#: rhodecode/lib/utils2.py:404 #, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:337 +#: rhodecode/lib/utils2.py:405 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:338 +#: rhodecode/lib/utils2.py:406 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:339 +#: rhodecode/lib/utils2.py:407 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:340 +#: rhodecode/lib/utils2.py:408 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:355 +#: rhodecode/lib/utils2.py:424 +#, python-format +msgid "in %s" +msgstr "" + +#: rhodecode/lib/utils2.py:426 #, python-format msgid "%s ago" msgstr "" -#: rhodecode/lib/utils2.py:357 +#: rhodecode/lib/utils2.py:428 +#, python-format +msgid "in %s and %s" +msgstr "" + +#: rhodecode/lib/utils2.py:431 #, python-format msgid "%s and %s ago" msgstr "" -#: rhodecode/lib/utils2.py:360 +#: rhodecode/lib/utils2.py:434 msgid "just now" msgstr "" -#: rhodecode/lib/celerylib/tasks.py:269 +#: rhodecode/lib/celerylib/tasks.py:270 msgid "password reset link" msgstr "" +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 rhodecode/model/db.py:1180 +msgid "Repository no access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1181 +msgid "Repository read access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1182 +msgid "Repository write access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1183 +msgid "Repository admin access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1185 +msgid "Repositories Group no access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1186 +msgid "Repositories Group read access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1187 +msgid "Repositories Group write access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1188 +msgid "Repositories Group admin access" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1190 +msgid "RhodeCode Administrator" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1191 +msgid "Repository creation disabled" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1192 +msgid "Repository creation enabled" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1193 +msgid "Repository forking disabled" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1194 +msgid "Repository forking enabled" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1195 +msgid "Register disabled" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1196 +msgid "Register new user with RhodeCode with manual activation" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1199 +msgid "Register new user with RhodeCode with auto activation" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1640 +msgid "Not Reviewed" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1641 +msgid "Approved" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1642 +msgid "Rejected" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1643 +msgid "Under Review" +msgstr "" + #: rhodecode/model/comment.py:110 #, python-format msgid "on line %s" msgstr "" -#: rhodecode/model/comment.py:157 +#: rhodecode/model/comment.py:173 msgid "[Mention]" msgstr "" -#: rhodecode/model/db.py:1140 -msgid "Repository no access" -msgstr "" - -#: rhodecode/model/db.py:1141 -msgid "Repository read access" -msgstr "" - -#: rhodecode/model/db.py:1142 -msgid "Repository write access" -msgstr "" - -#: rhodecode/model/db.py:1143 -msgid "Repository admin access" -msgstr "" - -#: rhodecode/model/db.py:1145 -msgid "Repositories Group no access" -msgstr "" - -#: rhodecode/model/db.py:1146 -msgid "Repositories Group read access" -msgstr "" - -#: rhodecode/model/db.py:1147 -msgid "Repositories Group write access" -msgstr "" - -#: rhodecode/model/db.py:1148 -msgid "Repositories Group admin access" -msgstr "" - -#: rhodecode/model/db.py:1150 -msgid "RhodeCode Administrator" -msgstr "" - -#: rhodecode/model/db.py:1151 -msgid "Repository creation disabled" -msgstr "" - -#: rhodecode/model/db.py:1152 -msgid "Repository creation enabled" -msgstr "" - -#: rhodecode/model/db.py:1153 -msgid "Repository forking disabled" -msgstr "" - -#: rhodecode/model/db.py:1154 -msgid "Repository forking enabled" -msgstr "" - -#: rhodecode/model/db.py:1155 -msgid "Register disabled" -msgstr "" - -#: rhodecode/model/db.py:1156 -msgid "Register new user with RhodeCode with manual activation" -msgstr "" - -#: rhodecode/model/db.py:1159 -msgid "Register new user with RhodeCode with auto activation" -msgstr "" - -#: rhodecode/model/db.py:1579 -msgid "Not Reviewed" -msgstr "" - -#: rhodecode/model/db.py:1580 -msgid "Approved" -msgstr "" - -#: rhodecode/model/db.py:1581 -msgid "Rejected" -msgstr "" - -#: rhodecode/model/db.py:1582 -msgid "Under Review" -msgstr "" - #: rhodecode/model/forms.py:43 msgid "Please enter a login" msgstr "" @@ -1014,35 +1076,41 @@ msgid "Enter %(min)i characters or more" msgstr "" #: rhodecode/model/notification.py:220 -msgid "commented on commit" +#, python-format +msgid "commented on commit at %(when)s" msgstr "" #: rhodecode/model/notification.py:221 -msgid "sent message" +#, python-format +msgid "sent message at %(when)s" msgstr "" #: rhodecode/model/notification.py:222 -msgid "mentioned you" +#, python-format +msgid "mentioned you at %(when)s" msgstr "" #: rhodecode/model/notification.py:223 -msgid "registered in RhodeCode" +#, python-format +msgid "registered in RhodeCode at %(when)s" msgstr "" #: rhodecode/model/notification.py:224 -msgid "opened new pull request" +#, python-format +msgid "opened new pull request at %(when)s" msgstr "" #: rhodecode/model/notification.py:225 -msgid "commented on pull request" -msgstr "" - -#: rhodecode/model/pull_request.py:84 +#, python-format +msgid "commented on pull request at %(when)s" +msgstr "" + +#: rhodecode/model/pull_request.py:90 #, python-format msgid "%(user)s wants you to review pull request #%(pr_id)s" msgstr "" -#: rhodecode/model/scm.py:535 +#: rhodecode/model/scm.py:542 msgid "latest tip" msgstr "" @@ -1050,152 +1118,156 @@ msgstr "" msgid "new user registration" msgstr "" -#: rhodecode/model/user.py:255 rhodecode/model/user.py:277 -#: rhodecode/model/user.py:299 +#: rhodecode/model/user.py:255 rhodecode/model/user.py:279 +#: rhodecode/model/user.py:301 msgid "You can't Edit this user since it's crucial for entire application" msgstr "" -#: rhodecode/model/user.py:323 +#: rhodecode/model/user.py:325 msgid "You can't remove this user since it's crucial for entire application" msgstr "" -#: rhodecode/model/user.py:329 +#: rhodecode/model/user.py:331 #, python-format msgid "" "user \"%s\" still owns %s repositories and cannot be removed. Switch owners " "or remove those repositories. %s" msgstr "" -#: rhodecode/model/validators.py:35 rhodecode/model/validators.py:36 +#: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37 msgid "Value cannot be an empty list" msgstr "" -#: rhodecode/model/validators.py:82 +#: rhodecode/model/validators.py:83 #, python-format msgid "Username \"%(username)s\" already exists" msgstr "" -#: rhodecode/model/validators.py:84 +#: rhodecode/model/validators.py:85 #, python-format msgid "Username \"%(username)s\" is forbidden" msgstr "" -#: rhodecode/model/validators.py:86 +#: rhodecode/model/validators.py:87 msgid "" "Username may only contain alphanumeric characters underscores, periods or " "dashes and must begin with alphanumeric character" msgstr "" -#: rhodecode/model/validators.py:114 +#: rhodecode/model/validators.py:115 #, python-format msgid "Username %(username)s is not valid" msgstr "" -#: rhodecode/model/validators.py:133 -msgid "Invalid users group name" -msgstr "" - #: rhodecode/model/validators.py:134 +msgid "Invalid users group name" +msgstr "" + +#: rhodecode/model/validators.py:135 #, python-format msgid "Users group \"%(usersgroup)s\" already exists" msgstr "" -#: rhodecode/model/validators.py:136 +#: rhodecode/model/validators.py:137 msgid "" "users group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" msgstr "" -#: rhodecode/model/validators.py:174 +#: rhodecode/model/validators.py:175 msgid "Cannot assign this group as parent" msgstr "" -#: rhodecode/model/validators.py:175 +#: rhodecode/model/validators.py:176 #, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "" -#: rhodecode/model/validators.py:177 +#: rhodecode/model/validators.py:178 #, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "" -#: rhodecode/model/validators.py:235 +#: rhodecode/model/validators.py:236 msgid "Invalid characters (non-ascii) in password" msgstr "" -#: rhodecode/model/validators.py:250 +#: rhodecode/model/validators.py:251 msgid "Passwords do not match" msgstr "" -#: rhodecode/model/validators.py:267 -msgid "invalid password" -msgstr "" - #: rhodecode/model/validators.py:268 -msgid "invalid user name" +msgid "invalid password" msgstr "" #: rhodecode/model/validators.py:269 +msgid "invalid user name" +msgstr "" + +#: rhodecode/model/validators.py:270 msgid "Your account is disabled" msgstr "" -#: rhodecode/model/validators.py:313 +#: rhodecode/model/validators.py:314 #, python-format msgid "Repository name %(repo)s is disallowed" msgstr "" -#: rhodecode/model/validators.py:315 -#, python-format -msgid "Repository named %(repo)s already exists" -msgstr "" - #: rhodecode/model/validators.py:316 #, python-format +msgid "Repository named %(repo)s already exists" +msgstr "" + +#: rhodecode/model/validators.py:317 +#, python-format msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" msgstr "" -#: rhodecode/model/validators.py:318 +#: rhodecode/model/validators.py:319 #, python-format msgid "Repositories group with name \"%(repo)s\" already exists" msgstr "" -#: rhodecode/model/validators.py:431 -msgid "invalid clone url" -msgstr "" - #: rhodecode/model/validators.py:432 +msgid "invalid clone url" +msgstr "" + +#: rhodecode/model/validators.py:433 msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url" msgstr "" -#: rhodecode/model/validators.py:457 +#: rhodecode/model/validators.py:458 msgid "Fork have to be the same type as parent" msgstr "" -#: rhodecode/model/validators.py:478 +#: rhodecode/model/validators.py:473 +msgid "You don't have permissions to create repository in this group" +msgstr "" + +#: rhodecode/model/validators.py:498 msgid "This username or users group name is not valid" msgstr "" -#: rhodecode/model/validators.py:562 +#: rhodecode/model/validators.py:582 msgid "This is not a valid path" msgstr "" -#: rhodecode/model/validators.py:577 -msgid "This e-mail address is already taken" -msgstr "" - #: rhodecode/model/validators.py:597 +msgid "This e-mail address is already taken" +msgstr "" + +#: rhodecode/model/validators.py:617 #, python-format msgid "e-mail \"%(email)s\" does not exist." msgstr "" -#: rhodecode/model/validators.py:634 +#: rhodecode/model/validators.py:654 msgid "" "The LDAP Login attribute of the CN must be specified - this is the name of " "the attribute that is equivalent to \"username\"" msgstr "" -#: rhodecode/model/validators.py:653 +#: rhodecode/model/validators.py:673 #, python-format msgid "Revisions %(revs)s are already part of pull request or have set status" msgstr "" @@ -1218,7 +1290,7 @@ msgstr "" #: rhodecode/templates/index_base.html:6 #: rhodecode/templates/admin/repos/repos.html:9 -#: rhodecode/templates/base/base.html:221 +#: rhodecode/templates/base/base.html:233 msgid "repositories" msgstr "" @@ -1227,7 +1299,7 @@ msgstr "" msgid "ADD REPOSITORY" msgstr "" -#: rhodecode/templates/index_base.html:29 +#: rhodecode/templates/index_base.html:29 rhodecode/templates/index_base.html:136 #: 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 @@ -1236,8 +1308,9 @@ msgstr "" msgid "Group name" msgstr "" -#: rhodecode/templates/index_base.html:30 rhodecode/templates/index_base.html:71 -#: rhodecode/templates/index_base.html:142 rhodecode/templates/index_base.html:168 +#: rhodecode/templates/index_base.html:30 rhodecode/templates/index_base.html:72 +#: rhodecode/templates/index_base.html:138 rhodecode/templates/index_base.html:176 +#: rhodecode/templates/index_base.html:266 #: rhodecode/templates/admin/repos/repo_add_base.html:56 #: rhodecode/templates/admin/repos/repo_edit.html:75 #: rhodecode/templates/admin/repos/repos.html:72 @@ -1246,134 +1319,127 @@ msgstr "" #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34 #: rhodecode/templates/forks/fork.html:59 #: rhodecode/templates/settings/repo_settings.html:66 -#: rhodecode/templates/summary/summary.html:105 +#: rhodecode/templates/summary/summary.html:114 msgid "Description" msgstr "" #: rhodecode/templates/index_base.html:40 -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47 msgid "Repositories group" msgstr "" -#: rhodecode/templates/index_base.html:70 rhodecode/templates/index_base.html:166 +#: rhodecode/templates/index_base.html:71 rhodecode/templates/index_base.html:174 +#: rhodecode/templates/index_base.html:264 #: rhodecode/templates/admin/repos/repo_add_base.html:9 #: rhodecode/templates/admin/repos/repo_edit.html:32 #: rhodecode/templates/admin/repos/repos.html:70 -#: rhodecode/templates/admin/users/user_edit.html:192 +#: rhodecode/templates/admin/users/user_edit.html:196 #: rhodecode/templates/admin/users/user_edit_my_account.html:59 -#: rhodecode/templates/admin/users/user_edit_my_account.html:157 -#: rhodecode/templates/admin/users/user_edit_my_account.html:193 +#: rhodecode/templates/admin/users/user_edit_my_account.html:180 +#: rhodecode/templates/admin/users/user_edit_my_account.html:216 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:6 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:184 #: rhodecode/templates/bookmarks/bookmarks.html:36 #: rhodecode/templates/bookmarks/bookmarks_data.html:6 -#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches.html:50 +#: rhodecode/templates/branches/branches_data.html:6 #: rhodecode/templates/files/files_browser.html:47 -#: rhodecode/templates/journal/journal.html:59 -#: rhodecode/templates/journal/journal.html:107 -#: rhodecode/templates/journal/journal.html:186 +#: rhodecode/templates/journal/journal.html:62 +#: rhodecode/templates/journal/journal.html:168 +#: rhodecode/templates/journal/journal_page_repos.html:7 #: rhodecode/templates/settings/repo_settings.html:31 #: rhodecode/templates/summary/summary.html:43 -#: rhodecode/templates/summary/summary.html:123 -#: rhodecode/templates/tags/tags.html:36 rhodecode/templates/tags/tags_data.html:6 +#: rhodecode/templates/summary/summary.html:132 +#: rhodecode/templates/tags/tags.html:51 rhodecode/templates/tags/tags_data.html:6 msgid "Name" msgstr "" -#: rhodecode/templates/index_base.html:72 +#: rhodecode/templates/index_base.html:73 msgid "Last change" msgstr "" -#: rhodecode/templates/index_base.html:73 rhodecode/templates/index_base.html:171 -#: rhodecode/templates/admin/users/user_edit_my_account.html:159 -#: rhodecode/templates/journal/journal.html:188 +#: rhodecode/templates/index_base.html:74 rhodecode/templates/index_base.html:179 +#: rhodecode/templates/admin/users/user_edit_my_account.html:182 +#: rhodecode/templates/journal/journal.html:170 msgid "Tip" msgstr "" -#: rhodecode/templates/index_base.html:74 rhodecode/templates/index_base.html:173 +#: rhodecode/templates/index_base.html:75 rhodecode/templates/index_base.html:181 +#: rhodecode/templates/index_base.html:269 #: rhodecode/templates/admin/repos/repo_edit.html:121 #: rhodecode/templates/admin/repos/repos.html:73 msgid "Owner" msgstr "" -#: rhodecode/templates/index_base.html:75 -#: rhodecode/templates/summary/summary.html:48 -#: rhodecode/templates/summary/summary.html:51 -msgid "RSS" -msgstr "" - #: rhodecode/templates/index_base.html:76 +#: rhodecode/templates/summary/summary.html:48 +#: rhodecode/templates/summary/summary.html:51 +msgid "RSS" +msgstr "" + +#: rhodecode/templates/index_base.html:77 msgid "Atom" msgstr "" -#: rhodecode/templates/index_base.html:110 rhodecode/templates/index_base.html:112 -#, python-format -msgid "Subscribe to %s rss feed" -msgstr "" - -#: rhodecode/templates/index_base.html:117 rhodecode/templates/index_base.html:119 -#, python-format -msgid "Subscribe to %s atom feed" -msgstr "" - -#: rhodecode/templates/index_base.html:140 -msgid "Group Name" -msgstr "" - -#: rhodecode/templates/index_base.html:158 rhodecode/templates/index_base.html:198 +#: rhodecode/templates/index_base.html:167 rhodecode/templates/index_base.html:207 +#: rhodecode/templates/index_base.html:291 #: rhodecode/templates/admin/repos/repos.html:94 -#: rhodecode/templates/admin/users/user_edit_my_account.html:179 +#: rhodecode/templates/admin/users/user_edit_my_account.html:202 #: rhodecode/templates/admin/users/users.html:107 #: rhodecode/templates/bookmarks/bookmarks.html:60 -#: rhodecode/templates/branches/branches.html:77 -#: rhodecode/templates/journal/journal.html:211 -#: rhodecode/templates/tags/tags.html:60 +#: rhodecode/templates/branches/branches.html:76 +#: rhodecode/templates/journal/journal.html:193 +#: rhodecode/templates/tags/tags.html:77 msgid "Click to sort ascending" msgstr "" -#: rhodecode/templates/index_base.html:159 rhodecode/templates/index_base.html:199 +#: rhodecode/templates/index_base.html:168 rhodecode/templates/index_base.html:208 +#: rhodecode/templates/index_base.html:292 #: rhodecode/templates/admin/repos/repos.html:95 -#: rhodecode/templates/admin/users/user_edit_my_account.html:180 +#: rhodecode/templates/admin/users/user_edit_my_account.html:203 #: rhodecode/templates/admin/users/users.html:108 #: rhodecode/templates/bookmarks/bookmarks.html:61 -#: rhodecode/templates/branches/branches.html:78 -#: rhodecode/templates/journal/journal.html:212 -#: rhodecode/templates/tags/tags.html:61 +#: rhodecode/templates/branches/branches.html:77 +#: rhodecode/templates/journal/journal.html:194 +#: rhodecode/templates/tags/tags.html:78 msgid "Click to sort descending" msgstr "" -#: rhodecode/templates/index_base.html:169 +#: rhodecode/templates/index_base.html:177 rhodecode/templates/index_base.html:267 msgid "Last Change" msgstr "" -#: rhodecode/templates/index_base.html:200 +#: rhodecode/templates/index_base.html:209 rhodecode/templates/index_base.html:293 #: rhodecode/templates/admin/repos/repos.html:96 -#: rhodecode/templates/admin/users/user_edit_my_account.html:181 +#: rhodecode/templates/admin/users/user_edit_my_account.html:204 #: rhodecode/templates/admin/users/users.html:109 #: rhodecode/templates/bookmarks/bookmarks.html:62 -#: rhodecode/templates/branches/branches.html:79 -#: rhodecode/templates/journal/journal.html:213 -#: rhodecode/templates/tags/tags.html:62 +#: rhodecode/templates/branches/branches.html:78 +#: rhodecode/templates/journal/journal.html:195 +#: rhodecode/templates/tags/tags.html:79 msgid "No records found." msgstr "" -#: rhodecode/templates/index_base.html:201 +#: rhodecode/templates/index_base.html:210 rhodecode/templates/index_base.html:294 #: rhodecode/templates/admin/repos/repos.html:97 -#: rhodecode/templates/admin/users/user_edit_my_account.html:182 +#: rhodecode/templates/admin/users/user_edit_my_account.html:205 #: rhodecode/templates/admin/users/users.html:110 #: rhodecode/templates/bookmarks/bookmarks.html:63 -#: rhodecode/templates/branches/branches.html:80 -#: rhodecode/templates/journal/journal.html:214 -#: rhodecode/templates/tags/tags.html:63 +#: rhodecode/templates/branches/branches.html:79 +#: rhodecode/templates/journal/journal.html:196 +#: rhodecode/templates/tags/tags.html:80 msgid "Data error." msgstr "" -#: rhodecode/templates/index_base.html:202 +#: rhodecode/templates/index_base.html:211 rhodecode/templates/index_base.html:295 #: rhodecode/templates/admin/repos/repos.html:98 -#: rhodecode/templates/admin/users/user_edit_my_account.html:183 +#: rhodecode/templates/admin/users/user_edit_my_account.html:206 #: rhodecode/templates/admin/users/users.html:111 #: rhodecode/templates/bookmarks/bookmarks.html:64 -#: rhodecode/templates/branches/branches.html:81 -#: rhodecode/templates/journal/journal.html:215 -#: rhodecode/templates/tags/tags.html:64 +#: rhodecode/templates/branches/branches.html:80 +#: rhodecode/templates/journal/journal.html:54 +#: rhodecode/templates/journal/journal.html:197 +#: rhodecode/templates/tags/tags.html:81 msgid "Loading..." msgstr "" @@ -1391,7 +1457,7 @@ msgstr "" #: rhodecode/templates/admin/users/user_edit.html:50 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:26 #: rhodecode/templates/base/base.html:83 -#: rhodecode/templates/summary/summary.html:122 +#: rhodecode/templates/summary/summary.html:131 msgid "Username" msgstr "" @@ -1448,23 +1514,23 @@ msgstr "" #: rhodecode/templates/register.html:47 #: rhodecode/templates/admin/users/user_add.html:59 -#: rhodecode/templates/admin/users/user_edit.html:86 +#: rhodecode/templates/admin/users/user_edit.html:90 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:53 msgid "First Name" msgstr "" #: rhodecode/templates/register.html:56 #: rhodecode/templates/admin/users/user_add.html:68 -#: rhodecode/templates/admin/users/user_edit.html:95 +#: rhodecode/templates/admin/users/user_edit.html:99 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:62 msgid "Last Name" msgstr "" #: rhodecode/templates/register.html:65 #: rhodecode/templates/admin/users/user_add.html:77 -#: rhodecode/templates/admin/users/user_edit.html:104 +#: rhodecode/templates/admin/users/user_edit.html:108 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:71 -#: rhodecode/templates/summary/summary.html:124 +#: rhodecode/templates/summary/summary.html:133 msgid "Email" msgstr "" @@ -1477,6 +1543,7 @@ msgid "Your account must wait for activa msgstr "" #: rhodecode/templates/repo_switcher_list.html:11 +#: rhodecode/templates/admin/defaults/defaults.html:44 #: rhodecode/templates/admin/repos/repo_add_base.html:65 #: rhodecode/templates/admin/repos/repo_edit.html:85 #: rhodecode/templates/settings/repo_settings.html:76 @@ -1504,7 +1571,7 @@ msgid "tags" msgstr "" #: rhodecode/templates/switch_to_list.html:22 -#: rhodecode/templates/tags/tags_data.html:33 +#: rhodecode/templates/tags/tags_data.html:38 msgid "There are no tags yet" msgstr "" @@ -1526,20 +1593,22 @@ msgstr "" #: rhodecode/templates/admin/repos/repos.html:74 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:9 -#: rhodecode/templates/journal/journal.html:61 -#: rhodecode/templates/journal/journal.html:62 +#: rhodecode/templates/journal/journal_page_repos.html:9 +#: rhodecode/templates/journal/journal_page_repos.html:10 msgid "Action" msgstr "" #: rhodecode/templates/admin/admin_log.html:7 +#: rhodecode/templates/admin/permissions/permissions.html:41 msgid "Repository" msgstr "" #: rhodecode/templates/admin/admin_log.html:8 #: rhodecode/templates/bookmarks/bookmarks.html:37 #: rhodecode/templates/bookmarks/bookmarks_data.html:7 -#: rhodecode/templates/branches/branches.html:52 -#: rhodecode/templates/tags/tags.html:37 rhodecode/templates/tags/tags_data.html:7 +#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches_data.html:7 +#: rhodecode/templates/tags/tags.html:52 rhodecode/templates/tags/tags_data.html:7 msgid "Date" msgstr "" @@ -1547,10 +1616,79 @@ msgstr "" msgid "From IP" msgstr "" -#: rhodecode/templates/admin/admin_log.html:53 +#: rhodecode/templates/admin/admin_log.html:57 msgid "No actions yet" msgstr "" +#: rhodecode/templates/admin/defaults/defaults.html:5 +#: rhodecode/templates/admin/defaults/defaults.html:25 +msgid "Repositories defaults" +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:11 +msgid "Defaults" +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:35 +#: rhodecode/templates/admin/repos/repo_add_base.html:38 +#: rhodecode/templates/admin/repos/repo_edit.html:58 +msgid "Type" +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:48 +#: rhodecode/templates/admin/repos/repo_add_base.html:69 +#: rhodecode/templates/admin/repos/repo_edit.html:89 +#: rhodecode/templates/forks/fork.html:72 +#: rhodecode/templates/settings/repo_settings.html:80 +msgid "" +"Private repositories are only visible to people explicitly added as " +"collaborators." +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:55 +#: rhodecode/templates/admin/repos/repo_edit.html:94 +msgid "Enable statistics" +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:59 +#: rhodecode/templates/admin/repos/repo_edit.html:98 +msgid "Enable statistics window on summary page." +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:65 +#: rhodecode/templates/admin/repos/repo_edit.html:103 +msgid "Enable downloads" +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:69 +#: rhodecode/templates/admin/repos/repo_edit.html:107 +msgid "Enable download menu on summary page." +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:75 +#: rhodecode/templates/admin/repos/repo_edit.html:112 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66 +msgid "Enable locking" +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:79 +#: rhodecode/templates/admin/repos/repo_edit.html:116 +msgid "Enable lock-by-pulling on repository." +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:84 +#: rhodecode/templates/admin/ldap/ldap.html:89 +#: rhodecode/templates/admin/repos/repo_edit.html:141 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74 +#: rhodecode/templates/admin/settings/hooks.html:73 +#: rhodecode/templates/admin/users/user_edit.html:133 +#: rhodecode/templates/admin/users/user_edit.html:178 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:135 +#: rhodecode/templates/settings/repo_settings.html:93 +msgid "Save" +msgstr "" + #: rhodecode/templates/admin/ldap/ldap.html:5 msgid "LDAP administration" msgstr "" @@ -1623,18 +1761,6 @@ msgstr "" msgid "E-mail Attribute" msgstr "" -#: rhodecode/templates/admin/ldap/ldap.html:89 -#: rhodecode/templates/admin/repos/repo_edit.html:141 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74 -#: rhodecode/templates/admin/settings/hooks.html:73 -#: rhodecode/templates/admin/users/user_edit.html:129 -#: rhodecode/templates/admin/users/user_edit.html:174 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79 -#: rhodecode/templates/admin/users_groups/users_group_edit.html:135 -#: rhodecode/templates/settings/repo_settings.html:93 -msgid "Save" -msgstr "" - #: rhodecode/templates/admin/notifications/notifications.html:5 #: rhodecode/templates/admin/notifications/notifications.html:9 msgid "My Notifications" @@ -1649,7 +1775,7 @@ msgid "Comments" msgstr "" #: rhodecode/templates/admin/notifications/notifications.html:31 -#: rhodecode/templates/base/base.html:254 rhodecode/templates/base/base.html:256 +#: rhodecode/templates/base/base.html:267 rhodecode/templates/base/base.html:269 msgid "Pull requests" msgstr "" @@ -1677,7 +1803,7 @@ msgstr "" #: rhodecode/templates/admin/permissions/permissions.html:11 #: rhodecode/templates/admin/repos/repo_edit.html:134 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58 -#: rhodecode/templates/admin/users/user_edit.html:139 +#: rhodecode/templates/admin/users/user_edit.html:143 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100 #: rhodecode/templates/settings/repo_settings.html:86 msgid "Permissions" @@ -1691,10 +1817,6 @@ msgstr "" 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 " @@ -1703,23 +1825,40 @@ msgid "" msgstr "" #: rhodecode/templates/admin/permissions/permissions.html:50 +#: rhodecode/templates/admin/permissions/permissions.html:63 msgid "overwrite existing settings" msgstr "" #: rhodecode/templates/admin/permissions/permissions.html:55 +#: rhodecode/templates/admin/repos/repo_add_base.html:29 +#: rhodecode/templates/admin/repos/repo_edit.html:49 +#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 +#: rhodecode/templates/forks/fork.html:50 +#: rhodecode/templates/settings/repo_settings.html:48 +msgid "Repository group" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:62 +msgid "" +"All default permissions on each repository group will be reset to choosen " +"permission, note that all custom default permission on repositories group " +"will be lost" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:69 msgid "Registration" msgstr "" -#: rhodecode/templates/admin/permissions/permissions.html:63 +#: rhodecode/templates/admin/permissions/permissions.html:77 msgid "Repository creation" msgstr "" -#: rhodecode/templates/admin/permissions/permissions.html:71 +#: rhodecode/templates/admin/permissions/permissions.html:85 msgid "Repository forking" msgstr "" -#: rhodecode/templates/admin/permissions/permissions.html:78 -#: rhodecode/templates/admin/repos/repo_edit.html:241 +#: rhodecode/templates/admin/permissions/permissions.html:92 +#: rhodecode/templates/admin/repos/repo_edit.html:264 msgid "set" msgstr "" @@ -1739,8 +1878,8 @@ msgid "add new" msgstr "" #: rhodecode/templates/admin/repos/repo_add_base.html:20 -#: rhodecode/templates/summary/summary.html:95 -#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:104 +#: rhodecode/templates/summary/summary.html:105 msgid "Clone from" msgstr "" @@ -1750,24 +1889,11 @@ msgstr "" msgid "Optional http[s] url from which repository should be cloned." msgstr "" -#: rhodecode/templates/admin/repos/repo_add_base.html:29 -#: rhodecode/templates/admin/repos/repo_edit.html:49 -#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 -#: rhodecode/templates/forks/fork.html:50 -#: rhodecode/templates/settings/repo_settings.html:48 -msgid "Repository group" -msgstr "" - #: rhodecode/templates/admin/repos/repo_add_base.html:33 #: rhodecode/templates/forks/fork.html:54 msgid "Optionaly select a group to put this repository into." msgstr "" -#: rhodecode/templates/admin/repos/repo_add_base.html:38 -#: rhodecode/templates/admin/repos/repo_edit.html:58 -msgid "Type" -msgstr "" - #: rhodecode/templates/admin/repos/repo_add_base.html:42 msgid "Type of repository to create." msgstr "" @@ -1793,15 +1919,6 @@ msgstr "" msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "" -#: rhodecode/templates/admin/repos/repo_add_base.html:69 -#: rhodecode/templates/admin/repos/repo_edit.html:89 -#: rhodecode/templates/forks/fork.html:72 -#: rhodecode/templates/settings/repo_settings.html:80 -msgid "" -"Private repositories are only visible to people explicitly added as " -"collaborators." -msgstr "" - #: rhodecode/templates/admin/repos/repo_add_base.html:73 msgid "add" msgstr "" @@ -1816,12 +1933,14 @@ msgstr "" #: rhodecode/templates/admin/repos/repo_edit.html:13 #: rhodecode/templates/admin/users/user_edit.html:13 -#: rhodecode/templates/admin/users/user_edit.html:224 -#: rhodecode/templates/admin/users/user_edit.html:226 +#: rhodecode/templates/admin/users/user_edit.html:228 +#: rhodecode/templates/admin/users/user_edit.html:230 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28 #: rhodecode/templates/admin/users_groups/users_group_edit.html:13 -#: rhodecode/templates/files/files_source.html:44 -#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:207 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:209 +#: rhodecode/templates/files/files_source.html:29 +#: rhodecode/templates/journal/journal_page_repos.html:29 msgid "edit" msgstr "" @@ -1835,31 +1954,6 @@ msgstr "" msgid "Optional select a group to put this repository into." msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:94 -msgid "Enable statistics" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:98 -msgid "Enable statistics window on summary page." -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:103 -msgid "Enable downloads" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:107 -msgid "Enable download menu on summary page." -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:112 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66 -msgid "Enable locking" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:116 -msgid "Enable lock-by-pulling on repository." -msgstr "" - #: rhodecode/templates/admin/repos/repo_edit.html:126 msgid "Change owner of this repository." msgstr "" @@ -1867,11 +1961,11 @@ msgstr "" #: rhodecode/templates/admin/repos/repo_edit.html:142 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:75 #: rhodecode/templates/admin/settings/settings.html:113 -#: rhodecode/templates/admin/settings/settings.html:168 -#: rhodecode/templates/admin/settings/settings.html:258 -#: rhodecode/templates/admin/users/user_edit.html:130 -#: rhodecode/templates/admin/users/user_edit.html:175 -#: rhodecode/templates/admin/users/user_edit.html:278 +#: rhodecode/templates/admin/settings/settings.html:179 +#: rhodecode/templates/admin/settings/settings.html:269 +#: rhodecode/templates/admin/users/user_edit.html:134 +#: rhodecode/templates/admin/users/user_edit.html:179 +#: rhodecode/templates/admin/users/user_edit.html:282 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:80 #: rhodecode/templates/admin/users_groups/users_group_edit.html:136 #: rhodecode/templates/files/files_add.html:82 @@ -1929,77 +2023,102 @@ msgstr "" msgid "Confirm to invalidate repository cache" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:195 -#: rhodecode/templates/base/base.html:318 rhodecode/templates/base/base.html:320 -#: rhodecode/templates/base/base.html:322 -msgid "Public journal" +#: rhodecode/templates/admin/repos/repo_edit.html:193 +msgid "" +"Manually invalidate cache for this repository. On first access repository " +"will be cached again" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:198 +msgid "List of cached values" msgstr "" #: rhodecode/templates/admin/repos/repo_edit.html:201 -msgid "Remove from public journal" +msgid "Prefix" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:202 +msgid "Key" msgstr "" #: rhodecode/templates/admin/repos/repo_edit.html:203 +#: rhodecode/templates/admin/users/user_add.html:86 +#: rhodecode/templates/admin/users/user_edit.html:117 +#: 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/repos/repo_edit.html:218 +#: rhodecode/templates/base/base.html:331 rhodecode/templates/base/base.html:333 +#: rhodecode/templates/base/base.html:335 +msgid "Public journal" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:224 +msgid "Remove from public journal" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:226 msgid "Add to public journal" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:208 +#: rhodecode/templates/admin/repos/repo_edit.html:231 msgid "" "All actions made on this repository will be accessible to everyone in public " "journal" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:215 +#: rhodecode/templates/admin/repos/repo_edit.html:238 msgid "Locking" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:220 +#: rhodecode/templates/admin/repos/repo_edit.html:243 msgid "Unlock locked repo" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:220 +#: rhodecode/templates/admin/repos/repo_edit.html:243 msgid "Confirm to unlock repository" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:223 +#: rhodecode/templates/admin/repos/repo_edit.html:246 msgid "lock repo" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:223 +#: rhodecode/templates/admin/repos/repo_edit.html:246 msgid "Confirm to lock repository" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:224 +#: rhodecode/templates/admin/repos/repo_edit.html:247 msgid "Repository is not locked" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:229 +#: rhodecode/templates/admin/repos/repo_edit.html:252 msgid "Force locking on repository. Works only when anonymous access is disabled" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:236 -msgid "Set as fork of" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:245 -msgid "Manually set this repository as a fork of another from the list" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:251 -#: rhodecode/templates/changeset/changeset_file_comment.html:26 -msgid "Delete" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:255 -msgid "Remove this repository" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:255 -#: rhodecode/templates/journal/journal.html:84 -msgid "Confirm to delete this repository" -msgstr "" - #: rhodecode/templates/admin/repos/repo_edit.html:259 +msgid "Set as fork of" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:268 +msgid "Manually set this repository as a fork of another from the list" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:274 +#: rhodecode/templates/changeset/changeset_file_comment.html:26 +msgid "Delete" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:278 +msgid "Remove this repository" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:278 +msgid "Confirm to delete this repository" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:282 msgid "" "This repository will be renamed in a special way in order to be unaccesible " "for RhodeCode and VCS systems.\n" @@ -2025,7 +2144,7 @@ msgstr "" #: rhodecode/templates/admin/repos/repo_edit_perms.html:6 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6 #: rhodecode/templates/admin/users/users.html:85 -#: rhodecode/templates/base/base.html:217 +#: rhodecode/templates/base/base.html:229 msgid "admin" msgstr "" @@ -2036,8 +2155,8 @@ msgstr "" #: rhodecode/templates/admin/repos/repo_edit_perms.html:16 #: rhodecode/templates/data_table/_dt_elements.html:67 -#: rhodecode/templates/journal/journal.html:132 -#: rhodecode/templates/summary/summary.html:76 +#: rhodecode/templates/journal/journal.html:87 +#: rhodecode/templates/summary/summary.html:85 msgid "private repository" msgstr "" @@ -2060,12 +2179,12 @@ msgid "Add another member" msgstr "" #: rhodecode/templates/admin/repos/repo_edit_perms.html:97 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:81 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 msgid "Failed to remove user" msgstr "" #: rhodecode/templates/admin/repos/repo_edit_perms.html:112 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:96 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:103 msgid "Failed to remove users group" msgstr "" @@ -2073,11 +2192,41 @@ msgstr "" msgid "Repositories administration" msgstr "" -#: rhodecode/templates/admin/repos_groups/repos_groups.html:8 -msgid "Groups" -msgstr "" - -#: rhodecode/templates/admin/repos_groups/repos_groups.html:12 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73 +msgid "apply to children" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74 +msgid "" +"Set or revoke permission to all children of that group, including " +"repositories and other groups" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups.html:9 +#: rhodecode/templates/base/base.html:122 rhodecode/templates/base/base.html:313 +#: rhodecode/templates/base/base.html:315 rhodecode/templates/base/base.html:317 +#: rhodecode/templates/bookmarks/bookmarks.html:11 +#: rhodecode/templates/branches/branches.html:10 +#: rhodecode/templates/changelog/changelog.html:10 +#: rhodecode/templates/changeset/changeset.html:10 +#: rhodecode/templates/changeset/changeset_range.html:9 +#: rhodecode/templates/compare/compare_diff.html:9 +#: rhodecode/templates/files/file_diff.html:8 +#: rhodecode/templates/files/files.html:8 +#: rhodecode/templates/files/files_add.html:15 +#: rhodecode/templates/files/files_edit.html:15 +#: rhodecode/templates/followers/followers.html:9 +#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9 +#: rhodecode/templates/pullrequests/pullrequest.html:8 +#: rhodecode/templates/pullrequests/pullrequest_show.html:8 +#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 +#: rhodecode/templates/settings/repo_settings.html:9 +#: rhodecode/templates/shortlog/shortlog.html:10 +#: rhodecode/templates/summary/summary.html:8 rhodecode/templates/tags/tags.html:11 +msgid "Home" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups.html:13 msgid "with" msgstr "" @@ -2103,7 +2252,7 @@ msgstr "" #: rhodecode/templates/admin/users/user_add.html:94 #: rhodecode/templates/admin/users_groups/users_group_add.html:49 #: rhodecode/templates/admin/users_groups/users_group_edit.html:90 -#: rhodecode/templates/pullrequests/pullrequest_show.html:113 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 msgid "save" msgstr "" @@ -2139,20 +2288,22 @@ msgstr "" msgid "action" msgstr "" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54 -#: rhodecode/templates/admin/users/user_edit.html:255 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 +#: rhodecode/templates/admin/users/user_edit.html:259 #: rhodecode/templates/admin/users_groups/users_groups.html:44 #: rhodecode/templates/data_table/_dt_elements.html:7 -#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:121 msgid "delete" msgstr "" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 #, python-format -msgid "Confirm to delete this group: %s" -msgstr "" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:62 +msgid "Confirm to delete this group: %s with %s repository" +msgid_plural "Confirm to delete this group: %s with %s repositories" +msgstr[0] "" +msgstr[1] "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63 msgid "There are no repositories groups yet" msgstr "" @@ -2245,8 +2396,8 @@ msgid "GA code" msgstr "" #: rhodecode/templates/admin/settings/settings.html:112 -#: rhodecode/templates/admin/settings/settings.html:167 -#: rhodecode/templates/admin/settings/settings.html:257 +#: rhodecode/templates/admin/settings/settings.html:178 +#: rhodecode/templates/admin/settings/settings.html:268 msgid "Save settings" msgstr "" @@ -2254,124 +2405,133 @@ msgstr "" msgid "Visualisation settings" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:128 +#: rhodecode/templates/admin/settings/settings.html:127 +msgid "General" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:132 +msgid "Use lightweight dashboard" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:139 msgid "Icons" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:133 -msgid "Show public repo icon on repositories" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:137 -msgid "Show private repo icon on repositories" -msgstr "" - #: rhodecode/templates/admin/settings/settings.html:144 +msgid "Show public repo icon on repositories" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:148 +msgid "Show private repo icon on repositories" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:155 msgid "Meta-Tagging" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:149 +#: rhodecode/templates/admin/settings/settings.html:160 msgid "Stylify recognised metatags:" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:176 +#: rhodecode/templates/admin/settings/settings.html:187 msgid "VCS settings" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:185 +#: rhodecode/templates/admin/settings/settings.html:196 msgid "Web" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:190 +#: rhodecode/templates/admin/settings/settings.html:201 msgid "require ssl for vcs operations" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:192 -msgid "" -"RhodeCode will require SSL for pushing or pulling. If SSL is missing it will " -"return HTTP Error 406: Not Acceptable" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:198 -msgid "Hooks" -msgstr "" - #: rhodecode/templates/admin/settings/settings.html:203 +msgid "" +"RhodeCode will require SSL for pushing or pulling. If SSL is missing it will " +"return HTTP Error 406: Not Acceptable" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:209 +msgid "Hooks" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:214 msgid "Update repository after push (hg update)" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:207 +#: rhodecode/templates/admin/settings/settings.html:218 msgid "Show repository size after push" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:211 +#: rhodecode/templates/admin/settings/settings.html:222 msgid "Log user push commands" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:215 +#: rhodecode/templates/admin/settings/settings.html:226 msgid "Log user pull commands" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:219 +#: rhodecode/templates/admin/settings/settings.html:230 msgid "advanced setup" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:224 -msgid "Mercurial Extensions" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:229 -msgid "largefiles extensions" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:233 -msgid "hgsubversion extensions" -msgstr "" - #: rhodecode/templates/admin/settings/settings.html:235 +msgid "Mercurial Extensions" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:240 +msgid "largefiles extensions" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:244 +msgid "hgsubversion extensions" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:246 msgid "" "Requires hgsubversion library installed. Allows clonning from svn remote " "locations" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:245 +#: rhodecode/templates/admin/settings/settings.html:256 msgid "Repositories location" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:250 +#: rhodecode/templates/admin/settings/settings.html:261 msgid "" "This a crucial application setting. If you are really sure you need to change" " this, you must restart application in order to make this setting take " "effect. Click this label to unlock." msgstr "" -#: rhodecode/templates/admin/settings/settings.html:251 +#: rhodecode/templates/admin/settings/settings.html:262 +#: rhodecode/templates/base/base.html:221 msgid "unlock" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:252 +#: rhodecode/templates/admin/settings/settings.html:263 msgid "" "Location where repositories are stored. After changing this value a restart, " "and rescan is required" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:272 +#: rhodecode/templates/admin/settings/settings.html:283 msgid "Test Email" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:280 +#: rhodecode/templates/admin/settings/settings.html:291 msgid "Email to" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:288 +#: rhodecode/templates/admin/settings/settings.html:299 msgid "Send" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:294 +#: rhodecode/templates/admin/settings/settings.html:305 msgid "System Info and Packages" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:297 +#: rhodecode/templates/admin/settings/settings.html:308 msgid "show" msgstr "" @@ -2392,13 +2552,6 @@ msgstr "" msgid "Password confirmation" msgstr "" -#: rhodecode/templates/admin/users/user_add.html:86 -#: rhodecode/templates/admin/users/user_edit.html:113 -#: 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 "" @@ -2418,26 +2571,26 @@ msgstr "" msgid "API key" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:59 +#: rhodecode/templates/admin/users/user_edit.html:63 msgid "LDAP DN" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:68 +#: rhodecode/templates/admin/users/user_edit.html:72 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:35 msgid "New password" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:77 +#: rhodecode/templates/admin/users/user_edit.html:81 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 msgid "New password confirmation" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:147 +#: rhodecode/templates/admin/users/user_edit.html:151 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108 msgid "Inherit default permissions" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:152 +#: rhodecode/templates/admin/users/user_edit.html:156 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113 #, python-format msgid "" @@ -2445,46 +2598,48 @@ msgid "" "options does not have any action" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:158 +#: rhodecode/templates/admin/users/user_edit.html:162 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119 msgid "Create repositories" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:166 +#: rhodecode/templates/admin/users/user_edit.html:170 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127 msgid "Fork repositories" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:186 +#: rhodecode/templates/admin/users/user_edit.html:190 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:22 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:39 msgid "Nothing here yet" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:193 +#: rhodecode/templates/admin/users/user_edit.html:197 #: rhodecode/templates/admin/users/user_edit_my_account.html:60 -#: rhodecode/templates/admin/users/user_edit_my_account.html:194 +#: rhodecode/templates/admin/users/user_edit_my_account.html:217 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:185 msgid "Permission" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:194 +#: rhodecode/templates/admin/users/user_edit.html:198 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:186 msgid "Edit Permission" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:243 +#: rhodecode/templates/admin/users/user_edit.html:247 msgid "Email addresses" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:256 +#: rhodecode/templates/admin/users/user_edit.html:260 #, python-format msgid "Confirm to delete this email: %s" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:270 +#: rhodecode/templates/admin/users/user_edit.html:274 msgid "New email address" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:277 +#: rhodecode/templates/admin/users/user_edit.html:281 msgid "Add" msgstr "" @@ -2540,30 +2695,32 @@ msgstr "" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:7 #: rhodecode/templates/bookmarks/bookmarks.html:40 #: rhodecode/templates/bookmarks/bookmarks_data.html:9 -#: rhodecode/templates/branches/branches.html:55 -#: rhodecode/templates/journal/journal.html:60 -#: rhodecode/templates/tags/tags.html:40 rhodecode/templates/tags/tags_data.html:9 +#: rhodecode/templates/branches/branches.html:54 +#: rhodecode/templates/branches/branches_data.html:9 +#: rhodecode/templates/journal/journal_page_repos.html:8 +#: rhodecode/templates/tags/tags.html:55 rhodecode/templates/tags/tags_data.html:9 msgid "Revision" msgstr "" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28 -#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/journal/journal_page_repos.html:29 msgid "private" msgstr "" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:31 #: rhodecode/templates/data_table/_dt_elements.html:7 +#: rhodecode/templates/journal/journal_page_repos.html:32 #, python-format msgid "Confirm to delete this repository: %s" msgstr "" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:38 -#: rhodecode/templates/journal/journal.html:94 +#: rhodecode/templates/journal/journal_page_repos.html:42 msgid "No repositories yet" msgstr "" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40 -#: rhodecode/templates/journal/journal.html:96 +#: rhodecode/templates/journal/journal_page_repos.html:44 msgid "create one now" msgstr "" @@ -2572,7 +2729,7 @@ msgid "Users administration" msgstr "" #: rhodecode/templates/admin/users/users.html:9 -#: rhodecode/templates/base/base.html:223 +#: rhodecode/templates/base/base.html:235 msgid "users" msgstr "" @@ -2602,7 +2759,7 @@ msgid "active" msgstr "" #: rhodecode/templates/admin/users/users.html:86 -#: rhodecode/templates/base/base.html:226 +#: rhodecode/templates/base/base.html:238 msgid "ldap" msgstr "" @@ -2651,6 +2808,18 @@ msgstr "" msgid "Group members" msgstr "" +#: rhodecode/templates/admin/users_groups/users_group_edit.html:163 +msgid "No members yet" +msgstr "" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:171 +msgid "Permissions defined for this group" +msgstr "" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:178 +msgid "No permissions set yet" +msgstr "" + #: rhodecode/templates/admin/users_groups/users_groups.html:5 msgid "Users groups administration" msgstr "" @@ -2693,31 +2862,8 @@ msgstr "" msgid "Inbox" msgstr "" -#: rhodecode/templates/base/base.html:122 rhodecode/templates/base/base.html:300 -#: rhodecode/templates/base/base.html:302 rhodecode/templates/base/base.html:304 -#: rhodecode/templates/bookmarks/bookmarks.html:11 -#: rhodecode/templates/branches/branches.html:10 -#: rhodecode/templates/changelog/changelog.html:10 -#: rhodecode/templates/changeset/changeset.html:10 -#: rhodecode/templates/changeset/changeset_range.html:9 -#: rhodecode/templates/compare/compare_diff.html:9 -#: rhodecode/templates/files/file_diff.html:8 -#: rhodecode/templates/files/files.html:8 -#: rhodecode/templates/files/files_add.html:15 -#: rhodecode/templates/files/files_edit.html:15 -#: rhodecode/templates/followers/followers.html:9 -#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9 -#: rhodecode/templates/pullrequests/pullrequest.html:8 -#: rhodecode/templates/pullrequests/pullrequest_show.html:8 -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 -#: rhodecode/templates/settings/repo_settings.html:9 -#: rhodecode/templates/shortlog/shortlog.html:10 -#: rhodecode/templates/summary/summary.html:8 rhodecode/templates/tags/tags.html:11 -msgid "Home" -msgstr "" - -#: rhodecode/templates/base/base.html:123 rhodecode/templates/base/base.html:309 -#: rhodecode/templates/base/base.html:311 rhodecode/templates/base/base.html:313 +#: rhodecode/templates/base/base.html:123 rhodecode/templates/base/base.html:322 +#: rhodecode/templates/base/base.html:324 rhodecode/templates/base/base.html:326 #: rhodecode/templates/journal/journal.html:4 #: rhodecode/templates/journal/journal.html:21 #: rhodecode/templates/journal/public_journal.html:4 @@ -2737,6 +2883,7 @@ msgid "Products" msgstr "" #: rhodecode/templates/base/base.html:152 rhodecode/templates/base/base.html:182 +#: rhodecode/templates/base/root.html:47 msgid "loading..." msgstr "" @@ -2775,47 +2922,63 @@ msgid "Options" msgstr "" #: rhodecode/templates/base/base.html:204 rhodecode/templates/base/base.html:206 -#: rhodecode/templates/base/base.html:227 -msgid "settings" -msgstr "" - -#: rhodecode/templates/base/base.html:209 +msgid "repository settings" +msgstr "" + +#: rhodecode/templates/base/base.html:210 #: rhodecode/templates/data_table/_dt_elements.html:80 #: rhodecode/templates/forks/fork.html:13 msgid "fork" msgstr "" -#: rhodecode/templates/base/base.html:211 -#: rhodecode/templates/changelog/changelog.html:40 +#: rhodecode/templates/base/base.html:212 rhodecode/templates/base/root.html:50 +#: rhodecode/templates/changelog/changelog.html:43 msgid "Open new pull request" msgstr "" -#: rhodecode/templates/base/base.html:213 +#: rhodecode/templates/base/base.html:215 +#: rhodecode/templates/forks/forks_data.html:21 +msgid "Compare fork" +msgstr "" + +#: rhodecode/templates/base/base.html:217 msgid "search" msgstr "" -#: rhodecode/templates/base/base.html:222 +#: rhodecode/templates/base/base.html:223 +msgid "lock" +msgstr "" + +#: rhodecode/templates/base/base.html:234 msgid "repositories groups" msgstr "" -#: rhodecode/templates/base/base.html:224 +#: rhodecode/templates/base/base.html:236 msgid "users groups" msgstr "" -#: rhodecode/templates/base/base.html:225 +#: rhodecode/templates/base/base.html:237 msgid "permissions" msgstr "" -#: rhodecode/templates/base/base.html:238 rhodecode/templates/base/base.html:240 +#: rhodecode/templates/base/base.html:239 +msgid "defaults" +msgstr "" + +#: rhodecode/templates/base/base.html:240 +msgid "settings" +msgstr "" + +#: rhodecode/templates/base/base.html:251 rhodecode/templates/base/base.html:253 msgid "Followers" msgstr "" -#: rhodecode/templates/base/base.html:246 rhodecode/templates/base/base.html:248 +#: rhodecode/templates/base/base.html:259 rhodecode/templates/base/base.html:261 msgid "Forks" msgstr "" -#: rhodecode/templates/base/base.html:327 rhodecode/templates/base/base.html:329 -#: rhodecode/templates/base/base.html:331 rhodecode/templates/search/search.html:52 +#: rhodecode/templates/base/base.html:340 rhodecode/templates/base/base.html:342 +#: rhodecode/templates/base/base.html:344 rhodecode/templates/search/search.html:52 msgid "Search" msgstr "" @@ -2824,7 +2987,7 @@ msgid "add another comment" msgstr "" #: rhodecode/templates/base/root.html:43 -#: rhodecode/templates/journal/journal.html:120 +#: rhodecode/templates/journal/journal.html:75 #: rhodecode/templates/summary/summary.html:57 msgid "Stop following this repository" msgstr "" @@ -2838,14 +3001,26 @@ msgstr "" msgid "Group" msgstr "" -#: rhodecode/templates/base/root.html:47 +#: rhodecode/templates/base/root.html:48 msgid "search truncated" msgstr "" -#: rhodecode/templates/base/root.html:48 +#: rhodecode/templates/base/root.html:49 msgid "no matching files" msgstr "" +#: rhodecode/templates/base/root.html:51 +msgid "Open new pull request for selected changesets" +msgstr "" + +#: rhodecode/templates/base/root.html:52 +msgid "Show selected changes __S -> __E" +msgstr "" + +#: rhodecode/templates/base/root.html:53 +msgid "Selection link" +msgstr "" + #: rhodecode/templates/bookmarks/bookmarks.html:5 #, python-format msgid "%s Bookmarks" @@ -2853,8 +3028,9 @@ msgstr "" #: rhodecode/templates/bookmarks/bookmarks.html:39 #: rhodecode/templates/bookmarks/bookmarks_data.html:8 -#: rhodecode/templates/branches/branches.html:54 -#: rhodecode/templates/tags/tags.html:39 rhodecode/templates/tags/tags_data.html:8 +#: rhodecode/templates/branches/branches.html:53 +#: rhodecode/templates/branches/branches_data.html:8 +#: rhodecode/templates/tags/tags.html:54 rhodecode/templates/tags/tags_data.html:8 msgid "Author" msgstr "" @@ -2867,34 +3043,14 @@ msgstr "" msgid "Compare branches" msgstr "" -#: rhodecode/templates/branches/branches.html:57 +#: rhodecode/templates/branches/branches.html:56 +#: rhodecode/templates/branches/branches_data.html:10 #: rhodecode/templates/compare/compare_diff.html:5 #: rhodecode/templates/compare/compare_diff.html:13 +#: rhodecode/templates/tags/tags.html:57 rhodecode/templates/tags/tags_data.html:10 msgid "Compare" msgstr "" -#: rhodecode/templates/branches/branches_data.html:6 -msgid "name" -msgstr "" - -#: rhodecode/templates/branches/branches_data.html:7 -msgid "date" -msgstr "" - -#: rhodecode/templates/branches/branches_data.html:8 -#: rhodecode/templates/shortlog/shortlog_data.html:8 -msgid "author" -msgstr "" - -#: rhodecode/templates/branches/branches_data.html:9 -#: rhodecode/templates/shortlog/shortlog_data.html:5 -msgid "revision" -msgstr "" - -#: rhodecode/templates/branches/branches_data.html:10 -msgid "compare" -msgstr "" - #: rhodecode/templates/changelog/changelog.html:6 #, python-format msgid "%s Changelog" @@ -2908,57 +3064,63 @@ msgstr[0] "" msgstr[1] "" #: rhodecode/templates/changelog/changelog.html:37 +msgid "Clear selection" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:40 #: rhodecode/templates/forks/forks_data.html:19 #, python-format msgid "compare fork with %s" msgstr "" -#: rhodecode/templates/changelog/changelog.html:37 -#: rhodecode/templates/forks/forks_data.html:21 -msgid "Compare fork" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:46 +#: rhodecode/templates/changelog/changelog.html:40 +msgid "Compare fork with parent" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:49 msgid "Show" msgstr "" -#: rhodecode/templates/changelog/changelog.html:72 -#: rhodecode/templates/summary/summary.html:364 +#: rhodecode/templates/changelog/changelog.html:74 +#: rhodecode/templates/summary/summary.html:375 msgid "show more" msgstr "" -#: rhodecode/templates/changelog/changelog.html:76 +#: rhodecode/templates/changelog/changelog.html:78 msgid "Affected number of files, click to show more details" msgstr "" -#: rhodecode/templates/changelog/changelog.html:89 -#: rhodecode/templates/changeset/changeset.html:38 +#: rhodecode/templates/changelog/changelog.html:91 +#: rhodecode/templates/changeset/changeset.html:44 #: rhodecode/templates/changeset/changeset_file_comment.html:20 #: rhodecode/templates/changeset/changeset_range.html:46 msgid "Changeset status" msgstr "" -#: rhodecode/templates/changelog/changelog.html:92 +#: rhodecode/templates/changelog/changelog.html:94 +#: rhodecode/templates/shortlog/shortlog_data.html:20 msgid "Click to open associated pull request" msgstr "" -#: rhodecode/templates/changelog/changelog.html:102 -#: rhodecode/templates/changeset/changeset.html:78 +#: rhodecode/templates/changelog/changelog.html:104 +#: rhodecode/templates/changeset/changeset.html:85 msgid "Parent" msgstr "" -#: rhodecode/templates/changelog/changelog.html:108 -#: rhodecode/templates/changeset/changeset.html:84 +#: rhodecode/templates/changelog/changelog.html:110 +#: rhodecode/templates/changeset/changeset.html:91 msgid "No parents" msgstr "" -#: rhodecode/templates/changelog/changelog.html:113 -#: rhodecode/templates/changeset/changeset.html:88 +#: rhodecode/templates/changelog/changelog.html:115 +#: rhodecode/templates/changeset/changeset.html:95 +#: rhodecode/templates/changeset/changeset_range.html:79 msgid "merge" msgstr "" -#: rhodecode/templates/changelog/changelog.html:116 -#: rhodecode/templates/changeset/changeset.html:91 +#: rhodecode/templates/changelog/changelog.html:118 +#: rhodecode/templates/changeset/changeset.html:98 +#: rhodecode/templates/changeset/changeset_range.html:82 #: rhodecode/templates/files/files.html:29 #: rhodecode/templates/files/files_add.html:33 #: rhodecode/templates/files/files_edit.html:33 @@ -2966,44 +3128,42 @@ msgstr "" msgid "branch" msgstr "" -#: rhodecode/templates/changelog/changelog.html:122 +#: rhodecode/templates/changelog/changelog.html:124 +#: rhodecode/templates/changeset/changeset_range.html:88 msgid "bookmark" msgstr "" -#: rhodecode/templates/changelog/changelog.html:128 -#: rhodecode/templates/changeset/changeset.html:96 +#: rhodecode/templates/changelog/changelog.html:130 +#: rhodecode/templates/changeset/changeset.html:103 +#: rhodecode/templates/changeset/changeset_range.html:94 msgid "tag" msgstr "" -#: rhodecode/templates/changelog/changelog.html:164 -msgid "Show selected changes __S -> __E" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:255 +#: rhodecode/templates/changelog/changelog.html:301 msgid "There are no changes yet" msgstr "" #: rhodecode/templates/changelog/changelog_details.html:4 -#: rhodecode/templates/changeset/changeset.html:66 +#: rhodecode/templates/changeset/changeset.html:73 msgid "removed" msgstr "" #: rhodecode/templates/changelog/changelog_details.html:5 -#: rhodecode/templates/changeset/changeset.html:67 +#: rhodecode/templates/changeset/changeset.html:74 msgid "changed" msgstr "" #: rhodecode/templates/changelog/changelog_details.html:6 -#: rhodecode/templates/changeset/changeset.html:68 +#: rhodecode/templates/changeset/changeset.html:75 msgid "added" msgstr "" #: rhodecode/templates/changelog/changelog_details.html:8 #: rhodecode/templates/changelog/changelog_details.html:9 #: rhodecode/templates/changelog/changelog_details.html:10 -#: rhodecode/templates/changeset/changeset.html:70 -#: rhodecode/templates/changeset/changeset.html:71 -#: rhodecode/templates/changeset/changeset.html:72 +#: rhodecode/templates/changeset/changeset.html:77 +#: rhodecode/templates/changeset/changeset.html:78 +#: rhodecode/templates/changeset/changeset.html:79 #, python-format msgid "affected %s files" msgstr "" @@ -3017,17 +3177,21 @@ msgstr "" msgid "Changeset" msgstr "" -#: rhodecode/templates/changeset/changeset.html:43 +#: rhodecode/templates/changeset/changeset.html:49 #: rhodecode/templates/changeset/diff_block.html:20 msgid "raw diff" msgstr "" -#: rhodecode/templates/changeset/changeset.html:44 +#: rhodecode/templates/changeset/changeset.html:50 +msgid "patch diff" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:51 #: rhodecode/templates/changeset/diff_block.html:21 msgid "download diff" msgstr "" -#: rhodecode/templates/changeset/changeset.html:48 +#: rhodecode/templates/changeset/changeset.html:55 #: rhodecode/templates/changeset/changeset_file_comment.html:82 #, python-format msgid "%d comment" @@ -3035,7 +3199,7 @@ msgid_plural "%d comments" msgstr[0] "" msgstr[1] "" -#: rhodecode/templates/changeset/changeset.html:48 +#: rhodecode/templates/changeset/changeset.html:55 #: rhodecode/templates/changeset/changeset_file_comment.html:82 #, python-format msgid "(%d inline)" @@ -3043,14 +3207,23 @@ msgid_plural "(%d inline)" msgstr[0] "" msgstr[1] "" -#: rhodecode/templates/changeset/changeset.html:103 +#: rhodecode/templates/changeset/changeset.html:111 +#: rhodecode/templates/compare/compare_diff.html:44 +#: rhodecode/templates/pullrequests/pullrequest_show.html:76 #, python-format -msgid "%s files affected with %s insertions and %s deletions:" -msgstr "" - -#: rhodecode/templates/changeset/changeset.html:119 -msgid "Changeset was too big and was cut off..." -msgstr "" +msgid "%s file changed" +msgid_plural "%s files changed" +msgstr[0] "" +msgstr[1] "" + +#: rhodecode/templates/changeset/changeset.html:113 +#: rhodecode/templates/compare/compare_diff.html:46 +#: rhodecode/templates/pullrequests/pullrequest_show.html:78 +#, python-format +msgid "%s file changed with %s insertions and %s deletions" +msgid_plural "%s files changed with %s insertions and %s deletions" +msgstr[0] "" +msgstr[1] "" #: rhodecode/templates/changeset/changeset_file_comment.html:42 msgid "Submitting..." @@ -3115,14 +3288,16 @@ msgstr "" msgid "Compare View" msgstr "" +#: rhodecode/templates/changeset/changeset_range.html:29 +msgid "Show combined compare" +msgstr "" + #: rhodecode/templates/changeset/changeset_range.html:54 -#: rhodecode/templates/compare/compare_diff.html:41 -#: rhodecode/templates/pullrequests/pullrequest_show.html:69 msgid "Files affected" msgstr "" #: rhodecode/templates/changeset/diff_block.html:19 -msgid "diff" +msgid "show full diff for this file" msgstr "" #: rhodecode/templates/changeset/diff_block.html:27 @@ -3134,7 +3309,16 @@ msgid "No changesets" msgstr "" #: rhodecode/templates/compare/compare_diff.html:37 -msgid "Outgoing changesets" +#: rhodecode/templates/pullrequests/pullrequest_show.html:69 +#, python-format +msgid "Showing %s commit" +msgid_plural "Showing %s commits" +msgstr[0] "" +msgstr[1] "" + +#: rhodecode/templates/compare/compare_diff.html:52 +#: rhodecode/templates/pullrequests/pullrequest_show.html:84 +msgid "No files" msgstr "" #: rhodecode/templates/data_table/_dt_elements.html:39 @@ -3144,40 +3328,115 @@ msgid "Fork" msgstr "" #: rhodecode/templates/data_table/_dt_elements.html:60 -#: rhodecode/templates/journal/journal.html:126 -#: rhodecode/templates/summary/summary.html:68 +#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/summary/summary.html:77 msgid "Mercurial repository" msgstr "" #: rhodecode/templates/data_table/_dt_elements.html:62 -#: rhodecode/templates/journal/journal.html:128 -#: rhodecode/templates/summary/summary.html:71 +#: rhodecode/templates/journal/journal.html:83 +#: rhodecode/templates/summary/summary.html:80 msgid "Git repository" msgstr "" #: rhodecode/templates/data_table/_dt_elements.html:69 -#: rhodecode/templates/journal/journal.html:134 -#: rhodecode/templates/summary/summary.html:78 +#: rhodecode/templates/journal/journal.html:89 +#: rhodecode/templates/summary/summary.html:87 msgid "public repository" msgstr "" #: rhodecode/templates/data_table/_dt_elements.html:80 -#: rhodecode/templates/summary/summary.html:87 -#: rhodecode/templates/summary/summary.html:88 +#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:97 msgid "Fork of" msgstr "" -#: rhodecode/templates/data_table/_dt_elements.html:92 +#: rhodecode/templates/data_table/_dt_elements.html:94 msgid "No changesets yet" msgstr "" -#: rhodecode/templates/data_table/_dt_elements.html:104 +#: rhodecode/templates/data_table/_dt_elements.html:101 +#: rhodecode/templates/data_table/_dt_elements.html:103 +#, python-format +msgid "Subscribe to %s rss feed" +msgstr "" + +#: rhodecode/templates/data_table/_dt_elements.html:109 +#: rhodecode/templates/data_table/_dt_elements.html:111 +#, python-format +msgid "Subscribe to %s atom feed" +msgstr "" + +#: rhodecode/templates/data_table/_dt_elements.html:122 #, python-format msgid "Confirm to delete this user: %s" msgstr "" +#: rhodecode/templates/email_templates/changeset_comment.html:10 +msgid "New status$" +msgstr "" + #: rhodecode/templates/email_templates/main.html:8 -msgid "This is an notification from RhodeCode." +msgid "This is a notification from RhodeCode." +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:4 +msgid "Hello" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:6 +msgid "We received a request to create a new password for your account." +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:8 +msgid "You can generate it by clicking following URL" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:12 +msgid "If you didn't request new password please ignore this email." +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:4 +#, python-format +msgid "User %s opened pull request for repository %s and wants you to review changes." +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:5 +msgid "title" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:6 +#: rhodecode/templates/pullrequests/pullrequest.html:115 +msgid "description" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:11 +msgid "revisions for reviewing" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:18 +msgid "View this pull request here" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request_comment.html:4 +#, python-format +msgid "User %s commented on pull request #%s for repository %s" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request_comment.html:10 +msgid "New status" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request_comment.html:14 +msgid "View this comment here" +msgstr "" + +#: rhodecode/templates/email_templates/registration.html:4 +msgid "A new user have registered in RhodeCode" +msgstr "" + +#: rhodecode/templates/email_templates/registration.html:9 +msgid "View this user here" msgstr "" #: rhodecode/templates/errors/error_document.html:46 @@ -3194,13 +3453,13 @@ msgstr "" msgid "File diff" msgstr "" -#: rhodecode/templates/files/files.html:4 rhodecode/templates/files/files.html:72 +#: rhodecode/templates/files/files.html:4 rhodecode/templates/files/files.html:74 #, python-format msgid "%s files" msgstr "" #: rhodecode/templates/files/files.html:12 -#: rhodecode/templates/summary/summary.html:340 +#: rhodecode/templates/summary/summary.html:351 msgid "files" msgstr "" @@ -3278,7 +3537,7 @@ msgid "search file list" msgstr "" #: rhodecode/templates/files/files_browser.html:31 -#: rhodecode/templates/shortlog/shortlog_data.html:65 +#: rhodecode/templates/shortlog/shortlog_data.html:78 msgid "add new file" msgstr "" @@ -3311,18 +3570,18 @@ msgid "edit file" msgstr "" #: rhodecode/templates/files/files_edit.html:49 -#: rhodecode/templates/files/files_source.html:38 +#: rhodecode/templates/files/files_source.html:23 msgid "show annotation" msgstr "" #: rhodecode/templates/files/files_edit.html:50 -#: rhodecode/templates/files/files_source.html:40 -#: rhodecode/templates/files/files_source.html:68 +#: rhodecode/templates/files/files_source.html:25 +#: rhodecode/templates/files/files_source.html:53 msgid "show as raw" msgstr "" #: rhodecode/templates/files/files_edit.html:51 -#: rhodecode/templates/files/files_source.html:41 +#: rhodecode/templates/files/files_source.html:26 msgid "download as raw" msgstr "" @@ -3334,42 +3593,46 @@ msgstr "" msgid "Editing file" msgstr "" -#: rhodecode/templates/files/files_source.html:2 +#: rhodecode/templates/files/files_history_box.html:2 msgid "History" msgstr "" -#: rhodecode/templates/files/files_source.html:9 +#: rhodecode/templates/files/files_history_box.html:9 msgid "diff to revision" msgstr "" -#: rhodecode/templates/files/files_source.html:10 +#: rhodecode/templates/files/files_history_box.html:10 msgid "show at revision" msgstr "" -#: rhodecode/templates/files/files_source.html:14 +#: rhodecode/templates/files/files_history_box.html:11 +msgid "show full history" +msgstr "" + +#: rhodecode/templates/files/files_history_box.html:16 #, python-format msgid "%s author" msgid_plural "%s authors" msgstr[0] "" msgstr[1] "" -#: rhodecode/templates/files/files_source.html:36 +#: rhodecode/templates/files/files_source.html:6 +msgid "Load file history" +msgstr "" + +#: rhodecode/templates/files/files_source.html:21 msgid "show source" msgstr "" -#: rhodecode/templates/files/files_source.html:59 +#: rhodecode/templates/files/files_source.html:44 #, python-format msgid "Binary file (%s)" msgstr "" -#: rhodecode/templates/files/files_source.html:68 +#: rhodecode/templates/files/files_source.html:53 msgid "File is too big to display" msgstr "" -#: rhodecode/templates/files/files_source.html:124 -msgid "Selection link" -msgstr "" - #: rhodecode/templates/files/files_ypjax.html:5 msgid "annotation" msgstr "" @@ -3441,7 +3704,7 @@ msgstr "" msgid "forked" msgstr "" -#: rhodecode/templates/forks/forks_data.html:38 +#: rhodecode/templates/forks/forks_data.html:42 msgid "There are no forks yet" msgstr "" @@ -3454,7 +3717,7 @@ msgid "RSS journal feed" msgstr "" #: rhodecode/templates/journal/journal.html:24 -#: rhodecode/templates/pullrequests/pullrequest.html:27 +#: rhodecode/templates/pullrequests/pullrequest.html:55 msgid "Refresh" msgstr "" @@ -3476,19 +3739,19 @@ msgstr "" msgid "ADD" msgstr "" -#: rhodecode/templates/journal/journal.html:114 +#: rhodecode/templates/journal/journal.html:69 msgid "following user" msgstr "" -#: rhodecode/templates/journal/journal.html:114 +#: rhodecode/templates/journal/journal.html:69 msgid "user" msgstr "" -#: rhodecode/templates/journal/journal.html:147 +#: rhodecode/templates/journal/journal.html:102 msgid "You are not following any users or repositories" msgstr "" -#: rhodecode/templates/journal/journal_data.html:47 +#: rhodecode/templates/journal/journal_data.html:51 msgid "No entries yet" msgstr "" @@ -3509,7 +3772,7 @@ msgstr "" msgid "New pull request" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:28 +#: rhodecode/templates/pullrequests/pullrequest.html:54 msgid "refresh overview" msgstr "" @@ -3518,17 +3781,17 @@ msgid "Detailed compare view" msgstr "" #: rhodecode/templates/pullrequests/pullrequest.html:70 -#: rhodecode/templates/pullrequests/pullrequest_show.html:82 +#: rhodecode/templates/pullrequests/pullrequest_show.html:100 msgid "Pull request reviewers" msgstr "" #: rhodecode/templates/pullrequests/pullrequest.html:79 -#: rhodecode/templates/pullrequests/pullrequest_show.html:94 +#: rhodecode/templates/pullrequests/pullrequest_show.html:112 msgid "owner" msgstr "" #: rhodecode/templates/pullrequests/pullrequest.html:91 -#: rhodecode/templates/pullrequests/pullrequest_show.html:109 +#: rhodecode/templates/pullrequests/pullrequest_show.html:127 msgid "Add reviewer to this pull request." msgstr "" @@ -3542,10 +3805,6 @@ msgstr "" msgid "Title" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:115 -msgid "description" -msgstr "" - #: rhodecode/templates/pullrequests/pullrequest.html:123 msgid "Send pull request" msgstr "" @@ -3555,6 +3814,11 @@ msgstr "" msgid "Closed %s" msgstr "" +#: rhodecode/templates/pullrequests/pullrequest_show.html:23 +#, python-format +msgid "with status %s" +msgstr "" + #: rhodecode/templates/pullrequests/pullrequest_show.html:31 msgid "Status" msgstr "" @@ -3567,23 +3831,23 @@ msgstr "" msgid "Still not reviewed by" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:47 +#: rhodecode/templates/pullrequests/pullrequest_show.html:48 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" msgstr[0] "" msgstr[1] "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:54 +#: rhodecode/templates/pullrequests/pullrequest_show.html:50 +msgid "pull request was reviewed by all reviewers" +msgstr "" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:58 msgid "Created on" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:61 -msgid "Compare view" -msgstr "" - #: rhodecode/templates/pullrequests/pullrequest_show.html:65 -msgid "Incoming changesets" +msgid "Compare view" msgstr "" #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4 @@ -3655,27 +3919,32 @@ msgstr "" msgid "%s Shortlog" msgstr "" -#: rhodecode/templates/shortlog/shortlog.html:14 +#: rhodecode/templates/shortlog/shortlog.html:15 +#: rhodecode/templates/shortlog/shortlog.html:19 msgid "shortlog" msgstr "" +#: rhodecode/templates/shortlog/shortlog_data.html:5 +msgid "revision" +msgstr "" + #: rhodecode/templates/shortlog/shortlog_data.html:7 msgid "age" msgstr "" -#: rhodecode/templates/shortlog/shortlog_data.html:18 -msgid "No commit message" -msgstr "" - -#: rhodecode/templates/shortlog/shortlog_data.html:62 +#: rhodecode/templates/shortlog/shortlog_data.html:8 +msgid "author" +msgstr "" + +#: rhodecode/templates/shortlog/shortlog_data.html:75 msgid "Add or upload files directly via RhodeCode" msgstr "" -#: rhodecode/templates/shortlog/shortlog_data.html:71 +#: rhodecode/templates/shortlog/shortlog_data.html:84 msgid "Push new repo" msgstr "" -#: rhodecode/templates/shortlog/shortlog_data.html:79 +#: rhodecode/templates/shortlog/shortlog_data.html:92 msgid "Existing repository?" msgstr "" @@ -3703,128 +3972,137 @@ msgstr "" msgid "ATOM" msgstr "" -#: rhodecode/templates/summary/summary.html:82 +#: rhodecode/templates/summary/summary.html:70 +#, python-format +msgid "Repository locked by %s" +msgstr "" + +#: rhodecode/templates/summary/summary.html:72 +msgid "Repository unlocked" +msgstr "" + +#: rhodecode/templates/summary/summary.html:91 #, python-format msgid "Non changable ID %s" msgstr "" -#: rhodecode/templates/summary/summary.html:87 +#: rhodecode/templates/summary/summary.html:96 msgid "public" msgstr "" -#: rhodecode/templates/summary/summary.html:95 +#: rhodecode/templates/summary/summary.html:104 msgid "remote clone" msgstr "" -#: rhodecode/templates/summary/summary.html:116 +#: rhodecode/templates/summary/summary.html:125 msgid "Contact" msgstr "" -#: rhodecode/templates/summary/summary.html:130 +#: rhodecode/templates/summary/summary.html:139 msgid "Clone url" msgstr "" -#: rhodecode/templates/summary/summary.html:133 -msgid "Show by Name" -msgstr "" - -#: rhodecode/templates/summary/summary.html:134 -msgid "Show by ID" -msgstr "" - #: rhodecode/templates/summary/summary.html:142 +msgid "Show by Name" +msgstr "" + +#: rhodecode/templates/summary/summary.html:143 +msgid "Show by ID" +msgstr "" + +#: rhodecode/templates/summary/summary.html:151 msgid "Trending files" msgstr "" -#: rhodecode/templates/summary/summary.html:150 -#: rhodecode/templates/summary/summary.html:166 -#: rhodecode/templates/summary/summary.html:194 +#: rhodecode/templates/summary/summary.html:159 +#: rhodecode/templates/summary/summary.html:175 +#: rhodecode/templates/summary/summary.html:203 msgid "enable" msgstr "" -#: rhodecode/templates/summary/summary.html:158 +#: rhodecode/templates/summary/summary.html:167 msgid "Download" msgstr "" -#: rhodecode/templates/summary/summary.html:162 +#: rhodecode/templates/summary/summary.html:171 msgid "There are no downloads yet" msgstr "" -#: rhodecode/templates/summary/summary.html:164 -msgid "Downloads are disabled for this repository" -msgstr "" - -#: rhodecode/templates/summary/summary.html:170 -msgid "Download as zip" -msgstr "" - -#: rhodecode/templates/summary/summary.html:173 -msgid "Check this to download archive with subrepos" -msgstr "" - #: rhodecode/templates/summary/summary.html:173 +msgid "Downloads are disabled for this repository" +msgstr "" + +#: rhodecode/templates/summary/summary.html:179 +msgid "Download as zip" +msgstr "" + +#: rhodecode/templates/summary/summary.html:182 +msgid "Check this to download archive with subrepos" +msgstr "" + +#: rhodecode/templates/summary/summary.html:182 msgid "with subrepos" msgstr "" -#: rhodecode/templates/summary/summary.html:186 +#: rhodecode/templates/summary/summary.html:195 msgid "Commit activity by day / author" msgstr "" -#: rhodecode/templates/summary/summary.html:197 +#: rhodecode/templates/summary/summary.html:206 msgid "Stats gathered: " msgstr "" -#: rhodecode/templates/summary/summary.html:218 +#: rhodecode/templates/summary/summary.html:227 msgid "Shortlog" msgstr "" -#: rhodecode/templates/summary/summary.html:220 +#: rhodecode/templates/summary/summary.html:229 msgid "Quick start" msgstr "" -#: rhodecode/templates/summary/summary.html:233 +#: rhodecode/templates/summary/summary.html:243 #, python-format msgid "Readme file at revision '%s'" msgstr "" -#: rhodecode/templates/summary/summary.html:236 +#: rhodecode/templates/summary/summary.html:246 msgid "Permalink to this readme" msgstr "" -#: rhodecode/templates/summary/summary.html:293 +#: rhodecode/templates/summary/summary.html:304 #, python-format msgid "Download %s as %s" msgstr "" -#: rhodecode/templates/summary/summary.html:650 +#: rhodecode/templates/summary/summary.html:661 msgid "commits" msgstr "" -#: rhodecode/templates/summary/summary.html:651 +#: rhodecode/templates/summary/summary.html:662 msgid "files added" msgstr "" -#: rhodecode/templates/summary/summary.html:652 +#: rhodecode/templates/summary/summary.html:663 msgid "files changed" msgstr "" -#: rhodecode/templates/summary/summary.html:653 +#: rhodecode/templates/summary/summary.html:664 msgid "files removed" msgstr "" -#: rhodecode/templates/summary/summary.html:656 +#: rhodecode/templates/summary/summary.html:667 msgid "commit" msgstr "" -#: rhodecode/templates/summary/summary.html:657 +#: rhodecode/templates/summary/summary.html:668 msgid "file added" msgstr "" -#: rhodecode/templates/summary/summary.html:658 +#: rhodecode/templates/summary/summary.html:669 msgid "file changed" msgstr "" -#: rhodecode/templates/summary/summary.html:659 +#: rhodecode/templates/summary/summary.html:670 msgid "file removed" msgstr "" @@ -3833,3 +4111,7 @@ msgstr "" msgid "%s Tags" msgstr "" +#: rhodecode/templates/tags/tags.html:29 +msgid "Compare tags" +msgstr "" + diff --git a/rhodecode/i18n/zh_CN/LC_MESSAGES/rhodecode.mo b/rhodecode/i18n/zh_CN/LC_MESSAGES/rhodecode.mo index edf8e1b29ae13e51ab5aec704a0ad472010a5399..872afff120e5d9882adee9f3d0c662bdb3b0788f GIT binary patch literal 51776 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, 2012. msgid "" msgstr "" -"Project-Id-Version: RhodeCode 1.2.0\n" +"Project-Id-Version: RhodeCode 1.4.4\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2012-10-02 13:34+0800\n" -"PO-Revision-Date: 2012-10-02 13:44+0800\n" +"POT-Creation-Date: 2012-12-03 03:21+0100\n" +"PO-Revision-Date: 2012-11-26 15:19+0800\n" "Last-Translator: xpol \n" "Language-Team: mikespook\n" -"Plural-Forms: nplurals=1; plural=0;\n" +"Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 0.9.6\n" -"X-Generator: Poedit 1.5.3\n" #: rhodecode/controllers/changelog.py:95 msgid "All Branches" msgstr "所有分支" -#: rhodecode/controllers/changeset.py:83 +#: rhodecode/controllers/changeset.py:84 msgid "show white space" msgstr "显示空白字符" -#: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97 +#: rhodecode/controllers/changeset.py:91 rhodecode/controllers/changeset.py:98 msgid "ignore white space" msgstr "忽略空白字符" -#: rhodecode/controllers/changeset.py:157 +#: rhodecode/controllers/changeset.py:164 #, python-format msgid "%s line context" -msgstr "%s 行上下文" - -#: rhodecode/controllers/changeset.py:333 -#: rhodecode/controllers/changeset.py:348 rhodecode/lib/diffs.py:71 -msgid "binary file" -msgstr "二进制文件" - -#: rhodecode/controllers/changeset.py:381 -#: rhodecode/controllers/pullrequests.py:376 +msgstr "%s行上下文" + +#: rhodecode/controllers/changeset.py:315 +#: rhodecode/controllers/pullrequests.py:411 #, python-format msgid "Status change -> %s" -msgstr "状态改变 -> %s" - -#: rhodecode/controllers/changeset.py:412 +msgstr "状态修改为%s" + +#: rhodecode/controllers/changeset.py:346 msgid "" -"Changing status on a changeset associated witha closed pull request is not " -"allowed" +"Changing status on a changeset associated witha closed pull request is " +"not allowed" msgstr "不允许修改已关闭拉取请求的修订集状态" -#: rhodecode/controllers/compare.py:72 -#: rhodecode/controllers/pullrequests.py:114 +#: rhodecode/controllers/compare.py:75 +#: rhodecode/controllers/pullrequests.py:117 +#: rhodecode/controllers/shortlog.py:100 msgid "There are no changesets yet" msgstr "还没有修订集" @@ -63,8 +58,7 @@ msgid "Home page" msgstr "主页" #: rhodecode/controllers/error.py:98 -msgid "" -"The request could not be understood by the server due to malformed syntax." +msgid "The request could not be understood by the server due to malformed syntax." msgstr "由于错误的语法,服务器无法对请求进行响应。" #: rhodecode/controllers/error.py:101 @@ -85,143 +79,146 @@ msgid "" "fulfilling the request." msgstr "服务进入非预期的混乱状态,这会阻止它对请求进行响应。" -#: rhodecode/controllers/feed.py:49 +#: rhodecode/controllers/feed.py:52 #, python-format msgid "Changes on %s repository" -msgstr "%s 库的修改" - -#: rhodecode/controllers/feed.py:50 +msgstr "%s库的修改" + +#: rhodecode/controllers/feed.py:53 #, python-format msgid "%s %s feed" -msgstr "%s %s 订阅" - -#: rhodecode/controllers/feed.py:67 -#: rhodecode/templates/changeset/changeset.html:119 +msgstr "%s %s订阅" + +#: rhodecode/controllers/feed.py:86 +#: rhodecode/templates/changeset/changeset.html:126 +#: rhodecode/templates/changeset/changeset.html:138 +#: rhodecode/templates/compare/compare_diff.html:62 +#: rhodecode/templates/compare/compare_diff.html:73 +#: rhodecode/templates/pullrequests/pullrequest_show.html:94 +#: rhodecode/templates/pullrequests/pullrequest_show.html:153 msgid "Changeset was too big and was cut off..." msgstr "修订集太大已被截断......" -#: rhodecode/controllers/feed.py:81 +#: rhodecode/controllers/feed.py:92 msgid "commited on" msgstr "提交于" -#: rhodecode/controllers/files.py:84 +#: rhodecode/controllers/files.py:86 msgid "click here to add new file" msgstr "点击此处添加新文件" -#: rhodecode/controllers/files.py:85 +#: rhodecode/controllers/files.py:87 #, python-format msgid "There are no files yet %s" -msgstr "还没有文件 %s" - -#: rhodecode/controllers/files.py:239 rhodecode/controllers/files.py:299 +msgstr "还没有文件%s" + +#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325 #, python-format msgid "This repository is has been locked by %s on %s" -msgstr "版本库由 %s 于 %s 锁定" - -#: rhodecode/controllers/files.py:266 +msgstr "版本库由%s于%s锁定" + +#: rhodecode/controllers/files.py:292 #, python-format msgid "Edited %s via RhodeCode" -msgstr "通过 RhodeCode 修改了 %s" - -#: rhodecode/controllers/files.py:271 +msgstr "通过RhodeCode修改了%s" + +#: rhodecode/controllers/files.py:297 msgid "No changes" msgstr "无变更" -#: rhodecode/controllers/files.py:282 rhodecode/controllers/files.py:346 +#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372 #, python-format msgid "Successfully committed to %s" -msgstr "成功提交到 %s" - -#: rhodecode/controllers/files.py:287 rhodecode/controllers/files.py:352 +msgstr "成功提交到%s" + +#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378 msgid "Error occurred during commit" msgstr "提交时发生错误" -#: rhodecode/controllers/files.py:318 +#: rhodecode/controllers/files.py:344 #, python-format msgid "Added %s via RhodeCode" -msgstr "通过 RhodeCode 添加了 %s" - -#: rhodecode/controllers/files.py:332 +msgstr "通过RhodeCode添加了%s" + +#: rhodecode/controllers/files.py:358 msgid "No content" msgstr "无内容" -#: rhodecode/controllers/files.py:336 +#: rhodecode/controllers/files.py:362 msgid "No filename" msgstr "无文件名" -#: rhodecode/controllers/files.py:378 +#: rhodecode/controllers/files.py:404 msgid "downloads disabled" msgstr "禁止下载" -#: rhodecode/controllers/files.py:389 +#: rhodecode/controllers/files.py:415 #, python-format msgid "Unknown revision %s" -msgstr "未知版本 %s" - -#: rhodecode/controllers/files.py:391 +msgstr "未知版本%s" + +#: rhodecode/controllers/files.py:417 msgid "Empty repository" msgstr "空版本库" -#: rhodecode/controllers/files.py:393 +#: rhodecode/controllers/files.py:419 msgid "Unknown archive type" msgstr "未知包类型" -#: rhodecode/controllers/files.py:494 +#: rhodecode/controllers/files.py:564 #: rhodecode/templates/changeset/changeset_range.html:13 #: rhodecode/templates/changeset/changeset_range.html:31 msgid "Changesets" msgstr "修订集" -#: rhodecode/controllers/files.py:495 rhodecode/controllers/pullrequests.py:73 -#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:543 +#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:76 +#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550 msgid "Branches" msgstr "分支" -#: rhodecode/controllers/files.py:496 rhodecode/controllers/pullrequests.py:77 -#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:554 +#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:80 +#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561 msgid "Tags" msgstr "标签" -#: rhodecode/controllers/forks.py:74 rhodecode/controllers/admin/repos.py:90 +#: rhodecode/controllers/forks.py:74 rhodecode/controllers/admin/repos.py:92 #, python-format msgid "" -"%s repository is not mapped to db perhaps it was created or renamed from the " -"filesystem please run the application again in order to rescan repositories" -msgstr "" -"版本库 %s 没有映射到数据库,可能是从文件系统创建或者重命名,请重启 RhodeCode " -"以重新扫描版本库" +"%s repository is not mapped to db perhaps it was created or renamed from " +"the filesystem please run the application again in order to rescan " +"repositories" +msgstr "版本库%s没有映射到数据库,可能是从文件系统创建或者重命名,请重启RhodeCode以重新扫描版本库" #: rhodecode/controllers/forks.py:134 rhodecode/controllers/settings.py:73 #, python-format msgid "" -"%s repository is not mapped to db perhaps it was created or renamed from the " -"file system please run the application again in order to rescan repositories" -msgstr "" -" 版本库 %s 没有映射到数据库,可能是从文件系统创建或者重命名,请重启 " -"RhodeCode 以重新扫描版本库" +"%s repository is not mapped to db perhaps it was created or renamed from " +"the file system please run the application again in order to rescan " +"repositories" +msgstr " 版本库%s没有映射到数据库,可能是从文件系统创建或者重命名,请重启RhodeCode以重新扫描版本库" #: rhodecode/controllers/forks.py:168 #, python-format msgid "forked %s repository as %s" -msgstr "版本库 %s 被复刻到 %s" +msgstr "版本库%s被复刻到%s" #: rhodecode/controllers/forks.py:182 #, python-format msgid "An error occurred during repository forking %s" -msgstr "在复刻版本库 %s 的时候发生错误" - -#: rhodecode/controllers/journal.py:203 rhodecode/controllers/journal.py:240 +msgstr "在复刻版本库%s的时候发生错误" + +#: rhodecode/controllers/journal.py:206 rhodecode/controllers/journal.py:243 msgid "public journal" msgstr "公共日志" -#: rhodecode/controllers/journal.py:207 rhodecode/controllers/journal.py:244 -#: rhodecode/templates/base/base.html:229 +#: rhodecode/controllers/journal.py:210 rhodecode/controllers/journal.py:247 +#: rhodecode/templates/base/base.html:232 msgid "journal" msgstr "日志" #: rhodecode/controllers/login.py:143 msgid "You have successfully registered into rhodecode" -msgstr "成功注册到 rhodecode" +msgstr "成功注册到RhodeCode" #: rhodecode/controllers/login.py:164 msgid "Your password reset link was sent" @@ -229,79 +226,79 @@ msgstr "密码重置链接已经发送" #: rhodecode/controllers/login.py:184 msgid "" -"Your password reset was successful, new password has been sent to your email" +"Your password reset was successful, new password has been sent to your " +"email" msgstr "密码已经成功重置,新密码已经发送到你的邮箱" -#: rhodecode/controllers/pullrequests.py:75 rhodecode/model/scm.py:549 +#: rhodecode/controllers/pullrequests.py:78 rhodecode/model/scm.py:556 msgid "Bookmarks" msgstr "书签" -#: rhodecode/controllers/pullrequests.py:182 +#: rhodecode/controllers/pullrequests.py:186 msgid "Pull request requires a title with min. 3 chars" -msgstr "拉取请求的标题至少 3 个字符" - -#: rhodecode/controllers/pullrequests.py:184 +msgstr "拉取请求的标题至少3个字符" + +#: rhodecode/controllers/pullrequests.py:188 msgid "error during creation of pull request" msgstr "提交拉取请求时发生错误" -#: rhodecode/controllers/pullrequests.py:205 +#: rhodecode/controllers/pullrequests.py:220 msgid "Successfully opened new pull request" msgstr "成功提交拉取请求" -#: rhodecode/controllers/pullrequests.py:208 +#: rhodecode/controllers/pullrequests.py:223 msgid "Error occurred during sending pull request" msgstr "提交拉取请求时发生错误" -#: rhodecode/controllers/pullrequests.py:241 +#: rhodecode/controllers/pullrequests.py:256 msgid "Successfully deleted pull request" msgstr "成功删除拉取请求" -#: rhodecode/controllers/search.py:132 +#: rhodecode/controllers/search.py:134 msgid "Invalid search query. Try quoting it." msgstr "错误的搜索。请尝试用引号包含它。" -#: rhodecode/controllers/search.py:137 +#: rhodecode/controllers/search.py:139 msgid "There is no index to search in. Please run whoosh indexer" -msgstr "没有索引用于搜索。请运行 whoosh 索引器" - -#: rhodecode/controllers/search.py:141 +msgstr "没有索引用于搜索。请运行whoosh索引器" + +#: rhodecode/controllers/search.py:143 msgid "An error occurred during this search operation" msgstr "在搜索操作中发生异常" #: rhodecode/controllers/settings.py:108 -#: rhodecode/controllers/admin/repos.py:266 +#: rhodecode/controllers/admin/repos.py:268 #, python-format msgid "Repository %s updated successfully" -msgstr "版本库 %s 成功更新" +msgstr "版本库%s成功更新" #: rhodecode/controllers/settings.py:126 -#: rhodecode/controllers/admin/repos.py:284 +#: rhodecode/controllers/admin/repos.py:286 #, python-format msgid "error occurred during update of repository %s" -msgstr "在更新版本库 %s 的时候发生错误" +msgstr "在更新版本库%s的时候发生错误" #: rhodecode/controllers/settings.py:144 -#: rhodecode/controllers/admin/repos.py:302 +#: rhodecode/controllers/admin/repos.py:304 #, python-format msgid "" -"%s repository is not mapped to db perhaps it was moved or renamed from the " -"filesystem please run the application again in order to rescan repositories" -msgstr "" -"版本库 %s 没有映射到数据库,可能是从文件系统创建或者重命名,请重启 RhodeCode " -"以重新扫描版本库" +"%s repository is not mapped to db perhaps it was moved or renamed from " +"the filesystem please run the application again in order to rescan " +"repositories" +msgstr "版本库%s没有映射到数据库,可能是从文件系统创建或者重命名,请重启RhodeCode以重新扫描版本库" #: rhodecode/controllers/settings.py:156 -#: rhodecode/controllers/admin/repos.py:314 +#: rhodecode/controllers/admin/repos.py:316 #, python-format msgid "deleted repository %s" -msgstr "已经删除版本库 %s" +msgstr "已经删除版本库%s" #: rhodecode/controllers/settings.py:160 -#: rhodecode/controllers/admin/repos.py:324 -#: rhodecode/controllers/admin/repos.py:330 +#: rhodecode/controllers/admin/repos.py:326 +#: rhodecode/controllers/admin/repos.py:332 #, python-format msgid "An error occurred during deletion of %s" -msgstr "在删除 %s 的时候发生错误" +msgstr "在删除%s的时候发生错误" #: rhodecode/controllers/settings.py:179 msgid "unlocked" @@ -314,10 +311,10 @@ msgstr "已锁" #: rhodecode/controllers/settings.py:184 #, python-format msgid "Repository has been %s" -msgstr "版本库已经 %s" +msgstr "版本库已被%s" #: rhodecode/controllers/settings.py:188 -#: rhodecode/controllers/admin/repos.py:422 +#: rhodecode/controllers/admin/repos.py:424 msgid "An error occurred during unlocking" msgstr "解锁时发生错误" @@ -326,10 +323,20 @@ msgid "No data loaded yet" msgstr "数据未加载" #: rhodecode/controllers/summary.py:144 -#: rhodecode/templates/summary/summary.html:148 +#: rhodecode/templates/summary/summary.html:157 msgid "Statistics are disabled for this repository" msgstr "该版本库统计功能已经禁用" +#: rhodecode/controllers/admin/defaults.py:96 +#, fuzzy +msgid "Default settings updated successfully" +msgstr "LDAP设置已经成功更新" + +#: rhodecode/controllers/admin/defaults.py:110 +#, fuzzy +msgid "error occurred during update of defaults" +msgstr "更新用户%s时发生错误" + #: rhodecode/controllers/admin/ldap_settings.py:50 msgid "BASE" msgstr "BASE" @@ -368,37 +375,42 @@ msgstr "未加密" #: rhodecode/controllers/admin/ldap_settings.py:65 msgid "LDAPS connection" -msgstr "LDAPS 连接" +msgstr "LDAPS连接" #: rhodecode/controllers/admin/ldap_settings.py:66 msgid "START_TLS on LDAP connection" -msgstr "LDAP 连接上的 START_TLS" +msgstr "LDAP连接上的START_TLS" #: rhodecode/controllers/admin/ldap_settings.py:126 msgid "Ldap settings updated successfully" -msgstr "LDAP 设置已经成功更新" +msgstr "LDAP设置已经成功更新" #: rhodecode/controllers/admin/ldap_settings.py:130 msgid "Unable to activate ldap. The \"python-ldap\" library is missing." -msgstr "无法启用 LDAP。缺失“python-ldap”库。" +msgstr "无法启用LDAP。缺失“python-ldap”库。" #: rhodecode/controllers/admin/ldap_settings.py:147 msgid "error occurred during update of ldap settings" -msgstr "更新 LDAP 设置时发生错误" +msgstr "更新LDAP设置时发生错误" #: rhodecode/controllers/admin/permissions.py:59 +#: rhodecode/controllers/admin/permissions.py:63 msgid "None" msgstr "无" #: rhodecode/controllers/admin/permissions.py:60 +#: rhodecode/controllers/admin/permissions.py:64 msgid "Read" msgstr "读" #: rhodecode/controllers/admin/permissions.py:61 +#: rhodecode/controllers/admin/permissions.py:65 msgid "Write" msgstr "写" #: rhodecode/controllers/admin/permissions.py:62 +#: rhodecode/controllers/admin/permissions.py:66 +#: rhodecode/templates/admin/defaults/defaults.html:9 #: rhodecode/templates/admin/ldap/ldap.html:9 #: rhodecode/templates/admin/permissions/permissions.html:9 #: rhodecode/templates/admin/repos/repo_add.html:9 @@ -411,330 +423,330 @@ msgstr "写" #: rhodecode/templates/admin/settings/settings.html:9 #: rhodecode/templates/admin/users/user_add.html:8 #: rhodecode/templates/admin/users/user_edit.html:9 -#: rhodecode/templates/admin/users/user_edit.html:122 +#: rhodecode/templates/admin/users/user_edit.html:126 #: rhodecode/templates/admin/users/users.html:9 #: rhodecode/templates/admin/users_groups/users_group_add.html:8 #: rhodecode/templates/admin/users_groups/users_group_edit.html:9 #: rhodecode/templates/admin/users_groups/users_groups.html:9 #: rhodecode/templates/base/base.html:197 -#: rhodecode/templates/base/base.html:346 -#: rhodecode/templates/base/base.html:348 #: rhodecode/templates/base/base.html:350 +#: rhodecode/templates/base/base.html:352 +#: rhodecode/templates/base/base.html:354 msgid "Admin" msgstr "管理" -#: rhodecode/controllers/admin/permissions.py:65 +#: rhodecode/controllers/admin/permissions.py:69 msgid "disabled" msgstr "禁用" -#: rhodecode/controllers/admin/permissions.py:67 +#: rhodecode/controllers/admin/permissions.py:71 msgid "allowed with manual account activation" msgstr "允许手工启用帐号" -#: rhodecode/controllers/admin/permissions.py:69 +#: rhodecode/controllers/admin/permissions.py:73 msgid "allowed with automatic account activation" msgstr "允许自动启用帐号" -#: rhodecode/controllers/admin/permissions.py:71 -#: rhodecode/controllers/admin/permissions.py:74 +#: rhodecode/controllers/admin/permissions.py:75 +#: rhodecode/controllers/admin/permissions.py:78 msgid "Disabled" msgstr "停用" -#: rhodecode/controllers/admin/permissions.py:72 -#: rhodecode/controllers/admin/permissions.py:75 +#: rhodecode/controllers/admin/permissions.py:76 +#: rhodecode/controllers/admin/permissions.py:79 msgid "Enabled" msgstr "启用" -#: rhodecode/controllers/admin/permissions.py:116 +#: rhodecode/controllers/admin/permissions.py:122 msgid "Default permissions updated successfully" msgstr "成功更新默认权限" -#: rhodecode/controllers/admin/permissions.py:130 +#: rhodecode/controllers/admin/permissions.py:136 msgid "error occurred during update of permissions" msgstr "更新权限时发生错误" -#: rhodecode/controllers/admin/repos.py:123 +#: rhodecode/controllers/admin/repos.py:125 msgid "--REMOVE FORK--" msgstr "-- 移除复刻 --" -#: rhodecode/controllers/admin/repos.py:192 +#: rhodecode/controllers/admin/repos.py:194 #, python-format msgid "created repository %s from %s" -msgstr "新版本库 %s 基于 %s 建立。" - -#: rhodecode/controllers/admin/repos.py:196 +msgstr "新版本库%s基于%s建立。" + +#: rhodecode/controllers/admin/repos.py:198 #, python-format msgid "created repository %s" -msgstr "建立版本库 %s" - -#: rhodecode/controllers/admin/repos.py:227 +msgstr "建立版本库%s" + +#: rhodecode/controllers/admin/repos.py:229 #, python-format msgid "error occurred during creation of repository %s" -msgstr "创建版本库时发生错误 %s" - -#: rhodecode/controllers/admin/repos.py:319 +msgstr "创建版本库时发生错误%s" + +#: rhodecode/controllers/admin/repos.py:321 #, python-format msgid "Cannot delete %s it still contains attached forks" -msgstr "无法删除 %s 因为它还有其他分复刻本库" - -#: rhodecode/controllers/admin/repos.py:348 +msgstr "无法删除%s因为它还有其他分复刻本库" + +#: rhodecode/controllers/admin/repos.py:350 msgid "An error occurred during deletion of repository user" msgstr "删除版本库用户时发生错误" -#: rhodecode/controllers/admin/repos.py:367 +#: rhodecode/controllers/admin/repos.py:369 msgid "An error occurred during deletion of repository users groups" msgstr "删除版本库用户组时发生错误" -#: rhodecode/controllers/admin/repos.py:385 +#: rhodecode/controllers/admin/repos.py:387 msgid "An error occurred during deletion of repository stats" msgstr "删除版本库统计时发生错误" -#: rhodecode/controllers/admin/repos.py:402 +#: rhodecode/controllers/admin/repos.py:404 msgid "An error occurred during cache invalidation" msgstr "清除缓存时发生错误" -#: rhodecode/controllers/admin/repos.py:442 +#: rhodecode/controllers/admin/repos.py:444 msgid "Updated repository visibility in public journal" msgstr "成功更新在公共日志中的可见性" -#: rhodecode/controllers/admin/repos.py:446 +#: rhodecode/controllers/admin/repos.py:448 msgid "An error occurred during setting this repository in public journal" msgstr "设置版本库到公共日志时发生错误" -#: rhodecode/controllers/admin/repos.py:451 rhodecode/model/validators.py:300 +#: rhodecode/controllers/admin/repos.py:453 rhodecode/model/validators.py:300 msgid "Token mismatch" msgstr "令牌不匹配" -#: rhodecode/controllers/admin/repos.py:464 -msgid "Pulled from remote location" -msgstr "成功拉取自远程路径" - #: rhodecode/controllers/admin/repos.py:466 +msgid "Pulled from remote location" +msgstr "成功拉取自远程路径" + +#: rhodecode/controllers/admin/repos.py:468 msgid "An error occurred during pull from remote location" msgstr "从远程路径拉取时发生错误" -#: rhodecode/controllers/admin/repos.py:482 +#: rhodecode/controllers/admin/repos.py:484 msgid "Nothing" msgstr "无" -#: rhodecode/controllers/admin/repos.py:484 +#: rhodecode/controllers/admin/repos.py:486 #, python-format msgid "Marked repo %s as fork of %s" -msgstr "成功将版本库 %s 标记为复刻自 %s" - -#: rhodecode/controllers/admin/repos.py:488 +msgstr "成功将版本库%s标记为复刻自%s" + +#: rhodecode/controllers/admin/repos.py:490 msgid "An error occurred during this operation" msgstr "在搜索操作中发生错误" -#: rhodecode/controllers/admin/repos_groups.py:117 +#: rhodecode/controllers/admin/repos_groups.py:120 #, python-format msgid "created repos group %s" -msgstr "建立版本库组 %s" - -#: rhodecode/controllers/admin/repos_groups.py:130 +msgstr "建立版本库组%s" + +#: rhodecode/controllers/admin/repos_groups.py:133 #, python-format msgid "error occurred during creation of repos group %s" -msgstr "创建版本库组时发生错误 %s" - -#: rhodecode/controllers/admin/repos_groups.py:164 +msgstr "创建版本库组时发生错误%s" + +#: rhodecode/controllers/admin/repos_groups.py:167 #, python-format msgid "updated repos group %s" -msgstr "更新版本库组 %s" - -#: rhodecode/controllers/admin/repos_groups.py:177 +msgstr "更新版本库组%s" + +#: rhodecode/controllers/admin/repos_groups.py:180 #, python-format msgid "error occurred during update of repos group %s" -msgstr "更新版本库组时发生错误 %s" - -#: rhodecode/controllers/admin/repos_groups.py:195 +msgstr "更新版本库组时发生错误%s" + +#: rhodecode/controllers/admin/repos_groups.py:198 #, python-format msgid "This group contains %s repositores and cannot be deleted" -msgstr "这个组内有 %s 个版本库因而无法删除" - -#: rhodecode/controllers/admin/repos_groups.py:203 +msgstr "这个组内有%s个版本库因而无法删除" + +#: rhodecode/controllers/admin/repos_groups.py:206 #, python-format msgid "removed repos group %s" -msgstr "移除版本库组 %s" - -#: rhodecode/controllers/admin/repos_groups.py:209 +msgstr "移除版本库组%s" + +#: rhodecode/controllers/admin/repos_groups.py:212 msgid "Cannot delete this group it still contains subgroups" msgstr "不能删除包含子组的组" -#: rhodecode/controllers/admin/repos_groups.py:214 -#: rhodecode/controllers/admin/repos_groups.py:219 +#: rhodecode/controllers/admin/repos_groups.py:217 +#: rhodecode/controllers/admin/repos_groups.py:222 #, python-format msgid "error occurred during deletion of repos group %s" -msgstr "删除版本库组时发生错误 %s" - -#: rhodecode/controllers/admin/repos_groups.py:240 +msgstr "删除版本库组时发生错误%s" + +#: rhodecode/controllers/admin/repos_groups.py:243 msgid "An error occurred during deletion of group user" msgstr "删除组用户时发生错误" -#: rhodecode/controllers/admin/repos_groups.py:261 +#: rhodecode/controllers/admin/repos_groups.py:264 msgid "An error occurred during deletion of group users groups" msgstr "删除版本库组的用户组时发生错误" -#: rhodecode/controllers/admin/settings.py:122 +#: rhodecode/controllers/admin/settings.py:123 #, python-format msgid "Repositories successfully rescanned added: %s,removed: %s" -msgstr "重新扫描版本库成功,增加 %s, 移除 %s" - -#: rhodecode/controllers/admin/settings.py:130 +msgstr "重新扫描版本库成功,增加%s, 移除%s" + +#: rhodecode/controllers/admin/settings.py:131 msgid "Whoosh reindex task scheduled" -msgstr "Whoosh 重新索引任务调度" - -#: rhodecode/controllers/admin/settings.py:161 +msgstr "Whoosh重新索引任务调度" + +#: rhodecode/controllers/admin/settings.py:162 msgid "Updated application settings" msgstr "更新应用设置" -#: rhodecode/controllers/admin/settings.py:165 -#: rhodecode/controllers/admin/settings.py:293 +#: rhodecode/controllers/admin/settings.py:166 +#: rhodecode/controllers/admin/settings.py:299 msgid "error occurred during updating application settings" msgstr "更新设置时发生错误" -#: rhodecode/controllers/admin/settings.py:201 +#: rhodecode/controllers/admin/settings.py:207 msgid "Updated visualisation settings" msgstr "成功更新可视化设置" -#: rhodecode/controllers/admin/settings.py:206 +#: rhodecode/controllers/admin/settings.py:212 msgid "error occurred during updating visualisation settings" msgstr "更新可视化设置时发生错误" -#: rhodecode/controllers/admin/settings.py:289 +#: rhodecode/controllers/admin/settings.py:295 msgid "Updated VCS settings" msgstr "成功更新版本控制系统设置" -#: rhodecode/controllers/admin/settings.py:303 +#: rhodecode/controllers/admin/settings.py:309 msgid "Added new hook" msgstr "新建钩子" -#: rhodecode/controllers/admin/settings.py:315 +#: rhodecode/controllers/admin/settings.py:321 msgid "Updated hooks" msgstr "更新钩子" -#: rhodecode/controllers/admin/settings.py:319 +#: rhodecode/controllers/admin/settings.py:325 msgid "error occurred during hook creation" msgstr "创建钩子时发生错误" -#: rhodecode/controllers/admin/settings.py:338 +#: rhodecode/controllers/admin/settings.py:344 msgid "Email task created" msgstr "已创建电子邮件任务" -#: rhodecode/controllers/admin/settings.py:393 +#: rhodecode/controllers/admin/settings.py:399 msgid "You can't edit this user since it's crucial for entire application" msgstr "由于是系统帐号,无法编辑该用户" -#: rhodecode/controllers/admin/settings.py:424 +#: rhodecode/controllers/admin/settings.py:430 msgid "Your account was updated successfully" msgstr "你的帐号已经更新完成" -#: rhodecode/controllers/admin/settings.py:439 -#: rhodecode/controllers/admin/users.py:191 +#: rhodecode/controllers/admin/settings.py:445 +#: rhodecode/controllers/admin/users.py:196 #, python-format msgid "error occurred during update of user %s" -msgstr "更新用户 %s 时发生错误" +msgstr "更新用户%s时发生错误" #: rhodecode/controllers/admin/users.py:130 #, python-format msgid "created user %s" -msgstr "创建用户 %s" +msgstr "创建用户%s" #: rhodecode/controllers/admin/users.py:142 #, python-format msgid "error occurred during creation of user %s" -msgstr "创建用户 %s 时发生错误" - -#: rhodecode/controllers/admin/users.py:171 +msgstr "创建用户%s时发生错误" + +#: rhodecode/controllers/admin/users.py:176 msgid "User updated successfully" msgstr "用户更新成功" -#: rhodecode/controllers/admin/users.py:207 +#: rhodecode/controllers/admin/users.py:212 msgid "successfully deleted user" msgstr "用户删除成功" -#: rhodecode/controllers/admin/users.py:212 +#: rhodecode/controllers/admin/users.py:217 msgid "An error occurred during deletion of user" msgstr "删除用户时发生错误" -#: rhodecode/controllers/admin/users.py:226 +#: rhodecode/controllers/admin/users.py:231 msgid "You can't edit this user" msgstr "无法编辑该用户" -#: rhodecode/controllers/admin/users.py:266 +#: rhodecode/controllers/admin/users.py:272 msgid "Granted 'repository create' permission to user" msgstr "已授予用户‘创建版本库’的权限" -#: rhodecode/controllers/admin/users.py:271 +#: rhodecode/controllers/admin/users.py:277 msgid "Revoked 'repository create' permission to user" msgstr "已撤销用户‘创建版本库’的权限" -#: rhodecode/controllers/admin/users.py:277 +#: rhodecode/controllers/admin/users.py:283 msgid "Granted 'repository fork' permission to user" msgstr "成功授予了用户“复刻版本库”权限" -#: rhodecode/controllers/admin/users.py:282 +#: rhodecode/controllers/admin/users.py:288 msgid "Revoked 'repository fork' permission to user" msgstr "成功撤销用户“复刻版本库”权限" -#: rhodecode/controllers/admin/users.py:288 -#: rhodecode/controllers/admin/users_groups.py:255 +#: rhodecode/controllers/admin/users.py:294 +#: rhodecode/controllers/admin/users_groups.py:279 msgid "An error occurred during permissions saving" msgstr "保存权限时发生错误" -#: rhodecode/controllers/admin/users.py:303 +#: rhodecode/controllers/admin/users.py:309 #, python-format msgid "Added email %s to user" msgstr "已为用户添加电子邮件 %s" -#: rhodecode/controllers/admin/users.py:309 +#: rhodecode/controllers/admin/users.py:315 msgid "An error occurred during email saving" msgstr "保存电子邮件时发生错误" -#: rhodecode/controllers/admin/users.py:319 +#: rhodecode/controllers/admin/users.py:325 msgid "Removed email from user" msgstr "成功删除用户电子邮件" -#: rhodecode/controllers/admin/users_groups.py:84 +#: rhodecode/controllers/admin/users_groups.py:86 #, python-format msgid "created users group %s" -msgstr "建立用户组 %s" - -#: rhodecode/controllers/admin/users_groups.py:95 +msgstr "建立用户组%s" + +#: rhodecode/controllers/admin/users_groups.py:97 #, python-format msgid "error occurred during creation of users group %s" -msgstr "创建用户组 %s 时发生错误" - -#: rhodecode/controllers/admin/users_groups.py:135 +msgstr "创建用户组%s时发生错误" + +#: rhodecode/controllers/admin/users_groups.py:164 #, python-format msgid "updated users group %s" -msgstr "更新用户组 %s" - -#: rhodecode/controllers/admin/users_groups.py:157 +msgstr "更新用户组%s" + +#: rhodecode/controllers/admin/users_groups.py:186 #, python-format msgid "error occurred during update of users group %s" -msgstr "更新用户组 %s 时发生错误" - -#: rhodecode/controllers/admin/users_groups.py:174 +msgstr "更新用户组%s时发生错误" + +#: rhodecode/controllers/admin/users_groups.py:203 msgid "successfully deleted users group" msgstr "删除用户组成功" -#: rhodecode/controllers/admin/users_groups.py:179 +#: rhodecode/controllers/admin/users_groups.py:208 msgid "An error occurred during deletion of users group" msgstr "删除用户组时发生错误" -#: rhodecode/controllers/admin/users_groups.py:233 +#: rhodecode/controllers/admin/users_groups.py:257 msgid "Granted 'repository create' permission to users group" msgstr "已授予用户组‘创建版本库’的权限" -#: rhodecode/controllers/admin/users_groups.py:238 +#: rhodecode/controllers/admin/users_groups.py:262 msgid "Revoked 'repository create' permission to users group" msgstr "已撤销用户组‘创建版本库’的权限" -#: rhodecode/controllers/admin/users_groups.py:244 +#: rhodecode/controllers/admin/users_groups.py:268 msgid "Granted 'repository fork' permission to users group" msgstr "已授予用户组‘复刻版本库’的权限" -#: rhodecode/controllers/admin/users_groups.py:249 +#: rhodecode/controllers/admin/users_groups.py:273 msgid "Revoked 'repository fork' permission to users group" msgstr "已撤销用户组‘复刻版本库’的权限" @@ -746,19 +758,22 @@ msgstr "必须是注册用户才能进行此操作" msgid "You need to be a signed in to view this page" msgstr "必须登录才能访问该页面" -#: rhodecode/lib/diffs.py:87 -msgid "" -"Changeset was too big and was cut off, use diff menu to display this diff" +#: rhodecode/lib/diffs.py:74 +msgid "binary file" +msgstr "二进制文件" + +#: rhodecode/lib/diffs.py:90 +msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "修订集因过大而被截断,可查看原始修订集作为替代" -#: rhodecode/lib/diffs.py:97 +#: rhodecode/lib/diffs.py:100 msgid "No changes detected" msgstr "未发现差异" #: rhodecode/lib/helpers.py:373 #, python-format msgid "%a, %d %b %Y %H:%M:%S" -msgstr "%Y/%b/%d %H:%M:%S %a" +msgstr "%Y/%m/%d %H:%M:%S" #: rhodecode/lib/helpers.py:485 msgid "True" @@ -768,272 +783,292 @@ msgstr "是" msgid "False" msgstr "否" -#: rhodecode/lib/helpers.py:533 +#: rhodecode/lib/helpers.py:529 +#, python-format +msgid "Deleted branch: %s" +msgstr "已经删除分支%s" + +#: rhodecode/lib/helpers.py:532 +#, python-format +msgid "Created tag: %s" +msgstr "创建标签%s" + +#: rhodecode/lib/helpers.py:545 msgid "Changeset not found" msgstr "未找到修订集" -#: rhodecode/lib/helpers.py:556 +#: rhodecode/lib/helpers.py:588 #, python-format msgid "Show all combined changesets %s->%s" -msgstr "显示合并的修订集 %s->%s" - -#: rhodecode/lib/helpers.py:562 +msgstr "显示合并的修订集%s->%s" + +#: rhodecode/lib/helpers.py:594 msgid "compare view" msgstr "比较显示" -#: rhodecode/lib/helpers.py:582 +#: rhodecode/lib/helpers.py:614 msgid "and" msgstr "还有" -#: rhodecode/lib/helpers.py:583 +#: rhodecode/lib/helpers.py:615 #, python-format msgid "%s more" -msgstr "%s 个" - -#: rhodecode/lib/helpers.py:584 -#: rhodecode/templates/changelog/changelog.html:49 +msgstr "%s个" + +#: rhodecode/lib/helpers.py:616 rhodecode/templates/changelog/changelog.html:51 msgid "revisions" msgstr "修订" -#: rhodecode/lib/helpers.py:607 -msgid "fork name " -msgstr "复刻名称" - -#: rhodecode/lib/helpers.py:621 +#: rhodecode/lib/helpers.py:640 +#, python-format +msgid "fork name %s" +msgstr "复刻名称%s" + +#: rhodecode/lib/helpers.py:653 #: rhodecode/templates/pullrequests/pullrequest_show.html:4 #: rhodecode/templates/pullrequests/pullrequest_show.html:12 #, python-format msgid "Pull request #%s" -msgstr "拉取请求 #%s" - -#: rhodecode/lib/helpers.py:627 +msgstr "拉取请求#%s" + +#: rhodecode/lib/helpers.py:659 msgid "[deleted] repository" msgstr "[删除]版本库" -#: rhodecode/lib/helpers.py:629 rhodecode/lib/helpers.py:639 +#: rhodecode/lib/helpers.py:661 rhodecode/lib/helpers.py:671 msgid "[created] repository" msgstr "[创建]版本库" -#: rhodecode/lib/helpers.py:631 +#: rhodecode/lib/helpers.py:663 msgid "[created] repository as fork" msgstr "[创建]复刻版本库" -#: rhodecode/lib/helpers.py:633 rhodecode/lib/helpers.py:641 +#: rhodecode/lib/helpers.py:665 rhodecode/lib/helpers.py:673 msgid "[forked] repository" msgstr "[复刻]版本库" -#: rhodecode/lib/helpers.py:635 rhodecode/lib/helpers.py:643 +#: rhodecode/lib/helpers.py:667 rhodecode/lib/helpers.py:675 msgid "[updated] repository" msgstr "[更新]版本库" -#: rhodecode/lib/helpers.py:637 +#: rhodecode/lib/helpers.py:669 msgid "[delete] repository" msgstr "[删除]版本库" -#: rhodecode/lib/helpers.py:645 +#: rhodecode/lib/helpers.py:677 msgid "[created] user" msgstr "[创建]用户" -#: rhodecode/lib/helpers.py:647 +#: rhodecode/lib/helpers.py:679 msgid "[updated] user" msgstr "[更新]用户" -#: rhodecode/lib/helpers.py:649 +#: rhodecode/lib/helpers.py:681 msgid "[created] users group" msgstr "[创建]用户组" -#: rhodecode/lib/helpers.py:651 +#: rhodecode/lib/helpers.py:683 msgid "[updated] users group" msgstr "[更新]用户组" -#: rhodecode/lib/helpers.py:653 +#: rhodecode/lib/helpers.py:685 msgid "[commented] on revision in repository" msgstr "[评论]了版本库中的修订" -#: rhodecode/lib/helpers.py:655 +#: rhodecode/lib/helpers.py:687 msgid "[commented] on pull request for" msgstr "[评论]拉取请求" -#: rhodecode/lib/helpers.py:657 +#: rhodecode/lib/helpers.py:689 msgid "[closed] pull request for" msgstr "[关闭] 拉取请求" -#: rhodecode/lib/helpers.py:659 +#: rhodecode/lib/helpers.py:691 msgid "[pushed] into" msgstr "[推送]到" -#: rhodecode/lib/helpers.py:661 +#: rhodecode/lib/helpers.py:693 msgid "[committed via RhodeCode] into repository" -msgstr "[通过 RhodeCode 提交]到版本库" - -#: rhodecode/lib/helpers.py:663 +msgstr "[通过RhodeCode提交]到版本库" + +#: rhodecode/lib/helpers.py:695 msgid "[pulled from remote] into repository" msgstr "[远程拉取]到版本库" -#: rhodecode/lib/helpers.py:665 +#: rhodecode/lib/helpers.py:697 msgid "[pulled] from" msgstr "[拉取]自" -#: rhodecode/lib/helpers.py:667 +#: rhodecode/lib/helpers.py:699 msgid "[started following] repository" msgstr "[开始关注]版本库" -#: rhodecode/lib/helpers.py:669 +#: rhodecode/lib/helpers.py:701 msgid "[stopped following] repository" msgstr "[停止关注]版本库" -#: rhodecode/lib/helpers.py:845 +#: rhodecode/lib/helpers.py:877 #, python-format msgid " and %s more" -msgstr "还有 %s 个" - -#: rhodecode/lib/helpers.py:849 +msgstr "还有%s个" + +#: rhodecode/lib/helpers.py:881 msgid "No Files" msgstr "没有文件" -#: rhodecode/lib/utils2.py:352 +#: rhodecode/lib/utils2.py:403 #, python-format msgid "%d year" msgid_plural "%d years" -msgstr[0] "%d 年" - -#: rhodecode/lib/utils2.py:353 +msgstr[0] "%d年" + +#: rhodecode/lib/utils2.py:404 #, python-format msgid "%d month" msgid_plural "%d months" -msgstr[0] "%d 月" - -#: rhodecode/lib/utils2.py:354 +msgstr[0] "%d月" + +#: rhodecode/lib/utils2.py:405 #, python-format msgid "%d day" msgid_plural "%d days" -msgstr[0] "%d 天" - -#: rhodecode/lib/utils2.py:355 +msgstr[0] "%d天" + +#: rhodecode/lib/utils2.py:406 #, python-format msgid "%d hour" msgid_plural "%d hours" -msgstr[0] "%d 小时" - -#: rhodecode/lib/utils2.py:356 +msgstr[0] "%d时" + +#: rhodecode/lib/utils2.py:407 #, python-format msgid "%d minute" msgid_plural "%d minutes" -msgstr[0] "%d 分钟" - -#: rhodecode/lib/utils2.py:357 +msgstr[0] "%d分" + +#: rhodecode/lib/utils2.py:408 #, python-format msgid "%d second" msgid_plural "%d seconds" -msgstr[0] "%d 秒" - -#: rhodecode/lib/utils2.py:372 +msgstr[0] "%d秒" + +#: rhodecode/lib/utils2.py:424 +#, python-format +msgid "in %s" +msgstr "%s" + +#: rhodecode/lib/utils2.py:426 #, python-format msgid "%s ago" -msgstr "%s 之前" - -#: rhodecode/lib/utils2.py:374 +msgstr "%s前" + +#: rhodecode/lib/utils2.py:428 +#, python-format +msgid "in %s and %s" +msgstr "%s零%s" + +#: rhodecode/lib/utils2.py:431 #, python-format msgid "%s and %s ago" -msgstr "%s 零 %s 之前" - -#: rhodecode/lib/utils2.py:377 +msgstr "%s零%s前" + +#: rhodecode/lib/utils2.py:434 msgid "just now" msgstr "刚才" -#: rhodecode/lib/celerylib/tasks.py:269 +#: rhodecode/lib/celerylib/tasks.py:270 msgid "password reset link" msgstr "密码重置链接" +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 rhodecode/model/db.py:1180 +msgid "Repository no access" +msgstr "无版本库访问权限" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1181 +msgid "Repository read access" +msgstr "版本库读取权限" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1182 +msgid "Repository write access" +msgstr "版本库写入权限" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1183 +msgid "Repository admin access" +msgstr "版本库管理权限" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1185 +msgid "Repositories Group no access" +msgstr "无版本库组访问权限" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1186 +msgid "Repositories Group read access" +msgstr "版本库组读取权限" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1187 +msgid "Repositories Group write access" +msgstr "版本库组写入" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1188 +msgid "Repositories Group admin access" +msgstr "版本库组管理权限" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1190 +msgid "RhodeCode Administrator" +msgstr "RhodeCode 管理员" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1191 +msgid "Repository creation disabled" +msgstr "禁用创建版本库" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1192 +msgid "Repository creation enabled" +msgstr "允许创建版本库" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1193 +msgid "Repository forking disabled" +msgstr "禁用复刻版本库" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1194 +msgid "Repository forking enabled" +msgstr "允许复刻版本库" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1195 +msgid "Register disabled" +msgstr "禁用注册" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1196 +msgid "Register new user with RhodeCode with manual activation" +msgstr "用手动激活注册新用户" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1199 +msgid "Register new user with RhodeCode with auto activation" +msgstr "用自动激活注册新用户" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1640 +msgid "Not Reviewed" +msgstr "未检视" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1641 +msgid "Approved" +msgstr "已批准" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1642 +msgid "Rejected" +msgstr "驳回" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1643 +msgid "Under Review" +msgstr "检视中" + #: rhodecode/model/comment.py:110 #, python-format msgid "on line %s" -msgstr "在 %s 行" +msgstr "在%s行" #: rhodecode/model/comment.py:173 msgid "[Mention]" msgstr "[提及]" -#: rhodecode/model/db.py:1164 -msgid "Repository no access" -msgstr "无版本库访问权限" - -#: rhodecode/model/db.py:1165 -msgid "Repository read access" -msgstr "版本库读取权限" - -#: rhodecode/model/db.py:1166 -msgid "Repository write access" -msgstr "版本库写入权限" - -#: rhodecode/model/db.py:1167 -msgid "Repository admin access" -msgstr "版本库管理权限" - -#: rhodecode/model/db.py:1169 -msgid "Repositories Group no access" -msgstr "无版本库组访问权限" - -#: rhodecode/model/db.py:1170 -msgid "Repositories Group read access" -msgstr "版本库组读取权限" - -#: rhodecode/model/db.py:1171 -msgid "Repositories Group write access" -msgstr "版本库组写入" - -#: rhodecode/model/db.py:1172 -msgid "Repositories Group admin access" -msgstr "版本库组管理权限" - -#: rhodecode/model/db.py:1174 -msgid "RhodeCode Administrator" -msgstr "RhodeCode 管理员" - -#: rhodecode/model/db.py:1175 -msgid "Repository creation disabled" -msgstr "禁用创建版本库" - -#: rhodecode/model/db.py:1176 -msgid "Repository creation enabled" -msgstr "允许创建版本库" - -#: rhodecode/model/db.py:1177 -msgid "Repository forking disabled" -msgstr "禁用复刻版本库" - -#: rhodecode/model/db.py:1178 -msgid "Repository forking enabled" -msgstr "允许复刻版本库" - -#: rhodecode/model/db.py:1179 -msgid "Register disabled" -msgstr "禁用注册" - -#: rhodecode/model/db.py:1180 -msgid "Register new user with RhodeCode with manual activation" -msgstr "用手动激活注册新用户" - -#: rhodecode/model/db.py:1183 -msgid "Register new user with RhodeCode with auto activation" -msgstr "用自动激活注册新用户" - -#: rhodecode/model/db.py:1611 -msgid "Not Reviewed" -msgstr "未检视" - -#: rhodecode/model/db.py:1612 -msgid "Approved" -msgstr "已批准" - -#: rhodecode/model/db.py:1613 -msgid "Rejected" -msgstr "驳回" - -#: rhodecode/model/db.py:1614 -msgid "Under Review" -msgstr "检视中" - #: rhodecode/model/forms.py:43 msgid "Please enter a login" msgstr "请登录" @@ -1041,7 +1076,7 @@ msgstr "请登录" #: rhodecode/model/forms.py:44 #, python-format msgid "Enter a value %(min)i characters long or more" -msgstr "输入一个不少于 %(min)i 个字符的值" +msgstr "输入一个不少于%(min)i个字符的值" #: rhodecode/model/forms.py:52 msgid "Please enter a password" @@ -1050,62 +1085,66 @@ msgstr "请输入密码" #: rhodecode/model/forms.py:53 #, python-format msgid "Enter %(min)i characters or more" -msgstr "输入少于 %(min)i 个字符" +msgstr "输入少于%(min)i个字符" #: rhodecode/model/notification.py:220 -msgid "commented on commit" -msgstr "评论了评论" +#, python-format +msgid "commented on commit at %(when)s" +msgstr "在%(when)s评论了提交" #: rhodecode/model/notification.py:221 -msgid "sent message" -msgstr "发送信息" +#, python-format +msgid "sent message at %(when)s" +msgstr "在%(when)s发送信息" #: rhodecode/model/notification.py:222 -msgid "mentioned you" -msgstr "提到了你" +#, python-format +msgid "mentioned you at %(when)s" +msgstr "在%(when)s提到了你" #: rhodecode/model/notification.py:223 -msgid "registered in RhodeCode" -msgstr "注册到 RhodeCode" +#, python-format +msgid "registered in RhodeCode at %(when)s" +msgstr "在%(when)s注册到RhodeCode" #: rhodecode/model/notification.py:224 -msgid "opened new pull request" -msgstr "创建新的拉取请求" +#, python-format +msgid "opened new pull request at %(when)s" +msgstr "在%(when)s创建新的拉取请求" #: rhodecode/model/notification.py:225 -msgid "commented on pull request" -msgstr "评论了拉取请求" - -#: rhodecode/model/pull_request.py:89 +#, python-format +msgid "commented on pull request at %(when)s" +msgstr "在%(when)s评论了拉取请求" + +#: rhodecode/model/pull_request.py:90 #, python-format msgid "%(user)s wants you to review pull request #%(pr_id)s" -msgstr "%(user)s 想要你检视拉取请求 #%(pr_id)s" - -#: rhodecode/model/scm.py:535 +msgstr "%(user)s想要你检视拉取请求#%(pr_id)s" + +#: rhodecode/model/scm.py:542 msgid "latest tip" -msgstr "最后 tip 版本" +msgstr "最新tip版本" #: rhodecode/model/user.py:230 msgid "new user registration" -msgstr "[RhodeCode] 新用户注册" - -#: rhodecode/model/user.py:255 rhodecode/model/user.py:277 -#: rhodecode/model/user.py:299 +msgstr "[RhodeCode]新用户注册" + +#: rhodecode/model/user.py:255 rhodecode/model/user.py:279 +#: rhodecode/model/user.py:301 msgid "You can't Edit this user since it's crucial for entire application" msgstr "由于是系统帐号,无法编辑该用户" -#: rhodecode/model/user.py:323 +#: rhodecode/model/user.py:325 msgid "You can't remove this user since it's crucial for entire application" msgstr "由于是系统帐号,无法删除该用户" -#: rhodecode/model/user.py:329 +#: rhodecode/model/user.py:331 #, python-format msgid "" -"user \"%s\" still owns %s repositories and cannot be removed. Switch owners " -"or remove those repositories. %s" -msgstr "" -"由于用户 \"%s\" 拥有版本库 %s 因而无法删除,请修改版本库所有者或删除版本" -"库。%s" +"user \"%s\" still owns %s repositories and cannot be removed. Switch " +"owners or remove those repositories. %s" +msgstr "由于用户 \"%s\" 拥有版本库%s因而无法删除,请修改版本库所有者或删除版本库。%s" #: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37 msgid "Value cannot be an empty list" @@ -1114,7 +1153,7 @@ msgstr "值不能为空" #: rhodecode/model/validators.py:83 #, python-format msgid "Username \"%(username)s\" already exists" -msgstr "用户名称 %(username)s 已经存在" +msgstr "用户名称%(username)s已经存在" #: rhodecode/model/validators.py:85 #, python-format @@ -1123,10 +1162,9 @@ msgstr "不允许用户名 \"%(username)s\"" #: rhodecode/model/validators.py:87 msgid "" -"Username may only contain alphanumeric characters underscores, periods or " -"dashes and must begin with alphanumeric character" -msgstr "" -"只能使用字母、数字、下划线、小数点或减号作为用户名,且必须由数字或字母开头" +"Username may only contain alphanumeric characters underscores, periods or" +" dashes and must begin with alphanumeric character" +msgstr "只能使用字母、数字、下划线、小数点或减号作为用户名,且必须由数字或字母开头" #: rhodecode/model/validators.py:115 #, python-format @@ -1146,12 +1184,11 @@ msgstr "用户组 \"%(usersgroup)s\" 已经存在" msgid "" "users group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" -msgstr "" -"只能使用字母、数字、下划线、小数点或减号作为用户组名,且必须由数字或字母开头" +msgstr "只能使用字母、数字、下划线、小数点或减号作为用户组名,且必须由数字或字母开头" #: rhodecode/model/validators.py:175 msgid "Cannot assign this group as parent" -msgstr "不能将这个组作为 parent" +msgstr "不能将这个组作为parent" #: rhodecode/model/validators.py:176 #, python-format @@ -1186,12 +1223,12 @@ msgstr "该帐号已被禁用" #: rhodecode/model/validators.py:314 #, python-format msgid "Repository name %(repo)s is disallowed" -msgstr "版本库名称不能为 %(repo)s" +msgstr "版本库名称不能为%(repo)s" #: rhodecode/model/validators.py:316 #, python-format msgid "Repository named %(repo)s already exists" -msgstr "已经存在版本库 %(repo)s" +msgstr "已经存在版本库%(repo)s" #: rhodecode/model/validators.py:317 #, python-format @@ -1209,7 +1246,7 @@ msgstr "无效的克隆地址" #: rhodecode/model/validators.py:433 msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url" -msgstr "无效的克隆地址,提供一个有效的克隆 http(s) 或 svn+http(s) 地址" +msgstr "无效的克隆地址,提供一个有效的克隆 http(s)或svn+http(s)地址" #: rhodecode/model/validators.py:458 msgid "Fork have to be the same type as parent" @@ -1217,7 +1254,7 @@ msgstr "复刻版本库必须和父版本库类型相同" #: rhodecode/model/validators.py:473 msgid "You don't have permissions to create repository in this group" -msgstr "没有在这个组里面创建版本库的权限" +msgstr "没有在该版本库组中创建版本库的权限" #: rhodecode/model/validators.py:498 msgid "This username or users group name is not valid" @@ -1234,18 +1271,18 @@ msgstr "该邮件地址已被使用" #: rhodecode/model/validators.py:617 #, python-format msgid "e-mail \"%(email)s\" does not exist." -msgstr "邮件地址 \"%(email)s\" 不存在" +msgstr "邮件地址\"%(email)s\"不存在" #: rhodecode/model/validators.py:654 msgid "" -"The LDAP Login attribute of the CN must be specified - this is the name of " -"the attribute that is equivalent to \"username\"" +"The LDAP Login attribute of the CN must be specified - this is the name " +"of the attribute that is equivalent to \"username\"" msgstr "LDAP 登陆属性的 CN 必须指定 - 这个名字作为用户名" #: rhodecode/model/validators.py:673 #, python-format msgid "Revisions %(revs)s are already part of pull request or have set status" -msgstr "修订 %(revs)s 已经包含在拉取请求中或者或者已经设置状态" +msgstr "修订%(revs)s已经包含在拉取请求中或者或者已经设置状态" #: rhodecode/templates/index.html:3 msgid "Dashboard" @@ -1265,7 +1302,7 @@ msgstr "快速过滤..." #: rhodecode/templates/index_base.html:6 #: rhodecode/templates/admin/repos/repos.html:9 -#: rhodecode/templates/base/base.html:230 +#: rhodecode/templates/base/base.html:233 msgid "repositories" msgstr "版本库" @@ -1276,6 +1313,7 @@ msgid "ADD REPOSITORY" msgstr "新建版本库" #: rhodecode/templates/index_base.html:29 +#: rhodecode/templates/index_base.html:136 #: 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 @@ -1285,9 +1323,10 @@ msgid "Group name" msgstr "组名" #: rhodecode/templates/index_base.html:30 -#: rhodecode/templates/index_base.html:71 -#: rhodecode/templates/index_base.html:142 -#: rhodecode/templates/index_base.html:168 +#: rhodecode/templates/index_base.html:72 +#: rhodecode/templates/index_base.html:138 +#: rhodecode/templates/index_base.html:176 +#: rhodecode/templates/index_base.html:266 #: rhodecode/templates/admin/repos/repo_add_base.html:56 #: rhodecode/templates/admin/repos/repo_edit.html:75 #: rhodecode/templates/admin/repos/repos.html:72 @@ -1296,142 +1335,137 @@ msgstr "组名" #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34 #: rhodecode/templates/forks/fork.html:59 #: rhodecode/templates/settings/repo_settings.html:66 -#: rhodecode/templates/summary/summary.html:105 +#: rhodecode/templates/summary/summary.html:114 msgid "Description" msgstr "描述" #: rhodecode/templates/index_base.html:40 -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47 msgid "Repositories group" msgstr "版本库组" -#: rhodecode/templates/index_base.html:70 -#: rhodecode/templates/index_base.html:166 +#: rhodecode/templates/index_base.html:71 +#: rhodecode/templates/index_base.html:174 +#: rhodecode/templates/index_base.html:264 #: rhodecode/templates/admin/repos/repo_add_base.html:9 #: rhodecode/templates/admin/repos/repo_edit.html:32 #: rhodecode/templates/admin/repos/repos.html:70 -#: rhodecode/templates/admin/users/user_edit.html:192 +#: rhodecode/templates/admin/users/user_edit.html:196 #: rhodecode/templates/admin/users/user_edit_my_account.html:59 -#: rhodecode/templates/admin/users/user_edit_my_account.html:181 -#: rhodecode/templates/admin/users/user_edit_my_account.html:217 +#: rhodecode/templates/admin/users/user_edit_my_account.html:180 +#: rhodecode/templates/admin/users/user_edit_my_account.html:216 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:6 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:184 #: rhodecode/templates/bookmarks/bookmarks.html:36 #: rhodecode/templates/bookmarks/bookmarks_data.html:6 -#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches.html:50 +#: rhodecode/templates/branches/branches_data.html:6 #: rhodecode/templates/files/files_browser.html:47 -#: rhodecode/templates/journal/journal.html:59 -#: rhodecode/templates/journal/journal.html:107 -#: rhodecode/templates/journal/journal.html:186 +#: rhodecode/templates/journal/journal.html:62 +#: rhodecode/templates/journal/journal.html:168 +#: rhodecode/templates/journal/journal_page_repos.html:7 #: rhodecode/templates/settings/repo_settings.html:31 #: rhodecode/templates/summary/summary.html:43 -#: rhodecode/templates/summary/summary.html:123 -#: rhodecode/templates/tags/tags.html:36 +#: rhodecode/templates/summary/summary.html:132 +#: rhodecode/templates/tags/tags.html:51 #: rhodecode/templates/tags/tags_data.html:6 msgid "Name" msgstr "名称" -#: rhodecode/templates/index_base.html:72 +#: rhodecode/templates/index_base.html:73 msgid "Last change" msgstr "最后修改" -#: rhodecode/templates/index_base.html:73 -#: rhodecode/templates/index_base.html:171 -#: rhodecode/templates/admin/users/user_edit_my_account.html:183 -#: rhodecode/templates/journal/journal.html:188 +#: rhodecode/templates/index_base.html:74 +#: rhodecode/templates/index_base.html:179 +#: rhodecode/templates/admin/users/user_edit_my_account.html:182 +#: rhodecode/templates/journal/journal.html:170 msgid "Tip" msgstr "Tip" -#: rhodecode/templates/index_base.html:74 -#: rhodecode/templates/index_base.html:173 +#: rhodecode/templates/index_base.html:75 +#: rhodecode/templates/index_base.html:181 +#: rhodecode/templates/index_base.html:269 #: rhodecode/templates/admin/repos/repo_edit.html:121 #: rhodecode/templates/admin/repos/repos.html:73 msgid "Owner" msgstr "所有者" -#: rhodecode/templates/index_base.html:75 +#: rhodecode/templates/index_base.html:76 #: rhodecode/templates/summary/summary.html:48 #: rhodecode/templates/summary/summary.html:51 msgid "RSS" msgstr "RSS" -#: rhodecode/templates/index_base.html:76 +#: rhodecode/templates/index_base.html:77 msgid "Atom" msgstr "Atom" -#: rhodecode/templates/index_base.html:110 -#: rhodecode/templates/index_base.html:112 -#, python-format -msgid "Subscribe to %s rss feed" -msgstr "订阅 %s 的 RSS" - -#: rhodecode/templates/index_base.html:117 -#: rhodecode/templates/index_base.html:119 -#, python-format -msgid "Subscribe to %s atom feed" -msgstr "订阅 %s 的 Atom" - -#: rhodecode/templates/index_base.html:140 -msgid "Group Name" -msgstr "组名" - -#: rhodecode/templates/index_base.html:158 -#: rhodecode/templates/index_base.html:198 +#: rhodecode/templates/index_base.html:167 +#: rhodecode/templates/index_base.html:207 +#: rhodecode/templates/index_base.html:291 #: rhodecode/templates/admin/repos/repos.html:94 -#: rhodecode/templates/admin/users/user_edit_my_account.html:203 +#: rhodecode/templates/admin/users/user_edit_my_account.html:202 #: rhodecode/templates/admin/users/users.html:107 #: rhodecode/templates/bookmarks/bookmarks.html:60 -#: rhodecode/templates/branches/branches.html:77 -#: rhodecode/templates/journal/journal.html:211 -#: rhodecode/templates/tags/tags.html:60 +#: rhodecode/templates/branches/branches.html:76 +#: rhodecode/templates/journal/journal.html:193 +#: rhodecode/templates/tags/tags.html:77 msgid "Click to sort ascending" msgstr "点击以升序排列" -#: rhodecode/templates/index_base.html:159 -#: rhodecode/templates/index_base.html:199 +#: rhodecode/templates/index_base.html:168 +#: rhodecode/templates/index_base.html:208 +#: rhodecode/templates/index_base.html:292 #: rhodecode/templates/admin/repos/repos.html:95 -#: rhodecode/templates/admin/users/user_edit_my_account.html:204 +#: rhodecode/templates/admin/users/user_edit_my_account.html:203 #: rhodecode/templates/admin/users/users.html:108 #: rhodecode/templates/bookmarks/bookmarks.html:61 -#: rhodecode/templates/branches/branches.html:78 -#: rhodecode/templates/journal/journal.html:212 -#: rhodecode/templates/tags/tags.html:61 +#: rhodecode/templates/branches/branches.html:77 +#: rhodecode/templates/journal/journal.html:194 +#: rhodecode/templates/tags/tags.html:78 msgid "Click to sort descending" msgstr "点击以降序排列" -#: rhodecode/templates/index_base.html:169 +#: rhodecode/templates/index_base.html:177 +#: rhodecode/templates/index_base.html:267 msgid "Last Change" msgstr "最后修改" -#: rhodecode/templates/index_base.html:200 +#: rhodecode/templates/index_base.html:209 +#: rhodecode/templates/index_base.html:293 #: rhodecode/templates/admin/repos/repos.html:96 -#: rhodecode/templates/admin/users/user_edit_my_account.html:205 +#: rhodecode/templates/admin/users/user_edit_my_account.html:204 #: rhodecode/templates/admin/users/users.html:109 #: rhodecode/templates/bookmarks/bookmarks.html:62 -#: rhodecode/templates/branches/branches.html:79 -#: rhodecode/templates/journal/journal.html:213 -#: rhodecode/templates/tags/tags.html:62 +#: rhodecode/templates/branches/branches.html:78 +#: rhodecode/templates/journal/journal.html:195 +#: rhodecode/templates/tags/tags.html:79 msgid "No records found." msgstr "没有找到记录" -#: rhodecode/templates/index_base.html:201 +#: rhodecode/templates/index_base.html:210 +#: rhodecode/templates/index_base.html:294 #: rhodecode/templates/admin/repos/repos.html:97 -#: rhodecode/templates/admin/users/user_edit_my_account.html:206 +#: rhodecode/templates/admin/users/user_edit_my_account.html:205 #: rhodecode/templates/admin/users/users.html:110 #: rhodecode/templates/bookmarks/bookmarks.html:63 -#: rhodecode/templates/branches/branches.html:80 -#: rhodecode/templates/journal/journal.html:214 -#: rhodecode/templates/tags/tags.html:63 +#: rhodecode/templates/branches/branches.html:79 +#: rhodecode/templates/journal/journal.html:196 +#: rhodecode/templates/tags/tags.html:80 msgid "Data error." msgstr "数据错误" -#: rhodecode/templates/index_base.html:202 +#: rhodecode/templates/index_base.html:211 +#: rhodecode/templates/index_base.html:295 #: rhodecode/templates/admin/repos/repos.html:98 -#: rhodecode/templates/admin/users/user_edit_my_account.html:207 +#: rhodecode/templates/admin/users/user_edit_my_account.html:206 #: rhodecode/templates/admin/users/users.html:111 #: rhodecode/templates/bookmarks/bookmarks.html:64 -#: rhodecode/templates/branches/branches.html:81 -#: rhodecode/templates/journal/journal.html:215 -#: rhodecode/templates/tags/tags.html:64 +#: rhodecode/templates/branches/branches.html:80 +#: rhodecode/templates/journal/journal.html:54 +#: rhodecode/templates/journal/journal.html:197 +#: rhodecode/templates/tags/tags.html:81 msgid "Loading..." msgstr "载入中..." @@ -1449,7 +1483,7 @@ msgstr "登录到" #: rhodecode/templates/admin/users/user_edit.html:50 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:26 #: rhodecode/templates/base/base.html:83 -#: rhodecode/templates/summary/summary.html:122 +#: rhodecode/templates/summary/summary.html:131 msgid "Username" msgstr "帐号" @@ -1506,23 +1540,23 @@ msgstr "确认密码" #: rhodecode/templates/register.html:47 #: rhodecode/templates/admin/users/user_add.html:59 -#: rhodecode/templates/admin/users/user_edit.html:86 +#: rhodecode/templates/admin/users/user_edit.html:90 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:53 msgid "First Name" msgstr "名" #: rhodecode/templates/register.html:56 #: rhodecode/templates/admin/users/user_add.html:68 -#: rhodecode/templates/admin/users/user_edit.html:95 +#: rhodecode/templates/admin/users/user_edit.html:99 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:62 msgid "Last Name" msgstr "姓" #: rhodecode/templates/register.html:65 #: rhodecode/templates/admin/users/user_add.html:77 -#: rhodecode/templates/admin/users/user_edit.html:104 +#: rhodecode/templates/admin/users/user_edit.html:108 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:71 -#: rhodecode/templates/summary/summary.html:124 +#: rhodecode/templates/summary/summary.html:133 msgid "Email" msgstr "电子邮件" @@ -1535,6 +1569,7 @@ msgid "Your account must wait for activa msgstr "管理员审核后,你注册的帐号将被启用" #: rhodecode/templates/repo_switcher_list.html:11 +#: rhodecode/templates/admin/defaults/defaults.html:44 #: rhodecode/templates/admin/repos/repo_add_base.html:65 #: rhodecode/templates/admin/repos/repo_edit.html:85 #: rhodecode/templates/settings/repo_settings.html:76 @@ -1562,7 +1597,7 @@ msgid "tags" msgstr "标签" #: rhodecode/templates/switch_to_list.html:22 -#: rhodecode/templates/tags/tags_data.html:33 +#: rhodecode/templates/tags/tags_data.html:38 msgid "There are no tags yet" msgstr "没有任何标签" @@ -1585,35 +1620,108 @@ msgstr "系统日志" #: rhodecode/templates/admin/repos/repos.html:74 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:9 -#: rhodecode/templates/journal/journal.html:61 -#: rhodecode/templates/journal/journal.html:62 +#: rhodecode/templates/journal/journal_page_repos.html:9 +#: rhodecode/templates/journal/journal_page_repos.html:10 msgid "Action" msgstr "操作" #: rhodecode/templates/admin/admin_log.html:7 +#: rhodecode/templates/admin/permissions/permissions.html:41 msgid "Repository" msgstr "版本库" #: rhodecode/templates/admin/admin_log.html:8 #: rhodecode/templates/bookmarks/bookmarks.html:37 #: rhodecode/templates/bookmarks/bookmarks_data.html:7 -#: rhodecode/templates/branches/branches.html:52 -#: rhodecode/templates/tags/tags.html:37 +#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches_data.html:7 +#: rhodecode/templates/tags/tags.html:52 #: rhodecode/templates/tags/tags_data.html:7 msgid "Date" msgstr "日期" #: rhodecode/templates/admin/admin_log.html:9 msgid "From IP" -msgstr "来源 IP" - -#: rhodecode/templates/admin/admin_log.html:53 +msgstr "来源IP" + +#: rhodecode/templates/admin/admin_log.html:57 msgid "No actions yet" msgstr "无操作" +#: rhodecode/templates/admin/defaults/defaults.html:5 +#: rhodecode/templates/admin/defaults/defaults.html:25 +#, fuzzy +msgid "Repositories defaults" +msgstr "版本库组" + +#: rhodecode/templates/admin/defaults/defaults.html:11 +#, fuzzy +msgid "Defaults" +msgstr "默认" + +#: rhodecode/templates/admin/defaults/defaults.html:35 +#: rhodecode/templates/admin/repos/repo_add_base.html:38 +#: rhodecode/templates/admin/repos/repo_edit.html:58 +msgid "Type" +msgstr "类型" + +#: rhodecode/templates/admin/defaults/defaults.html:48 +#: rhodecode/templates/admin/repos/repo_add_base.html:69 +#: rhodecode/templates/admin/repos/repo_edit.html:89 +#: rhodecode/templates/forks/fork.html:72 +#: rhodecode/templates/settings/repo_settings.html:80 +msgid "" +"Private repositories are only visible to people explicitly added as " +"collaborators." +msgstr "私有版本库只对成员可见。" + +#: rhodecode/templates/admin/defaults/defaults.html:55 +#: rhodecode/templates/admin/repos/repo_edit.html:94 +msgid "Enable statistics" +msgstr "启用统计" + +#: rhodecode/templates/admin/defaults/defaults.html:59 +#: rhodecode/templates/admin/repos/repo_edit.html:98 +msgid "Enable statistics window on summary page." +msgstr "启用概况页的统计窗口" + +#: rhodecode/templates/admin/defaults/defaults.html:65 +#: rhodecode/templates/admin/repos/repo_edit.html:103 +msgid "Enable downloads" +msgstr "启用下载" + +#: rhodecode/templates/admin/defaults/defaults.html:69 +#: rhodecode/templates/admin/repos/repo_edit.html:107 +msgid "Enable download menu on summary page." +msgstr "启用概况页的下载菜单" + +#: rhodecode/templates/admin/defaults/defaults.html:75 +#: rhodecode/templates/admin/repos/repo_edit.html:112 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66 +msgid "Enable locking" +msgstr "启用锁定" + +#: rhodecode/templates/admin/defaults/defaults.html:79 +#: rhodecode/templates/admin/repos/repo_edit.html:116 +msgid "Enable lock-by-pulling on repository." +msgstr "启用版本库的拉取锁定" + +#: rhodecode/templates/admin/defaults/defaults.html:84 +#: rhodecode/templates/admin/ldap/ldap.html:89 +#: rhodecode/templates/admin/repos/repo_edit.html:141 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74 +#: rhodecode/templates/admin/settings/hooks.html:73 +#: rhodecode/templates/admin/users/user_edit.html:133 +#: rhodecode/templates/admin/users/user_edit.html:178 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:135 +#: rhodecode/templates/settings/repo_settings.html:93 +msgid "Save" +msgstr "保存" + #: rhodecode/templates/admin/ldap/ldap.html:5 msgid "LDAP administration" -msgstr "LDAP 管理员" +msgstr "LDAP管理员" #: rhodecode/templates/admin/ldap/ldap.html:11 msgid "Ldap" @@ -1625,7 +1733,7 @@ msgstr "连接设置" #: rhodecode/templates/admin/ldap/ldap.html:30 msgid "Enable LDAP" -msgstr "启用 LDAP" +msgstr "启用LDAP" #: rhodecode/templates/admin/ldap/ldap.html:34 msgid "Host" @@ -1657,11 +1765,11 @@ msgstr "Base DN" #: rhodecode/templates/admin/ldap/ldap.html:63 msgid "LDAP Filter" -msgstr "LDAP 过滤器" +msgstr "LDAP过滤器" #: rhodecode/templates/admin/ldap/ldap.html:67 msgid "LDAP Search Scope" -msgstr "LDAP 搜索范围" +msgstr "LDAP搜索范围" #: rhodecode/templates/admin/ldap/ldap.html:70 msgid "Attribute mappings" @@ -1683,18 +1791,6 @@ msgstr "姓" msgid "E-mail Attribute" msgstr "电子邮件属性" -#: rhodecode/templates/admin/ldap/ldap.html:89 -#: rhodecode/templates/admin/repos/repo_edit.html:141 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74 -#: rhodecode/templates/admin/settings/hooks.html:73 -#: rhodecode/templates/admin/users/user_edit.html:129 -#: rhodecode/templates/admin/users/user_edit.html:174 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79 -#: rhodecode/templates/admin/users_groups/users_group_edit.html:135 -#: rhodecode/templates/settings/repo_settings.html:93 -msgid "Save" -msgstr "保存" - #: rhodecode/templates/admin/notifications/notifications.html:5 #: rhodecode/templates/admin/notifications/notifications.html:9 msgid "My Notifications" @@ -1709,8 +1805,8 @@ msgid "Comments" msgstr "评论" #: rhodecode/templates/admin/notifications/notifications.html:31 -#: rhodecode/templates/base/base.html:263 -#: rhodecode/templates/base/base.html:265 +#: rhodecode/templates/base/base.html:267 +#: rhodecode/templates/base/base.html:269 msgid "Pull requests" msgstr "拉取请求" @@ -1738,7 +1834,7 @@ msgstr "权限管理" #: rhodecode/templates/admin/permissions/permissions.html:11 #: rhodecode/templates/admin/repos/repo_edit.html:134 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58 -#: rhodecode/templates/admin/users/user_edit.html:139 +#: rhodecode/templates/admin/users/user_edit.html:143 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100 #: rhodecode/templates/settings/repo_settings.html:86 msgid "Permissions" @@ -1752,36 +1848,49 @@ msgstr "默认权限" 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 "" -"所有版本库的默认权限将被重置到选择的权限,所有版本库的自定义权限将被丢弃" +"permission, note that all custom default permission on repositories will " +"be lost" +msgstr "所有版本库的默认权限将被重置到选择的权限,所有版本库的自定义权限将被丢弃" #: rhodecode/templates/admin/permissions/permissions.html:50 +#: rhodecode/templates/admin/permissions/permissions.html:63 msgid "overwrite existing settings" msgstr "覆盖已有设置" #: rhodecode/templates/admin/permissions/permissions.html:55 +#: rhodecode/templates/admin/repos/repo_add_base.html:29 +#: rhodecode/templates/admin/repos/repo_edit.html:49 +#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 +#: rhodecode/templates/forks/fork.html:50 +#: rhodecode/templates/settings/repo_settings.html:48 +msgid "Repository group" +msgstr "版本库组" + +#: rhodecode/templates/admin/permissions/permissions.html:62 +#, fuzzy +msgid "" +"All default permissions on each repository group will be reset to choosen" +" permission, note that all custom default permission on repositories " +"group will be lost" +msgstr "所有版本库的默认权限将被重置到选择的权限,所有版本库的自定义权限将被丢弃" + +#: rhodecode/templates/admin/permissions/permissions.html:69 msgid "Registration" msgstr "注册" -#: rhodecode/templates/admin/permissions/permissions.html:63 +#: rhodecode/templates/admin/permissions/permissions.html:77 msgid "Repository creation" msgstr "建立版本库" -#: rhodecode/templates/admin/permissions/permissions.html:71 +#: rhodecode/templates/admin/permissions/permissions.html:85 msgid "Repository forking" msgstr "版本库复刻" -#: rhodecode/templates/admin/permissions/permissions.html:78 -#: rhodecode/templates/admin/repos/repo_edit.html:255 +#: rhodecode/templates/admin/permissions/permissions.html:92 +#: rhodecode/templates/admin/repos/repo_edit.html:264 msgid "set" msgstr "设置" @@ -1801,8 +1910,8 @@ msgid "add new" msgstr "新建" #: rhodecode/templates/admin/repos/repo_add_base.html:20 -#: rhodecode/templates/summary/summary.html:95 -#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:104 +#: rhodecode/templates/summary/summary.html:105 msgid "Clone from" msgstr "克隆自" @@ -1810,26 +1919,13 @@ msgstr "克隆自" #: rhodecode/templates/admin/repos/repo_edit.html:44 #: rhodecode/templates/settings/repo_settings.html:43 msgid "Optional http[s] url from which repository should be cloned." -msgstr "可选的,指定版本库应该从哪个 http[s] 地址克隆。" - -#: rhodecode/templates/admin/repos/repo_add_base.html:29 -#: rhodecode/templates/admin/repos/repo_edit.html:49 -#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 -#: rhodecode/templates/forks/fork.html:50 -#: rhodecode/templates/settings/repo_settings.html:48 -msgid "Repository group" -msgstr "版本库组" +msgstr "可选的,指定版本库应该从哪个http[s]地址克隆。" #: rhodecode/templates/admin/repos/repo_add_base.html:33 #: rhodecode/templates/forks/fork.html:54 msgid "Optionaly select a group to put this repository into." msgstr "可选的,选择一个组将版本库放到其中" -#: rhodecode/templates/admin/repos/repo_add_base.html:38 -#: rhodecode/templates/admin/repos/repo_edit.html:58 -msgid "Type" -msgstr "类型" - #: rhodecode/templates/admin/repos/repo_add_base.html:42 msgid "Type of repository to create." msgstr "要创建的版本库类型" @@ -1846,24 +1942,14 @@ msgstr "默认修订" #: rhodecode/templates/forks/fork.html:45 #: rhodecode/templates/settings/repo_settings.html:61 msgid "Default revision for files page, downloads, whoosh and readme" -msgstr "文件浏览、下载、whoosh和readme的默认修订版本" +msgstr "文件浏览、下载、whoosh和README的默认修订版本" #: rhodecode/templates/admin/repos/repo_add_base.html:60 #: rhodecode/templates/admin/repos/repo_edit.html:79 #: rhodecode/templates/forks/fork.html:63 #: rhodecode/templates/settings/repo_settings.html:70 -msgid "" -"Keep it short and to the point. Use a README file for longer descriptions." -msgstr "保持简短。用 README 文件来写更长的描述。" - -#: rhodecode/templates/admin/repos/repo_add_base.html:69 -#: rhodecode/templates/admin/repos/repo_edit.html:89 -#: rhodecode/templates/forks/fork.html:72 -#: rhodecode/templates/settings/repo_settings.html:80 -msgid "" -"Private repositories are only visible to people explicitly added as " -"collaborators." -msgstr "私有版本库只对成员可见。" +msgid "Keep it short and to the point. Use a README file for longer descriptions." +msgstr "保持简短。用README文件来写更长的描述。" #: rhodecode/templates/admin/repos/repo_add_base.html:73 msgid "add" @@ -1879,12 +1965,14 @@ msgstr "编辑版本库" #: rhodecode/templates/admin/repos/repo_edit.html:13 #: rhodecode/templates/admin/users/user_edit.html:13 -#: rhodecode/templates/admin/users/user_edit.html:224 -#: rhodecode/templates/admin/users/user_edit.html:226 +#: rhodecode/templates/admin/users/user_edit.html:228 +#: rhodecode/templates/admin/users/user_edit.html:230 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28 #: rhodecode/templates/admin/users_groups/users_group_edit.html:13 -#: rhodecode/templates/files/files_source.html:44 -#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:207 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:209 +#: rhodecode/templates/files/files_source.html:29 +#: rhodecode/templates/journal/journal_page_repos.html:29 msgid "edit" msgstr "编辑" @@ -1898,31 +1986,6 @@ msgstr "克隆地址" msgid "Optional select a group to put this repository into." msgstr "可选的,选择一个组将版本库放到其中" -#: rhodecode/templates/admin/repos/repo_edit.html:94 -msgid "Enable statistics" -msgstr "启用统计" - -#: rhodecode/templates/admin/repos/repo_edit.html:98 -msgid "Enable statistics window on summary page." -msgstr "启用概况页的统计窗口" - -#: rhodecode/templates/admin/repos/repo_edit.html:103 -msgid "Enable downloads" -msgstr "启用下载" - -#: rhodecode/templates/admin/repos/repo_edit.html:107 -msgid "Enable download menu on summary page." -msgstr "启用概况页的下载菜单" - -#: rhodecode/templates/admin/repos/repo_edit.html:112 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66 -msgid "Enable locking" -msgstr "启用锁定" - -#: rhodecode/templates/admin/repos/repo_edit.html:116 -msgid "Enable lock-by-pulling on repository." -msgstr "启用版本库的拉取锁定" - #: rhodecode/templates/admin/repos/repo_edit.html:126 msgid "Change owner of this repository." msgstr "修改这个版本库的所有者" @@ -1930,16 +1993,16 @@ msgstr "修改这个版本库的所有者" #: rhodecode/templates/admin/repos/repo_edit.html:142 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:75 #: rhodecode/templates/admin/settings/settings.html:113 -#: rhodecode/templates/admin/settings/settings.html:168 -#: rhodecode/templates/admin/settings/settings.html:258 -#: rhodecode/templates/admin/users/user_edit.html:130 -#: rhodecode/templates/admin/users/user_edit.html:175 -#: rhodecode/templates/admin/users/user_edit.html:278 +#: rhodecode/templates/admin/settings/settings.html:179 +#: rhodecode/templates/admin/settings/settings.html:269 +#: rhodecode/templates/admin/users/user_edit.html:134 +#: rhodecode/templates/admin/users/user_edit.html:179 +#: rhodecode/templates/admin/users/user_edit.html:282 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:80 #: rhodecode/templates/admin/users_groups/users_group_edit.html:136 #: rhodecode/templates/files/files_add.html:82 #: rhodecode/templates/files/files_edit.html:68 -#: rhodecode/templates/pullrequests/pullrequest.html:122 +#: rhodecode/templates/pullrequests/pullrequest.html:124 #: rhodecode/templates/settings/repo_settings.html:94 msgid "Reset" msgstr "重置" @@ -1994,94 +2057,108 @@ msgstr "确认清除版本库缓存" #: rhodecode/templates/admin/repos/repo_edit.html:193 msgid "" -"Manually invalidate cache for this repository. On first access repository " -"will be cached again" +"Manually invalidate cache for this repository. On first access repository" +" will be cached again" msgstr "手动清除版本库缓存。之后第一次访问的时候将重建缓存" #: rhodecode/templates/admin/repos/repo_edit.html:198 msgid "List of cached values" -msgstr "缓存数据列表" - -#: rhodecode/templates/admin/repos/repo_edit.html:209 -#: rhodecode/templates/base/base.html:327 -#: rhodecode/templates/base/base.html:329 +msgstr "缓存值列表" + +#: rhodecode/templates/admin/repos/repo_edit.html:201 +msgid "Prefix" +msgstr "前缀" + +#: rhodecode/templates/admin/repos/repo_edit.html:202 +msgid "Key" +msgstr "键" + +#: rhodecode/templates/admin/repos/repo_edit.html:203 +#: rhodecode/templates/admin/users/user_add.html:86 +#: rhodecode/templates/admin/users/user_edit.html:117 +#: 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/repos/repo_edit.html:218 #: rhodecode/templates/base/base.html:331 +#: rhodecode/templates/base/base.html:333 +#: rhodecode/templates/base/base.html:335 msgid "Public journal" msgstr "公共日志" -#: rhodecode/templates/admin/repos/repo_edit.html:215 +#: rhodecode/templates/admin/repos/repo_edit.html:224 msgid "Remove from public journal" msgstr "从公共日志删除" -#: rhodecode/templates/admin/repos/repo_edit.html:217 +#: rhodecode/templates/admin/repos/repo_edit.html:226 msgid "Add to public journal" msgstr "添加到公共日志" -#: rhodecode/templates/admin/repos/repo_edit.html:222 +#: rhodecode/templates/admin/repos/repo_edit.html:231 msgid "" -"All actions made on this repository will be accessible to everyone in public " -"journal" +"All actions made on this repository will be accessible to everyone in " +"public journal" msgstr "任何人都可以在公共日志上看到这个版本库上的所有动作" -#: rhodecode/templates/admin/repos/repo_edit.html:229 +#: rhodecode/templates/admin/repos/repo_edit.html:238 msgid "Locking" msgstr "锁定" -#: rhodecode/templates/admin/repos/repo_edit.html:234 +#: rhodecode/templates/admin/repos/repo_edit.html:243 msgid "Unlock locked repo" msgstr "解锁版本库" -#: rhodecode/templates/admin/repos/repo_edit.html:234 +#: rhodecode/templates/admin/repos/repo_edit.html:243 msgid "Confirm to unlock repository" msgstr "确认解锁版本库" -#: rhodecode/templates/admin/repos/repo_edit.html:237 +#: rhodecode/templates/admin/repos/repo_edit.html:246 msgid "lock repo" msgstr "锁定版本库" -#: rhodecode/templates/admin/repos/repo_edit.html:237 +#: rhodecode/templates/admin/repos/repo_edit.html:246 msgid "Confirm to lock repository" msgstr "确认锁定版本库" -#: rhodecode/templates/admin/repos/repo_edit.html:238 +#: rhodecode/templates/admin/repos/repo_edit.html:247 msgid "Repository is not locked" msgstr "版本库未锁定" -#: rhodecode/templates/admin/repos/repo_edit.html:243 -msgid "" -"Force locking on repository. Works only when anonymous access is disabled" +#: rhodecode/templates/admin/repos/repo_edit.html:252 +msgid "Force locking on repository. Works only when anonymous access is disabled" msgstr "强制锁定版本库。只有在禁止匿名访问时候才有效" -#: rhodecode/templates/admin/repos/repo_edit.html:250 +#: rhodecode/templates/admin/repos/repo_edit.html:259 msgid "Set as fork of" msgstr "设置复刻自" -#: rhodecode/templates/admin/repos/repo_edit.html:259 +#: rhodecode/templates/admin/repos/repo_edit.html:268 msgid "Manually set this repository as a fork of another from the list" msgstr "从列表中手动设置这个版本库复刻自另一版本库" -#: rhodecode/templates/admin/repos/repo_edit.html:265 +#: rhodecode/templates/admin/repos/repo_edit.html:274 #: rhodecode/templates/changeset/changeset_file_comment.html:26 msgid "Delete" msgstr "删除" -#: rhodecode/templates/admin/repos/repo_edit.html:269 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "Remove this repository" msgstr "删除版本库" -#: rhodecode/templates/admin/repos/repo_edit.html:269 -#: rhodecode/templates/journal/journal.html:84 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "Confirm to delete this repository" msgstr "确认删除版本库" -#: rhodecode/templates/admin/repos/repo_edit.html:273 +#: rhodecode/templates/admin/repos/repo_edit.html:282 msgid "" -"This repository will be renamed in a special way in order to be unaccesible " -"for RhodeCode and VCS systems.\n" -" If you need fully delete it from filesystem please " -"do it manually" +"This repository will be renamed in a special way in order to be " +"unaccesible for RhodeCode and VCS systems.\n" +" If you need fully delete it from filesystem " +"please do it manually" msgstr "" -"这个版本库将以特殊的方式重命名这样 RhodeCode 和版本控制系统将不能访问它。\n" +"这个版本库将以特殊的方式重命名这样RhodeCode和版本控制系统将不能访问它。\n" " 如果需要从文件系统完全删除,你需要手动操作" #: rhodecode/templates/admin/repos/repo_edit_perms.html:3 @@ -2102,7 +2179,7 @@ msgstr "写" #: rhodecode/templates/admin/repos/repo_edit_perms.html:6 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6 #: rhodecode/templates/admin/users/users.html:85 -#: rhodecode/templates/base/base.html:226 +#: rhodecode/templates/base/base.html:229 msgid "admin" msgstr "管理" @@ -2113,8 +2190,8 @@ msgstr "成员" #: rhodecode/templates/admin/repos/repo_edit_perms.html:16 #: rhodecode/templates/data_table/_dt_elements.html:67 -#: rhodecode/templates/journal/journal.html:132 -#: rhodecode/templates/summary/summary.html:76 +#: rhodecode/templates/journal/journal.html:87 +#: rhodecode/templates/summary/summary.html:85 msgid "private repository" msgstr "私有版本库" @@ -2158,13 +2235,13 @@ msgstr "应用到成员" msgid "" "Set or revoke permission to all children of that group, including " "repositories and other groups" -msgstr "授予或者撤销权限所有组成员,包括子组和子版本库" +msgstr "设置或者撤销该组所有成员的权限,包括版本库和其他组" #: rhodecode/templates/admin/repos_groups/repos_groups.html:9 #: rhodecode/templates/base/base.html:122 -#: rhodecode/templates/base/base.html:309 -#: rhodecode/templates/base/base.html:311 #: rhodecode/templates/base/base.html:313 +#: rhodecode/templates/base/base.html:315 +#: rhodecode/templates/base/base.html:317 #: rhodecode/templates/bookmarks/bookmarks.html:11 #: rhodecode/templates/branches/branches.html:10 #: rhodecode/templates/changelog/changelog.html:10 @@ -2176,8 +2253,7 @@ msgstr "授予或者撤销权限所有组成员,包括子组和子版本库" #: rhodecode/templates/files/files_add.html:15 #: rhodecode/templates/files/files_edit.html:15 #: rhodecode/templates/followers/followers.html:9 -#: rhodecode/templates/forks/fork.html:9 -#: rhodecode/templates/forks/forks.html:9 +#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9 #: rhodecode/templates/pullrequests/pullrequest.html:8 #: rhodecode/templates/pullrequests/pullrequest_show.html:8 #: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 @@ -2214,7 +2290,7 @@ msgstr "上级组" #: rhodecode/templates/admin/users/user_add.html:94 #: rhodecode/templates/admin/users_groups/users_group_add.html:49 #: rhodecode/templates/admin/users_groups/users_group_edit.html:90 -#: rhodecode/templates/pullrequests/pullrequest_show.html:117 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 msgid "save" msgstr "保存" @@ -2228,8 +2304,8 @@ msgstr "编辑版本库组" #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70 msgid "" -"Enable lock-by-pulling on group. This option will be applied to all other " -"groups and repositories inside" +"Enable lock-by-pulling on group. This option will be applied to all other" +" groups and repositories inside" msgstr "启用组的拉取锁定。这个选项将应用到组内的其他组和版本库" #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5 @@ -2250,20 +2326,21 @@ msgstr "顶层版本库数量" msgid "action" msgstr "操作" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54 -#: rhodecode/templates/admin/users/user_edit.html:255 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 +#: rhodecode/templates/admin/users/user_edit.html:259 #: rhodecode/templates/admin/users_groups/users_groups.html:44 #: rhodecode/templates/data_table/_dt_elements.html:7 -#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:121 msgid "delete" msgstr "删除" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 #, python-format -msgid "Confirm to delete this group: %s" -msgstr "确认删除该版本库组: %s" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:62 +msgid "Confirm to delete this group: %s with %s repository" +msgid_plural "Confirm to delete this group: %s with %s repositories" +msgstr[0] "确认删除这个版本库组:%s包含%s个版本库" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63 msgid "There are no repositories groups yet" msgstr "没有版本库组" @@ -2304,11 +2381,10 @@ msgstr "重新扫描选项" #: rhodecode/templates/admin/settings/settings.html:38 msgid "" -"In case a repository was deleted from filesystem and there are leftovers in " -"the database check this option to scan obsolete data in database and remove " -"it." -msgstr "" -"如果版本库已经从文件系统删除,但数据库仍然有遗留信息,请勾选该项进行清理" +"In case a repository was deleted from filesystem and there are leftovers " +"in the database check this option to scan obsolete data in database and " +"remove it." +msgstr "如果版本库已经从文件系统删除,但数据库仍然有遗留信息,请勾选该项进行清理" #: rhodecode/templates/admin/settings/settings.html:39 msgid "destroy old data" @@ -2316,10 +2392,9 @@ msgstr "清理旧数据" #: rhodecode/templates/admin/settings/settings.html:41 msgid "" -"Rescan repositories location for new repositories. Also deletes obsolete if " -"`destroy` flag is checked " -msgstr "" -"重新扫描版本库路径以发现新版本库。 同时删除过时的,如果设置有 `destroy` 标志" +"Rescan repositories location for new repositories. Also deletes obsolete " +"if `destroy` flag is checked " +msgstr "重新扫描版本库路径以发现新版本库。 同时删除过时的,如果设置有 `destroy` 标志" #: rhodecode/templates/admin/settings/settings.html:46 msgid "Rescan repositories" @@ -2327,7 +2402,7 @@ msgstr "重新扫描版本库" #: rhodecode/templates/admin/settings/settings.html:52 msgid "Whoosh indexing" -msgstr "Whoosh 索引" +msgstr "Whoosh索引" #: rhodecode/templates/admin/settings/settings.html:60 msgid "index build option" @@ -2358,8 +2433,8 @@ msgid "GA code" msgstr "GA code" #: rhodecode/templates/admin/settings/settings.html:112 -#: rhodecode/templates/admin/settings/settings.html:167 -#: rhodecode/templates/admin/settings/settings.html:257 +#: rhodecode/templates/admin/settings/settings.html:178 +#: rhodecode/templates/admin/settings/settings.html:268 msgid "Save settings" msgstr "保存设置" @@ -2367,127 +2442,133 @@ msgstr "保存设置" msgid "Visualisation settings" msgstr "可视化设置" -#: rhodecode/templates/admin/settings/settings.html:128 +#: rhodecode/templates/admin/settings/settings.html:127 +msgid "General" +msgstr "通用" + +#: rhodecode/templates/admin/settings/settings.html:132 +msgid "Use lightweight dashboard" +msgstr "使用轻量的控制面板" + +#: rhodecode/templates/admin/settings/settings.html:139 msgid "Icons" msgstr "图标" -#: rhodecode/templates/admin/settings/settings.html:133 -msgid "Show public repo icon on repositories" -msgstr "显示公共版本库图标" - -#: rhodecode/templates/admin/settings/settings.html:137 -msgid "Show private repo icon on repositories" -msgstr "显示私有版本库图标" - #: rhodecode/templates/admin/settings/settings.html:144 +msgid "Show public repo icon on repositories" +msgstr "显示公共版本库图标" + +#: rhodecode/templates/admin/settings/settings.html:148 +msgid "Show private repo icon on repositories" +msgstr "显示私有版本库图标" + +#: rhodecode/templates/admin/settings/settings.html:155 msgid "Meta-Tagging" msgstr "元标记" -#: rhodecode/templates/admin/settings/settings.html:149 +#: rhodecode/templates/admin/settings/settings.html:160 msgid "Stylify recognised metatags:" msgstr "样式化识别的元标记" -#: rhodecode/templates/admin/settings/settings.html:176 +#: rhodecode/templates/admin/settings/settings.html:187 msgid "VCS settings" msgstr "版本控制系统设置" -#: rhodecode/templates/admin/settings/settings.html:185 +#: rhodecode/templates/admin/settings/settings.html:196 msgid "Web" msgstr "网络" -#: rhodecode/templates/admin/settings/settings.html:190 +#: rhodecode/templates/admin/settings/settings.html:201 msgid "require ssl for vcs operations" -msgstr "要求使用 SSL进行版本控制系统操作" - -#: rhodecode/templates/admin/settings/settings.html:192 +msgstr "要求使用SSL进行版本控制系统操作" + +#: rhodecode/templates/admin/settings/settings.html:203 msgid "" -"RhodeCode will require SSL for pushing or pulling. If SSL is missing it will " -"return HTTP Error 406: Not Acceptable" -msgstr "" -"勾选后 RhodeCode 将要求使用 SSL 进行推送和拉取。如果没有使用 SSL 将返回 HTTP " -"406错误:Not Acceptable" - -#: rhodecode/templates/admin/settings/settings.html:198 +"RhodeCode will require SSL for pushing or pulling. If SSL is missing it " +"will return HTTP Error 406: Not Acceptable" +msgstr "勾选后RhodeCode将要求使用SSL进行推送和拉取。如果没有使用SSL将返回HTTP 406错误:Not Acceptable" + +#: rhodecode/templates/admin/settings/settings.html:209 msgid "Hooks" msgstr "钩子" -#: rhodecode/templates/admin/settings/settings.html:203 +#: rhodecode/templates/admin/settings/settings.html:214 msgid "Update repository after push (hg update)" msgstr "推送后更新版本库(hg update)" -#: rhodecode/templates/admin/settings/settings.html:207 +#: rhodecode/templates/admin/settings/settings.html:218 msgid "Show repository size after push" msgstr "推送后显示版本库大小" -#: rhodecode/templates/admin/settings/settings.html:211 +#: rhodecode/templates/admin/settings/settings.html:222 msgid "Log user push commands" msgstr "记录用户推送命令" -#: rhodecode/templates/admin/settings/settings.html:215 +#: rhodecode/templates/admin/settings/settings.html:226 msgid "Log user pull commands" msgstr "记录用户拉取命令" -#: rhodecode/templates/admin/settings/settings.html:219 +#: rhodecode/templates/admin/settings/settings.html:230 msgid "advanced setup" msgstr "高级设置" -#: rhodecode/templates/admin/settings/settings.html:224 +#: rhodecode/templates/admin/settings/settings.html:235 msgid "Mercurial Extensions" -msgstr "Mercurial 扩展" - -#: rhodecode/templates/admin/settings/settings.html:229 +msgstr "Mercurial扩展" + +#: rhodecode/templates/admin/settings/settings.html:240 msgid "largefiles extensions" msgstr "大文件扩展" -#: rhodecode/templates/admin/settings/settings.html:233 +#: rhodecode/templates/admin/settings/settings.html:244 msgid "hgsubversion extensions" -msgstr "hgsubversion 扩展" - -#: rhodecode/templates/admin/settings/settings.html:235 +msgstr "hgsubversion扩展" + +#: rhodecode/templates/admin/settings/settings.html:246 msgid "" "Requires hgsubversion library installed. Allows clonning from svn remote " "locations" -msgstr " 允许从远程 svn 地址克隆。需要安装 hgsubversion 库" - -#: rhodecode/templates/admin/settings/settings.html:245 +msgstr " 允许从远程svn地址克隆。需要安装hgsubversion库" + +#: rhodecode/templates/admin/settings/settings.html:256 msgid "Repositories location" msgstr "版本库路径" -#: rhodecode/templates/admin/settings/settings.html:250 +#: rhodecode/templates/admin/settings/settings.html:261 msgid "" "This a crucial application setting. If you are really sure you need to " -"change this, you must restart application in order to make this setting take " -"effect. Click this label to unlock." +"change this, you must restart application in order to make this setting " +"take effect. Click this label to unlock." msgstr "这是一个关键设置。如果确认修改该项设置,请重启服务以便设置生效。" -#: rhodecode/templates/admin/settings/settings.html:251 -#: rhodecode/templates/base/base.html:218 +#: rhodecode/templates/admin/settings/settings.html:262 +#: rhodecode/templates/base/base.html:221 msgid "unlock" msgstr "解锁" -#: rhodecode/templates/admin/settings/settings.html:252 +#: rhodecode/templates/admin/settings/settings.html:263 msgid "" -"Location where repositories are stored. After changing this value a restart, " -"and rescan is required" +"Location where repositories are stored. After changing this value a " +"restart, and rescan is required" msgstr "版本库存储路径。 修改后需要重启和重新扫描" -#: rhodecode/templates/admin/settings/settings.html:272 +#: rhodecode/templates/admin/settings/settings.html:283 msgid "Test Email" msgstr "测试邮件" -#: rhodecode/templates/admin/settings/settings.html:280 +#: rhodecode/templates/admin/settings/settings.html:291 msgid "Email to" msgstr "发送到" -#: rhodecode/templates/admin/settings/settings.html:288 +#: rhodecode/templates/admin/settings/settings.html:299 msgid "Send" msgstr "发送" -#: rhodecode/templates/admin/settings/settings.html:294 +#: rhodecode/templates/admin/settings/settings.html:305 msgid "System Info and Packages" msgstr "系统和软件包信息" -#: rhodecode/templates/admin/settings/settings.html:297 +#: rhodecode/templates/admin/settings/settings.html:308 msgid "show" msgstr "显示" @@ -2508,13 +2589,6 @@ msgstr "添加新用户" msgid "Password confirmation" msgstr "确认密码" -#: rhodecode/templates/admin/users/user_add.html:86 -#: rhodecode/templates/admin/users/user_edit.html:113 -#: 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 "编辑用户" @@ -2532,75 +2606,77 @@ msgstr "使用中" #: rhodecode/templates/admin/users/user_edit.html:43 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:20 msgid "API key" -msgstr "API 密钥" - -#: rhodecode/templates/admin/users/user_edit.html:59 +msgstr "API密钥" + +#: rhodecode/templates/admin/users/user_edit.html:63 msgid "LDAP DN" msgstr "LDAP DN" -#: rhodecode/templates/admin/users/user_edit.html:68 +#: rhodecode/templates/admin/users/user_edit.html:72 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:35 msgid "New password" msgstr "新密码" -#: rhodecode/templates/admin/users/user_edit.html:77 +#: rhodecode/templates/admin/users/user_edit.html:81 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 msgid "New password confirmation" msgstr "确认新密码" -#: rhodecode/templates/admin/users/user_edit.html:147 +#: rhodecode/templates/admin/users/user_edit.html:151 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108 msgid "Inherit default permissions" msgstr "继承默认权限" -#: rhodecode/templates/admin/users/user_edit.html:152 +#: rhodecode/templates/admin/users/user_edit.html:156 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113 #, python-format msgid "" "Select to inherit permissions from %s settings. With this selected below " "options does not have any action" -msgstr "勾选以从 %s 继承权限设置。 勾选后下面的选项将不起作用" - -#: rhodecode/templates/admin/users/user_edit.html:158 +msgstr "勾选以从%s继承权限设置。 勾选后下面的选项将不起作用" + +#: rhodecode/templates/admin/users/user_edit.html:162 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119 msgid "Create repositories" msgstr "创建版本库" -#: rhodecode/templates/admin/users/user_edit.html:166 +#: rhodecode/templates/admin/users/user_edit.html:170 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127 msgid "Fork repositories" msgstr "复刻版本库" -#: rhodecode/templates/admin/users/user_edit.html:186 +#: rhodecode/templates/admin/users/user_edit.html:190 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:22 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:39 msgid "Nothing here yet" msgstr "无条目" -#: rhodecode/templates/admin/users/user_edit.html:193 +#: rhodecode/templates/admin/users/user_edit.html:197 #: rhodecode/templates/admin/users/user_edit_my_account.html:60 -#: rhodecode/templates/admin/users/user_edit_my_account.html:218 +#: rhodecode/templates/admin/users/user_edit_my_account.html:217 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:185 msgid "Permission" msgstr "权限" -#: rhodecode/templates/admin/users/user_edit.html:194 +#: rhodecode/templates/admin/users/user_edit.html:198 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:186 msgid "Edit Permission" msgstr "编辑权限" -#: rhodecode/templates/admin/users/user_edit.html:243 +#: rhodecode/templates/admin/users/user_edit.html:247 msgid "Email addresses" msgstr "邮件地址" -#: rhodecode/templates/admin/users/user_edit.html:256 +#: rhodecode/templates/admin/users/user_edit.html:260 #, python-format msgid "Confirm to delete this email: %s" -msgstr "确认删除邮件地址: %s" - -#: rhodecode/templates/admin/users/user_edit.html:270 +msgstr "确认删除邮箱:%s" + +#: rhodecode/templates/admin/users/user_edit.html:274 msgid "New email address" -msgstr "增加邮件地址" - -#: rhodecode/templates/admin/users/user_edit.html:277 +msgstr "增加邮箱" + +#: rhodecode/templates/admin/users/user_edit.html:281 msgid "Add" msgstr "增加" @@ -2637,7 +2713,7 @@ msgstr "我创建的" #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10 #, python-format msgid "Pull request #%s opened on %s" -msgstr "拉取请求 #%s 创建于 %s" +msgstr "拉取请求#%s创建于%s" #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15 msgid "Confirm to delete this pull request" @@ -2651,36 +2727,38 @@ msgstr "我参与的" #: rhodecode/templates/pullrequests/pullrequest_show_all.html:30 #, python-format msgid "Pull request #%s opened by %s on %s" -msgstr "拉取请求 #%s 由 %s 创建于 %s" +msgstr "拉取请求#%s由%s创建于%s" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:7 #: rhodecode/templates/bookmarks/bookmarks.html:40 #: rhodecode/templates/bookmarks/bookmarks_data.html:9 -#: rhodecode/templates/branches/branches.html:55 -#: rhodecode/templates/journal/journal.html:60 -#: rhodecode/templates/tags/tags.html:40 +#: rhodecode/templates/branches/branches.html:54 +#: rhodecode/templates/branches/branches_data.html:9 +#: rhodecode/templates/journal/journal_page_repos.html:8 +#: rhodecode/templates/tags/tags.html:55 #: rhodecode/templates/tags/tags_data.html:9 msgid "Revision" msgstr "修订" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28 -#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/journal/journal_page_repos.html:29 msgid "private" msgstr "私有" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:31 #: rhodecode/templates/data_table/_dt_elements.html:7 +#: rhodecode/templates/journal/journal_page_repos.html:32 #, python-format msgid "Confirm to delete this repository: %s" -msgstr "确认删除版本库: %s" +msgstr "确认删除版本库:%s" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:38 -#: rhodecode/templates/journal/journal.html:94 +#: rhodecode/templates/journal/journal_page_repos.html:42 msgid "No repositories yet" msgstr "没有任何版本库" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40 -#: rhodecode/templates/journal/journal.html:96 +#: rhodecode/templates/journal/journal_page_repos.html:44 msgid "create one now" msgstr "创建一个" @@ -2689,7 +2767,7 @@ msgid "Users administration" msgstr "用户管理员" #: rhodecode/templates/admin/users/users.html:9 -#: rhodecode/templates/base/base.html:232 +#: rhodecode/templates/base/base.html:235 msgid "users" msgstr "用户" @@ -2719,7 +2797,7 @@ msgid "active" msgstr "启用" #: rhodecode/templates/admin/users/users.html:86 -#: rhodecode/templates/base/base.html:235 +#: rhodecode/templates/base/base.html:238 msgid "ldap" msgstr "LDAP" @@ -2768,6 +2846,18 @@ msgstr "添加全部项目" msgid "Group members" msgstr "拥护者成员" +#: rhodecode/templates/admin/users_groups/users_group_edit.html:163 +msgid "No members yet" +msgstr "还没有成员" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:171 +msgid "Permissions defined for this group" +msgstr "这个组的权限" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:178 +msgid "No permissions set yet" +msgstr "还未设置权限" + #: rhodecode/templates/admin/users_groups/users_groups.html:5 msgid "Users groups administration" msgstr "用户组管理" @@ -2788,11 +2878,11 @@ msgstr "成员" #: rhodecode/templates/admin/users_groups/users_groups.html:45 #, python-format msgid "Confirm to delete this users group: %s" -msgstr "确认删除该组: %s" +msgstr "确认删除该组:%s" #: rhodecode/templates/base/base.html:41 msgid "Submit a bug" -msgstr "提交 bug" +msgstr "提交bug" #: rhodecode/templates/base/base.html:77 msgid "Login to your account" @@ -2811,9 +2901,9 @@ msgid "Inbox" msgstr "收件箱" #: rhodecode/templates/base/base.html:123 -#: rhodecode/templates/base/base.html:318 -#: rhodecode/templates/base/base.html:320 #: rhodecode/templates/base/base.html:322 +#: rhodecode/templates/base/base.html:324 +#: rhodecode/templates/base/base.html:326 #: rhodecode/templates/journal/journal.html:4 #: rhodecode/templates/journal/journal.html:21 #: rhodecode/templates/journal/public_journal.html:4 @@ -2833,7 +2923,7 @@ msgid "Products" msgstr "产品" #: rhodecode/templates/base/base.html:152 -#: rhodecode/templates/base/base.html:182 +#: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47 msgid "loading..." msgstr "载入中..." @@ -2879,7 +2969,7 @@ msgstr "选项" #: rhodecode/templates/base/base.html:204 #: rhodecode/templates/base/base.html:206 msgid "repository settings" -msgstr "版本库设置" +msgstr "版本库选项" #: rhodecode/templates/base/base.html:210 #: rhodecode/templates/data_table/_dt_elements.html:80 @@ -2887,48 +2977,58 @@ msgstr "版本库设置" msgid "fork" msgstr "复刻" -#: rhodecode/templates/base/base.html:212 -#: rhodecode/templates/changelog/changelog.html:41 +#: rhodecode/templates/base/base.html:212 rhodecode/templates/base/root.html:50 +#: rhodecode/templates/changelog/changelog.html:43 msgid "Open new pull request" msgstr "新建拉取请求" -#: rhodecode/templates/base/base.html:214 +#: rhodecode/templates/base/base.html:215 +#: rhodecode/templates/forks/forks_data.html:21 +msgid "Compare fork" +msgstr "比较复刻" + +#: rhodecode/templates/base/base.html:217 msgid "search" msgstr "搜索" -#: rhodecode/templates/base/base.html:220 +#: rhodecode/templates/base/base.html:223 msgid "lock" msgstr "锁定" -#: rhodecode/templates/base/base.html:231 +#: rhodecode/templates/base/base.html:234 msgid "repositories groups" msgstr "版本库组" -#: rhodecode/templates/base/base.html:233 +#: rhodecode/templates/base/base.html:236 msgid "users groups" msgstr "用户组" -#: rhodecode/templates/base/base.html:234 +#: rhodecode/templates/base/base.html:237 msgid "permissions" msgstr "权限" -#: rhodecode/templates/base/base.html:236 +#: rhodecode/templates/base/base.html:239 +#, fuzzy +msgid "defaults" +msgstr "默认" + +#: rhodecode/templates/base/base.html:240 msgid "settings" msgstr "设置" -#: rhodecode/templates/base/base.html:247 -#: rhodecode/templates/base/base.html:249 +#: rhodecode/templates/base/base.html:251 +#: rhodecode/templates/base/base.html:253 msgid "Followers" msgstr "关注者" -#: rhodecode/templates/base/base.html:255 -#: rhodecode/templates/base/base.html:257 +#: rhodecode/templates/base/base.html:259 +#: rhodecode/templates/base/base.html:261 msgid "Forks" msgstr "复刻" -#: rhodecode/templates/base/base.html:336 -#: rhodecode/templates/base/base.html:338 #: rhodecode/templates/base/base.html:340 +#: rhodecode/templates/base/base.html:342 +#: rhodecode/templates/base/base.html:344 #: rhodecode/templates/search/search.html:52 msgid "Search" msgstr "搜索" @@ -2938,7 +3038,7 @@ msgid "add another comment" msgstr "添加新的评论" #: rhodecode/templates/base/root.html:43 -#: rhodecode/templates/journal/journal.html:120 +#: rhodecode/templates/journal/journal.html:75 #: rhodecode/templates/summary/summary.html:57 msgid "Stop following this repository" msgstr "停止关注该版本库" @@ -2952,23 +3052,36 @@ msgstr "开始关注该版本库" msgid "Group" msgstr "组" -#: rhodecode/templates/base/root.html:47 +#: rhodecode/templates/base/root.html:48 msgid "search truncated" msgstr "搜索被截断" -#: rhodecode/templates/base/root.html:48 +#: rhodecode/templates/base/root.html:49 msgid "no matching files" msgstr "没有符合的文件" +#: rhodecode/templates/base/root.html:51 +msgid "Open new pull request for selected changesets" +msgstr "为选择的变更集创建新的拉取请求" + +#: rhodecode/templates/base/root.html:52 +msgid "Show selected changes __S -> __E" +msgstr "显示选定的修订集:__S -> __E" + +#: rhodecode/templates/base/root.html:53 +msgid "Selection link" +msgstr "选择链接" + #: rhodecode/templates/bookmarks/bookmarks.html:5 #, python-format msgid "%s Bookmarks" -msgstr "%s 书签" +msgstr "%s书签" #: rhodecode/templates/bookmarks/bookmarks.html:39 #: rhodecode/templates/bookmarks/bookmarks_data.html:8 -#: rhodecode/templates/branches/branches.html:54 -#: rhodecode/templates/tags/tags.html:39 +#: rhodecode/templates/branches/branches.html:53 +#: rhodecode/templates/branches/branches_data.html:8 +#: rhodecode/templates/tags/tags.html:54 #: rhodecode/templates/tags/tags_data.html:8 msgid "Author" msgstr "作者" @@ -2976,104 +3089,90 @@ msgstr "作者" #: rhodecode/templates/branches/branches.html:5 #, python-format msgid "%s Branches" -msgstr "%s 分支" +msgstr "%s分支" #: rhodecode/templates/branches/branches.html:29 msgid "Compare branches" msgstr "比较分支" -#: rhodecode/templates/branches/branches.html:57 +#: rhodecode/templates/branches/branches.html:56 +#: rhodecode/templates/branches/branches_data.html:10 #: rhodecode/templates/compare/compare_diff.html:5 #: rhodecode/templates/compare/compare_diff.html:13 +#: rhodecode/templates/tags/tags.html:57 +#: rhodecode/templates/tags/tags_data.html:10 msgid "Compare" msgstr "比较显示" -#: rhodecode/templates/branches/branches_data.html:6 -msgid "name" -msgstr "名称" - -#: rhodecode/templates/branches/branches_data.html:7 -msgid "date" -msgstr "日期" - -#: rhodecode/templates/branches/branches_data.html:8 -#: rhodecode/templates/shortlog/shortlog_data.html:8 -msgid "author" -msgstr "作者" - -#: rhodecode/templates/branches/branches_data.html:9 -#: rhodecode/templates/shortlog/shortlog_data.html:5 -msgid "revision" -msgstr "修订" - -#: rhodecode/templates/branches/branches_data.html:10 -msgid "compare" -msgstr "比较显示" - #: rhodecode/templates/changelog/changelog.html:6 #, python-format msgid "%s Changelog" -msgstr "%s 修订记录" +msgstr "%s修订记录" #: rhodecode/templates/changelog/changelog.html:15 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" -msgstr[0] "显示 %2d 中的 %1d 个版本" - -#: rhodecode/templates/changelog/changelog.html:38 +msgstr[0] "显示%d/%d个版本" + +#: rhodecode/templates/changelog/changelog.html:37 +msgid "Clear selection" +msgstr "清除选择" + +#: rhodecode/templates/changelog/changelog.html:40 #: rhodecode/templates/forks/forks_data.html:19 #, python-format msgid "compare fork with %s" msgstr "比较复刻和%s" -#: rhodecode/templates/changelog/changelog.html:38 -#: rhodecode/templates/forks/forks_data.html:21 -msgid "Compare fork" -msgstr "比较复刻" - -#: rhodecode/templates/changelog/changelog.html:47 +#: rhodecode/templates/changelog/changelog.html:40 +msgid "Compare fork with parent" +msgstr "比较复刻和源版本库" + +#: rhodecode/templates/changelog/changelog.html:49 msgid "Show" msgstr "显示" -#: rhodecode/templates/changelog/changelog.html:72 -#: rhodecode/templates/summary/summary.html:364 +#: rhodecode/templates/changelog/changelog.html:74 +#: rhodecode/templates/summary/summary.html:375 msgid "show more" msgstr "显示更多" -#: rhodecode/templates/changelog/changelog.html:76 +#: rhodecode/templates/changelog/changelog.html:78 msgid "Affected number of files, click to show more details" msgstr "影响的文件数,点击显示详细信息" -#: rhodecode/templates/changelog/changelog.html:89 -#: rhodecode/templates/changeset/changeset.html:38 +#: rhodecode/templates/changelog/changelog.html:91 +#: rhodecode/templates/changeset/changeset.html:44 #: rhodecode/templates/changeset/changeset_file_comment.html:20 #: rhodecode/templates/changeset/changeset_range.html:46 msgid "Changeset status" msgstr "修订集状态" -#: rhodecode/templates/changelog/changelog.html:92 +#: rhodecode/templates/changelog/changelog.html:94 #: rhodecode/templates/shortlog/shortlog_data.html:20 msgid "Click to open associated pull request" msgstr "点击建立相关的拉取请求" -#: rhodecode/templates/changelog/changelog.html:102 -#: rhodecode/templates/changeset/changeset.html:78 +#: rhodecode/templates/changelog/changelog.html:104 +#: rhodecode/templates/changeset/changeset.html:85 msgid "Parent" msgstr "父版本" -#: rhodecode/templates/changelog/changelog.html:108 -#: rhodecode/templates/changeset/changeset.html:84 +#: rhodecode/templates/changelog/changelog.html:110 +#: rhodecode/templates/changeset/changeset.html:91 msgid "No parents" msgstr "无父版本" -#: rhodecode/templates/changelog/changelog.html:113 -#: rhodecode/templates/changeset/changeset.html:88 +#: rhodecode/templates/changelog/changelog.html:115 +#: rhodecode/templates/changeset/changeset.html:95 +#: rhodecode/templates/changeset/changeset_range.html:79 msgid "merge" msgstr "合并" -#: rhodecode/templates/changelog/changelog.html:116 -#: rhodecode/templates/changeset/changeset.html:91 +#: rhodecode/templates/changelog/changelog.html:118 +#: rhodecode/templates/changeset/changeset.html:98 +#: rhodecode/templates/changeset/changeset_range.html:82 #: rhodecode/templates/files/files.html:29 #: rhodecode/templates/files/files_add.html:33 #: rhodecode/templates/files/files_edit.html:33 @@ -3081,85 +3180,98 @@ msgstr "合并" msgid "branch" msgstr "分支" -#: rhodecode/templates/changelog/changelog.html:122 +#: rhodecode/templates/changelog/changelog.html:124 +#: rhodecode/templates/changeset/changeset_range.html:88 msgid "bookmark" msgstr "书签" -#: rhodecode/templates/changelog/changelog.html:128 -#: rhodecode/templates/changeset/changeset.html:96 +#: rhodecode/templates/changelog/changelog.html:130 +#: rhodecode/templates/changeset/changeset.html:103 +#: rhodecode/templates/changeset/changeset_range.html:94 msgid "tag" msgstr "标签" -#: rhodecode/templates/changelog/changelog.html:164 -msgid "Show selected changes __S -> __E" -msgstr "显示选定的修订集 __S -> __E" - -#: rhodecode/templates/changelog/changelog.html:255 +#: rhodecode/templates/changelog/changelog.html:301 msgid "There are no changes yet" msgstr "没有任何变更" #: rhodecode/templates/changelog/changelog_details.html:4 -#: rhodecode/templates/changeset/changeset.html:66 +#: rhodecode/templates/changeset/changeset.html:73 msgid "removed" msgstr "移除" #: rhodecode/templates/changelog/changelog_details.html:5 -#: rhodecode/templates/changeset/changeset.html:67 +#: rhodecode/templates/changeset/changeset.html:74 msgid "changed" msgstr "修改" #: rhodecode/templates/changelog/changelog_details.html:6 -#: rhodecode/templates/changeset/changeset.html:68 +#: rhodecode/templates/changeset/changeset.html:75 msgid "added" msgstr "添加" #: rhodecode/templates/changelog/changelog_details.html:8 #: rhodecode/templates/changelog/changelog_details.html:9 #: rhodecode/templates/changelog/changelog_details.html:10 -#: rhodecode/templates/changeset/changeset.html:70 -#: rhodecode/templates/changeset/changeset.html:71 -#: rhodecode/templates/changeset/changeset.html:72 +#: rhodecode/templates/changeset/changeset.html:77 +#: rhodecode/templates/changeset/changeset.html:78 +#: rhodecode/templates/changeset/changeset.html:79 #, python-format msgid "affected %s files" -msgstr "影响 %s 文件" +msgstr "影响%s文件" #: rhodecode/templates/changeset/changeset.html:6 #, python-format msgid "%s Changeset" -msgstr "%s 修订集" +msgstr "%s修订集" #: rhodecode/templates/changeset/changeset.html:14 msgid "Changeset" msgstr "修订集" -#: rhodecode/templates/changeset/changeset.html:43 +#: rhodecode/templates/changeset/changeset.html:49 #: rhodecode/templates/changeset/diff_block.html:20 msgid "raw diff" -msgstr "原始 diff" - -#: rhodecode/templates/changeset/changeset.html:44 +msgstr "原始diff" + +#: rhodecode/templates/changeset/changeset.html:50 +msgid "patch diff" +msgstr "原始diff" + +#: rhodecode/templates/changeset/changeset.html:51 #: rhodecode/templates/changeset/diff_block.html:21 msgid "download diff" -msgstr "下载 diff" - -#: rhodecode/templates/changeset/changeset.html:48 +msgstr "下载diff" + +#: rhodecode/templates/changeset/changeset.html:55 #: rhodecode/templates/changeset/changeset_file_comment.html:82 #, python-format msgid "%d comment" msgid_plural "%d comments" -msgstr[0] "%d 条评论" - -#: rhodecode/templates/changeset/changeset.html:48 +msgstr[0] "%d条评论" + +#: rhodecode/templates/changeset/changeset.html:55 #: rhodecode/templates/changeset/changeset_file_comment.html:82 #, python-format msgid "(%d inline)" msgid_plural "(%d inline)" -msgstr[0] "(%d 内嵌)" - -#: rhodecode/templates/changeset/changeset.html:103 +msgstr[0] "(%d内嵌)" + +#: rhodecode/templates/changeset/changeset.html:111 +#: rhodecode/templates/compare/compare_diff.html:44 +#: rhodecode/templates/pullrequests/pullrequest_show.html:76 #, python-format -msgid "%s files affected with %s insertions and %s deletions:" -msgstr "%s 个文件受影响包括 %s 行插入和 %s 行删除:" +msgid "%s file changed" +msgid_plural "%s files changed" +msgstr[0] "修改%s个文件" + +#: rhodecode/templates/changeset/changeset.html:113 +#: rhodecode/templates/compare/compare_diff.html:46 +#: rhodecode/templates/pullrequests/pullrequest_show.html:78 +#, python-format +msgid "%s file changed with %s insertions and %s deletions" +msgid_plural "%s files changed with %s insertions and %s deletions" +msgstr[0] "修改%s个文件包括%s行插入和%s行删除" #: rhodecode/templates/changeset/changeset_file_comment.html:42 msgid "Submitting..." @@ -3167,19 +3279,18 @@ msgstr "提交中……" #: rhodecode/templates/changeset/changeset_file_comment.html:45 msgid "Commenting on line {1}." -msgstr "在 {1} 行上评论" +msgstr "在{1}行上评论" #: rhodecode/templates/changeset/changeset_file_comment.html:46 #: rhodecode/templates/changeset/changeset_file_comment.html:121 #, python-format msgid "Comments parsed using %s syntax with %s support." -msgstr "评论使用 %s 语法并支持 %s" +msgstr "评论使用%s语法并支持%s" #: rhodecode/templates/changeset/changeset_file_comment.html:48 #: rhodecode/templates/changeset/changeset_file_comment.html:123 -msgid "" -"Use @username inside this text to send notification to this RhodeCode user" -msgstr "在文本中使用 @用户名 以发送通知到该 RhodeCode 用户" +msgid "Use @username inside this text to send notification to this RhodeCode user" +msgstr "在文本中使用 @用户名 以发送通知到该RhodeCode用户" #: rhodecode/templates/changeset/changeset_file_comment.html:59 #: rhodecode/templates/changeset/changeset_file_comment.html:138 @@ -3189,7 +3300,7 @@ msgstr "评论" #: rhodecode/templates/changeset/changeset_file_comment.html:60 #: rhodecode/templates/changeset/changeset_file_comment.html:71 msgid "Hide" -msgstr "影藏" +msgstr "隐藏" #: rhodecode/templates/changeset/changeset_file_comment.html:67 msgid "You need to be logged in to comment." @@ -3218,22 +3329,24 @@ msgstr "评论并关闭" #: rhodecode/templates/changeset/changeset_range.html:5 #, python-format msgid "%s Changesets" -msgstr "%s 修订集" +msgstr "%s修订集" #: rhodecode/templates/changeset/changeset_range.html:29 #: rhodecode/templates/compare/compare_diff.html:29 msgid "Compare View" msgstr "比较显示" +#: rhodecode/templates/changeset/changeset_range.html:29 +msgid "Show combined compare" +msgstr "显示紧凑比较" + #: rhodecode/templates/changeset/changeset_range.html:54 -#: rhodecode/templates/compare/compare_diff.html:41 -#: rhodecode/templates/pullrequests/pullrequest_show.html:73 msgid "Files affected" msgstr "影响文件" #: rhodecode/templates/changeset/diff_block.html:19 -msgid "diff" -msgstr "差别" +msgid "show full diff for this file" +msgstr "显示文件的完整差异" #: rhodecode/templates/changeset/diff_block.html:27 msgid "show inline comments" @@ -3244,8 +3357,16 @@ msgid "No changesets" msgstr "无修订" #: rhodecode/templates/compare/compare_diff.html:37 -msgid "Outgoing changesets" -msgstr "传出修订集" +#: rhodecode/templates/pullrequests/pullrequest_show.html:69 +#, python-format +msgid "Showing %s commit" +msgid_plural "Showing %s commits" +msgstr[0] "显示%s个提交" + +#: rhodecode/templates/compare/compare_diff.html:52 +#: rhodecode/templates/pullrequests/pullrequest_show.html:84 +msgid "No files" +msgstr "无文件" #: rhodecode/templates/data_table/_dt_elements.html:39 #: rhodecode/templates/data_table/_dt_elements.html:41 @@ -3254,77 +3375,154 @@ msgid "Fork" msgstr "复刻" #: rhodecode/templates/data_table/_dt_elements.html:60 -#: rhodecode/templates/journal/journal.html:126 -#: rhodecode/templates/summary/summary.html:68 +#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/summary/summary.html:77 msgid "Mercurial repository" -msgstr "Mercurial 版本库" +msgstr "Mercurial版本库" #: rhodecode/templates/data_table/_dt_elements.html:62 -#: rhodecode/templates/journal/journal.html:128 -#: rhodecode/templates/summary/summary.html:71 +#: rhodecode/templates/journal/journal.html:83 +#: rhodecode/templates/summary/summary.html:80 msgid "Git repository" -msgstr "Git 版本库" +msgstr "Git版本库" #: rhodecode/templates/data_table/_dt_elements.html:69 -#: rhodecode/templates/journal/journal.html:134 -#: rhodecode/templates/summary/summary.html:78 +#: rhodecode/templates/journal/journal.html:89 +#: rhodecode/templates/summary/summary.html:87 msgid "public repository" msgstr "公共版本库" #: rhodecode/templates/data_table/_dt_elements.html:80 -#: rhodecode/templates/summary/summary.html:87 -#: rhodecode/templates/summary/summary.html:88 +#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:97 msgid "Fork of" msgstr "复刻自" -#: rhodecode/templates/data_table/_dt_elements.html:92 +#: rhodecode/templates/data_table/_dt_elements.html:94 msgid "No changesets yet" msgstr "无修订" -#: rhodecode/templates/data_table/_dt_elements.html:104 +#: rhodecode/templates/data_table/_dt_elements.html:101 +#: rhodecode/templates/data_table/_dt_elements.html:103 +#, python-format +msgid "Subscribe to %s rss feed" +msgstr "订阅%s的RSS" + +#: rhodecode/templates/data_table/_dt_elements.html:109 +#: rhodecode/templates/data_table/_dt_elements.html:111 +#, python-format +msgid "Subscribe to %s atom feed" +msgstr "订阅%s的Atom" + +#: rhodecode/templates/data_table/_dt_elements.html:122 #, python-format msgid "Confirm to delete this user: %s" -msgstr "确认删除用户: %s" +msgstr "确认删除用户:%s" + +#: rhodecode/templates/email_templates/changeset_comment.html:10 +#, fuzzy +msgid "New status$" +msgstr "改变状态" #: rhodecode/templates/email_templates/main.html:8 -msgid "This is an notification from RhodeCode." -msgstr "这是 RhodeCode 发送的一个通知。" +msgid "This is a notification from RhodeCode." +msgstr "这是一个RhodeCode通知。" + +#: rhodecode/templates/email_templates/password_reset.html:4 +msgid "Hello" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:6 +msgid "We received a request to create a new password for your account." +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:8 +msgid "You can generate it by clicking following URL" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:12 +msgid "If you didn't request new password please ignore this email." +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:4 +#, python-format +msgid "" +"User %s opened pull request for repository %s and wants you to review " +"changes." +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:5 +#, fuzzy +msgid "title" +msgstr "标题" + +#: rhodecode/templates/email_templates/pull_request.html:6 +#: rhodecode/templates/pullrequests/pullrequest.html:115 +msgid "description" +msgstr "描述" + +#: rhodecode/templates/email_templates/pull_request.html:11 +msgid "revisions for reviewing" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:18 +#, fuzzy +msgid "View this pull request here" +msgstr "为这个拉取请求增加检视人员" + +#: rhodecode/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +msgid "User %s commented on pull request #%s for repository %s" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request_comment.html:10 +#, fuzzy +msgid "New status" +msgstr "改变状态" + +#: rhodecode/templates/email_templates/pull_request_comment.html:14 +msgid "View this comment here" +msgstr "" + +#: rhodecode/templates/email_templates/registration.html:4 +#, fuzzy +msgid "A new user have registered in RhodeCode" +msgstr "成功注册到RhodeCode" + +#: rhodecode/templates/email_templates/registration.html:9 +msgid "View this user here" +msgstr "" #: rhodecode/templates/errors/error_document.html:46 #, python-format msgid "You will be redirected to %s in %s seconds" -msgstr "%1s 秒后你将重定向到 %2s" +msgstr "重定向到%s,于%s秒后" #: rhodecode/templates/files/file_diff.html:4 #, python-format msgid "%s File diff" -msgstr "%s 文件差异" +msgstr "%s文件差异" #: rhodecode/templates/files/file_diff.html:12 msgid "File diff" msgstr "文件差异" #: rhodecode/templates/files/files.html:4 -#: rhodecode/templates/files/files.html:72 +#: rhodecode/templates/files/files.html:74 #, python-format msgid "%s files" -msgstr "%s 文件" +msgstr "%s文件" #: rhodecode/templates/files/files.html:12 -#: rhodecode/templates/summary/summary.html:340 +#: rhodecode/templates/summary/summary.html:351 msgid "files" msgstr "文件" -#: rhodecode/templates/files/files.html:92 -#: rhodecode/templates/files/files_source.html:124 -msgid "Selection link" -msgstr "选择链接" - #: rhodecode/templates/files/files_add.html:4 #: rhodecode/templates/files/files_edit.html:4 #, python-format msgid "%s Edit file" -msgstr "%s 编辑文件" +msgstr "%s编辑文件" #: rhodecode/templates/files/files_add.html:19 msgid "add file" @@ -3394,7 +3592,7 @@ msgid "search file list" msgstr "搜索文件列表" #: rhodecode/templates/files/files_browser.html:31 -#: rhodecode/templates/shortlog/shortlog_data.html:80 +#: rhodecode/templates/shortlog/shortlog_data.html:78 msgid "add new file" msgstr "新建文件" @@ -3408,7 +3606,7 @@ msgstr "大小" #: rhodecode/templates/files/files_browser.html:49 msgid "Mimetype" -msgstr "MIME 类型" +msgstr "MIME类型" #: rhodecode/templates/files/files_browser.html:50 msgid "Last Revision" @@ -3427,18 +3625,18 @@ msgid "edit file" msgstr "编辑文件" #: rhodecode/templates/files/files_edit.html:49 -#: rhodecode/templates/files/files_source.html:38 +#: rhodecode/templates/files/files_source.html:23 msgid "show annotation" msgstr "显示注释" #: rhodecode/templates/files/files_edit.html:50 -#: rhodecode/templates/files/files_source.html:40 -#: rhodecode/templates/files/files_source.html:68 +#: rhodecode/templates/files/files_source.html:25 +#: rhodecode/templates/files/files_source.html:53 msgid "show as raw" msgstr "显示原始文件" #: rhodecode/templates/files/files_edit.html:51 -#: rhodecode/templates/files/files_source.html:41 +#: rhodecode/templates/files/files_source.html:26 msgid "download as raw" msgstr "下载原始文件" @@ -3450,34 +3648,43 @@ msgstr "显示源文件" msgid "Editing file" msgstr "编辑文件" -#: rhodecode/templates/files/files_source.html:2 +#: rhodecode/templates/files/files_history_box.html:2 msgid "History" msgstr "历史" -#: rhodecode/templates/files/files_source.html:9 +#: rhodecode/templates/files/files_history_box.html:9 msgid "diff to revision" msgstr "比较差异" -#: rhodecode/templates/files/files_source.html:10 +#: rhodecode/templates/files/files_history_box.html:10 msgid "show at revision" msgstr "显示修订" -#: rhodecode/templates/files/files_source.html:14 +#: rhodecode/templates/files/files_history_box.html:11 +#, fuzzy +msgid "show full history" +msgstr "加载文件历史记录..." + +#: rhodecode/templates/files/files_history_box.html:16 #, python-format msgid "%s author" msgid_plural "%s authors" -msgstr[0] "%s 个作者" - -#: rhodecode/templates/files/files_source.html:36 +msgstr[0] "%s个作者" + +#: rhodecode/templates/files/files_source.html:6 +msgid "Load file history" +msgstr "加载文件历史记录..." + +#: rhodecode/templates/files/files_source.html:21 msgid "show source" msgstr "显示代码" -#: rhodecode/templates/files/files_source.html:59 +#: rhodecode/templates/files/files_source.html:44 #, python-format msgid "Binary file (%s)" msgstr "二进制文件(%s)" -#: rhodecode/templates/files/files_source.html:68 +#: rhodecode/templates/files/files_source.html:53 msgid "File is too big to display" msgstr "文件过大,不能显示" @@ -3496,7 +3703,7 @@ msgstr "指定的路径中没有文件" #: rhodecode/templates/followers/followers.html:5 #, python-format msgid "%s Followers" -msgstr "%s 个关注者" +msgstr "%s个关注者" #: rhodecode/templates/followers/followers.html:13 msgid "followers" @@ -3552,32 +3759,32 @@ msgstr "复刻" msgid "forked" msgstr "已有复刻" -#: rhodecode/templates/forks/forks_data.html:38 +#: rhodecode/templates/forks/forks_data.html:42 msgid "There are no forks yet" msgstr "无复刻" #: rhodecode/templates/journal/journal.html:13 msgid "ATOM journal feed" -msgstr "订阅日志 ATOM" +msgstr "订阅日志ATOM" #: rhodecode/templates/journal/journal.html:14 msgid "RSS journal feed" -msgstr "订阅日志 RSS" +msgstr "订阅日志RSS" #: rhodecode/templates/journal/journal.html:24 -#: rhodecode/templates/pullrequests/pullrequest.html:53 +#: rhodecode/templates/pullrequests/pullrequest.html:55 msgid "Refresh" msgstr "刷新" #: rhodecode/templates/journal/journal.html:27 #: rhodecode/templates/journal/public_journal.html:24 msgid "RSS feed" -msgstr "订阅 RSS" +msgstr "订阅RSS" #: rhodecode/templates/journal/journal.html:30 #: rhodecode/templates/journal/public_journal.html:27 msgid "ATOM feed" -msgstr "订阅 ATOM" +msgstr "订阅ATOM" #: rhodecode/templates/journal/journal.html:41 msgid "Watched" @@ -3587,29 +3794,29 @@ msgstr "关注的" msgid "ADD" msgstr "新建版本库" -#: rhodecode/templates/journal/journal.html:114 +#: rhodecode/templates/journal/journal.html:69 msgid "following user" msgstr "关注用户" -#: rhodecode/templates/journal/journal.html:114 +#: rhodecode/templates/journal/journal.html:69 msgid "user" msgstr "用户" -#: rhodecode/templates/journal/journal.html:147 +#: rhodecode/templates/journal/journal.html:102 msgid "You are not following any users or repositories" msgstr "未关注任何用户或版本库" -#: rhodecode/templates/journal/journal_data.html:47 +#: rhodecode/templates/journal/journal_data.html:51 msgid "No entries yet" msgstr "没有条目" #: rhodecode/templates/journal/public_journal.html:13 msgid "ATOM public journal feed" -msgstr "订阅公共日志 ATOM" +msgstr "订阅公共日志ATOM" #: rhodecode/templates/journal/public_journal.html:14 msgid "RSS public journal feed" -msgstr "订阅公共日志 RSS" +msgstr "订阅公共日志RSS" #: rhodecode/templates/journal/public_journal.html:21 msgid "Public Journal" @@ -3620,51 +3827,47 @@ msgstr "公共日志" msgid "New pull request" msgstr "新建拉取请求" -#: rhodecode/templates/pullrequests/pullrequest.html:52 +#: rhodecode/templates/pullrequests/pullrequest.html:54 msgid "refresh overview" msgstr "刷新概览" -#: rhodecode/templates/pullrequests/pullrequest.html:64 +#: rhodecode/templates/pullrequests/pullrequest.html:66 msgid "Detailed compare view" msgstr "详细比较显示" -#: rhodecode/templates/pullrequests/pullrequest.html:68 -#: rhodecode/templates/pullrequests/pullrequest_show.html:86 +#: rhodecode/templates/pullrequests/pullrequest.html:70 +#: rhodecode/templates/pullrequests/pullrequest_show.html:100 msgid "Pull request reviewers" msgstr "拉取请求检视人员" -#: rhodecode/templates/pullrequests/pullrequest.html:77 -#: rhodecode/templates/pullrequests/pullrequest_show.html:98 +#: rhodecode/templates/pullrequests/pullrequest.html:79 +#: rhodecode/templates/pullrequests/pullrequest_show.html:112 msgid "owner" msgstr "所有者" -#: rhodecode/templates/pullrequests/pullrequest.html:89 -#: rhodecode/templates/pullrequests/pullrequest_show.html:113 +#: rhodecode/templates/pullrequests/pullrequest.html:91 +#: rhodecode/templates/pullrequests/pullrequest_show.html:127 msgid "Add reviewer to this pull request." msgstr "为这个拉取请求增加检视人员" -#: rhodecode/templates/pullrequests/pullrequest.html:95 +#: rhodecode/templates/pullrequests/pullrequest.html:97 msgid "Create new pull request" msgstr "创建新的拉取请求" -#: rhodecode/templates/pullrequests/pullrequest.html:104 +#: rhodecode/templates/pullrequests/pullrequest.html:106 #: rhodecode/templates/pullrequests/pullrequest_show.html:25 #: rhodecode/templates/pullrequests/pullrequest_show_all.html:33 msgid "Title" msgstr "标题" -#: rhodecode/templates/pullrequests/pullrequest.html:113 -msgid "description" -msgstr "描述" - -#: rhodecode/templates/pullrequests/pullrequest.html:121 +#: rhodecode/templates/pullrequests/pullrequest.html:123 msgid "Send pull request" msgstr "发送拉取请求" #: rhodecode/templates/pullrequests/pullrequest_show.html:23 #, python-format msgid "Closed %s" -msgstr "关闭于 %s" +msgstr "于%s前关闭" #: rhodecode/templates/pullrequests/pullrequest_show.html:23 #, python-format @@ -3687,25 +3890,20 @@ msgstr "还未检视的检视人员" #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" -msgstr[0] "%d 个检视者" +msgstr[0] "%d个检视者" #: rhodecode/templates/pullrequests/pullrequest_show.html:50 -#| msgid "Pull request reviewers" msgid "pull request was reviewed by all reviewers" -msgstr "拉取请求已经被所有检视人员检视" +msgstr "拉取请求已经由所有检视人员检视" #: rhodecode/templates/pullrequests/pullrequest_show.html:58 msgid "Created on" -msgstr "创建于 %s" +msgstr "创建于" #: rhodecode/templates/pullrequests/pullrequest_show.html:65 msgid "Compare view" msgstr "比较显示" -#: rhodecode/templates/pullrequests/pullrequest_show.html:69 -msgid "Incoming changesets" -msgstr "传入修订集" - #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4 msgid "all pull requests" msgstr "所有拉取请求" @@ -3726,13 +3924,13 @@ msgstr "搜索 \"%s\" 于版本库 %s 中" #: rhodecode/templates/search/search.html:8 #, python-format msgid "Search \"%s\" in all repositories" -msgstr "在所有的版本库中搜索 \"%s\"" +msgstr "在所有的版本库中搜索 \"%s\"" #: rhodecode/templates/search/search.html:12 #: rhodecode/templates/search/search.html:32 #, python-format msgid "Search in repository: %s" -msgstr "在版本库 %s 中搜索" +msgstr "在版本库%s中搜索" #: rhodecode/templates/search/search.html:14 #: rhodecode/templates/search/search.html:34 @@ -3768,41 +3966,46 @@ msgstr "权限不足" #: rhodecode/templates/settings/repo_settings.html:5 #, python-format msgid "%s Settings" -msgstr "%s 设置" +msgstr "%s设置" #: rhodecode/templates/shortlog/shortlog.html:5 #, python-format msgid "%s Shortlog" -msgstr "%s 简短日志" - -#: rhodecode/templates/shortlog/shortlog.html:14 +msgstr "%s简短日志" + +#: rhodecode/templates/shortlog/shortlog.html:15 +#: rhodecode/templates/shortlog/shortlog.html:19 msgid "shortlog" msgstr "简短日志" +#: rhodecode/templates/shortlog/shortlog_data.html:5 +msgid "revision" +msgstr "修订" + #: rhodecode/templates/shortlog/shortlog_data.html:7 msgid "age" msgstr "时间" -#: rhodecode/templates/shortlog/shortlog_data.html:33 -msgid "No commit message" -msgstr "没有提交信息" - -#: rhodecode/templates/shortlog/shortlog_data.html:77 +#: rhodecode/templates/shortlog/shortlog_data.html:8 +msgid "author" +msgstr "作者" + +#: rhodecode/templates/shortlog/shortlog_data.html:75 msgid "Add or upload files directly via RhodeCode" -msgstr "通过 RhodeCode 直接添加或者上传文件" - -#: rhodecode/templates/shortlog/shortlog_data.html:86 +msgstr "通过RhodeCode直接添加或者上传文件" + +#: rhodecode/templates/shortlog/shortlog_data.html:84 msgid "Push new repo" -msgstr "Push 新版本库" - -#: rhodecode/templates/shortlog/shortlog_data.html:94 +msgstr "推送新版本库" + +#: rhodecode/templates/shortlog/shortlog_data.html:92 msgid "Existing repository?" -msgstr "现有版本库?" +msgstr "已有版本库?" #: rhodecode/templates/summary/summary.html:4 #, python-format msgid "%s Summary" -msgstr "%s 概要" +msgstr "%s概要" #: rhodecode/templates/summary/summary.html:12 msgid "summary" @@ -3811,144 +4014,158 @@ msgstr "概要" #: rhodecode/templates/summary/summary.html:20 #, python-format msgid "repo %s ATOM feed" -msgstr "订阅 ATOM %s" +msgstr "订阅ATOM %s" #: rhodecode/templates/summary/summary.html:21 #, python-format msgid "repo %s RSS feed" -msgstr "订阅 RSS %s" +msgstr "订阅RSS %s" #: rhodecode/templates/summary/summary.html:49 #: rhodecode/templates/summary/summary.html:52 msgid "ATOM" msgstr "ATOM" -#: rhodecode/templates/summary/summary.html:82 +#: rhodecode/templates/summary/summary.html:70 +#, python-format +msgid "Repository locked by %s" +msgstr "版本库由%s锁定" + +#: rhodecode/templates/summary/summary.html:72 +msgid "Repository unlocked" +msgstr "版本库未锁定" + +#: rhodecode/templates/summary/summary.html:91 #, python-format msgid "Non changable ID %s" -msgstr "不可变 ID %s" - -#: rhodecode/templates/summary/summary.html:87 +msgstr "不可变ID %s" + +#: rhodecode/templates/summary/summary.html:96 msgid "public" msgstr "公共" -#: rhodecode/templates/summary/summary.html:95 +#: rhodecode/templates/summary/summary.html:104 msgid "remote clone" msgstr "远程克隆" -#: rhodecode/templates/summary/summary.html:116 +#: rhodecode/templates/summary/summary.html:125 msgid "Contact" msgstr "联系方式" -#: rhodecode/templates/summary/summary.html:130 +#: rhodecode/templates/summary/summary.html:139 msgid "Clone url" msgstr "克隆地址" -#: rhodecode/templates/summary/summary.html:133 +#: rhodecode/templates/summary/summary.html:142 msgid "Show by Name" msgstr "以名字显示" -#: rhodecode/templates/summary/summary.html:134 +#: rhodecode/templates/summary/summary.html:143 msgid "Show by ID" -msgstr "以 ID 显示" - -#: rhodecode/templates/summary/summary.html:142 +msgstr "按ID显示" + +#: rhodecode/templates/summary/summary.html:151 msgid "Trending files" msgstr "文件趋势图" -#: rhodecode/templates/summary/summary.html:150 -#: rhodecode/templates/summary/summary.html:166 -#: rhodecode/templates/summary/summary.html:194 +#: rhodecode/templates/summary/summary.html:159 +#: rhodecode/templates/summary/summary.html:175 +#: rhodecode/templates/summary/summary.html:203 msgid "enable" msgstr "启用" -#: rhodecode/templates/summary/summary.html:158 +#: rhodecode/templates/summary/summary.html:167 msgid "Download" msgstr "下载" -#: rhodecode/templates/summary/summary.html:162 +#: rhodecode/templates/summary/summary.html:171 msgid "There are no downloads yet" msgstr "无下载" -#: rhodecode/templates/summary/summary.html:164 -msgid "Downloads are disabled for this repository" -msgstr "这个版本库的下载已经禁用" - -#: rhodecode/templates/summary/summary.html:170 -msgid "Download as zip" -msgstr "下载 zip 包" - -#: rhodecode/templates/summary/summary.html:173 -msgid "Check this to download archive with subrepos" -msgstr "勾选以下载包含子版本库的压缩包" - #: rhodecode/templates/summary/summary.html:173 +msgid "Downloads are disabled for this repository" +msgstr "这个版本库的下载已经禁用" + +#: rhodecode/templates/summary/summary.html:179 +msgid "Download as zip" +msgstr "zip打包下载" + +#: rhodecode/templates/summary/summary.html:182 +msgid "Check this to download archive with subrepos" +msgstr "勾选以下载包含子版本库的压缩包" + +#: rhodecode/templates/summary/summary.html:182 msgid "with subrepos" msgstr "包括子版本库" -#: rhodecode/templates/summary/summary.html:186 +#: rhodecode/templates/summary/summary.html:195 msgid "Commit activity by day / author" msgstr "按日期或作者的提交活动" -#: rhodecode/templates/summary/summary.html:197 +#: rhodecode/templates/summary/summary.html:206 msgid "Stats gathered: " -msgstr "已收集的统计: " - -#: rhodecode/templates/summary/summary.html:218 +msgstr "已收集的统计:" + +#: rhodecode/templates/summary/summary.html:227 msgid "Shortlog" msgstr "简短日志" -#: rhodecode/templates/summary/summary.html:220 +#: rhodecode/templates/summary/summary.html:229 msgid "Quick start" msgstr "快速入门" -#: rhodecode/templates/summary/summary.html:233 +#: rhodecode/templates/summary/summary.html:243 #, python-format msgid "Readme file at revision '%s'" -msgstr "修订 '%s' 中的README" - -#: rhodecode/templates/summary/summary.html:236 +msgstr "修订'%s'中的README" + +#: rhodecode/templates/summary/summary.html:246 msgid "Permalink to this readme" -msgstr "这个 README 的固定链接" - -#: rhodecode/templates/summary/summary.html:293 +msgstr "这个README的永久链接" + +#: rhodecode/templates/summary/summary.html:304 #, python-format msgid "Download %s as %s" -msgstr "下载 %s 作为 %s" - -#: rhodecode/templates/summary/summary.html:650 +msgstr "下载%s为%s包" + +#: rhodecode/templates/summary/summary.html:661 msgid "commits" msgstr "提交" -#: rhodecode/templates/summary/summary.html:651 +#: rhodecode/templates/summary/summary.html:662 msgid "files added" msgstr "文件已添加" -#: rhodecode/templates/summary/summary.html:652 +#: rhodecode/templates/summary/summary.html:663 msgid "files changed" msgstr "文件已更改" -#: rhodecode/templates/summary/summary.html:653 +#: rhodecode/templates/summary/summary.html:664 msgid "files removed" msgstr "文件已删除" -#: rhodecode/templates/summary/summary.html:656 +#: rhodecode/templates/summary/summary.html:667 msgid "commit" msgstr "提交" -#: rhodecode/templates/summary/summary.html:657 +#: rhodecode/templates/summary/summary.html:668 msgid "file added" msgstr "文件已添加" -#: rhodecode/templates/summary/summary.html:658 +#: rhodecode/templates/summary/summary.html:669 msgid "file changed" msgstr "文件已更改" -#: rhodecode/templates/summary/summary.html:659 +#: rhodecode/templates/summary/summary.html:670 msgid "file removed" msgstr "文件已删除" #: rhodecode/templates/tags/tags.html:5 #, python-format msgid "%s Tags" -msgstr "%s 标签" +msgstr "%s标签" + +#: rhodecode/templates/tags/tags.html:29 +msgid "Compare tags" +msgstr "比较标签" + diff --git a/rhodecode/i18n/zh_TW/LC_MESSAGES/rhodecode.mo b/rhodecode/i18n/zh_TW/LC_MESSAGES/rhodecode.mo index aee6ff0f60bc1e0d25beda8a140aed37013f771e..0aea77c1d8a699363ed664d5d5e4c56dca7fc3e6 GIT binary patch literal 42024 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 kAdU9F_G|7m-ncNL\n" "Language-Team: zh_TW \n" @@ -17,36 +17,39 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 0.9.6\n" -#: rhodecode/controllers/changelog.py:94 +#: rhodecode/controllers/changelog.py:95 #, fuzzy msgid "All Branches" msgstr "分支" -#: rhodecode/controllers/changeset.py:83 +#: rhodecode/controllers/changeset.py:84 msgid "show white space" msgstr "" -#: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97 +#: rhodecode/controllers/changeset.py:91 rhodecode/controllers/changeset.py:98 msgid "ignore white space" msgstr "" -#: rhodecode/controllers/changeset.py:157 +#: rhodecode/controllers/changeset.py:164 #, fuzzy, python-format msgid "%s line context" msgstr "文件內容" -#: rhodecode/controllers/changeset.py:333 -#: rhodecode/controllers/changeset.py:348 rhodecode/lib/diffs.py:70 -msgid "binary file" -msgstr "二進位檔" - -#: rhodecode/controllers/changeset.py:408 +#: rhodecode/controllers/changeset.py:315 +#: rhodecode/controllers/pullrequests.py:411 +#, fuzzy, python-format +msgid "Status change -> %s" +msgstr "最後修改" + +#: rhodecode/controllers/changeset.py:346 msgid "" "Changing status on a changeset associated witha closed pull request is " "not allowed" msgstr "" -#: rhodecode/controllers/compare.py:69 +#: rhodecode/controllers/compare.py:75 +#: rhodecode/controllers/pullrequests.py:117 +#: rhodecode/controllers/shortlog.py:100 #, fuzzy msgid "There are no changesets yet" msgstr "尚未有任何變更" @@ -77,103 +80,113 @@ msgid "" "fulfilling the request." msgstr "" -#: rhodecode/controllers/feed.py:49 +#: rhodecode/controllers/feed.py:52 #, python-format msgid "Changes on %s repository" msgstr "修改於版本庫 %s" -#: rhodecode/controllers/feed.py:50 +#: rhodecode/controllers/feed.py:53 #, python-format msgid "%s %s feed" msgstr "" -#: rhodecode/controllers/feed.py:75 +#: rhodecode/controllers/feed.py:86 +#: rhodecode/templates/changeset/changeset.html:126 +#: rhodecode/templates/changeset/changeset.html:138 +#: rhodecode/templates/compare/compare_diff.html:62 +#: rhodecode/templates/compare/compare_diff.html:73 +#: rhodecode/templates/pullrequests/pullrequest_show.html:94 +#: rhodecode/templates/pullrequests/pullrequest_show.html:153 +msgid "Changeset was too big and was cut off..." +msgstr "" + +#: rhodecode/controllers/feed.py:92 #, fuzzy msgid "commited on" msgstr "遞交" -#: rhodecode/controllers/files.py:84 +#: rhodecode/controllers/files.py:86 #, fuzzy msgid "click here to add new file" msgstr "新增使用者" -#: rhodecode/controllers/files.py:85 +#: rhodecode/controllers/files.py:87 #, fuzzy, python-format msgid "There are no files yet %s" msgstr "尚未有任何檔案" -#: rhodecode/controllers/files.py:239 rhodecode/controllers/files.py:299 +#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325 #, python-format msgid "This repository is has been locked by %s on %s" msgstr "" -#: rhodecode/controllers/files.py:266 +#: rhodecode/controllers/files.py:292 #, python-format msgid "Edited %s via RhodeCode" msgstr "使用 RhodeCode 編輯 %s" -#: rhodecode/controllers/files.py:271 +#: rhodecode/controllers/files.py:297 msgid "No changes" msgstr "沒有修改" -#: rhodecode/controllers/files.py:282 rhodecode/controllers/files.py:346 +#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372 #, python-format msgid "Successfully committed to %s" msgstr "成功遞交至 %s" -#: rhodecode/controllers/files.py:287 rhodecode/controllers/files.py:352 +#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378 msgid "Error occurred during commit" msgstr "" -#: rhodecode/controllers/files.py:318 +#: rhodecode/controllers/files.py:344 #, fuzzy, python-format msgid "Added %s via RhodeCode" msgstr "使用 RhodeCode 編輯 %s" -#: rhodecode/controllers/files.py:332 +#: rhodecode/controllers/files.py:358 #, fuzzy msgid "No content" msgstr "文件內容" -#: rhodecode/controllers/files.py:336 +#: rhodecode/controllers/files.py:362 #, fuzzy msgid "No filename" msgstr "檔案名稱" -#: rhodecode/controllers/files.py:378 +#: rhodecode/controllers/files.py:404 msgid "downloads disabled" msgstr "下載已關閉" -#: rhodecode/controllers/files.py:389 +#: rhodecode/controllers/files.py:415 #, python-format msgid "Unknown revision %s" msgstr "未知修訂 %s" -#: rhodecode/controllers/files.py:391 +#: rhodecode/controllers/files.py:417 msgid "Empty repository" msgstr "空的版本庫" -#: rhodecode/controllers/files.py:393 +#: rhodecode/controllers/files.py:419 msgid "Unknown archive type" msgstr "未知的存檔類型" -#: rhodecode/controllers/files.py:494 +#: rhodecode/controllers/files.py:564 #: rhodecode/templates/changeset/changeset_range.html:13 #: rhodecode/templates/changeset/changeset_range.html:31 msgid "Changesets" msgstr "變更" -#: rhodecode/controllers/files.py:495 rhodecode/controllers/pullrequests.py:72 -#: rhodecode/controllers/summary.py:232 rhodecode/model/scm.py:543 +#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:76 +#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550 msgid "Branches" msgstr "分支" -#: rhodecode/controllers/files.py:496 rhodecode/controllers/pullrequests.py:76 -#: rhodecode/controllers/summary.py:233 rhodecode/model/scm.py:554 +#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:80 +#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561 msgid "Tags" msgstr "標籤" -#: rhodecode/controllers/forks.py:73 rhodecode/controllers/admin/repos.py:90 +#: rhodecode/controllers/forks.py:74 rhodecode/controllers/admin/repos.py:92 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -181,7 +194,7 @@ msgid "" "repositories" msgstr "" -#: rhodecode/controllers/forks.py:133 rhodecode/controllers/settings.py:72 +#: rhodecode/controllers/forks.py:134 rhodecode/controllers/settings.py:73 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -189,23 +202,23 @@ msgid "" "repositories" msgstr "" -#: rhodecode/controllers/forks.py:167 +#: rhodecode/controllers/forks.py:168 #, python-format msgid "forked %s repository as %s" msgstr "forked %s 版本庫為 %s" -#: rhodecode/controllers/forks.py:181 +#: rhodecode/controllers/forks.py:182 #, python-format msgid "An error occurred during repository forking %s" msgstr "" -#: rhodecode/controllers/journal.py:202 rhodecode/controllers/journal.py:239 +#: rhodecode/controllers/journal.py:206 rhodecode/controllers/journal.py:243 #, fuzzy msgid "public journal" msgstr "公開日誌" -#: rhodecode/controllers/journal.py:206 rhodecode/controllers/journal.py:243 -#: rhodecode/templates/base/base.html:220 +#: rhodecode/controllers/journal.py:210 rhodecode/controllers/journal.py:247 +#: rhodecode/templates/base/base.html:232 msgid "journal" msgstr "日誌" @@ -223,59 +236,59 @@ msgid "" "email" msgstr "您的密碼重設動作已完成,新的密碼已寄至您的信箱" -#: rhodecode/controllers/pullrequests.py:74 rhodecode/model/scm.py:549 +#: rhodecode/controllers/pullrequests.py:78 rhodecode/model/scm.py:556 msgid "Bookmarks" msgstr "" -#: rhodecode/controllers/pullrequests.py:158 +#: rhodecode/controllers/pullrequests.py:186 msgid "Pull request requires a title with min. 3 chars" msgstr "" -#: rhodecode/controllers/pullrequests.py:160 +#: rhodecode/controllers/pullrequests.py:188 #, fuzzy msgid "error during creation of pull request" msgstr "建立使用者 %s" -#: rhodecode/controllers/pullrequests.py:181 +#: rhodecode/controllers/pullrequests.py:220 #, fuzzy msgid "Successfully opened new pull request" msgstr "成功刪除使用者" -#: rhodecode/controllers/pullrequests.py:184 +#: rhodecode/controllers/pullrequests.py:223 msgid "Error occurred during sending pull request" msgstr "" -#: rhodecode/controllers/pullrequests.py:217 +#: rhodecode/controllers/pullrequests.py:256 #, fuzzy msgid "Successfully deleted pull request" msgstr "成功刪除使用者" -#: rhodecode/controllers/search.py:131 +#: rhodecode/controllers/search.py:134 msgid "Invalid search query. Try quoting it." msgstr "無效的查詢。請使用跳脫字元" -#: rhodecode/controllers/search.py:136 +#: rhodecode/controllers/search.py:139 msgid "There is no index to search in. Please run whoosh indexer" msgstr "沒有任何索引可以搜尋。請執行 whoosh 建立索引" -#: rhodecode/controllers/search.py:140 +#: rhodecode/controllers/search.py:143 msgid "An error occurred during this search operation" msgstr "" -#: rhodecode/controllers/settings.py:107 -#: rhodecode/controllers/admin/repos.py:266 +#: rhodecode/controllers/settings.py:108 +#: rhodecode/controllers/admin/repos.py:268 #, python-format msgid "Repository %s updated successfully" msgstr "版本庫 %s 更新完成" -#: rhodecode/controllers/settings.py:125 -#: rhodecode/controllers/admin/repos.py:284 +#: rhodecode/controllers/settings.py:126 +#: rhodecode/controllers/admin/repos.py:286 #, python-format msgid "error occurred during update of repository %s" msgstr "" -#: rhodecode/controllers/settings.py:143 -#: rhodecode/controllers/admin/repos.py:302 +#: rhodecode/controllers/settings.py:144 +#: rhodecode/controllers/admin/repos.py:304 #, python-format msgid "" "%s repository is not mapped to db perhaps it was moved or renamed from " @@ -283,28 +296,57 @@ msgid "" "repositories" msgstr "" -#: rhodecode/controllers/settings.py:155 -#: rhodecode/controllers/admin/repos.py:314 +#: rhodecode/controllers/settings.py:156 +#: rhodecode/controllers/admin/repos.py:316 #, python-format msgid "deleted repository %s" msgstr "刪除版本庫 %s" -#: rhodecode/controllers/settings.py:159 -#: rhodecode/controllers/admin/repos.py:324 -#: rhodecode/controllers/admin/repos.py:330 +#: rhodecode/controllers/settings.py:160 +#: rhodecode/controllers/admin/repos.py:326 +#: rhodecode/controllers/admin/repos.py:332 #, python-format msgid "An error occurred during deletion of %s" msgstr "" -#: rhodecode/controllers/summary.py:138 +#: rhodecode/controllers/settings.py:179 +#, fuzzy +msgid "unlocked" +msgstr "解鎖" + +#: rhodecode/controllers/settings.py:182 +#, fuzzy +msgid "locked" +msgstr "解鎖" + +#: rhodecode/controllers/settings.py:184 +#, fuzzy, python-format +msgid "Repository has been %s" +msgstr "forked %s 版本庫為 %s" + +#: rhodecode/controllers/settings.py:188 +#: rhodecode/controllers/admin/repos.py:424 +msgid "An error occurred during unlocking" +msgstr "" + +#: rhodecode/controllers/summary.py:140 msgid "No data loaded yet" msgstr "" -#: rhodecode/controllers/summary.py:142 -#: rhodecode/templates/summary/summary.html:148 +#: rhodecode/controllers/summary.py:144 +#: rhodecode/templates/summary/summary.html:157 msgid "Statistics are disabled for this repository" msgstr "這個版本庫的統計功能已停用" +#: rhodecode/controllers/admin/defaults.py:96 +#, fuzzy +msgid "Default settings updated successfully" +msgstr "LDAP設定更新完成" + +#: rhodecode/controllers/admin/defaults.py:110 +msgid "error occurred during update of defaults" +msgstr "" + #: rhodecode/controllers/admin/ldap_settings.py:50 msgid "BASE" msgstr "" @@ -362,18 +404,23 @@ msgid "error occurred during update of l msgstr "" #: rhodecode/controllers/admin/permissions.py:59 +#: rhodecode/controllers/admin/permissions.py:63 msgid "None" msgstr "無" #: rhodecode/controllers/admin/permissions.py:60 +#: rhodecode/controllers/admin/permissions.py:64 msgid "Read" msgstr "讀" #: rhodecode/controllers/admin/permissions.py:61 +#: rhodecode/controllers/admin/permissions.py:65 msgid "Write" msgstr "寫" #: rhodecode/controllers/admin/permissions.py:62 +#: rhodecode/controllers/admin/permissions.py:66 +#: rhodecode/templates/admin/defaults/defaults.html:9 #: rhodecode/templates/admin/ldap/ldap.html:9 #: rhodecode/templates/admin/permissions/permissions.html:9 #: rhodecode/templates/admin/repos/repo_add.html:9 @@ -386,231 +433,227 @@ msgstr "寫" #: rhodecode/templates/admin/settings/settings.html:9 #: rhodecode/templates/admin/users/user_add.html:8 #: rhodecode/templates/admin/users/user_edit.html:9 -#: rhodecode/templates/admin/users/user_edit.html:122 +#: rhodecode/templates/admin/users/user_edit.html:126 #: rhodecode/templates/admin/users/users.html:9 #: rhodecode/templates/admin/users_groups/users_group_add.html:8 #: rhodecode/templates/admin/users_groups/users_group_edit.html:9 #: rhodecode/templates/admin/users_groups/users_groups.html:9 #: rhodecode/templates/base/base.html:197 -#: rhodecode/templates/base/base.html:337 -#: rhodecode/templates/base/base.html:339 -#: rhodecode/templates/base/base.html:341 +#: rhodecode/templates/base/base.html:350 +#: rhodecode/templates/base/base.html:352 +#: rhodecode/templates/base/base.html:354 msgid "Admin" msgstr "管理" -#: rhodecode/controllers/admin/permissions.py:65 +#: rhodecode/controllers/admin/permissions.py:69 msgid "disabled" msgstr "停用" -#: rhodecode/controllers/admin/permissions.py:67 -msgid "allowed with manual account activation" -msgstr "允許手動啟用帳號" - -#: rhodecode/controllers/admin/permissions.py:69 -msgid "allowed with automatic account activation" -msgstr "允許自動啟用帳號" - #: rhodecode/controllers/admin/permissions.py:71 -#: rhodecode/controllers/admin/permissions.py:74 +msgid "allowed with manual account activation" +msgstr "允許手動啟用帳號" + +#: rhodecode/controllers/admin/permissions.py:73 +msgid "allowed with automatic account activation" +msgstr "允許自動啟用帳號" + +#: rhodecode/controllers/admin/permissions.py:75 +#: rhodecode/controllers/admin/permissions.py:78 msgid "Disabled" msgstr "停用" -#: rhodecode/controllers/admin/permissions.py:72 -#: rhodecode/controllers/admin/permissions.py:75 +#: rhodecode/controllers/admin/permissions.py:76 +#: rhodecode/controllers/admin/permissions.py:79 msgid "Enabled" msgstr "啟用" -#: rhodecode/controllers/admin/permissions.py:116 +#: rhodecode/controllers/admin/permissions.py:122 msgid "Default permissions updated successfully" msgstr "預設權限更新完成" -#: rhodecode/controllers/admin/permissions.py:130 +#: rhodecode/controllers/admin/permissions.py:136 msgid "error occurred during update of permissions" msgstr "" -#: rhodecode/controllers/admin/repos.py:123 +#: rhodecode/controllers/admin/repos.py:125 msgid "--REMOVE FORK--" msgstr "" -#: rhodecode/controllers/admin/repos.py:192 +#: rhodecode/controllers/admin/repos.py:194 #, python-format msgid "created repository %s from %s" msgstr "建立版本庫 %s 到 %s" -#: rhodecode/controllers/admin/repos.py:196 +#: rhodecode/controllers/admin/repos.py:198 #, python-format msgid "created repository %s" msgstr "建立版本庫 %s" -#: rhodecode/controllers/admin/repos.py:227 +#: rhodecode/controllers/admin/repos.py:229 #, python-format msgid "error occurred during creation of repository %s" msgstr "" -#: rhodecode/controllers/admin/repos.py:319 +#: rhodecode/controllers/admin/repos.py:321 #, python-format msgid "Cannot delete %s it still contains attached forks" msgstr "" -#: rhodecode/controllers/admin/repos.py:348 +#: rhodecode/controllers/admin/repos.py:350 msgid "An error occurred during deletion of repository user" msgstr "" -#: rhodecode/controllers/admin/repos.py:367 +#: rhodecode/controllers/admin/repos.py:369 msgid "An error occurred during deletion of repository users groups" msgstr "" -#: rhodecode/controllers/admin/repos.py:385 +#: rhodecode/controllers/admin/repos.py:387 msgid "An error occurred during deletion of repository stats" msgstr "" -#: rhodecode/controllers/admin/repos.py:402 +#: rhodecode/controllers/admin/repos.py:404 msgid "An error occurred during cache invalidation" msgstr "" -#: rhodecode/controllers/admin/repos.py:422 -msgid "An error occurred during unlocking" -msgstr "" - -#: rhodecode/controllers/admin/repos.py:442 +#: rhodecode/controllers/admin/repos.py:444 msgid "Updated repository visibility in public journal" msgstr "" -#: rhodecode/controllers/admin/repos.py:446 +#: rhodecode/controllers/admin/repos.py:448 msgid "An error occurred during setting this repository in public journal" msgstr "" -#: rhodecode/controllers/admin/repos.py:451 rhodecode/model/validators.py:299 +#: rhodecode/controllers/admin/repos.py:453 rhodecode/model/validators.py:300 msgid "Token mismatch" msgstr "" -#: rhodecode/controllers/admin/repos.py:464 -msgid "Pulled from remote location" -msgstr "" - #: rhodecode/controllers/admin/repos.py:466 +msgid "Pulled from remote location" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:468 msgid "An error occurred during pull from remote location" msgstr "" -#: rhodecode/controllers/admin/repos.py:482 -msgid "Nothing" -msgstr "" - #: rhodecode/controllers/admin/repos.py:484 +msgid "Nothing" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:486 #, fuzzy, python-format msgid "Marked repo %s as fork of %s" msgstr "建立版本庫 %s 到 %s" -#: rhodecode/controllers/admin/repos.py:488 +#: rhodecode/controllers/admin/repos.py:490 msgid "An error occurred during this operation" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:116 +#: rhodecode/controllers/admin/repos_groups.py:120 #, python-format msgid "created repos group %s" msgstr "建立版本庫群組 %s" -#: rhodecode/controllers/admin/repos_groups.py:129 +#: rhodecode/controllers/admin/repos_groups.py:133 #, python-format msgid "error occurred during creation of repos group %s" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:163 +#: rhodecode/controllers/admin/repos_groups.py:167 #, python-format msgid "updated repos group %s" msgstr "更新版本庫群組 %s" -#: rhodecode/controllers/admin/repos_groups.py:176 +#: rhodecode/controllers/admin/repos_groups.py:180 #, python-format msgid "error occurred during update of repos group %s" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:194 +#: rhodecode/controllers/admin/repos_groups.py:198 #, python-format msgid "This group contains %s repositores and cannot be deleted" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:202 +#: rhodecode/controllers/admin/repos_groups.py:206 #, python-format msgid "removed repos group %s" msgstr "移除版本庫群組 %s" -#: rhodecode/controllers/admin/repos_groups.py:208 +#: rhodecode/controllers/admin/repos_groups.py:212 msgid "Cannot delete this group it still contains subgroups" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:213 -#: rhodecode/controllers/admin/repos_groups.py:218 +#: rhodecode/controllers/admin/repos_groups.py:217 +#: rhodecode/controllers/admin/repos_groups.py:222 #, python-format msgid "error occurred during deletion of repos group %s" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:238 +#: rhodecode/controllers/admin/repos_groups.py:243 msgid "An error occurred during deletion of group user" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:258 +#: rhodecode/controllers/admin/repos_groups.py:264 msgid "An error occurred during deletion of group users groups" msgstr "" -#: rhodecode/controllers/admin/settings.py:121 +#: rhodecode/controllers/admin/settings.py:123 #, python-format msgid "Repositories successfully rescanned added: %s,removed: %s" msgstr "" -#: rhodecode/controllers/admin/settings.py:129 +#: rhodecode/controllers/admin/settings.py:131 msgid "Whoosh reindex task scheduled" msgstr "Whoosh 重新索引工作排程" -#: rhodecode/controllers/admin/settings.py:160 +#: rhodecode/controllers/admin/settings.py:162 msgid "Updated application settings" msgstr "更新應用設定" -#: rhodecode/controllers/admin/settings.py:164 -#: rhodecode/controllers/admin/settings.py:275 +#: rhodecode/controllers/admin/settings.py:166 +#: rhodecode/controllers/admin/settings.py:299 msgid "error occurred during updating application settings" msgstr "" -#: rhodecode/controllers/admin/settings.py:200 +#: rhodecode/controllers/admin/settings.py:207 #, fuzzy msgid "Updated visualisation settings" msgstr "更新應用設定" -#: rhodecode/controllers/admin/settings.py:205 +#: rhodecode/controllers/admin/settings.py:212 msgid "error occurred during updating visualisation settings" msgstr "" -#: rhodecode/controllers/admin/settings.py:271 +#: rhodecode/controllers/admin/settings.py:295 #, fuzzy msgid "Updated VCS settings" msgstr "更新 mercurial 設定" -#: rhodecode/controllers/admin/settings.py:285 +#: rhodecode/controllers/admin/settings.py:309 msgid "Added new hook" msgstr "新增hook" -#: rhodecode/controllers/admin/settings.py:297 +#: rhodecode/controllers/admin/settings.py:321 msgid "Updated hooks" msgstr "更新hook" -#: rhodecode/controllers/admin/settings.py:301 +#: rhodecode/controllers/admin/settings.py:325 msgid "error occurred during hook creation" msgstr "" -#: rhodecode/controllers/admin/settings.py:320 +#: rhodecode/controllers/admin/settings.py:344 msgid "Email task created" msgstr "" -#: rhodecode/controllers/admin/settings.py:375 +#: rhodecode/controllers/admin/settings.py:399 msgid "You can't edit this user since it's crucial for entire application" msgstr "" -#: rhodecode/controllers/admin/settings.py:406 +#: rhodecode/controllers/admin/settings.py:430 msgid "Your account was updated successfully" msgstr "您的帳號已更新完成" -#: rhodecode/controllers/admin/settings.py:421 -#: rhodecode/controllers/admin/users.py:191 +#: rhodecode/controllers/admin/settings.py:445 +#: rhodecode/controllers/admin/users.py:196 #, python-format msgid "error occurred during update of user %s" msgstr "" @@ -625,100 +668,100 @@ msgstr "建立使用者 %s" msgid "error occurred during creation of user %s" msgstr "" -#: rhodecode/controllers/admin/users.py:171 +#: rhodecode/controllers/admin/users.py:176 msgid "User updated successfully" msgstr "使用者更新完成" -#: rhodecode/controllers/admin/users.py:207 -msgid "successfully deleted user" -msgstr "成功刪除使用者" - #: rhodecode/controllers/admin/users.py:212 +msgid "successfully deleted user" +msgstr "成功刪除使用者" + +#: rhodecode/controllers/admin/users.py:217 msgid "An error occurred during deletion of user" msgstr "" -#: rhodecode/controllers/admin/users.py:226 +#: rhodecode/controllers/admin/users.py:231 msgid "You can't edit this user" msgstr "您無法編輯這位使用者" -#: rhodecode/controllers/admin/users.py:266 +#: rhodecode/controllers/admin/users.py:272 msgid "Granted 'repository create' permission to user" msgstr "" -#: rhodecode/controllers/admin/users.py:271 -msgid "Revoked 'repository create' permission to user" -msgstr "" - #: rhodecode/controllers/admin/users.py:277 +msgid "Revoked 'repository create' permission to user" +msgstr "" + +#: rhodecode/controllers/admin/users.py:283 #, fuzzy msgid "Granted 'repository fork' permission to user" msgstr "版本庫權限" -#: rhodecode/controllers/admin/users.py:282 +#: rhodecode/controllers/admin/users.py:288 #, fuzzy msgid "Revoked 'repository fork' permission to user" msgstr "版本庫權限" -#: rhodecode/controllers/admin/users.py:288 -#: rhodecode/controllers/admin/users_groups.py:255 +#: rhodecode/controllers/admin/users.py:294 +#: rhodecode/controllers/admin/users_groups.py:279 msgid "An error occurred during permissions saving" msgstr "" -#: rhodecode/controllers/admin/users.py:303 -#, python-format -msgid "Added email %s to user" -msgstr "" - #: rhodecode/controllers/admin/users.py:309 +#, python-format +msgid "Added email %s to user" +msgstr "" + +#: rhodecode/controllers/admin/users.py:315 msgid "An error occurred during email saving" msgstr "" -#: rhodecode/controllers/admin/users.py:319 +#: rhodecode/controllers/admin/users.py:325 #, fuzzy msgid "Removed email from user" msgstr "移除版本庫群組 %s" -#: rhodecode/controllers/admin/users_groups.py:84 +#: rhodecode/controllers/admin/users_groups.py:86 #, python-format msgid "created users group %s" msgstr "建立使用者群組 %s" -#: rhodecode/controllers/admin/users_groups.py:95 +#: rhodecode/controllers/admin/users_groups.py:97 #, python-format msgid "error occurred during creation of users group %s" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:135 +#: rhodecode/controllers/admin/users_groups.py:164 #, python-format msgid "updated users group %s" msgstr "更新使用者群組 %s" -#: rhodecode/controllers/admin/users_groups.py:157 +#: rhodecode/controllers/admin/users_groups.py:186 #, python-format msgid "error occurred during update of users group %s" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:174 +#: rhodecode/controllers/admin/users_groups.py:203 msgid "successfully deleted users group" msgstr "成功移除使用者群組" -#: rhodecode/controllers/admin/users_groups.py:179 +#: rhodecode/controllers/admin/users_groups.py:208 msgid "An error occurred during deletion of users group" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:233 +#: rhodecode/controllers/admin/users_groups.py:257 msgid "Granted 'repository create' permission to users group" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:238 +#: rhodecode/controllers/admin/users_groups.py:262 msgid "Revoked 'repository create' permission to users group" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:244 +#: rhodecode/controllers/admin/users_groups.py:268 msgid "Granted 'repository fork' permission to users group" msgstr "" -#: rhodecode/controllers/admin/users_groups.py:249 +#: rhodecode/controllers/admin/users_groups.py:273 msgid "Revoked 'repository fork' permission to users group" msgstr "" @@ -730,315 +773,340 @@ msgstr "您必須是註冊使用者才能執行這個動作" msgid "You need to be a signed in to view this page" msgstr "您必須登入後才能瀏覽這個頁面" -#: rhodecode/lib/diffs.py:86 +#: rhodecode/lib/diffs.py:74 +msgid "binary file" +msgstr "二進位檔" + +#: rhodecode/lib/diffs.py:90 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "" -#: rhodecode/lib/diffs.py:96 +#: rhodecode/lib/diffs.py:100 msgid "No changes detected" msgstr "尚未有任何變更" -#: rhodecode/lib/helpers.py:372 +#: rhodecode/lib/helpers.py:373 #, python-format msgid "%a, %d %b %Y %H:%M:%S" msgstr "" -#: rhodecode/lib/helpers.py:484 +#: rhodecode/lib/helpers.py:485 msgid "True" msgstr "真" -#: rhodecode/lib/helpers.py:488 +#: rhodecode/lib/helpers.py:489 msgid "False" msgstr "假" +#: rhodecode/lib/helpers.py:529 +#, fuzzy, python-format +msgid "Deleted branch: %s" +msgstr "刪除版本庫 %s" + #: rhodecode/lib/helpers.py:532 +#, fuzzy, python-format +msgid "Created tag: %s" +msgstr "建立使用者 %s" + +#: rhodecode/lib/helpers.py:545 #, fuzzy msgid "Changeset not found" msgstr "修改" -#: rhodecode/lib/helpers.py:555 +#: rhodecode/lib/helpers.py:588 #, python-format msgid "Show all combined changesets %s->%s" msgstr "" -#: rhodecode/lib/helpers.py:561 +#: rhodecode/lib/helpers.py:594 msgid "compare view" msgstr "" -#: rhodecode/lib/helpers.py:581 +#: rhodecode/lib/helpers.py:614 msgid "and" msgstr "和" -#: rhodecode/lib/helpers.py:582 +#: rhodecode/lib/helpers.py:615 #, python-format msgid "%s more" msgstr "" -#: rhodecode/lib/helpers.py:583 rhodecode/templates/changelog/changelog.html:48 +#: rhodecode/lib/helpers.py:616 rhodecode/templates/changelog/changelog.html:51 msgid "revisions" msgstr "修訂" -#: rhodecode/lib/helpers.py:606 -msgid "fork name " +#: rhodecode/lib/helpers.py:640 +#, fuzzy, python-format +msgid "fork name %s" msgstr "fork 名稱" -#: rhodecode/lib/helpers.py:620 +#: rhodecode/lib/helpers.py:653 #: rhodecode/templates/pullrequests/pullrequest_show.html:4 #: rhodecode/templates/pullrequests/pullrequest_show.html:12 #, python-format msgid "Pull request #%s" msgstr "" -#: rhodecode/lib/helpers.py:626 +#: rhodecode/lib/helpers.py:659 msgid "[deleted] repository" msgstr "" -#: rhodecode/lib/helpers.py:628 rhodecode/lib/helpers.py:638 +#: rhodecode/lib/helpers.py:661 rhodecode/lib/helpers.py:671 msgid "[created] repository" msgstr "" -#: rhodecode/lib/helpers.py:630 +#: rhodecode/lib/helpers.py:663 #, fuzzy msgid "[created] repository as fork" msgstr "建立版本庫 %s" -#: rhodecode/lib/helpers.py:632 rhodecode/lib/helpers.py:640 +#: rhodecode/lib/helpers.py:665 rhodecode/lib/helpers.py:673 msgid "[forked] repository" msgstr "" -#: rhodecode/lib/helpers.py:634 rhodecode/lib/helpers.py:642 +#: rhodecode/lib/helpers.py:667 rhodecode/lib/helpers.py:675 msgid "[updated] repository" msgstr "" -#: rhodecode/lib/helpers.py:636 +#: rhodecode/lib/helpers.py:669 msgid "[delete] repository" msgstr "" -#: rhodecode/lib/helpers.py:644 +#: rhodecode/lib/helpers.py:677 #, fuzzy msgid "[created] user" msgstr "建立使用者 %s" -#: rhodecode/lib/helpers.py:646 +#: rhodecode/lib/helpers.py:679 #, fuzzy msgid "[updated] user" msgstr "更新使用者群組 %s" -#: rhodecode/lib/helpers.py:648 +#: rhodecode/lib/helpers.py:681 #, fuzzy msgid "[created] users group" msgstr "建立使用者群組 %s" -#: rhodecode/lib/helpers.py:650 +#: rhodecode/lib/helpers.py:683 #, fuzzy msgid "[updated] users group" msgstr "更新使用者群組 %s" -#: rhodecode/lib/helpers.py:652 +#: rhodecode/lib/helpers.py:685 msgid "[commented] on revision in repository" msgstr "" -#: rhodecode/lib/helpers.py:654 +#: rhodecode/lib/helpers.py:687 #, fuzzy msgid "[commented] on pull request for" msgstr "建立使用者 %s" -#: rhodecode/lib/helpers.py:656 +#: rhodecode/lib/helpers.py:689 msgid "[closed] pull request for" msgstr "" -#: rhodecode/lib/helpers.py:658 +#: rhodecode/lib/helpers.py:691 msgid "[pushed] into" msgstr "" -#: rhodecode/lib/helpers.py:660 +#: rhodecode/lib/helpers.py:693 msgid "[committed via RhodeCode] into repository" msgstr "" -#: rhodecode/lib/helpers.py:662 +#: rhodecode/lib/helpers.py:695 msgid "[pulled from remote] into repository" msgstr "" -#: rhodecode/lib/helpers.py:664 +#: rhodecode/lib/helpers.py:697 msgid "[pulled] from" msgstr "" -#: rhodecode/lib/helpers.py:666 +#: rhodecode/lib/helpers.py:699 msgid "[started following] repository" msgstr "" -#: rhodecode/lib/helpers.py:668 +#: rhodecode/lib/helpers.py:701 msgid "[stopped following] repository" msgstr "" -#: rhodecode/lib/helpers.py:840 +#: rhodecode/lib/helpers.py:877 #, python-format msgid " and %s more" msgstr "" -#: rhodecode/lib/helpers.py:844 +#: rhodecode/lib/helpers.py:881 msgid "No Files" msgstr "沒有檔案" -#: rhodecode/lib/utils2.py:335 +#: rhodecode/lib/utils2.py:403 #, fuzzy, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "年" -#: rhodecode/lib/utils2.py:336 +#: rhodecode/lib/utils2.py:404 #, fuzzy, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "月" -#: rhodecode/lib/utils2.py:337 +#: rhodecode/lib/utils2.py:405 #, fuzzy, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "日" -#: rhodecode/lib/utils2.py:338 +#: rhodecode/lib/utils2.py:406 #, fuzzy, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "時" -#: rhodecode/lib/utils2.py:339 +#: rhodecode/lib/utils2.py:407 #, fuzzy, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "分" -#: rhodecode/lib/utils2.py:340 +#: rhodecode/lib/utils2.py:408 #, fuzzy, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "秒" -#: rhodecode/lib/utils2.py:355 +#: rhodecode/lib/utils2.py:424 +#, python-format +msgid "in %s" +msgstr "" + +#: rhodecode/lib/utils2.py:426 #, fuzzy, python-format msgid "%s ago" msgstr "之前" -#: rhodecode/lib/utils2.py:357 +#: rhodecode/lib/utils2.py:428 +#, fuzzy, python-format +msgid "in %s and %s" +msgstr "下載 %s 為 %s" + +#: rhodecode/lib/utils2.py:431 #, python-format msgid "%s and %s ago" msgstr "" -#: rhodecode/lib/utils2.py:360 +#: rhodecode/lib/utils2.py:434 msgid "just now" msgstr "現在" -#: rhodecode/lib/celerylib/tasks.py:269 +#: rhodecode/lib/celerylib/tasks.py:270 #, fuzzy msgid "password reset link" msgstr "您的密碼重設連結已寄出" +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 rhodecode/model/db.py:1180 +#, fuzzy +msgid "Repository no access" +msgstr "個版本庫" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1181 +#, fuzzy +msgid "Repository read access" +msgstr "這個版本庫已經存在" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1182 +#, fuzzy +msgid "Repository write access" +msgstr "個版本庫" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1183 +#, fuzzy +msgid "Repository admin access" +msgstr "個版本庫" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1185 +#, fuzzy +msgid "Repositories Group no access" +msgstr "版本庫群組" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1186 +#, fuzzy +msgid "Repositories Group read access" +msgstr "版本庫群組" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1187 +#, fuzzy +msgid "Repositories Group write access" +msgstr "版本庫群組" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1188 +#, fuzzy +msgid "Repositories Group admin access" +msgstr "版本庫群組" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1190 +#, fuzzy +msgid "RhodeCode Administrator" +msgstr "使用者管理員" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1191 +#, fuzzy +msgid "Repository creation disabled" +msgstr "版本庫建立" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1192 +#, fuzzy +msgid "Repository creation enabled" +msgstr "版本庫建立" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1193 +#, fuzzy +msgid "Repository forking disabled" +msgstr "版本庫建立" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1194 +#, fuzzy +msgid "Repository forking enabled" +msgstr "版本庫建立" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1195 +#, fuzzy +msgid "Register disabled" +msgstr "停用" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1196 +msgid "Register new user with RhodeCode with manual activation" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1199 +msgid "Register new user with RhodeCode with auto activation" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1640 +msgid "Not Reviewed" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1641 +#, fuzzy +msgid "Approved" +msgstr "移除" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1642 +msgid "Rejected" +msgstr "" + +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1643 +msgid "Under Review" +msgstr "" + #: rhodecode/model/comment.py:110 #, python-format msgid "on line %s" msgstr "" -#: rhodecode/model/comment.py:157 +#: rhodecode/model/comment.py:173 msgid "[Mention]" msgstr "" -#: rhodecode/model/db.py:1140 -#, fuzzy -msgid "Repository no access" -msgstr "個版本庫" - -#: rhodecode/model/db.py:1141 -#, fuzzy -msgid "Repository read access" -msgstr "這個版本庫已經存在" - -#: rhodecode/model/db.py:1142 -#, fuzzy -msgid "Repository write access" -msgstr "個版本庫" - -#: rhodecode/model/db.py:1143 -#, fuzzy -msgid "Repository admin access" -msgstr "個版本庫" - -#: rhodecode/model/db.py:1145 -#, fuzzy -msgid "Repositories Group no access" -msgstr "版本庫群組" - -#: rhodecode/model/db.py:1146 -#, fuzzy -msgid "Repositories Group read access" -msgstr "版本庫群組" - -#: rhodecode/model/db.py:1147 -#, fuzzy -msgid "Repositories Group write access" -msgstr "版本庫群組" - -#: rhodecode/model/db.py:1148 -#, fuzzy -msgid "Repositories Group admin access" -msgstr "版本庫群組" - -#: rhodecode/model/db.py:1150 -#, fuzzy -msgid "RhodeCode Administrator" -msgstr "使用者管理員" - -#: rhodecode/model/db.py:1151 -#, fuzzy -msgid "Repository creation disabled" -msgstr "版本庫建立" - -#: rhodecode/model/db.py:1152 -#, fuzzy -msgid "Repository creation enabled" -msgstr "版本庫建立" - -#: rhodecode/model/db.py:1153 -#, fuzzy -msgid "Repository forking disabled" -msgstr "版本庫建立" - -#: rhodecode/model/db.py:1154 -#, fuzzy -msgid "Repository forking enabled" -msgstr "版本庫建立" - -#: rhodecode/model/db.py:1155 -#, fuzzy -msgid "Register disabled" -msgstr "停用" - -#: rhodecode/model/db.py:1156 -msgid "Register new user with RhodeCode with manual activation" -msgstr "" - -#: rhodecode/model/db.py:1159 -msgid "Register new user with RhodeCode with auto activation" -msgstr "" - -#: rhodecode/model/db.py:1579 -msgid "Not Reviewed" -msgstr "" - -#: rhodecode/model/db.py:1580 -#, fuzzy -msgid "Approved" -msgstr "移除" - -#: rhodecode/model/db.py:1581 -msgid "Rejected" -msgstr "" - -#: rhodecode/model/db.py:1582 -msgid "Under Review" -msgstr "" - #: rhodecode/model/forms.py:43 msgid "Please enter a login" msgstr "請登入" @@ -1058,37 +1126,41 @@ msgid "Enter %(min)i characters or more" msgstr "" #: rhodecode/model/notification.py:220 -msgid "commented on commit" +#, python-format +msgid "commented on commit at %(when)s" msgstr "" #: rhodecode/model/notification.py:221 -#, fuzzy -msgid "sent message" +#, fuzzy, python-format +msgid "sent message at %(when)s" msgstr "遞交資訊" #: rhodecode/model/notification.py:222 -msgid "mentioned you" +#, python-format +msgid "mentioned you at %(when)s" msgstr "" #: rhodecode/model/notification.py:223 -#, fuzzy -msgid "registered in RhodeCode" +#, fuzzy, python-format +msgid "registered in RhodeCode at %(when)s" msgstr "您已經成功註冊rhodecode" #: rhodecode/model/notification.py:224 -msgid "opened new pull request" -msgstr "" +#, fuzzy, python-format +msgid "opened new pull request at %(when)s" +msgstr "建立使用者 %s" #: rhodecode/model/notification.py:225 -msgid "commented on pull request" -msgstr "" - -#: rhodecode/model/pull_request.py:84 +#, fuzzy, python-format +msgid "commented on pull request at %(when)s" +msgstr "建立使用者 %s" + +#: rhodecode/model/pull_request.py:90 #, python-format msgid "%(user)s wants you to review pull request #%(pr_id)s" msgstr "" -#: rhodecode/model/scm.py:535 +#: rhodecode/model/scm.py:542 #, fuzzy msgid "latest tip" msgstr "最後登入" @@ -1098,155 +1170,160 @@ msgstr "最後登入" msgid "new user registration" msgstr "[RhodeCode] 新使用者註冊" -#: rhodecode/model/user.py:255 rhodecode/model/user.py:277 -#: rhodecode/model/user.py:299 +#: rhodecode/model/user.py:255 rhodecode/model/user.py:279 +#: rhodecode/model/user.py:301 msgid "You can't Edit this user since it's crucial for entire application" msgstr "您無法編輯這個使用者,因為他是系統帳號" -#: rhodecode/model/user.py:323 +#: rhodecode/model/user.py:325 msgid "You can't remove this user since it's crucial for entire application" msgstr "您無法移除這個使用者,因為他是系統帳號" -#: rhodecode/model/user.py:329 +#: rhodecode/model/user.py:331 #, fuzzy, python-format msgid "" "user \"%s\" still owns %s repositories and cannot be removed. Switch " "owners or remove those repositories. %s" msgstr "這個使用者擁有 %s 個版本庫所以無法移除,請先變更版本庫擁有者或者刪除版本庫" -#: rhodecode/model/validators.py:35 rhodecode/model/validators.py:36 +#: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37 msgid "Value cannot be an empty list" msgstr "" -#: rhodecode/model/validators.py:82 +#: rhodecode/model/validators.py:83 #, fuzzy, python-format msgid "Username \"%(username)s\" already exists" msgstr "使用者名稱已存在" -#: rhodecode/model/validators.py:84 +#: rhodecode/model/validators.py:85 #, python-format msgid "Username \"%(username)s\" is forbidden" msgstr "" -#: rhodecode/model/validators.py:86 +#: rhodecode/model/validators.py:87 msgid "" "Username may only contain alphanumeric characters underscores, periods or" " dashes and must begin with alphanumeric character" msgstr "使用者名稱只能使用字母數字、底線、小數點或破折號,且必須使用數字或字母開頭" -#: rhodecode/model/validators.py:114 +#: rhodecode/model/validators.py:115 #, fuzzy, python-format msgid "Username %(username)s is not valid" msgstr "使用者名稱或群組名稱無效" -#: rhodecode/model/validators.py:133 +#: rhodecode/model/validators.py:134 #, fuzzy msgid "Invalid users group name" msgstr "無效的使用者名稱" -#: rhodecode/model/validators.py:134 +#: rhodecode/model/validators.py:135 #, fuzzy, python-format msgid "Users group \"%(usersgroup)s\" already exists" msgstr "這個使用者群組已存在" -#: rhodecode/model/validators.py:136 +#: rhodecode/model/validators.py:137 msgid "" "users group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" msgstr "群組名稱只能使用字母數字、底線、小數點或破折號,且必須使用數字或字母開頭" -#: rhodecode/model/validators.py:174 +#: rhodecode/model/validators.py:175 msgid "Cannot assign this group as parent" msgstr "" -#: rhodecode/model/validators.py:175 +#: rhodecode/model/validators.py:176 #, fuzzy, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "使用者名稱已存在" -#: rhodecode/model/validators.py:177 +#: rhodecode/model/validators.py:178 #, fuzzy, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "這個版本庫已經存在" -#: rhodecode/model/validators.py:235 +#: rhodecode/model/validators.py:236 #, fuzzy msgid "Invalid characters (non-ascii) in password" msgstr "無效的字元在密碼中" -#: rhodecode/model/validators.py:250 +#: rhodecode/model/validators.py:251 msgid "Passwords do not match" msgstr "密碼不相符" -#: rhodecode/model/validators.py:267 -msgid "invalid password" -msgstr "無效的密碼" - #: rhodecode/model/validators.py:268 -msgid "invalid user name" -msgstr "無效的使用者名稱" +msgid "invalid password" +msgstr "無效的密碼" #: rhodecode/model/validators.py:269 +msgid "invalid user name" +msgstr "無效的使用者名稱" + +#: rhodecode/model/validators.py:270 msgid "Your account is disabled" msgstr "您的帳號已被停用" -#: rhodecode/model/validators.py:313 +#: rhodecode/model/validators.py:314 #, fuzzy, python-format msgid "Repository name %(repo)s is disallowed" msgstr "不允許的版本庫名稱" -#: rhodecode/model/validators.py:315 +#: rhodecode/model/validators.py:316 #, fuzzy, python-format msgid "Repository named %(repo)s already exists" msgstr "這個版本庫已經存在" -#: rhodecode/model/validators.py:316 +#: rhodecode/model/validators.py:317 #, fuzzy, python-format msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" msgstr "這個版本庫已存在於群組 \"%s\"" -#: rhodecode/model/validators.py:318 +#: rhodecode/model/validators.py:319 #, fuzzy, python-format msgid "Repositories group with name \"%(repo)s\" already exists" msgstr "這個版本庫已經存在" -#: rhodecode/model/validators.py:431 +#: rhodecode/model/validators.py:432 msgid "invalid clone url" msgstr "無效的複製URL" -#: rhodecode/model/validators.py:432 +#: rhodecode/model/validators.py:433 msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url" msgstr "" -#: rhodecode/model/validators.py:457 +#: rhodecode/model/validators.py:458 #, fuzzy msgid "Fork have to be the same type as parent" msgstr "Fork 必須使用相同的版本庫類型" -#: rhodecode/model/validators.py:478 +#: rhodecode/model/validators.py:473 +#, fuzzy +msgid "You don't have permissions to create repository in this group" +msgstr "您沒有權限瀏覽這個頁面" + +#: rhodecode/model/validators.py:498 msgid "This username or users group name is not valid" msgstr "使用者名稱或群組名稱無效" -#: rhodecode/model/validators.py:562 +#: rhodecode/model/validators.py:582 msgid "This is not a valid path" msgstr "不是一個有效的路徑" -#: rhodecode/model/validators.py:577 +#: rhodecode/model/validators.py:597 msgid "This e-mail address is already taken" msgstr "這個郵件位址已經使用了" -#: rhodecode/model/validators.py:597 +#: rhodecode/model/validators.py:617 #, fuzzy, python-format msgid "e-mail \"%(email)s\" does not exist." msgstr "這個郵件位址不存在" -#: rhodecode/model/validators.py:634 +#: rhodecode/model/validators.py:654 msgid "" "The LDAP Login attribute of the CN must be specified - this is the name " "of the attribute that is equivalent to \"username\"" msgstr "" -#: rhodecode/model/validators.py:653 +#: rhodecode/model/validators.py:673 #, python-format msgid "Revisions %(revs)s are already part of pull request or have set status" msgstr "" @@ -1269,7 +1346,7 @@ msgstr "快速過濾..." #: rhodecode/templates/index_base.html:6 #: rhodecode/templates/admin/repos/repos.html:9 -#: rhodecode/templates/base/base.html:221 +#: rhodecode/templates/base/base.html:233 msgid "repositories" msgstr "個版本庫" @@ -1280,6 +1357,7 @@ msgid "ADD REPOSITORY" msgstr "新增版本庫" #: rhodecode/templates/index_base.html:29 +#: rhodecode/templates/index_base.html:136 #: 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 @@ -1289,9 +1367,10 @@ msgid "Group name" msgstr "群組名稱" #: rhodecode/templates/index_base.html:30 -#: rhodecode/templates/index_base.html:71 -#: rhodecode/templates/index_base.html:142 -#: rhodecode/templates/index_base.html:168 +#: rhodecode/templates/index_base.html:72 +#: rhodecode/templates/index_base.html:138 +#: rhodecode/templates/index_base.html:176 +#: rhodecode/templates/index_base.html:266 #: rhodecode/templates/admin/repos/repo_add_base.html:56 #: rhodecode/templates/admin/repos/repo_edit.html:75 #: rhodecode/templates/admin/repos/repos.html:72 @@ -1300,144 +1379,138 @@ msgstr "群組名稱" #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34 #: rhodecode/templates/forks/fork.html:59 #: rhodecode/templates/settings/repo_settings.html:66 -#: rhodecode/templates/summary/summary.html:105 +#: rhodecode/templates/summary/summary.html:114 msgid "Description" msgstr "描述" #: rhodecode/templates/index_base.html:40 -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47 msgid "Repositories group" msgstr "版本庫群組" -#: rhodecode/templates/index_base.html:70 -#: rhodecode/templates/index_base.html:166 +#: rhodecode/templates/index_base.html:71 +#: rhodecode/templates/index_base.html:174 +#: rhodecode/templates/index_base.html:264 #: rhodecode/templates/admin/repos/repo_add_base.html:9 #: rhodecode/templates/admin/repos/repo_edit.html:32 #: rhodecode/templates/admin/repos/repos.html:70 -#: rhodecode/templates/admin/users/user_edit.html:192 +#: rhodecode/templates/admin/users/user_edit.html:196 #: rhodecode/templates/admin/users/user_edit_my_account.html:59 -#: rhodecode/templates/admin/users/user_edit_my_account.html:157 -#: rhodecode/templates/admin/users/user_edit_my_account.html:193 +#: rhodecode/templates/admin/users/user_edit_my_account.html:180 +#: rhodecode/templates/admin/users/user_edit_my_account.html:216 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:6 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:184 #: rhodecode/templates/bookmarks/bookmarks.html:36 #: rhodecode/templates/bookmarks/bookmarks_data.html:6 -#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches.html:50 +#: rhodecode/templates/branches/branches_data.html:6 #: rhodecode/templates/files/files_browser.html:47 -#: rhodecode/templates/journal/journal.html:59 -#: rhodecode/templates/journal/journal.html:107 -#: rhodecode/templates/journal/journal.html:186 +#: rhodecode/templates/journal/journal.html:62 +#: rhodecode/templates/journal/journal.html:168 +#: rhodecode/templates/journal/journal_page_repos.html:7 #: rhodecode/templates/settings/repo_settings.html:31 #: rhodecode/templates/summary/summary.html:43 -#: rhodecode/templates/summary/summary.html:123 -#: rhodecode/templates/tags/tags.html:36 +#: rhodecode/templates/summary/summary.html:132 +#: rhodecode/templates/tags/tags.html:51 #: rhodecode/templates/tags/tags_data.html:6 msgid "Name" msgstr "名稱" -#: rhodecode/templates/index_base.html:72 +#: rhodecode/templates/index_base.html:73 msgid "Last change" msgstr "最後修改" -#: rhodecode/templates/index_base.html:73 -#: rhodecode/templates/index_base.html:171 -#: rhodecode/templates/admin/users/user_edit_my_account.html:159 -#: rhodecode/templates/journal/journal.html:188 +#: rhodecode/templates/index_base.html:74 +#: rhodecode/templates/index_base.html:179 +#: rhodecode/templates/admin/users/user_edit_my_account.html:182 +#: rhodecode/templates/journal/journal.html:170 msgid "Tip" msgstr "" -#: rhodecode/templates/index_base.html:74 -#: rhodecode/templates/index_base.html:173 +#: rhodecode/templates/index_base.html:75 +#: rhodecode/templates/index_base.html:181 +#: rhodecode/templates/index_base.html:269 #: rhodecode/templates/admin/repos/repo_edit.html:121 #: rhodecode/templates/admin/repos/repos.html:73 msgid "Owner" msgstr "擁有者" -#: rhodecode/templates/index_base.html:75 +#: rhodecode/templates/index_base.html:76 #: rhodecode/templates/summary/summary.html:48 #: rhodecode/templates/summary/summary.html:51 msgid "RSS" msgstr "" -#: rhodecode/templates/index_base.html:76 +#: rhodecode/templates/index_base.html:77 msgid "Atom" msgstr "" -#: rhodecode/templates/index_base.html:110 -#: rhodecode/templates/index_base.html:112 -#, python-format -msgid "Subscribe to %s rss feed" -msgstr "訂閱 %s rss" - -#: rhodecode/templates/index_base.html:117 -#: rhodecode/templates/index_base.html:119 -#, python-format -msgid "Subscribe to %s atom feed" -msgstr "訂閱 %s atom" - -#: rhodecode/templates/index_base.html:140 -#, fuzzy -msgid "Group Name" -msgstr "群組名稱" - -#: rhodecode/templates/index_base.html:158 -#: rhodecode/templates/index_base.html:198 +#: rhodecode/templates/index_base.html:167 +#: rhodecode/templates/index_base.html:207 +#: rhodecode/templates/index_base.html:291 #: rhodecode/templates/admin/repos/repos.html:94 -#: rhodecode/templates/admin/users/user_edit_my_account.html:179 +#: rhodecode/templates/admin/users/user_edit_my_account.html:202 #: rhodecode/templates/admin/users/users.html:107 #: rhodecode/templates/bookmarks/bookmarks.html:60 -#: rhodecode/templates/branches/branches.html:77 -#: rhodecode/templates/journal/journal.html:211 -#: rhodecode/templates/tags/tags.html:60 +#: rhodecode/templates/branches/branches.html:76 +#: rhodecode/templates/journal/journal.html:193 +#: rhodecode/templates/tags/tags.html:77 msgid "Click to sort ascending" msgstr "" -#: rhodecode/templates/index_base.html:159 -#: rhodecode/templates/index_base.html:199 +#: rhodecode/templates/index_base.html:168 +#: rhodecode/templates/index_base.html:208 +#: rhodecode/templates/index_base.html:292 #: rhodecode/templates/admin/repos/repos.html:95 -#: rhodecode/templates/admin/users/user_edit_my_account.html:180 +#: rhodecode/templates/admin/users/user_edit_my_account.html:203 #: rhodecode/templates/admin/users/users.html:108 #: rhodecode/templates/bookmarks/bookmarks.html:61 -#: rhodecode/templates/branches/branches.html:78 -#: rhodecode/templates/journal/journal.html:212 -#: rhodecode/templates/tags/tags.html:61 +#: rhodecode/templates/branches/branches.html:77 +#: rhodecode/templates/journal/journal.html:194 +#: rhodecode/templates/tags/tags.html:78 msgid "Click to sort descending" msgstr "" -#: rhodecode/templates/index_base.html:169 +#: rhodecode/templates/index_base.html:177 +#: rhodecode/templates/index_base.html:267 #, fuzzy msgid "Last Change" msgstr "最後修改" -#: rhodecode/templates/index_base.html:200 +#: rhodecode/templates/index_base.html:209 +#: rhodecode/templates/index_base.html:293 #: rhodecode/templates/admin/repos/repos.html:96 -#: rhodecode/templates/admin/users/user_edit_my_account.html:181 +#: rhodecode/templates/admin/users/user_edit_my_account.html:204 #: rhodecode/templates/admin/users/users.html:109 #: rhodecode/templates/bookmarks/bookmarks.html:62 -#: rhodecode/templates/branches/branches.html:79 -#: rhodecode/templates/journal/journal.html:213 -#: rhodecode/templates/tags/tags.html:62 +#: rhodecode/templates/branches/branches.html:78 +#: rhodecode/templates/journal/journal.html:195 +#: rhodecode/templates/tags/tags.html:79 msgid "No records found." msgstr "" -#: rhodecode/templates/index_base.html:201 +#: rhodecode/templates/index_base.html:210 +#: rhodecode/templates/index_base.html:294 #: rhodecode/templates/admin/repos/repos.html:97 -#: rhodecode/templates/admin/users/user_edit_my_account.html:182 +#: rhodecode/templates/admin/users/user_edit_my_account.html:205 #: rhodecode/templates/admin/users/users.html:110 #: rhodecode/templates/bookmarks/bookmarks.html:63 -#: rhodecode/templates/branches/branches.html:80 -#: rhodecode/templates/journal/journal.html:214 -#: rhodecode/templates/tags/tags.html:63 +#: rhodecode/templates/branches/branches.html:79 +#: rhodecode/templates/journal/journal.html:196 +#: rhodecode/templates/tags/tags.html:80 msgid "Data error." msgstr "" -#: rhodecode/templates/index_base.html:202 +#: rhodecode/templates/index_base.html:211 +#: rhodecode/templates/index_base.html:295 #: rhodecode/templates/admin/repos/repos.html:98 -#: rhodecode/templates/admin/users/user_edit_my_account.html:183 +#: rhodecode/templates/admin/users/user_edit_my_account.html:206 #: rhodecode/templates/admin/users/users.html:111 #: rhodecode/templates/bookmarks/bookmarks.html:64 -#: rhodecode/templates/branches/branches.html:81 -#: rhodecode/templates/journal/journal.html:215 -#: rhodecode/templates/tags/tags.html:64 +#: rhodecode/templates/branches/branches.html:80 +#: rhodecode/templates/journal/journal.html:54 +#: rhodecode/templates/journal/journal.html:197 +#: rhodecode/templates/tags/tags.html:81 #, fuzzy msgid "Loading..." msgstr "載入中..." @@ -1456,7 +1529,7 @@ msgstr "登入" #: rhodecode/templates/admin/users/user_edit.html:50 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:26 #: rhodecode/templates/base/base.html:83 -#: rhodecode/templates/summary/summary.html:122 +#: rhodecode/templates/summary/summary.html:131 msgid "Username" msgstr "帳號" @@ -1514,23 +1587,23 @@ msgstr "確認密碼" #: rhodecode/templates/register.html:47 #: rhodecode/templates/admin/users/user_add.html:59 -#: rhodecode/templates/admin/users/user_edit.html:86 +#: rhodecode/templates/admin/users/user_edit.html:90 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:53 msgid "First Name" msgstr "名" #: rhodecode/templates/register.html:56 #: rhodecode/templates/admin/users/user_add.html:68 -#: rhodecode/templates/admin/users/user_edit.html:95 +#: rhodecode/templates/admin/users/user_edit.html:99 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:62 msgid "Last Name" msgstr "姓" #: rhodecode/templates/register.html:65 #: rhodecode/templates/admin/users/user_add.html:77 -#: rhodecode/templates/admin/users/user_edit.html:104 +#: rhodecode/templates/admin/users/user_edit.html:108 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:71 -#: rhodecode/templates/summary/summary.html:124 +#: rhodecode/templates/summary/summary.html:133 msgid "Email" msgstr "電子郵件" @@ -1543,6 +1616,7 @@ msgid "Your account must wait for activa msgstr "您的帳號註冊後將等待管理員啟用" #: rhodecode/templates/repo_switcher_list.html:11 +#: rhodecode/templates/admin/defaults/defaults.html:44 #: rhodecode/templates/admin/repos/repo_add_base.html:65 #: rhodecode/templates/admin/repos/repo_edit.html:85 #: rhodecode/templates/settings/repo_settings.html:76 @@ -1570,7 +1644,7 @@ msgid "tags" msgstr "標籤" #: rhodecode/templates/switch_to_list.html:22 -#: rhodecode/templates/tags/tags_data.html:33 +#: rhodecode/templates/tags/tags_data.html:38 msgid "There are no tags yet" msgstr "沒有任何標籤" @@ -1594,20 +1668,22 @@ msgstr "管理員日誌" #: rhodecode/templates/admin/repos/repos.html:74 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:9 -#: rhodecode/templates/journal/journal.html:61 -#: rhodecode/templates/journal/journal.html:62 +#: rhodecode/templates/journal/journal_page_repos.html:9 +#: rhodecode/templates/journal/journal_page_repos.html:10 msgid "Action" msgstr "動作" #: rhodecode/templates/admin/admin_log.html:7 +#: rhodecode/templates/admin/permissions/permissions.html:41 msgid "Repository" msgstr "版本庫" #: rhodecode/templates/admin/admin_log.html:8 #: rhodecode/templates/bookmarks/bookmarks.html:37 #: rhodecode/templates/bookmarks/bookmarks_data.html:7 -#: rhodecode/templates/branches/branches.html:52 -#: rhodecode/templates/tags/tags.html:37 +#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches_data.html:7 +#: rhodecode/templates/tags/tags.html:52 #: rhodecode/templates/tags/tags_data.html:7 msgid "Date" msgstr "時間" @@ -1616,10 +1692,82 @@ msgstr "時間" msgid "From IP" msgstr "來源IP" -#: rhodecode/templates/admin/admin_log.html:53 +#: rhodecode/templates/admin/admin_log.html:57 msgid "No actions yet" msgstr "" +#: rhodecode/templates/admin/defaults/defaults.html:5 +#: rhodecode/templates/admin/defaults/defaults.html:25 +#, fuzzy +msgid "Repositories defaults" +msgstr "版本庫群組" + +#: rhodecode/templates/admin/defaults/defaults.html:11 +#, fuzzy +msgid "Defaults" +msgstr "刪除" + +#: rhodecode/templates/admin/defaults/defaults.html:35 +#: rhodecode/templates/admin/repos/repo_add_base.html:38 +#: rhodecode/templates/admin/repos/repo_edit.html:58 +msgid "Type" +msgstr "類型" + +#: rhodecode/templates/admin/defaults/defaults.html:48 +#: rhodecode/templates/admin/repos/repo_add_base.html:69 +#: rhodecode/templates/admin/repos/repo_edit.html:89 +#: rhodecode/templates/forks/fork.html:72 +#: rhodecode/templates/settings/repo_settings.html:80 +msgid "" +"Private repositories are only visible to people explicitly added as " +"collaborators." +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:55 +#: rhodecode/templates/admin/repos/repo_edit.html:94 +msgid "Enable statistics" +msgstr "啟用統計" + +#: rhodecode/templates/admin/defaults/defaults.html:59 +#: rhodecode/templates/admin/repos/repo_edit.html:98 +msgid "Enable statistics window on summary page." +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:65 +#: rhodecode/templates/admin/repos/repo_edit.html:103 +msgid "Enable downloads" +msgstr "啟用下載" + +#: rhodecode/templates/admin/defaults/defaults.html:69 +#: rhodecode/templates/admin/repos/repo_edit.html:107 +msgid "Enable download menu on summary page." +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:75 +#: rhodecode/templates/admin/repos/repo_edit.html:112 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66 +#, fuzzy +msgid "Enable locking" +msgstr "啟用" + +#: rhodecode/templates/admin/defaults/defaults.html:79 +#: rhodecode/templates/admin/repos/repo_edit.html:116 +msgid "Enable lock-by-pulling on repository." +msgstr "" + +#: rhodecode/templates/admin/defaults/defaults.html:84 +#: rhodecode/templates/admin/ldap/ldap.html:89 +#: rhodecode/templates/admin/repos/repo_edit.html:141 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74 +#: rhodecode/templates/admin/settings/hooks.html:73 +#: rhodecode/templates/admin/users/user_edit.html:133 +#: rhodecode/templates/admin/users/user_edit.html:178 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:135 +#: rhodecode/templates/settings/repo_settings.html:93 +msgid "Save" +msgstr "儲存" + #: rhodecode/templates/admin/ldap/ldap.html:5 msgid "LDAP administration" msgstr "LDAP管理者" @@ -1692,18 +1840,6 @@ msgstr "姓" msgid "E-mail Attribute" msgstr "電子郵件屬性" -#: rhodecode/templates/admin/ldap/ldap.html:89 -#: rhodecode/templates/admin/repos/repo_edit.html:141 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74 -#: rhodecode/templates/admin/settings/hooks.html:73 -#: rhodecode/templates/admin/users/user_edit.html:129 -#: rhodecode/templates/admin/users/user_edit.html:174 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79 -#: rhodecode/templates/admin/users_groups/users_group_edit.html:135 -#: rhodecode/templates/settings/repo_settings.html:93 -msgid "Save" -msgstr "儲存" - #: rhodecode/templates/admin/notifications/notifications.html:5 #: rhodecode/templates/admin/notifications/notifications.html:9 msgid "My Notifications" @@ -1719,8 +1855,8 @@ msgid "Comments" msgstr "遞交" #: rhodecode/templates/admin/notifications/notifications.html:31 -#: rhodecode/templates/base/base.html:254 -#: rhodecode/templates/base/base.html:256 +#: rhodecode/templates/base/base.html:267 +#: rhodecode/templates/base/base.html:269 msgid "Pull requests" msgstr "" @@ -1750,7 +1886,7 @@ msgstr "權限管理員" #: rhodecode/templates/admin/permissions/permissions.html:11 #: rhodecode/templates/admin/repos/repo_edit.html:134 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58 -#: rhodecode/templates/admin/users/user_edit.html:139 +#: rhodecode/templates/admin/users/user_edit.html:143 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100 #: rhodecode/templates/settings/repo_settings.html:86 msgid "Permissions" @@ -1764,10 +1900,6 @@ msgstr "預設權限" 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 " @@ -1776,24 +1908,41 @@ msgid "" msgstr "" #: rhodecode/templates/admin/permissions/permissions.html:50 +#: rhodecode/templates/admin/permissions/permissions.html:63 msgid "overwrite existing settings" msgstr "複寫已存在設定" #: rhodecode/templates/admin/permissions/permissions.html:55 +#: rhodecode/templates/admin/repos/repo_add_base.html:29 +#: rhodecode/templates/admin/repos/repo_edit.html:49 +#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 +#: rhodecode/templates/forks/fork.html:50 +#: rhodecode/templates/settings/repo_settings.html:48 +msgid "Repository group" +msgstr "版本庫群組" + +#: rhodecode/templates/admin/permissions/permissions.html:62 +msgid "" +"All default permissions on each repository group will be reset to choosen" +" permission, note that all custom default permission on repositories " +"group will be lost" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:69 msgid "Registration" msgstr "註冊" -#: rhodecode/templates/admin/permissions/permissions.html:63 +#: rhodecode/templates/admin/permissions/permissions.html:77 msgid "Repository creation" msgstr "版本庫建立" -#: rhodecode/templates/admin/permissions/permissions.html:71 +#: rhodecode/templates/admin/permissions/permissions.html:85 #, fuzzy msgid "Repository forking" msgstr "版本庫建立" -#: rhodecode/templates/admin/permissions/permissions.html:78 -#: rhodecode/templates/admin/repos/repo_edit.html:241 +#: rhodecode/templates/admin/permissions/permissions.html:92 +#: rhodecode/templates/admin/repos/repo_edit.html:264 msgid "set" msgstr "設定" @@ -1813,8 +1962,8 @@ msgid "add new" msgstr "新增" #: rhodecode/templates/admin/repos/repo_add_base.html:20 -#: rhodecode/templates/summary/summary.html:95 -#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:104 +#: rhodecode/templates/summary/summary.html:105 msgid "Clone from" msgstr "複製由" @@ -1824,24 +1973,11 @@ msgstr "複製由" msgid "Optional http[s] url from which repository should be cloned." msgstr "" -#: rhodecode/templates/admin/repos/repo_add_base.html:29 -#: rhodecode/templates/admin/repos/repo_edit.html:49 -#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 -#: rhodecode/templates/forks/fork.html:50 -#: rhodecode/templates/settings/repo_settings.html:48 -msgid "Repository group" -msgstr "版本庫群組" - #: rhodecode/templates/admin/repos/repo_add_base.html:33 #: rhodecode/templates/forks/fork.html:54 msgid "Optionaly select a group to put this repository into." msgstr "" -#: rhodecode/templates/admin/repos/repo_add_base.html:38 -#: rhodecode/templates/admin/repos/repo_edit.html:58 -msgid "Type" -msgstr "類型" - #: rhodecode/templates/admin/repos/repo_add_base.html:42 #, fuzzy msgid "Type of repository to create." @@ -1869,15 +2005,6 @@ msgstr "" msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "" -#: rhodecode/templates/admin/repos/repo_add_base.html:69 -#: rhodecode/templates/admin/repos/repo_edit.html:89 -#: rhodecode/templates/forks/fork.html:72 -#: rhodecode/templates/settings/repo_settings.html:80 -msgid "" -"Private repositories are only visible to people explicitly added as " -"collaborators." -msgstr "" - #: rhodecode/templates/admin/repos/repo_add_base.html:73 msgid "add" msgstr "新增" @@ -1892,12 +2019,14 @@ msgstr "編輯版本庫" #: rhodecode/templates/admin/repos/repo_edit.html:13 #: rhodecode/templates/admin/users/user_edit.html:13 -#: rhodecode/templates/admin/users/user_edit.html:224 -#: rhodecode/templates/admin/users/user_edit.html:226 +#: rhodecode/templates/admin/users/user_edit.html:228 +#: rhodecode/templates/admin/users/user_edit.html:230 #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28 #: rhodecode/templates/admin/users_groups/users_group_edit.html:13 -#: rhodecode/templates/files/files_source.html:44 -#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:207 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:209 +#: rhodecode/templates/files/files_source.html:29 +#: rhodecode/templates/journal/journal_page_repos.html:29 msgid "edit" msgstr "編輯" @@ -1911,32 +2040,6 @@ msgstr "複製URL" msgid "Optional select a group to put this repository into." msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:94 -msgid "Enable statistics" -msgstr "啟用統計" - -#: rhodecode/templates/admin/repos/repo_edit.html:98 -msgid "Enable statistics window on summary page." -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:103 -msgid "Enable downloads" -msgstr "啟用下載" - -#: rhodecode/templates/admin/repos/repo_edit.html:107 -msgid "Enable download menu on summary page." -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:112 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66 -#, fuzzy -msgid "Enable locking" -msgstr "啟用" - -#: rhodecode/templates/admin/repos/repo_edit.html:116 -msgid "Enable lock-by-pulling on repository." -msgstr "" - #: rhodecode/templates/admin/repos/repo_edit.html:126 #, fuzzy msgid "Change owner of this repository." @@ -1945,11 +2048,11 @@ msgstr "修改於版本庫 %s" #: rhodecode/templates/admin/repos/repo_edit.html:142 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:75 #: rhodecode/templates/admin/settings/settings.html:113 -#: rhodecode/templates/admin/settings/settings.html:168 -#: rhodecode/templates/admin/settings/settings.html:258 -#: rhodecode/templates/admin/users/user_edit.html:130 -#: rhodecode/templates/admin/users/user_edit.html:175 -#: rhodecode/templates/admin/users/user_edit.html:278 +#: rhodecode/templates/admin/settings/settings.html:179 +#: rhodecode/templates/admin/settings/settings.html:269 +#: rhodecode/templates/admin/users/user_edit.html:134 +#: rhodecode/templates/admin/users/user_edit.html:179 +#: rhodecode/templates/admin/users/user_edit.html:282 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:80 #: rhodecode/templates/admin/users_groups/users_group_edit.html:136 #: rhodecode/templates/files/files_add.html:82 @@ -2007,82 +2110,107 @@ msgstr "" msgid "Confirm to invalidate repository cache" msgstr "確認廢止版本庫快取" -#: rhodecode/templates/admin/repos/repo_edit.html:195 -#: rhodecode/templates/base/base.html:318 -#: rhodecode/templates/base/base.html:320 -#: rhodecode/templates/base/base.html:322 -msgid "Public journal" -msgstr "公開日誌" +#: rhodecode/templates/admin/repos/repo_edit.html:193 +msgid "" +"Manually invalidate cache for this repository. On first access repository" +" will be cached again" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:198 +msgid "List of cached values" +msgstr "" #: rhodecode/templates/admin/repos/repo_edit.html:201 -msgid "Remove from public journal" -msgstr "從公開日誌移除" +msgid "Prefix" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:202 +msgid "Key" +msgstr "" #: rhodecode/templates/admin/repos/repo_edit.html:203 +#: rhodecode/templates/admin/users/user_add.html:86 +#: rhodecode/templates/admin/users/user_edit.html:117 +#: 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/repos/repo_edit.html:218 +#: rhodecode/templates/base/base.html:331 +#: rhodecode/templates/base/base.html:333 +#: rhodecode/templates/base/base.html:335 +msgid "Public journal" +msgstr "公開日誌" + +#: rhodecode/templates/admin/repos/repo_edit.html:224 +msgid "Remove from public journal" +msgstr "從公開日誌移除" + +#: rhodecode/templates/admin/repos/repo_edit.html:226 msgid "Add to public journal" msgstr "新增至公開日誌" -#: rhodecode/templates/admin/repos/repo_edit.html:208 +#: rhodecode/templates/admin/repos/repo_edit.html:231 msgid "" "All actions made on this repository will be accessible to everyone in " "public journal" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:215 +#: rhodecode/templates/admin/repos/repo_edit.html:238 #, fuzzy msgid "Locking" msgstr "解鎖" -#: rhodecode/templates/admin/repos/repo_edit.html:220 +#: rhodecode/templates/admin/repos/repo_edit.html:243 msgid "Unlock locked repo" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:220 +#: rhodecode/templates/admin/repos/repo_edit.html:243 #, fuzzy msgid "Confirm to unlock repository" msgstr "確認移除這個版本庫" -#: rhodecode/templates/admin/repos/repo_edit.html:223 +#: rhodecode/templates/admin/repos/repo_edit.html:246 msgid "lock repo" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:223 +#: rhodecode/templates/admin/repos/repo_edit.html:246 #, fuzzy msgid "Confirm to lock repository" msgstr "確認移除這個版本庫" -#: rhodecode/templates/admin/repos/repo_edit.html:224 +#: rhodecode/templates/admin/repos/repo_edit.html:247 #, fuzzy msgid "Repository is not locked" msgstr "個版本庫" -#: rhodecode/templates/admin/repos/repo_edit.html:229 +#: rhodecode/templates/admin/repos/repo_edit.html:252 msgid "Force locking on repository. Works only when anonymous access is disabled" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:236 +#: rhodecode/templates/admin/repos/repo_edit.html:259 msgid "Set as fork of" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:245 +#: rhodecode/templates/admin/repos/repo_edit.html:268 msgid "Manually set this repository as a fork of another from the list" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:251 +#: rhodecode/templates/admin/repos/repo_edit.html:274 #: rhodecode/templates/changeset/changeset_file_comment.html:26 msgid "Delete" msgstr "移除" -#: rhodecode/templates/admin/repos/repo_edit.html:255 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "Remove this repository" msgstr "移除版本庫" -#: rhodecode/templates/admin/repos/repo_edit.html:255 -#: rhodecode/templates/journal/journal.html:84 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "Confirm to delete this repository" msgstr "確認移除這個版本庫" -#: rhodecode/templates/admin/repos/repo_edit.html:259 +#: rhodecode/templates/admin/repos/repo_edit.html:282 msgid "" "This repository will be renamed in a special way in order to be " "unaccesible for RhodeCode and VCS systems.\n" @@ -2108,7 +2236,7 @@ msgstr "寫" #: rhodecode/templates/admin/repos/repo_edit_perms.html:6 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6 #: rhodecode/templates/admin/users/users.html:85 -#: rhodecode/templates/base/base.html:217 +#: rhodecode/templates/base/base.html:229 msgid "admin" msgstr "管理員" @@ -2119,8 +2247,8 @@ msgstr "成員" #: rhodecode/templates/admin/repos/repo_edit_perms.html:16 #: rhodecode/templates/data_table/_dt_elements.html:67 -#: rhodecode/templates/journal/journal.html:132 -#: rhodecode/templates/summary/summary.html:76 +#: rhodecode/templates/journal/journal.html:87 +#: rhodecode/templates/summary/summary.html:85 msgid "private repository" msgstr "私有版本庫" @@ -2144,12 +2272,12 @@ msgid "Add another member" msgstr "新增另ㄧ位成員" #: rhodecode/templates/admin/repos/repo_edit_perms.html:97 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:81 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 msgid "Failed to remove user" msgstr "移除使用者失敗" #: rhodecode/templates/admin/repos/repo_edit_perms.html:112 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:96 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:103 msgid "Failed to remove users group" msgstr "移除使用者群組失敗" @@ -2157,11 +2285,44 @@ msgstr "移除使用者群組失敗" msgid "Repositories administration" msgstr "版本庫管理員" -#: rhodecode/templates/admin/repos_groups/repos_groups.html:8 -msgid "Groups" -msgstr "群組" - -#: rhodecode/templates/admin/repos_groups/repos_groups.html:12 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73 +msgid "apply to children" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74 +msgid "" +"Set or revoke permission to all children of that group, including " +"repositories and other groups" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups.html:9 +#: rhodecode/templates/base/base.html:122 +#: rhodecode/templates/base/base.html:313 +#: rhodecode/templates/base/base.html:315 +#: rhodecode/templates/base/base.html:317 +#: rhodecode/templates/bookmarks/bookmarks.html:11 +#: rhodecode/templates/branches/branches.html:10 +#: rhodecode/templates/changelog/changelog.html:10 +#: rhodecode/templates/changeset/changeset.html:10 +#: rhodecode/templates/changeset/changeset_range.html:9 +#: rhodecode/templates/compare/compare_diff.html:9 +#: rhodecode/templates/files/file_diff.html:8 +#: rhodecode/templates/files/files.html:8 +#: rhodecode/templates/files/files_add.html:15 +#: rhodecode/templates/files/files_edit.html:15 +#: rhodecode/templates/followers/followers.html:9 +#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9 +#: rhodecode/templates/pullrequests/pullrequest.html:8 +#: rhodecode/templates/pullrequests/pullrequest_show.html:8 +#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 +#: rhodecode/templates/settings/repo_settings.html:9 +#: rhodecode/templates/shortlog/shortlog.html:10 +#: rhodecode/templates/summary/summary.html:8 +#: rhodecode/templates/tags/tags.html:11 +msgid "Home" +msgstr "首頁" + +#: rhodecode/templates/admin/repos_groups/repos_groups.html:13 msgid "with" msgstr "" @@ -2187,7 +2348,7 @@ msgstr "父群組" #: rhodecode/templates/admin/users/user_add.html:94 #: rhodecode/templates/admin/users_groups/users_group_add.html:49 #: rhodecode/templates/admin/users_groups/users_group_edit.html:90 -#: rhodecode/templates/pullrequests/pullrequest_show.html:113 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 msgid "save" msgstr "儲存" @@ -2224,20 +2385,21 @@ msgstr "版本庫數量" msgid "action" msgstr "動作" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54 -#: rhodecode/templates/admin/users/user_edit.html:255 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 +#: rhodecode/templates/admin/users/user_edit.html:259 #: rhodecode/templates/admin/users_groups/users_groups.html:44 #: rhodecode/templates/data_table/_dt_elements.html:7 -#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:121 msgid "delete" msgstr "刪除" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:54 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 #, fuzzy, python-format -msgid "Confirm to delete this group: %s" -msgstr "確認刪除這個群組" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:62 +msgid "Confirm to delete this group: %s with %s repository" +msgid_plural "Confirm to delete this group: %s with %s repositories" +msgstr[0] "確認移除這個版本庫" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63 msgid "There are no repositories groups yet" msgstr "沒有任何版本庫群組" @@ -2330,8 +2492,8 @@ msgid "GA code" msgstr "" #: rhodecode/templates/admin/settings/settings.html:112 -#: rhodecode/templates/admin/settings/settings.html:167 -#: rhodecode/templates/admin/settings/settings.html:257 +#: rhodecode/templates/admin/settings/settings.html:178 +#: rhodecode/templates/admin/settings/settings.html:268 msgid "Save settings" msgstr "儲存設定" @@ -2340,132 +2502,142 @@ msgstr "儲存設定" msgid "Visualisation settings" msgstr "全域設定" -#: rhodecode/templates/admin/settings/settings.html:128 +#: rhodecode/templates/admin/settings/settings.html:127 +#, fuzzy +msgid "General" +msgstr "啟用" + +#: rhodecode/templates/admin/settings/settings.html:132 +msgid "Use lightweight dashboard" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:139 #, fuzzy msgid "Icons" msgstr "選項" -#: rhodecode/templates/admin/settings/settings.html:133 +#: rhodecode/templates/admin/settings/settings.html:144 msgid "Show public repo icon on repositories" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:137 +#: rhodecode/templates/admin/settings/settings.html:148 #, fuzzy msgid "Show private repo icon on repositories" msgstr "私有版本庫" -#: rhodecode/templates/admin/settings/settings.html:144 +#: rhodecode/templates/admin/settings/settings.html:155 #, fuzzy msgid "Meta-Tagging" msgstr "設定" -#: rhodecode/templates/admin/settings/settings.html:149 +#: rhodecode/templates/admin/settings/settings.html:160 msgid "Stylify recognised metatags:" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:176 +#: rhodecode/templates/admin/settings/settings.html:187 #, fuzzy msgid "VCS settings" msgstr "設定" -#: rhodecode/templates/admin/settings/settings.html:185 +#: rhodecode/templates/admin/settings/settings.html:196 msgid "Web" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:190 +#: rhodecode/templates/admin/settings/settings.html:201 #, fuzzy msgid "require ssl for vcs operations" msgstr "推送時要求使用SSL" -#: rhodecode/templates/admin/settings/settings.html:192 +#: rhodecode/templates/admin/settings/settings.html:203 msgid "" "RhodeCode will require SSL for pushing or pulling. If SSL is missing it " "will return HTTP Error 406: Not Acceptable" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:198 +#: rhodecode/templates/admin/settings/settings.html:209 msgid "Hooks" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:203 +#: rhodecode/templates/admin/settings/settings.html:214 msgid "Update repository after push (hg update)" msgstr "push後更新版本庫 (hg update)" -#: rhodecode/templates/admin/settings/settings.html:207 +#: rhodecode/templates/admin/settings/settings.html:218 msgid "Show repository size after push" msgstr "push 後顯示版本庫大小" -#: rhodecode/templates/admin/settings/settings.html:211 +#: rhodecode/templates/admin/settings/settings.html:222 msgid "Log user push commands" msgstr "紀錄使用者推送命令" -#: rhodecode/templates/admin/settings/settings.html:215 +#: rhodecode/templates/admin/settings/settings.html:226 msgid "Log user pull commands" msgstr "紀錄使用者抓取命令" -#: rhodecode/templates/admin/settings/settings.html:219 +#: rhodecode/templates/admin/settings/settings.html:230 msgid "advanced setup" msgstr "進階設定" -#: rhodecode/templates/admin/settings/settings.html:224 +#: rhodecode/templates/admin/settings/settings.html:235 #, fuzzy msgid "Mercurial Extensions" msgstr "Mercurial 版本庫" -#: rhodecode/templates/admin/settings/settings.html:229 +#: rhodecode/templates/admin/settings/settings.html:240 msgid "largefiles extensions" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:233 +#: rhodecode/templates/admin/settings/settings.html:244 msgid "hgsubversion extensions" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:235 +#: rhodecode/templates/admin/settings/settings.html:246 msgid "" "Requires hgsubversion library installed. Allows clonning from svn remote " "locations" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:245 +#: rhodecode/templates/admin/settings/settings.html:256 msgid "Repositories location" msgstr "版本庫路徑" -#: rhodecode/templates/admin/settings/settings.html:250 +#: rhodecode/templates/admin/settings/settings.html:261 msgid "" "This a crucial application setting. If you are really sure you need to " "change this, you must restart application in order to make this setting " "take effect. Click this label to unlock." msgstr "這是一個關鍵的設定,如果您確定要修改這個設定,請重新啟動應用程式以套用設定" -#: rhodecode/templates/admin/settings/settings.html:251 +#: rhodecode/templates/admin/settings/settings.html:262 +#: rhodecode/templates/base/base.html:221 msgid "unlock" msgstr "解鎖" -#: rhodecode/templates/admin/settings/settings.html:252 +#: rhodecode/templates/admin/settings/settings.html:263 msgid "" "Location where repositories are stored. After changing this value a " "restart, and rescan is required" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:272 +#: rhodecode/templates/admin/settings/settings.html:283 msgid "Test Email" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:280 +#: rhodecode/templates/admin/settings/settings.html:291 #, fuzzy msgid "Email to" msgstr "電子郵件" -#: rhodecode/templates/admin/settings/settings.html:288 +#: rhodecode/templates/admin/settings/settings.html:299 #, fuzzy msgid "Send" msgstr "秒" -#: rhodecode/templates/admin/settings/settings.html:294 +#: rhodecode/templates/admin/settings/settings.html:305 msgid "System Info and Packages" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:297 +#: rhodecode/templates/admin/settings/settings.html:308 #, fuzzy msgid "show" msgstr "顯示" @@ -2488,13 +2660,6 @@ msgstr "新增使用者" msgid "Password confirmation" msgstr "密碼不相符" -#: rhodecode/templates/admin/users/user_add.html:86 -#: rhodecode/templates/admin/users/user_edit.html:113 -#: 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 "編輯使用者" @@ -2514,27 +2679,27 @@ msgstr "使用中" msgid "API key" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:59 +#: rhodecode/templates/admin/users/user_edit.html:63 msgid "LDAP DN" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:68 +#: rhodecode/templates/admin/users/user_edit.html:72 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:35 msgid "New password" msgstr "新密碼" -#: rhodecode/templates/admin/users/user_edit.html:77 +#: rhodecode/templates/admin/users/user_edit.html:81 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 msgid "New password confirmation" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:147 +#: rhodecode/templates/admin/users/user_edit.html:151 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108 #, fuzzy msgid "Inherit default permissions" msgstr "預設權限" -#: rhodecode/templates/admin/users/user_edit.html:152 +#: rhodecode/templates/admin/users/user_edit.html:156 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113 #, python-format msgid "" @@ -2542,52 +2707,54 @@ msgid "" "options does not have any action" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:158 +#: rhodecode/templates/admin/users/user_edit.html:162 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119 msgid "Create repositories" msgstr "建立版本庫" -#: rhodecode/templates/admin/users/user_edit.html:166 +#: rhodecode/templates/admin/users/user_edit.html:170 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127 #, fuzzy msgid "Fork repositories" msgstr "個版本庫" -#: rhodecode/templates/admin/users/user_edit.html:186 +#: rhodecode/templates/admin/users/user_edit.html:190 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:22 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:39 #, fuzzy msgid "Nothing here yet" msgstr "尚未有任何變更" -#: rhodecode/templates/admin/users/user_edit.html:193 +#: rhodecode/templates/admin/users/user_edit.html:197 #: rhodecode/templates/admin/users/user_edit_my_account.html:60 -#: rhodecode/templates/admin/users/user_edit_my_account.html:194 +#: rhodecode/templates/admin/users/user_edit_my_account.html:217 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:185 #, fuzzy msgid "Permission" msgstr "權限" -#: rhodecode/templates/admin/users/user_edit.html:194 +#: rhodecode/templates/admin/users/user_edit.html:198 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:186 #, fuzzy msgid "Edit Permission" msgstr "版本庫權限" -#: rhodecode/templates/admin/users/user_edit.html:243 +#: rhodecode/templates/admin/users/user_edit.html:247 #, fuzzy msgid "Email addresses" msgstr "郵件位址" -#: rhodecode/templates/admin/users/user_edit.html:256 +#: rhodecode/templates/admin/users/user_edit.html:260 #, fuzzy, python-format msgid "Confirm to delete this email: %s" msgstr "確認刪除這個使用者" -#: rhodecode/templates/admin/users/user_edit.html:270 +#: rhodecode/templates/admin/users/user_edit.html:274 #, fuzzy msgid "New email address" msgstr "郵件位址" -#: rhodecode/templates/admin/users/user_edit.html:277 +#: rhodecode/templates/admin/users/user_edit.html:281 #, fuzzy msgid "Add" msgstr "新增" @@ -2649,31 +2816,33 @@ msgstr "" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:7 #: rhodecode/templates/bookmarks/bookmarks.html:40 #: rhodecode/templates/bookmarks/bookmarks_data.html:9 -#: rhodecode/templates/branches/branches.html:55 -#: rhodecode/templates/journal/journal.html:60 -#: rhodecode/templates/tags/tags.html:40 +#: rhodecode/templates/branches/branches.html:54 +#: rhodecode/templates/branches/branches_data.html:9 +#: rhodecode/templates/journal/journal_page_repos.html:8 +#: rhodecode/templates/tags/tags.html:55 #: rhodecode/templates/tags/tags_data.html:9 msgid "Revision" msgstr "修訂" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28 -#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/journal/journal_page_repos.html:29 msgid "private" msgstr "私有" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:31 #: rhodecode/templates/data_table/_dt_elements.html:7 +#: rhodecode/templates/journal/journal_page_repos.html:32 #, fuzzy, python-format msgid "Confirm to delete this repository: %s" msgstr "確認移除這個版本庫" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:38 -#: rhodecode/templates/journal/journal.html:94 +#: rhodecode/templates/journal/journal_page_repos.html:42 msgid "No repositories yet" msgstr "沒有任何版本庫" #: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40 -#: rhodecode/templates/journal/journal.html:96 +#: rhodecode/templates/journal/journal_page_repos.html:44 msgid "create one now" msgstr "" @@ -2682,7 +2851,7 @@ msgid "Users administration" msgstr "使用者管理員" #: rhodecode/templates/admin/users/users.html:9 -#: rhodecode/templates/base/base.html:223 +#: rhodecode/templates/base/base.html:235 msgid "users" msgstr "使用者" @@ -2713,7 +2882,7 @@ msgid "active" msgstr "啟用" #: rhodecode/templates/admin/users/users.html:86 -#: rhodecode/templates/base/base.html:226 +#: rhodecode/templates/base/base.html:238 msgid "ldap" msgstr "" @@ -2763,6 +2932,21 @@ msgstr "新增索有元素" msgid "Group members" msgstr "選擇群組成員" +#: rhodecode/templates/admin/users_groups/users_group_edit.html:163 +#, fuzzy +msgid "No members yet" +msgstr "成員" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:171 +#, fuzzy +msgid "Permissions defined for this group" +msgstr "權限管理員" + +#: rhodecode/templates/admin/users_groups/users_group_edit.html:178 +#, fuzzy +msgid "No permissions set yet" +msgstr "權限" + #: rhodecode/templates/admin/users_groups/users_groups.html:5 msgid "Users groups administration" msgstr "使用者群組管理員" @@ -2806,36 +2990,10 @@ msgstr "登入" msgid "Inbox" msgstr "" -#: rhodecode/templates/base/base.html:122 -#: rhodecode/templates/base/base.html:300 -#: rhodecode/templates/base/base.html:302 -#: rhodecode/templates/base/base.html:304 -#: rhodecode/templates/bookmarks/bookmarks.html:11 -#: rhodecode/templates/branches/branches.html:10 -#: rhodecode/templates/changelog/changelog.html:10 -#: rhodecode/templates/changeset/changeset.html:10 -#: rhodecode/templates/changeset/changeset_range.html:9 -#: rhodecode/templates/compare/compare_diff.html:9 -#: rhodecode/templates/files/file_diff.html:8 -#: rhodecode/templates/files/files.html:8 -#: rhodecode/templates/files/files_add.html:15 -#: rhodecode/templates/files/files_edit.html:15 -#: rhodecode/templates/followers/followers.html:9 -#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9 -#: rhodecode/templates/pullrequests/pullrequest.html:8 -#: rhodecode/templates/pullrequests/pullrequest_show.html:8 -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 -#: rhodecode/templates/settings/repo_settings.html:9 -#: rhodecode/templates/shortlog/shortlog.html:10 -#: rhodecode/templates/summary/summary.html:8 -#: rhodecode/templates/tags/tags.html:11 -msgid "Home" -msgstr "首頁" - #: rhodecode/templates/base/base.html:123 -#: rhodecode/templates/base/base.html:309 -#: rhodecode/templates/base/base.html:311 -#: rhodecode/templates/base/base.html:313 +#: rhodecode/templates/base/base.html:322 +#: rhodecode/templates/base/base.html:324 +#: rhodecode/templates/base/base.html:326 #: rhodecode/templates/journal/journal.html:4 #: rhodecode/templates/journal/journal.html:21 #: rhodecode/templates/journal/public_journal.html:4 @@ -2855,7 +3013,7 @@ msgid "Products" msgstr "" #: rhodecode/templates/base/base.html:152 -#: rhodecode/templates/base/base.html:182 +#: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47 msgid "loading..." msgstr "載入中..." @@ -2900,50 +3058,69 @@ msgstr "選項" #: rhodecode/templates/base/base.html:204 #: rhodecode/templates/base/base.html:206 -#: rhodecode/templates/base/base.html:227 -msgid "settings" -msgstr "設定" - -#: rhodecode/templates/base/base.html:209 +#, fuzzy +msgid "repository settings" +msgstr "版本庫建立" + +#: rhodecode/templates/base/base.html:210 #: rhodecode/templates/data_table/_dt_elements.html:80 #: rhodecode/templates/forks/fork.html:13 msgid "fork" msgstr "" -#: rhodecode/templates/base/base.html:211 -#: rhodecode/templates/changelog/changelog.html:40 +#: rhodecode/templates/base/base.html:212 rhodecode/templates/base/root.html:50 +#: rhodecode/templates/changelog/changelog.html:43 msgid "Open new pull request" msgstr "" -#: rhodecode/templates/base/base.html:213 +#: rhodecode/templates/base/base.html:215 +#: rhodecode/templates/forks/forks_data.html:21 +msgid "Compare fork" +msgstr "" + +#: rhodecode/templates/base/base.html:217 msgid "search" msgstr "搜尋" -#: rhodecode/templates/base/base.html:222 +#: rhodecode/templates/base/base.html:223 +#, fuzzy +msgid "lock" +msgstr "解鎖" + +#: rhodecode/templates/base/base.html:234 msgid "repositories groups" msgstr "版本庫群組" -#: rhodecode/templates/base/base.html:224 +#: rhodecode/templates/base/base.html:236 msgid "users groups" msgstr "使用者群組" -#: rhodecode/templates/base/base.html:225 +#: rhodecode/templates/base/base.html:237 msgid "permissions" msgstr "權限" -#: rhodecode/templates/base/base.html:238 +#: rhodecode/templates/base/base.html:239 +#, fuzzy +msgid "defaults" +msgstr "刪除" + #: rhodecode/templates/base/base.html:240 +msgid "settings" +msgstr "設定" + +#: rhodecode/templates/base/base.html:251 +#: rhodecode/templates/base/base.html:253 msgid "Followers" msgstr "追蹤者" -#: rhodecode/templates/base/base.html:246 -#: rhodecode/templates/base/base.html:248 +#: rhodecode/templates/base/base.html:259 +#: rhodecode/templates/base/base.html:261 msgid "Forks" msgstr "" -#: rhodecode/templates/base/base.html:327 -#: rhodecode/templates/base/base.html:329 -#: rhodecode/templates/base/base.html:331 +#: rhodecode/templates/base/base.html:340 +#: rhodecode/templates/base/base.html:342 +#: rhodecode/templates/base/base.html:344 #: rhodecode/templates/search/search.html:52 msgid "Search" msgstr "搜尋" @@ -2954,7 +3131,7 @@ msgid "add another comment" msgstr "新增另ㄧ位成員" #: rhodecode/templates/base/root.html:43 -#: rhodecode/templates/journal/journal.html:120 +#: rhodecode/templates/journal/journal.html:75 #: rhodecode/templates/summary/summary.html:57 msgid "Stop following this repository" msgstr "停止追蹤這個版本庫" @@ -2968,14 +3145,26 @@ msgstr "開始追蹤這個版本庫" msgid "Group" msgstr "群組" -#: rhodecode/templates/base/root.html:47 +#: rhodecode/templates/base/root.html:48 msgid "search truncated" msgstr "" -#: rhodecode/templates/base/root.html:48 +#: rhodecode/templates/base/root.html:49 msgid "no matching files" msgstr "無符合的檔案" +#: rhodecode/templates/base/root.html:51 +msgid "Open new pull request for selected changesets" +msgstr "" + +#: rhodecode/templates/base/root.html:52 +msgid "Show selected changes __S -> __E" +msgstr "" + +#: rhodecode/templates/base/root.html:53 +msgid "Selection link" +msgstr "" + #: rhodecode/templates/bookmarks/bookmarks.html:5 #, python-format msgid "%s Bookmarks" @@ -2983,8 +3172,9 @@ msgstr "" #: rhodecode/templates/bookmarks/bookmarks.html:39 #: rhodecode/templates/bookmarks/bookmarks_data.html:8 -#: rhodecode/templates/branches/branches.html:54 -#: rhodecode/templates/tags/tags.html:39 +#: rhodecode/templates/branches/branches.html:53 +#: rhodecode/templates/branches/branches_data.html:8 +#: rhodecode/templates/tags/tags.html:54 #: rhodecode/templates/tags/tags_data.html:8 #, fuzzy msgid "Author" @@ -3000,36 +3190,16 @@ msgstr "分支" msgid "Compare branches" msgstr "分支" -#: rhodecode/templates/branches/branches.html:57 +#: rhodecode/templates/branches/branches.html:56 +#: rhodecode/templates/branches/branches_data.html:10 #: rhodecode/templates/compare/compare_diff.html:5 #: rhodecode/templates/compare/compare_diff.html:13 +#: rhodecode/templates/tags/tags.html:57 +#: rhodecode/templates/tags/tags_data.html:10 #, fuzzy msgid "Compare" msgstr "比較顯示" -#: rhodecode/templates/branches/branches_data.html:6 -msgid "name" -msgstr "名字" - -#: rhodecode/templates/branches/branches_data.html:7 -msgid "date" -msgstr "日期" - -#: rhodecode/templates/branches/branches_data.html:8 -#: rhodecode/templates/shortlog/shortlog_data.html:8 -msgid "author" -msgstr "作者" - -#: rhodecode/templates/branches/branches_data.html:9 -#: rhodecode/templates/shortlog/shortlog_data.html:5 -msgid "revision" -msgstr "修訂" - -#: rhodecode/templates/branches/branches_data.html:10 -#, fuzzy -msgid "compare" -msgstr "比較顯示" - #: rhodecode/templates/changelog/changelog.html:6 #, fuzzy, python-format msgid "%s Changelog" @@ -3042,58 +3212,65 @@ msgid_plural "showing %d out of %d revis msgstr[0] "" #: rhodecode/templates/changelog/changelog.html:37 +#, fuzzy +msgid "Clear selection" +msgstr "搜尋選項" + +#: rhodecode/templates/changelog/changelog.html:40 #: rhodecode/templates/forks/forks_data.html:19 #, python-format msgid "compare fork with %s" msgstr "" -#: rhodecode/templates/changelog/changelog.html:37 -#: rhodecode/templates/forks/forks_data.html:21 -msgid "Compare fork" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:46 +#: rhodecode/templates/changelog/changelog.html:40 +msgid "Compare fork with parent" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:49 msgid "Show" msgstr "顯示" -#: rhodecode/templates/changelog/changelog.html:72 -#: rhodecode/templates/summary/summary.html:364 +#: rhodecode/templates/changelog/changelog.html:74 +#: rhodecode/templates/summary/summary.html:375 msgid "show more" msgstr "顯示更多" -#: rhodecode/templates/changelog/changelog.html:76 +#: rhodecode/templates/changelog/changelog.html:78 msgid "Affected number of files, click to show more details" msgstr "" -#: rhodecode/templates/changelog/changelog.html:89 -#: rhodecode/templates/changeset/changeset.html:38 +#: rhodecode/templates/changelog/changelog.html:91 +#: rhodecode/templates/changeset/changeset.html:44 #: rhodecode/templates/changeset/changeset_file_comment.html:20 #: rhodecode/templates/changeset/changeset_range.html:46 #, fuzzy msgid "Changeset status" msgstr "變更" -#: rhodecode/templates/changelog/changelog.html:92 +#: rhodecode/templates/changelog/changelog.html:94 +#: rhodecode/templates/shortlog/shortlog_data.html:20 msgid "Click to open associated pull request" msgstr "" -#: rhodecode/templates/changelog/changelog.html:102 -#: rhodecode/templates/changeset/changeset.html:78 +#: rhodecode/templates/changelog/changelog.html:104 +#: rhodecode/templates/changeset/changeset.html:85 msgid "Parent" msgstr "" -#: rhodecode/templates/changelog/changelog.html:108 -#: rhodecode/templates/changeset/changeset.html:84 +#: rhodecode/templates/changelog/changelog.html:110 +#: rhodecode/templates/changeset/changeset.html:91 msgid "No parents" msgstr "" -#: rhodecode/templates/changelog/changelog.html:113 -#: rhodecode/templates/changeset/changeset.html:88 +#: rhodecode/templates/changelog/changelog.html:115 +#: rhodecode/templates/changeset/changeset.html:95 +#: rhodecode/templates/changeset/changeset_range.html:79 msgid "merge" msgstr "合併" -#: rhodecode/templates/changelog/changelog.html:116 -#: rhodecode/templates/changeset/changeset.html:91 +#: rhodecode/templates/changelog/changelog.html:118 +#: rhodecode/templates/changeset/changeset.html:98 +#: rhodecode/templates/changeset/changeset_range.html:82 #: rhodecode/templates/files/files.html:29 #: rhodecode/templates/files/files_add.html:33 #: rhodecode/templates/files/files_edit.html:33 @@ -3101,44 +3278,42 @@ msgstr "合併" msgid "branch" msgstr "分支" -#: rhodecode/templates/changelog/changelog.html:122 +#: rhodecode/templates/changelog/changelog.html:124 +#: rhodecode/templates/changeset/changeset_range.html:88 msgid "bookmark" msgstr "" -#: rhodecode/templates/changelog/changelog.html:128 -#: rhodecode/templates/changeset/changeset.html:96 +#: rhodecode/templates/changelog/changelog.html:130 +#: rhodecode/templates/changeset/changeset.html:103 +#: rhodecode/templates/changeset/changeset_range.html:94 msgid "tag" msgstr "標籤" -#: rhodecode/templates/changelog/changelog.html:164 -msgid "Show selected changes __S -> __E" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:255 +#: rhodecode/templates/changelog/changelog.html:301 msgid "There are no changes yet" msgstr "尚未有任何變更" #: rhodecode/templates/changelog/changelog_details.html:4 -#: rhodecode/templates/changeset/changeset.html:66 +#: rhodecode/templates/changeset/changeset.html:73 msgid "removed" msgstr "移除" #: rhodecode/templates/changelog/changelog_details.html:5 -#: rhodecode/templates/changeset/changeset.html:67 +#: rhodecode/templates/changeset/changeset.html:74 msgid "changed" msgstr "修改" #: rhodecode/templates/changelog/changelog_details.html:6 -#: rhodecode/templates/changeset/changeset.html:68 +#: rhodecode/templates/changeset/changeset.html:75 msgid "added" msgstr "新增" #: rhodecode/templates/changelog/changelog_details.html:8 #: rhodecode/templates/changelog/changelog_details.html:9 #: rhodecode/templates/changelog/changelog_details.html:10 -#: rhodecode/templates/changeset/changeset.html:70 -#: rhodecode/templates/changeset/changeset.html:71 -#: rhodecode/templates/changeset/changeset.html:72 +#: rhodecode/templates/changeset/changeset.html:77 +#: rhodecode/templates/changeset/changeset.html:78 +#: rhodecode/templates/changeset/changeset.html:79 #, python-format msgid "affected %s files" msgstr "" @@ -3152,38 +3327,50 @@ msgstr "沒有修改" msgid "Changeset" msgstr "" -#: rhodecode/templates/changeset/changeset.html:43 +#: rhodecode/templates/changeset/changeset.html:49 #: rhodecode/templates/changeset/diff_block.html:20 msgid "raw diff" msgstr "原始差異" -#: rhodecode/templates/changeset/changeset.html:44 +#: rhodecode/templates/changeset/changeset.html:50 +#, fuzzy +msgid "patch diff" +msgstr "原始差異" + +#: rhodecode/templates/changeset/changeset.html:51 #: rhodecode/templates/changeset/diff_block.html:21 msgid "download diff" msgstr "下載差異" -#: rhodecode/templates/changeset/changeset.html:48 +#: rhodecode/templates/changeset/changeset.html:55 #: rhodecode/templates/changeset/changeset_file_comment.html:82 #, fuzzy, python-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "遞交" -#: rhodecode/templates/changeset/changeset.html:48 +#: rhodecode/templates/changeset/changeset.html:55 #: rhodecode/templates/changeset/changeset_file_comment.html:82 #, python-format msgid "(%d inline)" msgid_plural "(%d inline)" msgstr[0] "" -#: rhodecode/templates/changeset/changeset.html:103 +#: rhodecode/templates/changeset/changeset.html:111 +#: rhodecode/templates/compare/compare_diff.html:44 +#: rhodecode/templates/pullrequests/pullrequest_show.html:76 +#, fuzzy, python-format +msgid "%s file changed" +msgid_plural "%s files changed" +msgstr[0] "檔案修改" + +#: rhodecode/templates/changeset/changeset.html:113 +#: rhodecode/templates/compare/compare_diff.html:46 +#: rhodecode/templates/pullrequests/pullrequest_show.html:78 #, python-format -msgid "%s files affected with %s insertions and %s deletions:" -msgstr "" - -#: rhodecode/templates/changeset/changeset.html:119 -msgid "Changeset was too big and was cut off..." -msgstr "" +msgid "%s file changed with %s insertions and %s deletions" +msgid_plural "%s files changed with %s insertions and %s deletions" +msgstr[0] "" #: rhodecode/templates/changeset/changeset_file_comment.html:42 msgid "Submitting..." @@ -3251,15 +3438,18 @@ msgstr "變更" msgid "Compare View" msgstr "比較顯示" +#: rhodecode/templates/changeset/changeset_range.html:29 +#, fuzzy +msgid "Show combined compare" +msgstr "文件內容" + #: rhodecode/templates/changeset/changeset_range.html:54 -#: rhodecode/templates/compare/compare_diff.html:41 -#: rhodecode/templates/pullrequests/pullrequest_show.html:69 msgid "Files affected" msgstr "" #: rhodecode/templates/changeset/diff_block.html:19 -msgid "diff" -msgstr "差異" +msgid "show full diff for this file" +msgstr "" #: rhodecode/templates/changeset/diff_block.html:27 #, fuzzy @@ -3272,9 +3462,17 @@ msgid "No changesets" msgstr "尚未有任何變更" #: rhodecode/templates/compare/compare_diff.html:37 +#: rhodecode/templates/pullrequests/pullrequest_show.html:69 +#, fuzzy, python-format +msgid "Showing %s commit" +msgid_plural "Showing %s commits" +msgstr[0] "文件內容" + +#: rhodecode/templates/compare/compare_diff.html:52 +#: rhodecode/templates/pullrequests/pullrequest_show.html:84 #, fuzzy -msgid "Outgoing changesets" -msgstr "尚未有任何變更" +msgid "No files" +msgstr "檔案" #: rhodecode/templates/data_table/_dt_elements.html:39 #: rhodecode/templates/data_table/_dt_elements.html:41 @@ -3283,40 +3481,123 @@ msgid "Fork" msgstr "分支" #: rhodecode/templates/data_table/_dt_elements.html:60 -#: rhodecode/templates/journal/journal.html:126 -#: rhodecode/templates/summary/summary.html:68 +#: rhodecode/templates/journal/journal.html:81 +#: rhodecode/templates/summary/summary.html:77 msgid "Mercurial repository" msgstr "Mercurial 版本庫" #: rhodecode/templates/data_table/_dt_elements.html:62 -#: rhodecode/templates/journal/journal.html:128 -#: rhodecode/templates/summary/summary.html:71 +#: rhodecode/templates/journal/journal.html:83 +#: rhodecode/templates/summary/summary.html:80 msgid "Git repository" msgstr "Git 版本庫" #: rhodecode/templates/data_table/_dt_elements.html:69 -#: rhodecode/templates/journal/journal.html:134 -#: rhodecode/templates/summary/summary.html:78 +#: rhodecode/templates/journal/journal.html:89 +#: rhodecode/templates/summary/summary.html:87 msgid "public repository" msgstr "公開版本庫" #: rhodecode/templates/data_table/_dt_elements.html:80 -#: rhodecode/templates/summary/summary.html:87 -#: rhodecode/templates/summary/summary.html:88 +#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:97 msgid "Fork of" msgstr "" -#: rhodecode/templates/data_table/_dt_elements.html:92 +#: rhodecode/templates/data_table/_dt_elements.html:94 msgid "No changesets yet" msgstr "尚未有任何變更" -#: rhodecode/templates/data_table/_dt_elements.html:104 +#: rhodecode/templates/data_table/_dt_elements.html:101 +#: rhodecode/templates/data_table/_dt_elements.html:103 +#, python-format +msgid "Subscribe to %s rss feed" +msgstr "訂閱 %s rss" + +#: rhodecode/templates/data_table/_dt_elements.html:109 +#: rhodecode/templates/data_table/_dt_elements.html:111 +#, python-format +msgid "Subscribe to %s atom feed" +msgstr "訂閱 %s atom" + +#: rhodecode/templates/data_table/_dt_elements.html:122 #, fuzzy, python-format msgid "Confirm to delete this user: %s" msgstr "確認刪除這個使用者" +#: rhodecode/templates/email_templates/changeset_comment.html:10 +#, fuzzy +msgid "New status$" +msgstr "變更" + #: rhodecode/templates/email_templates/main.html:8 -msgid "This is an notification from RhodeCode." +msgid "This is a notification from RhodeCode." +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:4 +msgid "Hello" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:6 +msgid "We received a request to create a new password for your account." +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:8 +msgid "You can generate it by clicking following URL" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:12 +msgid "If you didn't request new password please ignore this email." +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:4 +#, python-format +msgid "" +"User %s opened pull request for repository %s and wants you to review " +"changes." +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:5 +#, fuzzy +msgid "title" +msgstr "寫" + +#: rhodecode/templates/email_templates/pull_request.html:6 +#: rhodecode/templates/pullrequests/pullrequest.html:115 +#, fuzzy +msgid "description" +msgstr "描述" + +#: rhodecode/templates/email_templates/pull_request.html:11 +msgid "revisions for reviewing" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:18 +#, fuzzy +msgid "View this pull request here" +msgstr "確認移除這個版本庫" + +#: rhodecode/templates/email_templates/pull_request_comment.html:4 +#, fuzzy, python-format +msgid "User %s commented on pull request #%s for repository %s" +msgstr "建立使用者 %s" + +#: rhodecode/templates/email_templates/pull_request_comment.html:10 +#, fuzzy +msgid "New status" +msgstr "變更" + +#: rhodecode/templates/email_templates/pull_request_comment.html:14 +msgid "View this comment here" +msgstr "" + +#: rhodecode/templates/email_templates/registration.html:4 +#, fuzzy +msgid "A new user have registered in RhodeCode" +msgstr "您已經成功註冊rhodecode" + +#: rhodecode/templates/email_templates/registration.html:9 +msgid "View this user here" msgstr "" #: rhodecode/templates/errors/error_document.html:46 @@ -3334,13 +3615,13 @@ msgid "File diff" msgstr "檔案差異" #: rhodecode/templates/files/files.html:4 -#: rhodecode/templates/files/files.html:72 +#: rhodecode/templates/files/files.html:74 #, fuzzy, python-format msgid "%s files" msgstr "檔案" #: rhodecode/templates/files/files.html:12 -#: rhodecode/templates/summary/summary.html:340 +#: rhodecode/templates/summary/summary.html:351 msgid "files" msgstr "檔案" @@ -3424,7 +3705,7 @@ msgid "search file list" msgstr "搜尋檔案列表" #: rhodecode/templates/files/files_browser.html:31 -#: rhodecode/templates/shortlog/shortlog_data.html:65 +#: rhodecode/templates/shortlog/shortlog_data.html:78 #, fuzzy msgid "add new file" msgstr "新增使用者" @@ -3459,18 +3740,18 @@ msgid "edit file" msgstr "編輯檔案" #: rhodecode/templates/files/files_edit.html:49 -#: rhodecode/templates/files/files_source.html:38 +#: rhodecode/templates/files/files_source.html:23 msgid "show annotation" msgstr "險是註釋" #: rhodecode/templates/files/files_edit.html:50 -#: rhodecode/templates/files/files_source.html:40 -#: rhodecode/templates/files/files_source.html:68 +#: rhodecode/templates/files/files_source.html:25 +#: rhodecode/templates/files/files_source.html:53 msgid "show as raw" msgstr "顯示原始文件" #: rhodecode/templates/files/files_edit.html:51 -#: rhodecode/templates/files/files_source.html:41 +#: rhodecode/templates/files/files_source.html:26 msgid "download as raw" msgstr "下載原始文件" @@ -3484,43 +3765,49 @@ msgstr "顯示原始碼" msgid "Editing file" msgstr "編輯檔案" -#: rhodecode/templates/files/files_source.html:2 +#: rhodecode/templates/files/files_history_box.html:2 msgid "History" msgstr "歷史" -#: rhodecode/templates/files/files_source.html:9 +#: rhodecode/templates/files/files_history_box.html:9 #, fuzzy msgid "diff to revision" msgstr "下一個修訂" -#: rhodecode/templates/files/files_source.html:10 +#: rhodecode/templates/files/files_history_box.html:10 #, fuzzy msgid "show at revision" msgstr "下一個修訂" -#: rhodecode/templates/files/files_source.html:14 +#: rhodecode/templates/files/files_history_box.html:11 +#, fuzzy +msgid "show full history" +msgstr "載入檔案列表..." + +#: rhodecode/templates/files/files_history_box.html:16 #, fuzzy, python-format msgid "%s author" msgid_plural "%s authors" msgstr[0] "作者" -#: rhodecode/templates/files/files_source.html:36 +#: rhodecode/templates/files/files_source.html:6 +#, fuzzy +msgid "Load file history" +msgstr "載入檔案列表..." + +#: rhodecode/templates/files/files_source.html:21 msgid "show source" msgstr "顯示原始碼" -#: rhodecode/templates/files/files_source.html:59 +#: rhodecode/templates/files/files_source.html:44 #, python-format msgid "Binary file (%s)" msgstr "二進位檔 (%s)" -#: rhodecode/templates/files/files_source.html:68 +#: rhodecode/templates/files/files_source.html:53 msgid "File is too big to display" msgstr "顯示的檔案太大" -#: rhodecode/templates/files/files_source.html:124 -msgid "Selection link" -msgstr "" - #: rhodecode/templates/files/files_ypjax.html:5 #, fuzzy msgid "annotation" @@ -3595,7 +3882,7 @@ msgstr "分支" msgid "forked" msgstr "已建立分支" -#: rhodecode/templates/forks/forks_data.html:38 +#: rhodecode/templates/forks/forks_data.html:42 msgid "There are no forks yet" msgstr "尚未有任何 fork" @@ -3610,7 +3897,7 @@ msgid "RSS journal feed" msgstr "%s 公開日誌 %s feed" #: rhodecode/templates/journal/journal.html:24 -#: rhodecode/templates/pullrequests/pullrequest.html:27 +#: rhodecode/templates/pullrequests/pullrequest.html:55 msgid "Refresh" msgstr "" @@ -3634,19 +3921,19 @@ msgstr "快取" msgid "ADD" msgstr "新增" -#: rhodecode/templates/journal/journal.html:114 +#: rhodecode/templates/journal/journal.html:69 msgid "following user" msgstr "追蹤使用者" -#: rhodecode/templates/journal/journal.html:114 +#: rhodecode/templates/journal/journal.html:69 msgid "user" msgstr "使用者" -#: rhodecode/templates/journal/journal.html:147 +#: rhodecode/templates/journal/journal.html:102 msgid "You are not following any users or repositories" msgstr "您尚未追蹤任何使用者或版本庫" -#: rhodecode/templates/journal/journal_data.html:47 +#: rhodecode/templates/journal/journal_data.html:51 msgid "No entries yet" msgstr "" @@ -3669,7 +3956,7 @@ msgstr "開放日誌" msgid "New pull request" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:28 +#: rhodecode/templates/pullrequests/pullrequest.html:54 msgid "refresh overview" msgstr "" @@ -3679,18 +3966,18 @@ msgid "Detailed compare view" msgstr "比較顯示" #: rhodecode/templates/pullrequests/pullrequest.html:70 -#: rhodecode/templates/pullrequests/pullrequest_show.html:82 +#: rhodecode/templates/pullrequests/pullrequest_show.html:100 msgid "Pull request reviewers" msgstr "" #: rhodecode/templates/pullrequests/pullrequest.html:79 -#: rhodecode/templates/pullrequests/pullrequest_show.html:94 +#: rhodecode/templates/pullrequests/pullrequest_show.html:112 #, fuzzy msgid "owner" msgstr "擁有者" #: rhodecode/templates/pullrequests/pullrequest.html:91 -#: rhodecode/templates/pullrequests/pullrequest_show.html:109 +#: rhodecode/templates/pullrequests/pullrequest_show.html:127 msgid "Add reviewer to this pull request." msgstr "" @@ -3706,11 +3993,6 @@ msgstr "建立使用者 %s" msgid "Title" msgstr "寫" -#: rhodecode/templates/pullrequests/pullrequest.html:115 -#, fuzzy -msgid "description" -msgstr "描述" - #: rhodecode/templates/pullrequests/pullrequest.html:123 msgid "Send pull request" msgstr "" @@ -3720,6 +4002,11 @@ msgstr "" msgid "Closed %s" msgstr "" +#: rhodecode/templates/pullrequests/pullrequest_show.html:23 +#, python-format +msgid "with status %s" +msgstr "" + #: rhodecode/templates/pullrequests/pullrequest_show.html:31 #, fuzzy msgid "Status" @@ -3733,27 +4020,26 @@ msgstr "" msgid "Still not reviewed by" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:47 +#: rhodecode/templates/pullrequests/pullrequest_show.html:48 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" msgstr[0] "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:54 +#: rhodecode/templates/pullrequests/pullrequest_show.html:50 +msgid "pull request was reviewed by all reviewers" +msgstr "" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:58 #, fuzzy msgid "Created on" msgstr "建立使用者 %s" -#: rhodecode/templates/pullrequests/pullrequest_show.html:61 +#: rhodecode/templates/pullrequests/pullrequest_show.html:65 #, fuzzy msgid "Compare view" msgstr "比較顯示" -#: rhodecode/templates/pullrequests/pullrequest_show.html:65 -#, fuzzy -msgid "Incoming changesets" -msgstr "尚未有任何變更" - #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4 #, fuzzy msgid "all pull requests" @@ -3826,28 +4112,32 @@ msgstr "設定" msgid "%s Shortlog" msgstr "簡短紀錄" -#: rhodecode/templates/shortlog/shortlog.html:14 +#: rhodecode/templates/shortlog/shortlog.html:15 +#: rhodecode/templates/shortlog/shortlog.html:19 msgid "shortlog" msgstr "簡短紀錄" +#: rhodecode/templates/shortlog/shortlog_data.html:5 +msgid "revision" +msgstr "修訂" + #: rhodecode/templates/shortlog/shortlog_data.html:7 msgid "age" msgstr "" -#: rhodecode/templates/shortlog/shortlog_data.html:18 -#, fuzzy -msgid "No commit message" -msgstr "遞交資訊" - -#: rhodecode/templates/shortlog/shortlog_data.html:62 +#: rhodecode/templates/shortlog/shortlog_data.html:8 +msgid "author" +msgstr "作者" + +#: rhodecode/templates/shortlog/shortlog_data.html:75 msgid "Add or upload files directly via RhodeCode" msgstr "" -#: rhodecode/templates/shortlog/shortlog_data.html:71 +#: rhodecode/templates/shortlog/shortlog_data.html:84 msgid "Push new repo" msgstr "" -#: rhodecode/templates/shortlog/shortlog_data.html:79 +#: rhodecode/templates/shortlog/shortlog_data.html:92 #, fuzzy msgid "Existing repository?" msgstr "Git 版本庫" @@ -3877,132 +4167,142 @@ msgstr "訂閱 %s rss" msgid "ATOM" msgstr "作者" -#: rhodecode/templates/summary/summary.html:82 +#: rhodecode/templates/summary/summary.html:70 +#, fuzzy, python-format +msgid "Repository locked by %s" +msgstr "個版本庫" + +#: rhodecode/templates/summary/summary.html:72 +#, fuzzy +msgid "Repository unlocked" +msgstr "個版本庫" + +#: rhodecode/templates/summary/summary.html:91 #, fuzzy, python-format msgid "Non changable ID %s" msgstr "沒有修改" -#: rhodecode/templates/summary/summary.html:87 +#: rhodecode/templates/summary/summary.html:96 msgid "public" msgstr "公開" -#: rhodecode/templates/summary/summary.html:95 +#: rhodecode/templates/summary/summary.html:104 msgid "remote clone" msgstr "遠端複製" -#: rhodecode/templates/summary/summary.html:116 +#: rhodecode/templates/summary/summary.html:125 msgid "Contact" msgstr "聯絡方式" -#: rhodecode/templates/summary/summary.html:130 +#: rhodecode/templates/summary/summary.html:139 msgid "Clone url" msgstr "複製連結" -#: rhodecode/templates/summary/summary.html:133 +#: rhodecode/templates/summary/summary.html:142 #, fuzzy msgid "Show by Name" msgstr "顯示更多" -#: rhodecode/templates/summary/summary.html:134 +#: rhodecode/templates/summary/summary.html:143 msgid "Show by ID" msgstr "" -#: rhodecode/templates/summary/summary.html:142 +#: rhodecode/templates/summary/summary.html:151 #, fuzzy msgid "Trending files" msgstr "編輯檔案" -#: rhodecode/templates/summary/summary.html:150 -#: rhodecode/templates/summary/summary.html:166 -#: rhodecode/templates/summary/summary.html:194 +#: rhodecode/templates/summary/summary.html:159 +#: rhodecode/templates/summary/summary.html:175 +#: rhodecode/templates/summary/summary.html:203 msgid "enable" msgstr "啟用" -#: rhodecode/templates/summary/summary.html:158 +#: rhodecode/templates/summary/summary.html:167 msgid "Download" msgstr "下載" -#: rhodecode/templates/summary/summary.html:162 +#: rhodecode/templates/summary/summary.html:171 msgid "There are no downloads yet" msgstr "沒有任何下載" -#: rhodecode/templates/summary/summary.html:164 +#: rhodecode/templates/summary/summary.html:173 msgid "Downloads are disabled for this repository" msgstr "這個版本庫的下載已停用" -#: rhodecode/templates/summary/summary.html:170 +#: rhodecode/templates/summary/summary.html:179 #, fuzzy msgid "Download as zip" msgstr "下載原始文件" -#: rhodecode/templates/summary/summary.html:173 +#: rhodecode/templates/summary/summary.html:182 msgid "Check this to download archive with subrepos" msgstr "" -#: rhodecode/templates/summary/summary.html:173 +#: rhodecode/templates/summary/summary.html:182 msgid "with subrepos" msgstr "" -#: rhodecode/templates/summary/summary.html:186 +#: rhodecode/templates/summary/summary.html:195 msgid "Commit activity by day / author" msgstr "" -#: rhodecode/templates/summary/summary.html:197 +#: rhodecode/templates/summary/summary.html:206 msgid "Stats gathered: " msgstr "" -#: rhodecode/templates/summary/summary.html:218 +#: rhodecode/templates/summary/summary.html:227 msgid "Shortlog" msgstr "簡短紀錄" -#: rhodecode/templates/summary/summary.html:220 +#: rhodecode/templates/summary/summary.html:229 #, fuzzy msgid "Quick start" msgstr "快速過濾..." -#: rhodecode/templates/summary/summary.html:233 +#: rhodecode/templates/summary/summary.html:243 #, python-format msgid "Readme file at revision '%s'" msgstr "" -#: rhodecode/templates/summary/summary.html:236 +#: rhodecode/templates/summary/summary.html:246 msgid "Permalink to this readme" msgstr "" -#: rhodecode/templates/summary/summary.html:293 +#: rhodecode/templates/summary/summary.html:304 #, python-format msgid "Download %s as %s" msgstr "下載 %s 為 %s" -#: rhodecode/templates/summary/summary.html:650 +#: rhodecode/templates/summary/summary.html:661 msgid "commits" msgstr "遞交" -#: rhodecode/templates/summary/summary.html:651 +#: rhodecode/templates/summary/summary.html:662 msgid "files added" msgstr "多個檔案新增" -#: rhodecode/templates/summary/summary.html:652 +#: rhodecode/templates/summary/summary.html:663 msgid "files changed" msgstr "多個檔案修改" -#: rhodecode/templates/summary/summary.html:653 +#: rhodecode/templates/summary/summary.html:664 msgid "files removed" msgstr "移除多個檔案" -#: rhodecode/templates/summary/summary.html:656 +#: rhodecode/templates/summary/summary.html:667 msgid "commit" msgstr "遞交" -#: rhodecode/templates/summary/summary.html:657 +#: rhodecode/templates/summary/summary.html:668 msgid "file added" msgstr "檔案新增" -#: rhodecode/templates/summary/summary.html:658 +#: rhodecode/templates/summary/summary.html:669 msgid "file changed" msgstr "檔案修改" -#: rhodecode/templates/summary/summary.html:659 +#: rhodecode/templates/summary/summary.html:670 msgid "file removed" msgstr "移除檔案" @@ -4011,3 +4311,8 @@ msgstr "移除檔案" msgid "%s Tags" msgstr "之前" +#: rhodecode/templates/tags/tags.html:29 +#, fuzzy +msgid "Compare tags" +msgstr "比較顯示" + diff --git a/rhodecode/lib/annotate.py b/rhodecode/lib/annotate.py --- a/rhodecode/lib/annotate.py +++ b/rhodecode/lib/annotate.py @@ -142,14 +142,15 @@ class AnnotateHtmlFormatter(HtmlFormatte lines.append('') ls = '\n'.join(lines) - annotate_changesets = [tup[1] for tup in self.filenode.annotate] - # If pygments cropped last lines break we need do that too - ln_cs = len(annotate_changesets) - ln_ = len(ls.splitlines()) - if ln_cs > ln_: - annotate_changesets = annotate_changesets[:ln_ - ln_cs] - annotate = ''.join((self.annotate_from_changeset(changeset) - for changeset in annotate_changesets)) +# annotate_changesets = [tup[1] for tup in self.filenode.annotate] +## TODO: not sure what that fixes +# # If pygments cropped last lines break we need do that too +# ln_cs = len(annotate_changesets) +# ln_ = len(ls.splitlines()) +# if ln_cs > ln_: +# annotate_changesets = annotate_changesets[:ln_ - ln_cs] + annotate = ''.join((self.annotate_from_changeset(el[2]()) + for el in self.filenode.annotate)) # in case you wonder about the seemingly redundant
here: # since the content in the other cell also is wrapped in a div, # some browsers in some configurations seem to mess up the formatting. diff --git a/rhodecode/lib/auth_ldap.py b/rhodecode/lib/auth_ldap.py --- a/rhodecode/lib/auth_ldap.py +++ b/rhodecode/lib/auth_ldap.py @@ -57,17 +57,19 @@ class AuthLdap(object): OPT_X_TLS_DEMAND = 2 self.TLS_REQCERT = getattr(ldap, 'OPT_X_TLS_%s' % tls_reqcert, OPT_X_TLS_DEMAND) - self.LDAP_SERVER_ADDRESS = server + # split server into list + self.LDAP_SERVER_ADDRESS = server.split(',') self.LDAP_SERVER_PORT = port # USE FOR READ ONLY BIND TO LDAP SERVER self.LDAP_BIND_DN = safe_str(bind_dn) self.LDAP_BIND_PASS = safe_str(bind_pass) - - self.LDAP_SERVER = "%s://%s:%s" % (ldap_server_type, - self.LDAP_SERVER_ADDRESS, - self.LDAP_SERVER_PORT) - + _LDAP_SERVERS = [] + for host in self.LDAP_SERVER_ADDRESS: + _LDAP_SERVERS.append("%s://%s:%s" % (ldap_server_type, + host.replace(' ', ''), + self.LDAP_SERVER_PORT)) + self.LDAP_SERVER = str(', '.join(s for s in _LDAP_SERVERS)) self.BASE_DN = safe_str(base_dn) self.LDAP_FILTER = safe_str(ldap_filter) self.SEARCH_SCOPE = getattr(ldap, 'SCOPE_%s' % search_scope) @@ -115,6 +117,8 @@ class AuthLdap(object): server.start_tls_s() if self.LDAP_BIND_DN and self.LDAP_BIND_PASS: + log.debug('Trying simple_bind with password and given DN: %s' + % self.LDAP_BIND_DN) server.simple_bind_s(self.LDAP_BIND_DN, self.LDAP_BIND_PASS) filter_ = '(&%s(%s=%s))' % (self.LDAP_FILTER, self.attr_login, diff --git a/rhodecode/lib/base.py b/rhodecode/lib/base.py --- a/rhodecode/lib/base.py +++ b/rhodecode/lib/base.py @@ -8,8 +8,7 @@ import traceback from paste.auth.basic import AuthBasicAuthenticator from paste.httpexceptions import HTTPUnauthorized, HTTPForbidden -from webob.exc import HTTPClientError -from paste.httpheaders import WWW_AUTHENTICATE +from paste.httpheaders import WWW_AUTHENTICATE, AUTHORIZATION from pylons import config, tmpl_context as c, request, session, url from pylons.controllers import WSGIController @@ -19,13 +18,13 @@ from pylons.templating import render_mak from rhodecode import __version__, BACKENDS from rhodecode.lib.utils2 import str2bool, safe_unicode, AttributeDict,\ - safe_str + safe_str, safe_int from rhodecode.lib.auth import AuthUser, get_container_username, authfunc,\ HasPermissionAnyMiddleware, CookieStoreWrapper from rhodecode.lib.utils import get_repo_slug, invalidate_cache from rhodecode.model import meta -from rhodecode.model.db import Repository, RhodeCodeUi, User +from rhodecode.model.db import Repository, RhodeCodeUi, User, RhodeCodeSetting from rhodecode.model.notification import NotificationModel from rhodecode.model.scm import ScmModel from rhodecode.model.meta import Session @@ -74,6 +73,23 @@ class BasicAuth(AuthBasicAuthenticator): return HTTPForbidden(headers=head) return HTTPUnauthorized(headers=head) + def authenticate(self, environ): + authorization = AUTHORIZATION(environ) + if not authorization: + return self.build_authentication() + (authmeth, auth) = authorization.split(' ', 1) + if 'basic' != authmeth.lower(): + return self.build_authentication() + auth = auth.strip().decode('base64') + _parts = auth.split(':', 1) + if len(_parts) == 2: + username, password = _parts + if self.authfunc(environ, username, password): + return username + return self.build_authentication() + + __call__ = authenticate + class BaseVCSController(object): @@ -226,9 +242,13 @@ class BaseController(WSGIController): c.ga_code = config.get('rhodecode_ga_code') # Visual options c.visual = AttributeDict({}) - c.visual.show_public_icon = str2bool(config.get('rhodecode_show_public_icon')) - c.visual.show_private_icon = str2bool(config.get('rhodecode_show_private_icon')) - c.visual.stylify_metatags = str2bool(config.get('rhodecode_stylify_metatags')) + rc_config = RhodeCodeSetting.get_app_settings() + + c.visual.show_public_icon = str2bool(rc_config.get('rhodecode_show_public_icon')) + c.visual.show_private_icon = str2bool(rc_config.get('rhodecode_show_private_icon')) + c.visual.stylify_metatags = str2bool(rc_config.get('rhodecode_stylify_metatags')) + c.visual.lightweight_dashboard = str2bool(rc_config.get('rhodecode_lightweight_dashboard')) + c.visual.lightweight_dashboard_items = safe_int(config.get('dashboard_items', 100)) c.repo_name = get_repo_slug(request) c.backends = BACKENDS.keys() @@ -290,7 +310,8 @@ class BaseRepoController(BaseController) dbr = c.rhodecode_db_repo = Repository.get_by_repo_name(c.repo_name) c.rhodecode_repo = c.rhodecode_db_repo.scm_instance - + # update last change according to VCS data + dbr.update_last_change(c.rhodecode_repo.last_change) if c.rhodecode_repo is None: log.error('%s this repository is present in database but it ' 'cannot be created as an scm instance', c.repo_name) diff --git a/rhodecode/lib/celerylib/__init__.py b/rhodecode/lib/celerylib/__init__.py --- a/rhodecode/lib/celerylib/__init__.py +++ b/rhodecode/lib/celerylib/__init__.py @@ -93,7 +93,7 @@ def __get_lockkey(func, *fargs, **fkwarg def locked_task(func): def __wrapper(func, *fargs, **fkwargs): lockkey = __get_lockkey(func, *fargs, **fkwargs) - lockkey_path = config['here'] + lockkey_path = config['app_conf']['cache_dir'] log.info('running task with lockkey %s' % lockkey) try: diff --git a/rhodecode/lib/celerylib/tasks.py b/rhodecode/lib/celerylib/tasks.py --- a/rhodecode/lib/celerylib/tasks.py +++ b/rhodecode/lib/celerylib/tasks.py @@ -50,6 +50,7 @@ from rhodecode.lib.compat import json, O from rhodecode.lib.hooks import log_create_repository from rhodecode.model.db import Statistics, Repository, User +from rhodecode.model.scm import ScmModel add_cache(config) @@ -91,7 +92,7 @@ def get_commits_stats(repo_name, ts_min_ DBS = get_session() lockkey = __get_lockkey('get_commits_stats', repo_name, ts_min_y, ts_max_y) - lockkey_path = config['here'] + lockkey_path = config['app_conf']['cache_dir'] log.info('running task with lockkey %s' % lockkey) @@ -402,12 +403,14 @@ def create_repo_fork(form_data, cur_user backend = get_backend(repo_type) if repo_type == 'git': - backend(safe_str(destination_fork_path), create=True, + r = backend(safe_str(destination_fork_path), create=True, src_url=safe_str(source_repo_path), update_after_clone=update_after_clone, bare=True) + # add rhodecode hook into this repo + ScmModel().install_git_hook(repo=r) elif repo_type == 'hg': - backend(safe_str(destination_fork_path), create=True, + r = backend(safe_str(destination_fork_path), create=True, src_url=safe_str(source_repo_path), update_after_clone=update_after_clone) else: diff --git a/rhodecode/lib/cleanup.py b/rhodecode/lib/cleanup.py --- a/rhodecode/lib/cleanup.py +++ b/rhodecode/lib/cleanup.py @@ -31,7 +31,7 @@ import datetime from os.path import dirname as dn, join as jn from rhodecode.model import init_model -from rhodecode.lib.utils2 import engine_from_config +from rhodecode.lib.utils2 import engine_from_config, safe_str from rhodecode.model.db import RhodeCodeUi @@ -88,9 +88,10 @@ class CleanupCommand(BasePasterCommand): repos_location = RhodeCodeUi.get_repos_location() to_remove = [] - for loc in os.listdir(repos_location): - if REMOVED_REPO_PAT.match(loc): - to_remove.append([loc, self._extract_date(loc)]) + for dn, dirs, f in os.walk(safe_str(repos_location)): + for loc in dirs: + if REMOVED_REPO_PAT.match(loc): + to_remove.append([loc, self._extract_date(loc)]) #filter older than (if present)! now = datetime.datetime.now() @@ -114,8 +115,8 @@ class CleanupCommand(BasePasterCommand): remove = True else: remove = ask_ok('are you sure to remove listed repos \n%s [y/n]?' - % ', \n'.join(['%s removed on %s' % (x[0], x[1]) - for x in to_remove])) + % ', \n'.join(['%s removed on %s' + % (safe_str(x[0]), safe_str(x[1])) for x in to_remove])) if remove: for name, date_ in to_remove: diff --git a/rhodecode/lib/db_manage.py b/rhodecode/lib/db_manage.py --- a/rhodecode/lib/db_manage.py +++ b/rhodecode/lib/db_manage.py @@ -57,32 +57,39 @@ def notify(msg): class DbManage(object): - def __init__(self, log_sql, dbconf, root, tests=False): + def __init__(self, log_sql, dbconf, root, tests=False, cli_args={}): self.dbname = dbconf.split('/')[-1] self.tests = tests self.root = root self.dburi = dbconf self.log_sql = log_sql self.db_exists = False + self.cli_args = cli_args self.init_db() + global ask_ok + + if self.cli_args.get('force_ask') is True: + ask_ok = lambda *args, **kwargs: True + elif self.cli_args.get('force_ask') is False: + ask_ok = lambda *args, **kwargs: False def init_db(self): engine = create_engine(self.dburi, echo=self.log_sql) init_model(engine) self.sa = Session() - def create_tables(self, override=False, defaults={}): + def create_tables(self, override=False): """ Create a auth database """ - quiet = defaults.get('quiet') + log.info("Any existing database is going to be destroyed") - if self.tests or quiet: + if self.tests: destroy = True else: destroy = ask_ok('Are you sure to destroy old database ? [y/n]') if not destroy: - sys.exit() + sys.exit('Nothing done') if destroy: Base.metadata.drop_all() @@ -264,6 +271,11 @@ class DbManage(object): 'Please validate and check default permissions ' 'in admin panel') + def step_8(self): + self.klass.populate_default_permissions() + self.klass.create_default_options(skip_existing=True) + Session().commit() + upgrade_steps = [0] + range(curr_version + 1, __dbversion__ + 1) # CALL THE PROPER ORDER OF STEPS TO PERFORM FULL UPGRADE @@ -328,11 +340,12 @@ class DbManage(object): self.sa.rollback() raise - def admin_prompt(self, second=False, defaults={}): + def admin_prompt(self, second=False): if not self.tests: import getpass # defaults + defaults = self.cli_args username = defaults.get('username') password = defaults.get('password') email = defaults.get('email') @@ -470,6 +483,22 @@ class DbManage(object): setting = RhodeCodeSetting(k, v) self.sa.add(setting) + def create_default_options(self, skip_existing=False): + """Creates default settings""" + + for k, v in [ + ('default_repo_enable_locking', False), + ('default_repo_enable_downloads', False), + ('default_repo_enable_statistics', False), + ('default_repo_private', False), + ('default_repo_type', 'hg')]: + + if skip_existing and RhodeCodeSetting.get_by_name(k) != None: + log.debug('Skipping option %s' % k) + continue + setting = RhodeCodeSetting(k, v) + self.sa.add(setting) + def fixup_groups(self): def_usr = User.get_by_username('default') for g in RepoGroup.query().all(): @@ -507,7 +536,8 @@ class DbManage(object): self.populate_default_permissions() return fixed - def config_prompt(self, test_repo_path='', retries=3, defaults={}): + def config_prompt(self, test_repo_path='', retries=3): + defaults = self.cli_args _path = defaults.get('repos_location') if retries == 3: log.info('Setting up repositories config') @@ -543,9 +573,9 @@ class DbManage(object): retries -= 1 return self.config_prompt(test_repo_path, retries) - real_path = os.path.realpath(path) + real_path = os.path.normpath(os.path.realpath(path)) - if real_path != path: + if real_path != os.path.normpath(path): if not ask_ok(('Path looks like a symlink, Rhodecode will store ' 'given path as %s ? [y/n]') % (real_path)): log.error('Canceled by user') @@ -609,6 +639,7 @@ class DbManage(object): self.sa.add(sett6) self.create_ldap_options() + self.create_default_options() log.info('created ui config') diff --git a/rhodecode/lib/dbmigrate/schema/db_1_4_0.py b/rhodecode/lib/dbmigrate/schema/db_1_4_0.py --- a/rhodecode/lib/dbmigrate/schema/db_1_4_0.py +++ b/rhodecode/lib/dbmigrate/schema/db_1_4_0.py @@ -23,6 +23,1792 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -#TODO: replace that will db.py content after 1.5 Release +import os +import logging +import datetime +import traceback +import hashlib +import time +from collections import defaultdict + +from sqlalchemy import * +from sqlalchemy.ext.hybrid import hybrid_property +from sqlalchemy.orm import relationship, joinedload, class_mapper, validates +from sqlalchemy.exc import DatabaseError +from beaker.cache import cache_region, region_invalidate +from webob.exc import HTTPNotFound + +from pylons.i18n.translation import lazy_ugettext as _ + +from rhodecode.lib.vcs import get_backend +from rhodecode.lib.vcs.utils.helpers import get_scm +from rhodecode.lib.vcs.exceptions import VCSError +from rhodecode.lib.vcs.utils.lazy import LazyProperty + +from rhodecode.lib.utils2 import str2bool, safe_str, get_changeset_safe, \ + safe_unicode, remove_suffix +from rhodecode.lib.compat import json +from rhodecode.lib.caching_query import FromCache + +from rhodecode.model.meta import Base, Session + +URL_SEP = '/' +log = logging.getLogger(__name__) + +#============================================================================== +# BASE CLASSES +#============================================================================== + +_hash_key = lambda k: hashlib.md5(safe_str(k)).hexdigest() + + +class BaseModel(object): + """ + Base Model for all classess + """ + + @classmethod + def _get_keys(cls): + """return column names for this model """ + return class_mapper(cls).c.keys() + + def get_dict(self): + """ + return dict with keys and values corresponding + to this model data """ + + d = {} + for k in self._get_keys(): + d[k] = getattr(self, k) + + # also use __json__() if present to get additional fields + _json_attr = getattr(self, '__json__', None) + if _json_attr: + # update with attributes from __json__ + if callable(_json_attr): + _json_attr = _json_attr() + for k, val in _json_attr.iteritems(): + d[k] = val + return d + + def get_appstruct(self): + """return list with keys and values tupples corresponding + to this model data """ + + l = [] + for k in self._get_keys(): + l.append((k, getattr(self, k),)) + return l + + def populate_obj(self, populate_dict): + """populate model with data from given populate_dict""" + + for k in self._get_keys(): + if k in populate_dict: + setattr(self, k, populate_dict[k]) + + @classmethod + def query(cls): + return Session().query(cls) + + @classmethod + def get(cls, id_): + if id_: + return cls.query().get(id_) + + @classmethod + def get_or_404(cls, id_): + try: + id_ = int(id_) + except (TypeError, ValueError): + raise HTTPNotFound + + res = cls.query().get(id_) + if not res: + raise HTTPNotFound + return res + + @classmethod + def getAll(cls): + return cls.query().all() + + @classmethod + def delete(cls, id_): + obj = cls.query().get(id_) + Session().delete(obj) + + def __repr__(self): + if hasattr(self, '__unicode__'): + # python repr needs to return str + return safe_str(self.__unicode__()) + return '' % (self.__class__.__name__) + + +class RhodeCodeSetting(Base, BaseModel): + __tablename__ = 'rhodecode_settings' + __table_args__ = ( + UniqueConstraint('app_settings_name'), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'} + ) + app_settings_id = Column("app_settings_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + app_settings_name = Column("app_settings_name", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + _app_settings_value = Column("app_settings_value", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + + def __init__(self, k='', v=''): + self.app_settings_name = k + self.app_settings_value = v + + @validates('_app_settings_value') + def validate_settings_value(self, key, val): + assert type(val) == unicode + return val + + @hybrid_property + def app_settings_value(self): + v = self._app_settings_value + if self.app_settings_name == 'ldap_active': + v = str2bool(v) + return v + + @app_settings_value.setter + def app_settings_value(self, val): + """ + Setter that will always make sure we use unicode in app_settings_value + + :param val: + """ + self._app_settings_value = safe_unicode(val) + + def __unicode__(self): + return u"<%s('%s:%s')>" % ( + self.__class__.__name__, + self.app_settings_name, self.app_settings_value + ) + + @classmethod + def get_by_name(cls, key): + return cls.query()\ + .filter(cls.app_settings_name == key).scalar() + + @classmethod + def get_by_name_or_create(cls, key): + res = cls.get_by_name(key) + if not res: + res = cls(key) + return res + + @classmethod + def get_app_settings(cls, cache=False): + + ret = cls.query() + + if cache: + ret = ret.options(FromCache("sql_cache_short", "get_hg_settings")) + + if not ret: + raise Exception('Could not get application settings !') + settings = {} + for each in ret: + settings['rhodecode_' + each.app_settings_name] = \ + each.app_settings_value + + return settings + + @classmethod + def get_ldap_settings(cls, cache=False): + ret = cls.query()\ + .filter(cls.app_settings_name.startswith('ldap_')).all() + fd = {} + for row in ret: + fd.update({row.app_settings_name: row.app_settings_value}) + + return fd + + +class RhodeCodeUi(Base, BaseModel): + __tablename__ = 'rhodecode_ui' + __table_args__ = ( + UniqueConstraint('ui_key'), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'} + ) + + HOOK_UPDATE = 'changegroup.update' + HOOK_REPO_SIZE = 'changegroup.repo_size' + HOOK_PUSH = 'changegroup.push_logger' + HOOK_PRE_PUSH = 'prechangegroup.pre_push' + HOOK_PULL = 'outgoing.pull_logger' + HOOK_PRE_PULL = 'preoutgoing.pre_pull' + + ui_id = Column("ui_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + ui_section = Column("ui_section", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + ui_key = Column("ui_key", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + ui_value = Column("ui_value", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + ui_active = Column("ui_active", Boolean(), nullable=True, unique=None, default=True) + + @classmethod + def get_by_key(cls, key): + return cls.query().filter(cls.ui_key == key).scalar() + + @classmethod + def get_builtin_hooks(cls): + q = cls.query() + q = q.filter(cls.ui_key.in_([cls.HOOK_UPDATE, cls.HOOK_REPO_SIZE, + cls.HOOK_PUSH, cls.HOOK_PRE_PUSH, + cls.HOOK_PULL, cls.HOOK_PRE_PULL])) + return q.all() + + @classmethod + def get_custom_hooks(cls): + q = cls.query() + q = q.filter(~cls.ui_key.in_([cls.HOOK_UPDATE, cls.HOOK_REPO_SIZE, + cls.HOOK_PUSH, cls.HOOK_PRE_PUSH, + cls.HOOK_PULL, cls.HOOK_PRE_PULL])) + q = q.filter(cls.ui_section == 'hooks') + return q.all() + + @classmethod + def get_repos_location(cls): + return cls.get_by_key('/').ui_value + + @classmethod + def create_or_update_hook(cls, key, val): + new_ui = cls.get_by_key(key) or cls() + new_ui.ui_section = 'hooks' + new_ui.ui_active = True + new_ui.ui_key = key + new_ui.ui_value = val + + Session().add(new_ui) + + def __repr__(self): + return '' % (self.__class__.__name__, self.ui_key, + self.ui_value) + + +class User(Base, BaseModel): + __tablename__ = 'users' + __table_args__ = ( + UniqueConstraint('username'), UniqueConstraint('email'), + Index('u_username_idx', 'username'), + Index('u_email_idx', 'email'), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'} + ) + DEFAULT_USER = 'default' + DEFAULT_PERMISSIONS = [ + 'hg.register.manual_activate', 'hg.create.repository', + 'hg.fork.repository', 'repository.read', 'group.read' + ] + user_id = Column("user_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + username = Column("username", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + password = Column("password", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + active = Column("active", Boolean(), nullable=True, unique=None, default=True) + admin = Column("admin", Boolean(), nullable=True, unique=None, default=False) + name = Column("firstname", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + lastname = Column("lastname", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + _email = Column("email", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + last_login = Column("last_login", DateTime(timezone=False), nullable=True, unique=None, default=None) + ldap_dn = Column("ldap_dn", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + api_key = Column("api_key", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + inherit_default_permissions = Column("inherit_default_permissions", Boolean(), nullable=False, unique=None, default=True) + + user_log = relationship('UserLog', cascade='all') + user_perms = relationship('UserToPerm', primaryjoin="User.user_id==UserToPerm.user_id", cascade='all') + + repositories = relationship('Repository') + user_followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_user_id==User.user_id', cascade='all') + repo_to_perm = relationship('UserRepoToPerm', primaryjoin='UserRepoToPerm.user_id==User.user_id', cascade='all') + repo_group_to_perm = relationship('UserRepoGroupToPerm', primaryjoin='UserRepoGroupToPerm.user_id==User.user_id', cascade='all') + + group_member = relationship('UsersGroupMember', cascade='all') + + notifications = relationship('UserNotification', cascade='all') + # notifications assigned to this user + user_created_notifications = relationship('Notification', cascade='all') + # comments created by this user + user_comments = relationship('ChangesetComment', cascade='all') + #extra emails for this user + user_emails = relationship('UserEmailMap', cascade='all') + + @hybrid_property + def email(self): + return self._email + + @email.setter + def email(self, val): + self._email = val.lower() if val else None + + @property + def firstname(self): + # alias for future + return self.name + + @property + def emails(self): + other = UserEmailMap.query().filter(UserEmailMap.user==self).all() + return [self.email] + [x.email for x in other] + + @property + def username_and_name(self): + return '%s (%s %s)' % (self.username, self.firstname, self.lastname) + + @property + def full_name(self): + return '%s %s' % (self.firstname, self.lastname) + + @property + def full_name_or_username(self): + return ('%s %s' % (self.firstname, self.lastname) + if (self.firstname and self.lastname) else self.username) + + @property + def full_contact(self): + return '%s %s <%s>' % (self.firstname, self.lastname, self.email) + + @property + def short_contact(self): + return '%s %s' % (self.firstname, self.lastname) + + @property + def is_admin(self): + return self.admin + + def __unicode__(self): + return u"<%s('id:%s:%s')>" % (self.__class__.__name__, + self.user_id, self.username) + + @classmethod + def get_by_username(cls, username, case_insensitive=False, cache=False): + if case_insensitive: + q = cls.query().filter(cls.username.ilike(username)) + else: + q = cls.query().filter(cls.username == username) + + if cache: + q = q.options(FromCache( + "sql_cache_short", + "get_user_%s" % _hash_key(username) + ) + ) + return q.scalar() + + @classmethod + def get_by_api_key(cls, api_key, cache=False): + q = cls.query().filter(cls.api_key == api_key) + + if cache: + q = q.options(FromCache("sql_cache_short", + "get_api_key_%s" % api_key)) + return q.scalar() + + @classmethod + def get_by_email(cls, email, case_insensitive=False, cache=False): + if case_insensitive: + q = cls.query().filter(cls.email.ilike(email)) + else: + q = cls.query().filter(cls.email == email) + + if cache: + q = q.options(FromCache("sql_cache_short", + "get_email_key_%s" % email)) + + ret = q.scalar() + if ret is None: + q = UserEmailMap.query() + # try fetching in alternate email map + if case_insensitive: + q = q.filter(UserEmailMap.email.ilike(email)) + else: + q = q.filter(UserEmailMap.email == email) + q = q.options(joinedload(UserEmailMap.user)) + if cache: + q = q.options(FromCache("sql_cache_short", + "get_email_map_key_%s" % email)) + ret = getattr(q.scalar(), 'user', None) + + return ret + + def update_lastlogin(self): + """Update user lastlogin""" + self.last_login = datetime.datetime.now() + Session().add(self) + log.debug('updated user %s lastlogin' % self.username) + + def get_api_data(self): + """ + Common function for generating user related data for API + """ + user = self + data = dict( + user_id=user.user_id, + username=user.username, + firstname=user.name, + lastname=user.lastname, + email=user.email, + emails=user.emails, + api_key=user.api_key, + active=user.active, + admin=user.admin, + ldap_dn=user.ldap_dn, + last_login=user.last_login, + ) + return data + + def __json__(self): + data = dict( + full_name=self.full_name, + full_name_or_username=self.full_name_or_username, + short_contact=self.short_contact, + full_contact=self.full_contact + ) + data.update(self.get_api_data()) + return data + + +class UserEmailMap(Base, BaseModel): + __tablename__ = 'user_email_map' + __table_args__ = ( + Index('uem_email_idx', 'email'), + UniqueConstraint('email'), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'} + ) + __mapper_args__ = {} + + email_id = Column("email_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None) + _email = Column("email", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None) + user = relationship('User', lazy='joined') + + @validates('_email') + def validate_email(self, key, email): + # check if this email is not main one + main_email = Session().query(User).filter(User.email == email).scalar() + if main_email is not None: + raise AttributeError('email %s is present is user table' % email) + return email + + @hybrid_property + def email(self): + return self._email + + @email.setter + def email(self, val): + self._email = val.lower() if val else None + + +class UserLog(Base, BaseModel): + __tablename__ = 'user_logs' + __table_args__ = ( + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'}, + ) + user_log_id = Column("user_log_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) + repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True) + repository_name = Column("repository_name", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + user_ip = Column("user_ip", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + action = Column("action", UnicodeText(1200000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + action_date = Column("action_date", DateTime(timezone=False), nullable=True, unique=None, default=None) + + @property + def action_as_day(self): + return datetime.date(*self.action_date.timetuple()[:3]) + + user = relationship('User') + repository = relationship('Repository', cascade='') + + +class UsersGroup(Base, BaseModel): + __tablename__ = 'users_groups' + __table_args__ = ( + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'}, + ) + + users_group_id = Column("users_group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + users_group_name = Column("users_group_name", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None) + users_group_active = Column("users_group_active", Boolean(), nullable=True, unique=None, default=None) + inherit_default_permissions = Column("users_group_inherit_default_permissions", Boolean(), nullable=False, unique=None, default=True) + + members = relationship('UsersGroupMember', cascade="all, delete, delete-orphan", lazy="joined") + users_group_to_perm = relationship('UsersGroupToPerm', cascade='all') + users_group_repo_to_perm = relationship('UsersGroupRepoToPerm', cascade='all') + + def __unicode__(self): + return u'' % (self.users_group_name) + + @classmethod + def get_by_group_name(cls, group_name, cache=False, + case_insensitive=False): + if case_insensitive: + q = cls.query().filter(cls.users_group_name.ilike(group_name)) + else: + q = cls.query().filter(cls.users_group_name == group_name) + if cache: + q = q.options(FromCache( + "sql_cache_short", + "get_user_%s" % _hash_key(group_name) + ) + ) + return q.scalar() + + @classmethod + def get(cls, users_group_id, cache=False): + users_group = cls.query() + if cache: + users_group = users_group.options(FromCache("sql_cache_short", + "get_users_group_%s" % users_group_id)) + return users_group.get(users_group_id) + + def get_api_data(self): + users_group = self + + data = dict( + users_group_id=users_group.users_group_id, + group_name=users_group.users_group_name, + active=users_group.users_group_active, + ) + + return data + + +class UsersGroupMember(Base, BaseModel): + __tablename__ = 'users_groups_members' + __table_args__ = ( + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'}, + ) + + users_group_member_id = Column("users_group_member_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) + user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) + + user = relationship('User', lazy='joined') + users_group = relationship('UsersGroup') + + def __init__(self, gr_id='', u_id=''): + self.users_group_id = gr_id + self.user_id = u_id + + +class Repository(Base, BaseModel): + __tablename__ = 'repositories' + __table_args__ = ( + UniqueConstraint('repo_name'), + Index('r_repo_name_idx', 'repo_name'), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'}, + ) + + repo_id = Column("repo_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + repo_name = Column("repo_name", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None) + clone_uri = Column("clone_uri", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None) + repo_type = Column("repo_type", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default=None) + user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=False, default=None) + private = Column("private", Boolean(), nullable=True, unique=None, default=None) + enable_statistics = Column("statistics", Boolean(), nullable=True, unique=None, default=True) + enable_downloads = Column("downloads", Boolean(), nullable=True, unique=None, default=True) + description = Column("description", String(10000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + created_on = Column('created_on', DateTime(timezone=False), nullable=True, unique=None, default=datetime.datetime.now) + updated_on = Column('updated_on', DateTime(timezone=False), nullable=True, unique=None, default=datetime.datetime.now) + landing_rev = Column("landing_revision", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default=None) + enable_locking = Column("enable_locking", Boolean(), nullable=False, unique=None, default=False) + _locked = Column("locked", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None) + + fork_id = Column("fork_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=False, default=None) + group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=False, default=None) + + user = relationship('User') + fork = relationship('Repository', remote_side=repo_id) + group = relationship('RepoGroup') + repo_to_perm = relationship('UserRepoToPerm', cascade='all', order_by='UserRepoToPerm.repo_to_perm_id') + users_group_to_perm = relationship('UsersGroupRepoToPerm', cascade='all') + stats = relationship('Statistics', cascade='all', uselist=False) + + followers = relationship('UserFollowing', + primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id', + cascade='all') + + logs = relationship('UserLog') + comments = relationship('ChangesetComment', cascade="all, delete, delete-orphan") + + pull_requests_org = relationship('PullRequest', + primaryjoin='PullRequest.org_repo_id==Repository.repo_id', + cascade="all, delete, delete-orphan") + + pull_requests_other = relationship('PullRequest', + primaryjoin='PullRequest.other_repo_id==Repository.repo_id', + cascade="all, delete, delete-orphan") + + def __unicode__(self): + return u"<%s('%s:%s')>" % (self.__class__.__name__, self.repo_id, + self.repo_name) + + @hybrid_property + def locked(self): + # always should return [user_id, timelocked] + if self._locked: + _lock_info = self._locked.split(':') + return int(_lock_info[0]), _lock_info[1] + return [None, None] + + @locked.setter + def locked(self, val): + if val and isinstance(val, (list, tuple)): + self._locked = ':'.join(map(str, val)) + else: + self._locked = None + + @classmethod + def url_sep(cls): + return URL_SEP + + @classmethod + def get_by_repo_name(cls, repo_name): + q = Session().query(cls).filter(cls.repo_name == repo_name) + q = q.options(joinedload(Repository.fork))\ + .options(joinedload(Repository.user))\ + .options(joinedload(Repository.group)) + return q.scalar() + + @classmethod + def get_by_full_path(cls, repo_full_path): + repo_name = repo_full_path.split(cls.base_path(), 1)[-1] + return cls.get_by_repo_name(repo_name.strip(URL_SEP)) + + @classmethod + def get_repo_forks(cls, repo_id): + return cls.query().filter(Repository.fork_id == repo_id) + + @classmethod + def base_path(cls): + """ + Returns base path when all repos are stored + + :param cls: + """ + q = Session().query(RhodeCodeUi)\ + .filter(RhodeCodeUi.ui_key == cls.url_sep()) + q = q.options(FromCache("sql_cache_short", "repository_repo_path")) + return q.one().ui_value + + @property + def forks(self): + """ + Return forks of this repo + """ + return Repository.get_repo_forks(self.repo_id) + + @property + def parent(self): + """ + Returns fork parent + """ + return self.fork + + @property + def just_name(self): + return self.repo_name.split(Repository.url_sep())[-1] + + @property + def groups_with_parents(self): + groups = [] + if self.group is None: + return groups + + cur_gr = self.group + groups.insert(0, cur_gr) + while 1: + gr = getattr(cur_gr, 'parent_group', None) + cur_gr = cur_gr.parent_group + if gr is None: + break + groups.insert(0, gr) + + return groups + + @property + def groups_and_repo(self): + return self.groups_with_parents, self.just_name + + @LazyProperty + def repo_path(self): + """ + Returns base full path for that repository means where it actually + exists on a filesystem + """ + q = Session().query(RhodeCodeUi).filter(RhodeCodeUi.ui_key == + Repository.url_sep()) + q = q.options(FromCache("sql_cache_short", "repository_repo_path")) + return q.one().ui_value + + @property + def repo_full_path(self): + p = [self.repo_path] + # we need to split the name by / since this is how we store the + # names in the database, but that eventually needs to be converted + # into a valid system path + p += self.repo_name.split(Repository.url_sep()) + return os.path.join(*p) + + @property + def cache_keys(self): + """ + Returns associated cache keys for that repo + """ + return CacheInvalidation.query()\ + .filter(CacheInvalidation.cache_args == self.repo_name)\ + .order_by(CacheInvalidation.cache_key)\ + .all() + + def get_new_name(self, repo_name): + """ + returns new full repository name based on assigned group and new new + + :param group_name: + """ + path_prefix = self.group.full_path_splitted if self.group else [] + return Repository.url_sep().join(path_prefix + [repo_name]) + + @property + def _ui(self): + """ + Creates an db based ui object for this repository + """ + from rhodecode.lib.utils import make_ui + return make_ui('db', clear_session=False) + + @classmethod + def inject_ui(cls, repo, extras={}): + from rhodecode.lib.vcs.backends.hg import MercurialRepository + from rhodecode.lib.vcs.backends.git import GitRepository + required = (MercurialRepository, GitRepository) + if not isinstance(repo, required): + raise Exception('repo must be instance of %s' % required) + + # inject ui extra param to log this action via push logger + for k, v in extras.items(): + repo._repo.ui.setconfig('rhodecode_extras', k, v) + + @classmethod + def is_valid(cls, repo_name): + """ + returns True if given repo name is a valid filesystem repository + + :param cls: + :param repo_name: + """ + from rhodecode.lib.utils import is_valid_repo + + return is_valid_repo(repo_name, cls.base_path()) + + def get_api_data(self): + """ + Common function for generating repo api data + + """ + repo = self + data = dict( + repo_id=repo.repo_id, + repo_name=repo.repo_name, + repo_type=repo.repo_type, + clone_uri=repo.clone_uri, + private=repo.private, + created_on=repo.created_on, + description=repo.description, + landing_rev=repo.landing_rev, + owner=repo.user.username, + fork_of=repo.fork.repo_name if repo.fork else None + ) + + return data + + @classmethod + def lock(cls, repo, user_id): + repo.locked = [user_id, time.time()] + Session().add(repo) + Session().commit() + + @classmethod + def unlock(cls, repo): + repo.locked = None + Session().add(repo) + Session().commit() + + @property + def last_db_change(self): + return self.updated_on + + #========================================================================== + # SCM PROPERTIES + #========================================================================== + + def get_changeset(self, rev=None): + return get_changeset_safe(self.scm_instance, rev) + + def get_landing_changeset(self): + """ + Returns landing changeset, or if that doesn't exist returns the tip + """ + cs = self.get_changeset(self.landing_rev) or self.get_changeset() + return cs + + def update_last_change(self, last_change=None): + if last_change is None: + last_change = datetime.datetime.now() + if self.updated_on is None or self.updated_on != last_change: + log.debug('updated repo %s with new date %s' % (self, last_change)) + self.updated_on = last_change + Session().add(self) + Session().commit() + + @property + def tip(self): + return self.get_changeset('tip') + + @property + def author(self): + return self.tip.author + + @property + def last_change(self): + return self.scm_instance.last_change + + def get_comments(self, revisions=None): + """ + Returns comments for this repository grouped by revisions + + :param revisions: filter query by revisions only + """ + cmts = ChangesetComment.query()\ + .filter(ChangesetComment.repo == self) + if revisions: + cmts = cmts.filter(ChangesetComment.revision.in_(revisions)) + grouped = defaultdict(list) + for cmt in cmts.all(): + grouped[cmt.revision].append(cmt) + return grouped + + def statuses(self, revisions=None): + """ + Returns statuses for this repository + + :param revisions: list of revisions to get statuses for + :type revisions: list + """ + + statuses = ChangesetStatus.query()\ + .filter(ChangesetStatus.repo == self)\ + .filter(ChangesetStatus.version == 0) + if revisions: + statuses = statuses.filter(ChangesetStatus.revision.in_(revisions)) + grouped = {} + + #maybe we have open new pullrequest without a status ? + stat = ChangesetStatus.STATUS_UNDER_REVIEW + status_lbl = ChangesetStatus.get_status_lbl(stat) + for pr in PullRequest.query().filter(PullRequest.org_repo == self).all(): + for rev in pr.revisions: + pr_id = pr.pull_request_id + pr_repo = pr.other_repo.repo_name + grouped[rev] = [stat, status_lbl, pr_id, pr_repo] -from rhodecode.model.db import * + for stat in statuses.all(): + pr_id = pr_repo = None + if stat.pull_request: + pr_id = stat.pull_request.pull_request_id + pr_repo = stat.pull_request.other_repo.repo_name + grouped[stat.revision] = [str(stat.status), stat.status_lbl, + pr_id, pr_repo] + return grouped + + #========================================================================== + # SCM CACHE INSTANCE + #========================================================================== + + @property + def invalidate(self): + return CacheInvalidation.invalidate(self.repo_name) + + def set_invalidate(self): + """ + set a cache for invalidation for this instance + """ + CacheInvalidation.set_invalidate(repo_name=self.repo_name) + + @LazyProperty + def scm_instance(self): + import rhodecode + full_cache = str2bool(rhodecode.CONFIG.get('vcs_full_cache')) + if full_cache: + return self.scm_instance_cached() + return self.__get_instance() + + def scm_instance_cached(self, cache_map=None): + @cache_region('long_term') + def _c(repo_name): + return self.__get_instance() + rn = self.repo_name + log.debug('Getting cached instance of repo') + + if cache_map: + # get using prefilled cache_map + invalidate_repo = cache_map[self.repo_name] + if invalidate_repo: + invalidate_repo = (None if invalidate_repo.cache_active + else invalidate_repo) + else: + # get from invalidate + invalidate_repo = self.invalidate + + if invalidate_repo is not None: + region_invalidate(_c, None, rn) + # update our cache + CacheInvalidation.set_valid(invalidate_repo.cache_key) + return _c(rn) + + def __get_instance(self): + repo_full_path = self.repo_full_path + try: + alias = get_scm(repo_full_path)[0] + log.debug('Creating instance of %s repository' % alias) + backend = get_backend(alias) + except VCSError: + log.error(traceback.format_exc()) + log.error('Perhaps this repository is in db and not in ' + 'filesystem run rescan repositories with ' + '"destroy old data " option from admin panel') + return + + if alias == 'hg': + + repo = backend(safe_str(repo_full_path), create=False, + baseui=self._ui) + # skip hidden web repository + if repo._get_hidden(): + return + else: + repo = backend(repo_full_path, create=False) + + return repo + + +class RepoGroup(Base, BaseModel): + __tablename__ = 'groups' + __table_args__ = ( + UniqueConstraint('group_name', 'group_parent_id'), + CheckConstraint('group_id != group_parent_id'), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'}, + ) + __mapper_args__ = {'order_by': 'group_name'} + + group_id = Column("group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + group_name = Column("group_name", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None) + group_parent_id = Column("group_parent_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=None, default=None) + group_description = Column("group_description", String(10000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + enable_locking = Column("enable_locking", Boolean(), nullable=False, unique=None, default=False) + + repo_group_to_perm = relationship('UserRepoGroupToPerm', cascade='all', order_by='UserRepoGroupToPerm.group_to_perm_id') + users_group_to_perm = relationship('UsersGroupRepoGroupToPerm', cascade='all') + + parent_group = relationship('RepoGroup', remote_side=group_id) + + def __init__(self, group_name='', parent_group=None): + self.group_name = group_name + self.parent_group = parent_group + + def __unicode__(self): + return u"<%s('%s:%s')>" % (self.__class__.__name__, self.group_id, + self.group_name) + + @classmethod + def groups_choices(cls, check_perms=False): + from webhelpers.html import literal as _literal + from rhodecode.model.scm import ScmModel + groups = cls.query().all() + if check_perms: + #filter group user have access to, it's done + #magically inside ScmModel based on current user + groups = ScmModel().get_repos_groups(groups) + repo_groups = [('', '')] + sep = ' » ' + _name = lambda k: _literal(sep.join(k)) + + repo_groups.extend([(x.group_id, _name(x.full_path_splitted)) + for x in groups]) + + repo_groups = sorted(repo_groups, key=lambda t: t[1].split(sep)[0]) + return repo_groups + + @classmethod + def url_sep(cls): + return URL_SEP + + @classmethod + def get_by_group_name(cls, group_name, cache=False, case_insensitive=False): + if case_insensitive: + gr = cls.query()\ + .filter(cls.group_name.ilike(group_name)) + else: + gr = cls.query()\ + .filter(cls.group_name == group_name) + if cache: + gr = gr.options(FromCache( + "sql_cache_short", + "get_group_%s" % _hash_key(group_name) + ) + ) + return gr.scalar() + + @property + def parents(self): + parents_recursion_limit = 5 + groups = [] + if self.parent_group is None: + return groups + cur_gr = self.parent_group + groups.insert(0, cur_gr) + cnt = 0 + while 1: + cnt += 1 + gr = getattr(cur_gr, 'parent_group', None) + cur_gr = cur_gr.parent_group + if gr is None: + break + if cnt == parents_recursion_limit: + # this will prevent accidental infinit loops + log.error('group nested more than %s' % + parents_recursion_limit) + break + + groups.insert(0, gr) + return groups + + @property + def children(self): + return RepoGroup.query().filter(RepoGroup.parent_group == self) + + @property + def name(self): + return self.group_name.split(RepoGroup.url_sep())[-1] + + @property + def full_path(self): + return self.group_name + + @property + def full_path_splitted(self): + return self.group_name.split(RepoGroup.url_sep()) + + @property + def repositories(self): + return Repository.query()\ + .filter(Repository.group == self)\ + .order_by(Repository.repo_name) + + @property + def repositories_recursive_count(self): + cnt = self.repositories.count() + + def children_count(group): + cnt = 0 + for child in group.children: + cnt += child.repositories.count() + cnt += children_count(child) + return cnt + + return cnt + children_count(self) + + def recursive_groups_and_repos(self): + """ + Recursive return all groups, with repositories in those groups + """ + all_ = [] + + def _get_members(root_gr): + for r in root_gr.repositories: + all_.append(r) + childs = root_gr.children.all() + if childs: + for gr in childs: + all_.append(gr) + _get_members(gr) + + _get_members(self) + return [self] + all_ + + def get_new_name(self, group_name): + """ + returns new full group name based on parent and new name + + :param group_name: + """ + path_prefix = (self.parent_group.full_path_splitted if + self.parent_group else []) + return RepoGroup.url_sep().join(path_prefix + [group_name]) + + +class Permission(Base, BaseModel): + __tablename__ = 'permissions' + __table_args__ = ( + Index('p_perm_name_idx', 'permission_name'), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'}, + ) + PERMS = [ + ('repository.none', _('Repository no access')), + ('repository.read', _('Repository read access')), + ('repository.write', _('Repository write access')), + ('repository.admin', _('Repository admin access')), + + ('group.none', _('Repositories Group no access')), + ('group.read', _('Repositories Group read access')), + ('group.write', _('Repositories Group write access')), + ('group.admin', _('Repositories Group admin access')), + + ('hg.admin', _('RhodeCode Administrator')), + ('hg.create.none', _('Repository creation disabled')), + ('hg.create.repository', _('Repository creation enabled')), + ('hg.fork.none', _('Repository forking disabled')), + ('hg.fork.repository', _('Repository forking enabled')), + ('hg.register.none', _('Register disabled')), + ('hg.register.manual_activate', _('Register new user with RhodeCode ' + 'with manual activation')), + + ('hg.register.auto_activate', _('Register new user with RhodeCode ' + 'with auto activation')), + ] + + # defines which permissions are more important higher the more important + PERM_WEIGHTS = { + 'repository.none': 0, + 'repository.read': 1, + 'repository.write': 3, + 'repository.admin': 4, + + 'group.none': 0, + 'group.read': 1, + 'group.write': 3, + 'group.admin': 4, + + 'hg.fork.none': 0, + 'hg.fork.repository': 1, + 'hg.create.none': 0, + 'hg.create.repository':1 + } + + permission_id = Column("permission_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + permission_name = Column("permission_name", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + permission_longname = Column("permission_longname", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + + def __unicode__(self): + return u"<%s('%s:%s')>" % ( + self.__class__.__name__, self.permission_id, self.permission_name + ) + + @classmethod + def get_by_key(cls, key): + return cls.query().filter(cls.permission_name == key).scalar() + + @classmethod + def get_default_perms(cls, default_user_id): + q = Session().query(UserRepoToPerm, Repository, cls)\ + .join((Repository, UserRepoToPerm.repository_id == Repository.repo_id))\ + .join((cls, UserRepoToPerm.permission_id == cls.permission_id))\ + .filter(UserRepoToPerm.user_id == default_user_id) + + return q.all() + + @classmethod + def get_default_group_perms(cls, default_user_id): + q = Session().query(UserRepoGroupToPerm, RepoGroup, cls)\ + .join((RepoGroup, UserRepoGroupToPerm.group_id == RepoGroup.group_id))\ + .join((cls, UserRepoGroupToPerm.permission_id == cls.permission_id))\ + .filter(UserRepoGroupToPerm.user_id == default_user_id) + + return q.all() + + +class UserRepoToPerm(Base, BaseModel): + __tablename__ = 'repo_to_perm' + __table_args__ = ( + UniqueConstraint('user_id', 'repository_id', 'permission_id'), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'} + ) + repo_to_perm_id = Column("repo_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) + permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) + repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None) + + user = relationship('User') + repository = relationship('Repository') + permission = relationship('Permission') + + @classmethod + def create(cls, user, repository, permission): + n = cls() + n.user = user + n.repository = repository + n.permission = permission + Session().add(n) + return n + + def __unicode__(self): + return u' %s >' % (self.user, self.repository) + + +class UserToPerm(Base, BaseModel): + __tablename__ = 'user_to_perm' + __table_args__ = ( + UniqueConstraint('user_id', 'permission_id'), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'} + ) + user_to_perm_id = Column("user_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) + permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) + + user = relationship('User') + permission = relationship('Permission', lazy='joined') + + +class UsersGroupRepoToPerm(Base, BaseModel): + __tablename__ = 'users_group_repo_to_perm' + __table_args__ = ( + UniqueConstraint('repository_id', 'users_group_id', 'permission_id'), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'} + ) + users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) + permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) + repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None) + + users_group = relationship('UsersGroup') + permission = relationship('Permission') + repository = relationship('Repository') + + @classmethod + def create(cls, users_group, repository, permission): + n = cls() + n.users_group = users_group + n.repository = repository + n.permission = permission + Session().add(n) + return n + + def __unicode__(self): + return u' %s >' % (self.users_group, self.repository) + + +class UsersGroupToPerm(Base, BaseModel): + __tablename__ = 'users_group_to_perm' + __table_args__ = ( + UniqueConstraint('users_group_id', 'permission_id',), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'} + ) + users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) + permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) + + users_group = relationship('UsersGroup') + permission = relationship('Permission') + + +class UserRepoGroupToPerm(Base, BaseModel): + __tablename__ = 'user_repo_group_to_perm' + __table_args__ = ( + UniqueConstraint('user_id', 'group_id', 'permission_id'), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'} + ) + + group_to_perm_id = Column("group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) + group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=False, unique=None, default=None) + permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) + + user = relationship('User') + group = relationship('RepoGroup') + permission = relationship('Permission') + + +class UsersGroupRepoGroupToPerm(Base, BaseModel): + __tablename__ = 'users_group_repo_group_to_perm' + __table_args__ = ( + UniqueConstraint('users_group_id', 'group_id'), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'} + ) + + users_group_repo_group_to_perm_id = Column("users_group_repo_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) + group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=False, unique=None, default=None) + permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) + + users_group = relationship('UsersGroup') + permission = relationship('Permission') + group = relationship('RepoGroup') + + +class Statistics(Base, BaseModel): + __tablename__ = 'statistics' + __table_args__ = ( + UniqueConstraint('repository_id'), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'} + ) + stat_id = Column("stat_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=True, default=None) + stat_on_revision = Column("stat_on_revision", Integer(), nullable=False) + commit_activity = Column("commit_activity", LargeBinary(1000000), nullable=False)#JSON data + commit_activity_combined = Column("commit_activity_combined", LargeBinary(), nullable=False)#JSON data + languages = Column("languages", LargeBinary(1000000), nullable=False)#JSON data + + repository = relationship('Repository', single_parent=True) + + +class UserFollowing(Base, BaseModel): + __tablename__ = 'user_followings' + __table_args__ = ( + UniqueConstraint('user_id', 'follows_repository_id'), + UniqueConstraint('user_id', 'follows_user_id'), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'} + ) + + user_following_id = Column("user_following_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) + follows_repo_id = Column("follows_repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=None, default=None) + follows_user_id = Column("follows_user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None) + follows_from = Column('follows_from', DateTime(timezone=False), nullable=True, unique=None, default=datetime.datetime.now) + + user = relationship('User', primaryjoin='User.user_id==UserFollowing.user_id') + + follows_user = relationship('User', primaryjoin='User.user_id==UserFollowing.follows_user_id') + follows_repository = relationship('Repository', order_by='Repository.repo_name') + + @classmethod + def get_repo_followers(cls, repo_id): + return cls.query().filter(cls.follows_repo_id == repo_id) + + +class CacheInvalidation(Base, BaseModel): + __tablename__ = 'cache_invalidation' + __table_args__ = ( + UniqueConstraint('cache_key'), + Index('key_idx', 'cache_key'), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'}, + ) + cache_id = Column("cache_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + cache_key = Column("cache_key", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + cache_args = Column("cache_args", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + cache_active = Column("cache_active", Boolean(), nullable=True, unique=None, default=False) + + def __init__(self, cache_key, cache_args=''): + self.cache_key = cache_key + self.cache_args = cache_args + self.cache_active = False + + def __unicode__(self): + return u"<%s('%s:%s')>" % (self.__class__.__name__, + self.cache_id, self.cache_key) + + @property + def prefix(self): + _split = self.cache_key.split(self.cache_args, 1) + if _split and len(_split) == 2: + return _split[0] + return '' + + @classmethod + def clear_cache(cls): + cls.query().delete() + + @classmethod + def _get_key(cls, key): + """ + Wrapper for generating a key, together with a prefix + + :param key: + """ + import rhodecode + prefix = '' + org_key = key + iid = rhodecode.CONFIG.get('instance_id') + if iid: + prefix = iid + + return "%s%s" % (prefix, key), prefix, org_key + + @classmethod + def get_by_key(cls, key): + return cls.query().filter(cls.cache_key == key).scalar() + + @classmethod + def get_by_repo_name(cls, repo_name): + return cls.query().filter(cls.cache_args == repo_name).all() + + @classmethod + def _get_or_create_key(cls, key, repo_name, commit=True): + inv_obj = Session().query(cls).filter(cls.cache_key == key).scalar() + if not inv_obj: + try: + inv_obj = CacheInvalidation(key, repo_name) + Session().add(inv_obj) + if commit: + Session().commit() + except Exception: + log.error(traceback.format_exc()) + Session().rollback() + return inv_obj + + @classmethod + def invalidate(cls, key): + """ + Returns Invalidation object if this given key should be invalidated + None otherwise. `cache_active = False` means that this cache + state is not valid and needs to be invalidated + + :param key: + """ + repo_name = key + repo_name = remove_suffix(repo_name, '_README') + repo_name = remove_suffix(repo_name, '_RSS') + repo_name = remove_suffix(repo_name, '_ATOM') + + # adds instance prefix + key, _prefix, _org_key = cls._get_key(key) + inv = cls._get_or_create_key(key, repo_name) + + if inv and inv.cache_active is False: + return inv + + @classmethod + def set_invalidate(cls, key=None, repo_name=None): + """ + Mark this Cache key for invalidation, either by key or whole + cache sets based on repo_name + + :param key: + """ + if key: + key, _prefix, _org_key = cls._get_key(key) + inv_objs = Session().query(cls).filter(cls.cache_key == key).all() + elif repo_name: + inv_objs = Session().query(cls).filter(cls.cache_args == repo_name).all() + + log.debug('marking %s key[s] for invalidation based on key=%s,repo_name=%s' + % (len(inv_objs), key, repo_name)) + try: + for inv_obj in inv_objs: + inv_obj.cache_active = False + Session().add(inv_obj) + Session().commit() + except Exception: + log.error(traceback.format_exc()) + Session().rollback() + + @classmethod + def set_valid(cls, key): + """ + Mark this cache key as active and currently cached + + :param key: + """ + inv_obj = cls.get_by_key(key) + inv_obj.cache_active = True + Session().add(inv_obj) + Session().commit() + + @classmethod + def get_cache_map(cls): + + class cachemapdict(dict): + + def __init__(self, *args, **kwargs): + fixkey = kwargs.get('fixkey') + if fixkey: + del kwargs['fixkey'] + self.fixkey = fixkey + super(cachemapdict, self).__init__(*args, **kwargs) + + def __getattr__(self, name): + key = name + if self.fixkey: + key, _prefix, _org_key = cls._get_key(key) + if key in self.__dict__: + return self.__dict__[key] + else: + return self[key] + + def __getitem__(self, key): + if self.fixkey: + key, _prefix, _org_key = cls._get_key(key) + try: + return super(cachemapdict, self).__getitem__(key) + except KeyError: + return + + cache_map = cachemapdict(fixkey=True) + for obj in cls.query().all(): + cache_map[obj.cache_key] = cachemapdict(obj.get_dict()) + return cache_map + + +class ChangesetComment(Base, BaseModel): + __tablename__ = 'changeset_comments' + __table_args__ = ( + Index('cc_revision_idx', 'revision'), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'}, + ) + comment_id = Column('comment_id', Integer(), nullable=False, primary_key=True) + repo_id = Column('repo_id', Integer(), ForeignKey('repositories.repo_id'), nullable=False) + revision = Column('revision', String(40), nullable=True) + pull_request_id = Column("pull_request_id", Integer(), ForeignKey('pull_requests.pull_request_id'), nullable=True) + line_no = Column('line_no', Unicode(10), nullable=True) + hl_lines = Column('hl_lines', Unicode(512), nullable=True) + f_path = Column('f_path', Unicode(1000), nullable=True) + user_id = Column('user_id', Integer(), ForeignKey('users.user_id'), nullable=False) + text = Column('text', UnicodeText(25000), nullable=False) + created_on = Column('created_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now) + modified_at = Column('modified_at', DateTime(timezone=False), nullable=False, default=datetime.datetime.now) + + author = relationship('User', lazy='joined') + repo = relationship('Repository') + status_change = relationship('ChangesetStatus', cascade="all, delete, delete-orphan") + pull_request = relationship('PullRequest', lazy='joined') + + @classmethod + def get_users(cls, revision=None, pull_request_id=None): + """ + Returns user associated with this ChangesetComment. ie those + who actually commented + + :param cls: + :param revision: + """ + q = Session().query(User)\ + .join(ChangesetComment.author) + if revision: + q = q.filter(cls.revision == revision) + elif pull_request_id: + q = q.filter(cls.pull_request_id == pull_request_id) + return q.all() + + +class ChangesetStatus(Base, BaseModel): + __tablename__ = 'changeset_statuses' + __table_args__ = ( + Index('cs_revision_idx', 'revision'), + Index('cs_version_idx', 'version'), + UniqueConstraint('repo_id', 'revision', 'version'), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'} + ) + STATUS_NOT_REVIEWED = DEFAULT = 'not_reviewed' + STATUS_APPROVED = 'approved' + STATUS_REJECTED = 'rejected' + STATUS_UNDER_REVIEW = 'under_review' + + STATUSES = [ + (STATUS_NOT_REVIEWED, _("Not Reviewed")), # (no icon) and default + (STATUS_APPROVED, _("Approved")), + (STATUS_REJECTED, _("Rejected")), + (STATUS_UNDER_REVIEW, _("Under Review")), + ] + + changeset_status_id = Column('changeset_status_id', Integer(), nullable=False, primary_key=True) + repo_id = Column('repo_id', Integer(), ForeignKey('repositories.repo_id'), nullable=False) + user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None) + revision = Column('revision', String(40), nullable=False) + status = Column('status', String(128), nullable=False, default=DEFAULT) + changeset_comment_id = Column('changeset_comment_id', Integer(), ForeignKey('changeset_comments.comment_id')) + modified_at = Column('modified_at', DateTime(), nullable=False, default=datetime.datetime.now) + version = Column('version', Integer(), nullable=False, default=0) + pull_request_id = Column("pull_request_id", Integer(), ForeignKey('pull_requests.pull_request_id'), nullable=True) + + author = relationship('User', lazy='joined') + repo = relationship('Repository') + comment = relationship('ChangesetComment', lazy='joined') + pull_request = relationship('PullRequest', lazy='joined') + + def __unicode__(self): + return u"<%s('%s:%s')>" % ( + self.__class__.__name__, + self.status, self.author + ) + + @classmethod + def get_status_lbl(cls, value): + return dict(cls.STATUSES).get(value) + + @property + def status_lbl(self): + return ChangesetStatus.get_status_lbl(self.status) + + +class PullRequest(Base, BaseModel): + __tablename__ = 'pull_requests' + __table_args__ = ( + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'}, + ) + + STATUS_NEW = u'new' + STATUS_OPEN = u'open' + STATUS_CLOSED = u'closed' + + pull_request_id = Column('pull_request_id', Integer(), nullable=False, primary_key=True) + title = Column('title', Unicode(256), nullable=True) + description = Column('description', UnicodeText(10240), nullable=True) + status = Column('status', Unicode(256), nullable=False, default=STATUS_NEW) + created_on = Column('created_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now) + updated_on = Column('updated_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now) + user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None) + _revisions = Column('revisions', UnicodeText(20500)) # 500 revisions max + org_repo_id = Column('org_repo_id', Integer(), ForeignKey('repositories.repo_id'), nullable=False) + org_ref = Column('org_ref', Unicode(256), nullable=False) + other_repo_id = Column('other_repo_id', Integer(), ForeignKey('repositories.repo_id'), nullable=False) + other_ref = Column('other_ref', Unicode(256), nullable=False) + + @hybrid_property + def revisions(self): + return self._revisions.split(':') + + @revisions.setter + def revisions(self, val): + self._revisions = ':'.join(val) + + author = relationship('User', lazy='joined') + reviewers = relationship('PullRequestReviewers', + cascade="all, delete, delete-orphan") + org_repo = relationship('Repository', primaryjoin='PullRequest.org_repo_id==Repository.repo_id') + other_repo = relationship('Repository', primaryjoin='PullRequest.other_repo_id==Repository.repo_id') + statuses = relationship('ChangesetStatus') + comments = relationship('ChangesetComment', + cascade="all, delete, delete-orphan") + + def is_closed(self): + return self.status == self.STATUS_CLOSED + + def __json__(self): + return dict( + revisions=self.revisions + ) + + +class PullRequestReviewers(Base, BaseModel): + __tablename__ = 'pull_request_reviewers' + __table_args__ = ( + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'}, + ) + + def __init__(self, user=None, pull_request=None): + self.user = user + self.pull_request = pull_request + + pull_requests_reviewers_id = Column('pull_requests_reviewers_id', Integer(), nullable=False, primary_key=True) + pull_request_id = Column("pull_request_id", Integer(), ForeignKey('pull_requests.pull_request_id'), nullable=False) + user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=True) + + user = relationship('User') + pull_request = relationship('PullRequest') + + +class Notification(Base, BaseModel): + __tablename__ = 'notifications' + __table_args__ = ( + Index('notification_type_idx', 'type'), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'}, + ) + + TYPE_CHANGESET_COMMENT = u'cs_comment' + TYPE_MESSAGE = u'message' + TYPE_MENTION = u'mention' + TYPE_REGISTRATION = u'registration' + TYPE_PULL_REQUEST = u'pull_request' + TYPE_PULL_REQUEST_COMMENT = u'pull_request_comment' + + notification_id = Column('notification_id', Integer(), nullable=False, primary_key=True) + subject = Column('subject', Unicode(512), nullable=True) + body = Column('body', UnicodeText(50000), nullable=True) + created_by = Column("created_by", Integer(), ForeignKey('users.user_id'), nullable=True) + created_on = Column('created_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now) + type_ = Column('type', Unicode(256)) + + created_by_user = relationship('User') + notifications_to_users = relationship('UserNotification', lazy='joined', + cascade="all, delete, delete-orphan") + + @property + def recipients(self): + return [x.user for x in UserNotification.query()\ + .filter(UserNotification.notification == self)\ + .order_by(UserNotification.user_id.asc()).all()] + + @classmethod + def create(cls, created_by, subject, body, recipients, type_=None): + if type_ is None: + type_ = Notification.TYPE_MESSAGE + + notification = cls() + notification.created_by_user = created_by + notification.subject = subject + notification.body = body + notification.type_ = type_ + notification.created_on = datetime.datetime.now() + + for u in recipients: + assoc = UserNotification() + assoc.notification = notification + u.notifications.append(assoc) + Session().add(notification) + return notification + + @property + def description(self): + from rhodecode.model.notification import NotificationModel + return NotificationModel().make_description(self) + + +class UserNotification(Base, BaseModel): + __tablename__ = 'user_to_notification' + __table_args__ = ( + UniqueConstraint('user_id', 'notification_id'), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'} + ) + user_id = Column('user_id', Integer(), ForeignKey('users.user_id'), primary_key=True) + notification_id = Column("notification_id", Integer(), ForeignKey('notifications.notification_id'), primary_key=True) + read = Column('read', Boolean, default=False) + sent_on = Column('sent_on', DateTime(timezone=False), nullable=True, unique=None) + + user = relationship('User', lazy="joined") + notification = relationship('Notification', lazy="joined", + order_by=lambda: Notification.created_on.desc(),) + + def mark_as_read(self): + self.read = True + Session().add(self) + + +class DbMigrateVersion(Base, BaseModel): + __tablename__ = 'db_migrate_version' + __table_args__ = ( + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'}, + ) + repository_id = Column('repository_id', String(250), primary_key=True) + repository_path = Column('repository_path', Text) + version = Column('version', Integer) diff --git a/rhodecode/lib/dbmigrate/schema/db_1_5_0.py b/rhodecode/lib/dbmigrate/schema/db_1_5_0.py new file mode 100644 --- /dev/null +++ b/rhodecode/lib/dbmigrate/schema/db_1_5_0.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +""" + rhodecode.model.db_1_4_0 + ~~~~~~~~~~~~~~~~~~~~~~~~ + + Database Models for RhodeCode <=1.5.X + + :created_on: Apr 08, 2010 + :author: marcink + :copyright: (C) 2010-2012 Marcin Kuzminski + :license: GPLv3, see COPYING for more details. +""" +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +#TODO: replace that will db.py content after 1.6 Release + +from rhodecode.model.db import * diff --git a/rhodecode/lib/dbmigrate/versions/008_version_1_5_0.py b/rhodecode/lib/dbmigrate/versions/008_version_1_5_0.py new file mode 100644 --- /dev/null +++ b/rhodecode/lib/dbmigrate/versions/008_version_1_5_0.py @@ -0,0 +1,60 @@ +import logging +import datetime + +from sqlalchemy import * +from sqlalchemy.exc import DatabaseError +from sqlalchemy.orm import relation, backref, class_mapper, joinedload +from sqlalchemy.orm.session import Session +from sqlalchemy.ext.declarative import declarative_base + +from rhodecode.lib.dbmigrate.migrate import * +from rhodecode.lib.dbmigrate.migrate.changeset import * + +from rhodecode.model.meta import Base +from rhodecode.model import meta + +log = logging.getLogger(__name__) + + +def upgrade(migrate_engine): + """ + Upgrade operations go here. + Don't create your own engine; bind migrate_engine to your metadata + """ + #========================================================================== + # USER LOGS + #========================================================================== + from rhodecode.lib.dbmigrate.schema.db_1_5_0 import UserLog + tbl = UserLog.__table__ + username = Column("username", String(255, convert_unicode=False, + assert_unicode=None), nullable=True, + unique=None, default=None) + # create username column + username.create(table=tbl) + + _Session = Session() + ## after adding that column fix all usernames + users_log = _Session.query(UserLog)\ + .options(joinedload(UserLog.user))\ + .options(joinedload(UserLog.repository)).all() + + for entry in users_log: + entry.username = entry.user.username + _Session.add(entry) + _Session.commit() + + #alter username to not null + from rhodecode.lib.dbmigrate.schema.db_1_5_0 import UserLog + tbl_name = UserLog.__tablename__ + tbl = Table(tbl_name, + MetaData(bind=migrate_engine), autoload=True, + autoload_with=migrate_engine) + col = tbl.columns.username + + # remove nullability from revision field + col.alter(nullable=False) + + +def downgrade(migrate_engine): + meta = MetaData() + meta.bind = migrate_engine diff --git a/rhodecode/lib/diffs.py b/rhodecode/lib/diffs.py --- a/rhodecode/lib/diffs.py +++ b/rhodecode/lib/diffs.py @@ -27,8 +27,8 @@ import re import difflib -import markupsafe import logging +import traceback from itertools import tee, imap @@ -128,52 +128,106 @@ def get_gitdiff(filenode_old, filenode_n new_raw_id = getattr(filenode_new.changeset, 'raw_id', repo.EMPTY_CHANGESET) vcs_gitdiff = repo.get_diff(old_raw_id, new_raw_id, filenode_new.path, - ignore_whitespace, context) + ignore_whitespace, context) return vcs_gitdiff +NEW_FILENODE = 1 +DEL_FILENODE = 2 +MOD_FILENODE = 3 +RENAMED_FILENODE = 4 +CHMOD_FILENODE = 5 + + +class DiffLimitExceeded(Exception): + pass + + +class LimitedDiffContainer(object): + + def __init__(self, diff_limit, cur_diff_size, diff): + self.diff = diff + self.diff_limit = diff_limit + self.cur_diff_size = cur_diff_size + + def __iter__(self): + for l in self.diff: + yield l + class DiffProcessor(object): """ - Give it a unified diff and it returns a list of the files that were + Give it a unified or git diff and it returns a list of the files that were mentioned in the diff together with a dict of meta information that can be used to render it in a HTML template. """ - _chunk_re = re.compile(r'@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@(.*)') - _newline_marker = '\\ No newline at end of file\n' + _chunk_re = re.compile(r'^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@(.*)') + _newline_marker = re.compile(r'^\\ No newline at end of file') + _git_header_re = re.compile(r""" + #^diff[ ]--git + [ ]a/(?P.+?)[ ]b/(?P.+?)\n + (?:^similarity[ ]index[ ](?P\d+)%\n + ^rename[ ]from[ ](?P\S+)\n + ^rename[ ]to[ ](?P\S+)(?:\n|$))? + (?:^old[ ]mode[ ](?P\d+)\n + ^new[ ]mode[ ](?P\d+)(?:\n|$))? + (?:^new[ ]file[ ]mode[ ](?P.+)(?:\n|$))? + (?:^deleted[ ]file[ ]mode[ ](?P.+)(?:\n|$))? + (?:^index[ ](?P[0-9A-Fa-f]+) + \.\.(?P[0-9A-Fa-f]+)[ ]?(?P.+)?(?:\n|$))? + (?:^---[ ](a/(?P.+)|/dev/null)(?:\n|$))? + (?:^\+\+\+[ ](b/(?P.+)|/dev/null)(?:\n|$))? + """, re.VERBOSE | re.MULTILINE) + _hg_header_re = re.compile(r""" + #^diff[ ]--git + [ ]a/(?P.+?)[ ]b/(?P.+?)\n + (?:^similarity[ ]index[ ](?P\d+)%(?:\n|$))? + (?:^rename[ ]from[ ](?P\S+)\n + ^rename[ ]to[ ](?P\S+)(?:\n|$))? + (?:^old[ ]mode[ ](?P\d+)\n + ^new[ ]mode[ ](?P\d+)(?:\n|$))? + (?:^new[ ]file[ ]mode[ ](?P.+)(?:\n|$))? + (?:^deleted[ ]file[ ]mode[ ](?P.+)(?:\n|$))? + (?:^index[ ](?P[0-9A-Fa-f]+) + \.\.(?P[0-9A-Fa-f]+)[ ]?(?P.+)?(?:\n|$))? + (?:^---[ ](a/(?P.+)|/dev/null)(?:\n|$))? + (?:^\+\+\+[ ](b/(?P.+)|/dev/null)(?:\n|$))? + """, re.VERBOSE | re.MULTILINE) - def __init__(self, diff, differ='diff', format='gitdiff'): + #used for inline highlighter word split + _token_re = re.compile(r'()(>|<|&|\W+?)') + + def __init__(self, diff, vcs='hg', format='gitdiff', diff_limit=None): """ - :param diff: a text in diff format or generator + :param diff: a text in diff format + :param vcs: type of version controll hg or git :param format: format of diff passed, `udiff` or `gitdiff` + :param diff_limit: define the size of diff that is considered "big" + based on that parameter cut off will be triggered, set to None + to show full diff """ - if isinstance(diff, basestring): - diff = [diff] + if not isinstance(diff, basestring): + raise Exception('Diff must be a basestring got %s instead' % type(diff)) - self.__udiff = diff - self.__format = format + self._diff = diff + self._format = format self.adds = 0 self.removes = 0 - - if isinstance(self.__udiff, basestring): - self.lines = iter(self.__udiff.splitlines(1)) + # calculate diff size + self.diff_size = len(diff) + self.diff_limit = diff_limit + self.cur_diff_size = 0 + self.parsed = False + self.parsed_diff = [] + self.vcs = vcs - elif self.__format == 'gitdiff': - udiff_copy = self.copy_iterator() - self.lines = imap(self.escaper, self._parse_gitdiff(udiff_copy)) - else: - udiff_copy = self.copy_iterator() - self.lines = imap(self.escaper, udiff_copy) - - # Select a differ. - if differ == 'difflib': + if format == 'gitdiff': self.differ = self._highlight_line_difflib + self._parser = self._parse_gitdiff else: self.differ = self._highlight_line_udiff + self._parser = self._parse_udiff - def escaper(self, string): - return markupsafe.escape(string) - - def copy_iterator(self): + def _copy_iterator(self): """ make a fresh copy of generator, we should not iterate thru an original as it's needed for repeating operations on @@ -182,58 +236,36 @@ class DiffProcessor(object): self.__udiff, iterator_copy = tee(self.__udiff) return iterator_copy - def _extract_rev(self, line1, line2): + def _escaper(self, string): """ - Extract the operation (A/M/D), filename and revision hint from a line. + Escaper for diff escapes special chars and checks the diff limit + + :param string: + :type string: """ - try: - if line1.startswith('--- ') and line2.startswith('+++ '): - l1 = line1[4:].split(None, 1) - old_filename = (l1[0].replace('a/', '', 1) - if len(l1) >= 1 else None) - old_rev = l1[1] if len(l1) == 2 else 'old' + self.cur_diff_size += len(string) - l2 = line2[4:].split(None, 1) - new_filename = (l2[0].replace('b/', '', 1) - if len(l1) >= 1 else None) - new_rev = l2[1] if len(l2) == 2 else 'new' - - filename = (old_filename - if old_filename != '/dev/null' else new_filename) + # escaper get's iterated on each .next() call and it checks if each + # parsed line doesn't exceed the diff limit + if self.diff_limit is not None and self.cur_diff_size > self.diff_limit: + raise DiffLimitExceeded('Diff Limit Exceeded') - operation = 'D' if new_filename == '/dev/null' else None - if not operation: - operation = 'M' if old_filename != '/dev/null' else 'A' - - return operation, filename, new_rev, old_rev - except (ValueError, IndexError): - pass + return safe_unicode(string).replace('&', '&')\ + .replace('<', '<')\ + .replace('>', '>') - return None, None, None, None - - def _parse_gitdiff(self, diffiterator): - def line_decoder(l): - if l.startswith('+') and not l.startswith('+++'): - self.adds += 1 - elif l.startswith('-') and not l.startswith('---'): - self.removes += 1 - return safe_unicode(l) + def _line_counter(self, l): + """ + Checks each line and bumps total adds/removes for this diff - output = list(diffiterator) - size = len(output) - - if size == 2: - l = [] - l.extend([output[0]]) - l.extend(output[1].splitlines(1)) - return map(line_decoder, l) - elif size == 1: - return map(line_decoder, output[0].splitlines(1)) - elif size == 0: - return [] - - raise Exception('wrong size of diff %s' % size) + :param l: + """ + if l.startswith('+') and not l.startswith('+++'): + self.adds += 1 + elif l.startswith('-') and not l.startswith('---'): + self.removes += 1 + return safe_unicode(l) def _highlight_line_difflib(self, line, next_): """ @@ -245,9 +277,8 @@ class DiffProcessor(object): else: old, new = next_, line - oldwords = re.split(r'(\W)', old['line']) - newwords = re.split(r'(\W)', new['line']) - + oldwords = self._token_re.split(old['line']) + newwords = self._token_re.split(new['line']) sequence = difflib.SequenceMatcher(None, oldwords, newwords) oldfragments, newfragments = [], [] @@ -295,120 +326,114 @@ class DiffProcessor(object): do(line) do(next_) - def _parse_udiff(self, inline_diff=True): - """ - Parse the diff an return data for the template. + def _get_header(self, diff_chunk): """ - lineiter = self.lines - files = [] - try: - line = lineiter.next() - while 1: - # continue until we found the old file - if not line.startswith('--- '): - line = lineiter.next() - continue + parses the diff header, and returns parts, and leftover diff + parts consists of 14 elements:: + + a_path, b_path, similarity_index, rename_from, rename_to, + old_mode, new_mode, new_file_mode, deleted_file_mode, + a_blob_id, b_blob_id, b_mode, a_file, b_file + + :param diff_chunk: + :type diff_chunk: + """ - chunks = [] - stats = [0, 0] - operation, filename, old_rev, new_rev = \ - self._extract_rev(line, lineiter.next()) - files.append({ - 'filename': filename, - 'old_revision': old_rev, - 'new_revision': new_rev, - 'chunks': chunks, - 'operation': operation, - 'stats': stats, - }) + if self.vcs == 'git': + match = self._git_header_re.match(diff_chunk) + diff = diff_chunk[match.end():] + return match.groupdict(), imap(self._escaper, diff.splitlines(1)) + elif self.vcs == 'hg': + match = self._hg_header_re.match(diff_chunk) + diff = diff_chunk[match.end():] + return match.groupdict(), imap(self._escaper, diff.splitlines(1)) + else: + raise Exception('VCS type %s is not supported' % self.vcs) - line = lineiter.next() - while line: - match = self._chunk_re.match(line) - if not match: - break - - lines = [] - chunks.append(lines) + def _clean_line(self, line, command): + if command in ['+', '-', ' ']: + #only modify the line if it's actually a diff thing + line = line[1:] + return line - old_line, old_end, new_line, new_end = \ - [int(x or 1) for x in match.groups()[:-1]] - old_line -= 1 - new_line -= 1 - gr = match.groups() - context = len(gr) == 5 - old_end += old_line - new_end += new_line + def _parse_gitdiff(self, inline_diff=True): + _files = [] + diff_container = lambda arg: arg + + ##split the diff in chunks of separate --git a/file b/file chunks + for raw_diff in ('\n' + self._diff).split('\ndiff --git')[1:]: + binary = False + binary_msg = 'unknown binary' + head, diff = self._get_header(raw_diff) - if context: - # skip context only if it's first line - if int(gr[0]) > 1: - lines.append({ - 'old_lineno': '...', - 'new_lineno': '...', - 'action': 'context', - 'line': line, - }) - - line = lineiter.next() - - while old_line < old_end or new_line < new_end: - if line: - command = line[0] - if command in ['+', '-', ' ']: - #only modify the line if it's actually a diff - # thing - line = line[1:] - else: - command = ' ' - - affects_old = affects_new = False + if not head['a_file'] and head['b_file']: + op = 'A' + elif head['a_file'] and head['b_file']: + op = 'M' + elif head['a_file'] and not head['b_file']: + op = 'D' + else: + #probably we're dealing with a binary file 1 + binary = True + if head['deleted_file_mode']: + op = 'D' + stats = ['b', DEL_FILENODE] + binary_msg = 'deleted binary file' + elif head['new_file_mode']: + op = 'A' + stats = ['b', NEW_FILENODE] + binary_msg = 'new binary file %s' % head['new_file_mode'] + else: + if head['new_mode'] and head['old_mode']: + stats = ['b', CHMOD_FILENODE] + op = 'M' + binary_msg = ('modified binary file chmod %s => %s' + % (head['old_mode'], head['new_mode'])) + elif (head['rename_from'] and head['rename_to'] + and head['rename_from'] != head['rename_to']): + stats = ['b', RENAMED_FILENODE] + op = 'M' + binary_msg = ('file renamed from %s to %s' + % (head['rename_from'], head['rename_to'])) + else: + stats = ['b', MOD_FILENODE] + op = 'M' + binary_msg = 'modified binary file' - # ignore those if we don't expect them - if command in '#@': - continue - elif command == '+': - affects_new = True - action = 'add' - stats[0] += 1 - elif command == '-': - affects_old = True - action = 'del' - stats[1] += 1 - else: - affects_old = affects_new = True - action = 'unmod' + if not binary: + try: + chunks, stats = self._parse_lines(diff) + except DiffLimitExceeded: + diff_container = lambda _diff: LimitedDiffContainer( + self.diff_limit, + self.cur_diff_size, + _diff) + break + else: + chunks = [] + chunks.append([{ + 'old_lineno': '', + 'new_lineno': '', + 'action': 'binary', + 'line': binary_msg, + }]) - if line != self._newline_marker: - old_line += affects_old - new_line += affects_new - lines.append({ - 'old_lineno': affects_old and old_line or '', - 'new_lineno': affects_new and new_line or '', - 'action': action, - 'line': line - }) - - line = lineiter.next() - if line == self._newline_marker: - # we need to append to lines, since this is not - # counted in the line specs of diff - lines.append({ - 'old_lineno': '...', - 'new_lineno': '...', - 'action': 'context', - 'line': line - }) - - except StopIteration: - pass + _files.append({ + 'filename': head['b_path'], + 'old_revision': head['a_blob_id'], + 'new_revision': head['b_blob_id'], + 'chunks': chunks, + 'operation': op, + 'stats': stats, + }) sorter = lambda info: {'A': 0, 'M': 1, 'D': 2}.get(info['operation']) + if inline_diff is False: - return sorted(files, key=sorter) + return diff_container(sorted(_files, key=sorter)) # highlight inline changes - for diff_data in files: + for diff_data in _files: for chunk in diff_data['chunks']: lineiter = iter(chunk) try: @@ -423,14 +448,101 @@ class DiffProcessor(object): except StopIteration: pass - return sorted(files, key=sorter) + return diff_container(sorted(_files, key=sorter)) - def prepare(self, inline_diff=True): + def _parse_udiff(self, inline_diff=True): + raise NotImplementedError() + + def _parse_lines(self, diff): + """ + Parse the diff an return data for the template. """ - Prepare the passed udiff for HTML rendering. It'l return a list - of dicts - """ - return self._parse_udiff(inline_diff=inline_diff) + + lineiter = iter(diff) + stats = [0, 0] + + try: + chunks = [] + line = lineiter.next() + + while line: + lines = [] + chunks.append(lines) + + match = self._chunk_re.match(line) + + if not match: + break + + gr = match.groups() + (old_line, old_end, + new_line, new_end) = [int(x or 1) for x in gr[:-1]] + old_line -= 1 + new_line -= 1 + + context = len(gr) == 5 + old_end += old_line + new_end += new_line + + if context: + # skip context only if it's first line + if int(gr[0]) > 1: + lines.append({ + 'old_lineno': '...', + 'new_lineno': '...', + 'action': 'context', + 'line': line, + }) + + line = lineiter.next() + + while old_line < old_end or new_line < new_end: + command = ' ' + if line: + command = line[0] + + affects_old = affects_new = False + + # ignore those if we don't expect them + if command in '#@': + continue + elif command == '+': + affects_new = True + action = 'add' + stats[0] += 1 + elif command == '-': + affects_old = True + action = 'del' + stats[1] += 1 + else: + affects_old = affects_new = True + action = 'unmod' + + if not self._newline_marker.match(line): + old_line += affects_old + new_line += affects_new + lines.append({ + 'old_lineno': affects_old and old_line or '', + 'new_lineno': affects_new and new_line or '', + 'action': action, + 'line': self._clean_line(line, command) + }) + + line = lineiter.next() + + if self._newline_marker.match(line): + # we need to append to lines, since this is not + # counted in the line specs of diff + lines.append({ + 'old_lineno': '...', + 'new_lineno': '...', + 'action': 'context', + 'line': self._clean_line(line, command) + }) + + except StopIteration: + pass + return chunks, stats def _safe_id(self, idstring): """Make a string safe for including in an id attribute. @@ -453,18 +565,26 @@ class DiffProcessor(object): idstring = re.sub(r'(?!-)\W', "", idstring).lower() return idstring - def raw_diff(self): + def prepare(self, inline_diff=True): """ - Returns raw string as udiff + Prepare the passed udiff for HTML rendering. It'l return a list + of dicts with diff information """ - udiff_copy = self.copy_iterator() - if self.__format == 'gitdiff': - udiff_copy = self._parse_gitdiff(udiff_copy) - return u''.join(udiff_copy) + parsed = self._parser(inline_diff=inline_diff) + self.parsed = True + self.parsed_diff = parsed + return parsed + + def as_raw(self, diff_lines=None): + """ + Returns raw string diff + """ + return self._diff + #return u''.join(imap(self._line_counter, self._diff.splitlines(1))) def as_html(self, table_class='code-difftable', line_class='line', new_lineno_class='lineno old', old_lineno_class='lineno new', - code_class='code', enable_comments=False, diff_lines=None): + code_class='code', enable_comments=False, parsed_lines=None): """ Return given diff as html table with customized css classes """ @@ -480,13 +600,19 @@ class DiffProcessor(object): } else: return label - if diff_lines is None: - diff_lines = self.prepare() + if not self.parsed: + self.prepare() + + diff_lines = self.parsed_diff + if parsed_lines: + diff_lines = parsed_lines + _html_empty = True _html = [] _html.append('''\n''' % { 'table_class': table_class }) + for diff in diff_lines: for line in diff['chunks']: _html_empty = False @@ -551,6 +677,7 @@ class DiffProcessor(object): _html.append('''\n\t\t
%(code)s
\n''' % { 'code': change['line'] }) + _html.append('''\t''') _html.append('''\n\n''') _html.append('''
''') @@ -578,44 +705,47 @@ class InMemoryBundleRepo(bundlerepositor def differ(org_repo, org_ref, other_repo, other_ref, discovery_data=None, - bundle_compare=False): + remote_compare=False, context=3, ignore_whitespace=False): """ - General differ between branches, bookmarks or separate but releated - repositories + General differ between branches, bookmarks, revisions of two remote or + local but related repositories :param org_repo: - :type org_repo: :param org_ref: - :type org_ref: :param other_repo: :type other_repo: - :param other_ref: :type other_ref: """ - bundlerepo = None - ignore_whitespace = False - context = 3 - org_repo = org_repo.scm_instance._repo - other_repo = other_repo.scm_instance._repo - opts = diffopts(git=True, ignorews=ignore_whitespace, context=context) + org_repo_scm = org_repo.scm_instance + other_repo_scm = other_repo.scm_instance + + org_repo = org_repo_scm._repo + other_repo = other_repo_scm._repo + org_ref = org_ref[1] other_ref = other_ref[1] - if org_repo != other_repo and bundle_compare: + if org_repo_scm == other_repo_scm: + log.debug('running diff between %s@%s and %s@%s' + % (org_repo.path, org_ref, other_repo.path, other_ref)) + _diff = org_repo_scm.get_diff(rev1=org_ref, rev2=other_ref, + ignore_whitespace=ignore_whitespace, context=context) + return _diff + elif remote_compare: + opts = diffopts(git=True, ignorews=ignore_whitespace, context=context) common, incoming, rheads = discovery_data - other_repo_peer = localrepo.locallegacypeer(other_repo.local()) + org_repo_peer = localrepo.locallegacypeer(org_repo.local()) # create a bundle (uncompressed if other repo is not local) - if other_repo_peer.capable('getbundle') and incoming: + if org_repo_peer.capable('getbundle'): # disable repo hooks here since it's just bundle ! # patch and reset hooks section of UI config to not run any # hooks on fetching archives with subrepos - for k, _ in other_repo.ui.configitems('hooks'): - other_repo.ui.setconfig('hooks', k, None) - - unbundle = other_repo.getbundle('incoming', common=common, - heads=None) + for k, _ in org_repo.ui.configitems('hooks'): + org_repo.ui.setconfig('hooks', k, None) + unbundle = org_repo.getbundle('incoming', common=None, + heads=None) buf = BytesIO() while True: @@ -632,12 +762,9 @@ def differ(org_repo, org_ref, other_repo bundlerepo = InMemoryBundleRepo(ui, path=org_repo.root, bundlestream=unbundle) - return ''.join(patch.diff(bundlerepo or org_repo, - node1=org_repo[org_ref].node(), - node2=other_repo[other_ref].node(), - opts=opts)) - else: - log.debug('running diff between %s@%s and %s@%s' - % (org_repo, org_ref, other_repo, other_ref)) - return ''.join(patch.diff(org_repo, node1=org_ref, node2=other_ref, - opts=opts)) + return ''.join(patch.diff(bundlerepo, + node1=other_repo[other_ref].node(), + node2=org_repo[org_ref].node(), + opts=opts)) + + return '' diff --git a/rhodecode/lib/ext_json.py b/rhodecode/lib/ext_json.py --- a/rhodecode/lib/ext_json.py +++ b/rhodecode/lib/ext_json.py @@ -1,8 +1,9 @@ import datetime import functools import decimal +import imp -__all__ = ['json', 'simplejson', 'stdjson'] +__all__ = ['json', 'simplejson', 'stdlibjson'] def _is_aware(value): @@ -60,7 +61,7 @@ def _obj_dump(obj): # Import simplejson try: # import simplejson initially - import simplejson + _sj = imp.load_module('_sj', *imp.find_module('simplejson')) def extended_encode(obj): try: @@ -70,12 +71,23 @@ try: raise TypeError("%r is not JSON serializable" % (obj,)) # we handle decimals our own it makes unified behavior of json vs # simplejson - simplejson.dumps = functools.partial(simplejson.dumps, - default=extended_encode, - use_decimal=False) - simplejson.dump = functools.partial(simplejson.dump, - default=extended_encode, - use_decimal=False) + sj_version = [int(x) for x in _sj.__version__.split('.')] + major, minor = sj_version[0], sj_version[1] + if major < 2 or (major == 2 and minor < 1): + # simplejson < 2.1 doesnt support use_decimal + _sj.dumps = functools.partial(_sj.dumps, + default=extended_encode) + _sj.dump = functools.partial(_sj.dump, + default=extended_encode) + else: + _sj.dumps = functools.partial(_sj.dumps, + default=extended_encode, + use_decimal=False) + _sj.dump = functools.partial(_sj.dump, + default=extended_encode, + use_decimal=False) + simplejson = _sj + except ImportError: # no simplejson set it to None simplejson = None @@ -83,10 +95,10 @@ except ImportError: try: # simplejson not found try out regular json module - import json + _json = imp.load_module('_json', *imp.find_module('json')) # extended JSON encoder for json - class ExtendedEncoder(json.JSONEncoder): + class ExtendedEncoder(_json.JSONEncoder): def default(self, obj): try: return _obj_dump(obj) @@ -94,18 +106,17 @@ try: pass raise TypeError("%r is not JSON serializable" % (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) + _json.dumps = functools.partial(_json.dumps, cls=ExtendedEncoder) + _json.dump = functools.partial(_json.dump, cls=ExtendedEncoder) + stdlibjson = _json except ImportError: - json = None - -stdlib = json + stdlibjson = None # set all available json modules if simplejson: - json = simplejson -elif json: - json = json + json = _sj +elif stdlibjson: + json = _json else: raise ImportError('Could not find any json modules') diff --git a/rhodecode/lib/helpers.py b/rhodecode/lib/helpers.py --- a/rhodecode/lib/helpers.py +++ b/rhodecode/lib/helpers.py @@ -11,6 +11,7 @@ import math import logging import re import urlparse +import textwrap from datetime import datetime from pygments.formatters.html import HtmlFormatter @@ -42,10 +43,10 @@ from webhelpers.html.tags import _set_in from rhodecode.lib.annotate import annotate_highlight from rhodecode.lib.utils import repo_name_slug from rhodecode.lib.utils2 import str2bool, safe_unicode, safe_str, \ - get_changeset_safe, datetime_to_time, time_to_datetime + get_changeset_safe, datetime_to_time, time_to_datetime, AttributeDict from rhodecode.lib.markup_renderer import MarkupRenderer from rhodecode.lib.vcs.exceptions import ChangesetDoesNotExistError -from rhodecode.lib.vcs.backends.base import BaseChangeset +from rhodecode.lib.vcs.backends.base import BaseChangeset, EmptyChangeset from rhodecode.config.conf import DATE_FORMAT, DATETIME_FORMAT from rhodecode.model.changeset_status import ChangesetStatusModel from rhodecode.model.db import URL_SEP, Permission @@ -64,7 +65,7 @@ html_escape_table = { def html_escape(text): """Produce entities within text.""" - return "".join(html_escape_table.get(c,c) for c in text) + return "".join(html_escape_table.get(c, c) for c in text) def shorter(text, size=20): @@ -465,7 +466,7 @@ def desc_stylize(value): '', value) value = re.sub(r'\[(requires|recommends|conflicts|base)\ \=\>\ *([a-zA-Z\-\/]*)\]', '
\\1 => \\2
', value) - value = re.sub(r'\[(lang|language)\ \=\>\ *([a-zA-Z\-\/]*)\]', + value = re.sub(r'\[(lang|language)\ \=\>\ *([a-zA-Z\-\/\#\+]*)\]', '
\\2
', value) value = re.sub(r'\[([a-z]+)\]', '
\\1
', value) @@ -491,13 +492,14 @@ def bool2icon(value): return value -def action_parser(user_log, feed=False): +def action_parser(user_log, feed=False, parse_cs=False): """ This helper will action_map the specified string action into translated fancy names with icons and links :param user_log: user log instance :param feed: use output for feeds (no html and fancy icons) + :param parse_cs: parse Changesets into VCS instances """ action = user_log.action @@ -518,32 +520,63 @@ def action_parser(user_log, feed=False): repo_name = user_log.repository.repo_name - repo = user_log.repository.scm_instance - def lnk(rev, repo_name): + if isinstance(rev, BaseChangeset) or isinstance(rev, AttributeDict): + lazy_cs = True + if getattr(rev, 'op', None) and getattr(rev, 'ref_name', None): + lazy_cs = False + lbl = '?' + if rev.op == 'delete_branch': + lbl = '%s' % _('Deleted branch: %s') % rev.ref_name + title = '' + elif rev.op == 'tag': + lbl = '%s' % _('Created tag: %s') % rev.ref_name + title = '' + _url = '#' - if isinstance(rev, BaseChangeset): - lbl = 'r%s:%s' % (rev.revision, rev.short_id) - _url = url('changeset_home', repo_name=repo_name, - revision=rev.raw_id) - title = tooltip(rev.message) + else: + lbl = '%s' % (rev.short_id[:8]) + _url = url('changeset_home', repo_name=repo_name, + revision=rev.raw_id) + title = tooltip(rev.message) else: - lbl = '%s' % rev + ## changeset cannot be found/striped/removed etc. + lbl = ('%s' % rev)[:12] _url = '#' title = _('Changeset not found') - - return link_to(lbl, _url, title=title, class_='tooltip',) + if parse_cs: + return link_to(lbl, _url, title=title, class_='tooltip') + return link_to(lbl, _url, raw_id=rev.raw_id, repo_name=repo_name, + class_='lazy-cs' if lazy_cs else '') revs = [] if len(filter(lambda v: v != '', revs_ids)) > 0: + repo = None for rev in revs_ids[:revs_top_limit]: - try: - rev = repo.get_changeset(rev) - revs.append(rev) - except ChangesetDoesNotExistError: - log.error('cannot find revision %s in this repo' % rev) - revs.append(rev) - continue + _op = _name = None + if len(rev.split('=>')) == 2: + _op, _name = rev.split('=>') + + # we want parsed changesets, or new log store format is bad + if parse_cs: + try: + if repo is None: + repo = user_log.repository.scm_instance + _rev = repo.get_changeset(rev) + revs.append(_rev) + except ChangesetDoesNotExistError: + log.error('cannot find revision %s in this repo' % rev) + revs.append(rev) + continue + else: + _rev = AttributeDict({ + 'short_id': rev[:12], + 'raw_id': rev, + 'message': '', + 'op': _op, + 'ref_name': _name + }) + revs.append(_rev) cs_links = [] cs_links.append(" " + ', '.join( [lnk(rev, repo_name) for rev in revs[:revs_limit]] @@ -554,7 +587,7 @@ def action_parser(user_log, feed=False): '
' '%s
' % ( _('Show all combined changesets %s->%s') % ( - revs_ids[0], revs_ids[-1] + revs_ids[0][:12], revs_ids[-1][:12] ), url('changeset_home', repo_name=repo_name, revision='%s...%s' % (revs_ids[0], revs_ids[-1]) @@ -604,8 +637,8 @@ def action_parser(user_log, feed=False): def get_fork_name(): repo_name = action_params - return _('fork name ') + str(link_to(action_params, url('summary_home', - repo_name=repo_name,))) + _url = url('summary_home', repo_name=repo_name) + return _('fork name %s') % link_to(action_params, _url) def get_user_name(): user_name = action_params @@ -617,7 +650,11 @@ def action_parser(user_log, feed=False): def get_pull_request(): pull_request_id = action_params - repo_name = user_log.repository.repo_name + deleted = user_log.repository is None + if deleted: + repo_name = user_log.repository_name + else: + repo_name = user_log.repository.repo_name return link_to(_('Pull request #%s') % pull_request_id, url('pullrequest_show', repo_name=repo_name, pull_request_id=pull_request_id)) @@ -712,7 +749,13 @@ HasRepoPermissionAny, HasRepoPermissionA #============================================================================== def gravatar_url(email_address, size=30): - from pylons import url ## doh, we need to re-import url to mock it later + from pylons import url # doh, we need to re-import url to mock it later + + if (not str2bool(config['app_conf'].get('use_gravatar')) or + not email_address or email_address == 'anonymous@rhodecode.org'): + f = lambda a, l: min(l, key=lambda x: abs(x - a)) + return url("/images/user%s.png" % f(size, [14, 16, 20, 24, 30])) + if(str2bool(config['app_conf'].get('use_gravatar')) and config['app_conf'].get('alternative_gravatar_url')): tmpl = config['app_conf'].get('alternative_gravatar_url', '') @@ -724,11 +767,6 @@ def gravatar_url(email_address, size=30) .replace('{size}', str(size)) return tmpl - if (not str2bool(config['app_conf'].get('use_gravatar')) or - not email_address or email_address == 'anonymous@rhodecode.org'): - f = lambda a, l: min(l, key=lambda x: abs(x - a)) - return url("/images/user%s.png" % f(size, [14, 16, 20, 24, 30])) - ssl_enabled = 'https' == request.environ.get('wsgi.url_scheme') default = 'identicon' baseurl_nossl = "http://www.gravatar.com/avatar/" @@ -849,7 +887,7 @@ def changed_tooltip(nodes): return ': ' + _('No Files') -def repo_link(groups_and_repos): +def repo_link(groups_and_repos, last_url=None): """ Makes a breadcrumbs link to repo within a group joins » on each group to create a fancy link @@ -858,17 +896,20 @@ def repo_link(groups_and_repos): group >> subgroup >> repo :param groups_and_repos: + :param last_url: """ groups, repo_name = groups_and_repos + last_link = link_to(repo_name, last_url) if last_url else repo_name if not groups: + if last_url: + return last_link return repo_name else: def make_link(group): - return link_to(group.name, url('repos_group_home', - group_name=group.group_name)) - return literal(' » '.join(map(make_link, groups)) + \ - " » " + repo_name) + return link_to(group.name, + url('repos_group_home', group_name=group.group_name)) + return literal(' » '.join(map(make_link, groups) + [last_link])) def fancy_file_stats(stats): @@ -878,27 +919,7 @@ def fancy_file_stats(stats): :param stats: two element list of added/deleted lines of code """ - - a, d, t = stats[0], stats[1], stats[0] + stats[1] - width = 100 - unit = float(width) / (t or 1) - - # needs > 9% of width to be visible or 0 to be hidden - a_p = max(9, unit * a) if a > 0 else 0 - d_p = max(9, unit * d) if d > 0 else 0 - p_sum = a_p + d_p - - if p_sum > width: - #adjust the percentage to be == 100% since we adjusted to 9 - if a_p > d_p: - a_p = a_p - (p_sum - width) - else: - d_p = d_p - (p_sum - width) - - a_v = a if a > 0 else '' - d_v = d if d > 0 else '' - - def cgen(l_type): + def cgen(l_type, a_v, d_v): mapping = {'tr': 'top-right-rounded-corner-mid', 'tl': 'top-left-rounded-corner-mid', 'br': 'bottom-right-rounded-corner-mid', @@ -918,17 +939,43 @@ def fancy_file_stats(stats): if l_type == 'd' and not a_v: return ' '.join(map(map_getter, ['tr', 'br', 'tl', 'bl'])) + a, d = stats[0], stats[1] + width = 100 + + if a == 'b': + #binary mode + b_d = '
%s
' % (d, cgen('a', a_v='', d_v=0), 'bin') + b_a = '
%s
' % ('bin') + return literal('
%s%s
' % (width, b_a, b_d)) + + t = stats[0] + stats[1] + unit = float(width) / (t or 1) + + # needs > 9% of width to be visible or 0 to be hidden + a_p = max(9, unit * a) if a > 0 else 0 + d_p = max(9, unit * d) if d > 0 else 0 + p_sum = a_p + d_p + + if p_sum > width: + #adjust the percentage to be == 100% since we adjusted to 9 + if a_p > d_p: + a_p = a_p - (p_sum - width) + else: + d_p = d_p - (p_sum - width) + + a_v = a if a > 0 else '' + d_v = d if d > 0 else '' + d_a = '
%s
' % ( - cgen('a'), a_p, a_v + cgen('a', a_v, d_v), a_p, a_v ) d_d = '
%s
' % ( - cgen('d'), d_p, d_v + cgen('d', a_v, d_v), d_p, d_v ) return literal('
%s%s
' % (width, d_a, d_d)) def urlify_text(text_): - import re url_pat = re.compile(r'''(http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]''' '''|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+)''') @@ -947,7 +994,7 @@ def urlify_changesets(text_, repository) :param text_: :param repository: """ - import re + URL_PAT = re.compile(r'([0-9a-fA-F]{12,})') def url_func(match_obj): @@ -982,7 +1029,6 @@ def urlify_commit(text_, repository=None :param repository: :param link_: changeset link """ - import re import traceback def escaper(string): @@ -1056,17 +1102,14 @@ def urlify_commit(text_, repository=None log.debug('processed prefix:`%s` => %s' % (pattern_index, newtext)) # if we actually did something above - if valid_indices: - if link_: - # wrap not links into final link => link_ - newtext = linkify_others(newtext, link_) - - return literal(newtext) + if link_: + # wrap not links into final link => link_ + newtext = linkify_others(newtext, link_) except: log.error(traceback.format_exc()) pass - return newtext + return literal(newtext) def rst(source): @@ -1094,3 +1137,23 @@ def changeset_status_lbl(changeset_statu def get_permission_name(key): return dict(Permission.PERMS).get(key) + + +def journal_filter_help(): + return _(textwrap.dedent(''' + Example filter terms: + repository:vcs + username:marcin + action:*push* + ip:127.0.0.1 + date:20120101 + date:[20120101100000 TO 20120102] + + Generate wildcards using '*' character: + "repositroy:vcs*" - search everything starting with 'vcs' + "repository:*vcs*" - search for repository containing 'vcs' + + Optional AND / OR operators in queries + "repository:vcs OR repository:test" + "username:test AND repository:test*" + ''')) diff --git a/rhodecode/lib/hooks.py b/rhodecode/lib/hooks.py --- a/rhodecode/lib/hooks.py +++ b/rhodecode/lib/hooks.py @@ -36,7 +36,7 @@ from rhodecode.lib.utils import action_l from rhodecode.lib.vcs.backends.base import EmptyChangeset from rhodecode.lib.compat import json from rhodecode.lib.exceptions import HTTPLockedRC -from rhodecode.lib.utils2 import safe_str +from rhodecode.lib.utils2 import safe_str, datetime_to_time from rhodecode.model.db import Repository, User @@ -46,7 +46,7 @@ def _get_scm_size(alias, root_path): alias += '.' size_scm, size_root = 0, 0 - for path, dirs, files in os.walk(root_path): + for path, dirs, files in os.walk(safe_str(root_path)): if path.find(alias) != -1: for f in files: try: @@ -159,16 +159,18 @@ def log_pull_action(ui, repo, **kwargs): repository = extras['repository'] scm = extras['scm'] make_lock = extras['make_lock'] + ip = extras['ip'] elif 'username' in rc_extras: username = rc_extras['username'] repository = rc_extras['repository'] scm = rc_extras['scm'] make_lock = rc_extras['make_lock'] + ip = rc_extras['ip'] else: raise Exception('Missing data in repo.ui and os.environ') user = User.get_by_username(username) action = 'pull' - action_logger(user, action, repository, extras['ip'], commit=True) + action_logger(user, action, repository, ip, commit=True) # extension hook call from rhodecode import EXTENSIONS callback = getattr(EXTENSIONS, 'PULL_HOOK', None) @@ -412,11 +414,17 @@ def handle_git_receive(repo_path, revs, heads.splitlines())) cmd = (('log %(new_rev)s' % push_ref) + ' --reverse --pretty=format:"%H" --not ' + heads) + git_revs += repo.run_git_command(cmd)[0].splitlines() + + elif push_ref['new_rev'] == EmptyChangeset().raw_id: + #delete branch case + git_revs += ['delete_branch=>%s' % push_ref['name']] else: cmd = (('log %(old_rev)s..%(new_rev)s' % push_ref) + ' --reverse --pretty=format:"%H"') - git_revs += repo.run_git_command(cmd)[0].splitlines() + git_revs += repo.run_git_command(cmd)[0].splitlines() + elif _type == 'tags': - git_revs += [push_ref['name']] + git_revs += ['tag=>%s' % push_ref['name']] log_push_action(baseui, repo, _git_revs=git_revs) diff --git a/rhodecode/lib/indexers/__init__.py b/rhodecode/lib/indexers/__init__.py --- a/rhodecode/lib/indexers/__init__.py +++ b/rhodecode/lib/indexers/__init__.py @@ -35,7 +35,7 @@ from string import strip from shutil import rmtree from whoosh.analysis import RegexTokenizer, LowercaseFilter, StopFilter -from whoosh.fields import TEXT, ID, STORED, NUMERIC, BOOLEAN, Schema, FieldType +from whoosh.fields import TEXT, ID, STORED, NUMERIC, BOOLEAN, Schema, FieldType, DATETIME from whoosh.index import create_in, open_dir from whoosh.formats import Characters from whoosh.highlight import highlight, HtmlFormatter, ContextFragmenter @@ -89,6 +89,15 @@ CHGSETS_SCHEMA = Schema( CHGSET_IDX_NAME = 'CHGSET_INDEX' +# used only to generate queries in journal +JOURNAL_SCHEMA = Schema( + username=TEXT(), + date=DATETIME(), + action=TEXT(), + repository=TEXT(), + ip=TEXT(), +) + class MakeIndex(BasePasterCommand): diff --git a/rhodecode/lib/indexers/daemon.py b/rhodecode/lib/indexers/daemon.py --- a/rhodecode/lib/indexers/daemon.py +++ b/rhodecode/lib/indexers/daemon.py @@ -41,7 +41,7 @@ sys.path.append(project_path) from rhodecode.config.conf import INDEX_EXTENSIONS from rhodecode.model.scm import ScmModel -from rhodecode.lib.utils2 import safe_unicode +from rhodecode.lib.utils2 import safe_unicode, safe_str from rhodecode.lib.indexers import SCHEMA, IDX_NAME, CHGSETS_SCHEMA, \ CHGSET_IDX_NAME @@ -119,7 +119,7 @@ class WhooshIndexingDaemon(object): tip = repo.get_changeset('tip') for _topnode, _dirs, files in tip.walk('/'): for f in files: - index_paths_.add(jn(repo.path, f.path)) + index_paths_.add(jn(safe_str(repo.path), safe_str(f.path))) except RepositoryError: log.debug(traceback.format_exc()) diff --git a/rhodecode/lib/markup_renderer.py b/rhodecode/lib/markup_renderer.py --- a/rhodecode/lib/markup_renderer.py +++ b/rhodecode/lib/markup_renderer.py @@ -98,7 +98,7 @@ class MarkupRenderer(object): source = safe_unicode(source) try: import markdown as __markdown - return __markdown.markdown(source, ['codehilite']) + return __markdown.markdown(source, ['codehilite', 'tables']) except ImportError: log.warning('Install markdown to use this function') return cls.plain(source) diff --git a/rhodecode/lib/middleware/errormator.py b/rhodecode/lib/middleware/errormator.py new file mode 100644 --- /dev/null +++ b/rhodecode/lib/middleware/errormator.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +""" + rhodecode.lib.middleware.errormator + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + middleware to handle errormator publishing of errors + + :created_on: October 18, 2012 + :author: marcink + :copyright: (C) 2010-2012 Marcin Kuzminski + :license: GPLv3, see COPYING for more details. +""" +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +try: + from errormator_client import make_errormator_middleware +except ImportError: + Errormator = None +else: + Errormator = make_errormator_middleware diff --git a/rhodecode/lib/middleware/sentry.py b/rhodecode/lib/middleware/sentry.py new file mode 100644 --- /dev/null +++ b/rhodecode/lib/middleware/sentry.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +""" + rhodecode.lib.middleware.sentry + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + middleware to handle sentry/raven publishing of errors + + :created_on: September 18, 2012 + :author: marcink + :copyright: (C) 2010-2012 Marcin Kuzminski + :license: GPLv3, see COPYING for more details. +""" +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +try: + from raven.base import Client + from raven.contrib.pylons import list_from_setting + from raven.middleware import Sentry as Middleware +except ImportError: + Sentry = None +else: + class Sentry(Middleware): + def __init__(self, app, config, client_cls=Client): + client = client_cls( + dsn=config.get('sentry.dsn'), + servers=list_from_setting(config, 'sentry.servers'), + name=config.get('sentry.name'), + key=config.get('sentry.key'), + public_key=config.get('sentry.public_key'), + secret_key=config.get('sentry.secret_key'), + project=config.get('sentry.project'), + site=config.get('sentry.site'), + include_paths=list_from_setting(config, 'sentry.include_paths'), + exclude_paths=list_from_setting(config, 'sentry.exclude_paths'), + ) + super(Sentry, self).__init__(app, client) diff --git a/rhodecode/lib/middleware/simplegit.py b/rhodecode/lib/middleware/simplegit.py --- a/rhodecode/lib/middleware/simplegit.py +++ b/rhodecode/lib/middleware/simplegit.py @@ -79,7 +79,7 @@ from paste.httpheaders import REMOTE_USE from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError, \ HTTPBadRequest, HTTPNotAcceptable -from rhodecode.lib.utils2 import safe_str, fix_PATH +from rhodecode.lib.utils2 import safe_str, fix_PATH, get_server_url from rhodecode.lib.base import BaseVCSController from rhodecode.lib.auth import get_container_username from rhodecode.lib.utils import is_valid_repo, make_ui @@ -189,6 +189,7 @@ class SimpleGit(BaseVCSController): # extras are injected into UI object and later available # in hooks executed by rhodecode from rhodecode import CONFIG + server_url = get_server_url(environ) extras = { 'ip': ipaddr, 'username': username, @@ -196,6 +197,7 @@ class SimpleGit(BaseVCSController): 'repository': repo_name, 'scm': 'git', 'config': CONFIG['__file__'], + 'server_url': server_url, 'make_lock': None, 'locked_by': [None, None] } diff --git a/rhodecode/lib/middleware/simplehg.py b/rhodecode/lib/middleware/simplehg.py --- a/rhodecode/lib/middleware/simplehg.py +++ b/rhodecode/lib/middleware/simplehg.py @@ -35,7 +35,7 @@ from paste.httpheaders import REMOTE_USE from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError, \ HTTPBadRequest, HTTPNotAcceptable -from rhodecode.lib.utils2 import safe_str, fix_PATH +from rhodecode.lib.utils2 import safe_str, fix_PATH, get_server_url from rhodecode.lib.base import BaseVCSController from rhodecode.lib.auth import get_container_username from rhodecode.lib.utils import make_ui, is_valid_repo, ui_sections @@ -152,6 +152,7 @@ class SimpleHg(BaseVCSController): # extras are injected into mercurial UI object and later available # in hg hooks executed by rhodecode from rhodecode import CONFIG + server_url = get_server_url(environ) extras = { 'ip': ipaddr, 'username': username, @@ -159,6 +160,7 @@ class SimpleHg(BaseVCSController): 'repository': repo_name, 'scm': 'hg', 'config': CONFIG['__file__'], + 'server_url': server_url, 'make_lock': None, 'locked_by': [None, None] } diff --git a/rhodecode/lib/update_repoinfo.py b/rhodecode/lib/update_repoinfo.py new file mode 100644 --- /dev/null +++ b/rhodecode/lib/update_repoinfo.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +""" + package.rhodecode.lib.cleanup + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + :created_on: Jul 14, 2012 + :author: marcink + :copyright: (C) 2010-2012 Marcin Kuzminski + :license: GPLv3, see COPYING for more details. +""" +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +from __future__ import with_statement + +import os +import sys +import re +import shutil +import logging +import datetime +import string + +from os.path import dirname as dn, join as jn +from rhodecode.model import init_model +from rhodecode.lib.utils2 import engine_from_config, safe_str +from rhodecode.model.db import RhodeCodeUi, Repository + + +#to get the rhodecode import +sys.path.append(dn(dn(dn(os.path.realpath(__file__))))) + +from rhodecode.lib.utils import BasePasterCommand, Command, add_cache + +log = logging.getLogger(__name__) + + +class UpdateCommand(BasePasterCommand): + + max_args = 1 + min_args = 1 + + usage = "CONFIG_FILE" + summary = "Cleanup deleted repos" + group_name = "RhodeCode" + takes_config_file = -1 + parser = Command.standard_parser(verbose=True) + + def command(self): + logging.config.fileConfig(self.path_to_ini_file) + from pylons import config + + #get to remove repos !! + add_cache(config) + engine = engine_from_config(config, 'sqlalchemy.db1.') + init_model(engine) + + repo_update_list = map(string.strip, + self.options.repo_update_list.split(',')) \ + if self.options.repo_update_list else None + + if repo_update_list: + repo_list = Repository.query().filter(Repository.repo_name.in_(repo_update_list)) + else: + repo_list = Repository.getAll() + for repo in repo_list: + last_change = repo.scm_instance.last_change + repo.update_last_change(last_change) + + def update_parser(self): + self.parser.add_option('--update-only', + action='store', + dest='repo_update_list', + help="Specifies a comma separated list of repositores " + "to update last commit info for. OPTIONAL", + ) diff --git a/rhodecode/lib/utils.py b/rhodecode/lib/utils.py --- a/rhodecode/lib/utils.py +++ b/rhodecode/lib/utils.py @@ -32,6 +32,8 @@ import paste import beaker import tarfile import shutil +import decorator +import warnings from os.path import abspath from os.path import dirname as dn, join as jn @@ -132,7 +134,7 @@ def action_logger(user, action, repo, ip try: if hasattr(user, 'user_id'): - user_obj = user + user_obj = User.get(user.user_id) elif isinstance(user, basestring): user_obj = User.get_by_username(user) else: @@ -150,6 +152,7 @@ def action_logger(user, action, repo, ip user_log = UserLog() user_log.user_id = user_obj.user_id + user_log.username = user_obj.username user_log.action = safe_unicode(action) user_log.repository = repo_obj @@ -307,7 +310,7 @@ def make_ui(read_from='file', path=None, for section in ui_sections: for k, v in cfg.items(section): log.debug('settings ui from file[%s]%s:%s' % (section, k, v)) - baseui.setconfig(section, k, v) + baseui.setconfig(safe_str(section), safe_str(k), safe_str(v)) elif read_from == 'db': sa = meta.Session() @@ -320,11 +323,13 @@ def make_ui(read_from='file', path=None, if ui_.ui_active: log.debug('settings ui from db[%s]%s:%s', ui_.ui_section, ui_.ui_key, ui_.ui_value) - baseui.setconfig(ui_.ui_section, ui_.ui_key, ui_.ui_value) + baseui.setconfig(safe_str(ui_.ui_section), safe_str(ui_.ui_key), + safe_str(ui_.ui_value)) if ui_.ui_key == 'push_ssl': # force set push_ssl requirement to False, rhodecode # handles that - baseui.setconfig(ui_.ui_section, ui_.ui_key, False) + baseui.setconfig(safe_str(ui_.ui_section), safe_str(ui_.ui_key), + False) if clear_session: meta.Session.remove() return baseui @@ -446,8 +451,10 @@ def repo2db_mapper(initial_repo_list, re # during starting install all cache keys for all repositories in the # system, this will register all repos and multiple instances key, _prefix, _org_key = CacheInvalidation._get_key(name) - log.debug("Creating a cache key for %s instance_id:`%s`" % (name, _prefix)) - CacheInvalidation._get_or_create_key(key, _prefix, _org_key, commit=False) + CacheInvalidation.invalidate(name) + log.debug("Creating a cache key for %s instance_id=>`%s`" + % (name, _prefix or '-')) + sa.commit() removed = [] if remove_obsolete: @@ -684,9 +691,12 @@ def check_git_version(): from rhodecode import BACKENDS p = subprocess.Popen('git --version', shell=True, - stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = p.communicate() ver = (stdout.split(' ')[-1] or '').strip() or '0.0.0' + if len(ver.split('.')) > 3: + #StrictVersion needs to be only 3 element type + ver = '.'.join(ver.split('.')[:3]) try: _ver = StrictVersion(ver) except: @@ -695,7 +705,7 @@ def check_git_version(): req_ver = '1.7.4' to_old_git = False - if _ver <= StrictVersion(req_ver): + if _ver < StrictVersion(req_ver): to_old_git = True if 'git' in BACKENDS: @@ -707,3 +717,27 @@ def check_git_version(): 'for the system to function properly. Make sure ' 'its version is at least %s' % (ver, req_ver)) return _ver + + +@decorator.decorator +def jsonify(func, *args, **kwargs): + """Action decorator that formats output for JSON + + Given a function that will return content, this decorator will turn + the result into JSON, with a content-type of 'application/json' and + output it. + + """ + from pylons.decorators.util import get_pylons + from rhodecode.lib.ext_json import json + pylons = get_pylons(args) + pylons.response.headers['Content-Type'] = 'application/json; charset=utf-8' + data = func(*args, **kwargs) + if isinstance(data, (list, tuple)): + msg = "JSON responses with Array envelopes are susceptible to " \ + "cross-site data leak attacks, see " \ + "http://wiki.pylonshq.com/display/pylonsfaq/Warnings" + warnings.warn(msg, Warning, 2) + log.warning(msg) + log.debug("Returning JSON wrapped action output") + return json.dumps(data, encoding='utf-8') \ No newline at end of file diff --git a/rhodecode/lib/utils2.py b/rhodecode/lib/utils2.py --- a/rhodecode/lib/utils2.py +++ b/rhodecode/lib/utils2.py @@ -26,6 +26,8 @@ import re import time import datetime +import webob + from pylons.i18n.translation import _, ungettext from rhodecode.lib.vcs.utils.lazy import LazyProperty @@ -64,6 +66,7 @@ def __get_lem(): return dict(d) + def str2bool(_str): """ returs True/False value from given string, it tries to translate the @@ -81,6 +84,27 @@ def str2bool(_str): return _str in ('t', 'true', 'y', 'yes', 'on', '1') +def aslist(obj, sep=None, strip=True): + """ + Returns given string separated by sep as list + + :param obj: + :param sep: + :param strip: + """ + if isinstance(obj, (basestring)): + lst = obj.split(sep) + if strip: + lst = [v.strip() for v in lst] + return lst + elif isinstance(obj, (list, tuple)): + return obj + elif obj is None: + return [] + else: + return [obj] + + def convert_line_endings(line, mode): """ Converts a given line "line end" accordingly to given mode @@ -180,18 +204,23 @@ def safe_unicode(str_, from_encoding=Non if not from_encoding: import rhodecode - DEFAULT_ENCODING = rhodecode.CONFIG.get('default_encoding','utf8') - from_encoding = DEFAULT_ENCODING + DEFAULT_ENCODINGS = aslist(rhodecode.CONFIG.get('default_encoding', + 'utf8'), sep=',') + from_encoding = DEFAULT_ENCODINGS + + if not isinstance(from_encoding, (list, tuple)): + from_encoding = [from_encoding] try: return unicode(str_) except UnicodeDecodeError: pass - try: - return unicode(str_, from_encoding) - except UnicodeDecodeError: - pass + for enc in from_encoding: + try: + return unicode(str_, enc) + except UnicodeDecodeError: + pass try: import chardet @@ -200,7 +229,7 @@ def safe_unicode(str_, from_encoding=Non raise Exception() return str_.decode(encoding) except (ImportError, UnicodeDecodeError, Exception): - return unicode(str_, from_encoding, 'replace') + return unicode(str_, from_encoding[0], 'replace') def safe_str(unicode_, to_encoding=None): @@ -224,13 +253,18 @@ def safe_str(unicode_, to_encoding=None) if not to_encoding: import rhodecode - DEFAULT_ENCODING = rhodecode.CONFIG.get('default_encoding','utf8') - to_encoding = DEFAULT_ENCODING + DEFAULT_ENCODINGS = aslist(rhodecode.CONFIG.get('default_encoding', + 'utf8'), sep=',') + to_encoding = DEFAULT_ENCODINGS - try: - return unicode_.encode(to_encoding) - except UnicodeEncodeError: - pass + if not isinstance(to_encoding, (list, tuple)): + to_encoding = [to_encoding] + + for enc in to_encoding: + try: + return unicode_.encode(enc) + except UnicodeEncodeError: + pass try: import chardet @@ -240,11 +274,23 @@ def safe_str(unicode_, to_encoding=None) return unicode_.encode(encoding) except (ImportError, UnicodeEncodeError): - return unicode_.encode(to_encoding, 'replace') + return unicode_.encode(to_encoding[0], 'replace') return safe_str +def remove_suffix(s, suffix): + if s.endswith(suffix): + s = s[:-1 * len(suffix)] + return s + + +def remove_prefix(s, prefix): + if s.startswith(prefix): + s = s[len(prefix):] + return s + + def engine_from_config(configuration, prefix='sqlalchemy.', **kwargs): """ Custom engine_from_config functions that makes sure we use NullPool for @@ -516,3 +562,8 @@ def obfuscate_url_pw(engine): if url.password: url.password = 'XXXXX' return str(url) + + +def get_server_url(environ): + req = webob.Request(environ) + return req.host_url + req.script_name diff --git a/rhodecode/lib/vcs/backends/__init__.py b/rhodecode/lib/vcs/backends/__init__.py --- a/rhodecode/lib/vcs/backends/__init__.py +++ b/rhodecode/lib/vcs/backends/__init__.py @@ -30,7 +30,7 @@ def get_repo(path=None, alias=None, crea if path is None: path = abspath(os.path.curdir) try: - scm, path = get_scm(path, search_recursively=True) + scm, path = get_scm(path, search_up=True) path = abspath(path) alias = scm except VCSError: diff --git a/rhodecode/lib/vcs/backends/base.py b/rhodecode/lib/vcs/backends/base.py --- a/rhodecode/lib/vcs/backends/base.py +++ b/rhodecode/lib/vcs/backends/base.py @@ -372,6 +372,15 @@ class BaseChangeset(object): def __eq__(self, other): return self.raw_id == other.raw_id + def __json__(self): + return dict( + short_id=self.short_id, + raw_id=self.raw_id, + message=self.message, + date=self.date, + author=self.author, + ) + @LazyProperty def last(self): if self.repository is None: @@ -386,6 +395,13 @@ class BaseChangeset(object): raise NotImplementedError @LazyProperty + def children(self): + """ + Returns list of children changesets. + """ + raise NotImplementedError + + @LazyProperty def id(self): """ Returns string identifying this changeset. @@ -416,6 +432,30 @@ class BaseChangeset(object): raise NotImplementedError @LazyProperty + def commiter(self): + """ + Returns Commiter for given commit + """ + + raise NotImplementedError + + @LazyProperty + def commiter_name(self): + """ + Returns Author name for given commit + """ + + return author_name(self.commiter) + + @LazyProperty + def commiter_email(self): + """ + Returns Author email address for given commit + """ + + return author_email(self.commiter) + + @LazyProperty def author(self): """ Returns Author for given commit @@ -918,12 +958,12 @@ class EmptyChangeset(BaseChangeset): """ def __init__(self, cs='0' * 40, repo=None, requested_revision=None, - alias=None): + alias=None, revision=-1, message='', author='', date=''): self._empty_cs = cs - self.revision = -1 - self.message = '' - self.author = '' - self.date = '' + self.revision = revision + self.message = message + self.author = author + self.date = date self.repository = repo self.requested_revision = requested_revision self.alias = alias diff --git a/rhodecode/lib/vcs/backends/git/changeset.py b/rhodecode/lib/vcs/backends/git/changeset.py --- a/rhodecode/lib/vcs/backends/git/changeset.py +++ b/rhodecode/lib/vcs/backends/git/changeset.py @@ -11,7 +11,8 @@ from rhodecode.lib.vcs.exceptions import from rhodecode.lib.vcs.exceptions import ImproperArchiveTypeError from rhodecode.lib.vcs.backends.base import BaseChangeset, EmptyChangeset from rhodecode.lib.vcs.nodes import FileNode, DirNode, NodeKind, RootNode, \ - RemovedFileNode, SubModuleNode + RemovedFileNode, SubModuleNode, ChangedFileNodesGenerator,\ + AddedFileNodesGenerator, RemovedFileNodesGenerator from rhodecode.lib.vcs.utils import safe_unicode from rhodecode.lib.vcs.utils import date_fromtimestamp from rhodecode.lib.vcs.utils.lazy import LazyProperty @@ -40,19 +41,23 @@ class GitChangeset(BaseChangeset): self._tree_id = commit.tree self._commiter_property = 'committer' + self._author_property = 'author' self._date_property = 'commit_time' self._date_tz_property = 'commit_timezone' self.revision = repository.revisions.index(revision) self.message = safe_unicode(commit.message) - #self.branch = None - self.tags = [] + self.nodes = {} self._paths = {} @LazyProperty + def commiter(self): + return safe_unicode(getattr(self._commit, self._commiter_property)) + + @LazyProperty def author(self): - return safe_unicode(getattr(self._commit, self._commiter_property)) + return safe_unicode(getattr(self._commit, self._author_property)) @LazyProperty def date(self): @@ -71,6 +76,14 @@ class GitChangeset(BaseChangeset): return self.changed, self.added, self.removed @LazyProperty + def tags(self): + _tags = [] + for tname, tsha in self.repository.tags.iteritems(): + if tsha == self.raw_id: + _tags.append(tname) + return _tags + + @LazyProperty def branch(self): heads = self.repository._heads(reverse=False) @@ -149,6 +162,13 @@ class GitChangeset(BaseChangeset): elif isinstance(obj, objects.Tree): return NodeKind.DIR + def _get_filectx(self, path): + path = self._fix_path(path) + if self._get_kind(path) != NodeKind.FILE: + raise ChangesetError("File does not exist for revision %r at " + " %r" % (self.raw_id, path)) + return path + def _get_file_nodes(self): return chain(*(t[2] for t in self.walk())) @@ -160,6 +180,21 @@ class GitChangeset(BaseChangeset): return [self.repository.get_changeset(parent) for parent in self._commit.parents] + @LazyProperty + def children(self): + """ + Returns list of children changesets. + """ + so, se = self.repository.run_git_command( + "rev-list --all --children | grep '^%s'" % self.raw_id + ) + + children = [] + for l in so.splitlines(): + childs = l.split(' ')[1:] + children.extend(childs) + return [self.repository.get_changeset(cs) for cs in children] + def next(self, branch=None): if branch and self.branch != branch: @@ -251,6 +286,8 @@ class GitChangeset(BaseChangeset): which is generally not good. Should be replaced with algorithm iterating commits. """ + self._get_filectx(path) + cmd = 'log --pretty="format: %%H" -s -p %s -- "%s"' % ( self.id, path ) @@ -258,9 +295,24 @@ class GitChangeset(BaseChangeset): ids = re.findall(r'[0-9a-fA-F]{40}', so) return [self.repository.get_changeset(id) for id in ids] + def get_file_history_2(self, path): + """ + Returns history of file as reversed list of ``Changeset`` objects for + which file at given ``path`` has been modified. + + """ + self._get_filectx(path) + from dulwich.walk import Walker + include = [self.id] + walker = Walker(self.repository._repo.object_store, include, + paths=[path], max_entries=1) + return [self.repository.get_changeset(sha) + for sha in (x.commit.id for x in walker)] + def get_file_annotate(self, path): """ - Returns a list of three element tuples with lineno,changeset and line + Returns a generator of four element tuples with + lineno, sha, changeset lazy loader and line TODO: This function now uses os underlying 'git' command which is generally not good. Should be replaced with algorithm iterating @@ -272,12 +324,10 @@ class GitChangeset(BaseChangeset): # -r sha ==> blames for the given revision so, se = self.repository.run_git_command(cmd) - annotate = [] for i, blame_line in enumerate(so.split('\n')[:-1]): ln_no = i + 1 - id, line = re.split(r' ', blame_line, 1) - annotate.append((ln_no, self.repository.get_changeset(id), line)) - return annotate + sha, line = re.split(r' ', blame_line, 1) + yield (ln_no, sha, lambda: self.repository.get_changeset(sha), line) def fill_archive(self, stream=None, kind='tgz', prefix=None, subrepos=False): @@ -468,7 +518,8 @@ class GitChangeset(BaseChangeset): """ if not self.parents: return list(self._get_file_nodes()) - return [self.get_node(path) for path in self._get_paths_for_status('added')] + return AddedFileNodesGenerator([n for n in + self._get_paths_for_status('added')], self) @LazyProperty def changed(self): @@ -477,7 +528,8 @@ class GitChangeset(BaseChangeset): """ if not self.parents: return [] - return [self.get_node(path) for path in self._get_paths_for_status('modified')] + return ChangedFileNodesGenerator([n for n in + self._get_paths_for_status('modified')], self) @LazyProperty def removed(self): @@ -486,4 +538,5 @@ class GitChangeset(BaseChangeset): """ if not self.parents: return [] - return [RemovedFileNode(path) for path in self._get_paths_for_status('deleted')] + return RemovedFileNodesGenerator([n for n in + self._get_paths_for_status('deleted')], self) diff --git a/rhodecode/lib/vcs/backends/git/inmemory.py b/rhodecode/lib/vcs/backends/git/inmemory.py --- a/rhodecode/lib/vcs/backends/git/inmemory.py +++ b/rhodecode/lib/vcs/backends/git/inmemory.py @@ -154,7 +154,6 @@ class GitInMemoryChangeset(BaseInMemoryC # Update vcs repository object & recreate dulwich repo self.repository.revisions.append(commit.id) - self.repository._repo = Repo(self.repository.path) # invalidate parsed refs after commit self.repository._parsed_refs = self.repository._get_parsed_refs() tip = self.repository.get_changeset() diff --git a/rhodecode/lib/vcs/backends/git/repository.py b/rhodecode/lib/vcs/backends/git/repository.py --- a/rhodecode/lib/vcs/backends/git/repository.py +++ b/rhodecode/lib/vcs/backends/git/repository.py @@ -18,7 +18,7 @@ import traceback import urllib import urllib2 from dulwich.repo import Repo, NotGitRepository -#from dulwich.config import ConfigFile +from dulwich.objects import Tag from string import Template from subprocess import Popen, PIPE from rhodecode.lib.vcs.backends.base import BaseRepository @@ -29,7 +29,7 @@ from rhodecode.lib.vcs.exceptions import from rhodecode.lib.vcs.exceptions import TagAlreadyExistError from rhodecode.lib.vcs.exceptions import TagDoesNotExistError from rhodecode.lib.vcs.utils import safe_unicode, makedate, date_fromtimestamp -from rhodecode.lib.vcs.utils.lazy import LazyProperty +from rhodecode.lib.vcs.utils.lazy import LazyProperty, ThreadLocalLazyProperty from rhodecode.lib.vcs.utils.ordered_dict import OrderedDict from rhodecode.lib.vcs.utils.paths import abspath from rhodecode.lib.vcs.utils.paths import get_user_home @@ -54,7 +54,18 @@ class GitRepository(BaseRepository): update_after_clone=False, bare=False): self.path = abspath(repo_path) - self._repo = self._get_repo(create, src_url, update_after_clone, bare) + repo = self._get_repo(create, src_url, update_after_clone, bare) + self.bare = repo.bare + + self._config_files = [ + bare and abspath(self.path, 'config') + or abspath(self.path, '.git', 'config'), + abspath(get_user_home(), '.gitconfig'), + ] + + @ThreadLocalLazyProperty + def _repo(self): + repo = Repo(self.path) #temporary set that to now at later we will move it to constructor baseui = None if baseui is None: @@ -62,19 +73,15 @@ class GitRepository(BaseRepository): baseui = ui() # patch the instance of GitRepo with an "FAKE" ui object to add # compatibility layer with Mercurial - setattr(self._repo, 'ui', baseui) - - try: - self.head = self._repo.head() - except KeyError: - self.head = None + setattr(repo, 'ui', baseui) + return repo - self._config_files = [ - bare and abspath(self.path, 'config') or abspath(self.path, '.git', - 'config'), - abspath(get_user_home(), '.gitconfig'), - ] - self.bare = self._repo.bare + @property + def head(self): + try: + return self._repo.head() + except KeyError: + return None @LazyProperty def revisions(self): @@ -401,6 +408,10 @@ class GitRepository(BaseRepository): for k, type_ in keys: if ref.startswith(k): _key = ref[len(k):] + if type_ == 'T': + obj = self._repo.get_object(sha) + if isinstance(obj, Tag): + sha = self._repo.get_object(sha).object[1] _refs[_key] = [sha, type_] break return _refs @@ -516,7 +527,7 @@ class GitRepository(BaseRepository): :param context: How many lines before/after changed lines should be shown. Defaults to ``3``. """ - flags = ['-U%s' % context] + flags = ['-U%s' % context, '--full-index', '--binary', '-p', '-M', '--abbrev=40'] if ignore_whitespace: flags.append('-w') @@ -536,6 +547,7 @@ class GitRepository(BaseRepository): if path: cmd += ' -- "%s"' % path + stdout, stderr = self.run_git_command(cmd) # If we used 'show' command, strip first few lines (until actual diff # starts) diff --git a/rhodecode/lib/vcs/backends/hg/changeset.py b/rhodecode/lib/vcs/backends/hg/changeset.py --- a/rhodecode/lib/vcs/backends/hg/changeset.py +++ b/rhodecode/lib/vcs/backends/hg/changeset.py @@ -44,6 +44,10 @@ class MercurialChangeset(BaseChangeset): return safe_unicode(self._ctx.description()) @LazyProperty + def commiter(self): + return safe_unicode(self.auhtor) + + @LazyProperty def author(self): return safe_unicode(self._ctx.user()) @@ -95,6 +99,14 @@ class MercurialChangeset(BaseChangeset): return [self.repository.get_changeset(parent.rev()) for parent in self._ctx.parents() if parent.rev() >= 0] + @LazyProperty + def children(self): + """ + Returns list of children changesets. + """ + return [self.repository.get_changeset(child.rev()) + for child in self._ctx.children() if child.rev() >= 0] + def next(self, branch=None): if branch and self.branch != branch: @@ -169,7 +181,7 @@ class MercurialChangeset(BaseChangeset): path = self._fix_path(path) if self._get_kind(path) != NodeKind.FILE: raise ChangesetError("File does not exist for revision %r at " - " %r" % (self.revision, path)) + " %r" % (self.raw_id, path)) return self._ctx.filectx(path) def _extract_submodules(self): @@ -223,17 +235,15 @@ class MercurialChangeset(BaseChangeset): def get_file_annotate(self, path): """ - Returns a list of three element tuples with lineno,changeset and line + Returns a generator of four element tuples with + lineno, sha, changeset lazy loader and line """ + fctx = self._get_filectx(path) - annotate = [] for i, annotate_data in enumerate(fctx.annotate()): ln_no = i + 1 - annotate.append((ln_no, self.repository\ - .get_changeset(hex(annotate_data[0].node())), - annotate_data[1],)) - - return annotate + sha = hex(annotate_data[0].node()) + yield (ln_no, sha, lambda: self.repository.get_changeset(sha), annotate_data[1],) def fill_archive(self, stream=None, kind='tgz', prefix=None, subrepos=False): diff --git a/rhodecode/lib/vcs/backends/hg/repository.py b/rhodecode/lib/vcs/backends/hg/repository.py --- a/rhodecode/lib/vcs/backends/hg/repository.py +++ b/rhodecode/lib/vcs/backends/hg/repository.py @@ -242,8 +242,11 @@ class MercurialRepository(BaseRepository if rev1 != self.EMPTY_CHANGESET: self.get_changeset(rev1) self.get_changeset(rev2) + if path: + file_filter = match(self.path, '', [path]) + else: + file_filter = None - file_filter = match(self.path, '', [path]) return ''.join(patch.diff(self._repo, rev1, rev2, match=file_filter, opts=diffopts(git=True, ignorews=ignore_whitespace, diff --git a/rhodecode/lib/vcs/nodes.py b/rhodecode/lib/vcs/nodes.py --- a/rhodecode/lib/vcs/nodes.py +++ b/rhodecode/lib/vcs/nodes.py @@ -276,16 +276,20 @@ class FileNode(Node): mode = self._mode return mode + def _get_content(self): + if self.changeset: + content = self.changeset.get_file_content(self.path) + else: + content = self._content + return content + @property def content(self): """ Returns lazily content of the FileNode. If possible, would try to decode content from UTF-8. """ - if self.changeset: - content = self.changeset.get_file_content(self.path) - else: - content = self._content + content = self._get_content() if bool(content and '\0' in content): return content @@ -349,6 +353,7 @@ class FileNode(Node): @LazyProperty def mimetype_main(self): + return ['', ''] return self.mimetype.split('/')[0] @LazyProperty @@ -406,7 +411,7 @@ class FileNode(Node): """ Returns True if file has binary content. """ - _bin = '\0' in self.content + _bin = '\0' in self._get_content() return _bin @LazyProperty diff --git a/rhodecode/lib/vcs/utils/__init__.py b/rhodecode/lib/vcs/utils/__init__.py --- a/rhodecode/lib/vcs/utils/__init__.py +++ b/rhodecode/lib/vcs/utils/__init__.py @@ -38,12 +38,12 @@ def safe_unicode(str_, from_encoding=Non :rtype: unicode :returns: unicode object """ + from rhodecode.lib.utils2 import safe_unicode + return safe_unicode(str_, from_encoding) + if isinstance(str_, unicode): return str_ - if not from_encoding: - import rhodecode - DEFAULT_ENCODING = rhodecode.CONFIG.get('default_encoding', 'utf8') - from_encoding = DEFAULT_ENCODING + try: return unicode(str_) except UnicodeDecodeError: @@ -75,13 +75,12 @@ def safe_str(unicode_, to_encoding=None) :rtype: str :returns: str object """ + from rhodecode.lib.utils2 import safe_str + return safe_str(unicode_, to_encoding) if isinstance(unicode_, str): return unicode_ - if not to_encoding: - import rhodecode - DEFAULT_ENCODING = rhodecode.CONFIG.get('default_encoding', 'utf8') - to_encoding = DEFAULT_ENCODING + try: return unicode_.encode(to_encoding) except UnicodeEncodeError: diff --git a/rhodecode/lib/vcs/utils/helpers.py b/rhodecode/lib/vcs/utils/helpers.py --- a/rhodecode/lib/vcs/utils/helpers.py +++ b/rhodecode/lib/vcs/utils/helpers.py @@ -15,14 +15,14 @@ from rhodecode.lib.vcs.utils.paths impor ALIASES = ['hg', 'git'] -def get_scm(path, search_recursively=False, explicit_alias=None): +def get_scm(path, search_up=False, explicit_alias=None): """ Returns one of alias from ``ALIASES`` (in order of precedence same as shortcuts given in ``ALIASES``) and top working dir path for the given argument. If no scm-specific directory is found or more than one scm is found at that directory, ``VCSError`` is raised. - :param search_recursively: if set to ``True``, this function would try to + :param search_up: if set to ``True``, this function would try to move up to parent directory every time no scm is recognized for the currently checked path. Default: ``False``. :param explicit_alias: can be one of available backend aliases, when given @@ -37,7 +37,7 @@ def get_scm(path, search_recursively=Fal return [(scm, path) for scm in get_scms_for_path(path)] found_scms = get_scms(path) - while not found_scms and search_recursively: + while not found_scms and search_up: newpath = abspath(path, '..') if newpath == path: break @@ -78,6 +78,9 @@ def get_scms_for_path(path): if os.path.isdir(dirname): result.append(key) continue + dirname = os.path.join(path, 'rm__.' + key) + if os.path.isdir(dirname): + return [None] # We still need to check if it's not bare repository as # bare repos don't have working directories try: @@ -93,21 +96,6 @@ def get_scms_for_path(path): return result -def get_repo_paths(path): - """ - Returns path's subdirectories which seems to be a repository. - """ - repo_paths = [] - dirnames = (os.path.abspath(dirname) for dirname in os.listdir(path)) - for dirname in dirnames: - try: - get_scm(dirname) - repo_paths.append(dirname) - except VCSError: - pass - return repo_paths - - def run_command(cmd, *args): """ Runs command on the system with given ``args``. diff --git a/rhodecode/lib/vcs/utils/lazy.py b/rhodecode/lib/vcs/utils/lazy.py --- a/rhodecode/lib/vcs/utils/lazy.py +++ b/rhodecode/lib/vcs/utils/lazy.py @@ -26,3 +26,20 @@ class LazyProperty(object): return self result = obj.__dict__[self.__name__] = self._func(obj) return result + +import threading + + +class ThreadLocalLazyProperty(LazyProperty): + """ + Same as above but uses thread local dict for cache storage. + """ + + def __get__(self, obj, klass=None): + if obj is None: + return self + if not hasattr(obj, '__tl_dict__'): + obj.__tl_dict__ = threading.local().__dict__ + + result = obj.__tl_dict__[self.__name__] = self._func(obj) + return result diff --git a/rhodecode/model/db.py b/rhodecode/model/db.py --- a/rhodecode/model/db.py +++ b/rhodecode/model/db.py @@ -46,7 +46,7 @@ from rhodecode.lib.vcs.exceptions import from rhodecode.lib.vcs.utils.lazy import LazyProperty from rhodecode.lib.utils2 import str2bool, safe_str, get_changeset_safe, \ - safe_unicode + safe_unicode, remove_suffix, remove_prefix from rhodecode.lib.compat import json from rhodecode.lib.caching_query import FromCache @@ -118,11 +118,15 @@ class BaseModel(object): @classmethod def get_or_404(cls, id_): - if id_: - res = cls.query().get(id_) - if not res: - raise HTTPNotFound - return res + try: + id_ = int(id_) + except (TypeError, ValueError): + raise HTTPNotFound + + res = cls.query().get(id_) + if not res: + raise HTTPNotFound + return res @classmethod def getAll(cls): @@ -163,7 +167,11 @@ class RhodeCodeSetting(Base, BaseModel): @hybrid_property def app_settings_value(self): v = self._app_settings_value - if self.app_settings_name == 'ldap_active': + if self.app_settings_name in ["ldap_active", + "default_repo_enable_statistics", + "default_repo_enable_locking", + "default_repo_private", + "default_repo_enable_downloads"]: v = str2bool(v) return v @@ -221,6 +229,19 @@ class RhodeCodeSetting(Base, BaseModel): return fd + @classmethod + def get_default_repo_settings(cls, cache=False, strip_prefix=False): + ret = cls.query()\ + .filter(cls.app_settings_name.startswith('default_')).all() + fd = {} + for row in ret: + key = row.app_settings_name + if strip_prefix: + key = remove_prefix(key, prefix='default_') + fd.update({key: row.app_settings_value}) + + return fd + class RhodeCodeUi(Base, BaseModel): __tablename__ = 'rhodecode_ui' @@ -295,7 +316,7 @@ class User(Base, BaseModel): DEFAULT_USER = 'default' DEFAULT_PERMISSIONS = [ 'hg.register.manual_activate', 'hg.create.repository', - 'hg.fork.repository', 'repository.read' + 'hg.fork.repository', 'repository.read', 'group.read' ] user_id = Column("user_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) username = Column("username", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) @@ -310,11 +331,13 @@ class User(Base, BaseModel): api_key = Column("api_key", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) inherit_default_permissions = Column("inherit_default_permissions", Boolean(), nullable=False, unique=None, default=True) - user_log = relationship('UserLog', cascade='all') + user_log = relationship('UserLog') user_perms = relationship('UserToPerm', primaryjoin="User.user_id==UserToPerm.user_id", cascade='all') repositories = relationship('Repository') user_followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_user_id==User.user_id', cascade='all') + followings = relationship('UserFollowing', primaryjoin='UserFollowing.user_id==User.user_id', cascade='all') + repo_to_perm = relationship('UserRepoToPerm', primaryjoin='UserRepoToPerm.user_id==User.user_id', cascade='all') repo_group_to_perm = relationship('UserRepoGroupToPerm', primaryjoin='UserRepoGroupToPerm.user_id==User.user_id', cascade='all') @@ -502,7 +525,8 @@ class UserLog(Base, BaseModel): 'mysql_charset': 'utf8'}, ) user_log_id = Column("user_log_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) - user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) + user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None) + username = Column("username", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True) repository_name = Column("repository_name", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) user_ip = Column("user_ip", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) @@ -774,30 +798,8 @@ class Repository(Base, BaseModel): """ Creates an db based ui object for this repository """ - from mercurial import ui - from mercurial import config - baseui = ui.ui() - - #clean the baseui object - baseui._ocfg = config.config() - baseui._ucfg = config.config() - baseui._tcfg = config.config() - - ret = RhodeCodeUi.query()\ - .options(FromCache("sql_cache_short", "repository_repo_ui")).all() - - hg_ui = ret - for ui_ in hg_ui: - if ui_.ui_active: - log.debug('settings ui from db[%s]%s:%s', ui_.ui_section, - ui_.ui_key, ui_.ui_value) - baseui.setconfig(ui_.ui_section, ui_.ui_key, ui_.ui_value) - if ui_.ui_key == 'push_ssl': - # force set push_ssl requirement to False, rhodecode - # handles that - baseui.setconfig(ui_.ui_section, ui_.ui_key, False) - - return baseui + from rhodecode.lib.utils import make_ui + return make_ui('db', clear_session=False) @classmethod def inject_ui(cls, repo, extras={}): @@ -856,6 +858,10 @@ class Repository(Base, BaseModel): Session().add(repo) Session().commit() + @property + def last_db_change(self): + return self.updated_on + #========================================================================== # SCM PROPERTIES #========================================================================== @@ -870,6 +876,15 @@ class Repository(Base, BaseModel): cs = self.get_changeset(self.landing_rev) or self.get_changeset() return cs + def update_last_change(self, last_change=None): + if last_change is None: + last_change = datetime.datetime.now() + if self.updated_on is None or self.updated_on != last_change: + log.debug('updated repo %s with new date %s' % (self, last_change)) + self.updated_on = last_change + Session().add(self) + Session().commit() + @property def tip(self): return self.get_changeset('tip') @@ -942,10 +957,14 @@ class Repository(Base, BaseModel): """ set a cache for invalidation for this instance """ - CacheInvalidation.set_invalidate(self.repo_name) + CacheInvalidation.set_invalidate(repo_name=self.repo_name) @LazyProperty def scm_instance(self): + import rhodecode + full_cache = str2bool(rhodecode.CONFIG.get('vcs_full_cache')) + if full_cache: + return self.scm_instance_cached() return self.__get_instance() def scm_instance_cached(self, cache_map=None): @@ -1442,21 +1461,27 @@ class CacheInvalidation(Base, BaseModel) """ import rhodecode prefix = '' + org_key = key iid = rhodecode.CONFIG.get('instance_id') if iid: prefix = iid - return "%s%s" % (prefix, key), prefix, key.rstrip('_README') + + return "%s%s" % (prefix, key), prefix, org_key @classmethod def get_by_key(cls, key): return cls.query().filter(cls.cache_key == key).scalar() @classmethod - def _get_or_create_key(cls, key, prefix, org_key, commit=True): + def get_by_repo_name(cls, repo_name): + return cls.query().filter(cls.cache_args == repo_name).all() + + @classmethod + def _get_or_create_key(cls, key, repo_name, commit=True): inv_obj = Session().query(cls).filter(cls.cache_key == key).scalar() if not inv_obj: try: - inv_obj = CacheInvalidation(key, org_key) + inv_obj = CacheInvalidation(key, repo_name) Session().add(inv_obj) if commit: Session().commit() @@ -1474,30 +1499,37 @@ class CacheInvalidation(Base, BaseModel) :param key: """ + repo_name = key + repo_name = remove_suffix(repo_name, '_README') + repo_name = remove_suffix(repo_name, '_RSS') + repo_name = remove_suffix(repo_name, '_ATOM') + # adds instance prefix key, _prefix, _org_key = cls._get_key(key) - inv = cls._get_or_create_key(key, _prefix, _org_key) + inv = cls._get_or_create_key(key, repo_name) if inv and inv.cache_active is False: return inv @classmethod - def set_invalidate(cls, key): + def set_invalidate(cls, key=None, repo_name=None): """ - Mark this Cache key for invalidation + Mark this Cache key for invalidation, either by key or whole + cache sets based on repo_name :param key: """ + if key: + key, _prefix, _org_key = cls._get_key(key) + inv_objs = Session().query(cls).filter(cls.cache_key == key).all() + elif repo_name: + inv_objs = Session().query(cls).filter(cls.cache_args == repo_name).all() - key, _prefix, _org_key = cls._get_key(key) - inv_objs = Session().query(cls).filter(cls.cache_args == _org_key).all() - log.debug('marking %s key[s] %s for invalidation' % (len(inv_objs), - _org_key)) + log.debug('marking %s key[s] for invalidation based on key=%s,repo_name=%s' + % (len(inv_objs), key, repo_name)) try: for inv_obj in inv_objs: - if inv_obj: - inv_obj.cache_active = False - + inv_obj.cache_active = False Session().add(inv_obj) Session().commit() except Exception: diff --git a/rhodecode/model/forms.py b/rhodecode/model/forms.py --- a/rhodecode/model/forms.py +++ b/rhodecode/model/forms.py @@ -176,16 +176,17 @@ def RepoForm(edit=False, old_data={}, su filter_extra_fields = False repo_name = All(v.UnicodeString(strip=True, min=1, not_empty=True), v.SlugifyName()) - clone_uri = All(v.UnicodeString(strip=True, min=1, not_empty=False)) repo_group = All(v.CanWriteGroup(), v.OneOf(repo_groups, hideList=True)) repo_type = v.OneOf(supported_backends) - description = v.UnicodeString(strip=True, min=1, not_empty=False) - private = v.StringBoolean(if_missing=False) - enable_statistics = v.StringBoolean(if_missing=False) - enable_downloads = v.StringBoolean(if_missing=False) - enable_locking = v.StringBoolean(if_missing=False) - landing_rev = v.OneOf(landing_revs, hideList=True) + repo_description = v.UnicodeString(strip=True, min=1, not_empty=False) + repo_private = v.StringBoolean(if_missing=False) + repo_landing_rev = v.OneOf(landing_revs, hideList=True) + clone_uri = All(v.UnicodeString(strip=True, min=1, not_empty=False)) + + repo_enable_statistics = v.StringBoolean(if_missing=False) + repo_enable_downloads = v.StringBoolean(if_missing=False) + repo_enable_locking = v.StringBoolean(if_missing=False) if edit: #this is repo owner @@ -197,6 +198,27 @@ def RepoForm(edit=False, old_data={}, su return _RepoForm +def RepoSettingsForm(edit=False, old_data={}, supported_backends=BACKENDS.keys(), + repo_groups=[], landing_revs=[]): + class _RepoForm(formencode.Schema): + allow_extra_fields = True + filter_extra_fields = False + repo_name = All(v.UnicodeString(strip=True, min=1, not_empty=True), + v.SlugifyName()) + repo_group = All(v.CanWriteGroup(), + v.OneOf(repo_groups, hideList=True)) + repo_description = v.UnicodeString(strip=True, min=1, not_empty=False) + repo_private = v.StringBoolean(if_missing=False) + repo_landing_rev = v.OneOf(landing_revs, hideList=True) + clone_uri = All(v.UnicodeString(strip=True, min=1, not_empty=False)) + + chained_validators = [v.ValidCloneUri(), + v.ValidRepoName(edit, old_data), + v.ValidPerms(), + v.ValidSettings()] + return _RepoForm + + def RepoForkForm(edit=False, old_data={}, supported_backends=BACKENDS.keys(), repo_groups=[], landing_revs=[]): class _RepoForkForm(formencode.Schema): @@ -218,23 +240,6 @@ def RepoForkForm(edit=False, old_data={} return _RepoForkForm -def RepoSettingsForm(edit=False, old_data={}, - supported_backends=BACKENDS.keys(), repo_groups=[], - landing_revs=[]): - class _RepoForm(formencode.Schema): - allow_extra_fields = True - filter_extra_fields = False - repo_name = All(v.UnicodeString(strip=True, min=1, not_empty=True), - v.SlugifyName()) - description = v.UnicodeString(strip=True, min=1, not_empty=True) - repo_group = v.OneOf(repo_groups, hideList=True) - private = v.StringBoolean(if_missing=False) - landing_rev = v.OneOf(landing_revs, hideList=True) - chained_validators = [v.ValidRepoName(edit, old_data), v.ValidPerms(), - v.ValidSettings()] - return _RepoForm - - def ApplicationSettingsForm(): class _ApplicationSettingsForm(formencode.Schema): allow_extra_fields = True @@ -254,6 +259,9 @@ def ApplicationVisualisationForm(): rhodecode_show_private_icon = v.StringBoolean(if_missing=False) rhodecode_stylify_metatags = v.StringBoolean(if_missing=False) + rhodecode_lightweight_dashboard = v.StringBoolean(if_missing=False) + rhodecode_lightweight_journal = v.StringBoolean(if_missing=False) + return _ApplicationVisualisationForm @@ -278,14 +286,16 @@ def ApplicationUiSettingsForm(): return _ApplicationUiSettingsForm -def DefaultPermissionsForm(perms_choices, register_choices, create_choices, - fork_choices): +def DefaultPermissionsForm(repo_perms_choices, group_perms_choices, + register_choices, create_choices, fork_choices): class _DefaultPermissionsForm(formencode.Schema): allow_extra_fields = True filter_extra_fields = True - overwrite_default = v.StringBoolean(if_missing=False) + overwrite_default_repo = v.StringBoolean(if_missing=False) + overwrite_default_group = v.StringBoolean(if_missing=False) anonymous = v.StringBoolean(if_missing=False) - default_perm = v.OneOf(perms_choices) + default_repo_perm = v.OneOf(repo_perms_choices) + default_group_perm = v.OneOf(group_perms_choices) default_register = v.OneOf(register_choices) default_create = v.OneOf(create_choices) default_fork = v.OneOf(fork_choices) @@ -293,6 +303,19 @@ def DefaultPermissionsForm(perms_choices return _DefaultPermissionsForm +def DefaultsForm(edit=False, old_data={}, supported_backends=BACKENDS.keys()): + class _DefaultsForm(formencode.Schema): + allow_extra_fields = True + filter_extra_fields = True + default_repo_type = v.OneOf(supported_backends) + default_repo_private = v.StringBoolean(if_missing=False) + default_repo_enable_statistics = v.StringBoolean(if_missing=False) + default_repo_enable_downloads = v.StringBoolean(if_missing=False) + default_repo_enable_locking = v.StringBoolean(if_missing=False) + + return _DefaultsForm + + def LdapSettingsForm(tls_reqcert_choices, search_scope_choices, tls_kind_choices): class _LdapSettingsForm(formencode.Schema): diff --git a/rhodecode/model/notification.py b/rhodecode/model/notification.py --- a/rhodecode/model/notification.py +++ b/rhodecode/model/notification.py @@ -217,16 +217,16 @@ class NotificationModel(BaseModel): #alias _n = notification _map = { - _n.TYPE_CHANGESET_COMMENT: _('commented on commit'), - _n.TYPE_MESSAGE: _('sent message'), - _n.TYPE_MENTION: _('mentioned you'), - _n.TYPE_REGISTRATION: _('registered in RhodeCode'), - _n.TYPE_PULL_REQUEST: _('opened new pull request'), - _n.TYPE_PULL_REQUEST_COMMENT: _('commented on pull request') + _n.TYPE_CHANGESET_COMMENT: _('commented on commit at %(when)s'), + _n.TYPE_MESSAGE: _('sent message at %(when)s'), + _n.TYPE_MENTION: _('mentioned you at %(when)s'), + _n.TYPE_REGISTRATION: _('registered in RhodeCode at %(when)s'), + _n.TYPE_PULL_REQUEST: _('opened new pull request at %(when)s'), + _n.TYPE_PULL_REQUEST_COMMENT: _('commented on pull request at %(when)s') } # action == _map string - tmpl = "%(user)s %(action)s at %(when)s" + tmpl = "%(user)s %(action)s " if show_age: when = h.age(notification.created_on) else: @@ -234,9 +234,9 @@ class NotificationModel(BaseModel): data = dict( user=notification.created_by_user.username, - action=_map[notification.type_], when=when, + action=_map[notification.type_] ) - return tmpl % data + return (tmpl % data) % {'when': when} class EmailNotificationModel(BaseModel): diff --git a/rhodecode/model/permission.py b/rhodecode/model/permission.py --- a/rhodecode/model/permission.py +++ b/rhodecode/model/permission.py @@ -78,16 +78,21 @@ class PermissionModel(BaseModel): u2p = self.sa.query(UserToPerm).filter(UserToPerm.user == perm_user).all() if len(u2p) != len(User.DEFAULT_PERMISSIONS): - raise Exception('Defined: %s should be 4 permissions for default' + raise Exception('Defined: %s should be %s permissions for default' ' user. This should not happen please verify' - ' your database' % len(u2p)) + ' your database' % (len(u2p), len(User.DEFAULT_PERMISSIONS))) try: # stage 1 change defaults for p in u2p: if p.permission.permission_name.startswith('repository.'): p.permission = self.get_permission_by_name( - form_result['default_perm']) + form_result['default_repo_perm']) + self.sa.add(p) + + elif p.permission.permission_name.startswith('group.'): + p.permission = self.get_permission_by_name( + form_result['default_group_perm']) self.sa.add(p) elif p.permission.permission_name.startswith('hg.register.'): @@ -105,9 +110,9 @@ class PermissionModel(BaseModel): form_result['default_fork']) self.sa.add(p) - _def_name = form_result['default_perm'].split('repository.')[-1] #stage 2 update all default permissions for repos if checked - if form_result['overwrite_default'] == True: + if form_result['overwrite_default_repo'] == True: + _def_name = form_result['default_repo_perm'].split('repository.')[-1] _def = self.get_permission_by_name('repository.' + _def_name) # repos for r2p in self.sa.query(UserRepoToPerm)\ @@ -115,6 +120,9 @@ class PermissionModel(BaseModel): .all(): r2p.permission = _def self.sa.add(r2p) + + if form_result['overwrite_default_group'] == True: + _def_name = form_result['default_group_perm'].split('group.')[-1] # groups _def = self.get_permission_by_name('group.' + _def_name) for g2p in self.sa.query(UserRepoGroupToPerm)\ diff --git a/rhodecode/model/pull_request.py b/rhodecode/model/pull_request.py --- a/rhodecode/model/pull_request.py +++ b/rhodecode/model/pull_request.py @@ -26,6 +26,7 @@ import logging import binascii import datetime +import re from pylons.i18n.translation import _ @@ -144,52 +145,71 @@ class PullRequestModel(BaseModel): pull_request.updated_on = datetime.datetime.now() self.sa.add(pull_request) - def _get_changesets(self, org_repo, org_ref, other_repo, other_ref, + def _get_changesets(self, alias, org_repo, org_ref, other_repo, other_ref, discovery_data): """ Returns a list of changesets that are incoming from org_repo@org_ref to other_repo@other_ref :param org_repo: - :type org_repo: :param org_ref: - :type org_ref: :param other_repo: - :type other_repo: :param other_ref: - :type other_ref: :param tmp: - :type tmp: """ + changesets = [] #case two independent repos common, incoming, rheads = discovery_data - if org_repo != other_repo and incoming: + if org_repo != other_repo: + revs = [ + org_repo._repo.lookup(org_ref[1]), + org_repo._repo.lookup(other_ref[1]), + ] + obj = findcommonoutgoing(org_repo._repo, localrepo.locallegacypeer(other_repo._repo.local()), + revs, force=True) revs = obj.missing - for cs in reversed(map(binascii.hexlify, revs)): - changesets.append(org_repo.get_changeset(cs)) + for cs in map(binascii.hexlify, revs): + _cs = org_repo.get_changeset(cs) + changesets.append(_cs) + # in case we have revisions filter out the ones not in given range + if org_ref[0] == 'rev' and other_ref[0] == 'rev': + revs = [x.raw_id for x in changesets] + start = org_ref[1] + stop = other_ref[1] + changesets = changesets[revs.index(start):revs.index(stop) + 1] else: - _revset_predicates = { - 'branch': 'branch', - 'book': 'bookmark', - 'tag': 'tag', - 'rev': 'id', - } + #no remote compare do it on the same repository + if alias == 'hg': + _revset_predicates = { + 'branch': 'branch', + 'book': 'bookmark', + 'tag': 'tag', + 'rev': 'id', + } - revs = [ - "ancestors(%s('%s')) and not ancestors(%s('%s'))" % ( - _revset_predicates[org_ref[0]], org_ref[1], - _revset_predicates[other_ref[0]], other_ref[1] - ) - ] + revs = [ + "ancestors(%s('%s')) and not ancestors(%s('%s'))" % ( + _revset_predicates[other_ref[0]], other_ref[1], + _revset_predicates[org_ref[0]], org_ref[1], + ) + ] - out = scmutil.revrange(org_repo._repo, revs) - for cs in reversed(out): - changesets.append(org_repo.get_changeset(cs)) + out = scmutil.revrange(org_repo._repo, revs) + for cs in (out): + changesets.append(org_repo.get_changeset(cs)) + elif alias == 'git': + so, se = org_repo.run_git_command( + 'log --reverse --pretty="format: %%H" -s -p %s..%s' % (org_ref[1], + other_ref[1]) + ) + ids = re.findall(r'[0-9a-fA-F]{40}', so) + for cs in (ids): + changesets.append(org_repo.get_changeset(cs)) return changesets @@ -223,15 +243,16 @@ class PullRequestModel(BaseModel): tmp = discovery.findcommonincoming( repo=_other_repo, # other_repo we check for incoming remote=org_peer, # org_repo source for incoming - heads=[_other_repo[other_rev].node(), - _org_repo[org_rev].node()], +# heads=[_other_repo[other_rev].node(), +# _org_repo[org_rev].node()], force=True ) return tmp def get_compare_data(self, org_repo, org_ref, other_repo, other_ref): """ - Returns a tuple of incomming changesets, and discoverydata cache + Returns a tuple of incomming changesets, and discoverydata cache for + mercurial repositories :param org_repo: :type org_repo: @@ -249,14 +270,16 @@ class PullRequestModel(BaseModel): if len(other_ref) != 2 or not isinstance(org_ref, (list, tuple)): raise Exception('other_ref must be a two element list/tuple') - discovery_data = self._get_discovery(org_repo.scm_instance, - org_ref, - other_repo.scm_instance, - other_ref) - cs_ranges = self._get_changesets(org_repo.scm_instance, - org_ref, - other_repo.scm_instance, - other_ref, + org_repo_scm = org_repo.scm_instance + other_repo_scm = other_repo.scm_instance + + alias = org_repo.scm_instance.alias + discovery_data = [None, None, None] + if alias == 'hg': + discovery_data = self._get_discovery(org_repo_scm, org_ref, + other_repo_scm, other_ref) + cs_ranges = self._get_changesets(alias, + org_repo_scm, org_ref, + other_repo_scm, other_ref, discovery_data) - return cs_ranges, discovery_data diff --git a/rhodecode/model/repo.py b/rhodecode/model/repo.py --- a/rhodecode/model/repo.py +++ b/rhodecode/model/repo.py @@ -31,13 +31,15 @@ from datetime import datetime from rhodecode.lib.vcs.backends import get_backend from rhodecode.lib.compat import json -from rhodecode.lib.utils2 import LazyProperty, safe_str, safe_unicode +from rhodecode.lib.utils2 import LazyProperty, safe_str, safe_unicode,\ + remove_prefix from rhodecode.lib.caching_query import FromCache from rhodecode.lib.hooks import log_create_repository, log_delete_repository from rhodecode.model import BaseModel from rhodecode.model.db import Repository, UserRepoToPerm, User, Permission, \ - Statistics, UsersGroup, UsersGroupRepoToPerm, RhodeCodeUi, RepoGroup + Statistics, UsersGroup, UsersGroupRepoToPerm, RhodeCodeUi, RepoGroup,\ + RhodeCodeSetting from rhodecode.lib import helpers as h @@ -130,6 +132,16 @@ class RepoModel(BaseModel): defaults['repo_group'] = getattr(group[-1] if group else None, 'group_id', None) + for strip, k in [(0, 'repo_type'), (1, 'repo_enable_downloads'), + (1, 'repo_description'), (1, 'repo_enable_locking'), + (1, 'repo_landing_rev'), (0, 'clone_uri'), + (1, 'repo_private'), (1, 'repo_enable_statistics')]: + attr = k + if strip: + attr = remove_prefix(k, 'repo_') + + defaults[k] = defaults[attr] + # fill owner if repo_info.user: defaults.update({'user': repo_info.user.username}) @@ -150,12 +162,12 @@ class RepoModel(BaseModel): return defaults - def update(self, repo_name, form_data): + def update(self, org_repo_name, **kwargs): try: - cur_repo = self.get_by_repo_name(repo_name, cache=False) + cur_repo = self.get_by_repo_name(org_repo_name, cache=False) # update permissions - for member, perm, member_type in form_data['perms_updates']: + for member, perm, member_type in kwargs['perms_updates']: if member_type == 'user': # this updates existing one RepoModel().grant_user_permission( @@ -166,7 +178,7 @@ class RepoModel(BaseModel): repo=cur_repo, group_name=member, perm=perm ) # set new permissions - for member, perm, member_type in form_data['perms_new']: + for member, perm, member_type in kwargs['perms_new']: if member_type == 'user': RepoModel().grant_user_permission( repo=cur_repo, user=member, perm=perm @@ -176,26 +188,30 @@ class RepoModel(BaseModel): repo=cur_repo, group_name=member, perm=perm ) - # update current repo - for k, v in form_data.items(): - if k == 'user': - cur_repo.user = User.get_by_username(v) - elif k == 'repo_name': - pass - elif k == 'repo_group': - cur_repo.group = RepoGroup.get(v) + if 'user' in kwargs: + cur_repo.user = User.get_by_username(kwargs['user']) + + if 'repo_group' in kwargs: + cur_repo.group = RepoGroup.get(kwargs['repo_group']) - else: - setattr(cur_repo, k, v) + for strip, k in [(0, 'repo_type'), (1, 'repo_enable_downloads'), + (1, 'repo_description'), (1, 'repo_enable_locking'), + (1, 'repo_landing_rev'), (0, 'clone_uri'), + (1, 'repo_private'), (1, 'repo_enable_statistics')]: + if k in kwargs: + val = kwargs[k] + if strip: + k = remove_prefix(k, 'repo_') + setattr(cur_repo, k, val) - new_name = cur_repo.get_new_name(form_data['repo_name']) + new_name = cur_repo.get_new_name(kwargs['repo_name']) cur_repo.repo_name = new_name self.sa.add(cur_repo) - if repo_name != new_name: + if org_repo_name != new_name: # rename repository - self.__rename_repo(old=repo_name, new=new_name) + self.__rename_repo(old=org_repo_name, new=new_name) return cur_repo except: @@ -205,7 +221,8 @@ class RepoModel(BaseModel): def create_repo(self, repo_name, repo_type, description, owner, private=False, clone_uri=None, repos_group=None, landing_rev='tip', just_db=False, fork_of=None, - copy_fork_permissions=False): + copy_fork_permissions=False, enable_statistics=False, + enable_locking=False, enable_downloads=False): """ Create repository @@ -234,6 +251,10 @@ class RepoModel(BaseModel): new_repo.clone_uri = clone_uri new_repo.landing_rev = landing_rev + new_repo.enable_statistics = enable_statistics + new_repo.enable_locking = enable_locking + new_repo.enable_downloads = enable_downloads + if repos_group: new_repo.enable_locking = repos_group.enable_locking @@ -307,20 +328,27 @@ class RepoModel(BaseModel): :param just_db: :param fork: """ - + owner = cur_user repo_name = form_data['repo_name_full'] repo_type = form_data['repo_type'] - description = form_data['description'] - owner = cur_user - private = form_data['private'] + description = form_data['repo_description'] + private = form_data['repo_private'] clone_uri = form_data.get('clone_uri') repos_group = form_data['repo_group'] - landing_rev = form_data['landing_rev'] + landing_rev = form_data['repo_landing_rev'] copy_fork_permissions = form_data.get('copy_permissions') fork_of = form_data.get('fork_parent_id') + + ##defaults + defs = RhodeCodeSetting.get_default_repo_settings(strip_prefix=True) + enable_statistics = defs.get('repo_enable_statistic') + enable_locking = defs.get('repo_enable_locking') + enable_downloads = defs.get('repo_enable_downloads') + return self.create_repo( repo_name, repo_type, description, owner, private, clone_uri, - repos_group, landing_rev, just_db, fork_of, copy_fork_permissions + repos_group, landing_rev, just_db, fork_of, copy_fork_permissions, + enable_statistics, enable_locking, enable_downloads ) def create_fork(self, form_data, cur_user): @@ -544,5 +572,8 @@ class RepoModel(BaseModel): _now = datetime.now() _ms = str(_now.microsecond).rjust(6, '0') _d = 'rm__%s__%s' % (_now.strftime('%Y%m%d_%H%M%S_' + _ms), - repo.repo_name) + repo.just_name) + if repo.group: + args = repo.group.full_path_splitted + [_d] + _d = os.path.join(*args) shutil.move(rm_path, os.path.join(self.repos_path, _d)) diff --git a/rhodecode/model/repos_group.py b/rhodecode/model/repos_group.py --- a/rhodecode/model/repos_group.py +++ b/rhodecode/model/repos_group.py @@ -27,6 +27,7 @@ import os import logging import traceback import shutil +import datetime from rhodecode.lib.utils2 import LazyProperty @@ -126,12 +127,18 @@ class ReposGroupModel(BaseModel): paths = os.sep.join(paths) rm_path = os.path.join(self.repos_path, paths) + log.info("Removing group %s" % (rm_path)) + # delete only if that path really exists if os.path.isdir(rm_path): - # delete only if that path really exists if force_delete: shutil.rmtree(rm_path) else: - os.rmdir(rm_path) # this raises an exception when there are still objects inside + #archive that group` + _now = datetime.datetime.now() + _ms = str(_now.microsecond).rjust(6, '0') + _d = 'rm__%s_GROUP_%s' % (_now.strftime('%Y%m%d_%H%M%S_' + _ms), + group.name) + shutil.move(rm_path, os.path.join(self.repos_path, _d)) def create(self, group_name, group_description, parent=None, just_db=False): try: diff --git a/rhodecode/model/scm.py b/rhodecode/model/scm.py --- a/rhodecode/model/scm.py +++ b/rhodecode/model/scm.py @@ -115,6 +115,7 @@ class CachedRepoList(object): tmp_d = {} tmp_d['name'] = dbr.repo_name tmp_d['name_sort'] = tmp_d['name'].lower() + tmp_d['raw_name'] = tmp_d['name'].lower() tmp_d['description'] = dbr.description tmp_d['description_sort'] = tmp_d['description'].lower() tmp_d['last_change'] = last_change @@ -149,6 +150,7 @@ class SimpleCachedRepoList(CachedRepoLis tmp_d = {} tmp_d['name'] = dbr.repo_name tmp_d['name_sort'] = tmp_d['name'].lower() + tmp_d['raw_name'] = tmp_d['name'].lower() tmp_d['description'] = dbr.description tmp_d['description_sort'] = tmp_d['description'].lower() tmp_d['dbrepo'] = dbr.get_dict() @@ -223,7 +225,7 @@ class ScmModel(BaseModel): for name, path in get_filesystem_repos(repos_path, recursive=True): # skip removed repos - if REMOVED_REPO_PAT.match(name): + if REMOVED_REPO_PAT.match(name) or path[0] is None: continue # name need to be decomposed and put back together using the / @@ -289,7 +291,7 @@ class ScmModel(BaseModel): :param repo_name: this repo that should invalidation take place """ - CacheInvalidation.set_invalidate(repo_name) + CacheInvalidation.set_invalidate(repo_name=repo_name) def toggle_following_repo(self, follow_repo_id, user_id): @@ -394,6 +396,7 @@ class ScmModel(BaseModel): raise Exception("This repository doesn't have a clone uri") repo = dbrepo.scm_instance + from rhodecode import CONFIG try: extras = { 'ip': '', @@ -401,7 +404,11 @@ class ScmModel(BaseModel): 'action': 'push_remote', 'repository': dbrepo.repo_name, 'scm': repo.alias, + 'config': CONFIG['__file__'], + 'make_lock': None, + 'locked_by': [None, None] } + Repository.inject_ui(repo, extras=extras) if repo.alias == 'git': diff --git a/rhodecode/model/user.py b/rhodecode/model/user.py --- a/rhodecode/model/user.py +++ b/rhodecode/model/user.py @@ -26,6 +26,8 @@ import logging import traceback import itertools +import collections +import functools from pylons import url from pylons.i18n.translation import _ @@ -246,7 +248,7 @@ class UserModel(BaseModel): log.error(traceback.format_exc()) raise - def update(self, user_id, form_data): + def update(self, user_id, form_data, skip_attrs=[]): from rhodecode.lib.auth import get_crypt_password try: user = self.get(user_id, cache=False) @@ -256,6 +258,8 @@ class UserModel(BaseModel): " crucial for entire application")) for k, v in form_data.items(): + if k in skip_attrs: + continue if k == 'new_password' and v: user.password = get_crypt_password(v) user.api_key = generate_api_key(user.username) @@ -377,13 +381,21 @@ class UserModel(BaseModel): return True - def fill_perms(self, user): + def fill_perms(self, user, explicit=True, algo='higherwin'): """ Fills user permission attribute with permissions taken from database works for permissions given for repositories, and for permissions that are granted to groups :param user: user instance to fill his perms + :param explicit: In case there are permissions both for user and a group + that user is part of, explicit flag will defiine if user will + explicitly override permissions from group, if it's False it will + make decision based on the algo + :param algo: algorithm to decide what permission should be choose if + it's multiple defined, eg user in two different groups. It also + decides if explicit flag is turned off how to specify the permission + for case when user is in a group + have defined separate permission """ RK = 'repositories' GK = 'repositories_groups' @@ -392,6 +404,18 @@ class UserModel(BaseModel): user.permissions[GK] = {} user.permissions[GLOBAL] = set() + def _choose_perm(new_perm, cur_perm): + new_perm_val = PERM_WEIGHTS[new_perm] + cur_perm_val = PERM_WEIGHTS[cur_perm] + if algo == 'higherwin': + if new_perm_val > cur_perm_val: + return new_perm + return cur_perm + elif algo == 'lowerwin': + if new_perm_val < cur_perm_val: + return new_perm + return cur_perm + #====================================================================== # fetch default permissions #====================================================================== @@ -501,12 +525,14 @@ class UserModel(BaseModel): user.permissions[GLOBAL].add(perm.permission.permission_name) #====================================================================== - # !! REPO PERMISSIONS !! + # !! PERMISSIONS FOR REPOSITORIES !! #====================================================================== #====================================================================== # check if user is part of user groups for this repository and - # fill in (or NOT replace with higher `or 1` permissions + # fill in his permission from it. _choose_perm decides of which + # permission should be selected based on selected method #====================================================================== + # users group for repositories permissions user_repo_perms_from_users_groups = \ self.sa.query(UsersGroupRepoToPerm, Permission, Repository,)\ @@ -519,20 +545,23 @@ class UserModel(BaseModel): .filter(UsersGroupMember.user_id == uid)\ .all() + multiple_counter = collections.defaultdict(int) for perm in user_repo_perms_from_users_groups: r_k = perm.UsersGroupRepoToPerm.repository.repo_name + multiple_counter[r_k] += 1 p = perm.Permission.permission_name cur_perm = user.permissions[RK][r_k] - # overwrite permission only if it's greater than permission - # given from other sources - disabled with `or 1` now - if PERM_WEIGHTS[p] > PERM_WEIGHTS[cur_perm] or 1: # disable check - if perm.Repository.user_id == uid: - # set admin if owner - p = 'repository.admin' - user.permissions[RK][r_k] = p + if perm.Repository.user_id == uid: + # set admin if owner + p = 'repository.admin' + else: + if multiple_counter[r_k] > 1: + p = _choose_perm(p, cur_perm) + user.permissions[RK][r_k] = p - # user explicit permissions for repositories + # user explicit permissions for repositories, overrides any specified + # by the group permission user_repo_perms = \ self.sa.query(UserRepoToPerm, Permission, Repository)\ .join((Repository, UserRepoToPerm.repository_id == @@ -543,24 +572,52 @@ class UserModel(BaseModel): .all() for perm in user_repo_perms: + r_k = perm.UserRepoToPerm.repository.repo_name + cur_perm = user.permissions[RK][r_k] # set admin if owner - r_k = perm.UserRepoToPerm.repository.repo_name if perm.Repository.user_id == uid: p = 'repository.admin' else: p = perm.Permission.permission_name + if not explicit: + p = _choose_perm(p, cur_perm) user.permissions[RK][r_k] = p - # REPO GROUP - #================================================================== - # get access for this user for repos group and override defaults - #================================================================== + #====================================================================== + # !! PERMISSIONS FOR REPOSITORIES GROUPS !! + #====================================================================== + #====================================================================== + # check if user is part of user groups for this repository groups and + # fill in his permission from it. _choose_perm decides of which + # permission should be selected based on selected method + #====================================================================== + # users group for repo groups permissions + user_repo_group_perms_from_users_groups = \ + self.sa.query(UsersGroupRepoGroupToPerm, Permission, RepoGroup)\ + .join((RepoGroup, UsersGroupRepoGroupToPerm.group_id == RepoGroup.group_id))\ + .join((Permission, UsersGroupRepoGroupToPerm.permission_id + == Permission.permission_id))\ + .join((UsersGroupMember, UsersGroupRepoGroupToPerm.users_group_id + == UsersGroupMember.users_group_id))\ + .filter(UsersGroupMember.user_id == uid)\ + .all() - # user explicit permissions for repository + multiple_counter = collections.defaultdict(int) + for perm in user_repo_group_perms_from_users_groups: + g_k = perm.UsersGroupRepoGroupToPerm.group.group_name + multiple_counter[g_k] += 1 + p = perm.Permission.permission_name + cur_perm = user.permissions[GK][g_k] + if multiple_counter[g_k] > 1: + p = _choose_perm(p, cur_perm) + user.permissions[GK][g_k] = p + + # user explicit permissions for repository groups user_repo_groups_perms = \ self.sa.query(UserRepoGroupToPerm, Permission, RepoGroup)\ .join((RepoGroup, UserRepoGroupToPerm.group_id == RepoGroup.group_id))\ - .join((Permission, UserRepoGroupToPerm.permission_id == Permission.permission_id))\ + .join((Permission, UserRepoGroupToPerm.permission_id + == Permission.permission_id))\ .filter(UserRepoGroupToPerm.user_id == uid)\ .all() @@ -568,32 +625,9 @@ class UserModel(BaseModel): rg_k = perm.UserRepoGroupToPerm.group.group_name p = perm.Permission.permission_name cur_perm = user.permissions[GK][rg_k] - if PERM_WEIGHTS[p] > PERM_WEIGHTS[cur_perm] or 1: # disable check - user.permissions[GK][rg_k] = p - - # REPO GROUP + USER GROUP - #================================================================== - # check if user is part of user groups for this repo group and - # fill in (or replace with higher) permissions - #================================================================== - - # users group for repositories permissions - user_repo_group_perms_from_users_groups = \ - self.sa.query(UsersGroupRepoGroupToPerm, Permission, RepoGroup)\ - .join((RepoGroup, UsersGroupRepoGroupToPerm.group_id == RepoGroup.group_id))\ - .join((Permission, UsersGroupRepoGroupToPerm.permission_id == Permission.permission_id))\ - .join((UsersGroupMember, UsersGroupRepoGroupToPerm.users_group_id == UsersGroupMember.users_group_id))\ - .filter(UsersGroupMember.user_id == uid)\ - .all() - - for perm in user_repo_group_perms_from_users_groups: - g_k = perm.UsersGroupRepoGroupToPerm.group.group_name - p = perm.Permission.permission_name - cur_perm = user.permissions[GK][g_k] - # overwrite permission only if it's greater than permission - # given from other sources - if PERM_WEIGHTS[p] > PERM_WEIGHTS[cur_perm] or 1: # disable check - user.permissions[GK][g_k] = p + if not explicit: + p = _choose_perm(p, cur_perm) + user.permissions[GK][rg_k] = p return user diff --git a/rhodecode/model/validators.py b/rhodecode/model/validators.py --- a/rhodecode/model/validators.py +++ b/rhodecode/model/validators.py @@ -566,9 +566,18 @@ def ValidPerms(type_='repo'): def ValidSettings(): class _validator(formencode.validators.FancyValidator): def _to_python(self, value, state): - # settings form can't edit user - if 'user' in value: - del value['user'] + # settings form for users that are not admin + # can't edit certain parameters, it's extra backup if they mangle + # with forms + + forbidden_params = [ + 'user', 'repo_type', 'repo_enable_locking', + 'repo_enable_downloads', 'repo_enable_statistics' + ] + + for param in forbidden_params: + if param in value: + del value[param] return value def validate_python(self, value, state): diff --git a/rhodecode/public/css/codemirror.css b/rhodecode/public/css/codemirror.css --- a/rhodecode/public/css/codemirror.css +++ b/rhodecode/public/css/codemirror.css @@ -80,6 +80,7 @@ word-wrap: normal; line-height: inherit; color: inherit; + overflow: visible; } .CodeMirror-wrap pre { diff --git a/rhodecode/public/css/style.css b/rhodecode/public/css/style.css --- a/rhodecode/public/css/style.css +++ b/rhodecode/public/css/style.css @@ -61,32 +61,33 @@ a:hover { text-decoration: underline; } -h1,h2,h3,h4,h5,h6 { +h1,h2,h3,h4,h5,h6, +div.h1,div.h2,div.h3,div.h4,div.h5,div.h6 { color: #292929; font-weight: 700; } -h1 { +h1,div.h1 { font-size: 22px; } -h2 { +h2,div.h2 { font-size: 20px; } -h3 { +h3,div.h3 { font-size: 18px; } -h4 { +h4,div.h4 { font-size: 16px; } -h5 { +h5,div.h5 { font-size: 14px; } -h6 { +h6,div.h6 { font-size: 11px; } @@ -352,9 +353,9 @@ div:hover > a.permalink { z-index: auto !important; } -.header-pos-fix{ - margin-top: -44px; - padding-top: 44px; +.header-pos-fix, .anchor{ + margin-top: -46px; + padding-top: 46px; } #header #header-inner #home a { @@ -540,7 +541,7 @@ div:hover > a.permalink { #header #header-inner #quick li ul ul { right: 200px; - max-height: 275px; + max-height: 290px; overflow: auto; overflow-x: hidden; white-space: normal; @@ -625,6 +626,14 @@ div:hover > a.permalink { padding: 12px 9px 7px 24px; } +#header #header-inner #quick li ul li a.defaults,#header #header-inner #quick li ul li a.defaults:hover + { + background: #FFF url("../images/icons/wrench.png") no-repeat 4px 9px; + width: 167px; + margin: 0; + padding: 12px 9px 7px 24px; +} + #header #header-inner #quick li ul li a.settings,#header #header-inner #quick li ul li a.settings:hover { background: #FFF url("../images/icons/cog.png") no-repeat 4px 9px; @@ -685,6 +694,15 @@ div:hover > a.permalink { padding: 12px 9px 7px 24px; } +#header #header-inner #quick li ul li a.compare_request,#header #header-inner #quick li ul li a.compare_request:hover + { + background: #FFF url("../images/icons/arrow_inout.png") no-repeat 4px + 9px; + width: 167px; + margin: 0; + padding: 12px 9px 7px 24px; +} + #header #header-inner #quick li ul li a.search,#header #header-inner #quick li ul li a.search:hover { background: #FFF url("../images/icons/search_16.png") no-repeat 4px 9px; @@ -1143,7 +1161,9 @@ tbody .yui-dt-editable { cursor: pointer text-decoration: none; } -#content div.box h1,#content div.box h2,#content div.box h3,#content div.box h4,#content div.box h5,#content div.box h6 +#content div.box h1,#content div.box h2,#content div.box h3,#content div.box h4,#content div.box h5,#content div.box h6, +#content div.box div.h1,#content div.box div.h2,#content div.box div.h3,#content div.box div.h4,#content div.box div.h5,#content div.box div.h6 + { clear: both; overflow: hidden; @@ -1615,6 +1635,7 @@ div.form div.fields div.field div.button background: #eee; border-bottom: 1px solid #ddd; padding: 5px 0px 5px 5px; + text-align: left; } #content div.box table th.left { @@ -2306,6 +2327,15 @@ a.metatag[tag="license"]:hover { height: 30px; } +#journal .journal_user.deleted { + color: #747474; + font-size: 14px; + font-weight: normal; + height: 30px; + font-style: italic; +} + + #journal .journal_icon { clear: both; float: left; @@ -2494,6 +2524,42 @@ h3.files_location { font-size: 9px; padding: 2px 0px 2px 0px; } +/*new binary*/ +.cs_files .changes .bin1 { + background-color: #BBFFBB; + float: left; + text-align: center; + font-size: 9px; + padding: 2px 0px 2px 0px; +} + +/*deleted binary*/ +.cs_files .changes .bin2 { + background-color: #FF8888; + float: left; + text-align: center; + font-size: 9px; + padding: 2px 0px 2px 0px; +} + +/*mod binary*/ +.cs_files .changes .bin3 { + background-color: #DDDDDD; + float: left; + text-align: center; + font-size: 9px; + padding: 2px 0px 2px 0px; +} + +/*rename file*/ +.cs_files .changes .bin4 { + background-color: #6D99FF; + float: left; + text-align: center; + font-size: 9px; + padding: 2px 0px 2px 0px; +} + .cs_files .cs_added,.cs_files .cs_A { background: url("../images/icons/page_white_add.png") no-repeat scroll @@ -2528,7 +2594,7 @@ h3.files_location { #graph_nodes { float: left; - margin-right: -6px; + margin-right: 0px; margin-top: 0px; } @@ -2548,6 +2614,11 @@ h3.files_location { margin: 0px 0px 0px 3px; } +#graph_content #rev_range_clear { + float: left; + margin: 0px 0px 0px 3px; +} + #graph_content .container { border-bottom: 1px solid #DDD; height: 56px; @@ -2596,15 +2667,14 @@ h3.files_location { #graph_content .container .mid .message a:hover{ text-decoration: none; } -#content #graph_content .message .revision-link, -#changeset_content .container .message .revision-link + +.revision-link { color:#3F6F9F; font-weight: bold !important; } -#content #graph_content .message .issue-tracker-link, -#changeset_content .container .message .issue-tracker-link{ +.issue-tracker-link{ color:#3F6F9F; font-weight: bold !important; } @@ -2984,23 +3054,44 @@ table.code-browser .submodule-dir { z-index: 2; } -.yui-tt { - visibility: hidden; +#tip-box { position: absolute; - color: #666; + background-color: #FFF; border: 2px solid #003367; font: 100% sans-serif; width: auto; opacity: 1px; padding: 8px; + white-space: pre-wrap; -webkit-border-radius: 8px 8px 8px 8px; -khtml-border-radius: 8px 8px 8px 8px; -moz-border-radius: 8px 8px 8px 8px; border-radius: 8px 8px 8px 8px; box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); -} + -moz-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); + -webkit-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); +} + +.hl-tip-box { + visibility: hidden; + position: absolute; + color: #666; + background-color: #FFF; + border: 2px solid #003367; + font: 100% sans-serif; + width: auto; + opacity: 1px; + padding: 8px; + white-space: pre-wrap; + -webkit-border-radius: 8px 8px 8px 8px; + -khtml-border-radius: 8px 8px 8px 8px; + -moz-border-radius: 8px 8px 8px 8px; + border-radius: 8px 8px 8px 8px; + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); +} + .mentions-container{ width: 90% !important; @@ -3107,6 +3198,26 @@ table.code-browser .submodule-dir { margin-top: 2px; } +.locking_locked{ + background: #FFF url("../images/icons/block_16.png") no-repeat scroll 3px; + height: 16px; + width: 20px; + cursor: pointer; + display: block; + float: right; + margin-top: 2px; +} + +.locking_unlocked{ + background: #FFF url("../images/icons/accept.png") no-repeat scroll 3px; + height: 16px; + width: 20px; + cursor: pointer; + display: block; + float: right; + margin-top: 2px; +} + .currently_following { padding-left: 10px; padding-bottom: 5px; @@ -3896,12 +4007,13 @@ div#legend_container table td,div#legend .group_members_wrap{ - + min-height: 85px; + padding-left: 20px; } .group_members .group_member{ height: 30px; - padding:0px 0px 0px 10px; + padding:0px 0px 0px 0px; } .reviewers_member{ @@ -4016,6 +4128,14 @@ div.readme .readme_box pre { border-radius: 3px; } +div.readme .readme_box table { + display: table; + border-collapse: separate; + border-spacing: 2px; + border-color: gray; + width: auto !important; +} + /** RST STYLE **/ @@ -4545,6 +4665,15 @@ div.diffblock .code-header{ padding:10px 0 10px 0; height: 14px; } + +div.diffblock .code-header.banner{ + border-bottom: 1px solid #CCCCCC; + background: #EEEEEE; + height: 14px; + margin: 0px 95px 0px 95px; + padding: 3px 3px 11px 3px; +} + div.diffblock .code-header.cv{ height: 34px; } @@ -4566,6 +4695,32 @@ div.diffblock .code-header div{ font-weight: bold; font-size: 14px; } + +div.diffblock .parents { + float: left; + height: 26px; + width:100px; + font-size: 10px; + font-weight: 400; + vertical-align: middle; + padding: 0px 2px 2px 2px; + background-color:#eeeeee; + border-bottom: 1px solid #CCCCCC; +} + +div.diffblock .children { + float: right; + height: 26px; + width:100px; + font-size: 10px; + font-weight: 400; + vertical-align: middle; + text-align: right; + padding: 0px 2px 2px 2px; + background-color:#eeeeee; + border-bottom: 1px solid #CCCCCC; +} + div.diffblock .code-body{ background: #FFFFFF; } diff --git a/rhodecode/public/js/codemirror.js b/rhodecode/public/js/codemirror.js --- a/rhodecode/public/js/codemirror.js +++ b/rhodecode/public/js/codemirror.js @@ -75,7 +75,7 @@ window.CodeMirror = (function() { // Selection-related flags. shiftSelecting obviously tracks // whether the user is holding shift. var shiftSelecting, lastClick, lastDoubleClick, lastScrollTop = 0, draggingText, - overwrite = false, suppressEdits = false; + overwrite = false, suppressEdits = false, pasteIncoming = false; // Variables used by startOperation/endOperation to track what // happened during the operation. var updateInput, userSelChange, changes, textChanged, selectionChanged, @@ -128,7 +128,7 @@ window.CodeMirror = (function() { connect(scroller, "drop", operation(onDrop)); } connect(scroller, "paste", function(){focusInput(); fastPoll();}); - connect(input, "paste", fastPoll); + connect(input, "paste", function(){pasteIncoming = true; fastPoll();}); connect(input, "cut", operation(function(){ if (!options.readOnly) replaceSelection(""); })); @@ -167,6 +167,7 @@ window.CodeMirror = (function() { else if (option == "lineWrapping" && oldVal != value) operation(wrappingChanged)(); else if (option == "tabSize") updateDisplay(true); else if (option == "keyMap") keyMapChanged(); + else if (option == "tabindex") input.tabIndex = value; if (option == "lineNumbers" || option == "gutter" || option == "firstLineNumber" || option == "theme" || option == "lineNumberFormatter") { gutterChanged(); @@ -229,6 +230,7 @@ window.CodeMirror = (function() { var off = eltOffset(lineSpace); return coordsChar(coords.x - off.left, coords.y - off.top); }, + defaultTextHeight: function() { return textHeight(); }, markText: operation(markText), setBookmark: setBookmark, findMarksAt: findMarksAt, @@ -343,6 +345,11 @@ window.CodeMirror = (function() { return {x: scroller.scrollLeft, y: scrollbar.scrollTop, height: scrollbar.scrollHeight, width: scroller.scrollWidth}; }, + scrollIntoView: function(pos) { + var coords = localCoords(pos ? clipPos(pos) : sel.inverted ? sel.from : sel.to); + scrollIntoView(coords.x, coords.y, coords.x, coords.yBot); + }, + setSize: function(width, height) { function interpret(val) { val = String(val); @@ -392,7 +399,7 @@ window.CodeMirror = (function() { } function onScrollBar(e) { - if (scrollbar.scrollTop != lastScrollTop) { + if (Math.abs(scrollbar.scrollTop - lastScrollTop) > 1) { lastScrollTop = scroller.scrollTop = scrollbar.scrollTop; updateDisplay([]); } @@ -401,7 +408,7 @@ window.CodeMirror = (function() { function onScrollMain(e) { if (options.fixedGutter && gutter.style.left != scroller.scrollLeft + "px") gutter.style.left = scroller.scrollLeft + "px"; - if (scroller.scrollTop != lastScrollTop) { + if (Math.abs(scroller.scrollTop - lastScrollTop) > 1) { lastScrollTop = scroller.scrollTop; if (scrollbar.scrollTop != lastScrollTop) scrollbar.scrollTop = lastScrollTop; @@ -634,7 +641,7 @@ window.CodeMirror = (function() { if (handled) { e_preventDefault(e); restartBlink(); - if (ie) { e.oldKeyCode = e.keyCode; e.keyCode = 0; } + if (ie_lt9) { e.oldKeyCode = e.keyCode; e.keyCode = 0; } } return handled; } @@ -954,12 +961,13 @@ window.CodeMirror = (function() { while (same < l && prevInput[same] == text[same]) ++same; if (same < prevInput.length) sel.from = {line: sel.from.line, ch: sel.from.ch - (prevInput.length - same)}; - else if (overwrite && posEq(sel.from, sel.to)) + else if (overwrite && posEq(sel.from, sel.to) && !pasteIncoming) sel.to = {line: sel.to.line, ch: Math.min(getLine(sel.to.line).text.length, sel.to.ch + (text.length - same))}; replaceSelection(text.slice(same), "end"); if (text.length > 1000) { input.value = prevInput = ""; } else prevInput = text; if (!nestedOperation) endOperation(); + pasteIncoming = false; return true; } function resetInput(user) { @@ -1416,7 +1424,7 @@ window.CodeMirror = (function() { var startChar = line.charAt(start); var check = isWordChar(startChar) ? isWordChar : /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);} : - function(ch) {return !/\s/.test(ch) && !isWordChar(ch);}; + function(ch) {return !/\s/.test(ch) && isWordChar(ch);}; while (start > 0 && check(line.charAt(start - 1))) --start; while (end < line.length && check(line.charAt(end))) ++end; } @@ -1460,6 +1468,7 @@ window.CodeMirror = (function() { if (indentString != curSpaceString) replaceRange(indentString, {line: n, ch: 0}, {line: n, ch: curSpaceString.length}); + line.stateAfter = null; } function loadMode() { @@ -1505,18 +1514,17 @@ window.CodeMirror = (function() { function TextMarker(type, style) { this.lines = []; this.type = type; if (style) this.style = style; } TextMarker.prototype.clear = operation(function() { - var min = Infinity, max = -Infinity; + var min, max; for (var i = 0; i < this.lines.length; ++i) { var line = this.lines[i]; - var span = getMarkedSpanFor(line.markedSpans, this, true); - if (span.from != null || span.to != null) { - var lineN = lineNo(line); - min = Math.min(min, lineN); max = Math.max(max, lineN); - } + var span = getMarkedSpanFor(line.markedSpans, this); + if (span.from != null) min = lineNo(line); + if (span.to != null) max = lineNo(line); + line.markedSpans = removeMarkedSpan(line.markedSpans, span); } - if (min != Infinity) - changes.push({from: min, to: max + 1}); + if (min != null) changes.push({from: min, to: max + 1}); this.lines.length = 0; + this.explicitlyCleared = true; }); TextMarker.prototype.find = function() { var from, to; @@ -1543,7 +1551,7 @@ window.CodeMirror = (function() { var span = {from: curLine == from.line ? from.ch : null, to: curLine == to.line ? to.ch : null, marker: marker}; - (line.markedSpans || (line.markedSpans = [])).push(span); + line.markedSpans = (line.markedSpans || []).concat([span]); marker.lines.push(line); ++curLine; }); @@ -1554,8 +1562,9 @@ window.CodeMirror = (function() { function setBookmark(pos) { pos = clipPos(pos); var marker = new TextMarker("bookmark"), line = getLine(pos.line); + history.addChange(pos.line, 1, [newHL(line.text, line.markedSpans)], true); var span = {from: pos.ch, to: pos.ch, marker: marker}; - (line.markedSpans || (line.markedSpans = [])).push(span); + line.markedSpans = (line.markedSpans || []).concat([span]); marker.lines.push(line); return marker; } @@ -1644,8 +1653,6 @@ window.CodeMirror = (function() { function measureLine(line, ch) { if (ch == 0) return {top: 0, left: 0}; - var wbr = options.lineWrapping && ch < line.text.length && - spanAffectsWrapping.test(line.text.slice(ch - 1, ch + 1)); var pre = lineContent(line, ch); removeChildrenAndAdd(measure, pre); var anchor = pre.anchor; @@ -1978,6 +1985,7 @@ window.CodeMirror = (function() { if (extensions.propertyIsEnumerable(ext) && !instance.propertyIsEnumerable(ext)) instance[ext] = extensions[ext]; + for (var i = 0; i < initHooks.length; ++i) initHooks[i](instance); return instance; } // (end of function CodeMirror) @@ -2075,6 +2083,9 @@ window.CodeMirror = (function() { extensions[name] = func; }; + var initHooks = []; + CodeMirror.defineInitHook = function(f) {initHooks.push(f);}; + var modeExtensions = CodeMirror.modeExtensions = {}; CodeMirror.extendMode = function(mode, properties) { var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); @@ -2167,7 +2178,7 @@ window.CodeMirror = (function() { keyMap.emacsy = { "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", - "Ctrl-V": "goPageUp", "Shift-Ctrl-V": "goPageDown", "Ctrl-D": "delCharRight", "Ctrl-H": "delCharLeft", + "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharRight", "Ctrl-H": "delCharLeft", "Alt-D": "delWordRight", "Alt-Backspace": "delWordLeft", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars" }; @@ -2204,6 +2215,7 @@ window.CodeMirror = (function() { var name = keyNames[e_prop(event, "keyCode")]; return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; } + CodeMirror.isModifierKey = isModifierKey; CodeMirror.fromTextArea = function(textarea, options) { if (!options) options = {}; @@ -2224,15 +2236,13 @@ window.CodeMirror = (function() { if (textarea.form) { // Deplorable hack to make the submit method do the right thing. var rmSubmit = connect(textarea.form, "submit", save, true); - if (typeof textarea.form.submit == "function") { - var realSubmit = textarea.form.submit; - textarea.form.submit = function wrappedSubmit() { - save(); - textarea.form.submit = realSubmit; - textarea.form.submit(); - textarea.form.submit = wrappedSubmit; - }; - } + var realSubmit = textarea.form.submit; + textarea.form.submit = function wrappedSubmit() { + save(); + textarea.form.submit = realSubmit; + textarea.form.submit(); + textarea.form.submit = wrappedSubmit; + }; } textarea.style.display = "none"; @@ -2353,16 +2363,20 @@ window.CodeMirror = (function() { this.from = from; this.to = to; this.marker = marker; } - function getMarkedSpanFor(spans, marker, del) { + function getMarkedSpanFor(spans, marker) { if (spans) for (var i = 0; i < spans.length; ++i) { var span = spans[i]; - if (span.marker == marker) { - if (del) spans.splice(i, 1); - return span; - } + if (span.marker == marker) return span; } } + function removeMarkedSpan(spans, span) { + var r; + for (var i = 0; i < spans.length; ++i) + if (spans[i] != span) (r || (r = [])).push(spans[i]); + return r; + } + function markedSpansBefore(old, startCh, endCh) { if (old) for (var i = 0, nw; i < old.length; ++i) { var span = old[i], marker = span.marker; @@ -2446,7 +2460,15 @@ window.CodeMirror = (function() { // hl stands for history-line, a data structure that can be either a // string (line without markers) or a {text, markedSpans} object. function hlText(val) { return typeof val == "string" ? val : val.text; } - function hlSpans(val) { return typeof val == "string" ? null : val.markedSpans; } + function hlSpans(val) { + if (typeof val == "string") return null; + var spans = val.markedSpans, out = null; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); } + else if (out) out.push(spans[i]); + } + return !out ? spans : out.length ? out : null; + } function newHL(text, spans) { return spans ? {text: text, markedSpans: spans} : text; } function detachMarkedSpans(line) { @@ -2582,13 +2604,17 @@ window.CodeMirror = (function() { span = function(html, text, style) { var l = text.length; if (wrapAt >= outPos && wrapAt < outPos + l) { - if (wrapAt > outPos) { - span_(html, text.slice(0, wrapAt - outPos), style); + var cut = wrapAt - outPos; + if (cut) { + span_(html, text.slice(0, cut), style); // See comment at the definition of spanAffectsWrapping - if (compensateForWrapping) html.appendChild(elt("wbr")); + if (compensateForWrapping) { + var view = text.slice(cut - 1, cut + 1); + if (spanAffectsWrapping.test(view)) html.appendChild(elt("wbr")); + else if (!ie_lt8 && /\w\w/.test(view)) html.appendChild(document.createTextNode("\u200d")); + } } html.appendChild(anchor); - var cut = wrapAt - outPos; span_(anchor, opera ? text.slice(cut, cut + 1) : text.slice(cut), style); if (opera) span_(html, text.slice(cut + 1), style); wrapAt--; @@ -2872,7 +2898,7 @@ window.CodeMirror = (function() { var time = +new Date, cur = lst(this.done), last = cur && lst(cur); var dtime = time - this.time; - if (this.compound && cur && !this.closed) { + if (cur && !this.closed && this.compound) { cur.push({start: start, added: added, old: old}); } else if (dtime > 400 || !last || this.closed || last.start > start + old.length || last.start + last.added < start) { @@ -3078,8 +3104,10 @@ window.CodeMirror = (function() { if (collection[i] == elt) return i; return -1; } + var nonASCIISingleCaseWordChar = /[\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc]/; function isWordChar(ch) { - return /\w/.test(ch) || ch.toUpperCase() != ch.toLowerCase(); + return /\w/.test(ch) || ch > "\x80" && + (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); } // See if "".split is the broken IE version, if so, provide an @@ -3135,7 +3163,7 @@ window.CodeMirror = (function() { for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i; })(); - CodeMirror.version = "2.34"; + CodeMirror.version = "2.36"; return CodeMirror; })(); diff --git a/rhodecode/public/js/graph.js b/rhodecode/public/js/graph.js --- a/rhodecode/public/js/graph.js +++ b/rhodecode/public/js/graph.js @@ -32,18 +32,8 @@ function BranchRenderer() { this.ctx.strokeStyle = 'rgb(0, 0, 0)'; this.ctx.fillStyle = 'rgb(0, 0, 0)'; this.cur = [0, 0]; - this.max_column = 1; - this.line_width = 2.5; - this.dot_radius = 5.5; - this.bg = [0, 4]; - this.cell = [2, 0]; - this.revlink = ''; - - this.scale = function(height) { - this.box_size = Math.floor(height/1.2); - this.cell_height = this.box_size; - this.bg_height = height; - } + this.line_width = 2.0; + this.dot_radius = 3.5; this.setColor = function(color, bg, fg) { color %= colors.length; @@ -58,14 +48,18 @@ function BranchRenderer() { this.ctx.fillStyle = s; } - this.render = function(data,pad) { + this.render = function(data,canvasWidth,lineCount) { var idx = 1; var rela = document.getElementById('graph'); - var pad = pad; - var scale = 22; + + if (lineCount == 0) + lineCount = 1; + + var edge_pad = this.dot_radius + 2; + var box_size = Math.min(18, Math.floor((canvasWidth - edge_pad*2)/(lineCount))); + var base_x = canvasWidth - edge_pad; for (var i in data) { - this.scale(scale); var row = document.getElementById("chg_"+idx); if (row == null) @@ -73,11 +67,7 @@ function BranchRenderer() { var next = document.getElementById("chg_"+(idx+1)); var extra = 0; - this.cell[1] += row.clientWidth; - this.bg[1] += this.bg_height; - cur = data[i]; - nodeid = cur[0]; node = cur[1]; in_l = cur[2]; @@ -91,44 +81,34 @@ function BranchRenderer() { end = line[1]; color = line[2]; - if (start > this.max_column) { - this.max_column = start; - } - - if (end > this.max_column) { - this.max_column = end; - } - this.setColor(color, 0.0, 0.65); - x = pad-((this.cell[0] + this.box_size * start - 1) + this.bg_height-2); + x = base_x - box_size * start; this.ctx.lineWidth=this.line_width; this.ctx.beginPath(); this.ctx.moveTo(x, rowY); - if (start == end) { - x = pad-((1 + this.box_size * end) + this.bg_height-2); this.ctx.lineTo(x,nextY+extra,3); } else { - var x2 = pad-((1 + this.box_size * end) + this.bg_height-2); + var x2 = base_x - box_size * end; var ymid = (rowY+nextY) / 2; this.ctx.bezierCurveTo (x,ymid,x2,ymid,x2,nextY); } this.ctx.stroke(); } - column = node[0] - color = node[1] + column = node[0]; + color = node[1]; radius = this.dot_radius; - x = pad-(Math.round(this.cell[0] * scale/2 * column + radius) + 15 - (column*4)); + x = base_x - box_size * column; this.ctx.beginPath(); this.setColor(color, 0.25, 0.75); diff --git a/rhodecode/public/js/native.history.js b/rhodecode/public/js/native.history.js --- a/rhodecode/public/js/native.history.js +++ b/rhodecode/public/js/native.history.js @@ -1,1 +1,1974 @@ -(function(a,b){"use strict";var c=a.History=a.History||{};if(typeof c.Adapter!="undefined")throw new Error("History.js Adapter has already been loaded...");c.Adapter={handlers:{},_uid:1,uid:function(a){return a._uid||(a._uid=c.Adapter._uid++)},bind:function(a,b,d){var e=c.Adapter.uid(a);c.Adapter.handlers[e]=c.Adapter.handlers[e]||{},c.Adapter.handlers[e][b]=c.Adapter.handlers[e][b]||[],c.Adapter.handlers[e][b].push(d),a["on"+b]=function(a,b){return function(d){c.Adapter.trigger(a,b,d)}}(a,b)},trigger:function(a,b,d){d=d||{};var e=c.Adapter.uid(a),f,g;c.Adapter.handlers[e]=c.Adapter.handlers[e]||{},c.Adapter.handlers[e][b]=c.Adapter.handlers[e][b]||[];for(f=0,g=c.Adapter.handlers[e][b].length;f")&&c[0]);return a>4?a:!1}();return a},m.isInternetExplorer=function(){var a=m.isInternetExplorer.cached=typeof m.isInternetExplorer.cached!="undefined"?m.isInternetExplorer.cached:Boolean(m.getInternetExplorerMajorVersion());return a},m.emulated={pushState:!Boolean(a.history&&a.history.pushState&&a.history.replaceState&&!/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i.test(e.userAgent)&&!/AppleWebKit\/5([0-2]|3[0-2])/i.test(e.userAgent)),hashChange:Boolean(!("onhashchange"in a||"onhashchange"in d)||m.isInternetExplorer()&&m.getInternetExplorerMajorVersion()<8)},m.enabled=!m.emulated.pushState,m.bugs={setHash:Boolean(!m.emulated.pushState&&e.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(e.userAgent)),safariPoll:Boolean(!m.emulated.pushState&&e.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(e.userAgent)),ieDoubleCheck:Boolean(m.isInternetExplorer()&&m.getInternetExplorerMajorVersion()<8),hashEscape:Boolean(m.isInternetExplorer()&&m.getInternetExplorerMajorVersion()<7)},m.isEmptyObject=function(a){for(var b in a)return!1;return!0},m.cloneObject=function(a){var b,c;return a?(b=k.stringify(a),c=k.parse(b)):c={},c},m.getRootUrl=function(){var a=d.location.protocol+"//"+(d.location.hostname||d.location.host);if(d.location.port||!1)a+=":"+d.location.port;return a+="/",a},m.getBaseHref=function(){var a=d.getElementsByTagName("base"),b=null,c="";return a.length===1&&(b=a[0],c=b.href.replace(/[^\/]+$/,"")),c=c.replace(/\/+$/,""),c&&(c+="/"),c},m.getBaseUrl=function(){var a=m.getBaseHref()||m.getBasePageUrl()||m.getRootUrl();return a},m.getPageUrl=function(){var a=m.getState(!1,!1),b=(a||{}).url||d.location.href,c;return c=b.replace(/\/+$/,"").replace(/[^\/]+$/,function(a,b,c){return/\./.test(a)?a:a+"/"}),c},m.getBasePageUrl=function(){var a=d.location.href.replace(/[#\?].*/,"").replace(/[^\/]+$/,function(a,b,c){return/[^\/]$/.test(a)?"":a}).replace(/\/+$/,"")+"/";return a},m.getFullUrl=function(a,b){var c=a,d=a.substring(0,1);return b=typeof b=="undefined"?!0:b,/[a-z]+\:\/\//.test(a)||(d==="/"?c=m.getRootUrl()+a.replace(/^\/+/,""):d==="#"?c=m.getPageUrl().replace(/#.*/,"")+a:d==="?"?c=m.getPageUrl().replace(/[\?#].*/,"")+a:b?c=m.getBaseUrl()+a.replace(/^(\.\/)+/,""):c=m.getBasePageUrl()+a.replace(/^(\.\/)+/,"")),c.replace(/\#$/,"")},m.getShortUrl=function(a){var b=a,c=m.getBaseUrl(),d=m.getRootUrl();return m.emulated.pushState&&(b=b.replace(c,"")),b=b.replace(d,"/"),m.isTraditionalAnchor(b)&&(b="./"+b),b=b.replace(/^(\.\/)+/g,"./").replace(/\#$/,""),b},m.store={},m.idToState=m.idToState||{},m.stateToId=m.stateToId||{},m.urlToId=m.urlToId||{},m.storedStates=m.storedStates||[],m.savedStates=m.savedStates||[],m.normalizeStore=function(){m.store.idToState=m.store.idToState||{},m.store.urlToId=m.store.urlToId||{},m.store.stateToId=m.store.stateToId||{}},m.getState=function(a,b){typeof a=="undefined"&&(a=!0),typeof b=="undefined"&&(b=!0);var c=m.getLastSavedState();return!c&&b&&(c=m.createStateObject()),a&&(c=m.cloneObject(c),c.url=c.cleanUrl||c.url),c},m.getIdByState=function(a){var b=m.extractId(a.url),c;if(!b){c=m.getStateString(a);if(typeof m.stateToId[c]!="undefined")b=m.stateToId[c];else if(typeof m.store.stateToId[c]!="undefined")b=m.store.stateToId[c];else{for(;;){b=(new Date).getTime()+String(Math.random()).replace(/\D/g,"");if(typeof m.idToState[b]=="undefined"&&typeof m.store.idToState[b]=="undefined")break}m.stateToId[c]=b,m.idToState[b]=a}}return b},m.normalizeState=function(a){var b,c;if(!a||typeof a!="object")a={};if(typeof a.normalized!="undefined")return a;if(!a.data||typeof a.data!="object")a.data={};b={},b.normalized=!0,b.title=a.title||"",b.url=m.getFullUrl(m.unescapeString(a.url||d.location.href)),b.hash=m.getShortUrl(b.url),b.data=m.cloneObject(a.data),b.id=m.getIdByState(b),b.cleanUrl=b.url.replace(/\??\&_suid.*/,""),b.url=b.cleanUrl,c=!m.isEmptyObject(b.data);if(b.title||c)b.hash=m.getShortUrl(b.url).replace(/\??\&_suid.*/,""),/\?/.test(b.hash)||(b.hash+="?"),b.hash+="&_suid="+b.id;return b.hashedUrl=m.getFullUrl(b.hash),(m.emulated.pushState||m.bugs.safariPoll)&&m.hasUrlDuplicate(b)&&(b.url=b.hashedUrl),b},m.createStateObject=function(a,b,c){var d={data:a,title:b,url:c};return d=m.normalizeState(d),d},m.getStateById=function(a){a=String(a);var c=m.idToState[a]||m.store.idToState[a]||b;return c},m.getStateString=function(a){var b,c,d;return b=m.normalizeState(a),c={data:b.data,title:a.title,url:a.url},d=k.stringify(c),d},m.getStateId=function(a){var b,c;return b=m.normalizeState(a),c=b.id,c},m.getHashByState=function(a){var b,c;return b=m.normalizeState(a),c=b.hash,c},m.extractId=function(a){var b,c,d;return c=/(.*)\&_suid=([0-9]+)$/.exec(a),d=c?c[1]||a:a,b=c?String(c[2]||""):"",b||!1},m.isTraditionalAnchor=function(a){var b=!/[\/\?\.]/.test(a);return b},m.extractState=function(a,b){var c=null,d,e;return b=b||!1,d=m.extractId(a),d&&(c=m.getStateById(d)),c||(e=m.getFullUrl(a),d=m.getIdByUrl(e)||!1,d&&(c=m.getStateById(d)),!c&&b&&!m.isTraditionalAnchor(a)&&(c=m.createStateObject(null,null,e))),c},m.getIdByUrl=function(a){var c=m.urlToId[a]||m.store.urlToId[a]||b;return c},m.getLastSavedState=function(){return m.savedStates[m.savedStates.length-1]||b},m.getLastStoredState=function(){return m.storedStates[m.storedStates.length-1]||b},m.hasUrlDuplicate=function(a){var b=!1,c;return c=m.extractState(a.url),b=c&&c.id!==a.id,b},m.storeState=function(a){return m.urlToId[a.url]=a.id,m.storedStates.push(m.cloneObject(a)),a},m.isLastSavedState=function(a){var b=!1,c,d,e;return m.savedStates.length&&(c=a.id,d=m.getLastSavedState(),e=d.id,b=c===e),b},m.saveState=function(a){return m.isLastSavedState(a)?!1:(m.savedStates.push(m.cloneObject(a)),!0)},m.getStateByIndex=function(a){var b=null;return typeof a=="undefined"?b=m.savedStates[m.savedStates.length-1]:a<0?b=m.savedStates[m.savedStates.length+a]:b=m.savedStates[a],b},m.getHash=function(){var a=m.unescapeHash(d.location.hash);return a},m.unescapeString=function(b){var c=b,d;for(;;){d=a.decodeURI(c);if(d===c)break;c=d}return c},m.unescapeHash=function(a){var b=m.normalizeHash(a);return b=m.unescapeString(b),b},m.normalizeHash=function(a){var b=a.replace(/[^#]*#/,"").replace(/#.*/,"");return b},m.setHash=function(a,b){var c,e,f;return b!==!1&&m.busy()?(m.pushQueue({scope:m,callback:m.setHash,args:arguments,queue:b}),!1):(c=m.escapeHash(a),m.busy(!0),e=m.extractState(a,!0),e&&!m.emulated.pushState?m.pushState(e.data,e.title,e.url,!1):d.location.hash!==c&&(m.bugs.setHash?(f=m.getPageUrl(),m.pushState(null,null,f+"#"+c,!1)):d.location.hash=c),m)},m.escapeHash=function(b){var c=m.normalizeHash(b);return c=a.escape(c),m.bugs.hashEscape||(c=c.replace(/\%21/g,"!").replace(/\%26/g,"&").replace(/\%3D/g,"=").replace(/\%3F/g,"?")),c},m.getHashByUrl=function(a){var b=String(a).replace(/([^#]*)#?([^#]*)#?(.*)/,"$2");return b=m.unescapeHash(b),b},m.setTitle=function(a){var b=a.title,c;b||(c=m.getStateByIndex(0),c&&c.url===a.url&&(b=c.title||m.options.initialTitle));try{d.getElementsByTagName("title")[0].innerHTML=b.replace("<","<").replace(">",">").replace(" & "," & ")}catch(e){}return d.title=b,m},m.queues=[],m.busy=function(a){typeof a!="undefined"?m.busy.flag=a:typeof m.busy.flag=="undefined"&&(m.busy.flag=!1);if(!m.busy.flag){h(m.busy.timeout);var b=function(){var a,c,d;if(m.busy.flag)return;for(a=m.queues.length-1;a>=0;--a){c=m.queues[a];if(c.length===0)continue;d=c.shift(),m.fireQueueItem(d),m.busy.timeout=g(b,m.options.busyDelay)}};m.busy.timeout=g(b,m.options.busyDelay)}return m.busy.flag},m.busy.flag=!1,m.fireQueueItem=function(a){return a.callback.apply(a.scope||m,a.args||[])},m.pushQueue=function(a){return m.queues[a.queue||0]=m.queues[a.queue||0]||[],m.queues[a.queue||0].push(a),m},m.queue=function(a,b){return typeof a=="function"&&(a={callback:a}),typeof b!="undefined"&&(a.queue=b),m.busy()?m.pushQueue(a):m.fireQueueItem(a),m},m.clearQueue=function(){return m.busy.flag=!1,m.queues=[],m},m.stateChanged=!1,m.doubleChecker=!1,m.doubleCheckComplete=function(){return m.stateChanged=!0,m.doubleCheckClear(),m},m.doubleCheckClear=function(){return m.doubleChecker&&(h(m.doubleChecker),m.doubleChecker=!1),m},m.doubleCheck=function(a){return m.stateChanged=!1,m.doubleCheckClear(),m.bugs.ieDoubleCheck&&(m.doubleChecker=g(function(){return m.doubleCheckClear(),m.stateChanged||a(),!0},m.options.doubleCheckInterval)),m},m.safariStatePoll=function(){var b=m.extractState(d.location.href),c;if(!m.isLastSavedState(b))c=b;else return;return c||(c=m.createStateObject()),m.Adapter.trigger(a,"popstate"),m},m.back=function(a){return a!==!1&&m.busy()?(m.pushQueue({scope:m,callback:m.back,args:arguments,queue:a}),!1):(m.busy(!0),m.doubleCheck(function(){m.back(!1)}),n.go(-1),!0)},m.forward=function(a){return a!==!1&&m.busy()?(m.pushQueue({scope:m,callback:m.forward,args:arguments,queue:a}),!1):(m.busy(!0),m.doubleCheck(function(){m.forward(!1)}),n.go(1),!0)},m.go=function(a,b){var c;if(a>0)for(c=1;c<=a;++c)m.forward(b);else{if(!(a<0))throw new Error("History.go: History.go requires a positive or negative integer passed.");for(c=-1;c>=a;--c)m.back(b)}return m};if(m.emulated.pushState){var o=function(){};m.pushState=m.pushState||o,m.replaceState=m.replaceState||o}else m.onPopState=function(b,c){var e=!1,f=!1,g,h;return m.doubleCheckComplete(),g=m.getHash(),g?(h=m.extractState(g||d.location.href,!0),h?m.replaceState(h.data,h.title,h.url,!1):(m.Adapter.trigger(a,"anchorchange"),m.busy(!1)),m.expectedStateId=!1,!1):(e=m.Adapter.extractEventData("state",b,c)||!1,e?f=m.getStateById(e):m.expectedStateId?f=m.getStateById(m.expectedStateId):f=m.extractState(d.location.href),f||(f=m.createStateObject(null,null,d.location.href)),m.expectedStateId=!1,m.isLastSavedState(f)?(m.busy(!1),!1):(m.storeState(f),m.saveState(f),m.setTitle(f),m.Adapter.trigger(a,"statechange"),m.busy(!1),!0))},m.Adapter.bind(a,"popstate",m.onPopState),m.pushState=function(b,c,d,e){if(m.getHashByUrl(d)&&m.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(e!==!1&&m.busy())return m.pushQueue({scope:m,callback:m.pushState,args:arguments,queue:e}),!1;m.busy(!0);var f=m.createStateObject(b,c,d);return m.isLastSavedState(f)?m.busy(!1):(m.storeState(f),m.expectedStateId=f.id,n.pushState(f.id,f.title,f.url),m.Adapter.trigger(a,"popstate")),!0},m.replaceState=function(b,c,d,e){if(m.getHashByUrl(d)&&m.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(e!==!1&&m.busy())return m.pushQueue({scope:m,callback:m.replaceState,args:arguments,queue:e}),!1;m.busy(!0);var f=m.createStateObject(b,c,d);return m.isLastSavedState(f)?m.busy(!1):(m.storeState(f),m.expectedStateId=f.id,n.replaceState(f.id,f.title,f.url),m.Adapter.trigger(a,"popstate")),!0};if(f){try{m.store=k.parse(f.getItem("History.store"))||{}}catch(p){m.store={}}m.normalizeStore()}else m.store={},m.normalizeStore();m.Adapter.bind(a,"beforeunload",m.clearAllIntervals),m.Adapter.bind(a,"unload",m.clearAllIntervals),m.saveState(m.storeState(m.extractState(d.location.href,!0))),f&&(m.onUnload=function(){var a,b;try{a=k.parse(f.getItem("History.store"))||{}}catch(c){a={}}a.idToState=a.idToState||{},a.urlToId=a.urlToId||{},a.stateToId=a.stateToId||{};for(b in m.idToState){if(!m.idToState.hasOwnProperty(b))continue;a.idToState[b]=m.idToState[b]}for(b in m.urlToId){if(!m.urlToId.hasOwnProperty(b))continue;a.urlToId[b]=m.urlToId[b]}for(b in m.stateToId){if(!m.stateToId.hasOwnProperty(b))continue;a.stateToId[b]=m.stateToId[b]}m.store=a,m.normalizeStore(),f.setItem("History.store",k.stringify(a))},m.intervalList.push(i(m.onUnload,m.options.storeInterval)),m.Adapter.bind(a,"beforeunload",m.onUnload),m.Adapter.bind(a,"unload",m.onUnload));if(!m.emulated.pushState){m.bugs.safariPoll&&m.intervalList.push(i(m.safariStatePoll,m.options.safariPollInterval));if(e.vendor==="Apple Computer, Inc."||(e.appCodeName||"")==="Mozilla")m.Adapter.bind(a,"hashchange",function(){m.Adapter.trigger(a,"popstate")}),m.getHash()&&m.Adapter.onDomLoad(function(){m.Adapter.trigger(a,"hashchange")})}},m.init()}(window) \ No newline at end of file +/** + * History.js Native Adapter + * @author Benjamin Arthur Lupton + * @copyright 2010-2011 Benjamin Arthur Lupton + * @license New BSD License + */ + +// Closure +(function(window,undefined){ + "use strict"; + + // Localise Globals + var History = window.History = window.History||{}; + + // Check Existence + if ( typeof History.Adapter !== 'undefined' ) { + throw new Error('History.js Adapter has already been loaded...'); + } + + // Add the Adapter + History.Adapter = { + /** + * History.Adapter.handlers[uid][eventName] = Array + */ + handlers: {}, + + /** + * History.Adapter._uid + * The current element unique identifier + */ + _uid: 1, + + /** + * History.Adapter.uid(element) + * @param {Element} element + * @return {String} uid + */ + uid: function(element){ + return element._uid || (element._uid = History.Adapter._uid++); + }, + + /** + * History.Adapter.bind(el,event,callback) + * @param {Element} element + * @param {String} eventName - custom and standard events + * @param {Function} callback + * @return + */ + bind: function(element,eventName,callback){ + // Prepare + var uid = History.Adapter.uid(element); + + // Apply Listener + History.Adapter.handlers[uid] = History.Adapter.handlers[uid] || {}; + History.Adapter.handlers[uid][eventName] = History.Adapter.handlers[uid][eventName] || []; + History.Adapter.handlers[uid][eventName].push(callback); + + // Bind Global Listener + element['on'+eventName] = (function(element,eventName){ + return function(event){ + History.Adapter.trigger(element,eventName,event); + }; + })(element,eventName); + }, + + /** + * History.Adapter.trigger(el,event) + * @param {Element} element + * @param {String} eventName - custom and standard events + * @param {Object} event - a object of event data + * @return + */ + trigger: function(element,eventName,event){ + // Prepare + event = event || {}; + var uid = History.Adapter.uid(element), + i,n; + + // Apply Listener + History.Adapter.handlers[uid] = History.Adapter.handlers[uid] || {}; + History.Adapter.handlers[uid][eventName] = History.Adapter.handlers[uid][eventName] || []; + + // Fire Listeners + for ( i=0,n=History.Adapter.handlers[uid][eventName].length; i + * @copyright 2010-2011 Benjamin Arthur Lupton + * @license New BSD License + */ + +(function(window,undefined){ + "use strict"; + + // -------------------------------------------------------------------------- + // Initialise + + // Localise Globals + var + console = window.console||undefined, // Prevent a JSLint complain + document = window.document, // Make sure we are using the correct document + navigator = window.navigator, // Make sure we are using the correct navigator + amplify = window.amplify||false, // Amplify.js + setTimeout = window.setTimeout, + clearTimeout = window.clearTimeout, + setInterval = window.setInterval, + clearInterval = window.clearInterval, + JSON = window.JSON, + History = window.History = window.History||{}, // Public History Object + history = window.history; // Old History Object + + // MooTools Compatibility + JSON.stringify = JSON.stringify||JSON.encode; + JSON.parse = JSON.parse||JSON.decode; + + // Check Existence + if ( typeof History.init !== 'undefined' ) { + throw new Error('History.js Core has already been loaded...'); + } + + // Initialise History + History.init = function(){ + // Check Load Status of Adapter + if ( typeof History.Adapter === 'undefined' ) { + return false; + } + + // Check Load Status of Core + if ( typeof History.initCore !== 'undefined' ) { + History.initCore(); + } + + // Check Load Status of HTML4 Support + if ( typeof History.initHtml4 !== 'undefined' ) { + History.initHtml4(); + } + + // Return true + return true; + }; + + // -------------------------------------------------------------------------- + // Initialise Core + + // Initialise Core + History.initCore = function(){ + // Initialise + if ( typeof History.initCore.initialized !== 'undefined' ) { + // Already Loaded + return false; + } + else { + History.initCore.initialized = true; + } + + // ---------------------------------------------------------------------- + // Options + + /** + * History.options + * Configurable options + */ + History.options = History.options||{}; + + /** + * History.options.hashChangeInterval + * How long should the interval be before hashchange checks + */ + History.options.hashChangeInterval = History.options.hashChangeInterval || 100; + + /** + * History.options.safariPollInterval + * How long should the interval be before safari poll checks + */ + History.options.safariPollInterval = History.options.safariPollInterval || 500; + + /** + * History.options.doubleCheckInterval + * How long should the interval be before we perform a double check + */ + History.options.doubleCheckInterval = History.options.doubleCheckInterval || 500; + + /** + * History.options.storeInterval + * How long should we wait between store calls + */ + History.options.storeInterval = History.options.storeInterval || 1000; + + /** + * History.options.busyDelay + * How long should we wait between busy events + */ + History.options.busyDelay = History.options.busyDelay || 250; + + /** + * History.options.debug + * If true will enable debug messages to be logged + */ + History.options.debug = History.options.debug || false; + + /** + * History.options.initialTitle + * What is the title of the initial state + */ + History.options.initialTitle = History.options.initialTitle || document.title; + + + // ---------------------------------------------------------------------- + // Interval record + + /** + * History.intervalList + * List of intervals set, to be cleared when document is unloaded. + */ + History.intervalList = []; + + /** + * History.clearAllIntervals + * Clears all setInterval instances. + */ + History.clearAllIntervals = function(){ + var i, il = History.intervalList; + if (typeof il !== "undefined" && il !== null) { + for (i = 0; i < il.length; i++) { + clearInterval(il[i]); + } + History.intervalList = null; + } + }; + History.Adapter.bind(window,"beforeunload",History.clearAllIntervals); + History.Adapter.bind(window,"unload",History.clearAllIntervals); + + + // ---------------------------------------------------------------------- + // Debug + + /** + * History.debug(message,...) + * Logs the passed arguments if debug enabled + */ + History.debug = function(){ + if ( (History.options.debug||false) ) { + History.log.apply(History,arguments); + } + }; + + /** + * History.log(message,...) + * Logs the passed arguments + */ + History.log = function(){ + // Prepare + var + consoleExists = !(typeof console === 'undefined' || typeof console.log === 'undefined' || typeof console.log.apply === 'undefined'), + textarea = document.getElementById('log'), + message, + i,n + ; + + // Write to Console + if ( consoleExists ) { + var args = Array.prototype.slice.call(arguments); + message = args.shift(); + if ( typeof console.debug !== 'undefined' ) { + console.debug.apply(console,[message,args]); + } + else { + console.log.apply(console,[message,args]); + } + } + else { + message = ("\n"+arguments[0]+"\n"); + } + + // Write to log + for ( i=1,n=arguments.length; i + * @author James Padolsey + */ + History.getInternetExplorerMajorVersion = function(){ + var result = History.getInternetExplorerMajorVersion.cached = + (typeof History.getInternetExplorerMajorVersion.cached !== 'undefined') + ? History.getInternetExplorerMajorVersion.cached + : (function(){ + var v = 3, + div = document.createElement('div'), + all = div.getElementsByTagName('i'); + while ( (div.innerHTML = '') && all[0] ) {} + return (v > 4) ? v : false; + })() + ; + return result; + }; + + /** + * History.isInternetExplorer() + * Are we using Internet Explorer? + * @return {boolean} + * @license Public Domain + * @author Benjamin Arthur Lupton + */ + History.isInternetExplorer = function(){ + var result = + History.isInternetExplorer.cached = + (typeof History.isInternetExplorer.cached !== 'undefined') + ? History.isInternetExplorer.cached + : Boolean(History.getInternetExplorerMajorVersion()) + ; + return result; + }; + + /** + * History.emulated + * Which features require emulating? + */ + History.emulated = { + pushState: !Boolean( + window.history && window.history.pushState && window.history.replaceState + && !( + (/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i).test(navigator.userAgent) /* disable for versions of iOS before version 4.3 (8F190) */ + || (/AppleWebKit\/5([0-2]|3[0-2])/i).test(navigator.userAgent) /* disable for the mercury iOS browser, or at least older versions of the webkit engine */ + ) + ), + hashChange: Boolean( + !(('onhashchange' in window) || ('onhashchange' in document)) + || + (History.isInternetExplorer() && History.getInternetExplorerMajorVersion() < 8) + ) + }; + + /** + * History.enabled + * Is History enabled? + */ + History.enabled = !History.emulated.pushState; + + /** + * History.bugs + * Which bugs are present + */ + History.bugs = { + /** + * Safari 5 and Safari iOS 4 fail to return to the correct state once a hash is replaced by a `replaceState` call + * https://bugs.webkit.org/show_bug.cgi?id=56249 + */ + setHash: Boolean(!History.emulated.pushState && navigator.vendor === 'Apple Computer, Inc.' && /AppleWebKit\/5([0-2]|3[0-3])/.test(navigator.userAgent)), + + /** + * Safari 5 and Safari iOS 4 sometimes fail to apply the state change under busy conditions + * https://bugs.webkit.org/show_bug.cgi?id=42940 + */ + safariPoll: Boolean(!History.emulated.pushState && navigator.vendor === 'Apple Computer, Inc.' && /AppleWebKit\/5([0-2]|3[0-3])/.test(navigator.userAgent)), + + /** + * MSIE 6 and 7 sometimes do not apply a hash even it was told to (requiring a second call to the apply function) + */ + ieDoubleCheck: Boolean(History.isInternetExplorer() && History.getInternetExplorerMajorVersion() < 8), + + /** + * MSIE 6 requires the entire hash to be encoded for the hashes to trigger the onHashChange event + */ + hashEscape: Boolean(History.isInternetExplorer() && History.getInternetExplorerMajorVersion() < 7) + }; + + /** + * History.isEmptyObject(obj) + * Checks to see if the Object is Empty + * @param {Object} obj + * @return {boolean} + */ + History.isEmptyObject = function(obj) { + for ( var name in obj ) { + return false; + } + return true; + }; + + /** + * History.cloneObject(obj) + * Clones a object + * @param {Object} obj + * @return {Object} + */ + History.cloneObject = function(obj) { + var hash,newObj; + if ( obj ) { + hash = JSON.stringify(obj); + newObj = JSON.parse(hash); + } + else { + newObj = {}; + } + return newObj; + }; + + // ---------------------------------------------------------------------- + // URL Helpers + + /** + * History.getRootUrl() + * Turns "http://mysite.com/dir/page.html?asd" into "http://mysite.com" + * @return {String} rootUrl + */ + History.getRootUrl = function(){ + // Create + var rootUrl = document.location.protocol+'//'+(document.location.hostname||document.location.host); + if ( document.location.port||false ) { + rootUrl += ':'+document.location.port; + } + rootUrl += '/'; + + // Return + return rootUrl; + }; + + /** + * History.getBaseHref() + * Fetches the `href` attribute of the `` element if it exists + * @return {String} baseHref + */ + History.getBaseHref = function(){ + // Create + var + baseElements = document.getElementsByTagName('base'), + baseElement = null, + baseHref = ''; + + // Test for Base Element + if ( baseElements.length === 1 ) { + // Prepare for Base Element + baseElement = baseElements[0]; + baseHref = baseElement.href.replace(/[^\/]+$/,''); + } + + // Adjust trailing slash + baseHref = baseHref.replace(/\/+$/,''); + if ( baseHref ) baseHref += '/'; + + // Return + return baseHref; + }; + + /** + * History.getBaseUrl() + * Fetches the baseHref or basePageUrl or rootUrl (whichever one exists first) + * @return {String} baseUrl + */ + History.getBaseUrl = function(){ + // Create + var baseUrl = History.getBaseHref()||History.getBasePageUrl()||History.getRootUrl(); + + // Return + return baseUrl; + }; + + /** + * History.getPageUrl() + * Fetches the URL of the current page + * @return {String} pageUrl + */ + History.getPageUrl = function(){ + // Fetch + var + State = History.getState(false,false), + stateUrl = (State||{}).url||document.URL||document.location.href; + + // Create + var pageUrl = stateUrl.replace(/\/+$/,'').replace(/[^\/]+$/,function(part,index,string){ + return (/\./).test(part) ? part : part+'/'; + }); + + // Return + return pageUrl; + }; + + /** + * History.getBasePageUrl() + * Fetches the Url of the directory of the current page + * @return {String} basePageUrl + */ + History.getBasePageUrl = function(){ + // Create + var basePageUrl = (document.URL||document.location.href).replace(/[#\?].*/,'').replace(/[^\/]+$/,function(part,index,string){ + return (/[^\/]$/).test(part) ? '' : part; + }).replace(/\/+$/,'')+'/'; + + // Return + return basePageUrl; + }; + + /** + * History.getFullUrl(url) + * Ensures that we have an absolute URL and not a relative URL + * @param {string} url + * @param {Boolean} allowBaseHref + * @return {string} fullUrl + */ + History.getFullUrl = function(url,allowBaseHref){ + // Prepare + var fullUrl = url, firstChar = url.substring(0,1); + allowBaseHref = (typeof allowBaseHref === 'undefined') ? true : allowBaseHref; + + // Check + if ( /[a-z]+\:\/\//.test(url) ) { + // Full URL + } + else if ( firstChar === '/' ) { + // Root URL + fullUrl = History.getRootUrl()+url.replace(/^\/+/,''); + } + else if ( firstChar === '#' ) { + // Anchor URL + fullUrl = History.getPageUrl().replace(/#.*/,'')+url; + } + else if ( firstChar === '?' ) { + // Query URL + fullUrl = History.getPageUrl().replace(/[\?#].*/,'')+url; + } + else { + // Relative URL + if ( allowBaseHref ) { + fullUrl = History.getBaseUrl()+url.replace(/^(\.\/)+/,''); + } else { + fullUrl = History.getBasePageUrl()+url.replace(/^(\.\/)+/,''); + } + // We have an if condition above as we do not want hashes + // which are relative to the baseHref in our URLs + // as if the baseHref changes, then all our bookmarks + // would now point to different locations + // whereas the basePageUrl will always stay the same + } + + // Return + return fullUrl.replace(/\#$/,''); + }; + + /** + * History.getShortUrl(url) + * Ensures that we have a relative URL and not a absolute URL + * @param {string} url + * @return {string} url + */ + History.getShortUrl = function(url){ + // Prepare + var shortUrl = url, baseUrl = History.getBaseUrl(), rootUrl = History.getRootUrl(); + + // Trim baseUrl + if ( History.emulated.pushState ) { + // We are in a if statement as when pushState is not emulated + // The actual url these short urls are relative to can change + // So within the same session, we the url may end up somewhere different + shortUrl = shortUrl.replace(baseUrl,''); + } + + // Trim rootUrl + shortUrl = shortUrl.replace(rootUrl,'/'); + + // Ensure we can still detect it as a state + if ( History.isTraditionalAnchor(shortUrl) ) { + shortUrl = './'+shortUrl; + } + + // Clean It + shortUrl = shortUrl.replace(/^(\.\/)+/g,'./').replace(/\#$/,''); + + // Return + return shortUrl; + }; + + // ---------------------------------------------------------------------- + // State Storage + + /** + * History.store + * The store for all session specific data + */ + History.store = amplify ? (amplify.store('History.store')||{}) : {}; + History.store.idToState = History.store.idToState||{}; + History.store.urlToId = History.store.urlToId||{}; + History.store.stateToId = History.store.stateToId||{}; + + /** + * History.idToState + * 1-1: State ID to State Object + */ + History.idToState = History.idToState||{}; + + /** + * History.stateToId + * 1-1: State String to State ID + */ + History.stateToId = History.stateToId||{}; + + /** + * History.urlToId + * 1-1: State URL to State ID + */ + History.urlToId = History.urlToId||{}; + + /** + * History.storedStates + * Store the states in an array + */ + History.storedStates = History.storedStates||[]; + + /** + * History.savedStates + * Saved the states in an array + */ + History.savedStates = History.savedStates||[]; + + /** + * History.getState() + * Get an object containing the data, title and url of the current state + * @param {Boolean} friendly + * @param {Boolean} create + * @return {Object} State + */ + History.getState = function(friendly,create){ + // Prepare + if ( typeof friendly === 'undefined' ) { friendly = true; } + if ( typeof create === 'undefined' ) { create = true; } + + // Fetch + var State = History.getLastSavedState(); + + // Create + if ( !State && create ) { + State = History.createStateObject(); + } + + // Adjust + if ( friendly ) { + State = History.cloneObject(State); + State.url = State.cleanUrl||State.url; + } + + // Return + return State; + }; + + /** + * History.getIdByState(State) + * Gets a ID for a State + * @param {State} newState + * @return {String} id + */ + History.getIdByState = function(newState){ + + // Fetch ID + var id = History.extractId(newState.url); + if ( !id ) { + // Find ID via State String + var str = History.getStateString(newState); + if ( typeof History.stateToId[str] !== 'undefined' ) { + id = History.stateToId[str]; + } + else if ( typeof History.store.stateToId[str] !== 'undefined' ) { + id = History.store.stateToId[str]; + } + else { + // Generate a new ID + while ( true ) { + id = String(Math.floor(Math.random()*1000)); + if ( typeof History.idToState[id] === 'undefined' && typeof History.store.idToState[id] === 'undefined' ) { + break; + } + } + + // Apply the new State to the ID + History.stateToId[str] = id; + History.idToState[id] = newState; + } + } + + // Return ID + return id; + }; + + /** + * History.normalizeState(State) + * Expands a State Object + * @param {object} State + * @return {object} + */ + History.normalizeState = function(oldState){ + // Prepare + if ( !oldState || (typeof oldState !== 'object') ) { + oldState = {}; + } + + // Check + if ( typeof oldState.normalized !== 'undefined' ) { + return oldState; + } + + // Adjust + if ( !oldState.data || (typeof oldState.data !== 'object') ) { + oldState.data = {}; + } + + // ---------------------------------------------------------------------- + + // Create + var newState = {}; + newState.normalized = true; + newState.title = oldState.title||''; + newState.url = History.getFullUrl(oldState.url?decodeURIComponent(oldState.url):(document.URL||document.location.href)); + newState.hash = History.getShortUrl(newState.url); + newState.data = History.cloneObject(oldState.data); + + // Fetch ID + newState.id = History.getIdByState(newState); + + // ---------------------------------------------------------------------- + + // Clean the URL + newState.cleanUrl = newState.url.replace(/\??\&_suid.*/,''); + newState.url = newState.cleanUrl; + + // Check to see if we have more than just a url + var dataNotEmpty = !History.isEmptyObject(newState.data); + + // Apply + if ( newState.title || dataNotEmpty ) { + // Add ID to Hash + newState.hash = History.getShortUrl(newState.url).replace(/\??\&_suid.*/,''); + if ( !/\?/.test(newState.hash) ) { + newState.hash += '?'; + } + newState.hash += '&_suid='+newState.id; + } + + // Create the Hashed URL + newState.hashedUrl = History.getFullUrl(newState.hash); + + // ---------------------------------------------------------------------- + + // Update the URL if we have a duplicate + if ( (History.emulated.pushState || History.bugs.safariPoll) && History.hasUrlDuplicate(newState) ) { + newState.url = newState.hashedUrl; + } + + // ---------------------------------------------------------------------- + + // Return + return newState; + }; + + /** + * History.createStateObject(data,title,url) + * Creates a object based on the data, title and url state params + * @param {object} data + * @param {string} title + * @param {string} url + * @return {object} + */ + History.createStateObject = function(data,title,url){ + // Hashify + var State = { + 'data': data, + 'title': title, + 'url': encodeURIComponent(url||"") + }; + + // Expand the State + State = History.normalizeState(State); + + // Return object + return State; + }; + + /** + * History.getStateById(id) + * Get a state by it's UID + * @param {String} id + */ + History.getStateById = function(id){ + // Prepare + id = String(id); + + // Retrieve + var State = History.idToState[id] || History.store.idToState[id] || undefined; + + // Return State + return State; + }; + + /** + * Get a State's String + * @param {State} passedState + */ + History.getStateString = function(passedState){ + // Prepare + var State = History.normalizeState(passedState); + + // Clean + var cleanedState = { + data: State.data, + title: passedState.title, + url: passedState.url + }; + + // Fetch + var str = JSON.stringify(cleanedState); + + // Return + return str; + }; + + /** + * Get a State's ID + * @param {State} passedState + * @return {String} id + */ + History.getStateId = function(passedState){ + // Prepare + var State = History.normalizeState(passedState); + + // Fetch + var id = State.id; + + // Return + return id; + }; + + /** + * History.getHashByState(State) + * Creates a Hash for the State Object + * @param {State} passedState + * @return {String} hash + */ + History.getHashByState = function(passedState){ + // Prepare + var hash, State = History.normalizeState(passedState); + + // Fetch + hash = State.hash; + + // Return + return hash; + }; + + /** + * History.extractId(url_or_hash) + * Get a State ID by it's URL or Hash + * @param {string} url_or_hash + * @return {string} id + */ + History.extractId = function ( url_or_hash ) { + // Prepare + var id; + + // Extract + var parts,url; + parts = /(.*)\&_suid=([0-9]+)$/.exec(url_or_hash); + url = parts ? (parts[1]||url_or_hash) : url_or_hash; + id = parts ? String(parts[2]||'') : ''; + + // Return + return id||false; + }; + + /** + * History.isTraditionalAnchor + * Checks to see if the url is a traditional anchor or not + * @param {String} url_or_hash + * @return {Boolean} + */ + History.isTraditionalAnchor = function(url_or_hash){ + // Check + var isTraditional = !(/[\/\?\.]/.test(url_or_hash)); + + // Return + return isTraditional; + }; + + /** + * History.extractState + * Get a State by it's URL or Hash + * @param {String} url_or_hash + * @return {State|null} + */ + History.extractState = function(url_or_hash,create){ + // Prepare + var State = null; + create = create||false; + + // Fetch SUID + var id = History.extractId(url_or_hash); + if ( id ) { + State = History.getStateById(id); + } + + // Fetch SUID returned no State + if ( !State ) { + // Fetch URL + var url = History.getFullUrl(url_or_hash); + + // Check URL + id = History.getIdByUrl(url)||false; + if ( id ) { + State = History.getStateById(id); + } + + // Create State + if ( !State && create && !History.isTraditionalAnchor(url_or_hash) ) { + State = History.createStateObject(null,null,url); + } + } + + // Return + return State; + }; + + /** + * History.getIdByUrl() + * Get a State ID by a State URL + */ + History.getIdByUrl = function(url){ + // Fetch + var id = History.urlToId[url] || History.store.urlToId[url] || undefined; + + // Return + return id; + }; + + /** + * History.getLastSavedState() + * Get an object containing the data, title and url of the current state + * @return {Object} State + */ + History.getLastSavedState = function(){ + return History.savedStates[History.savedStates.length-1]||undefined; + }; + + /** + * History.getLastStoredState() + * Get an object containing the data, title and url of the current state + * @return {Object} State + */ + History.getLastStoredState = function(){ + return History.storedStates[History.storedStates.length-1]||undefined; + }; + + /** + * History.hasUrlDuplicate + * Checks if a Url will have a url conflict + * @param {Object} newState + * @return {Boolean} hasDuplicate + */ + History.hasUrlDuplicate = function(newState) { + // Prepare + var hasDuplicate = false; + + // Fetch + var oldState = History.extractState(newState.url); + + // Check + hasDuplicate = oldState && oldState.id !== newState.id; + + // Return + return hasDuplicate; + }; + + /** + * History.storeState + * Store a State + * @param {Object} newState + * @return {Object} newState + */ + History.storeState = function(newState){ + // Store the State + History.urlToId[newState.url] = newState.id; + + // Push the State + History.storedStates.push(History.cloneObject(newState)); + + // Return newState + return newState; + }; + + /** + * History.isLastSavedState(newState) + * Tests to see if the state is the last state + * @param {Object} newState + * @return {boolean} isLast + */ + History.isLastSavedState = function(newState){ + // Prepare + var isLast = false; + + // Check + if ( History.savedStates.length ) { + var + newId = newState.id, + oldState = History.getLastSavedState(), + oldId = oldState.id; + + // Check + isLast = (newId === oldId); + } + + // Return + return isLast; + }; + + /** + * History.saveState + * Push a State + * @param {Object} newState + * @return {boolean} changed + */ + History.saveState = function(newState){ + // Check Hash + if ( History.isLastSavedState(newState) ) { + return false; + } + + // Push the State + History.savedStates.push(History.cloneObject(newState)); + + // Return true + return true; + }; + + /** + * History.getStateByIndex() + * Gets a state by the index + * @param {integer} index + * @return {Object} + */ + History.getStateByIndex = function(index){ + // Prepare + var State = null; + + // Handle + if ( typeof index === 'undefined' ) { + // Get the last inserted + State = History.savedStates[History.savedStates.length-1]; + } + else if ( index < 0 ) { + // Get from the end + State = History.savedStates[History.savedStates.length+index]; + } + else { + // Get from the beginning + State = History.savedStates[index]; + } + + // Return State + return State; + }; + + // ---------------------------------------------------------------------- + // Hash Helpers + + + /** + * History.escapeString() + * Escape a string + * @param {String} str + * @return {string} + */ + History.escapeString = function(str){ + return encodeURI(url).replace(/%25/g, "%", "g"); + }; + + /** + * History.getHash() + * @param {Location=} location + * Gets the current document hash + * Note: unlike location.hash, this is guaranteed to return the escaped hash in all browsers + * @return {string} + */ + History.getHash = function(location){ + if ( !location ) location = document.location; + var href = location.href.replace( /^[^#]*/, "" ); + return href.substr(1); + }; + + /** + * History.unescapeHash() + * normalize and Unescape a Hash + * @param {String} hash + * @return {string} + */ + History.unescapeHash = function(hash){ + // Prepare + var result = History.normalizeHash(hash); + + // Unescape hash + result = decodeURIComponent(result); + + // Return result + return result; + }; + + /** + * History.normalizeHash() + * normalize a hash across browsers + * @return {string} + */ + History.normalizeHash = function(hash){ + var result = hash.replace(/[^#]*#/,'').replace(/#.*/, ''); + + // Return result + return result; + }; + + /** + * History.setHash(hash) + * Sets the document hash + * @param {string} hash + * @return {History} + */ + History.setHash = function(hash,queue){ + // Handle Queueing + if ( queue !== false && History.busy() ) { + // Wait + Push to Queue + //History.debug('History.setHash: we must wait', arguments); + History.pushQueue({ + scope: History, + callback: History.setHash, + args: arguments, + queue: queue + }); + return false; + } + + // Log + //History.debug('History.setHash: called',hash); + + // Make Busy + Continue + History.busy(true); + + // Check if hash is a state + var State = History.extractState(hash,true); + if ( State && !History.emulated.pushState ) { + // Hash is a state so skip the setHash + //History.debug('History.setHash: Hash is a state so skipping the hash set with a direct pushState call',arguments); + + // PushState + History.pushState(State.data,State.title,State.url,false); + } + else if ( History.getHash() !== hash ) { + // Hash is a proper hash, so apply it + + // Handle browser bugs + if ( History.bugs.setHash ) { + // Fix Safari Bug https://bugs.webkit.org/show_bug.cgi?id=56249 + + // Fetch the base page + var pageUrl = History.getPageUrl(); + + // Safari hash apply + History.pushState(null,null,pageUrl+'#'+hash,false); + } + else { + // Normal hash apply + document.location.hash = hash; + } + } + + // Chain + return History; + }; + + /** + * History.escape() + * normalize and Escape a Hash + * @return {string} + */ + History.escapeHash = function(hash){ + var result = History.normalizeHash(hash); + + // Escape hash + result = window.encodeURIComponent(result); + + // IE6 Escape Bug + if ( !History.bugs.hashEscape ) { + // Restore common parts + result = result + .replace(/\%21/g,'!') + .replace(/\%26/g,'&') + .replace(/\%3D/g,'=') + .replace(/\%3F/g,'?'); + } + + // Return result + return result; + }; + + /** + * History.getHashByUrl(url) + * Extracts the Hash from a URL + * @param {string} url + * @return {string} url + */ + History.getHashByUrl = function(url){ + // Extract the hash + var hash = String(url) + .replace(/([^#]*)#?([^#]*)#?(.*)/, '$2') + ; + + // Unescape hash + hash = History.unescapeHash(hash); + + // Return hash + return hash; + }; + + /** + * History.setTitle(title) + * Applies the title to the document + * @param {State} newState + * @return {Boolean} + */ + History.setTitle = function(newState){ + // Prepare + var title = newState.title; + + // Initial + if ( !title ) { + var firstState = History.getStateByIndex(0); + if ( firstState && firstState.url === newState.url ) { + title = firstState.title||History.options.initialTitle; + } + } + + // Apply + try { + document.getElementsByTagName('title')[0].innerHTML = title.replace('<','<').replace('>','>').replace(' & ',' & '); + } + catch ( Exception ) { } + document.title = title; + + // Chain + return History; + }; + + // ---------------------------------------------------------------------- + // Queueing + + /** + * History.queues + * The list of queues to use + * First In, First Out + */ + History.queues = []; + + /** + * History.busy(value) + * @param {boolean} value [optional] + * @return {boolean} busy + */ + History.busy = function(value){ + // Apply + if ( typeof value !== 'undefined' ) { + //History.debug('History.busy: changing ['+(History.busy.flag||false)+'] to ['+(value||false)+']', History.queues.length); + History.busy.flag = value; + } + // Default + else if ( typeof History.busy.flag === 'undefined' ) { + History.busy.flag = false; + } + + // Queue + if ( !History.busy.flag ) { + // Execute the next item in the queue + clearTimeout(History.busy.timeout); + var fireNext = function(){ + if ( History.busy.flag ) return; + for ( var i=History.queues.length-1; i >= 0; --i ) { + var queue = History.queues[i]; + if ( queue.length === 0 ) continue; + var item = queue.shift(); + History.fireQueueItem(item); + History.busy.timeout = setTimeout(fireNext,History.options.busyDelay); + } + }; + History.busy.timeout = setTimeout(fireNext,History.options.busyDelay); + } + + // Return + return History.busy.flag; + }; + + /** + * History.fireQueueItem(item) + * Fire a Queue Item + * @param {Object} item + * @return {Mixed} result + */ + History.fireQueueItem = function(item){ + return item.callback.apply(item.scope||History,item.args||[]); + }; + + /** + * History.pushQueue(callback,args) + * Add an item to the queue + * @param {Object} item [scope,callback,args,queue] + */ + History.pushQueue = function(item){ + // Prepare the queue + History.queues[item.queue||0] = History.queues[item.queue||0]||[]; + + // Add to the queue + History.queues[item.queue||0].push(item); + + // Chain + return History; + }; + + /** + * History.queue (item,queue), (func,queue), (func), (item) + * Either firs the item now if not busy, or adds it to the queue + */ + History.queue = function(item,queue){ + // Prepare + if ( typeof item === 'function' ) { + item = { + callback: item + }; + } + if ( typeof queue !== 'undefined' ) { + item.queue = queue; + } + + // Handle + if ( History.busy() ) { + History.pushQueue(item); + } else { + History.fireQueueItem(item); + } + + // Chain + return History; + }; + + /** + * History.clearQueue() + * Clears the Queue + */ + History.clearQueue = function(){ + History.busy.flag = false; + History.queues = []; + return History; + }; + + + // ---------------------------------------------------------------------- + // IE Bug Fix + + /** + * History.stateChanged + * States whether or not the state has changed since the last double check was initialised + */ + History.stateChanged = false; + + /** + * History.doubleChecker + * Contains the timeout used for the double checks + */ + History.doubleChecker = false; + + /** + * History.doubleCheckComplete() + * Complete a double check + * @return {History} + */ + History.doubleCheckComplete = function(){ + // Update + History.stateChanged = true; + + // Clear + History.doubleCheckClear(); + + // Chain + return History; + }; + + /** + * History.doubleCheckClear() + * Clear a double check + * @return {History} + */ + History.doubleCheckClear = function(){ + // Clear + if ( History.doubleChecker ) { + clearTimeout(History.doubleChecker); + History.doubleChecker = false; + } + + // Chain + return History; + }; + + /** + * History.doubleCheck() + * Create a double check + * @return {History} + */ + History.doubleCheck = function(tryAgain){ + // Reset + History.stateChanged = false; + History.doubleCheckClear(); + + // Fix IE6,IE7 bug where calling history.back or history.forward does not actually change the hash (whereas doing it manually does) + // Fix Safari 5 bug where sometimes the state does not change: https://bugs.webkit.org/show_bug.cgi?id=42940 + if ( History.bugs.ieDoubleCheck ) { + // Apply Check + History.doubleChecker = setTimeout( + function(){ + History.doubleCheckClear(); + if ( !History.stateChanged ) { + //History.debug('History.doubleCheck: State has not yet changed, trying again', arguments); + // Re-Attempt + tryAgain(); + } + return true; + }, + History.options.doubleCheckInterval + ); + } + + // Chain + return History; + }; + + // ---------------------------------------------------------------------- + // Safari Bug Fix + + /** + * History.safariStatePoll() + * Poll the current state + * @return {History} + */ + History.safariStatePoll = function(){ + // Poll the URL + + // Get the Last State which has the new URL + var + urlState = History.extractState(document.URL||document.location.href), + newState; + + // Check for a difference + if ( !History.isLastSavedState(urlState) ) { + newState = urlState; + } + else { + return; + } + + // Check if we have a state with that url + // If not create it + if ( !newState ) { + //History.debug('History.safariStatePoll: new'); + newState = History.createStateObject(); + } + + // Apply the New State + //History.debug('History.safariStatePoll: trigger'); + History.Adapter.trigger(window,'popstate'); + + // Chain + return History; + }; + + // ---------------------------------------------------------------------- + // State Aliases + + /** + * History.back(queue) + * Send the browser history back one item + * @param {Integer} queue [optional] + */ + History.back = function(queue){ + //History.debug('History.back: called', arguments); + + // Handle Queueing + if ( queue !== false && History.busy() ) { + // Wait + Push to Queue + //History.debug('History.back: we must wait', arguments); + History.pushQueue({ + scope: History, + callback: History.back, + args: arguments, + queue: queue + }); + return false; + } + + // Make Busy + Continue + History.busy(true); + + // Fix certain browser bugs that prevent the state from changing + History.doubleCheck(function(){ + History.back(false); + }); + + // Go back + history.go(-1); + + // End back closure + return true; + }; + + /** + * History.forward(queue) + * Send the browser history forward one item + * @param {Integer} queue [optional] + */ + History.forward = function(queue){ + //History.debug('History.forward: called', arguments); + + // Handle Queueing + if ( queue !== false && History.busy() ) { + // Wait + Push to Queue + //History.debug('History.forward: we must wait', arguments); + History.pushQueue({ + scope: History, + callback: History.forward, + args: arguments, + queue: queue + }); + return false; + } + + // Make Busy + Continue + History.busy(true); + + // Fix certain browser bugs that prevent the state from changing + History.doubleCheck(function(){ + History.forward(false); + }); + + // Go forward + history.go(1); + + // End forward closure + return true; + }; + + /** + * History.go(index,queue) + * Send the browser history back or forward index times + * @param {Integer} queue [optional] + */ + History.go = function(index,queue){ + //History.debug('History.go: called', arguments); + + // Prepare + var i; + + // Handle + if ( index > 0 ) { + // Forward + for ( i=1; i<=index; ++i ) { + History.forward(queue); + } + } + else if ( index < 0 ) { + // Backward + for ( i=-1; i>=index; --i ) { + History.back(queue); + } + } + else { + throw new Error('History.go: History.go requires a positive or negative integer passed.'); + } + + // Chain + return History; + }; + + + // ---------------------------------------------------------------------- + // Initialise + + /** + * Create the initial State + */ + History.saveState(History.storeState(History.extractState(document.URL||document.location.href,true))); + + /** + * Bind for Saving Store + */ + if ( amplify ) { + History.onUnload = function(){ + // Prepare + var + currentStore = amplify.store('History.store')||{}, + item; + + // Ensure + currentStore.idToState = currentStore.idToState || {}; + currentStore.urlToId = currentStore.urlToId || {}; + currentStore.stateToId = currentStore.stateToId || {}; + + // Sync + for ( item in History.idToState ) { + if ( !History.idToState.hasOwnProperty(item) ) { + continue; + } + currentStore.idToState[item] = History.idToState[item]; + } + for ( item in History.urlToId ) { + if ( !History.urlToId.hasOwnProperty(item) ) { + continue; + } + currentStore.urlToId[item] = History.urlToId[item]; + } + for ( item in History.stateToId ) { + if ( !History.stateToId.hasOwnProperty(item) ) { + continue; + } + currentStore.stateToId[item] = History.stateToId[item]; + } + + // Update + History.store = currentStore; + + // Store + amplify.store('History.store',currentStore); + }; + // For Internet Explorer + History.intervalList.push(setInterval(History.onUnload,History.options.storeInterval)); + // For Other Browsers + History.Adapter.bind(window,'beforeunload',History.onUnload); + History.Adapter.bind(window,'unload',History.onUnload); + // Both are enabled for consistency + } + + + // ---------------------------------------------------------------------- + // HTML5 State Support + + if ( History.emulated.pushState ) { + /* + * Provide Skeleton for HTML4 Browsers + */ + + // Prepare + var emptyFunction = function(){}; + History.pushState = History.pushState||emptyFunction; + History.replaceState = History.replaceState||emptyFunction; + } + else { + /* + * Use native HTML5 History API Implementation + */ + + /** + * History.onPopState(event,extra) + * Refresh the Current State + */ + History.onPopState = function(event){ + // Reset the double check + History.doubleCheckComplete(); + + // Check for a Hash, and handle apporiatly + var currentHash = History.getHash(); + if ( currentHash ) { + // Expand Hash + var currentState = History.extractState(currentHash||document.URL||document.location.href,true); + if ( currentState ) { + // We were able to parse it, it must be a State! + // Let's forward to replaceState + //History.debug('History.onPopState: state anchor', currentHash, currentState); + History.replaceState(currentState.data, currentState.title, currentState.url, false); + } + else { + // Traditional Anchor + //History.debug('History.onPopState: traditional anchor', currentHash); + History.Adapter.trigger(window,'anchorchange'); + History.busy(false); + } + + // We don't care for hashes + History.expectedStateId = false; + return false; + } + + // Prepare + var newState = false; + + // Prepare + event = event||{}; + if ( typeof event.state === 'undefined' ) { + // jQuery + if ( typeof event.originalEvent !== 'undefined' && typeof event.originalEvent.state !== 'undefined' ) { + event.state = event.originalEvent.state||false; + } + // MooTools + else if ( typeof event.event !== 'undefined' && typeof event.event.state !== 'undefined' ) { + event.state = event.event.state||false; + } + // Ensure + event.state = (event.state||false); + } + + // Fetch State + if ( event.state ) { + // Vanilla: Back/forward button was used + newState = History.getStateById(event.state); + } + else if ( History.expectedStateId ) { + // Vanilla: A new state was pushed, and popstate was called manually + newState = History.getStateById(History.expectedStateId); + } + else { + // Initial State + newState = History.extractState(document.URL||document.location.href); + } + + // The State did not exist in our store + if ( !newState ) { + // Regenerate the State + newState = History.createStateObject(null,null,document.URL||document.location.href); + } + + // Clean + History.expectedStateId = false; + + // Check if we are the same state + if ( History.isLastSavedState(newState) ) { + // There has been no change (just the page's hash has finally propagated) + //History.debug('History.onPopState: no change', newState, History.savedStates); + History.busy(false); + return false; + } + + // Store the State + History.storeState(newState); + History.saveState(newState); + + // Force update of the title + History.setTitle(newState); + + // Fire Our Event + History.Adapter.trigger(window,'statechange'); + History.busy(false); + + // Return true + return true; + }; + History.Adapter.bind(window,'popstate',History.onPopState); + + /** + * History.pushState(data,title,url) + * Add a new State to the history object, become it, and trigger onpopstate + * We have to trigger for HTML4 compatibility + * @param {object} data + * @param {string} title + * @param {string} url + * @return {true} + */ + History.pushState = function(data,title,url,queue){ + //History.debug('History.pushState: called', arguments); + + // Check the State + if ( History.getHashByUrl(url) && History.emulated.pushState ) { + throw new Error('History.js does not support states with fragement-identifiers (hashes/anchors).'); + } + + // Handle Queueing + if ( queue !== false && History.busy() ) { + // Wait + Push to Queue + //History.debug('History.pushState: we must wait', arguments); + History.pushQueue({ + scope: History, + callback: History.pushState, + args: arguments, + queue: queue + }); + return false; + } + + // Make Busy + Continue + History.busy(true); + + // Create the newState + var newState = History.createStateObject(data,title,url); + + // Check it + if ( History.isLastSavedState(newState) ) { + // Won't be a change + History.busy(false); + } + else { + // Store the newState + History.storeState(newState); + History.expectedStateId = newState.id; + + // Push the newState + history.pushState(newState.id,newState.title,newState.url); + + // Fire HTML5 Event + History.Adapter.trigger(window,'popstate'); + } + + // End pushState closure + return true; + }; + + /** + * History.replaceState(data,title,url) + * Replace the State and trigger onpopstate + * We have to trigger for HTML4 compatibility + * @param {object} data + * @param {string} title + * @param {string} url + * @return {true} + */ + History.replaceState = function(data,title,url,queue){ + //History.debug('History.replaceState: called', arguments); + + // Check the State + if ( History.getHashByUrl(url) && History.emulated.pushState ) { + throw new Error('History.js does not support states with fragement-identifiers (hashes/anchors).'); + } + + // Handle Queueing + if ( queue !== false && History.busy() ) { + // Wait + Push to Queue + //History.debug('History.replaceState: we must wait', arguments); + History.pushQueue({ + scope: History, + callback: History.replaceState, + args: arguments, + queue: queue + }); + return false; + } + + // Make Busy + Continue + History.busy(true); + + // Create the newState + var newState = History.createStateObject(data,title,url); + + // Check it + if ( History.isLastSavedState(newState) ) { + // Won't be a change + History.busy(false); + } + else { + // Store the newState + History.storeState(newState); + History.expectedStateId = newState.id; + + // Push the newState + history.replaceState(newState.id,newState.title,newState.url); + + // Fire HTML5 Event + History.Adapter.trigger(window,'popstate'); + } + + // End replaceState closure + return true; + }; + + // Be aware, the following is only for native pushState implementations + // If you are wanting to include something for all browsers + // Then include it above this if block + + /** + * Setup Safari Fix + */ + if ( History.bugs.safariPoll ) { + History.intervalList.push(setInterval(History.safariStatePoll, History.options.safariPollInterval)); + } + + /** + * Ensure Cross Browser Compatibility + */ + if ( navigator.vendor === 'Apple Computer, Inc.' || (navigator.appCodeName||'') === 'Mozilla' ) { + /** + * Fix Safari HashChange Issue + */ + + // Setup Alias + History.Adapter.bind(window,'hashchange',function(){ + History.Adapter.trigger(window,'popstate'); + }); + + // Initialise Alias + if ( History.getHash() ) { + History.Adapter.onDomLoad(function(){ + History.Adapter.trigger(window,'hashchange'); + }); + } + } + + } // !History.emulated.pushState + + }; // History.initCore + + // Try and Initialise History + History.init(); + +})(window); \ No newline at end of file diff --git a/rhodecode/public/js/rhodecode.js b/rhodecode/public/js/rhodecode.js --- a/rhodecode/public/js/rhodecode.js +++ b/rhodecode/public/js/rhodecode.js @@ -91,7 +91,6 @@ var setSelectValue = function(select, va // select element for(var i=0;i t_int){ - //highlight from bottom - offset = -35; - ranges = [t_int,f_int]; - + from = getIdentNode(s.anchorNode); + till = getIdentNode(s.focusNode); + + f_int = parseInt(from.id.replace('L','')); + t_int = parseInt(till.id.replace('L','')); + + if (f_int > t_int){ + //highlight from bottom + offset = -35; + ranges = [t_int,f_int]; + + } + else{ + //highligth from top + offset = 35; + ranges = [f_int,t_int]; + } + // if we select more than 2 lines + if (ranges[0] != ranges[1]){ + if(YUD.get('linktt') == null){ + hl_div = document.createElement('div'); + hl_div.id = 'linktt'; } - else{ - //highligth from top - offset = 35; - ranges = [f_int,t_int]; - } + hl_div.innerHTML = ''; + + anchor = '#L'+ranges[0]+'-'+ranges[1]; + var link = document.createElement('a'); + link.href = location.href.substring(0,location.href.indexOf('#'))+anchor; + link.innerHTML = _TM['Selection link']; + hl_div.appendChild(link); + YUD.get('body').appendChild(hl_div); - if (ranges[0] != ranges[1]){ - if(YUD.get('linktt') == null){ - hl_div = document.createElement('div'); - hl_div.id = 'linktt'; - } - anchor = '#L'+ranges[0]+'-'+ranges[1]; - hl_div.innerHTML = ''; - l = document.createElement('a'); - l.href = location.href.substring(0,location.href.indexOf('#'))+anchor; - l.innerHTML = selection_link_label; - hl_div.appendChild(l); - - YUD.get('body').appendChild(hl_div); - - xy = YUD.getXY(till.id); - - YUD.addClass('linktt','yui-tt'); - YUD.setStyle('linktt','top',xy[1]+offset+'px'); - YUD.setStyle('linktt','left',xy[0]+'px'); - YUD.setStyle('linktt','visibility','visible'); - } - else{ - YUD.setStyle('linktt','visibility','hidden'); - } + xy = YUD.getXY(till.id); + + YUD.addClass('linktt', 'hl-tip-box'); + YUD.setStyle('linktt','top',xy[1]+offset+'px'); + YUD.setStyle('linktt','left',xy[0]+'px'); + YUD.setStyle('linktt','visibility','visible'); + + } + else{ + YUD.setStyle('linktt','visibility','hidden'); } } }; diff --git a/rhodecode/templates/admin/admin.html b/rhodecode/templates/admin/admin.html --- a/rhodecode/templates/admin/admin.html +++ b/rhodecode/templates/admin/admin.html @@ -6,7 +6,13 @@ <%def name="breadcrumbs_links()"> - ${_('Admin journal')} +
+ + ? + + ${_('Admin journal')} - ${ungettext('%s entry', '%s entries', c.users_log.item_count) % (c.users_log.item_count)} +
+ ${h.end_form()} <%def name="page_nav()"> @@ -25,4 +31,26 @@
+ + + diff --git a/rhodecode/templates/admin/admin_log.html b/rhodecode/templates/admin/admin_log.html --- a/rhodecode/templates/admin/admin_log.html +++ b/rhodecode/templates/admin/admin_log.html @@ -11,7 +11,13 @@ %for cnt,l in enumerate(c.users_log): - ${h.link_to(l.user.username,h.url('edit_user', id=l.user.user_id))} + + %if l.user is not None: + ${h.link_to(l.user.username,h.url('edit_user', id=l.user.user_id))} + %else: + ${l.username} + %endif + ${h.action_parser(l)[0]()}
${h.literal(h.action_parser(l)[1]())} @@ -33,16 +39,20 @@ diff --git a/rhodecode/templates/admin/defaults/defaults.html b/rhodecode/templates/admin/defaults/defaults.html new file mode 100644 --- /dev/null +++ b/rhodecode/templates/admin/defaults/defaults.html @@ -0,0 +1,93 @@ +## -*- coding: utf-8 -*- +<%inherit file="/base/base.html"/> + +<%def name="title()"> + ${_('Repositories defaults')} - ${c.rhodecode_name} + + +<%def name="breadcrumbs_links()"> + ${h.link_to(_('Admin'),h.url('admin_home'))} + » + ${_('Defaults')} + + +<%def name="page_nav()"> + ${self.menu('admin')} + + +<%def name="main()"> +
+ +
+ ${self.breadcrumbs()} +
+ +

${_('Repositories defaults')}

+ + ${h.form(url('default', id='defaults'),method='put')} +
+ + +
+ +
+
+ +
+
+ ${h.select('default_repo_type','hg',c.backends,class_="medium")} +
+
+ +
+
+ +
+
+ ${h.checkbox('default_repo_private',value="True")} + ${_('Private repositories are only visible to people explicitly added as collaborators.')} +
+
+ + +
+
+ +
+
+ ${h.checkbox('default_repo_enable_statistics',value="True")} + ${_('Enable statistics window on summary page.')} +
+
+ +
+
+ +
+
+ ${h.checkbox('default_repo_enable_downloads',value="True")} + ${_('Enable download menu on summary page.')} +
+
+ +
+
+ +
+
+ ${h.checkbox('default_repo_enable_locking',value="True")} + ${_('Enable lock-by-pulling on repository.')} +
+
+ +
+ ${h.submit('save',_('Save'),class_="ui-btn large")} +
+
+
+ ${h.end_form()} + + ##

${_('Groups defaults')}

+ +
+ diff --git a/rhodecode/templates/admin/permissions/permissions.html b/rhodecode/templates/admin/permissions/permissions.html --- a/rhodecode/templates/admin/permissions/permissions.html +++ b/rhodecode/templates/admin/permissions/permissions.html @@ -38,16 +38,30 @@
- +
- ${h.select('default_perm','',c.perms_choices)} + ${h.select('default_repo_perm','',c.repo_perms_choices)} - ${h.checkbox('overwrite_default','true')} - + ${h.checkbox('overwrite_default_repo','true')} + +
+
+
+
+ +
+
+ ${h.select('default_group_perm','',c.group_perms_choices)} + ${h.checkbox('overwrite_default_group','true')} + +
diff --git a/rhodecode/templates/admin/repos/repo_add_base.html b/rhodecode/templates/admin/repos/repo_add_base.html --- a/rhodecode/templates/admin/repos/repo_add_base.html +++ b/rhodecode/templates/admin/repos/repo_add_base.html @@ -44,28 +44,28 @@
- +
- ${h.select('landing_rev','',c.landing_revs,class_="medium")} + ${h.select('repo_landing_rev','',c.landing_revs,class_="medium")} ${_('Default revision for files page, downloads, whoosh and readme')}
- +
- ${h.textarea('description')} + ${h.textarea('repo_description')} ${_('Keep it short and to the point. Use a README file for longer descriptions.')}
- +
- ${h.checkbox('private',value="True")} + ${h.checkbox('repo_private',value="True")} ${_('Private repositories are only visible to people explicitly added as collaborators.')}
diff --git a/rhodecode/templates/admin/repos/repo_edit.html b/rhodecode/templates/admin/repos/repo_edit.html --- a/rhodecode/templates/admin/repos/repo_edit.html +++ b/rhodecode/templates/admin/repos/repo_edit.html @@ -63,56 +63,56 @@
- +
- ${h.select('landing_rev','',c.landing_revs,class_="medium")} + ${h.select('repo_landing_rev','',c.landing_revs,class_="medium")} ${_('Default revision for files page, downloads, whoosh and readme')}
- +
- ${h.textarea('description')} + ${h.textarea('repo_description')} ${_('Keep it short and to the point. Use a README file for longer descriptions.')}
- +
- ${h.checkbox('private',value="True")} + ${h.checkbox('repo_private',value="True")} ${_('Private repositories are only visible to people explicitly added as collaborators.')}
- +
- ${h.checkbox('enable_statistics',value="True")} + ${h.checkbox('repo_enable_statistics',value="True")} ${_('Enable statistics window on summary page.')}
- +
- ${h.checkbox('enable_downloads',value="True")} + ${h.checkbox('repo_enable_downloads',value="True")} ${_('Enable download menu on summary page.')}
- +
- ${h.checkbox('enable_locking',value="True")} + ${h.checkbox('repo_enable_locking',value="True")} ${_('Enable lock-by-pulling on repository.')}
@@ -196,11 +196,20 @@
${_('List of cached values')} -
    + + + + + + %for cache in c.repo_info.cache_keys: -
  • INSTANCE ID:${cache.prefix or '-'} ${cache.cache_args} CACHED: ${h.bool2icon(cache.cache_active)}
  • + + + + + %endfor - +
    ${_('Prefix')}${_('Key')}${_('Active')}
    ${cache.prefix or '-'}${cache.cache_key}${h.bool2icon(cache.cache_active)}
@@ -271,7 +280,7 @@
  • ${_('''This repository will be renamed in a special way in order to be unaccesible for RhodeCode and VCS systems. - If you need fully delete it from filesystem please do it manually''')} + If you need fully delete it from file system please do it manually''')}
diff --git a/rhodecode/templates/admin/repos_groups/repos_groups_show.html b/rhodecode/templates/admin/repos_groups/repos_groups_show.html --- a/rhodecode/templates/admin/repos_groups/repos_groups_show.html +++ b/rhodecode/templates/admin/repos_groups/repos_groups_show.html @@ -40,6 +40,7 @@ ## REPO GROUPS % for gr in c.groups: + <% gr_cn = gr.repositories.count() %>
@@ -48,10 +49,10 @@
${gr.group_description} - ${gr.repositories.count()} + ${gr_cn} ${h.form(url('repos_group', id=gr.group_id),method='delete')} - ${h.submit('remove_%s' % gr.name,_('delete'),class_="delete_icon action_button",onclick="return confirm('"+_('Confirm to delete this group: %s') % gr.name+"');")} + ${h.submit('remove_%s' % gr.name,_('delete'),class_="delete_icon action_button",onclick="return confirm('"+ungettext('Confirm to delete this group: %s with %s repository','Confirm to delete this group: %s with %s repositories',gr_cn) % (gr.name,gr_cn)+"');")} ${h.end_form()} diff --git a/rhodecode/templates/admin/settings/settings.html b/rhodecode/templates/admin/settings/settings.html --- a/rhodecode/templates/admin/settings/settings.html +++ b/rhodecode/templates/admin/settings/settings.html @@ -122,6 +122,17 @@
+
+
+ +
+
+
+ ${h.checkbox('rhodecode_lightweight_dashboard','True')} + +
+
+
diff --git a/rhodecode/templates/admin/users/user_edit.html b/rhodecode/templates/admin/users/user_edit.html --- a/rhodecode/templates/admin/users/user_edit.html +++ b/rhodecode/templates/admin/users/user_edit.html @@ -50,7 +50,11 @@
- ${h.text('username',class_='medium')} + %if c.ldap_dn: + ${h.text('username',class_='medium disabled', readonly="readonly")} + %else: + ${h.text('username',class_='medium')} + %endif:
diff --git a/rhodecode/templates/admin/users/user_edit_my_account.html b/rhodecode/templates/admin/users/user_edit_my_account.html --- a/rhodecode/templates/admin/users/user_edit_my_account.html +++ b/rhodecode/templates/admin/users/user_edit_my_account.html @@ -135,7 +135,7 @@ var show_my = function(e){ YUD.setStyle('q_filter','display',''); - var url = "${h.url('admin_settings_my_repos')}"; + var url = "${h.url('journal_my_repos')}"; ypjax(url, 'my', function(){ table_sort(); filter_activate(); @@ -171,7 +171,6 @@ var url = location.href.split('#'); if (url[1]) { //We have a hash var tabHash = url[1]; - console.log(tabs, tabHash) tabs[tabHash](); } diff --git a/rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html b/rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html --- a/rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html +++ b/rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html @@ -25,7 +25,7 @@
${_('I participate in')}
    - %if c.my_pull_requests: + %if c.participate_in_pull_requests: %for pull_request in c.participate_in_pull_requests:
  • diff --git a/rhodecode/templates/admin/users/user_edit_my_account_repos.html b/rhodecode/templates/admin/users/user_edit_my_account_repos.html --- a/rhodecode/templates/admin/users/user_edit_my_account_repos.html +++ b/rhodecode/templates/admin/users/user_edit_my_account_repos.html @@ -19,7 +19,7 @@ ##REPO NAME AND ICONS - ${dt.repo_name(repo['name'],repo['dbrepo']['repo_type'],repo['dbrepo']['private'],repo['dbrepo_fork'].get('repo_name'))} + ${dt.repo_name(repo['name'],repo['dbrepo']['repo_type'],repo['dbrepo']['private'],h.AttributeDict(repo['dbrepo_fork']))} ##LAST REVISION diff --git a/rhodecode/templates/admin/users_groups/users_group_edit.html b/rhodecode/templates/admin/users_groups/users_group_edit.html --- a/rhodecode/templates/admin/users_groups/users_group_edit.html +++ b/rhodecode/templates/admin/users_groups/users_group_edit.html @@ -145,20 +145,83 @@
    ${_('Group members')}
    +
    + % if c.group_members_obj:
      %for user in c.group_members_obj:
    • gravatar
      -
      ${user.username}
      +
      ${h.link_to(user.username, h.url('edit_user',id=user.user_id))}
      ${user.full_name}
    • %endfor
    + %else: + ${_('No members yet')} + %endif
    + +
    + +
    +
    ${_('Permissions defined for this group')}
    +
    + ## permissions overview +
    + %for section in sorted(c.users_group.permissions.keys()): +
    ${section.replace("_"," ").capitalize()}
    + %if not c.users_group.permissions: + ${_('No permissions set yet')} + %else: +
    + + + + + + + + + %for k in c.users_group.permissions[section]: + <% + section_perm = c.users_group.permissions[section].get(k) + _perm = section_perm.split('.')[-1] + %> + + + + + + %endfor + +
    ${_('Name')}${_('Permission')}${_('Edit Permission')}
    + %if section == 'repositories': + ${k} + %elif section == 'repositories_groups': + ${k} + %endif + + ${section_perm} + + %if section == 'repositories': + ${_('edit')} + %elif section == 'repositories_groups': + ${_('edit')} + %else: + -- + %endif +
    +
    + %endif + %endfor +
    +
    + + diff --git a/rhodecode/templates/base/base.html b/rhodecode/templates/base/base.html --- a/rhodecode/templates/base/base.html +++ b/rhodecode/templates/base/base.html @@ -211,6 +211,9 @@ %if h.is_hg(c.rhodecode_repo):
  • ${h.link_to(_('Open new pull request'),h.url('pullrequest_home',repo_name=c.repo_name),class_='pull_request')}
  • %endif + %if c.rhodecode_db_repo.fork: +
  • ${h.link_to(_('Compare fork'),h.url('compare_url',repo_name=c.repo_name,org_ref_type='branch',org_ref=request.GET.get('branch') or 'default',other_ref_type='branch',other_ref='default',repo=c.rhodecode_db_repo.fork.repo_name),class_='compare_request')}
  • + %endif
  • ${h.link_to(_('search'),h.url('search_repo',search_repo=c.repo_name),class_='search')}
  • %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking: @@ -233,6 +236,7 @@
  • ${h.link_to(_('users groups'),h.url('users_groups'),class_='groups')}
  • ${h.link_to(_('permissions'),h.url('edit_permission',id='default'),class_='permissions')}
  • ${h.link_to(_('ldap'),h.url('ldap_home'),class_='ldap')}
  • +
  • ${h.link_to(_('defaults'),h.url('defaults'),class_='defaults')}
  • ${h.link_to(_('settings'),h.url('admin_settings'),class_='settings')}
diff --git a/rhodecode/templates/base/root.html b/rhodecode/templates/base/root.html --- a/rhodecode/templates/base/root.html +++ b/rhodecode/templates/base/root.html @@ -44,11 +44,16 @@ 'Start following this repository':"${_('Start following this repository')}", 'Group':"${_('Group')}", 'members':"${_('members')}", + 'loading...':"${_('loading...')}", 'search truncated': "${_('search truncated')}", - 'no matching files': "${_('no matching files')}" - + 'no matching files': "${_('no matching files')}", + 'Open new pull request': "${_('Open new pull request')}", + 'Open new pull request for selected changesets': "${_('Open new pull request for selected changesets')}", + 'Show selected changes __S -> __E': "${_('Show selected changes __S -> __E')}", + 'Selection link': "${_('Selection link')}", }; var _TM = TRANSLATION_MAP; + var TOGGLE_FOLLOW_URL = "${h.url('toggle_following')}";
-
${_('Journal')}
- + ${self.breadcrumbs()} +
${c.journal_data}
@@ -38,7 +46,7 @@
- ${_('My repos')} / ${_('Watched')} + ${_('Watched')} / ${_('My repos')}
%if h.HasPermissionAny('hg.admin','hg.create.repository')():
-
- %if c.user_repos: -
- - - - - - - - - - - <%namespace name="dt" file="/data_table/_dt_elements.html"/> - %for repo in c.user_repos: - - ##QUICK MENU - - ##REPO NAME AND ICONS - - ##LAST REVISION - - ## - - - - %endfor - -
${_('Name')}${_('Revision')}${_('Action')}${_('Action')}
- ${dt.quick_menu(repo['name'])} - - ${dt.repo_name(repo['name'],repo['dbrepo']['repo_type'],repo['dbrepo']['private'],repo['dbrepo_fork'].get('repo_name'))} - - ${dt.revision(repo['name'],repo['rev'],repo['tip'],repo['author'],repo['last_msg'])} - ${_('private')} - ${h.form(url('repo_settings_delete', repo_name=repo['name']),method='delete')} - ${h.submit('remove_%s' % repo['name'],'',class_="delete_icon action_button",onclick="return confirm('"+_('Confirm to delete this repository')+"');")} - ${h.end_form()} -
-
- %else: -
- ${_('No repositories yet')} - %if h.HasPermissionAny('hg.admin','hg.create.repository')(): - ${h.link_to(_('create one now'),h.url('admin_settings_create_repository'),class_="ui-btn")} - %endif -
- %endif + -