# HG changeset patch # User Marcin Kuzminski # Date 2013-04-07 16:37:22 # Node ID 3563bb7b4b82973987c34f1b77b7de1264d97398 # Parent 0cef54d346059dfb140468c24531d87653b18214 # Parent 49b34e3c0812adcca1351c7beb992e8e9c09184d merge with rc1 diff --git a/CONTRIBUTORS b/CONTRIBUTORS --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -33,3 +33,4 @@ List of contributors to RhodeCode projec Philip Jameson Mads Kiilerich Dan Sheridan + Dennis Brakhane diff --git a/README.rst b/README.rst --- a/README.rst +++ b/README.rst @@ -75,7 +75,7 @@ RhodeCode Features - Supports http/https, LDAP, AD, proxy-pass authentication. - Full permissions (private/read/write/admin) together with IP restrictions for each repository, additional explicit forking and repository creation permissions. -- Users groups for easier permission management +- User groups for easier permission management - Repository groups let you group repos and manage them easier. - Users can fork other users repos, and compare them at any time. - Integrates easily with other systems, with custom created mappers you can connect it to almost diff --git a/development.ini b/development.ini --- a/development.ini +++ b/development.ini @@ -25,59 +25,92 @@ pdebug = false #smtp_port = #smtp_use_tls = false #smtp_use_ssl = true -# Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) +## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) #smtp_auth = [server:main] ## PASTE -##nr of threads to spawn +## nr of threads to spawn #threadpool_workers = 5 -##max request before thread respawn +## max request before thread respawn #threadpool_max_requests = 10 -##option to use threads of process +## option to use threads of process #use_threadpool = true #use = egg:Paste#http -#WAITRESS +## WAITRESS threads = 5 +## 100GB +max_request_body_size = 107374182400 use = egg:waitress#main host = 0.0.0.0 port = 5000 -[filter:proxy-prefix] -# prefix middleware for rc -use = egg:PasteDeploy#prefix -prefix = / +## prefix middleware for rc +#[filter:proxy-prefix] +#use = egg:PasteDeploy#prefix +#prefix = / [app:main] use = egg:rhodecode +## enable proxy prefix middleware #filter-with = proxy-prefix + full_stack = true static_files = true -# Optional Languages -# en, fr, ja, pt_BR, zh_CN, zh_TW, pl +## Optional Languages +## 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 + +## uncomment and set this path to use archive download cache +#archive_cache_dir = /tmp/tarballcache + +## change this to unique ID for security +app_instance_uuid = rc-production + +## cut off limit for large diffs (size in bytes) cut_off_limit = 256000 -vcs_full_cache = True + +## use cache version of scm repo everywhere +vcs_full_cache = true + +## force https in RhodeCode, fixes https redirects, assumes it's always https force_https = false + +## use Strict-Transport-Security headers +use_htsts = false + +## number of commits stats will parse on each iteration commit_parse_limit = 25 -# number of items displayed in lightweight dashboard before paginating + +## number of items displayed in lightweight dashboard before paginating is shown dashboard_items = 100 + +## use gravatar service to display avatars use_gravatar = true +## path to git executable +git_path = git + +## git rev filter option, --all is the default filter, if you need to +## hide all refs in changelog switch this to --branches --tags +git_rev_filter=--all + ## RSS feed options - rss_cut_off_limit = 256000 rss_items_per_page = 10 rss_include_diff = false +## options for showing and identifying changesets +show_sha_length = 12 +show_revision_number = true + ## alternative_gravatar_url allows you to use your own avatar server application ## the following parts of the URL will be replaced @@ -89,8 +122,11 @@ rss_include_diff = false #alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size} #alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size} + +## container auth options 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 @@ -146,6 +182,11 @@ instance_id = ## handling that. Set this variable to 403 to return HTTPForbidden auth_ret_code = +## locking return code. When repository is locked return this HTTP code. 2XX +## codes don't break the transactions while 4XX codes do +lock_ret_code = 423 + + #################################### ### CELERY CONFIG #### #################################### @@ -170,7 +211,7 @@ celeryd.concurrency = 2 celeryd.log.level = debug celeryd.max.tasks.per.child = 1 -#tasks will never be sent to the queue, but executed locally instead. +## tasks will never be sent to the queue, but executed locally instead. celery.always.eager = false #################################### @@ -226,18 +267,19 @@ beaker.cache.sql_cache_long.key_length = beaker.session.key = rhodecode -## secure cookie requires AES python libraries ## -#beaker.session.encrypt_key = g654dcno0-9873jhgfreyu -#beaker.session.validate_key = 9712sds2212c--zxc123 +## secure cookie requires AES python libraries +#beaker.session.encrypt_key = +#beaker.session.validate_key = + ## sets session as invalid if it haven't been accessed for given amount of time beaker.session.timeout = 2592000 beaker.session.httponly = true #beaker.session.cookie_path = / -## uncomment for https secure cookie ## +## uncomment for https secure cookie beaker.session.secure = false -## auto save the session to not to use .save() ## +## auto save the session to not to use .save() beaker.session.auto = False ## default cookie expiration time in seconds `true` expire at browser close ## @@ -252,57 +294,57 @@ beaker.session.auto = False ### [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 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 enabled +errormator = false errormator.server_url = https://api.errormator.com errormator.api_key = YOUR_API_KEY -# TWEAK AMOUNT OF INFO SENT HERE +## TWEAK AMOUNT OF INFO SENT HERE -# enables 404 error logging (default False) +## enables 404 error logging (default False) errormator.report_404 = false -# time in seconds after request is considered being slow (default 1) +## 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) +## 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 +## enable hooking to application loggers # errormator.logging = true -# minimum log level for log capture +## minimum log level for log capture # errormator.logging.level = WARNING -# send logs only from erroneous/slow requests -# (saves API quota for intensive logging) +## 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 +## 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 +## 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) +## 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 = @@ -310,8 +352,8 @@ errormator.log_namespace_blacklist = ### [sentry] ### ################ -# sentry is a alternative open source error aggregator -# you must install python packages `sentry` and `raven` to enable +## sentry is a alternative open source error aggregator +## you must install python packages `sentry` and `raven` to enable sentry.dsn = YOUR_DNS sentry.servers = @@ -371,7 +413,7 @@ handlers = console level = DEBUG handlers = qualname = routes.middleware -# "level = DEBUG" logs the route matched and routing variables. +## "level = DEBUG" logs the route matched and routing variables. propagate = 1 [logger_beaker] diff --git a/docs/api/api.rst b/docs/api/api.rst --- a/docs/api/api.rst +++ b/docs/api/api.rst @@ -13,10 +13,10 @@ with JSON protocol both ways. An url to API ACCESS FOR WEB VIEWS ++++++++++++++++++++++++ -API access can also be turned on for each web view in RhodeCode that is -decorated with `@LoginRequired` decorator. To enable API access simple change -the standard login decorator to `@LoginRequired(api_access=True)`. -After this change, a rhodecode view can be accessed without login by adding a +API access can also be turned on for each web view in RhodeCode that is +decorated with `@LoginRequired` decorator. To enable API access simple change +the standard login decorator to `@LoginRequired(api_access=True)`. +After this change, a rhodecode view can be accessed without login by adding a GET parameter `?api_key=` to url. By default this is only enabled on RSS/ATOM feed views. @@ -26,7 +26,7 @@ API ACCESS All clients are required to send JSON-RPC spec JSON data:: - { + { "id:"", "api_key":"", "method":"", @@ -49,7 +49,7 @@ Simply provide RhodeCode API will return always a JSON-RPC response:: - { + { "id":, # matching id sent by request "result": ""|null, # JSON formatted result, null if any errors "error": "null"| # JSON formatted error (if any) @@ -70,14 +70,14 @@ will be available. To get started quickly simply run:: rhodecode-api _create_config --apikey= --apihost= - + This will create a file named .config in the directory you executed it storing json config file with credentials. You can skip this step and always provide both of the arguments to be able to communicate with server after that simply run any api command for example get_repo:: - + rhodecode-api get_repo calling {"api_key": "", "id": 75, "args": {}, "method": "get_repo"} to http://127.0.0.1:5000 @@ -90,8 +90,8 @@ Ups looks like we forgot to add an argum Let's try again now giving the repoid as parameters:: - rhodecode-api get_repo repoid:rhodecode - + rhodecode-api get_repo repoid:rhodecode + calling {"api_key": "", "id": 39, "args": {"repoid": "rhodecode"}, "method": "get_repo"} to http://127.0.0.1:5000 rhodecode said: {'error': None, @@ -132,7 +132,7 @@ rescan_repos Dispatch rescan repositories action. If remove_obsolete is set RhodeCode will delete repos that are in database but not in the filesystem. -This command can be executed only using api_key belonging to user with admin +This command can be executed only using api_key belonging to user with admin rights. INPUT:: @@ -147,17 +147,40 @@ INPUT:: OUTPUT:: id : - result : "{'added': [], + result : "{'added': [], 'removed': []}" error : null +invalidate_cache +---------------- + +Invalidate cache for repository. +This command can be executed only using api_key belonging to user with admin +rights or regular user that have write or admin or write access to repository. + +INPUT:: + + id : + api_key : "" + method : "invalidate_cache" + args : { + "repoid" : "" + } + +OUTPUT:: + + id : + result : "Cache for repository `` was invalidated: invalidated cache keys: " + error : null + lock ---- Set locking state on given repository by given user. If userid param is skipped -, then it is set to id of user whos calling this method. -This command can be executed only using api_key belonging to user with admin +, then it is set to id of user whos calling this method. If locked param is skipped +then function shows current lock state of given repo. +This command can be executed only using api_key belonging to user with admin rights or regular user that have admin or write access to repository. INPUT:: @@ -168,7 +191,7 @@ INPUT:: args : { "repoid" : "" "userid" : "", - "locked" : "" + "locked" : "" } OUTPUT:: @@ -183,7 +206,7 @@ show_ip Shows IP address as seen from RhodeCode server, together with all defined IP addresses for given user. -This command can be executed only using api_key belonging to user with admin +This command can be executed only using api_key belonging to user with admin rights. INPUT:: @@ -208,7 +231,7 @@ OUTPUT:: ... ] } - + error : null @@ -217,7 +240,7 @@ get_user Get's an user by username or user_id, Returns empty result if user is not found. If userid param is skipped it is set to id of user who is calling this method. -This command can be executed only using api_key belonging to user with admin +This command can be executed only using api_key belonging to user with admin rights, or regular users that cannot specify different userid than theirs @@ -226,16 +249,17 @@ INPUT:: id : api_key : "" method : "get_user" - args : { + args : { "userid" : "" } OUTPUT:: id : - result: None if user does not exist or + result: None if user does not exist or { "user_id" : "", + "api_key" : "", "username" : "", "firstname": "", "lastname" : "", @@ -289,7 +313,7 @@ OUTPUT:: "ldap_dn" : "", "last_login": "", }, - … + … ] error: null @@ -297,7 +321,7 @@ OUTPUT:: create_user ----------- -Creates new user. This command can +Creates new user. This command can be executed only using api_key belonging to user with admin rights. @@ -341,7 +365,7 @@ OUTPUT:: update_user ----------- -updates given user if such user exists. This command can +updates given user if such user exists. This command can be executed only using api_key belonging to user with admin rights. @@ -378,7 +402,7 @@ OUTPUT:: "admin" :  "", "ldap_dn" : "", "last_login": "", - }, + }, } error: null @@ -387,7 +411,7 @@ delete_user ----------- -deletes givenuser if such user exists. This command can +deletes givenuser if such user exists. This command can be executed only using api_key belonging to user with admin rights. @@ -413,7 +437,7 @@ OUTPUT:: get_users_group --------------- -Gets an existing users group. This command can be executed only using api_key +Gets an existing user group. This command can be executed only using api_key belonging to user with admin rights. @@ -423,7 +447,7 @@ INPUT:: api_key : "" method : "get_users_group" args : { - "usersgroupid" : "" + "usersgroupid" : "" } OUTPUT:: @@ -435,7 +459,7 @@ OUTPUT:: "group_name" : "", "active": "", "members" : [ - { + { "user_id" : "", "username" : "", "firstname": "", @@ -456,7 +480,7 @@ OUTPUT:: get_users_groups ---------------- -Lists all existing users groups. This command can be executed only using +Lists all existing user groups. This command can be executed only using api_key belonging to user with admin rights. @@ -484,7 +508,7 @@ OUTPUT:: create_users_group ------------------ -Creates new users group. This command can be executed only using api_key +Creates new user group. This command can be executed only using api_key belonging to user with admin rights @@ -502,7 +526,7 @@ OUTPUT:: id : result: { - "msg": "created new users group ``", + "msg": "created new user group ``", "users_group": { "users_group_id" : "", "group_name" : "", @@ -515,7 +539,7 @@ OUTPUT:: add_user_to_users_group ----------------------- -Adds a user to a users group. If user exists in that group success will be +Adds a user to a user group. If user exists in that group success will be `false`. This command can be executed only using api_key belonging to user with admin rights @@ -526,7 +550,7 @@ INPUT:: api_key : "" method : "add_user_users_group" args: { - "usersgroupid" : "", + "usersgroupid" : "", "userid" : "", } @@ -535,7 +559,7 @@ OUTPUT:: id : result: { "success": True|False # depends on if member is in group - "msg": "added member `` to users group `` | + "msg": "added member `` to user group `` | User is already in that group" } error: null @@ -544,8 +568,8 @@ OUTPUT:: remove_user_from_users_group ---------------------------- -Removes a user from a users group. If user is not in given group success will -be `false`. This command can be executed only +Removes a user from a user group. If user is not in given group success will +be `false`. This command can be executed only using api_key belonging to user with admin rights @@ -555,7 +579,7 @@ INPUT:: api_key : "" method : "remove_user_from_users_group" args: { - "usersgroupid" : "", + "usersgroupid" : "", "userid" : "", } @@ -564,7 +588,7 @@ OUTPUT:: id : result: { "success": True|False, # depends on if member is in group - "msg": "removed member from users group | + "msg": "removed member from user group | User wasn't in group" } error: null @@ -574,8 +598,8 @@ get_repo -------- Gets an existing repository by it's name or repository_id. Members will return -either users_group or user associated to that repository. This command can be -executed only using api_key belonging to user with admin +either users_group or user associated to that repository. This command can be +executed only using api_key belonging to user with admin rights or regular user that have at least read access to repository. @@ -599,9 +623,9 @@ OUTPUT:: "clone_uri" : "", "enable_downloads": "", "enable_locking": "", - "enable_statistics": "", + "enable_statistics": "", "private": "", - "created_on" : "", + "created_on" : "", "description" : "", "landing_rev": "", "last_changeset": { @@ -615,8 +639,8 @@ OUTPUT:: "owner": "", "fork_of": "", "members" : [ - { - "type": "user", + { + "type": "user", "user_id" : "", "username" : "", "firstname": "", @@ -630,8 +654,8 @@ OUTPUT:: "permission" : "repository.(read|write|admin)" }, … - { - "type": "users_group", + { + "type": "users_group", "id" : "", "name" : "", "active": "", @@ -639,6 +663,22 @@ OUTPUT:: }, … ] + "followers": [ + { + "user_id" : "", + "username" : "", + "firstname": "", + "lastname" : "", + "email" : "", + "emails": "", + "ip_addresses": "", + "active" : "", + "admin" :  "", + "ldap_dn" : "", + "last_login": "", + }, + … + ] } error: null @@ -646,8 +686,8 @@ OUTPUT:: get_repos --------- -Lists all existing repositories. This command can be executed only using -api_key belonging to user with admin rights or regular user that have +Lists all existing repositories. This command can be executed only using +api_key belonging to user with admin rights or regular user that have admin, write or read access to repository. @@ -668,14 +708,14 @@ OUTPUT:: "repo_type" : "", "clone_uri" : "", "private": : "", - "created_on" : "", + "created_on" : "", "description" : "", "landing_rev": "", "owner": "", "fork_of": "", "enable_downloads": "", "enable_locking": "", - "enable_statistics": "", + "enable_statistics": "", }, … ] @@ -685,9 +725,9 @@ OUTPUT:: get_repo_nodes -------------- -returns a list of nodes and it's children in a flat list for a given path -at given revision. It's possible to specify ret_type to show only `files` or -`dirs`. This command can be executed only using api_key belonging to user +returns a list of nodes and it's children in a flat list for a given path +at given revision. It's possible to specify ret_type to show only `files` or +`dirs`. This command can be executed only using api_key belonging to user with admin rights @@ -720,9 +760,9 @@ create_repo ----------- Creates a repository. If repository name contains "/", all needed repository -groups will be created. For example "foo/bar/baz" will create groups -"foo", "bar" (with "foo" as parent), and create "baz" repository with -"bar" as group. This command can be executed only using api_key belonging to user with admin +groups will be created. For example "foo/bar/baz" will create groups +"foo", "bar" (with "foo" as parent), and create "baz" repository with +"bar" as group. This command can be executed only using api_key belonging to user with admin rights or regular user that have create repository permission. Regular users cannot specify owner parameter @@ -756,14 +796,14 @@ OUTPUT:: "repo_type" : "", "clone_uri" : "", "private": : "", - "created_on" : "", + "created_on" : "", "description" : "", "landing_rev": "", "owner": "", "fork_of": "", "enable_downloads": "", "enable_locking": "", - "enable_statistics": "", + "enable_statistics": "", }, } error: null @@ -792,7 +832,7 @@ INPUT:: "copy_permissions": "", "private": "", "landing_rev": "" - + } OUTPUT:: @@ -808,8 +848,10 @@ OUTPUT:: delete_repo ----------- -Deletes a repository. This command can be executed only using api_key belonging to user with admin -rights or regular user that have admin access to repository. +Deletes a repository. This command can be executed only using api_key belonging +to user with admin rights or regular user that have admin access to repository. +When `forks` param is set it's possible to detach or delete forks of deleting +repository INPUT:: @@ -818,7 +860,8 @@ INPUT:: api_key : "" method : "delete_repo" args: { - "repoid" : "" + "repoid" : "", + "forks" : "`delete` or `detach` = Optional(None)" } OUTPUT:: @@ -835,7 +878,7 @@ grant_user_permission --------------------- Grant permission for user on given repository, or update existing one -if found. This command can be executed only using api_key belonging to user +if found. This command can be executed only using api_key belonging to user with admin rights. @@ -863,7 +906,7 @@ OUTPUT:: revoke_user_permission ---------------------- -Revoke permission for user on given repository. This command can be executed +Revoke permission for user on given repository. This command can be executed only using api_key belonging to user with admin rights. @@ -890,8 +933,8 @@ OUTPUT:: grant_users_group_permission ---------------------------- -Grant permission for users group on given repository, or update -existing one if found. This command can be executed only using +Grant permission for user group on given repository, or update +existing one if found. This command can be executed only using api_key belonging to user with admin rights. @@ -902,7 +945,7 @@ INPUT:: method : "grant_users_group_permission" args: { "repoid" : "" - "usersgroupid" : "" + "usersgroupid" : "" "perm" : "(repository.(none|read|write|admin))", } @@ -914,12 +957,12 @@ OUTPUT:: "success": true } error: null - - + + revoke_users_group_permission ----------------------------- -Revoke permission for users group on given repository.This command can be +Revoke permission for user group on given repository.This command can be executed only using api_key belonging to user with admin rights. INPUT:: @@ -929,7 +972,7 @@ INPUT:: method : "revoke_users_group_permission" args: { "repoid" : "" - "usersgroupid" : "" + "usersgroupid" : "" } OUTPUT:: @@ -939,4 +982,4 @@ OUTPUT:: "msg" : "Revoked perm for group: `` in repo: ``", "success": true } - error: null \ No newline at end of file + error: null diff --git a/docs/api/models.rst b/docs/api/models.rst --- a/docs/api/models.rst +++ b/docs/api/models.rst @@ -6,30 +6,30 @@ The :mod:`models` Module .. automodule:: rhodecode.model :members: - + .. automodule:: rhodecode.model.comment :members: - + .. automodule:: rhodecode.model.notification - :members: + :members: .. automodule:: rhodecode.model.permission :members: .. automodule:: rhodecode.model.repo_permission - :members: + :members: .. automodule:: rhodecode.model.repo - :members: + :members: .. automodule:: rhodecode.model.repos_group :members: - + .. automodule:: rhodecode.model.scm :members: - + .. automodule:: rhodecode.model.user - :members: - + :members: + .. automodule:: rhodecode.model.users_group - :members: \ No newline at end of file + :members: diff --git a/docs/changelog.rst b/docs/changelog.rst --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -4,6 +4,82 @@ Changelog ========= +1.6.0rc1 (**2013-04-07**) +------------------------- + +news +++++ + + - Redesign UI, with lots of small improvements. + - Group management delegation. Group admin can manage a group, and repos + under it, admin can create child groups inside group he manages. + - Repository extra fields. Optional unlimited extra fields can be defined for + each repository to store custom data. + - API get_repo call includes repo followers now. + - Large amounts of improvements in pull requests. + - #734 repo switcher is available in all pages. + - #733 API invalidate_cache function. + - Added option to turn on HSTS headers when using SSL. + - #83 show repo size on summary page. + - #745 added show full diff link into to big diff message. + - Deprecated RSS links - ATOM is the present and the future. + - Add option to define custom lexers for custom extensions for code highlight + in rcextension module. + - Git executable is now configurable via .ini files. + - #689 repositories now has optional detach/delete option for connected forks. + - Obfuscate password when cloning a remote repo with credentials. + - #788 tarball cache. zip or compressed tarballs can be optionally cached for + faster serving. + - Speed up of last_changeset extraction in VCS. + - API get_locks function. + - Configurable HTTP codes for repository locking. + - Possible to use closed branches in ?branch= in changelog. + - Linaro's ldap sync scripts. + - #797 git refs filter is now configurable via .ini file. + - New ishell paster command for easier administrative tasks. + +fixes ++++++ + + - #654 switch to handles `/` in branch/tag/bookmark names. + - #572 moved out password reset tasks from celery. + - #730 filter out repo groups choices to only ones that you have write+ access. + - #462 disable file editing when not on branch head. + - #731 update-repoinfo sometimes failed to update data when changesets were + initial commits. + - #749,#805 and #516 Removed duplication of repo settings for rhodecode admins + and repo admins. + - Global permission update with "overwrite existing settings" shouldn't + override private repositories. + - #642 added recursion limit for stats gathering. + - #739 Delete/Edit repositories should only point to admin links if the user + is an super admin. + - Fixed escaping of html in "patch" view for GIT repos. + - #747 load changeset cache after forking to refresh lightweight dashboard caches. + - Quick repo list: public/private icon control should only control icons, + not repo visibility. + - #746 UnicodeDedode errors on feed controllers. + - #756 cleanup repos didn't properly compose paths of repos to be cleaned up. + - #763 gravatar helper function should fallback into default image if somehow + email provided is empty. + - Fixes #762, LDAP and container created users are now activated based on + the registration settings in permissions. + - Cleanup would recurse into every leaf and could thus not be used on lots of + large repositories. + - Better detection of deleting groups with subgroups inside. + - Fixed issue with renaming repos group together with changing parents with + multiple nested trees. + - #594 web interface file committing executes push hooks. + - Disallow cloning from different URI's that http[s]/svn/git/hg. + - Handling of RhodeCode extra params in consistent way. + - Don't normalize path if it's empty on adding a file through web interface. + - #808 missing changesets and files should return 404 not redirect + - #809 added url quote in clone url. + - Fixed issues with importing non-ascii repo names. + - Automatically assign instance_id for host and process if it has been set to * + - Fixed multiple IP addresses in each of extracted IP. + - Lot of other small bug fixes and improvements. + 1.5.4 (**2013-03-13**) ---------------------- @@ -20,8 +96,8 @@ fixes if email is empty - fixes #762 user global activation flag is also respected for LDAP created accounts -- use password obfuscate when clonning a remote repo with credentials inside -- fixed issue with renaming repos group together with changing parents +- use password obfuscate when clonning a remote repo with credentials inside +- fixed issue with renaming repository group together with changing parents - disallow cloning from file:/// URIs - handle all cases with multiple IP addresses in proxy headers @@ -84,7 +160,7 @@ 1.5.1 (**2012-12-13**) news ++++ -- implements #677: Don't allow to close pull requests when they are +- implements #677: Don't allow to close pull requests when they are under-review status - implemented #670 Implementation of Roles in Pull Request @@ -95,6 +171,7 @@ fixes - fixed changeset status labels, they now select radio buttons - #682 translation difficult for multi-line text - #683 fixed difference between messages about not mapped repositories +- email: fail nicely when no SMTP server has been configured 1.5.0 (**2012-12-12**) ---------------------- @@ -120,7 +197,7 @@ news - 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 +- 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 @@ -143,17 +220,17 @@ fixes - 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. +- 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 +- implements #649 added two seperate method for author and committer to VCS + changeset class switch author for git backed to be the real author not committer - 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 + 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 @@ -204,9 +281,9 @@ news fixes +++++ -- fixed #570 explicit users group permissions can overwrite owner permissions +- fixed #570 explicit user group permissions can overwrite owner permissions - fixed #578 set proper PATH with current Python for Git - hooks to execute within same Python as RhodeCode + hooks to execute within same Python as RhodeCode - fixed issue with Git bare repos that ends with .git in name 1.4.2 (**2012-09-12**) @@ -221,12 +298,12 @@ news groups. Now only write access to group allows to create a repostiory within that group - #565 Add support for {netloc} and {scheme} to alternative_gravatar_url -- updated translation for zh_CN +- updated translation for zh_CN fixes +++++ -- fixed visual permissions check on repos groups inside groups +- fixed visual permissions check on repository groups inside groups - fixed issues with non-ascii search terms in search, and indexers - fixed parsing of page number in GET parameters - fixed issues with generating pull-request overview for repos with @@ -240,7 +317,7 @@ news ++++ - always put a comment about code-review status change even if user send - empty data + empty data - modified_on column saves repository update and it's going to be used later for light version of main page ref #500 - pull request notifications send much nicer emails with details about pull @@ -251,10 +328,10 @@ fixes +++++ - fixed migrations of permissions that can lead to inconsistency. - Some users sent feedback that after upgrading from older versions issues + Some users sent feedback that after upgrading from older versions issues with updating default permissions occurred. RhodeCode detects that now and resets default user permission to initial state if there is a need for that. - Also forces users to set the default value for new forking permission. + Also forces users to set the default value for new forking permission. - #535 improved apache wsgi example configuration in docs - fixes #550 mercurial repositories comparision failed when origin repo had additional not-common changesets @@ -273,7 +350,7 @@ 1.4.0 (**2012-09-03**) news ++++ - + - new codereview system - email map, allowing users to have multiple email addresses mapped into their accounts @@ -284,11 +361,11 @@ news - #464 added links to groups in permission box - #465 mentions autocomplete inside comments boxes - #469 added --update-only option to whoosh to re-index only given list - of repos in index + of repos in index - rhodecode-api CLI client - new git http protocol replaced buggy dulwich implementation. Now based on pygrack & gitweb -- Improved RSS/ATOM feeds. Discoverable by browsers using proper headers, and +- Improved RSS/ATOM feeds. Discoverable by browsers using proper headers, and reformated based on user suggestions. Additional rss/atom feeds for user journal - various i18n improvements @@ -296,21 +373,21 @@ news - File view now displays small gravatars off all authors of given file - Implemented landing revisions. Each repository will get landing_rev attribute that defines 'default' revision/branch for generating readme files -- Implemented #509, RhodeCode enforces SSL for push/pulling if requested at +- Implemented #509, RhodeCode enforces SSL for push/pulling if requested at earliest possible call. - Import remote svn repositories to mercurial using hgsubversion. - Fixed #508 RhodeCode now has a option to explicitly set forking permissions - RhodeCode can use alternative server for generating avatar icons - implemented repositories locking. Pull locks, push unlocks. Also can be done via API calls -- #538 form for permissions can handle multiple users at once +- #538 form for permissions can handle multiple users at once fixes +++++ - improved translations - fixes issue #455 Creating an archive generates an exception on Windows -- fixes #448 Download ZIP archive keeps file in /tmp open and results +- fixes #448 Download ZIP archive keeps file in /tmp open and results in out of disk space - fixes issue #454 Search results under Windows include proceeding backslash @@ -322,9 +399,9 @@ fixes - fixed issue #459. Changed the way of obtaining logger in reindex task. - fixed #453 added ID field in whoosh SCHEMA that solves the issue of reindexing modified files -- fixed #481 rhodecode emails are sent without Date header +- fixed #481 rhodecode emails are sent without Date header - fixed #458 wrong count when no repos are present -- fixed issue #492 missing `\ No newline at end of file` test at the end of +- fixed issue #492 missing `\ No newline at end of file` test at the end of new chunk in html diff - full text search now works also for commit messages @@ -335,8 +412,8 @@ news ++++ - chinese traditional translation -- changed setup-app into setup-rhodecode and added arguments for auto-setup - mode that doesn't need user interaction +- changed setup-app into setup-rhodecode and added arguments for auto-setup + mode that doesn't need user interaction fixes +++++ @@ -356,11 +433,11 @@ news - use ext_json for json module - unified annotation view with file source view - notification improvements, better inbox + css -- #419 don't strip passwords for login forms, make rhodecode +- #419 don't strip passwords for login forms, make rhodecode more compatible with LDAP servers -- Added HTTP_X_FORWARDED_FOR as another method of extracting - IP for pull/push logs. - moved all to base controller -- #415: Adding comment to changeset causes reload. +- Added HTTP_X_FORWARDED_FOR as another method of extracting + IP for pull/push logs. - moved all to base controller +- #415: Adding comment to changeset causes reload. Comments are now added via ajax and doesn't reload the page - #374 LDAP config is discarded when LDAP can't be activated - limited push/pull operations are now logged for git in the journal @@ -376,7 +453,7 @@ fixes - #418 cast to unicode fixes in notification objects - #426 fixed mention extracting regex - fixed remote-pulling for git remotes remopositories -- fixed #434: Error when accessing files or changesets of a git repository +- fixed #434: Error when accessing files or changesets of a git repository with submodules - fixed issue with empty APIKEYS for users after registration ref. #438 - fixed issue with getting README files from git repositories @@ -393,15 +470,15 @@ news - created rcextensions module with additional mappings (ref #322) and post push/pull/create repo hooks callbacks - implemented #377 Users view for his own permissions on account page -- #399 added inheritance of permissions for users group on repos groups -- #401 repository group is automatically pre-selected when adding repos +- #399 added inheritance of permissions for user group on repository groups +- #401 repository group is automatically pre-selected when adding repos inside a repository group -- added alternative HTTP 403 response when client failed to authenticate. Helps +- added alternative HTTP 403 response when client failed to authenticate. Helps solving issues with Mercurial and LDAP -- #402 removed group prefix from repository name when listing repositories +- #402 removed group prefix from repository name when listing repositories inside a group - added gravatars into permission view and permissions autocomplete -- #347 when running multiple RhodeCode instances, properly invalidates cache +- #347 when running multiple RhodeCode instances, properly invalidates cache for all registered servers fixes @@ -411,15 +488,15 @@ fixes - fixed #385 clone by ID url was loosing proxy prefix in URL - fixed some unicode problems with waitress - fixed issue with escaping < and > in changeset commits -- fixed error occurring during recursive group creation in API +- fixed error occurring during recursive group creation in API create_repo function - fixed #393 py2.5 fixes for routes url generator - fixed #397 Private repository groups shows up before login - fixed #396 fixed problems with revoking users in nested groups -- fixed mysql unicode issues + specified InnoDB as default engine with +- fixed mysql unicode issues + specified InnoDB as default engine with utf8 charset - #406 trim long branch/tag names in changelog to not break UI - + 1.3.3 (**2012-03-02**) ---------------------- @@ -430,11 +507,11 @@ news fixes +++++ -- fixed some python2.5 compatibility issues +- fixed some python2.5 compatibility issues - fixed issues with removed repos was accidentally added as groups, after full rescan of paths - fixes #376 Cannot edit user (using container auth) -- fixes #378 Invalid image urls on changeset screen with proxy-prefix +- fixes #378 Invalid image urls on changeset screen with proxy-prefix configuration - fixed initial sorting of repos inside repo group - fixes issue when user tried to resubmit same permission into user/user_groups @@ -442,7 +519,7 @@ fixes - fixed raw_changeset for git. It was generated with hg patch headers - fixed vcs issue with last_changeset for filenodes - fixed missing commit after hook delete -- fixed #372 issues with git operation detection that caused a security issue +- fixed #372 issues with git operation detection that caused a security issue for git repos 1.3.2 (**2012-02-28**) @@ -459,9 +536,9 @@ fixes - fixed git remote repos validator that prevented from cloning remote git repos - fixes #370 ending slashes fixes for repo and groups - fixes #368 improved git-protocol detection to handle other clients -- fixes #366 When Setting Repository Group To Blank Repo Group Wont Be +- fixes #366 When Setting Repository Group To Blank Repo Group Wont Be Moved To Root -- fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys +- fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys - fixed #373 missing cascade drop on user_group_to_perm table 1.3.1 (**2012-02-27**) @@ -475,7 +552,7 @@ fixes +++++ - redirection loop occurs when remember-me wasn't checked during login -- fixes issues with git blob history generation +- fixes issues with git blob history generation - don't fetch branch for git in file history dropdown. Causes unneeded slowness 1.3.0 (**2012-02-26**) @@ -484,19 +561,19 @@ 1.3.0 (**2012-02-26**) news ++++ -- code review, inspired by github code-comments +- code review, inspired by github code-comments - #215 rst and markdown README files support - #252 Container-based and proxy pass-through authentication support - #44 branch browser. Filtering of changelog by branches - mercurial bookmarks support - new hover top menu, optimized to add maximum size for important views -- configurable clone url template with possibility to specify protocol like +- configurable clone url template with possibility to specify protocol like ssh:// or http:// and also manually alter other parts of clone_url. - enabled largefiles extension by default - optimized summary file pages and saved a lot of unused space in them - #239 option to manually mark repository as fork - #320 mapping of commit authors to RhodeCode users -- #304 hashes are displayed using monospace font +- #304 hashes are displayed using monospace font - diff configuration, toggle white lines and context lines - #307 configurable diffs, whitespace toggle, increasing context lines - sorting on branches, tags and bookmarks using YUI datatable @@ -504,17 +581,17 @@ news - implements #330 api method for listing nodes ar particular revision - #73 added linking issues in commit messages to chosen issue tracker url based on user defined regular expression -- added linking of changesets in commit messages +- added linking of changesets in commit messages - new compact changelog with expandable commit messages - firstname and lastname are optional in user creation - #348 added post-create repository hook -- #212 global encoding settings is now configurable from .ini files +- #212 global encoding settings is now configurable from .ini files - #227 added repository groups permissions - markdown gets codehilite extensions -- new API methods, delete_repositories, grante/revoke permissions for groups +- new API methods, delete_repositories, grante/revoke permissions for groups and repos - - + + fixes +++++ @@ -522,15 +599,15 @@ fixes - fixed sorting of repo tables - #326 escape of special html entities in diffs - normalized user_name => username in api attributes -- fixes #298 ldap created users with mixed case emails created conflicts +- fixes #298 ldap created users with mixed case emails created conflicts on saving a form -- fixes issue when owner of a repo couldn't revoke permissions for users +- fixes issue when owner of a repo couldn't revoke permissions for users and groups - fixes #271 rare JSON serialization problem with statistics - fixes #337 missing validation check for conflicting names of a group with a - repositories group + repository group - #340 fixed session problem for mysql and celery tasks -- fixed #331 RhodeCode mangles repository names if the a repository group +- fixed #331 RhodeCode mangles repository names if the a repository group contains the "full path" to the repositories - #355 RhodeCode doesn't store encrypted LDAP passwords @@ -551,7 +628,7 @@ fixes operation leading to crash. - fixed missing email in account page. - Reverted Mercurial to 2.0.1 for windows due to bug in Mercurial that makes - forking on windows impossible + forking on windows impossible 1.2.4 (**2012-01-19**) ---------------------- @@ -563,23 +640,23 @@ news full support to largefiles extension. Enabled by default in new installations - #329 Ability to Add/Remove Groups to/from a Repository via AP - added requires.txt file with requirements - + fixes +++++ - fixes db session issues with celery when emailing admins -- #331 RhodeCode mangles repository names if the a repository group +- #331 RhodeCode mangles repository names if the a repository group contains the "full path" to the repositories - #298 Conflicting e-mail addresses for LDAP and RhodeCode users - DB session cleanup after hg protocol operations, fixes issues with `mysql has gone away` errors - #333 doc fixes for get_repo api function - #271 rare JSON serialization problem with statistics enabled -- #337 Fixes issues with validation of repository name conflicting with +- #337 Fixes issues with validation of repository name conflicting with a group name. A proper message is now displayed. - #292 made ldap_dn in user edit readonly, to get rid of confusion that field - doesn't work -- #316 fixes issues with web description in hgrc files + doesn't work +- #316 fixes issues with web description in hgrc files 1.2.3 (**2011-11-02**) ---------------------- @@ -587,21 +664,21 @@ 1.2.3 (**2011-11-02**) news ++++ -- added option to manage repos group for non admin users -- added following API methods for get_users, create_user, get_users_groups, - get_users_group, create_users_group, add_user_to_users_groups, get_repos, +- added option to manage repository group for non admin users +- added following API methods for get_users, create_user, get_users_groups, + get_users_group, create_users_group, add_user_to_users_groups, get_repos, get_repo, create_repo, add_user_to_repo -- implements #237 added password confirmation for my account +- implements #237 added password confirmation for my account and admin edit user. - implements #291 email notification for global events are now sent to all administrator users, and global config email. - + fixes +++++ - added option for passing auth method for smtp mailer - #276 issue with adding a single user with id>10 to usergroups -- #277 fixes windows LDAP settings in which missing values breaks the ldap auth +- #277 fixes windows LDAP settings in which missing values breaks the ldap auth - #288 fixes managing of repos in a group for non admin user 1.2.2 (**2011-10-17**) @@ -611,17 +688,17 @@ news ++++ - #226 repo groups are available by path instead of numerical id - + fixes +++++ - #259 Groups with the same name but with different parent group - #260 Put repo in group, then move group to another group -> repo becomes unavailable - #258 RhodeCode 1.2 assumes egg folder is writable (lockfiles problems) -- #265 ldap save fails sometimes on converting attributes to booleans, +- #265 ldap save fails sometimes on converting attributes to booleans, added getter and setter into model that will prevent from this on db model level - fixed problems with timestamps issues #251 and #213 -- fixes #266 RhodeCode allows to create repo with the same name and in +- fixes #266 RhodeCode allows to create repo with the same name and in the same parent as group - fixes #245 Rescan of the repositories on Windows - fixes #248 cannot edit repos inside a group on windows @@ -637,7 +714,7 @@ news fixes +++++ -- fixed problems with basic auth and push problems +- fixed problems with basic auth and push problems - gui fixes - fixed logger @@ -655,30 +732,30 @@ news - implemented #84 downloads can be enabled/disabled for each repository - anonymous repository can be cloned without having to pass default:default into clone url -- fixed #90 whoosh indexer can index chooses repositories passed in command +- fixed #90 whoosh indexer can index chooses repositories passed in command line - extended journal with day aggregates and paging - implemented #107 source code lines highlight ranges -- implemented #93 customizable changelog on combined revision ranges - - equivalent of githubs compare view +- implemented #93 customizable changelog on combined revision ranges - + equivalent of githubs compare view - implemented #108 extended and more powerful LDAP configuration -- implemented #56 users groups +- implemented #56 user groups - major code rewrites optimized codes for speed and memory usage - raw and diff downloads are now in git format - setup command checks for write access to given path - fixed many issues with international characters and unicode. It uses utf8 decode with replace to provide less errors even with non utf8 encoded strings - #125 added API KEY access to feeds -- #109 Repository can be created from external Mercurial link (aka. remote +- #109 Repository can be created from external Mercurial link (aka. remote repository, and manually updated (via pull) from admin panel - beta git support - push/pull server + basic view for git repos - added followers page and forks page -- server side file creation (with binary file upload interface) - and edition with commits powered by codemirror -- #111 file browser file finder, quick lookup files on whole file tree +- server side file creation (with binary file upload interface) + and edition with commits powered by codemirror +- #111 file browser file finder, quick lookup files on whole file tree - added quick login sliding menu into main page -- changelog uses lazy loading of affected files details, in some scenarios - this can improve speed of changelog page dramatically especially for +- changelog uses lazy loading of affected files details, in some scenarios + this can improve speed of changelog page dramatically especially for larger repositories. - implements #214 added support for downloading subrepos in download menu. - Added basic API for direct operations on rhodecode via JSON @@ -687,7 +764,7 @@ news fixes +++++ -- fixed file browser bug, when switching into given form revision the url was +- fixed file browser bug, when switching into given form revision the url was not changing - fixed propagation to error controller on simplehg and simplegit middlewares - fixed error when trying to make a download on empty repository @@ -696,8 +773,8 @@ fixes - journal fork fixes - removed issue with space inside renamed repository after deletion - fixed strange issue on formencode imports -- fixed #126 Deleting repository on Windows, rename used incompatible chars. -- #150 fixes for errors on repositories mapped in db but corrupted in +- fixed #126 Deleting repository on Windows, rename used incompatible chars. +- #150 fixes for errors on repositories mapped in db but corrupted in filesystem - fixed problem with ascendant characters in realm #181 - fixed problem with sqlite file based database connection pool @@ -707,12 +784,12 @@ fixes - fixes issue #197 Relative paths for pidlocks - fixes issue #198 password will require only 3 chars now for login form - fixes issue #199 wrong redirection for non admin users after creating a repository -- fixes issues #202, bad db constraint made impossible to attach same group +- fixes issues #202, bad db constraint made impossible to attach same group more than one time. Affects only mysql/postgres - fixes #218 os.kill patch for windows was missing sig param -- improved rendering of dag (they are not trimmed anymore when number of +- improved rendering of dag (they are not trimmed anymore when number of heads exceeds 5) - + 1.1.8 (**2011-04-12**) ---------------------- @@ -739,7 +816,7 @@ fixes - fixed problems with displaying binary files, thanks to Thomas Waldmann - removed name from archive files since it's breaking ui for long repo names - fixed issue with archive headers sent to browser, thanks to Thomas Waldmann -- fixed compatibility for 1024px displays, and larger dpi settings, thanks to +- fixed compatibility for 1024px displays, and larger dpi settings, thanks to Thomas Waldmann - fixed issue #166 summary pager was skipping 10 revisions on second page @@ -783,8 +860,8 @@ fixes - fixed sorting by author in main page - fixed crashes with diffs on binary files - fixed #131 problem with boolean values for LDAP -- fixed #122 mysql problems thanks to striker69 -- fixed problem with errors on calling raw/raw_files/annotate functions +- fixed #122 mysql problems thanks to striker69 +- fixed problem with errors on calling raw/raw_files/annotate functions with unknown revisions - fixed returned rawfiles attachment names with international character - cleaned out docs, big thanks to Jason Harris @@ -801,7 +878,7 @@ fixes - fixed formencode import problem on settings page, that caused server crash when that page was accessed as first after server start - journal fixes -- fixed option to access repository just by entering http://server/ +- fixed option to access repository just by entering http://server/ 1.1.3 (**2011-02-16**) ---------------------- @@ -816,11 +893,11 @@ news fixes +++++ -- fixed ehlo command and non auth mail servers on smtp_lib. Thanks to +- fixed ehlo command and non auth mail servers on smtp_lib. Thanks to apollo13 and Johan Walles - small fixes in journal - fixed problems with getting setting for celery from .ini files -- registration, password reset and login boxes share the same title as main +- registration, password reset and login boxes share the same title as main application now - fixed #113: to high permissions to fork repository - fixed problem with '[' chars in commit messages in journal @@ -841,11 +918,11 @@ fixes - fixes #98 protection against float division of percentage stats - fixed graph bug -- forced webhelpers version since it was making troubles during installation +- forced webhelpers version since it was making troubles during installation 1.1.1 (**2011-01-06**) ---------------------- - + news ++++ @@ -869,10 +946,10 @@ news ++++ - rewrite of internals for vcs >=0.1.10 -- uses mercurial 1.7 with dotencode disabled for maintaining compatibility +- uses mercurial 1.7 with dotencode disabled for maintaining compatibility with older clients - anonymous access, authentication via ldap -- performance upgrade for cached repos list - each repository has its own +- performance upgrade for cached repos list - each repository has its own cache that's invalidated when needed. - performance upgrades on repositories with large amount of commits (20K+) - main page quick filter for filtering repositories @@ -882,7 +959,7 @@ news - more detailed action logger (based on hooks) with pushed changesets lists and options to disable those hooks from admin panel - introduced new enhanced changelog for merges that shows more accurate results -- new improved and faster code stats (based on pygments lexers mapping tables, +- new improved and faster code stats (based on pygments lexers mapping tables, showing up to 10 trending sources for each repository. Additionally stats can be disabled in repository settings. - gui optimizations, fixed application width to 1024px @@ -903,10 +980,10 @@ fixes - a lot of fixes and tweaks for file browser - fixed detached session issues - fixed when user had no repos he would see all repos listed in my account -- fixed ui() instance bug when global hgrc settings was loaded for server +- fixed ui() instance bug when global hgrc settings was loaded for server instance and all hgrc options were merged with our db ui() object - numerous small bugfixes - + (special thanks for TkSoh for detailed feedback) @@ -971,6 +1048,6 @@ 1.0.0rc3 (**2010-10-11**) 1.0.0rc2 (**2010-10-11**) ------------------------- -- Disabled dirsize in file browser, it's causing nasty bug when dir renames +- Disabled dirsize in file browser, it's causing nasty bug when dir renames occure. After vcs is fixed it'll be put back again. - templating/css rewrites, optimized css. diff --git a/docs/contributing.rst b/docs/contributing.rst --- a/docs/contributing.rst +++ b/docs/contributing.rst @@ -10,9 +10,9 @@ greatly appreciated! Could I request that you make your source contributions by first forking the RhodeCode repository on bitbucket_ https://bitbucket.org/marcinkuzminski/rhodecode and then make your changes to -your forked repository. Please post all fixes into **BETA** branch since your +your forked repository. Please post all fixes into **BETA** branch since your fix might be already fixed there and i try to merge all fixes from beta into -stable, and not the other way. Finally, when you are finished making a change, +stable, and not the other way. Finally, when you are finished making a change, please send me a pull request. To run RhodeCode in a development version you always need to install the latest @@ -22,7 +22,7 @@ after downloading/pulling RhodeCode make python setup.py develop -command to install/verify all required packages, and prepare development +command to install/verify all required packages, and prepare development enviroment. diff --git a/docs/index.rst b/docs/index.rst --- a/docs/index.rst +++ b/docs/index.rst @@ -13,7 +13,7 @@ Users Guide installation setup upgrade - + **Usage** .. toctree:: @@ -33,7 +33,7 @@ Users Guide .. toctree:: :maxdepth: 1 - + contributing changelog @@ -44,7 +44,7 @@ Users Guide api/api api/models - + Other topics ------------ @@ -61,4 +61,4 @@ Other topics .. _git: http://git-scm.com/ .. _celery: http://celeryproject.org/ .. _Sphinx: http://sphinx.pocoo.org/ -.. _vcs: http://pypi.python.org/pypi/vcs \ No newline at end of file +.. _vcs: http://pypi.python.org/pypi/vcs diff --git a/docs/installation.rst b/docs/installation.rst --- a/docs/installation.rst +++ b/docs/installation.rst @@ -4,8 +4,8 @@ Installation ============ -``RhodeCode`` is written entirely in Python. Before posting any issues make -sure, your not missing any system libraries and using right version of +``RhodeCode`` is written entirely in Python. Before posting any issues make +sure, your not missing any system libraries and using right version of libraries required by RhodeCode. There's also restriction in terms of mercurial clients. Minimal version of hg client known working fine with RhodeCode is **1.6**. If you're using older client, please upgrade. @@ -41,14 +41,14 @@ Step by step installation example for Li For installing RhodeCode i highly recommend using separate virtualenv_. This way many required by RhodeCode libraries will remain sandboxed from your main -python and making things less problematic when doing system python updates. +python and making things less problematic when doing system python updates. Alternative very detailed installation instructions for Ubuntu Server with celery, indexer and daemon scripts: https://gist.github.com/4546398 -- Assuming you have installed virtualenv_ create a new virtual environment - using virtualenv command:: +- Assuming you have installed virtualenv_ create a new virtual environment + using virtualenv command:: virtualenv --no-site-packages /opt/rhodecode-venv @@ -63,7 +63,7 @@ celery, indexer and daemon scripts: http Python's "main" site-packages dir. -- this will install new virtualenv_ into `/opt/rhodecode-venv`. +- this will install new virtualenv_ into `/opt/rhodecode-venv`. - Activate the virtualenv_ by running:: source /opt/rhodecode-venv/bin/activate @@ -71,52 +71,52 @@ celery, indexer and daemon scripts: http .. note:: If you're using UNIX, *do not* use ``sudo`` to run the ``virtualenv`` script. It's perfectly acceptable (and desirable) to create a virtualenv as a normal user. - -- Make a folder for rhodecode data files, and configuration somewhere on the + +- Make a folder for rhodecode data files, and configuration somewhere on the filesystem. For example:: mkdir /opt/rhodecode - - + + - Go into the created directory run this command to install rhodecode:: easy_install rhodecode - + or:: - - pip install rhodecode -- This will install rhodecode together with pylons and all other required + pip install rhodecode + +- This will install rhodecode together with pylons and all other required python libraries into activated virtualenv Requirements for Celery (optional) ---------------------------------- In order to gain maximum performance -there are some third-party you must install. When RhodeCode is used +there are some third-party you must install. When RhodeCode is used together with celery you have to install some kind of message broker, recommended one is rabbitmq_ to make the async tasks work. Of course RhodeCode works in sync mode also and then you do not have to install -any third party applications. However, using Celery_ will give you a large -speed improvement when using many big repositories. If you plan to use -RhodeCode for say 7 to 10 repositories, RhodeCode will perform perfectly well +any third party applications. However, using Celery_ will give you a large +speed improvement when using many big repositories. If you plan to use +RhodeCode for say 7 to 10 repositories, RhodeCode will perform perfectly well without celery running. - -If you make the decision to run RhodeCode with celery make sure you run -celeryd using paster and message broker together with the application. + +If you make the decision to run RhodeCode with celery make sure you run +celeryd using paster and message broker together with the application. .. note:: Installing message broker and using celery is optional, RhodeCode will work perfectly fine without them. -**Message Broker** +**Message Broker** - preferred is `RabbitMq `_ - A possible alternative is `Redis `_ -For installation instructions you can visit: +For installation instructions you can visit: http://ask.github.com/celery/getting-started/index.html. This is a very nice tutorial on how to start using celery_ with rabbitmq_ @@ -126,7 +126,7 @@ You can now proceed to :ref:`setup` -.. _virtualenv: http://pypi.python.org/pypi/virtualenv +.. _virtualenv: http://pypi.python.org/pypi/virtualenv .. _python: http://www.python.org/ .. _mercurial: http://mercurial.selenic.com/ .. _celery: http://celeryproject.org/ diff --git a/docs/installation_win.rst b/docs/installation_win.rst --- a/docs/installation_win.rst +++ b/docs/installation_win.rst @@ -47,7 +47,7 @@ choose "Visual C++ 2008 Express" when in required, you can uncheck them .. note:: - + 64bit: You also need to install the Microsoft Windows SDK for .NET 3.5 SP1 (.NET 4.0 won't work). Download from: http://www.microsoft.com/en-us/download/details.aspx?id=3138 @@ -90,7 +90,7 @@ http://sourceforge.net/projects/pywin32/ .. note:: 64bit: Download and install the 64bit version. - At the time of writing you can find this at: + At the time of writing you can find this at: http://sourceforge.net/projects/pywin32/files/pywin32/Build%20218/pywin32-218.win-amd64-py2.7.exe/download Step4 - Python BIN diff --git a/docs/setup.rst b/docs/setup.rst --- a/docs/setup.rst +++ b/docs/setup.rst @@ -478,7 +478,7 @@ Changing default encoding By default RhodeCode uses utf8 encoding, starting from 1.3 series this can be changed, simply edit default_encoding in .ini file to desired one. -This affects many parts in rhodecode including commiters names, filenames, +This affects many parts in rhodecode including committers names, filenames, encoding of commit messages. In addition RhodeCode can detect if `chardet` library is installed. If `chardet` is detected RhodeCode will fallback to it when there are encode/decode errors. @@ -652,7 +652,7 @@ Add the following at the end of the .ini prefix = / -then change into your choosen prefix +then change into your chosen prefix Apache's WSGI config -------------------- diff --git a/docs/theme/nature/layout.html b/docs/theme/nature/layout.html --- a/docs/theme/nature/layout.html +++ b/docs/theme/nature/layout.html @@ -3,16 +3,16 @@ {% block sidebarlogo %}

Support RhodeCode development.

-
- - - - -
+
+ + + + +
Flattr this -
+
{% endblock %}} diff --git a/docs/theme/nature/static/pygments.css b/docs/theme/nature/static/pygments.css --- a/docs/theme/nature/static/pygments.css +++ b/docs/theme/nature/static/pygments.css @@ -51,4 +51,4 @@ .vc { color: #ff99ff } /* Name.Variable.Class */ .vg { color: #ff99ff } /* Name.Variable.Global */ .vi { color: #ff99ff } /* Name.Variable.Instance */ -.il { color: #009999 } /* Literal.Number.Integer.Long */ \ No newline at end of file +.il { color: #009999 } /* Literal.Number.Integer.Long */ diff --git a/docs/usage/backup.rst b/docs/usage/backup.rst --- a/docs/usage/backup.rst +++ b/docs/usage/backup.rst @@ -23,4 +23,4 @@ Database When using sqlite just copy rhodecode.db. Any other database engine requires a manual backup operation. -Database backup will contain all gathered statistics \ No newline at end of file +Database backup will contain all gathered statistics diff --git a/docs/usage/debugging.rst b/docs/usage/debugging.rst --- a/docs/usage/debugging.rst +++ b/docs/usage/debugging.rst @@ -14,7 +14,7 @@ enable detailed debug RhodeCode uses standard python logging modules to log it's output. By default only loggers with INFO level are displayed. To enable full output -change `level = DEBUG` for all logging handlers in currently used .ini file. +change `level = DEBUG` for all logging handlers in currently used .ini file. This change will allow to see much more detailed output in the logfile or console. This generally helps a lot to track issues. diff --git a/docs/usage/general.rst b/docs/usage/general.rst --- a/docs/usage/general.rst +++ b/docs/usage/general.rst @@ -38,7 +38,7 @@ Compare view from changelog Checkboxes in compare view allow users to view combined compare view. You can only show the range between the first and last checkbox (no cherry pick). Clicking more than one checkbox will activate a link in top saying -`Show selected changes -> ` clicking this will bring +`Show selected changesets -> ` clicking this will bring compare view. In this view also it's possible to switch to combined compare. Compare view is also available from the journal on pushes having more than @@ -105,7 +105,7 @@ Currently it support following options: .. note:: - * `svn -> hg` cloning requires `hgsubversion` library to be installed.* + - *`svn -> hg` cloning requires `hgsubversion` library to be installed.* If you need to clone repositories that are protected via basic auth, you might pass the url with stored credentials inside eg. 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 @@ -11,10 +11,10 @@ client installed on the machine to make Although There is one limitation on git usage. - 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 +http server that supports chunked encoding which git http protocol uses, +i recommend using waitress_ or gunicorn_ (linux only) for `paste` wsgi app replacement. Starting from version 1.4 waitress_ is the default wsgi server used in RhodeCode. @@ -23,33 +23,33 @@ To use, simply change change the followi use = egg:Paste#http to:: - + use = egg:waitress#main or:: use = egg:gunicorn#main - - + + And comment out bellow options:: - threadpool_workers = - threadpool_max_requests = - use_threadpool = - + threadpool_workers = + threadpool_max_requests = + use_threadpool = + You can simply run `paster serve` as usual. - -You can always disable git/hg support by editing a + +You can always disable git/hg support by editing a file **rhodecode/__init__.py** and commenting out backends .. code-block:: python - + BACKENDS = { 'hg': 'Mercurial repository', #'git': 'Git repository', } .. _waitress: http://pypi.python.org/pypi/waitress -.. _gunicorn: http://pypi.python.org/pypi/gunicorn \ No newline at end of file +.. _gunicorn: http://pypi.python.org/pypi/gunicorn diff --git a/docs/usage/locking.rst b/docs/usage/locking.rst --- a/docs/usage/locking.rst +++ b/docs/usage/locking.rst @@ -5,37 +5,37 @@ RhodeCode repository locking system =================================== -| Repos with **locking function=disabled** is the default, that's how repos work +| Repos with **locking function=disabled** is the default, that's how repos work today. | Repos with **locking function=enabled** behaves like follows: Repos have a state called `locked` that can be true or false. -The hg/git commands `hg/git clone`, `hg/git pull`, and `hg/git push` +The hg/git commands `hg/git clone`, `hg/git pull`, and `hg/git push` influence this state: -- The command `hg/git pull ` will lock that repo (locked=true) +- The command `hg/git pull ` will lock that repo (locked=true) if the user has write/admin permissions on this repo -- The command `hg/git clone ` will lock that repo (locked=true) if the +- The command `hg/git clone ` will lock that repo (locked=true) if the user has write/admin permissions on this repo RhodeCode will remember the user id who locked the repo -only this specific user can unlock the repo (locked=false) by calling +only this specific user can unlock the repo (locked=false) by calling -- `hg/git push ` +- `hg/git push ` -every other command on that repo from this user and +every other command on that repo from this user and every command from any other user will result in http return code 423 (locked) -additionally the http error includes the that locked the repo +additionally the http error includes the that locked the repo (e.g. “repository locked by user ”) -So the scenario of use for repos with `locking function` enabled is that +So the scenario of use for repos with `locking function` enabled is that every initial clone and every pull gives users (with write permission) the exclusive right to do a push. -Each repo can be manually unlocked by admin from the repo settings menu. \ No newline at end of file +Each repo can be manually unlocked by admin from the repo settings menu. diff --git a/docs/usage/performance.rst b/docs/usage/performance.rst --- a/docs/usage/performance.rst +++ b/docs/usage/performance.rst @@ -13,7 +13,8 @@ the best performance. more important to have faster disk than faster CPU. * Slowness on initial page can be easily fixed by grouping repositories, and/or - increasing cache size (see below) + increasing cache size (see below), that includes using lightweight dashboard + option and vcs_full_cache setting in .ini file Follow these few steps to improve performance of RhodeCode system. @@ -22,7 +23,7 @@ Follow these few steps to improve perfor 1. Increase cache in the .ini file:: - + beaker.cache.sql_cache_long.expire=3600 <-- set this to higher number This option affects the cache expiration time for main page. Having @@ -33,18 +34,29 @@ 1. Increase cache system and it will expire cache for repositories that had been changed. 2. Switch from sqlite to postgres or mysql - + sqlite is a good option when having small load on the system. But due to locking issues with sqlite, it's not recommended to use it for larger setup. Switching to mysql or postgres will result in a immediate performance increase. - + 3. Scale RhodeCode horizontally - - running two or more instances on the same server can speed up things a lot - - load balance using round robin or ip hash - - you need to handle consistent user session storage by switching to - db sessions, client side sessions or sharing session data folder across - instances. See http://beaker.readthedocs.org/ docs for details. - - remember that each instance needs it's own .ini file and unique - `instance_id` set in them \ No newline at end of file + Scaling horizontally can give huge performance increase when dealing with + large traffic (large amount of users, CI servers etc). RhodeCode can be + scaled horizontally on one (recommended) or multiple machines. In order + to scale horizontally you need to do the following: + + - each instance needs it's own .ini file and unique `instance_id` set in them + - each instance `data` storage needs to be configured to be stored on a + shared disk storage, preferably together with repositories. This `data` + dir contains template caches, sessions, whoosh index and it's used for + tasks locking (so it's safe across multiple instances). Set the + `cache_dir`, `index_dir`, `beaker.cache.data_dir`, `beaker.cache.lock_dir` + variables in each .ini file to shared location across RhodeCode instances + - if celery is used each instance should run separate celery instance, but + the message broken should be common to all of them (ex one rabbitmq + shared server) + - load balance using round robin or ip hash, recommended is writing LB rules + that will separate regular user traffic from automated processes like CI + servers or build bots. diff --git a/docs/usage/subrepos.rst b/docs/usage/subrepos.rst --- a/docs/usage/subrepos.rst +++ b/docs/usage/subrepos.rst @@ -5,14 +5,14 @@ working with RhodeCode and mercurial sub ============================================= example usage of Subrepos with RhodeCode:: - + ## init a simple repo - hg init repo1 + hg init repo1 cd repo1 echo "file1" > file1 - hg add file1 + hg add file1 hg ci --message "initial file 1" - + #clone subrepo we want to add hg clone http://rc.local/subrepo @@ -22,7 +22,7 @@ example usage of Subrepos with RhodeCode 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. @@ -34,4 +34,4 @@ Next we can edit the subrepo data, and p both of repositories. see http://mercurial.aragost.com/kick-start/en/subrepositories/ for more -information about subrepositories \ No newline at end of file +information about subrepositories diff --git a/init.d/rhodecode-daemon2 b/init.d/rhodecode-daemon2 --- a/init.d/rhodecode-daemon2 +++ b/init.d/rhodecode-daemon2 @@ -2,7 +2,7 @@ ######################################## #### THIS IS A DEBIAN INIT.D SCRIPT #### ######################################## - + ### BEGIN INIT INFO # Provides: rhodecode # Required-Start: $all @@ -12,29 +12,29 @@ # Short-Description: starts instance of rhodecode # Description: starts instance of rhodecode using start-stop-daemon ### END INIT INFO - + APP_NAME="rhodecode" -APP_HOMEDIR="marcink/python_workspace" -APP_PATH="/home/$APP_HOMEDIR/$APP_NAME" - +APP_HOMEDIR="opt" +APP_PATH="/$APP_HOMEDIR/$APP_NAME" + CONF_NAME="production.ini" - + PID_PATH="$APP_PATH/$APP_NAME.pid" LOG_PATH="$APP_PATH/$APP_NAME.log" - -PYTHON_PATH="/home/$APP_HOMEDIR/v-env" - -RUN_AS="marcink" - + +PYTHON_PATH="/$APP_HOMEDIR/$APP_NAME-venv" + +RUN_AS="root" + DAEMON="$PYTHON_PATH/bin/paster" - + DAEMON_OPTS="serve --daemon \ - --user=$RUN_AS \ - --group=$RUN_AS \ - --pid-file=$PID_PATH \ - --log-file=$LOG_PATH $APP_PATH/$CONF_NAME" - - + --user=$RUN_AS \ + --group=$RUN_AS \ + --pid-file=$PID_PATH \ + --log-file=$LOG_PATH $APP_PATH/$CONF_NAME" + + start() { echo "Starting $APP_NAME" PYTHON_EGG_CACHE="/tmp" start-stop-daemon -d $APP_PATH \ @@ -43,19 +43,33 @@ start() { --user $RUN_AS \ --exec $DAEMON -- $DAEMON_OPTS } - + stop() { echo "Stopping $APP_NAME" start-stop-daemon -d $APP_PATH \ --stop --quiet \ --pidfile $PID_PATH || echo "$APP_NAME - Not running!" - + if [ -f $PID_PATH ]; then rm $PID_PATH fi } - + +status() { + echo -n "Checking status of $APP_NAME ... " + pid=`cat $PID_PATH` + status=`ps ax | grep $pid | grep -ve grep` + if [ "$?" -eq 0 ]; then + echo "running" + else + echo "NOT running" + fi +} + case "$1" in + status) + status + ;; start) start ;; @@ -73,4 +87,4 @@ case "$1" in *) echo "Usage: $0 {start|stop|restart}" exit 1 -esac +esac \ No newline at end of file diff --git a/production.ini b/production.ini --- a/production.ini +++ b/production.ini @@ -25,59 +25,92 @@ pdebug = false #smtp_port = #smtp_use_tls = false #smtp_use_ssl = true -# Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) +## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) #smtp_auth = [server:main] ## PASTE -##nr of threads to spawn +## nr of threads to spawn #threadpool_workers = 5 -##max request before thread respawn +## max request before thread respawn #threadpool_max_requests = 10 -##option to use threads of process +## option to use threads of process #use_threadpool = true #use = egg:Paste#http -#WAITRESS +## WAITRESS threads = 5 +## 100GB +max_request_body_size = 107374182400 use = egg:waitress#main host = 127.0.0.1 port = 8001 -[filter:proxy-prefix] -# prefix middleware for rc -use = egg:PasteDeploy#prefix -prefix = / +## prefix middleware for rc +#[filter:proxy-prefix] +#use = egg:PasteDeploy#prefix +#prefix = / [app:main] use = egg:rhodecode +## enable proxy prefix middleware #filter-with = proxy-prefix + full_stack = true static_files = true -# Optional Languages -# en, fr, ja, pt_BR, zh_CN, zh_TW, pl +## Optional Languages +## en, fr, ja, pt_BR, zh_CN, zh_TW, pl lang = en cache_dir = %(here)s/data index_dir = %(here)s/data/index + +## uncomment and set this path to use archive download cache +#archive_cache_dir = /tmp/tarballcache + +## change this to unique ID for security app_instance_uuid = rc-production + +## cut off limit for large diffs (size in bytes) cut_off_limit = 256000 -vcs_full_cache = True + +## use cache version of scm repo everywhere +vcs_full_cache = true + +## force https in RhodeCode, fixes https redirects, assumes it's always https force_https = false -commit_parse_limit = 50 -# number of items displayed in lightweight dashboard before paginating + +## use Strict-Transport-Security headers +use_htsts = false + +## number of commits stats will parse on each iteration +commit_parse_limit = 25 + +## number of items displayed in lightweight dashboard before paginating is shown dashboard_items = 100 + +## use gravatar service to display avatars use_gravatar = true +## path to git executable +git_path = git + +## git rev filter option, --all is the default filter, if you need to +## hide all refs in changelog switch this to --branches --tags +git_rev_filter=--all + ## RSS feed options - rss_cut_off_limit = 256000 rss_items_per_page = 10 rss_include_diff = false +## options for showing and identifying changesets +show_sha_length = 12 +show_revision_number = true + ## alternative_gravatar_url allows you to use your own avatar server application ## the following parts of the URL will be replaced @@ -89,8 +122,11 @@ rss_include_diff = false #alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size} #alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size} + +## container auth options 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 @@ -146,6 +182,11 @@ instance_id = ## handling that. Set this variable to 403 to return HTTPForbidden auth_ret_code = +## locking return code. When repository is locked return this HTTP code. 2XX +## codes don't break the transactions while 4XX codes do +lock_ret_code = 423 + + #################################### ### CELERY CONFIG #### #################################### @@ -170,7 +211,7 @@ celeryd.concurrency = 2 celeryd.log.level = debug celeryd.max.tasks.per.child = 1 -#tasks will never be sent to the queue, but executed locally instead. +## tasks will never be sent to the queue, but executed locally instead. celery.always.eager = false #################################### @@ -226,18 +267,19 @@ beaker.cache.sql_cache_long.key_length = beaker.session.key = rhodecode -## secure cookie requires AES python libraries ## -#beaker.session.encrypt_key = g654dcno0-9873jhgfreyu -#beaker.session.validate_key = 9712sds2212c--zxc123 +## secure cookie requires AES python libraries +#beaker.session.encrypt_key = +#beaker.session.validate_key = + ## sets session as invalid if it haven't been accessed for given amount of time beaker.session.timeout = 2592000 beaker.session.httponly = true #beaker.session.cookie_path = / -## uncomment for https secure cookie ## +## uncomment for https secure cookie beaker.session.secure = false -## auto save the session to not to use .save() ## +## auto save the session to not to use .save() beaker.session.auto = False ## default cookie expiration time in seconds `true` expire at browser close ## @@ -252,57 +294,57 @@ beaker.session.auto = False ### [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 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 enabled +errormator = false errormator.server_url = https://api.errormator.com errormator.api_key = YOUR_API_KEY -# TWEAK AMOUNT OF INFO SENT HERE +## TWEAK AMOUNT OF INFO SENT HERE -# enables 404 error logging (default False) +## enables 404 error logging (default False) errormator.report_404 = false -# time in seconds after request is considered being slow (default 1) +## 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) +## 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 +## enable hooking to application loggers # errormator.logging = true -# minimum log level for log capture +## minimum log level for log capture # errormator.logging.level = WARNING -# send logs only from erroneous/slow requests -# (saves API quota for intensive logging) +## 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 +## 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 +## 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) +## 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 = @@ -310,8 +352,8 @@ errormator.log_namespace_blacklist = ### [sentry] ### ################ -# sentry is a alternative open source error aggregator -# you must install python packages `sentry` and `raven` to enable +## sentry is a alternative open source error aggregator +## you must install python packages `sentry` and `raven` to enable sentry.dsn = YOUR_DNS sentry.servers = @@ -371,7 +413,7 @@ handlers = console level = DEBUG handlers = qualname = routes.middleware -# "level = DEBUG" logs the route matched and routing variables. +## "level = DEBUG" logs the route matched and routing variables. propagate = 1 [logger_beaker] diff --git a/requires.txt b/requires.txt deleted file mode 100644 --- a/requires.txt +++ /dev/null @@ -1,20 +0,0 @@ -waitress==0.8.1 -webob==1.0.8 -Pylons==1.0.0 -Beaker==1.6.4 -WebHelpers==1.3 -formencode==1.2.4 -SQLAlchemy==0.7.8 -Mako==0.7.2 -pygments>=1.5 -whoosh>=2.4.0,<2.5 -celery>=2.2.5,<2.3 -babel -python-dateutil>=1.5.0,<2.0.0 -dulwich>=0.8.5,<0.9.0 -markdown==2.1.1 -docutils==0.8.1 -simplejson==2.5.2 -mock -py-bcrypt -mercurial==2.3.0 \ No newline at end of file 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, 5, 4) +VERSION = (1, 6, 0, 'rc1') 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__ = 10 # defines current db version for migrations +__dbversion__ = 11 # defines current db version for migrations __platform__ = platform.system() __license__ = 'GPLv3' __py_version__ = sys.version_info diff --git a/rhodecode/bin/ldap_sync.conf b/rhodecode/bin/ldap_sync.conf new file mode 100644 --- /dev/null +++ b/rhodecode/bin/ldap_sync.conf @@ -0,0 +1,11 @@ +[default] +api_url = http://your.rhodecode.server:5000/_admin/api +api_user = admin +api_key = XXXXXXXXXXXX + +ldap_uri = ldap://your.ldap.server:389 +ldap_user = cn=rhodecode,ou=binders,dc=linaro,dc=org +ldap_key = XXXXXXXXX +base_dn = dc=linaro,dc=org + +sync_users = True \ No newline at end of file diff --git a/rhodecode/bin/ldap_sync.py b/rhodecode/bin/ldap_sync.py new file mode 100644 --- /dev/null +++ b/rhodecode/bin/ldap_sync.py @@ -0,0 +1,237 @@ +# 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 ldap +import urllib2 +import uuid +import json + +from ConfigParser import ConfigParser + +config = ConfigParser() +config.read('ldap_sync.conf') + + +class InvalidResponseIDError(Exception): + """ Request and response don't have the same UUID. """ + + +class RhodecodeResponseError(Exception): + """ Response has an error, something went wrong with request execution. """ + + +class UserAlreadyInGroupError(Exception): + """ User is already a member of the target group. """ + + +class UserNotInGroupError(Exception): + """ User is not a member of the target group. """ + + +class RhodecodeAPI(): + + def __init__(self, url, key): + self.url = url + self.key = key + + def get_api_data(self, uid, method, args): + """Prepare dict for API post.""" + return { + "id": uid, + "api_key": self.key, + "method": method, + "args": args + } + + def rhodecode_api_post(self, method, args): + """Send a generic API post to Rhodecode. + + This will generate the UUID for validation check after the + response is returned. Handle errors and get the result back. + """ + uid = str(uuid.uuid1()) + data = self.get_api_data(uid, method, args) + + data = json.dumps(data) + headers = {'content-type': 'text/plain'} + req = urllib2.Request(self.url, data, headers) + + response = urllib2.urlopen(req) + response = json.load(response) + + if uid != response["id"]: + raise InvalidResponseIDError("UUID does not match.") + + if response["error"] != None: + raise RhodecodeResponseError(response["error"]) + + return response["result"] + + def create_group(self, name, active=True): + """Create the Rhodecode user group.""" + args = { + "group_name": name, + "active": str(active) + } + self.rhodecode_api_post("create_users_group", args) + + def add_membership(self, group, username): + """Add specific user to a group.""" + args = { + "usersgroupid": group, + "userid": username + } + result = self.rhodecode_api_post("add_user_to_users_group", args) + if not result["success"]: + raise UserAlreadyInGroupError("User %s already in group %s." % + (username, group)) + + def remove_membership(self, group, username): + """Remove specific user from a group.""" + args = { + "usersgroupid": group, + "userid": username + } + result = self.rhodecode_api_post("remove_user_from_users_group", args) + if not result["success"]: + raise UserNotInGroupError("User %s not in group %s." % + (username, group)) + + def get_group_members(self, name): + """Get the list of member usernames from a user group.""" + args = {"usersgroupid": name} + members = self.rhodecode_api_post("get_users_group", args)['members'] + member_list = [] + for member in members: + member_list.append(member["username"]) + return member_list + + def get_group(self, name): + """Return group info.""" + args = {"usersgroupid": name} + return self.rhodecode_api_post("get_users_group", args) + + def get_user(self, username): + """Return user info.""" + args = {"userid": username} + return self.rhodecode_api_post("get_user", args) + + +class LdapClient(): + + def __init__(self, uri, user, key, base_dn): + self.client = ldap.initialize(uri, trace_level=0) + self.client.set_option(ldap.OPT_REFERRALS, 0) + self.client.simple_bind(user, key) + self.base_dn = base_dn + + def __del__(self): + self.client.unbind() + + def get_groups(self): + """Get all the groups in form of dict {group_name: group_info,...}.""" + searchFilter = "objectClass=groupOfUniqueNames" + result = self.client.search_s(self.base_dn, ldap.SCOPE_SUBTREE, + searchFilter) + + groups = {} + for group in result: + groups[group[1]['cn'][0]] = group[1] + + return groups + + def get_group_users(self, groups, group): + """Returns all the users belonging to a single group. + + Based on the list of groups and memberships, returns all the + users belonging to a single group, searching recursively. + """ + users = [] + for member in groups[group]["uniqueMember"]: + member = self.parse_member_string(member) + if member[0] == "uid": + users.append(member[1]) + elif member[0] == "cn": + users += self.get_group_users(groups, member[1]) + + return users + + def parse_member_string(self, member): + """Parses the member string and returns a touple of type and name. + + Unique member can be either user or group. Users will have 'uid' as + prefix while groups will have 'cn'. + """ + member = member.split(",")[0] + return member.split('=') + + +class LdapSync(object): + + def __init__(self): + self.ldap_client = LdapClient(config.get("default", "ldap_uri"), + config.get("default", "ldap_user"), + config.get("default", "ldap_key"), + config.get("default", "base_dn")) + self.rhodocode_api = RhodecodeAPI(config.get("default", "api_url"), + config.get("default", "api_key")) + + def update_groups_from_ldap(self): + """Add all the groups from LDAP to Rhodecode.""" + added = existing = 0 + groups = self.ldap_client.get_groups() + for group in groups: + try: + self.rhodecode_api.create_group(group) + added += 1 + except Exception: + existing += 1 + + return added, existing + + def update_memberships_from_ldap(self, group): + """Update memberships in rhodecode based on the LDAP groups.""" + groups = self.ldap_client.get_groups() + group_users = self.ldap_client.get_group_users(groups, group) + + # Delete memberships first from each group which are not part + # of the group any more. + rhodecode_members = self.rhodecode_api.get_group_members(group) + for rhodecode_member in rhodecode_members: + if rhodecode_member not in group_users: + try: + self.rhodocode_api.remove_membership(group, + rhodecode_member) + except UserNotInGroupError: + pass + + # Add memberships. + for member in group_users: + try: + self.rhodecode_api.add_membership(group, member) + except UserAlreadyInGroupError: + # TODO: handle somehow maybe.. + pass + + +if __name__ == '__main__': + sync = LdapSync() + print sync.update_groups_from_ldap() + + for gr in sync.ldap_client.get_groups(): + # TODO: exception when user does not exist during add membership... + # How should we handle this.. Either sync users as well at this step, + # or just ignore those who don't exist. If we want the second case, + # we need to find a way to recognize the right exception (we always get + # RhodecodeResponseError with no error code so maybe by return msg (?) + sync.update_memberships_from_ldap(gr) diff --git a/rhodecode/bin/rhodecode_api.py b/rhodecode/bin/rhodecode_api.py --- a/rhodecode/bin/rhodecode_api.py +++ b/rhodecode/bin/rhodecode_api.py @@ -238,7 +238,7 @@ def main(argv=None): try: margs = dict(map(lambda s: s.split(':', 1), other)) - except: + except Exception: sys.stderr.write('Error parsing arguments \n') sys.exit() 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 @@ -25,59 +25,92 @@ pdebug = false #smtp_port = #smtp_use_tls = false #smtp_use_ssl = true -# Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) +## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.) #smtp_auth = [server:main] ## PASTE -##nr of threads to spawn +## nr of threads to spawn #threadpool_workers = 5 -##max request before thread respawn +## max request before thread respawn #threadpool_max_requests = 10 -##option to use threads of process +## option to use threads of process #use_threadpool = true #use = egg:Paste#http -#WAITRESS +## WAITRESS threads = 5 +## 100GB +max_request_body_size = 107374182400 use = egg:waitress#main host = 127.0.0.1 port = 5000 -[filter:proxy-prefix] -# prefix middleware for rc -use = egg:PasteDeploy#prefix -prefix = / +## prefix middleware for rc +#[filter:proxy-prefix] +#use = egg:PasteDeploy#prefix +#prefix = / [app:main] use = egg:rhodecode +## enable proxy prefix middleware #filter-with = proxy-prefix + full_stack = true static_files = true -# Optional Languages -# en, fr, ja, pt_BR, zh_CN, zh_TW, pl +## Optional Languages +## en, fr, ja, pt_BR, zh_CN, zh_TW, pl lang = en cache_dir = %(here)s/data index_dir = %(here)s/data/index + +## uncomment and set this path to use archive download cache +#archive_cache_dir = /tmp/tarballcache + +## change this to unique ID for security app_instance_uuid = ${app_instance_uuid} + +## cut off limit for large diffs (size in bytes) cut_off_limit = 256000 -vcs_full_cache = True + +## use cache version of scm repo everywhere +vcs_full_cache = true + +## force https in RhodeCode, fixes https redirects, assumes it's always https force_https = false -commit_parse_limit = 50 -# number of items displayed in lightweight dashboard before paginating + +## use Strict-Transport-Security headers +use_htsts = false + +## number of commits stats will parse on each iteration +commit_parse_limit = 25 + +## number of items displayed in lightweight dashboard before paginating is shown dashboard_items = 100 + +## use gravatar service to display avatars use_gravatar = true +## path to git executable +git_path = git + +## git rev filter option, --all is the default filter, if you need to +## hide all refs in changelog switch this to --branches --tags +git_rev_filter=--all + ## RSS feed options - rss_cut_off_limit = 256000 rss_items_per_page = 10 rss_include_diff = false +## options for showing and identifying changesets +show_sha_length = 12 +show_revision_number = true + ## alternative_gravatar_url allows you to use your own avatar server application ## the following parts of the URL will be replaced @@ -89,8 +122,11 @@ rss_include_diff = false #alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size} #alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size} + +## container auth options 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 @@ -146,6 +182,11 @@ instance_id = ## handling that. Set this variable to 403 to return HTTPForbidden auth_ret_code = +## locking return code. When repository is locked return this HTTP code. 2XX +## codes don't break the transactions while 4XX codes do +lock_ret_code = 423 + + #################################### ### CELERY CONFIG #### #################################### @@ -170,7 +211,7 @@ celeryd.concurrency = 2 celeryd.log.level = debug celeryd.max.tasks.per.child = 1 -#tasks will never be sent to the queue, but executed locally instead. +## tasks will never be sent to the queue, but executed locally instead. celery.always.eager = false #################################### @@ -226,18 +267,19 @@ beaker.cache.sql_cache_long.key_length = beaker.session.key = rhodecode -## secure cookie requires AES python libraries ## -#beaker.session.encrypt_key = g654dcno0-9873jhgfreyu -#beaker.session.validate_key = 9712sds2212c--zxc123 +## secure cookie requires AES python libraries +#beaker.session.encrypt_key = +#beaker.session.validate_key = + ## sets session as invalid if it haven't been accessed for given amount of time beaker.session.timeout = 2592000 beaker.session.httponly = true #beaker.session.cookie_path = / -## uncomment for https secure cookie ## +## uncomment for https secure cookie beaker.session.secure = false -## auto save the session to not to use .save() ## +## auto save the session to not to use .save() beaker.session.auto = False ## default cookie expiration time in seconds `true` expire at browser close ## @@ -252,57 +294,57 @@ beaker.session.auto = False ### [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 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 enabled +errormator = false errormator.server_url = https://api.errormator.com errormator.api_key = YOUR_API_KEY -# TWEAK AMOUNT OF INFO SENT HERE +## TWEAK AMOUNT OF INFO SENT HERE -# enables 404 error logging (default False) +## enables 404 error logging (default False) errormator.report_404 = false -# time in seconds after request is considered being slow (default 1) +## 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) +## 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 +## enable hooking to application loggers # errormator.logging = true -# minimum log level for log capture +## minimum log level for log capture # errormator.logging.level = WARNING -# send logs only from erroneous/slow requests -# (saves API quota for intensive logging) +## 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 +## 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 +## 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) +## 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 = @@ -310,8 +352,8 @@ errormator.log_namespace_blacklist = ### [sentry] ### ################ -# sentry is a alternative open source error aggregator -# you must install python packages `sentry` and `raven` to enable +## sentry is a alternative open source error aggregator +## you must install python packages `sentry` and `raven` to enable sentry.dsn = YOUR_DNS sentry.servers = @@ -381,7 +423,7 @@ handlers = console level = DEBUG handlers = qualname = routes.middleware -# "level = DEBUG" logs the route matched and routing variables. +## "level = DEBUG" logs the route matched and routing variables. propagate = 1 [logger_beaker] diff --git a/rhodecode/config/environment.py b/rhodecode/config/environment.py --- a/rhodecode/config/environment.py +++ b/rhodecode/config/environment.py @@ -20,6 +20,7 @@ from rhodecode.lib.auth import set_avail from rhodecode.lib.utils import repo2db_mapper, make_ui, set_rhodecode_config,\ load_rcextensions, check_git_version from rhodecode.lib.utils2 import engine_from_config, str2bool +from rhodecode.lib.db_manage import DbManage from rhodecode.model import init_model from rhodecode.model.scm import ScmModel @@ -88,7 +89,7 @@ def load_environment(global_conf, app_co #check git version check_git_version() - + DbManage.check_waitress() # MULTIPLE DB configs # Setup the SQLAlchemy database engine sa_engine_db1 = engine_from_config(config, 'sqlalchemy.db1.') @@ -100,6 +101,12 @@ def load_environment(global_conf, app_co set_available_permissions(config) config['base_path'] = repos_path set_rhodecode_config(config) + + instance_id = rhodecode.CONFIG.get('instance_id') + if instance_id == '*': + instance_id = '%s-%s' % (os.uname()[1], os.getpid()) + rhodecode.CONFIG['instance_id'] = instance_id + # CONFIGURATION OPTIONS HERE (note: all config options will override # any Pylons config options) diff --git a/rhodecode/config/middleware.py b/rhodecode/config/middleware.py --- a/rhodecode/config/middleware.py +++ b/rhodecode/config/middleware.py @@ -15,6 +15,7 @@ from rhodecode.lib.middleware.simplehg i from rhodecode.lib.middleware.simplegit import SimpleGit from rhodecode.lib.middleware.https_fixup import HttpsFixup from rhodecode.config.environment import load_environment +from rhodecode.lib.middleware.wrapper import RequestWrapper def make_app(global_conf, full_stack=True, static_files=True, **app_conf): @@ -55,7 +56,7 @@ def make_app(global_conf, full_stack=Tru from rhodecode.lib.middleware.sentry import Sentry from rhodecode.lib.middleware.errormator import Errormator - if Errormator: + if Errormator and asbool(config['app_conf'].get('errormator')): app = Errormator(app, config) elif Sentry: app = Sentry(app, config) @@ -67,7 +68,7 @@ def make_app(global_conf, full_stack=Tru # need any pylons stack middleware in them app = SimpleHg(app, config) app = SimpleGit(app, config) - + app = RequestWrapper(app, config) # Display error documents for 401, 403, 404 status codes (and # 500 when debug is disabled) if asbool(config['debug']): 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 @@ -6,6 +6,14 @@ # build by pygments EXTRA_MAPPINGS = {} +# additional lexer definitions for custom files +# it's overrides pygments lexers, and uses defined name of lexer to colorize the +# files. Format is {'ext': 'lexer_name'} +# List of lexers can be printed running: +# python -c "import pprint;from pygments import lexers;pprint.pprint([(x[0], x[1]) for x in lexers.get_all_lexers()]);" + +EXTRA_LEXERS = {} + #============================================================================== # WHOOSH INDEX EXTENSIONS #============================================================================== diff --git a/rhodecode/config/routing.py b/rhodecode/config/routing.py --- a/rhodecode/config/routing.py +++ b/rhodecode/config/routing.py @@ -41,21 +41,32 @@ def make_map(config): if len(by_id) == 2 and by_id[1].isdigit() and by_id[0] == '': repo_name = Repository.get(by_id[1]).repo_name match_dict['repo_name'] = repo_name - except: + except Exception: pass return is_valid_repo(repo_name, config['base_path']) def check_group(environ, match_dict): """ - check for valid repositories group for proper 404 handling + check for valid repository group for proper 404 handling :param environ: :param match_dict: """ repos_group_name = match_dict.get('group_name') + return is_valid_repos_group(repos_group_name, config['base_path']) - return is_valid_repos_group(repos_group_name, config['base_path']) + def check_group_skip_path(environ, match_dict): + """ + check for valid repository group for proper 404 handling, but skips + verification of existing path + + :param environ: + :param match_dict: + """ + repos_group_name = match_dict.get('group_name') + return is_valid_repos_group(repos_group_name, config['base_path'], + skip_path_check=True) def check_int(environ, match_dict): return match_dict.get('id').isdigit() @@ -93,19 +104,14 @@ def make_map(config): m.connect("formatted_repos", "/repos.{format}", action="index", conditions=dict(method=["GET"])) - m.connect("new_repo", "/repos/new", - action="new", conditions=dict(method=["GET"])) - m.connect("formatted_new_repo", "/repos/new.{format}", - action="new", conditions=dict(method=["GET"])) + m.connect("new_repo", "/create_repository", + action="create_repository", conditions=dict(method=["GET"])) m.connect("/repos/{repo_name:.*?}", action="update", conditions=dict(method=["PUT"], function=check_repo)) m.connect("/repos/{repo_name:.*?}", action="delete", conditions=dict(method=["DELETE"], function=check_repo)) - m.connect("edit_repo", "/repos/{repo_name:.*?}/edit", - action="edit", conditions=dict(method=["GET"], - function=check_repo)) m.connect("formatted_edit_repo", "/repos/{repo_name:.*?}.{format}/edit", action="edit", conditions=dict(method=["GET"], function=check_repo)) @@ -115,6 +121,11 @@ def make_map(config): m.connect("formatted_repo", "/repos/{repo_name:.*?}.{format}", action="show", conditions=dict(method=["GET"], function=check_repo)) + #add repo perm member + m.connect('set_repo_perm_member', "/set_repo_perm_member/{repo_name:.*?}", + action="set_repo_perm_member", + conditions=dict(method=["POST"], function=check_repo)) + #ajax delete repo perm user m.connect('delete_repo_user', "/repos_delete_user/{repo_name:.*?}", action="delete_perm_user", @@ -145,6 +156,18 @@ def make_map(config): m.connect('repo_locking', "/repo_locking/{repo_name:.*?}", action="repo_locking", conditions=dict(method=["PUT"], function=check_repo)) + m.connect('toggle_locking', "/locking_toggle/{repo_name:.*?}", + action="toggle_locking", conditions=dict(method=["GET"], + function=check_repo)) + + #repo fields + m.connect('create_repo_fields', "/repo_fields/{repo_name:.*?}/new", + action="create_repo_field", conditions=dict(method=["PUT"], + function=check_repo)) + + m.connect('delete_repo_fields', "/repo_fields/{repo_name:.*?}/{field_id}", + action="delete_repo_field", conditions=dict(method=["DELETE"], + function=check_repo)) with rmap.submapper(path_prefix=ADMIN_PREFIX, controller='admin/repos_groups') as m: @@ -158,33 +181,34 @@ def make_map(config): action="new", conditions=dict(method=["GET"])) m.connect("formatted_new_repos_group", "/repos_groups/new.{format}", action="new", conditions=dict(method=["GET"])) - m.connect("update_repos_group", "/repos_groups/{id}", + m.connect("update_repos_group", "/repos_groups/{group_name:.*?}", action="update", conditions=dict(method=["PUT"], - function=check_int)) - m.connect("delete_repos_group", "/repos_groups/{id}", + function=check_group)) + m.connect("delete_repos_group", "/repos_groups/{group_name:.*?}", action="delete", conditions=dict(method=["DELETE"], - function=check_int)) - m.connect("edit_repos_group", "/repos_groups/{id:.*?}/edit", - action="edit", conditions=dict(method=["GET"],)) - m.connect("formatted_edit_repos_group", - "/repos_groups/{id}.{format}/edit", + function=check_group_skip_path)) + m.connect("edit_repos_group", "/repos_groups/{group_name:.*?}/edit", action="edit", conditions=dict(method=["GET"], - function=check_int)) - m.connect("repos_group", "/repos_groups/{id}", + function=check_group)) + m.connect("formatted_edit_repos_group", + "/repos_groups/{group_name:.*?}.{format}/edit", + action="edit", conditions=dict(method=["GET"], + function=check_group)) + m.connect("repos_group", "/repos_groups/{group_name:.*?}", action="show", conditions=dict(method=["GET"], - function=check_int)) - m.connect("formatted_repos_group", "/repos_groups/{id}.{format}", + function=check_group)) + m.connect("formatted_repos_group", "/repos_groups/{group_name:.*?}.{format}", action="show", conditions=dict(method=["GET"], - function=check_int)) - # ajax delete repos group perm user + function=check_group)) + # ajax delete repository group perm user m.connect('delete_repos_group_user_perm', - "/delete_repos_group_user_perm/{group_name:.*}", + "/delete_repos_group_user_perm/{group_name:.*?}", action="delete_repos_group_user_perm", conditions=dict(method=["DELETE"], function=check_group)) - # ajax delete repos group perm users_group + # ajax delete repository group perm users_group m.connect('delete_repos_group_users_group_perm', - "/delete_repos_group_users_group_perm/{group_name:.*}", + "/delete_repos_group_users_group_perm/{group_name:.*?}", action="delete_repos_group_users_group_perm", conditions=dict(method=["DELETE"], function=check_group)) @@ -227,7 +251,7 @@ def make_map(config): m.connect("user_ips_delete", "/users_ips/{id}", action="delete_ip", conditions=dict(method=["DELETE"])) - #ADMIN USERS GROUPS REST ROUTES + #ADMIN USER GROUPS REST ROUTES with rmap.submapper(path_prefix=ADMIN_PREFIX, controller='admin/users_groups') as m: m.connect("users_groups", "/users_groups", @@ -308,8 +332,6 @@ def make_map(config): action="my_account", conditions=dict(method=["GET"])) m.connect("admin_settings_my_account_update", "/my_account_update", action="my_account_update", conditions=dict(method=["PUT"])) - m.connect("admin_settings_create_repository", "/create_repository", - action="create_repository", conditions=dict(method=["GET"])) m.connect("admin_settings_my_repos", "/my_account/repos", action="my_account_my_repos", conditions=dict(method=["GET"])) m.connect("admin_settings_my_pullrequests", "/my_account/pull_requests", @@ -389,8 +411,13 @@ def make_map(config): #SEARCH rmap.connect('search', '%s/search' % ADMIN_PREFIX, controller='search',) - rmap.connect('search_repo', '%s/search/{search_repo:.*}' % ADMIN_PREFIX, - controller='search') + rmap.connect('search_repo_admin', '%s/search/{repo_name:.*}' % ADMIN_PREFIX, + controller='search', + conditions=dict(function=check_repo)) + rmap.connect('search_repo', '/{repo_name:.*?}/search', + controller='search', + conditions=dict(function=check_repo), + ) #LOGIN/LOGOUT/REGISTER/SIGN IN rmap.connect('login_home', '%s/login' % ADMIN_PREFIX, controller='login') @@ -423,6 +450,10 @@ def make_map(config): controller='summary', conditions=dict(function=check_repo)) + rmap.connect('repo_size', '/{repo_name:.*?}/repo_size', + controller='summary', action='repo_size', + conditions=dict(function=check_repo)) + rmap.connect('repos_group_home', '/{group_name:.*}', controller='admin/repos_groups', action="show_by_name", conditions=dict(function=check_group)) @@ -431,6 +462,17 @@ def make_map(config): controller='changeset', revision='tip', conditions=dict(function=check_repo)) + # no longer user, but kept for routes to work + rmap.connect("_edit_repo", "/{repo_name:.*?}/edit", + controller='admin/repos', action="edit", + conditions=dict(method=["GET"], function=check_repo) + ) + + rmap.connect("edit_repo", "/{repo_name:.*?}/settings", + controller='admin/repos', action="edit", + conditions=dict(method=["GET"], function=check_repo) + ) + #still working url for backward compat. rmap.connect('raw_changeset_home_depraced', '/{repo_name:.*?}/raw-changeset/{revision}', @@ -471,8 +513,8 @@ def make_map(config): controller='compare', action='index', conditions=dict(function=check_repo), requirements=dict( - org_ref_type='(branch|book|tag|rev|org_ref_type)', - other_ref_type='(branch|book|tag|rev|other_ref_type)') + org_ref_type='(branch|book|tag|rev|__other_ref_type__)', + other_ref_type='(branch|book|tag|rev|__org_ref_type__)') ) rmap.connect('pullrequest_home', @@ -518,7 +560,7 @@ def make_map(config): controller='pullrequests', action='delete_comment', conditions=dict(function=check_repo, method=["DELETE"])) - rmap.connect('summary_home', '/{repo_name:.*?}/summary', + rmap.connect('summary_home_summary', '/{repo_name:.*?}/summary', controller='summary', conditions=dict(function=check_repo)) rmap.connect('shortlog_home', '/{repo_name:.*?}/shortlog', @@ -548,6 +590,10 @@ def make_map(config): controller='files', revision='tip', f_path='', conditions=dict(function=check_repo)) + rmap.connect('files_home_nopath', '/{repo_name:.*?}/files/{revision}', + 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='', @@ -591,22 +637,6 @@ def make_map(config): controller='files', action='nodelist', conditions=dict(function=check_repo)) - rmap.connect('repo_settings_delete', '/{repo_name:.*?}/settings', - controller='settings', action="delete", - conditions=dict(method=["DELETE"], function=check_repo)) - - rmap.connect('repo_settings_update', '/{repo_name:.*?}/settings', - controller='settings', action="update", - conditions=dict(method=["PUT"], function=check_repo)) - - rmap.connect('repo_settings_home', '/{repo_name:.*?}/settings', - controller='settings', action='index', - conditions=dict(function=check_repo)) - - rmap.connect('toggle_locking', "/{repo_name:.*?}/locking_toggle", - controller='settings', action="toggle_locking", - conditions=dict(method=["GET"], function=check_repo)) - rmap.connect('repo_fork_create_home', '/{repo_name:.*?}/fork', controller='forks', action='fork_create', conditions=dict(function=check_repo, method=["POST"])) 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 @@ -130,7 +130,7 @@ class AdminController(BaseController): c.search_term = request.GET.get('filter') try: users_log = _journal_filter(users_log, c.search_term) - except: + except Exception: # we want this to crash for now raise diff --git a/rhodecode/controllers/admin/defaults.py b/rhodecode/controllers/admin/defaults.py --- a/rhodecode/controllers/admin/defaults.py +++ b/rhodecode/controllers/admin/defaults.py @@ -107,7 +107,7 @@ class DefaultsController(BaseController) encoding="UTF-8") except Exception: log.error(traceback.format_exc()) - h.flash(_('error occurred during update of defaults'), + h.flash(_('Error occurred during update of defaults'), category='error') return redirect(url('defaults')) diff --git a/rhodecode/controllers/admin/ldap_settings.py b/rhodecode/controllers/admin/ldap_settings.py --- a/rhodecode/controllers/admin/ldap_settings.py +++ b/rhodecode/controllers/admin/ldap_settings.py @@ -123,7 +123,7 @@ class LdapSettingsController(BaseControl Session().add(setting) Session().commit() - h.flash(_('Ldap settings updated successfully'), + h.flash(_('LDAP settings updated successfully'), category='success') if not ldap_active: #if ldap is missing send an info to user @@ -144,7 +144,7 @@ class LdapSettingsController(BaseControl encoding="UTF-8") except Exception: log.error(traceback.format_exc()) - h.flash(_('error occurred during update of ldap settings'), + h.flash(_('Error occurred during update of ldap settings'), category='error') return redirect(url('ldap_home')) diff --git a/rhodecode/controllers/admin/notifications.py b/rhodecode/controllers/admin/notifications.py --- a/rhodecode/controllers/admin/notifications.py +++ b/rhodecode/controllers/admin/notifications.py @@ -28,7 +28,7 @@ import traceback from pylons import request from pylons import tmpl_context as c, url -from pylons.controllers.util import redirect +from pylons.controllers.util import redirect, abort from webhelpers.paginate import Page @@ -117,7 +117,7 @@ class NotificationsController(BaseContro Session().commit() return 'ok' except Exception: - Session.rollback() + Session().rollback() log.error(traceback.format_exc()) return 'fail' @@ -139,7 +139,7 @@ class NotificationsController(BaseContro Session().commit() return 'ok' except Exception: - Session.rollback() + Session().rollback() log.error(traceback.format_exc()) return 'fail' @@ -149,8 +149,9 @@ class NotificationsController(BaseContro c.user = self.rhodecode_user no = Notification.get(notification_id) - owner = all(un.user.user_id == c.rhodecode_user.user_id + owner = any(un.user.user_id == c.rhodecode_user.user_id for un in no.notifications_to_users) + if no and (h.HasPermissionAny('hg.admin', 'repository.admin')() or owner): unotification = NotificationModel()\ .get_user_notification(c.user.user_id, no) @@ -158,14 +159,14 @@ class NotificationsController(BaseContro # if this association to user is not valid, we don't want to show # this message if unotification: - if unotification.read is False: + if not unotification.read: unotification.mark_as_read() Session().commit() c.notification = no return render('admin/notifications/show_notification.html') - return redirect(url('notifications')) + return abort(403) def edit(self, notification_id, format='html'): """GET /_admin/notifications/id/edit: Form to edit an existing item""" 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 @@ -67,11 +67,11 @@ class PermissionsController(BaseControll ('group.admin', _('Admin'),)] self.register_choices = [ ('hg.register.none', - _('disabled')), + _('Disabled')), ('hg.register.manual_activate', - _('allowed with manual account activation')), + _('Allowed with manual account activation')), ('hg.register.auto_activate', - _('allowed with automatic account activation')), ] + _('Allowed with automatic account activation')), ] self.create_choices = [('hg.create.none', _('Disabled')), ('hg.create.repository', _('Enabled'))] @@ -139,7 +139,7 @@ class PermissionsController(BaseControll encoding="UTF-8") except Exception: log.error(traceback.format_exc()) - h.flash(_('error occurred during update of permissions'), + h.flash(_('Error occurred during update of permissions'), category='error') return redirect(url('edit_permission', id=id)) 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 @@ -28,7 +28,7 @@ import traceback import formencode from formencode import htmlfill -from webob.exc import HTTPInternalServerError +from webob.exc import HTTPInternalServerError, HTTPForbidden from pylons import request, session, tmpl_context as c, url from pylons.controllers.util import redirect from pylons.i18n.translation import _ @@ -37,23 +37,25 @@ from sqlalchemy.exc import IntegrityErro import rhodecode from rhodecode.lib import helpers as h from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \ - HasPermissionAnyDecorator, HasRepoPermissionAllDecorator -from rhodecode.lib.base import BaseController, render + HasPermissionAnyDecorator, HasRepoPermissionAllDecorator, NotAnonymous,\ + HasPermissionAny, HasReposGroupPermissionAny, HasRepoPermissionAnyDecorator +from rhodecode.lib.base import BaseRepoController, render 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,\ - RhodeCodeSetting -from rhodecode.model.forms import RepoForm -from rhodecode.model.scm import ScmModel + RhodeCodeSetting, RepositoryField +from rhodecode.model.forms import RepoForm, RepoFieldForm, RepoPermsForm +from rhodecode.model.scm import ScmModel, GroupList from rhodecode.model.repo import RepoModel from rhodecode.lib.compat import json from sqlalchemy.sql.expression import func +from rhodecode.lib.exceptions import AttachedForksError log = logging.getLogger(__name__) -class ReposController(BaseController): +class ReposController(BaseRepoController): """ REST Controller styled on the Atom Publishing Protocol""" # To properly map this controller, ensure your config/routing.py @@ -61,14 +63,15 @@ class ReposController(BaseController): # map.resource('repo', 'repos') @LoginRequired() - @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository') def __before__(self): c.admin_user = session.get('admin_user') c.admin_username = session.get('admin_username') super(ReposController, self).__before__() def __load_defaults(self): - c.repo_groups = RepoGroup.groups_choices(check_perms=True) + acl_groups = GroupList(RepoGroup.query().all(), + perm_set=['group.write', 'group.admin']) + c.repo_groups = RepoGroup.groups_choices(groups=acl_groups) c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) repo_model = RepoModel() @@ -116,6 +119,9 @@ class ReposController(BaseController): c.stats_percentage = '%.2f' % ((float((last_rev)) / c.repo_last_rev) * 100) + c.repo_fields = RepositoryField.query()\ + .filter(RepositoryField.repository == db_repo).all() + defaults = RepoModel()._get_defaults(repo_name) c.repos_list = [('', _('--REMOVE FORK--'))] @@ -136,13 +142,14 @@ class ReposController(BaseController): .all() repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list, - admin=True) + admin=True, + super_user_actions=True) #json used to render the grid c.data = json.dumps(repos_data) return render('admin/repos/repos.html') - @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository') + @NotAnonymous() def create(self): """ POST /repos: Create a new item""" @@ -154,15 +161,18 @@ class ReposController(BaseController): form_result = RepoForm(repo_groups=c.repo_groups_choices, landing_revs=c.landing_revs_choices)()\ .to_python(dict(request.POST)) + new_repo = RepoModel().create(form_result, self.rhodecode_user.user_id) if form_result['clone_uri']: - h.flash(_('created repository %s from %s') \ + h.flash(_('Created repository %s from %s') \ % (form_result['repo_name'], form_result['clone_uri']), category='success') else: - h.flash(_('created repository %s') % form_result['repo_name'], - category='success') + repo_url = h.link_to(form_result['repo_name'], + h.url('summary_home', repo_name=form_result['repo_name_full'])) + h.flash(h.literal(_('Created repository %s') % repo_url), + category='success') if request.POST.get('user_created'): # created by regular non admin user @@ -175,16 +185,8 @@ class ReposController(BaseController): self.sa) Session().commit() except formencode.Invalid, errors: - - c.new_repo = errors.value['repo_name'] - - if request.POST.get('user_created'): - r = render('admin/repos/repo_add_create_repository.html') - else: - r = render('admin/repos/repo_add.html') - return htmlfill.render( - r, + render('admin/repos/repo_add.html'), defaults=errors.value, errors=errors.error_dict or {}, prefix_error=False, @@ -192,21 +194,41 @@ class ReposController(BaseController): except Exception: log.error(traceback.format_exc()) - msg = _('error occurred during creation of repository %s') \ + msg = _('Error creating repository %s') \ % form_result.get('repo_name') h.flash(msg, category='error') - return redirect(url('repos')) + if c.rhodecode_user.is_admin: + return redirect(url('repos')) + return redirect(url('home')) #redirect to our new repo ! return redirect(url('summary_home', repo_name=new_repo.repo_name)) - @HasPermissionAllDecorator('hg.admin') - def new(self, format='html'): - """GET /repos/new: Form to create a new item""" + @NotAnonymous() + def create_repository(self): + """GET /_admin/create_repository: Form to create a new item""" new_repo = request.GET.get('repo', '') + parent_group = request.GET.get('parent_group') + if not HasPermissionAny('hg.admin', 'hg.create.repository')(): + #you're not super admin nor have global create permissions, + #but maybe you have at least write permission to a parent group ? + _gr = RepoGroup.get(parent_group) + gr_name = _gr.group_name if _gr else None + if not HasReposGroupPermissionAny('group.admin', 'group.write')(group_name=gr_name): + raise HTTPForbidden + + acl_groups = GroupList(RepoGroup.query().all(), + perm_set=['group.write', 'group.admin']) + c.repo_groups = RepoGroup.groups_choices(groups=acl_groups) + c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) + choices, c.landing_revs = ScmModel().get_repo_landing_revs() + c.new_repo = repo_name_slug(new_repo) - self.__load_defaults() + ## apply the defaults from defaults page defaults = RhodeCodeSetting.get_default_repo_settings(strip_prefix=True) + if parent_group: + defaults.update({'repo_group': parent_group}) + return htmlfill.render( render('admin/repos/repo_add.html'), defaults=defaults, @@ -215,7 +237,7 @@ class ReposController(BaseController): encoding="UTF-8" ) - @HasPermissionAllDecorator('hg.admin') + @HasRepoPermissionAllDecorator('repository.admin') def update(self, repo_name): """ PUT /repos/repo_name: Update an existing item""" @@ -259,11 +281,11 @@ class ReposController(BaseController): except Exception: log.error(traceback.format_exc()) - h.flash(_('error occurred during update of repository %s') \ + h.flash(_('Error occurred during update of repository %s') \ % repo_name, category='error') return redirect(url('edit_repo', repo_name=changed_name)) - @HasPermissionAllDecorator('hg.admin') + @HasRepoPermissionAllDecorator('repository.admin') def delete(self, repo_name): """ DELETE /repos/repo_name: Delete an existing item""" @@ -280,25 +302,27 @@ class ReposController(BaseController): h.not_mapped_error(repo_name) return redirect(url('repos')) try: + _forks = repo.forks.count() + handle_forks = None + if _forks and request.POST.get('forks'): + do = request.POST['forks'] + if do == 'detach_forks': + handle_forks = 'detach' + h.flash(_('Detached %s forks') % _forks, category='success') + elif do == 'delete_forks': + handle_forks = 'delete' + h.flash(_('Deleted %s forks') % _forks, category='success') + repo_model.delete(repo, forks=handle_forks) action_logger(self.rhodecode_user, 'admin_deleted_repo', - repo_name, self.ip_addr, self.sa) - repo_model.delete(repo) + repo_name, self.ip_addr, self.sa) invalidate_cache('get_repo_cached_%s' % repo_name) - h.flash(_('deleted repository %s') % repo_name, category='success') + h.flash(_('Deleted repository %s') % repo_name, category='success') Session().commit() - except IntegrityError, e: - if e.message.find('repositories_fork_id_fkey') != -1: - log.error(traceback.format_exc()) - h.flash(_('Cannot delete %s it still contains attached ' - 'forks') % repo_name, - category='warning') - else: - log.error(traceback.format_exc()) - h.flash(_('An error occurred during ' - 'deletion of %s') % repo_name, - category='error') + except AttachedForksError: + h.flash(_('Cannot delete %s it still contains attached forks') + % repo_name, category='warning') - except Exception, e: + except Exception: log.error(traceback.format_exc()) h.flash(_('An error occurred during deletion of %s') % repo_name, category='error') @@ -306,6 +330,42 @@ class ReposController(BaseController): return redirect(url('repos')) @HasRepoPermissionAllDecorator('repository.admin') + def set_repo_perm_member(self, repo_name): + form = RepoPermsForm()().to_python(request.POST) + + perms_new = form['perms_new'] + perms_updates = form['perms_updates'] + cur_repo = repo_name + + # update permissions + for member, perm, member_type in perms_updates: + if member_type == 'user': + # this updates existing one + RepoModel().grant_user_permission( + repo=cur_repo, user=member, perm=perm + ) + else: + RepoModel().grant_users_group_permission( + repo=cur_repo, group_name=member, perm=perm + ) + # set new permissions + for member, perm, member_type in perms_new: + if member_type == 'user': + RepoModel().grant_user_permission( + repo=cur_repo, user=member, perm=perm + ) + else: + RepoModel().grant_users_group_permission( + repo=cur_repo, group_name=member, perm=perm + ) + #TODO: implement this + #action_logger(self.rhodecode_user, 'admin_changed_repo_permissions', + # repo_name, self.ip_addr, self.sa) + Session().commit() + h.flash(_('Repository permissions updated'), category='success') + return redirect(url('edit_repo', repo_name=repo_name)) + + @HasRepoPermissionAllDecorator('repository.admin') def delete_perm_user(self, repo_name): """ DELETE an existing repository permission user @@ -315,6 +375,9 @@ class ReposController(BaseController): try: RepoModel().revoke_user_permission(repo=repo_name, user=request.POST['user_id']) + #TODO: implement this + #action_logger(self.rhodecode_user, 'admin_revoked_repo_permissions', + # repo_name, self.ip_addr, self.sa) Session().commit() except Exception: log.error(traceback.format_exc()) @@ -325,7 +388,7 @@ class ReposController(BaseController): @HasRepoPermissionAllDecorator('repository.admin') def delete_perm_users_group(self, repo_name): """ - DELETE an existing repository permission users group + DELETE an existing repository permission user group :param repo_name: """ @@ -338,11 +401,11 @@ class ReposController(BaseController): except Exception: log.error(traceback.format_exc()) h.flash(_('An error occurred during deletion of repository' - ' users groups'), + ' user groups'), category='error') raise HTTPInternalServerError() - @HasPermissionAllDecorator('hg.admin') + @HasRepoPermissionAllDecorator('repository.admin') def repo_stats(self, repo_name): """ DELETE an existing repository statistics @@ -359,7 +422,7 @@ class ReposController(BaseController): category='error') return redirect(url('edit_repo', repo_name=repo_name)) - @HasPermissionAllDecorator('hg.admin') + @HasRepoPermissionAllDecorator('repository.admin') def repo_cache(self, repo_name): """ INVALIDATE existing repository cache @@ -376,7 +439,7 @@ class ReposController(BaseController): category='error') return redirect(url('edit_repo', repo_name=repo_name)) - @HasPermissionAllDecorator('hg.admin') + @HasRepoPermissionAllDecorator('repository.admin') def repo_locking(self, repo_name): """ Unlock repository when it is locked ! @@ -396,7 +459,34 @@ class ReposController(BaseController): category='error') return redirect(url('edit_repo', repo_name=repo_name)) - @HasPermissionAllDecorator('hg.admin') + @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin') + def toggle_locking(self, repo_name): + """ + Toggle locking of repository by simple GET call to url + + :param repo_name: + """ + + try: + repo = Repository.get_by_repo_name(repo_name) + + if repo.enable_locking: + if repo.locked[0]: + Repository.unlock(repo) + action = _('Unlocked') + else: + Repository.lock(repo, c.rhodecode_user.user_id) + action = _('Locked') + + h.flash(_('Repository has been %s') % action, + category='success') + except Exception, e: + log.error(traceback.format_exc()) + h.flash(_('An error occurred during unlocking'), + category='error') + return redirect(url('summary_home', repo_name=repo_name)) + + @HasRepoPermissionAllDecorator('repository.admin') def repo_public_journal(self, repo_name): """ Set's this repository to be visible in public journal, @@ -415,7 +505,7 @@ class ReposController(BaseController): h.flash(_('Updated repository visibility in public journal'), category='success') Session().commit() - except: + except Exception: h.flash(_('An error occurred during setting this' ' repository in public journal'), category='error') @@ -424,7 +514,7 @@ class ReposController(BaseController): h.flash(_('Token mismatch'), category='error') return redirect(url('edit_repo', repo_name=repo_name)) - @HasPermissionAllDecorator('hg.admin') + @HasRepoPermissionAllDecorator('repository.admin') def repo_pull(self, repo_name): """ Runs task to update given repository with remote changes, @@ -441,7 +531,7 @@ class ReposController(BaseController): return redirect(url('edit_repo', repo_name=repo_name)) - @HasPermissionAllDecorator('hg.admin') + @HasRepoPermissionAllDecorator('repository.admin') def repo_as_fork(self, repo_name): """ Mark given repository as a fork of another @@ -468,7 +558,7 @@ class ReposController(BaseController): """GET /repos/repo_name: Show a specific item""" # url('repo', repo_name=ID) - @HasPermissionAllDecorator('hg.admin') + @HasRepoPermissionAllDecorator('repository.admin') def edit(self, repo_name, format='html'): """GET /repos/repo_name/edit: Form to edit an existing item""" # url('edit_repo', repo_name=ID) @@ -480,3 +570,37 @@ class ReposController(BaseController): encoding="UTF-8", force_defaults=False ) + + @HasPermissionAllDecorator('hg.admin') + def create_repo_field(self, repo_name): + try: + form_result = RepoFieldForm()().to_python(dict(request.POST)) + new_field = RepositoryField() + new_field.repository = Repository.get_by_repo_name(repo_name) + new_field.field_key = form_result['new_field_key'] + new_field.field_type = form_result['new_field_type'] # python type + new_field.field_value = form_result['new_field_value'] # set initial blank value + new_field.field_desc = form_result['new_field_desc'] + new_field.field_label = form_result['new_field_label'] + Session().add(new_field) + Session().commit() + + except Exception, e: + log.error(traceback.format_exc()) + msg = _('An error occurred during creation of field') + if isinstance(e, formencode.Invalid): + msg += ". " + e.msg + h.flash(msg, category='error') + return redirect(url('edit_repo', repo_name=repo_name)) + + @HasPermissionAllDecorator('hg.admin') + def delete_repo_field(self, repo_name, field_id): + field = RepositoryField.get_or_404(field_id) + try: + Session().delete(field) + Session().commit() + except Exception, e: + log.error(traceback.format_exc()) + msg = _('An error occurred during removal of field') + h.flash(msg, category='error') + return redirect(url('edit_repo', repo_name=repo_name)) 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 @@ -3,7 +3,7 @@ rhodecode.controllers.admin.repos_groups ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Repositories groups controller for RhodeCode + Repository groups controller for RhodeCode :created_on: Mar 23, 2010 :author: marcink @@ -30,7 +30,7 @@ import formencode from formencode import htmlfill from pylons import request, tmpl_context as c, url -from pylons.controllers.util import redirect +from pylons.controllers.util import abort, redirect from pylons.i18n.translation import _ from sqlalchemy.exc import IntegrityError @@ -39,7 +39,8 @@ import rhodecode from rhodecode.lib import helpers as h from rhodecode.lib.ext_json import json from rhodecode.lib.auth import LoginRequired, HasPermissionAnyDecorator,\ - HasReposGroupPermissionAnyDecorator + HasReposGroupPermissionAnyDecorator, HasReposGroupPermissionAll,\ + HasPermissionAll from rhodecode.lib.base import BaseController, render from rhodecode.model.db import RepoGroup, Repository from rhodecode.model.repos_group import ReposGroupModel @@ -47,8 +48,9 @@ from rhodecode.model.forms import ReposG 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 rhodecode.lib.utils2 import str2bool, safe_int from sqlalchemy.sql.expression import func +from rhodecode.model.scm import GroupList log = logging.getLogger(__name__) @@ -63,10 +65,21 @@ class ReposGroupsController(BaseControll def __before__(self): super(ReposGroupsController, self).__before__() - def __load_defaults(self): - c.repo_groups = RepoGroup.groups_choices() + def __load_defaults(self, allow_empty_group=False, exclude_group_ids=[]): + if HasPermissionAll('hg.admin')('group edit'): + #we're global admin, we're ok and we can create TOP level groups + allow_empty_group = True + + #override the choices for this form, we need to filter choices + #and display only those we have ADMIN right + groups_with_admin_rights = GroupList(RepoGroup.query().all(), + perm_set=['group.admin']) + c.repo_groups = RepoGroup.groups_choices(groups=groups_with_admin_rights, + show_empty_group=allow_empty_group) + # exclude filtered ids + c.repo_groups = filter(lambda x: x[0] not in exclude_group_ids, + c.repo_groups) c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) - repo_model = RepoModel() c.users_array = repo_model.get_users_js() c.users_groups_array = repo_model.get_users_groups_js() @@ -77,7 +90,6 @@ class ReposGroupsController(BaseControll :param group_id: """ - self.__load_defaults() repo_group = RepoGroup.get_or_404(group_id) data = repo_group.get_dict() data['group_name'] = repo_group.name @@ -94,34 +106,46 @@ class ReposGroupsController(BaseControll return data - @HasPermissionAnyDecorator('hg.admin') + def _revoke_perms_on_yourself(self, form_result): + _up = filter(lambda u: c.rhodecode_user.username == u[0], + form_result['perms_updates']) + _new = filter(lambda u: c.rhodecode_user.username == u[0], + form_result['perms_new']) + if _new and _new[0][1] != 'group.admin' or _up and _up[0][1] != 'group.admin': + return True + return False + def index(self, format='html'): """GET /repos_groups: All items in the collection""" # url('repos_groups') + group_iter = GroupList(RepoGroup.query().all(), perm_set=['group.admin']) sk = lambda g: g.parents[0].group_name if g.parents else g.group_name - c.groups = sorted(RepoGroup.query().all(), key=sk) + c.groups = sorted(group_iter, key=sk) return render('admin/repos_groups/repos_groups_show.html') - @HasPermissionAnyDecorator('hg.admin') def create(self): """POST /repos_groups: Create a new item""" # url('repos_groups') + self.__load_defaults() - repos_group_form = ReposGroupForm(available_groups = - c.repo_groups_choices)() + + # permissions for can create group based on parent_id are checked + # here in the Form + repos_group_form = ReposGroupForm(available_groups= + map(lambda k: unicode(k[0]), c.repo_groups))() try: form_result = repos_group_form.to_python(dict(request.POST)) ReposGroupModel().create( group_name=form_result['group_name'], group_description=form_result['group_description'], - parent=form_result['group_parent_id'] + parent=form_result['group_parent_id'], + owner=self.rhodecode_user.user_id ) Session().commit() - h.flash(_('created repos group %s') \ + h.flash(_('Created repository group %s') \ % form_result['group_name'], category='success') #TODO: in futureaction_logger(, '', '', '', self.sa) except formencode.Invalid, errors: - return htmlfill.render( render('admin/repos_groups/repos_groups_add.html'), defaults=errors.value, @@ -130,42 +154,73 @@ class ReposGroupsController(BaseControll encoding="UTF-8") except Exception: log.error(traceback.format_exc()) - h.flash(_('error occurred during creation of repos group %s') \ + h.flash(_('Error occurred during creation of repository group %s') \ % request.POST.get('group_name'), category='error') + parent_group_id = form_result['group_parent_id'] + #TODO: maybe we should get back to the main view, not the admin one + return redirect(url('repos_groups', parent_group=parent_group_id)) - return redirect(url('repos_groups')) - - @HasPermissionAnyDecorator('hg.admin') def new(self, format='html'): """GET /repos_groups/new: Form to create a new item""" # url('new_repos_group') + if HasPermissionAll('hg.admin')('group create'): + #we're global admin, we're ok and we can create TOP level groups + pass + else: + # we pass in parent group into creation form, thus we know + # what would be the group, we can check perms here ! + group_id = safe_int(request.GET.get('parent_group')) + group = RepoGroup.get(group_id) if group_id else None + group_name = group.group_name if group else None + if HasReposGroupPermissionAll('group.admin')(group_name, 'group create'): + pass + else: + return abort(403) + self.__load_defaults() return render('admin/repos_groups/repos_groups_add.html') - @HasPermissionAnyDecorator('hg.admin') - def update(self, id): - """PUT /repos_groups/id: Update an existing item""" + @HasReposGroupPermissionAnyDecorator('group.admin') + def update(self, group_name): + """PUT /repos_groups/group_name: Update an existing item""" # Forms posted to this method should contain a hidden field: # # Or using helpers: - # h.form(url('repos_group', id=ID), + # h.form(url('repos_group', group_name=GROUP_NAME), # method='put') - # url('repos_group', id=ID) + # url('repos_group', group_name=GROUP_NAME) - self.__load_defaults() - c.repos_group = RepoGroup.get(id) + c.repos_group = ReposGroupModel()._get_repos_group(group_name) + if HasPermissionAll('hg.admin')('group edit'): + #we're global admin, we're ok and we can create TOP level groups + allow_empty_group = True + elif not c.repos_group.parent_group: + allow_empty_group = True + else: + allow_empty_group = False + self.__load_defaults(allow_empty_group=allow_empty_group, + exclude_group_ids=[c.repos_group.group_id]) repos_group_form = ReposGroupForm( edit=True, old_data=c.repos_group.get_dict(), - available_groups=c.repo_groups_choices + available_groups=c.repo_groups_choices, + can_create_in_root=allow_empty_group, )() try: form_result = repos_group_form.to_python(dict(request.POST)) - ReposGroupModel().update(id, form_result) + if not c.rhodecode_user.is_admin: + if self._revoke_perms_on_yourself(form_result): + msg = _('Cannot revoke permission for yourself as admin') + h.flash(msg, category='warning') + raise Exception('revoke admin permission on self') + + new_gr = ReposGroupModel().update(group_name, form_result) Session().commit() - h.flash(_('updated repos group %s') \ + h.flash(_('Updated repository group %s') \ % form_result['group_name'], category='success') + # we now have new name ! + group_name = new_gr.group_name #TODO: in future action_logger(, '', '', '', self.sa) except formencode.Invalid, errors: @@ -177,61 +232,60 @@ class ReposGroupsController(BaseControll encoding="UTF-8") except Exception: log.error(traceback.format_exc()) - h.flash(_('error occurred during update of repos group %s') \ + h.flash(_('Error occurred during update of repository group %s') \ % request.POST.get('group_name'), category='error') - return redirect(url('edit_repos_group', id=id)) + return redirect(url('edit_repos_group', group_name=group_name)) - @HasPermissionAnyDecorator('hg.admin') - def delete(self, id): - """DELETE /repos_groups/id: Delete an existing item""" + @HasReposGroupPermissionAnyDecorator('group.admin') + def delete(self, group_name): + """DELETE /repos_groups/group_name: Delete an existing item""" # Forms posted to this method should contain a hidden field: # # Or using helpers: - # h.form(url('repos_group', id=ID), + # h.form(url('repos_group', group_name=GROUP_NAME), # method='delete') - # url('repos_group', id=ID) + # url('repos_group', group_name=GROUP_NAME) - gr = RepoGroup.get(id) + gr = c.repos_group = ReposGroupModel()._get_repos_group(group_name) repos = gr.repositories.all() if repos: h.flash(_('This group contains %s repositores and cannot be ' - 'deleted') % len(repos), - category='error') + 'deleted') % len(repos), category='warning') + return redirect(url('repos_groups')) + + children = gr.children.all() + if children: + h.flash(_('This group contains %s subgroups and cannot be deleted' + % (len(children))), category='warning') return redirect(url('repos_groups')) try: - ReposGroupModel().delete(id) + ReposGroupModel().delete(group_name) Session().commit() - h.flash(_('removed repos group %s') % gr.group_name, + h.flash(_('Removed repository group %s') % group_name, category='success') #TODO: in future action_logger(, '', '', '', self.sa) - except IntegrityError, e: - if str(e.message).find('groups_group_parent_id_fkey') != -1: - log.error(traceback.format_exc()) - h.flash(_('Cannot delete this group it still contains ' - 'subgroups'), - category='warning') - else: - log.error(traceback.format_exc()) - h.flash(_('error occurred during deletion of repos ' - 'group %s') % gr.group_name, category='error') - except Exception: log.error(traceback.format_exc()) - h.flash(_('error occurred during deletion of repos ' - 'group %s') % gr.group_name, category='error') + h.flash(_('Error occurred during deletion of repos ' + 'group %s') % group_name, category='error') return redirect(url('repos_groups')) @HasReposGroupPermissionAnyDecorator('group.admin') def delete_repos_group_user_perm(self, group_name): """ - DELETE an existing repositories group permission user + DELETE an existing repository group permission user :param group_name: """ try: + if not c.rhodecode_user.is_admin: + if c.rhodecode_user.user_id == safe_int(request.POST['user_id']): + msg = _('Cannot revoke permission for yourself as admin') + h.flash(msg, category='warning') + raise Exception('revoke admin permission on self') recursive = str2bool(request.POST.get('recursive', False)) ReposGroupModel().delete_permission( repos_group=group_name, obj=request.POST['user_id'], @@ -247,7 +301,7 @@ class ReposGroupsController(BaseControll @HasReposGroupPermissionAnyDecorator('group.admin') def delete_repos_group_users_group_perm(self, group_name): """ - DELETE an existing repositories group permission users group + DELETE an existing repository group permission user group :param group_name: """ @@ -262,7 +316,7 @@ class ReposGroupsController(BaseControll except Exception: log.error(traceback.format_exc()) h.flash(_('An error occurred during deletion of group' - ' users groups'), + ' user groups'), category='error') raise HTTPInternalServerError() @@ -279,11 +333,11 @@ class ReposGroupsController(BaseControll @HasReposGroupPermissionAnyDecorator('group.read', 'group.write', 'group.admin') - def show(self, id, format='html'): - """GET /repos_groups/id: Show a specific item""" - # url('repos_group', id=ID) + def show(self, group_name, format='html'): + """GET /repos_groups/group_name: Show a specific item""" + # url('repos_group', group_name=GROUP_NAME) - c.group = RepoGroup.get_or_404(id) + c.group = c.repos_group = ReposGroupModel()._get_repos_group(group_name) c.group_repos = c.group.repositories.all() #overwrite our cached list with current filter @@ -291,15 +345,15 @@ class ReposGroupsController(BaseControll c.repo_cnt = 0 groups = RepoGroup.query().order_by(RepoGroup.group_name)\ - .filter(RepoGroup.group_parent_id == id).all() + .filter(RepoGroup.group_parent_id == c.group.group_id).all() c.groups = self.scm_model.get_repos_groups(groups) - if c.visual.lightweight_dashboard is False: + if not c.visual.lightweight_dashboard: c.repos_list = self.scm_model.get_repos(all_repos=gr_filter) ## lightweight version of dashboard else: c.repos_list = Repository.query()\ - .filter(Repository.group_id == id)\ + .filter(Repository.group_id == c.group.group_id)\ .order_by(func.lower(Repository.repo_name))\ .all() @@ -310,17 +364,25 @@ class ReposGroupsController(BaseControll return render('admin/repos_groups/repos_groups.html') - @HasPermissionAnyDecorator('hg.admin') - def edit(self, id, format='html'): - """GET /repos_groups/id/edit: Form to edit an existing item""" - # url('edit_repos_group', id=ID) + @HasReposGroupPermissionAnyDecorator('group.admin') + def edit(self, group_name, format='html'): + """GET /repos_groups/group_name/edit: Form to edit an existing item""" + # url('edit_repos_group', group_name=GROUP_NAME) - c.repos_group = ReposGroupModel()._get_repos_group(id) - defaults = self.__load_data(c.repos_group.group_id) + c.repos_group = ReposGroupModel()._get_repos_group(group_name) + #we can only allow moving empty group if it's already a top-level + #group, ie has no parents, or we're admin + if HasPermissionAll('hg.admin')('group edit'): + #we're global admin, we're ok and we can create TOP level groups + allow_empty_group = True + elif not c.repos_group.parent_group: + allow_empty_group = True + else: + allow_empty_group = False - # we need to exclude this group from the group list for editing - c.repo_groups = filter(lambda x: x[0] != c.repos_group.group_id, - c.repo_groups) + self.__load_defaults(allow_empty_group=allow_empty_group, + exclude_group_ids=[c.repos_group.group_id]) + defaults = self.__load_data(c.repos_group.group_id) return htmlfill.render( render('admin/repos_groups/repos_groups_edit.html'), 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 @@ -37,7 +37,8 @@ from pylons.i18n.translation import _ from rhodecode.lib import helpers as h from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \ - HasPermissionAnyDecorator, NotAnonymous + HasPermissionAnyDecorator, NotAnonymous, HasPermissionAny,\ + HasReposGroupPermissionAll, HasReposGroupPermissionAny, AuthUser from rhodecode.lib.base import BaseController, render from rhodecode.lib.celerylib import tasks, run_task from rhodecode.lib.utils import repo2db_mapper, invalidate_cache, \ @@ -46,7 +47,7 @@ from rhodecode.model.db import RhodeCode RhodeCodeSetting, PullRequest, PullRequestReviewers from rhodecode.model.forms import UserForm, ApplicationSettingsForm, \ ApplicationUiSettingsForm, ApplicationVisualisationForm -from rhodecode.model.scm import ScmModel +from rhodecode.model.scm import ScmModel, GroupList from rhodecode.model.user import UserModel from rhodecode.model.repo import RepoModel from rhodecode.model.db import User @@ -54,6 +55,7 @@ from rhodecode.model.notification import from rhodecode.model.meta import Session from rhodecode.lib.utils2 import str2bool, safe_unicode from rhodecode.lib.compat import json +from webob.exc import HTTPForbidden log = logging.getLogger(__name__) @@ -165,7 +167,7 @@ class SettingsController(BaseController) except Exception: log.error(traceback.format_exc()) - h.flash(_('error occurred during updating ' + h.flash(_('Error occurred during updating ' 'application settings'), category='error') @@ -204,6 +206,11 @@ class SettingsController(BaseController) form_result['rhodecode_lightweight_dashboard'] Session().add(sett4) + sett4 = RhodeCodeSetting.get_by_name_or_create('repository_fields') + sett4.app_settings_value = \ + form_result['rhodecode_repository_fields'] + Session().add(sett4) + Session().commit() set_rhodecode_config(config) h.flash(_('Updated visualisation settings'), @@ -211,7 +218,7 @@ class SettingsController(BaseController) except Exception: log.error(traceback.format_exc()) - h.flash(_('error occurred during updating ' + h.flash(_('Error occurred during updating ' 'visualisation settings'), category='error') @@ -229,9 +236,6 @@ class SettingsController(BaseController) ) try: - # fix namespaces for hooks and extensions - _f = lambda s: s.replace('.', '_') - sett = RhodeCodeUi.get_by_key('push_ssl') sett.ui_value = form_result['web_push_ssl'] Session().add(sett) @@ -242,23 +246,19 @@ class SettingsController(BaseController) #HOOKS sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_UPDATE) - sett.ui_active = form_result[_f('hooks_%s' % - RhodeCodeUi.HOOK_UPDATE)] + sett.ui_active = form_result['hooks_changegroup_update'] Session().add(sett) sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_REPO_SIZE) - sett.ui_active = form_result[_f('hooks_%s' % - RhodeCodeUi.HOOK_REPO_SIZE)] + sett.ui_active = form_result['hooks_changegroup_repo_size'] Session().add(sett) sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_PUSH) - sett.ui_active = form_result[_f('hooks_%s' % - RhodeCodeUi.HOOK_PUSH)] + sett.ui_active = form_result['hooks_changegroup_push_logger'] Session().add(sett) sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_PULL) - sett.ui_active = form_result[_f('hooks_%s' % - RhodeCodeUi.HOOK_PULL)] + sett.ui_active = form_result['hooks_outgoing_pull_logger'] Session().add(sett) @@ -269,7 +269,7 @@ class SettingsController(BaseController) sett = RhodeCodeUi() sett.ui_key = 'largefiles' sett.ui_section = 'extensions' - sett.ui_active = form_result[_f('extensions_largefiles')] + sett.ui_active = form_result['extensions_largefiles'] Session().add(sett) sett = RhodeCodeUi.get_by_key('hgsubversion') @@ -279,7 +279,7 @@ class SettingsController(BaseController) sett.ui_key = 'hgsubversion' sett.ui_section = 'extensions' - sett.ui_active = form_result[_f('extensions_hgsubversion')] + sett.ui_active = form_result['extensions_hgsubversion'] Session().add(sett) # sett = RhodeCodeUi.get_by_key('hggit') @@ -289,7 +289,7 @@ class SettingsController(BaseController) # sett.ui_key = 'hggit' # sett.ui_section = 'extensions' # -# sett.ui_active = form_result[_f('extensions_hggit')] +# sett.ui_active = form_result['extensions_hggit'] # Session().add(sett) Session().commit() @@ -298,7 +298,7 @@ class SettingsController(BaseController) except Exception: log.error(traceback.format_exc()) - h.flash(_('error occurred during updating ' + h.flash(_('Error occurred during updating ' 'application settings'), category='error') if setting_id == 'hooks': @@ -324,7 +324,7 @@ class SettingsController(BaseController) Session().commit() except Exception: log.error(traceback.format_exc()) - h.flash(_('error occurred during hook creation'), + h.flash(_('Error occurred during hook creation'), category='error') return redirect(url('admin_edit_setting', setting_id='hooks')) @@ -402,6 +402,8 @@ class SettingsController(BaseController) # url('admin_settings_my_account') c.user = User.get(self.rhodecode_user.user_id) + c.perm_user = AuthUser(user_id=self.rhodecode_user.user_id, + ip_addr=self.ip_addr) c.ldap_dn = c.user.ldap_dn if c.user.username == 'default': @@ -433,6 +435,8 @@ class SettingsController(BaseController) # url('admin_settings_my_account_update', id=ID) uid = self.rhodecode_user.user_id c.user = User.get(self.rhodecode_user.user_id) + c.perm_user = AuthUser(user_id=self.rhodecode_user.user_id, + ip_addr=self.ip_addr) c.ldap_dn = c.user.ldap_dn email = self.rhodecode_user.email _form = UserForm(edit=True, @@ -460,45 +464,32 @@ class SettingsController(BaseController) return render('admin/users/user_edit_my_account.html') except Exception: log.error(traceback.format_exc()) - h.flash(_('error occurred during update of user %s') \ + h.flash(_('Error occurred during update of user %s') \ % form_result.get('username'), category='error') return redirect(url('my_account')) @NotAnonymous() def my_account_my_pullrequests(self): - c.my_pull_requests = PullRequest.query()\ + c.show_closed = request.GET.get('pr_show_closed') + + def _filter(pr): + s = sorted(pr, key=lambda o: o.created_on, reverse=True) + if not c.show_closed: + s = filter(lambda p: p.status != PullRequest.STATUS_CLOSED, s) + return s + + c.my_pull_requests = _filter(PullRequest.query()\ .filter(PullRequest.user_id == self.rhodecode_user.user_id)\ - .all() - c.participate_in_pull_requests = \ - [x.pull_request for x in PullRequestReviewers.query()\ - .filter(PullRequestReviewers.user_id == - self.rhodecode_user.user_id)\ - .all()] - return render('admin/users/user_edit_my_account_pullrequests.html') - - @NotAnonymous() - @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository') - def create_repository(self): - """GET /_admin/create_repository: Form to create a new item""" + .all()) - c.repo_groups = RepoGroup.groups_choices(check_perms=True) - c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) - choices, c.landing_revs = ScmModel().get_repo_landing_revs() - - new_repo = request.GET.get('repo', '') - c.new_repo = repo_name_slug(new_repo) + c.participate_in_pull_requests = _filter([ + x.pull_request for x in PullRequestReviewers.query()\ + .filter(PullRequestReviewers.user_id == + self.rhodecode_user.user_id).all()]) - ## 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" - ) + return render('admin/users/user_edit_my_account_pullrequests.html') 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 @@ -99,9 +99,9 @@ class UsersController(BaseController): "lastname": user.lastname, "last_login": h.fmt_date(user.last_login), "last_login_raw": datetime_to_time(user.last_login), - "active": h.bool2icon(user.active), - "admin": h.bool2icon(user.admin), - "ldap": h.bool2icon(bool(user.ldap_dn)), + "active": h.boolicon(user.active), + "admin": h.boolicon(user.admin), + "ldap": h.boolicon(bool(user.ldap_dn)), "action": user_actions(user.user_id, user.username), }) @@ -127,7 +127,7 @@ class UsersController(BaseController): usr = form_result['username'] action_logger(self.rhodecode_user, 'admin_created_user:%s' % usr, None, self.ip_addr, self.sa) - h.flash(_('created user %s') % usr, + h.flash(_('Created user %s') % usr, category='success') Session().commit() except formencode.Invalid, errors: @@ -139,7 +139,7 @@ class UsersController(BaseController): encoding="UTF-8") except Exception: log.error(traceback.format_exc()) - h.flash(_('error occurred during creation of user %s') \ + h.flash(_('Error occurred during creation of user %s') \ % request.POST.get('username'), category='error') return redirect(url('users')) @@ -195,7 +195,7 @@ class UsersController(BaseController): encoding="UTF-8") except Exception: log.error(traceback.format_exc()) - h.flash(_('error occurred during update of user %s') \ + h.flash(_('Error occurred during update of user %s') \ % form_result.get('username'), category='error') return redirect(url('edit_user', id=id)) @@ -211,7 +211,7 @@ class UsersController(BaseController): try: UserModel().delete(usr) Session().commit() - h.flash(_('successfully deleted user'), category='success') + h.flash(_('Successfully deleted user'), category='success') except (UserOwnsReposException, DefaultUserException), e: h.flash(e, category='warning') except Exception: 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 @@ -3,7 +3,7 @@ rhodecode.controllers.admin.users_groups ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Users Groups crud controller for pylons + User Groups crud controller for pylons :created_on: Jan 25, 2011 :author: marcink @@ -33,16 +33,16 @@ from pylons.controllers.util import abor from pylons.i18n.translation import _ from rhodecode.lib import helpers as h -from rhodecode.lib.exceptions import UsersGroupsAssignedException +from rhodecode.lib.exceptions import UserGroupsAssignedException from rhodecode.lib.utils2 import safe_unicode, str2bool from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator from rhodecode.lib.base import BaseController, render -from rhodecode.model.users_group import UsersGroupModel +from rhodecode.model.users_group import UserGroupModel -from rhodecode.model.db import User, UsersGroup, UsersGroupToPerm,\ - UsersGroupRepoToPerm, UsersGroupRepoGroupToPerm -from rhodecode.model.forms import UsersGroupForm +from rhodecode.model.db import User, UserGroup, UserGroupToPerm,\ + UserGroupRepoToPerm, UserGroupRepoGroupToPerm +from rhodecode.model.forms import UserGroupForm from rhodecode.model.meta import Session from rhodecode.lib.utils import action_logger from sqlalchemy.orm import joinedload @@ -67,23 +67,23 @@ class UsersGroupsController(BaseControll def index(self, format='html'): """GET /users_groups: All items in the collection""" # url('users_groups') - c.users_groups_list = UsersGroup().query().all() + c.users_groups_list = UserGroup().query().all() return render('admin/users_groups/users_groups.html') def create(self): """POST /users_groups: Create a new item""" # url('users_groups') - users_group_form = UsersGroupForm()() + users_group_form = UserGroupForm()() try: form_result = users_group_form.to_python(dict(request.POST)) - UsersGroupModel().create(name=form_result['users_group_name'], + UserGroupModel().create(name=form_result['users_group_name'], active=form_result['users_group_active']) gr = form_result['users_group_name'] action_logger(self.rhodecode_user, 'admin_created_users_group:%s' % gr, None, self.ip_addr, self.sa) - h.flash(_('created users group %s') % gr, category='success') + h.flash(_('Created user group %s') % gr, category='success') Session().commit() except formencode.Invalid, errors: return htmlfill.render( @@ -94,7 +94,7 @@ class UsersGroupsController(BaseControll encoding="UTF-8") except Exception: log.error(traceback.format_exc()) - h.flash(_('error occurred during creation of users group %s') \ + h.flash(_('Error occurred during creation of user group %s') \ % request.POST.get('users_group_name'), category='error') return redirect(url('users_groups')) @@ -110,31 +110,33 @@ class UsersGroupsController(BaseControll 'repositories_groups': {} } - ugroup_repo_perms = UsersGroupRepoToPerm.query()\ - .options(joinedload(UsersGroupRepoToPerm.permission))\ - .options(joinedload(UsersGroupRepoToPerm.repository))\ - .filter(UsersGroupRepoToPerm.users_group_id == id)\ + ugroup_repo_perms = UserGroupRepoToPerm.query()\ + .options(joinedload(UserGroupRepoToPerm.permission))\ + .options(joinedload(UserGroupRepoToPerm.repository))\ + .filter(UserGroupRepoToPerm.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)\ + ugroup_group_perms = UserGroupRepoGroupToPerm.query()\ + .options(joinedload(UserGroupRepoGroupToPerm.permission))\ + .options(joinedload(UserGroupRepoGroupToPerm.group))\ + .filter(UserGroupRepoGroupToPerm.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_obj = sorted((x.user for x in c.users_group.members), + key=lambda u: u.username.lower()) 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.available_members = sorted(((x.user_id, x.username) for x in + User.query().all()), + key=lambda u: u[1].lower()) def update(self, id): """PUT /users_groups/id: Update an existing item""" @@ -145,26 +147,26 @@ class UsersGroupsController(BaseControll # method='put') # url('users_group', id=ID) - c.users_group = UsersGroup.get_or_404(id) + c.users_group = UserGroup.get_or_404(id) self._load_data(id) available_members = [safe_unicode(x[0]) for x in c.available_members] - users_group_form = UsersGroupForm(edit=True, + users_group_form = UserGroupForm(edit=True, old_data=c.users_group.get_dict(), available_members=available_members)() try: form_result = users_group_form.to_python(request.POST) - UsersGroupModel().update(c.users_group, form_result) + UserGroupModel().update(c.users_group, form_result) gr = form_result['users_group_name'] action_logger(self.rhodecode_user, 'admin_updated_users_group:%s' % gr, None, self.ip_addr, self.sa) - h.flash(_('updated users group %s') % gr, category='success') + h.flash(_('Updated user group %s') % gr, category='success') Session().commit() except formencode.Invalid, errors: - ug_model = UsersGroupModel() + ug_model = UserGroupModel() defaults = errors.value e = errors.error_dict or {} defaults.update({ @@ -183,7 +185,7 @@ class UsersGroupsController(BaseControll encoding="UTF-8") except Exception: log.error(traceback.format_exc()) - h.flash(_('error occurred during update of users group %s') \ + h.flash(_('Error occurred during update of user group %s') \ % request.POST.get('users_group_name'), category='error') return redirect(url('edit_users_group', id=id)) @@ -196,16 +198,16 @@ class UsersGroupsController(BaseControll # h.form(url('users_group', id=ID), # method='delete') # url('users_group', id=ID) - usr_gr = UsersGroup.get_or_404(id) + usr_gr = UserGroup.get_or_404(id) try: - UsersGroupModel().delete(usr_gr) + UserGroupModel().delete(usr_gr) Session().commit() - h.flash(_('successfully deleted users group'), category='success') - except UsersGroupsAssignedException, e: + h.flash(_('Successfully deleted user group'), category='success') + except UserGroupsAssignedException, e: h.flash(e, category='error') except Exception: log.error(traceback.format_exc()) - h.flash(_('An error occurred during deletion of users group'), + h.flash(_('An error occurred during deletion of user group'), category='error') return redirect(url('users_groups')) @@ -217,10 +219,10 @@ class UsersGroupsController(BaseControll """GET /users_groups/id/edit: Form to edit an existing item""" # url('edit_users_group', id=ID) - c.users_group = UsersGroup.get_or_404(id) + c.users_group = UserGroup.get_or_404(id) self._load_data(id) - ug_model = UsersGroupModel() + ug_model = UserGroupModel() defaults = c.users_group.get_dict() defaults.update({ 'create_repo_perm': ug_model.has_perm(c.users_group, @@ -240,37 +242,37 @@ class UsersGroupsController(BaseControll """PUT /users_perm/id: Update an existing item""" # url('users_group_perm', id=ID, method='put') - users_group = UsersGroup.get_or_404(id) + users_group = UserGroup.get_or_404(id) grant_create_perm = str2bool(request.POST.get('create_repo_perm')) grant_fork_perm = str2bool(request.POST.get('fork_repo_perm')) inherit_perms = str2bool(request.POST.get('inherit_default_permissions')) - usersgroup_model = UsersGroupModel() + usergroup_model = UserGroupModel() try: users_group.inherit_default_permissions = inherit_perms Session().add(users_group) if grant_create_perm: - usersgroup_model.revoke_perm(id, 'hg.create.none') - usersgroup_model.grant_perm(id, 'hg.create.repository') - h.flash(_("Granted 'repository create' permission to users group"), + usergroup_model.revoke_perm(id, 'hg.create.none') + usergroup_model.grant_perm(id, 'hg.create.repository') + h.flash(_("Granted 'repository create' permission to user group"), category='success') else: - usersgroup_model.revoke_perm(id, 'hg.create.repository') - usersgroup_model.grant_perm(id, 'hg.create.none') - h.flash(_("Revoked 'repository create' permission to users group"), + usergroup_model.revoke_perm(id, 'hg.create.repository') + usergroup_model.grant_perm(id, 'hg.create.none') + h.flash(_("Revoked 'repository create' permission to user group"), category='success') if grant_fork_perm: - usersgroup_model.revoke_perm(id, 'hg.fork.none') - usersgroup_model.grant_perm(id, 'hg.fork.repository') - h.flash(_("Granted 'repository fork' permission to users group"), + usergroup_model.revoke_perm(id, 'hg.fork.none') + usergroup_model.grant_perm(id, 'hg.fork.repository') + h.flash(_("Granted 'repository fork' permission to user group"), category='success') else: - usersgroup_model.revoke_perm(id, 'hg.fork.repository') - usersgroup_model.grant_perm(id, 'hg.fork.none') - h.flash(_("Revoked 'repository fork' permission to users group"), + usergroup_model.revoke_perm(id, 'hg.fork.repository') + usergroup_model.grant_perm(id, 'hg.fork.none') + h.flash(_("Revoked 'repository fork' permission to user group"), category='success') Session().commit() 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 @@ -27,20 +27,22 @@ import traceback import logging -from pylons.controllers.util import abort from rhodecode.controllers.api import JSONRPCController, JSONRPCError from rhodecode.lib.auth import PasswordGenerator, AuthUser, \ HasPermissionAllDecorator, HasPermissionAnyDecorator, \ HasPermissionAnyApi, HasRepoPermissionAnyApi from rhodecode.lib.utils import map_groups, repo2db_mapper +from rhodecode.lib.utils2 import str2bool, time_to_datetime, safe_int +from rhodecode.lib import helpers as h from rhodecode.model.meta import Session from rhodecode.model.scm import ScmModel from rhodecode.model.repo import RepoModel from rhodecode.model.user import UserModel -from rhodecode.model.users_group import UsersGroupModel +from rhodecode.model.users_group import UserGroupModel from rhodecode.model.permission import PermissionModel from rhodecode.model.db import Repository, RhodeCodeSetting, UserIpMap +from rhodecode.lib.compat import json log = logging.getLogger(__name__) @@ -121,13 +123,13 @@ def get_repo_or_error(repoid): def get_users_group_or_error(usersgroupid): """ - Get users group by id or name or return JsonRPCError if not found + Get user group by id or name or return JsonRPCError if not found :param userid: """ - users_group = UsersGroupModel().get_group(usersgroupid) + users_group = UserGroupModel().get_group(usersgroupid) if users_group is None: - raise JSONRPCError('users group `%s` does not exist' % usersgroupid) + raise JSONRPCError('user group `%s` does not exist' % usersgroupid) return users_group @@ -202,7 +204,34 @@ class ApiController(JSONRPCController): 'Error occurred during rescan repositories action' ) - def lock(self, apiuser, repoid, locked, userid=Optional(OAttr('apiuser'))): + def invalidate_cache(self, apiuser, repoid): + """ + Dispatch cache invalidation action on given repo + + :param apiuser: + :param repoid: + """ + repo = get_repo_or_error(repoid) + if HasPermissionAnyApi('hg.admin')(user=apiuser) is False: + # check if we have admin permission for this repo ! + if HasRepoPermissionAnyApi('repository.admin', + 'repository.write')(user=apiuser, + repo_name=repo.repo_name) is False: + raise JSONRPCError('repository `%s` does not exist' % (repoid)) + + try: + invalidated_keys = ScmModel().mark_for_invalidation(repo.repo_name) + Session().commit() + return ('Cache for repository `%s` was invalidated: ' + 'invalidated cache keys: %s' % (repoid, invalidated_keys)) + except Exception: + log.error(traceback.format_exc()) + raise JSONRPCError( + 'Error occurred during cache invalidation action' + ) + + def lock(self, apiuser, repoid, locked=Optional(None), + userid=Optional(OAttr('apiuser'))): """ Set locking state on particular repository by given user, if this command is runned by non-admin account userid is set to user @@ -230,21 +259,77 @@ class ApiController(JSONRPCController): if isinstance(userid, Optional): userid = apiuser.user_id + user = get_user_or_error(userid) - locked = bool(locked) - try: - if locked: - Repository.lock(repo, user.user_id) + + if isinstance(locked, Optional): + lockobj = Repository.getlock(repo) + + if lockobj[0] is None: + return ('Repo `%s` not locked. Locked=`False`.' + % (repo.repo_name)) else: - Repository.unlock(repo) + userid, time_ = lockobj + user = get_user_or_error(userid) + + return ('Repo `%s` locked by `%s`. Locked=`True`. ' + 'Locked since: `%s`' + % (repo.repo_name, user.username, + json.dumps(time_to_datetime(time_)))) + + else: + locked = str2bool(locked) + try: + if locked: + Repository.lock(repo, user.user_id) + else: + Repository.unlock(repo) + + return ('User `%s` set lock state for repo `%s` to `%s`' + % (user.username, repo.repo_name, locked)) + except Exception: + log.error(traceback.format_exc()) + raise JSONRPCError( + 'Error occurred locking repository `%s`' % repo.repo_name + ) - return ('User `%s` set lock state for repo `%s` to `%s`' - % (user.username, repo.repo_name, locked)) - except Exception: - log.error(traceback.format_exc()) - raise JSONRPCError( - 'Error occurred locking repository `%s`' % repo.repo_name - ) + def get_locks(self, apiuser, userid=Optional(OAttr('apiuser'))): + """ + Get all locks for given userid, if + this command is runned by non-admin account userid is set to user + who is calling this method, thus returning locks for himself + + :param apiuser: + :param userid: + """ + if HasPermissionAnyApi('hg.admin')(user=apiuser): + pass + else: + #make sure normal user does not pass someone else userid, + #he is not allowed to do that + if not isinstance(userid, Optional) and userid != apiuser.user_id: + raise JSONRPCError( + 'userid is not the same as your user' + ) + ret = [] + if isinstance(userid, Optional): + user = None + else: + user = get_user_or_error(userid) + + #show all locks + for r in Repository.getAll(): + userid, time_ = r.locked + if time_: + _api_data = r.get_api_data() + # if we use userfilter just show the locks for this user + if user: + if safe_int(userid) == user.user_id: + ret.append(_api_data) + else: + ret.append(_api_data) + + return ret @HasPermissionAllDecorator('hg.admin') def show_ip(self, apiuser, userid): @@ -423,7 +508,7 @@ class ApiController(JSONRPCController): @HasPermissionAllDecorator('hg.admin') def get_users_group(self, apiuser, usersgroupid): """" - Get users group by name or id + Get user group by name or id :param apiuser: :param usersgroupid: @@ -442,13 +527,13 @@ class ApiController(JSONRPCController): @HasPermissionAllDecorator('hg.admin') def get_users_groups(self, apiuser): """" - Get all users groups + Get all user groups :param apiuser: """ result = [] - for users_group in UsersGroupModel().get_all(): + for users_group in UserGroupModel().get_all(): result.append(users_group.get_api_data()) return result @@ -462,15 +547,15 @@ class ApiController(JSONRPCController): :param active: """ - if UsersGroupModel().get_by_name(group_name): - raise JSONRPCError("users group `%s` already exist" % group_name) + if UserGroupModel().get_by_name(group_name): + raise JSONRPCError("user group `%s` already exist" % group_name) try: active = Optional.extract(active) - ug = UsersGroupModel().create(name=group_name, active=active) + ug = UserGroupModel().create(name=group_name, active=active) Session().commit() return dict( - msg='created new users group `%s`' % group_name, + msg='created new user group `%s`' % group_name, users_group=ug.get_api_data() ) except Exception: @@ -480,7 +565,7 @@ class ApiController(JSONRPCController): @HasPermissionAllDecorator('hg.admin') def add_user_to_users_group(self, apiuser, usersgroupid, userid): """" - Add a user to a users group + Add a user to a user group :param apiuser: :param usersgroupid: @@ -490,9 +575,9 @@ class ApiController(JSONRPCController): users_group = get_users_group_or_error(usersgroupid) try: - ugm = UsersGroupModel().add_user_to_group(users_group, user) + ugm = UserGroupModel().add_user_to_group(users_group, user) success = True if ugm != True else False - msg = 'added member `%s` to users group `%s`' % ( + msg = 'added member `%s` to user group `%s`' % ( user.username, users_group.users_group_name ) msg = msg if success else 'User is already in that group' @@ -505,7 +590,7 @@ class ApiController(JSONRPCController): except Exception: log.error(traceback.format_exc()) raise JSONRPCError( - 'failed to add member to users group `%s`' % ( + 'failed to add member to user group `%s`' % ( users_group.users_group_name ) ) @@ -523,9 +608,9 @@ class ApiController(JSONRPCController): users_group = get_users_group_or_error(usersgroupid) try: - success = UsersGroupModel().remove_user_from_group(users_group, + success = UserGroupModel().remove_user_from_group(users_group, user) - msg = 'removed member `%s` from users group `%s`' % ( + msg = 'removed member `%s` from user group `%s`' % ( user.username, users_group.users_group_name ) msg = msg if success else "User wasn't in group" @@ -534,7 +619,7 @@ class ApiController(JSONRPCController): except Exception: log.error(traceback.format_exc()) raise JSONRPCError( - 'failed to remove member from users group `%s`' % ( + 'failed to remove member from user group `%s`' % ( users_group.users_group_name ) ) @@ -555,6 +640,7 @@ class ApiController(JSONRPCController): raise JSONRPCError('repository `%s` does not exist' % (repoid)) members = [] + followers = [] for user in repo.repo_to_perm: perm = user.permission.permission_name user = user.user @@ -571,8 +657,12 @@ class ApiController(JSONRPCController): users_group_data['permission'] = perm members.append(users_group_data) + for user in repo.followers: + followers.append(user.user.get_api_data()) + data = repo.get_api_data() data['members'] = members + data['followers'] = followers return data def get_repos(self, apiuser): @@ -763,12 +853,13 @@ class ApiController(JSONRPCController): fork_name) ) - def delete_repo(self, apiuser, repoid): + def delete_repo(self, apiuser, repoid, forks=Optional(None)): """ Deletes a given repository :param apiuser: :param repoid: + :param forks: detach or delete, what do do with attached forks for repo """ repo = get_repo_or_error(repoid) @@ -776,13 +867,26 @@ class ApiController(JSONRPCController): # check if we have admin permission for this repo ! if HasRepoPermissionAnyApi('repository.admin')(user=apiuser, repo_name=repo.repo_name) is False: - raise JSONRPCError('repository `%s` does not exist' % (repoid)) + raise JSONRPCError('repository `%s` does not exist' % (repoid)) try: - RepoModel().delete(repo) + handle_forks = Optional.extract(forks) + _forks_msg = '' + _forks = [f for f in repo.forks] + if handle_forks == 'detach': + _forks_msg = ' ' + _('Detached %s forks') % len(_forks) + elif handle_forks == 'delete': + _forks_msg = ' ' + _('Deleted %s forks') % len(_forks) + elif _forks: + raise JSONRPCError( + 'Cannot delete `%s` it still contains attached forks' + % repo.repo_name + ) + + RepoModel().delete(repo, forks=forks) Session().commit() return dict( - msg='Deleted repository `%s`' % repo.repo_name, + msg='Deleted repository `%s`%s' % (repo.repo_name, _forks_msg), success=True ) except Exception: @@ -859,7 +963,7 @@ class ApiController(JSONRPCController): def grant_users_group_permission(self, apiuser, repoid, usersgroupid, perm): """ - Grant permission for users group on given repository, or update + Grant permission for user group on given repository, or update existing one if found :param apiuser: @@ -878,7 +982,7 @@ class ApiController(JSONRPCController): Session().commit() return dict( - msg='Granted perm: `%s` for users group: `%s` in ' + msg='Granted perm: `%s` for user group: `%s` in ' 'repo: `%s`' % ( perm.permission_name, users_group.users_group_name, repo.repo_name @@ -888,7 +992,7 @@ class ApiController(JSONRPCController): except Exception: log.error(traceback.format_exc()) raise JSONRPCError( - 'failed to edit permission for users group: `%s` in ' + 'failed to edit permission for user group: `%s` in ' 'repo: `%s`' % ( usersgroupid, repo.repo_name ) @@ -897,7 +1001,7 @@ class ApiController(JSONRPCController): @HasPermissionAllDecorator('hg.admin') def revoke_users_group_permission(self, apiuser, repoid, usersgroupid): """ - Revoke permission for users group on given repository + Revoke permission for user group on given repository :param apiuser: :param repoid: @@ -912,7 +1016,7 @@ class ApiController(JSONRPCController): Session().commit() return dict( - msg='Revoked perm for users group: `%s` in repo: `%s`' % ( + msg='Revoked perm for user group: `%s` in repo: `%s`' % ( users_group.users_group_name, repo.repo_name ), success=True @@ -920,7 +1024,7 @@ class ApiController(JSONRPCController): except Exception: log.error(traceback.format_exc()) raise JSONRPCError( - 'failed to edit permission for users group: `%s` in ' + 'failed to edit permission for user group: `%s` in ' 'repo: `%s`' % ( users_group.users_group_name, repo.repo_name ) diff --git a/rhodecode/controllers/changelog.py b/rhodecode/controllers/changelog.py --- a/rhodecode/controllers/changelog.py +++ b/rhodecode/controllers/changelog.py @@ -86,8 +86,8 @@ class ChangelogController(BaseRepoContro c.statuses = c.rhodecode_db_repo.statuses(page_revisions) except (RepositoryError, ChangesetDoesNotExistError, Exception), e: log.error(traceback.format_exc()) - h.flash(str(e), category='warning') - return redirect(url('home')) + h.flash(str(e), category='error') + return redirect(url('changelog_home', repo_name=c.repo_name)) self._graph(c.rhodecode_repo, collection, c.total_cs, c.size, p) diff --git a/rhodecode/controllers/changeset.py b/rhodecode/controllers/changeset.py --- a/rhodecode/controllers/changeset.py +++ b/rhodecode/controllers/changeset.py @@ -26,7 +26,7 @@ import logging import traceback from collections import defaultdict -from webob.exc import HTTPForbidden, HTTPBadRequest +from webob.exc import HTTPForbidden, HTTPBadRequest, HTTPNotFound from pylons import tmpl_context as c, url, request, response from pylons.i18n.translation import _ @@ -71,7 +71,7 @@ def get_ignore_ws(fid, GET): if ig_ws: try: return int(ig_ws[0].split(':')[-1]) - except: + except Exception: pass return ig_ws_global @@ -80,21 +80,21 @@ def _ignorews_url(GET, fileid=None): fileid = str(fileid) if fileid else None params = defaultdict(list) _update_with_GET(params, GET) - lbl = _('show white space') + lbl = _('Show white space') ig_ws = get_ignore_ws(fileid, GET) ln_ctx = get_line_ctx(fileid, GET) # global option if fileid is None: if ig_ws is None: params['ignorews'] += [1] - lbl = _('ignore white space') + lbl = _('Ignore white space') ctx_key = 'context' ctx_val = ln_ctx # per file options else: if ig_ws is None: params[fileid] += ['WS:1'] - lbl = _('ignore white space') + lbl = _('Ignore white space') ctx_key = fileid ctx_val = 'C:%s' % ln_ctx @@ -124,7 +124,7 @@ def get_line_ctx(fid, GET): try: return int(retval) - except: + except Exception: return 3 @@ -203,8 +203,8 @@ class ChangesetController(BaseRepoContro except (RepositoryError, ChangesetDoesNotExistError, Exception), e: log.error(traceback.format_exc()) - h.flash(str(e), category='warning') - return redirect(url('home')) + h.flash(str(e), category='error') + raise HTTPNotFound() c.changes = OrderedDict() @@ -329,7 +329,7 @@ class ChangesetController(BaseRepoContro text = text or (_('Status change -> %s') % ChangesetStatus.get_status_lbl(status)) - comm = ChangesetCommentsModel().create( + c.co = comm = ChangesetCommentsModel().create( text=text, repo=c.rhodecode_db_repo.repo_id, user=c.rhodecode_user.user_id, @@ -371,12 +371,11 @@ class ChangesetController(BaseRepoContro if not request.environ.get('HTTP_X_PARTIAL_XHR'): return redirect(h.url('changeset_home', repo_name=repo_name, revision=revision)) - + #only ajax below data = { 'target_id': h.safeid(h.safe_unicode(request.POST.get('f_path'))), } if comm: - c.co = comm data.update(comm.get_dict()) data.update({'rendered_text': render('changeset/changeset_comment_block.html')}) diff --git a/rhodecode/controllers/compare.py b/rhodecode/controllers/compare.py --- a/rhodecode/controllers/compare.py +++ b/rhodecode/controllers/compare.py @@ -3,7 +3,7 @@ rhodecode.controllers.compare ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - compare controller for pylons showoing differences between two + compare controller for pylons showing differences between two repos, branches, bookmarks or tips :created_on: May 6, 2012 @@ -40,7 +40,6 @@ from rhodecode.lib import diffs from rhodecode.model.db import Repository 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 @@ -84,80 +83,85 @@ class CompareController(BaseRepoControll raise HTTPBadRequest() def index(self, org_ref_type, org_ref, other_ref_type, other_ref): - + # org_ref will be evaluated in org_repo org_repo = c.rhodecode_db_repo.repo_name org_ref = (org_ref_type, org_ref) + # other_ref will be evaluated in other_repo other_ref = (other_ref_type, other_ref) - other_repo = request.GET.get('repo', org_repo) - 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') + other_repo = request.GET.get('other_repo', org_repo) + # If merge is True: + # Show what org would get if merged with other: + # List changesets that are ancestors of other but not of org. + # New changesets in org is thus ignored. + # Diff will be from common ancestor, and merges of org to other will thus be ignored. + # If merge is False: + # Make a raw diff from org to other, no matter if related or not. + # Changesets in one and not in the other will be ignored + merge = bool(request.GET.get('merge')) + # fulldiff disables cut_off_limit + c.fulldiff = request.GET.get('fulldiff') + # partial uses compare_cs.html template directly + partial = request.environ.get('HTTP_X_PARTIAL_XHR') + # as_form puts hidden input field with changeset revisions + c.as_form = partial and request.GET.get('as_form') + # swap url for compare_diff page - never partial and never as_form + c.swap_url = h.url('compare_url', + repo_name=other_repo, + org_ref_type=other_ref[0], org_ref=other_ref[1], + other_repo=org_repo, + other_ref_type=org_ref[0], other_ref=org_ref[1], + merge=merge or '') - 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=incoming_changesets) + org_repo = Repository.get_by_repo_name(org_repo) + other_repo = Repository.get_by_repo_name(other_repo) - c.org_repo = org_repo = Repository.get_by_repo_name(org_repo) - c.other_repo = other_repo = Repository.get_by_repo_name(other_repo) - - if c.org_repo is None: + if org_repo is None: log.error('Could not find org repo %s' % org_repo) raise HTTPNotFound - if c.other_repo is None: + if other_repo is None: log.error('Could not find other repo %s' % other_repo) raise HTTPNotFound - if c.org_repo != c.other_repo and h.is_git(c.rhodecode_repo): + if org_repo != other_repo and h.is_git(org_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: + if org_repo.scm_instance.alias != 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.org_repo = org_repo + c.other_repo = other_repo + c.org_ref = org_ref[1] + c.other_ref = other_ref[1] + c.org_ref_type = org_ref[0] + c.other_ref_type = other_ref[0] - c.cs_ranges, discovery_data = PullRequestModel().get_compare_data( - org_repo, org_ref, other_repo, other_ref, - ) + c.cs_ranges, c.ancestor = PullRequestModel().get_compare_data( + org_repo, org_ref, other_repo, other_ref, merge) c.statuses = c.rhodecode_db_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) if partial: + assert c.ancestor return render('compare/compare_cs.html') - c.org_ref = org_ref[1] - c.other_ref = other_ref[1] + if c.ancestor: + assert merge + # case we want a simple diff without incoming changesets, + # previewing what will be merged. + # Make the diff on the other repo (which is known to have other_ref) + log.debug('Using ancestor %s as org_ref instead of %s' + % (c.ancestor, org_ref)) + org_ref = ('rev', c.ancestor) + org_repo = other_repo - 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 c.fulldiff else None - 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 = diffs.differ(org_repo, org_ref, other_repo, other_ref) diff_processor = diffs.DiffProcessor(_diff or '', format='gitdiff', diff_limit=diff_limit) diff --git a/rhodecode/controllers/error.py b/rhodecode/controllers/error.py --- a/rhodecode/controllers/error.py +++ b/rhodecode/controllers/error.py @@ -91,7 +91,7 @@ class ErrorController(BaseController): [400, 401, 403, 404, 500]''' try: code = int(code) - except: + except Exception: code = 500 if code == 400: diff --git a/rhodecode/controllers/feed.py b/rhodecode/controllers/feed.py --- a/rhodecode/controllers/feed.py +++ b/rhodecode/controllers/feed.py @@ -88,9 +88,8 @@ class FeedController(BaseRepoController) def __get_desc(self, cs): desc_msg = [] - desc_msg.append('%s %s %s
' % (h.person(cs.author), - _('commited on'), - h.fmt_date(cs.date))) + desc_msg.append((_('%s committed on %s') + % (h.person(cs.author), h.fmt_date(cs.date))) + '
') #branches, tags, bookmarks if cs.branch: desc_msg.append('branch: %s
' % cs.branch) @@ -103,7 +102,7 @@ class FeedController(BaseRepoController) # 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('changeset: %s' % (_url, cs.raw_id[:8])) desc_msg.append('
')
         desc_msg.append(cs.message)
diff --git a/rhodecode/controllers/files.py b/rhodecode/controllers/files.py
--- a/rhodecode/controllers/files.py
+++ b/rhodecode/controllers/files.py
@@ -27,6 +27,7 @@ import os
 import logging
 import traceback
 import tempfile
+import shutil
 
 from pylons import request, response, tmpl_context as c, url
 from pylons.i18n.translation import _
@@ -55,6 +56,7 @@ from rhodecode.model.db import Repositor
 
 from rhodecode.controllers.changeset import anchor_url, _ignorews_url,\
     _context_url, get_line_ctx, get_ignore_ws
+from webob.exc import HTTPNotFound
 
 
 log = logging.getLogger(__name__)
@@ -83,14 +85,14 @@ class FilesController(BaseRepoController
             url_ = url('files_add_home',
                        repo_name=c.repo_name,
                        revision=0, f_path='')
-            add_new = '[%s]' % (url_, _('click here to add new file'))
+            add_new = h.link_to(_('Click here to add new file'), url_)
             h.flash(h.literal(_('There are no files yet %s') % add_new),
                     category='warning')
             redirect(h.url('summary_home', repo_name=repo_name))
 
-        except RepositoryError, e:
-            h.flash(str(e), category='warning')
-            redirect(h.url('files_home', repo_name=repo_name, revision='tip'))
+        except RepositoryError, e:  # including ChangesetDoesNotExistError
+            h.flash(str(e), category='error')
+            raise HTTPNotFound()
 
     def __get_filenode_or_redirect(self, repo_name, cs, path):
         """
@@ -107,9 +109,8 @@ class FilesController(BaseRepoController
             if file_node.is_dir():
                 raise RepositoryError('given path is a directory')
         except RepositoryError, e:
-            h.flash(str(e), category='warning')
-            redirect(h.url('files_home', repo_name=repo_name,
-                           revision=cs.raw_id))
+            h.flash(str(e), category='error')
+            raise HTTPNotFound()
 
         return file_node
 
@@ -121,13 +122,12 @@ class FilesController(BaseRepoController
         post_revision = request.POST.get('at_rev', None)
         if post_revision:
             cs = self.__get_cs_or_redirect(post_revision, repo_name)
-            redirect(url('files_home', repo_name=c.repo_name,
-                         revision=cs.raw_id, f_path=f_path))
 
         c.changeset = self.__get_cs_or_redirect(revision, repo_name)
         c.branch = request.GET.get('branch', None)
         c.f_path = f_path
         c.annotate = annotate
+        c.changeset = self.__get_cs_or_redirect(revision, repo_name)
         cur_rev = c.changeset.revision
 
         # prev link
@@ -160,6 +160,9 @@ class FilesController(BaseRepoController
                 c.file_changeset = (c.changeset
                                     if c.changeset.revision < file_last_cs.revision
                                     else file_last_cs)
+                #determine if we're on branch head
+                _branches = c.rhodecode_repo.branches
+                c.on_branch_head = revision in _branches.keys() + _branches.values()
                 _hist = []
                 c.file_history = []
                 if c.load_full_history:
@@ -171,9 +174,8 @@ class FilesController(BaseRepoController
             else:
                 c.authors = c.file_history = []
         except RepositoryError, e:
-            h.flash(str(e), category='warning')
-            redirect(h.url('files_home', repo_name=repo_name,
-                           revision='tip'))
+            h.flash(str(e), category='error')
+            raise HTTPNotFound()
 
         if request.environ.get('HTTP_X_PARTIAL_XHR'):
             return render('files/files_ypjax.html')
@@ -260,7 +262,7 @@ class FilesController(BaseRepoController
     @LoginRequired()
     @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
     def edit(self, repo_name, revision, f_path):
-        repo = Repository.get_by_repo_name(repo_name)
+        repo = c.rhodecode_db_repo
         if repo.enable_locking and repo.locked[0]:
             h.flash(_('This repository is has been locked by %s on %s')
                 % (h.person_by_id(repo.locked[0]),
@@ -269,6 +271,17 @@ class FilesController(BaseRepoController
             return redirect(h.url('files_home',
                                   repo_name=repo_name, revision='tip'))
 
+        # check if revision is a branch identifier- basically we cannot
+        # create multiple heads via file editing
+        _branches = repo.scm_instance.branches
+        # check if revision is a branch name or branch hash
+        if revision not in _branches.keys() + _branches.values():
+            h.flash(_('You can only edit files with revision '
+                      'being a valid branch '), category='warning')
+            return redirect(h.url('files_home',
+                                  repo_name=repo_name, revision='tip',
+                                  f_path=f_path))
+
         r_post = request.POST
 
         c.cs = self.__get_cs_or_redirect(revision, repo_name)
@@ -277,7 +290,7 @@ class FilesController(BaseRepoController
         if c.file.is_binary:
             return redirect(url('files_home', repo_name=c.repo_name,
                          revision=c.cs.raw_id, f_path=f_path))
-
+        c.default_message = _('Edited file %s via RhodeCode') % (f_path)
         c.f_path = f_path
 
         if r_post:
@@ -289,20 +302,17 @@ class FilesController(BaseRepoController
             mode = detect_mode(first_line, 0)
             content = convert_line_endings(r_post.get('content'), mode)
 
-            message = r_post.get('message') or (_('Edited %s via RhodeCode')
-                                                % (f_path))
+            message = r_post.get('message') or c.default_message
             author = self.rhodecode_user.full_contact
 
             if content == old_content:
-                h.flash(_('No changes'),
-                    category='warning')
+                h.flash(_('No changes'), category='warning')
                 return redirect(url('changeset_home', repo_name=c.repo_name,
                                     revision='tip'))
-
             try:
                 self.scm_model.commit_change(repo=c.rhodecode_repo,
                                              repo_name=repo_name, cs=c.cs,
-                                             user=self.rhodecode_user,
+                                             user=self.rhodecode_user.user_id,
                                              author=author, message=message,
                                              content=content, f_path=f_path)
                 h.flash(_('Successfully committed to %s') % f_path,
@@ -334,26 +344,22 @@ class FilesController(BaseRepoController
                                          redirect_after=False)
         if c.cs is None:
             c.cs = EmptyChangeset(alias=c.rhodecode_repo.alias)
-
+        c.default_message = (_('Added file via RhodeCode'))
         c.f_path = f_path
 
         if r_post:
             unix_mode = 0
             content = convert_line_endings(r_post.get('content'), unix_mode)
 
-            message = r_post.get('message') or (_('Added %s via RhodeCode')
-                                                % (f_path))
+            message = r_post.get('message') or c.default_message
+            filename = r_post.get('filename')
             location = r_post.get('location')
-            filename = r_post.get('filename')
             file_obj = r_post.get('upload_file', None)
 
             if file_obj is not None and hasattr(file_obj, 'filename'):
                 filename = file_obj.filename
                 content = file_obj.file
 
-            node_path = os.path.join(location, filename)
-            author = self.rhodecode_user.full_contact
-
             if not content:
                 h.flash(_('No content'), category='warning')
                 return redirect(url('changeset_home', repo_name=c.repo_name,
@@ -362,16 +368,26 @@ class FilesController(BaseRepoController
                 h.flash(_('No filename'), category='warning')
                 return redirect(url('changeset_home', repo_name=c.repo_name,
                                     revision='tip'))
+            if location.startswith('/') or location.startswith('.') or '../' in location:
+                h.flash(_('Location must be relative path and must not '
+                          'contain .. in path'), category='warning')
+                return redirect(url('changeset_home', repo_name=c.repo_name,
+                                    revision='tip'))
+            if location:
+                location = os.path.normpath(location)
+            filename = os.path.basename(filename)
+            node_path = os.path.join(location, filename)
+            author = self.rhodecode_user.full_contact
 
             try:
                 self.scm_model.create_node(repo=c.rhodecode_repo,
                                            repo_name=repo_name, cs=c.cs,
-                                           user=self.rhodecode_user,
+                                           user=self.rhodecode_user.user_id,
                                            author=author, message=message,
                                            content=content, f_path=node_path)
                 h.flash(_('Successfully committed to %s') % node_path,
                         category='success')
-            except NodeAlreadyExistsError, e:
+            except (NodeError, NodeAlreadyExistsError), e:
                 h.flash(_(e), category='error')
             except Exception:
                 log.error(traceback.format_exc())
@@ -400,8 +416,8 @@ class FilesController(BaseRepoController
 
         try:
             dbrepo = RepoModel().get_by_repo_name(repo_name)
-            if dbrepo.enable_downloads is False:
-                return _('downloads disabled')
+            if not dbrepo.enable_downloads:
+                return _('Downloads disabled')
 
             if c.rhodecode_repo.alias == 'hg':
                 # patch and reset hooks section of UI config to not run any
@@ -417,11 +433,40 @@ class FilesController(BaseRepoController
             return _('Empty repository')
         except (ImproperArchiveTypeError, KeyError):
             return _('Unknown archive type')
+        # archive cache
+        from rhodecode import CONFIG
+        rev_name = cs.raw_id[:12]
+        archive_name = '%s-%s%s' % (safe_str(repo_name.replace('/', '_')),
+                                    safe_str(rev_name), ext)
 
-        fd, archive = tempfile.mkstemp()
-        t = open(archive, 'wb')
-        cs.fill_archive(stream=t, kind=fileformat, subrepos=subrepos)
-        t.close()
+        use_cached_archive = False  # defines if we use cached version of archive
+        archive_cache_enabled = CONFIG.get('archive_cache_dir')
+        if not subrepos and archive_cache_enabled:
+            #check if we it's ok to write
+            if not os.path.isdir(CONFIG['archive_cache_dir']):
+                os.makedirs(CONFIG['archive_cache_dir'])
+            cached_archive_path = os.path.join(CONFIG['archive_cache_dir'], archive_name)
+            if os.path.isfile(cached_archive_path):
+                log.debug('Found cached archive in %s' % cached_archive_path)
+                fd, archive = None, cached_archive_path
+                use_cached_archive = True
+            else:
+                log.debug('Archive %s is not yet cached' % (archive_name))
+
+        if not use_cached_archive:
+            #generate new archive
+            try:
+                fd, archive = tempfile.mkstemp()
+                t = open(archive, 'wb')
+                log.debug('Creating new temp archive in %s' % archive)
+                cs.fill_archive(stream=t, kind=fileformat, subrepos=subrepos)
+                if archive_cache_enabled:
+                    #if we generated the archive and use cache rename that
+                    log.debug('Storing new archive in %s' % cached_archive_path)
+                    shutil.move(archive, cached_archive_path)
+                    archive = cached_archive_path
+            finally:
+                t.close()
 
         def get_chunked_archive(archive):
             stream = open(archive, 'rb')
@@ -429,13 +474,15 @@ class FilesController(BaseRepoController
                 data = stream.read(16 * 1024)
                 if not data:
                     stream.close()
-                    os.close(fd)
-                    os.remove(archive)
+                    if fd:  # fd means we used temporary file
+                        os.close(fd)
+                    if not archive_cache_enabled:
+                        log.debug('Destroing temp archive %s' % archive)
+                        os.remove(archive)
                     break
                 yield data
 
-        response.content_disposition = str('attachment; filename=%s-%s%s' \
-                                           % (repo_name, revision[:12], ext))
+        response.content_disposition = str('attachment; filename=%s' % (archive_name))
         response.content_type = str(content_type)
         return get_chunked_archive(archive)
 
@@ -474,6 +521,9 @@ class FilesController(BaseRepoController
                 c.changeset_1 = c.rhodecode_repo.get_changeset(diff1)
                 try:
                     node1 = c.changeset_1.get_node(f_path)
+                    if node1.is_dir():
+                        raise NodeError('%s path is a %s not a file'
+                                        % (node1, type(node1)))
                 except NodeDoesNotExistError:
                     c.changeset_1 = EmptyChangeset(cs=diff1,
                                                    revision=c.changeset_1.revision,
@@ -487,6 +537,9 @@ class FilesController(BaseRepoController
                 c.changeset_2 = c.rhodecode_repo.get_changeset(diff2)
                 try:
                     node2 = c.changeset_2.get_node(f_path)
+                    if node2.is_dir():
+                        raise NodeError('%s path is a %s not a file'
+                                        % (node2, type(node2)))
                 except NodeDoesNotExistError:
                     c.changeset_2 = EmptyChangeset(cs=diff2,
                                                    revision=c.changeset_2.revision,
diff --git a/rhodecode/controllers/forks.py b/rhodecode/controllers/forks.py
--- a/rhodecode/controllers/forks.py
+++ b/rhodecode/controllers/forks.py
@@ -38,10 +38,11 @@ from rhodecode.lib.auth import LoginRequ
     NotAnonymous, HasRepoPermissionAny, HasPermissionAllDecorator,\
     HasPermissionAnyDecorator
 from rhodecode.lib.base import BaseRepoController, render
-from rhodecode.model.db import Repository, RepoGroup, UserFollowing, User
+from rhodecode.model.db import Repository, RepoGroup, UserFollowing, User,\
+    RhodeCodeUi
 from rhodecode.model.repo import RepoModel
 from rhodecode.model.forms import RepoForkForm
-from rhodecode.model.scm import ScmModel
+from rhodecode.model.scm import ScmModel, GroupList
 from rhodecode.lib.utils2 import safe_int
 
 log = logging.getLogger(__name__)
@@ -54,7 +55,9 @@ class ForksController(BaseRepoController
         super(ForksController, self).__before__()
 
     def __load_defaults(self):
-        c.repo_groups = RepoGroup.groups_choices(check_perms=True)
+        acl_groups = GroupList(RepoGroup.query().all(),
+                               perm_set=['group.write', 'group.admin'])
+        c.repo_groups = RepoGroup.groups_choices(groups=acl_groups)
         c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
         choices, c.landing_revs = ScmModel().get_repo_landing_revs()
         c.landing_revs_choices = choices
@@ -93,9 +96,16 @@ class ForksController(BaseRepoController
             c.stats_percentage = '%.2f' % ((float((last_rev)) /
                                             c.repo_last_rev) * 100)
 
+        c.can_update = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_UPDATE).ui_active
+
         defaults = RepoModel()._get_defaults(repo_name)
+        # alter the description to indicate a fork
+        defaults['description'] = ('fork of repository: %s \n%s'
+                                   % (defaults['repo_name'],
+                                      defaults['description']))
         # add suffix to fork
         defaults['repo_name'] = '%s-fork' % defaults['repo_name']
+
         return defaults
 
     @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
@@ -152,11 +162,18 @@ class ForksController(BaseRepoController
         try:
             form_result = _form.to_python(dict(request.POST))
 
+            # an approximation that is better than nothing
+            if not RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_UPDATE).ui_active:
+                form_result['update_after_clone'] = False
+
             # create fork is done sometimes async on celery, db transaction
             # management is handled there.
             RepoModel().create_fork(form_result, self.rhodecode_user.user_id)
-            h.flash(_('forked %s repository as %s') \
-                      % (repo_name, form_result['repo_name']),
+            fork_url = h.link_to(form_result['repo_name_full'],
+                    h.url('summary_home', repo_name=form_result['repo_name_full']))
+
+            h.flash(h.literal(_('Forked repository %s as %s') \
+                      % (repo_name, fork_url)),
                     category='success')
         except formencode.Invalid, errors:
             c.new_repo = errors.value['repo_name']
@@ -172,4 +189,4 @@ class ForksController(BaseRepoController
             h.flash(_('An error occurred during repository forking %s') %
                     repo_name, category='error')
 
-        return redirect(url('home'))
+        return redirect(h.url('summary_home', repo_name=repo_name))
diff --git a/rhodecode/controllers/home.py b/rhodecode/controllers/home.py
--- a/rhodecode/controllers/home.py
+++ b/rhodecode/controllers/home.py
@@ -52,7 +52,7 @@ class HomeController(BaseController):
         c.groups = self.scm_model.get_repos_groups()
         c.group = None
 
-        if c.visual.lightweight_dashboard is False:
+        if not c.visual.lightweight_dashboard:
             c.repos_list = self.scm_model.get_repos()
         ## lightweight version of dashboard
         else:
@@ -81,7 +81,7 @@ class HomeController(BaseController):
     def branch_tag_switcher(self, repo_name):
         if request.is_xhr:
             c.rhodecode_db_repo = Repository.get_by_repo_name(c.repo_name)
-            c.rhodecode_repo = c.rhodecode_db_repo.scm_instance
-            return render('/switch_to_list.html')
-        else:
-            raise HTTPBadRequest()
+            if c.rhodecode_db_repo:
+                c.rhodecode_repo = c.rhodecode_db_repo.scm_instance
+                return render('/switch_to_list.html')
+        raise HTTPBadRequest()
diff --git a/rhodecode/controllers/journal.py b/rhodecode/controllers/journal.py
--- a/rhodecode/controllers/journal.py
+++ b/rhodecode/controllers/journal.py
@@ -207,7 +207,7 @@ class JournalController(BaseController):
             #filter
             try:
                 journal = _journal_filter(journal, c.search_term)
-            except:
+            except Exception:
                 # we want this to crash for now
                 raise
             journal = journal.filter(filtering_criterion)\
@@ -231,7 +231,7 @@ class JournalController(BaseController):
                                                 self.rhodecode_user.user_id)
                     Session.commit()
                     return 'ok'
-                except:
+                except Exception:
                     raise HTTPBadRequest()
 
             repo_id = request.POST.get('follows_repo_id')
@@ -241,7 +241,7 @@ class JournalController(BaseController):
                                                 self.rhodecode_user.user_id)
                     Session.commit()
                     return 'ok'
-                except:
+                except Exception:
                     raise HTTPBadRequest()
 
         log.debug('token mismatch %s vs %s' % (cur_token, token))
diff --git a/rhodecode/controllers/login.py b/rhodecode/controllers/login.py
--- a/rhodecode/controllers/login.py
+++ b/rhodecode/controllers/login.py
@@ -76,7 +76,7 @@ class LoginController(BaseController):
                 Session().commit()
 
                 # If they want to be remembered, update the cookie
-                if c.form_result['remember'] is not False:
+                if c.form_result['remember']:
                     _year = (datetime.datetime.now() +
                              datetime.timedelta(seconds=60 * 60 * 24 * 365))
                     session._set_cookie_expires(_year)
diff --git a/rhodecode/controllers/pullrequests.py b/rhodecode/controllers/pullrequests.py
--- a/rhodecode/controllers/pullrequests.py
+++ b/rhodecode/controllers/pullrequests.py
@@ -38,6 +38,7 @@ from rhodecode.lib.compat import json
 from rhodecode.lib.base import BaseRepoController, render
 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator,\
     NotAnonymous
+from rhodecode.lib.helpers import Page
 from rhodecode.lib import helpers as h
 from rhodecode.lib import diffs
 from rhodecode.lib.utils import action_logger, jsonify
@@ -52,6 +53,8 @@ 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 mercurial import scmutil
+from rhodecode.lib.utils2 import safe_int
 
 log = logging.getLogger(__name__)
 
@@ -67,34 +70,68 @@ class PullrequestsController(BaseRepoCon
         c.users_array = repo_model.get_users_js()
         c.users_groups_array = repo_model.get_users_groups_js()
 
-    def _get_repo_refs(self, repo):
-        hist_l = []
+    def _get_repo_refs(self, repo, rev=None, branch_rev=None):
+        """return a structure with repo's interesting changesets, suitable for
+        the selectors in pullrequest.html"""
 
-        branches_group = ([('branch:%s:%s' % (k, v), k) for
-                         k, v in repo.branches.iteritems()], _("Branches"))
-        bookmarks_group = ([('book:%s:%s' % (k, v), k) for
-                         k, v in repo.bookmarks.iteritems()], _("Bookmarks"))
-        tags_group = ([('tag:%s:%s' % (k, v), k) for
-                         k, v in repo.tags.iteritems()], _("Tags"))
-
-        hist_l.append(bookmarks_group)
-        hist_l.append(branches_group)
-        hist_l.append(tags_group)
+        # list named branches that has been merged to this named branch - it should probably merge back
+        peers = []
+        if branch_rev:
+            # not restricting to merge() would also get branch point and be better
+            # (especially because it would get the branch point) ... but is currently too expensive
+            revs = ["sort(parents(branch(id('%s')) and merge()) - branch(id('%s')))" %
+                    (branch_rev, branch_rev)]
+            otherbranches = {}
+            for i in scmutil.revrange(repo._repo, revs):
+                cs = repo.get_changeset(i)
+                otherbranches[cs.branch] = cs.raw_id
+            for branch, node in otherbranches.iteritems():
+                selected = 'branch:%s:%s' % (branch, node)
+                peers.append((selected, branch))
 
-        return hist_l
+        selected = None
+        branches = []
+        for branch, branchrev in repo.branches.iteritems():
+            n = 'branch:%s:%s' % (branch, branchrev)
+            branches.append((n, branch))
+            if rev == branchrev:
+                selected = n
+        bookmarks = []
+        for bookmark, bookmarkrev in repo.bookmarks.iteritems():
+            n = 'book:%s:%s' % (bookmark, bookmarkrev)
+            bookmarks.append((n, bookmark))
+            if rev == bookmarkrev:
+                selected = n
+        tags = []
+        for tag, tagrev in repo.tags.iteritems():
+            n = 'tag:%s:%s' % (tag, tagrev)
+            tags.append((n, tag))
+            if rev == tagrev and tag != 'tip': # tip is not a real tag - and its branch is better
+                selected = n
 
-    def _get_default_rev(self, repo):
-        """
-        Get's default revision to do compare on pull request
+        # prio 1: rev was selected as existing entry above
 
-        :param repo:
-        """
-        repo = repo.scm_instance
-        if 'default' in repo.branches:
-            return 'default'
-        else:
-            #if repo doesn't have default branch return first found
-            return repo.branches.keys()[0]
+        # prio 2: create special entry for rev; rev _must_ be used
+        specials = []
+        if rev and selected is None:
+            selected = 'rev:%s:%s' % (rev, rev)
+            specials = [(selected, '%s: %s' % (_("Changeset"), rev[:12]))]
+
+        # prio 3: most recent peer branch
+        if peers and not selected:
+            selected = peers[0][0][0]
+
+        # prio 4: tip revision
+        if not selected:
+            selected = 'tag:tip:%s' % repo.tags['tip']
+
+        groups = [(specials, _("Special")),
+                  (peers, _("Peer branches")),
+                  (bookmarks, _("Bookmarks")),
+                  (branches, _("Branches")),
+                  (tags, _("Tags")),
+                  ]
+        return [g for g in groups if g[0]], selected
 
     def _get_is_allowed_change_status(self, pull_request):
         owner = self.rhodecode_user.user_id == pull_request.user_id
@@ -105,6 +142,15 @@ class PullrequestsController(BaseRepoCon
     def show_all(self, repo_name):
         c.pull_requests = PullRequestModel().get_all(repo_name)
         c.repo_name = repo_name
+        p = safe_int(request.params.get('page', 1), 1)
+
+        c.pullrequests_pager = Page(c.pull_requests, page=p, items_per_page=10)
+
+        c.pullrequest_data = render('/pullrequests/pullrequest_data.html')
+
+        if request.environ.get('HTTP_X_PARTIAL_XHR'):
+            return c.pullrequest_data
+
         return render('/pullrequests/pullrequest_show_all.html')
 
     @NotAnonymous()
@@ -122,59 +168,51 @@ class PullrequestsController(BaseRepoCon
                     category='warning')
             redirect(url('summary_home', repo_name=org_repo.repo_name))
 
+        org_rev = request.GET.get('rev_end')
+        # rev_start is not directly useful - its parent could however be used
+        # as default for other and thus give a simple compare view
+        #other_rev = request.POST.get('rev_start')
+
+        c.org_repos = []
+        c.org_repos.append((org_repo.repo_name, org_repo.repo_name))
+        c.default_org_repo = org_repo.repo_name
+        c.org_refs, c.default_org_ref = self._get_repo_refs(org_repo.scm_instance, org_rev)
+
+        c.other_repos = []
         other_repos_info = {}
 
-        c.org_refs = self._get_repo_refs(c.rhodecode_repo)
-        c.org_repos = []
-        c.other_repos = []
-        c.org_repos.append((org_repo.repo_name, '%s/%s' % (
-                                org_repo.user.username, c.repo_name))
-                           )
-
-        # add org repo to other so we can open pull request agains itself
-        c.other_repos.extend(c.org_repos)
-
-        c.default_pull_request = org_repo.repo_name  # repo name pre-selected
-        c.default_pull_request_rev = self._get_default_rev(org_repo)  # revision pre-selected
-        c.default_revs = self._get_repo_refs(org_repo.scm_instance)
-        #add orginal repo
-        other_repos_info[org_repo.repo_name] = {
-            'gravatar': h.gravatar_url(org_repo.user.email, 24),
-            'description': org_repo.description,
-            'revs': h.select('other_ref', '', c.default_revs, class_='refs')
-        }
-
-        #gather forks and add to this list
-        for fork in org_repo.forks:
-            c.other_repos.append((fork.repo_name, '%s/%s' % (
-                                    fork.user.username, fork.repo_name))
-                                 )
-            other_repos_info[fork.repo_name] = {
-                'gravatar': h.gravatar_url(fork.user.email, 24),
-                'description': fork.description,
-                'revs': h.select('other_ref', '',
-                                 self._get_repo_refs(fork.scm_instance),
-                                 class_='refs')
-            }
-        #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)
-            c.other_repos.append((org_repo.parent.repo_name, '%s/%s' % (
-                                        org_repo.parent.user.username,
-                                        org_repo.parent.repo_name))
-                                     )
-            other_repos_info[org_repo.parent.repo_name] = {
-                'gravatar': h.gravatar_url(org_repo.parent.user.email, 24),
-                'description': org_repo.parent.description,
-                'revs': h.select('other_ref', '',
-                                 self._get_repo_refs(org_repo.parent.scm_instance),
-                                 class_='refs')
+        def add_other_repo(repo, branch_rev=None):
+            if repo.repo_name in other_repos_info: # shouldn't happen
+                return
+            c.other_repos.append((repo.repo_name, repo.repo_name))
+            other_refs, selected_other_ref = self._get_repo_refs(repo.scm_instance, branch_rev=branch_rev)
+            other_repos_info[repo.repo_name] = {
+                'user': dict(user_id=repo.user.user_id,
+                             username=repo.user.username,
+                             firstname=repo.user.firstname,
+                             lastname=repo.user.lastname,
+                             gravatar_link=h.gravatar_url(repo.user.email, 14)),
+                'description': repo.description.split('\n', 1)[0],
+                'revs': h.select('other_ref', selected_other_ref, other_refs, class_='refs')
             }
 
+        # add org repo to other so we can open pull request against peer branches on itself
+        add_other_repo(org_repo, branch_rev=org_rev)
+        c.default_other_repo = org_repo.repo_name
+
+        # gather forks and add to this list ... even though it is rare to
+        # request forks to pull from their parent
+        for fork in org_repo.forks:
+            add_other_repo(fork)
+
+        # add parents of this fork also, but only if it's not empty
+        if org_repo.parent and org_repo.parent.scm_instance.revisions:
+            add_other_repo(org_repo.parent)
+            c.default_other_repo = org_repo.parent.repo_name
+
+        c.default_other_repo_info = other_repos_info[c.default_other_repo]
         c.other_repos_info = json.dumps(other_repos_info)
-        c.review_members = [org_repo.user]
+
         return render('/pullrequests/pullrequest.html')
 
     @NotAnonymous()
@@ -189,29 +227,18 @@ class PullrequestsController(BaseRepoCon
             elif errors.error_dict.get('pullrequest_title'):
                 msg = _('Pull request requires a title with min. 3 chars')
             else:
-                msg = _('error during creation of pull request')
+                msg = _('Error creating pull request')
 
             h.flash(msg, 'error')
             return redirect(url('pullrequest_home', repo_name=repo_name))
 
         org_repo = _form['org_repo']
-        org_ref = _form['org_ref']
+        org_ref = 'rev:merge:%s' % _form['merge_rev']
         other_repo = _form['other_repo']
-        other_ref = _form['other_ref']
+        other_ref = 'rev:ancestor:%s' % _form['ancestor_rev']
         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']
 
@@ -269,9 +296,6 @@ 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,
@@ -283,7 +307,7 @@ class PullrequestsController(BaseRepoCon
          other_ref_rev) = pull_request.other_ref.split(':')
 
         # despite opening revisions for bookmarks/branches/tags, we always
-        # convert this to rev to prevent changes after book or branch change
+        # convert this to rev to prevent changes after bookmark or branch change
         org_ref = ('rev', org_ref_rev)
         other_ref = ('rev', other_ref_rev)
 
@@ -294,17 +318,12 @@ class PullrequestsController(BaseRepoCon
 
         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 = other_repo.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.org_ref_type = org_ref[0]
         c.other_ref = other_ref[1]
+        c.other_ref_type = other_ref[0]
 
         diff_limit = self.cut_off_limit if not fulldiff else None
 
@@ -386,7 +405,7 @@ class PullrequestsController(BaseRepoCon
 
         try:
             cur_status = c.statuses[c.pull_request.revisions[0]][0]
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             cur_status = 'undefined'
         if c.pull_request.is_closed() and 0:
@@ -398,6 +417,8 @@ class PullrequestsController(BaseRepoCon
                                          )
         c.changeset_statuses = ChangesetStatus.STATUSES
 
+        c.as_form = False
+        c.ancestor = None # there is one - but right here we don't know which
         return render('/pullrequests/pullrequest_show.html')
 
     @NotAnonymous()
@@ -410,11 +431,15 @@ class PullrequestsController(BaseRepoCon
         status = request.POST.get('changeset_status')
         change_status = request.POST.get('change_changeset_status')
         text = request.POST.get('text')
+        close_pr = request.POST.get('save_close')
 
         allowed_to_change_status = self._get_is_allowed_change_status(pull_request)
         if status and change_status and allowed_to_change_status:
-            text = text or (_('Status change -> %s')
+            _def = (_('Status change -> %s')
                             % ChangesetStatus.get_status_lbl(status))
+            if close_pr:
+                _def = _('Closing with') + ' ' + _def
+            text = text or _def
         comm = ChangesetCommentsModel().create(
             text=text,
             repo=c.rhodecode_db_repo.repo_id,
@@ -423,7 +448,9 @@ class PullrequestsController(BaseRepoCon
             f_path=request.POST.get('f_path'),
             line_no=request.POST.get('line'),
             status_change=(ChangesetStatus.get_status_lbl(status)
-            if status and change_status and allowed_to_change_status else None)
+                           if status and change_status
+                           and allowed_to_change_status else None),
+            closing_pr=close_pr
         )
 
         action_logger(self.rhodecode_user,
@@ -441,7 +468,7 @@ class PullrequestsController(BaseRepoCon
                     pull_request=pull_request_id
                 )
 
-            if request.POST.get('save_close'):
+            if close_pr:
                 if status in ['rejected', 'approved']:
                     PullRequestModel().close_pull_request(pull_request_id)
                     action_logger(self.rhodecode_user,
diff --git a/rhodecode/controllers/search.py b/rhodecode/controllers/search.py
--- a/rhodecode/controllers/search.py
+++ b/rhodecode/controllers/search.py
@@ -29,7 +29,7 @@ from pylons.i18n.translation import _
 from pylons import request, config, tmpl_context as c
 
 from rhodecode.lib.auth import LoginRequired
-from rhodecode.lib.base import BaseController, render
+from rhodecode.lib.base import BaseRepoController, render
 from rhodecode.lib.indexers import CHGSETS_SCHEMA, SCHEMA, CHGSET_IDX_NAME, \
     IDX_NAME, WhooshResultWrapper
 
@@ -46,14 +46,14 @@ from rhodecode.lib.utils2 import safe_st
 log = logging.getLogger(__name__)
 
 
-class SearchController(BaseController):
+class SearchController(BaseRepoController):
 
     @LoginRequired()
     def __before__(self):
         super(SearchController, self).__before__()
 
-    def index(self, search_repo=None):
-        c.repo_name = search_repo
+    def index(self, repo_name=None):
+        c.repo_name = repo_name
         c.formated_results = []
         c.runtime = ''
         c.cur_query = request.GET.get('q', None)
diff --git a/rhodecode/controllers/settings.py b/rhodecode/controllers/settings.py
deleted file mode 100644
--- a/rhodecode/controllers/settings.py
+++ /dev/null
@@ -1,198 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    rhodecode.controllers.settings
-    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-    Settings controller for rhodecode
-
-    :created_on: Jun 30, 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 tmpl_context as c, request, url
-from pylons.controllers.util import redirect
-from pylons.i18n.translation import _
-
-import rhodecode.lib.helpers as h
-
-from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAllDecorator,\
-    HasRepoPermissionAnyDecorator
-from rhodecode.lib.base import BaseRepoController, render
-from rhodecode.lib.utils import invalidate_cache, action_logger
-
-from rhodecode.model.forms import RepoSettingsForm
-from rhodecode.model.repo import RepoModel
-from rhodecode.model.db import RepoGroup, Repository
-from rhodecode.model.meta import Session
-from rhodecode.model.scm import ScmModel
-
-log = logging.getLogger(__name__)
-
-
-class SettingsController(BaseRepoController):
-
-    @LoginRequired()
-    def __before__(self):
-        super(SettingsController, self).__before__()
-
-    def __load_defaults(self):
-        c.repo_groups = RepoGroup.groups_choices(check_perms=True)
-        c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
-
-        repo_model = RepoModel()
-        c.users_array = repo_model.get_users_js()
-        c.users_groups_array = repo_model.get_users_groups_js()
-        choices, c.landing_revs = ScmModel().get_repo_landing_revs()
-        c.landing_revs_choices = choices
-
-    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.not_mapped_error(repo_name)
-            return redirect(url('home'))
-
-        ##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,
-            encoding="UTF-8",
-            force_defaults=False
-        )
-
-    @HasRepoPermissionAllDecorator('repository.admin')
-    def update(self, repo_name):
-        self.__load_defaults()
-        repo_model = RepoModel()
-        changed_name = repo_name
-        #override the choices with extracted revisions !
-        choices, c.landing_revs = ScmModel().get_repo_landing_revs(repo_name)
-        c.landing_revs_choices = choices
-        repo = Repository.get_by_repo_name(repo_name)
-        _form = RepoSettingsForm(edit=True,
-                                old_data={'repo_name': repo_name,
-                                          'repo_group': repo.group.get_dict() \
-                                              if repo.group else {}},
-                                 repo_groups=c.repo_groups_choices,
-                                 landing_revs=c.landing_revs_choices)()
-        try:
-            form_result = _form.to_python(dict(request.POST))
-            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')
-            changed_name = form_result['repo_name_full']
-            action_logger(self.rhodecode_user, 'user_updated_repo',
-                          changed_name, self.ip_addr, self.sa)
-            Session().commit()
-        except formencode.Invalid, errors:
-            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') \
-                    % repo_name, category='error')
-
-        return redirect(url('repo_settings_home', repo_name=changed_name))
-
-    @HasRepoPermissionAllDecorator('repository.admin')
-    def delete(self, repo_name):
-        """DELETE /repos/repo_name: Delete an existing item"""
-        # Forms posted to this method should contain a hidden field:
-        #    
-        # Or using helpers:
-        #    h.form(url('repo_settings_delete', repo_name=ID),
-        #           method='delete')
-        # url('repo_settings_delete', repo_name=ID)
-
-        repo_model = RepoModel()
-        repo = repo_model.get_by_repo_name(repo_name)
-        if not repo:
-            h.not_mapped_error(repo_name)
-            return redirect(url('home'))
-        try:
-            action_logger(self.rhodecode_user, 'user_deleted_repo',
-                              repo_name, self.ip_addr, self.sa)
-            repo_model.delete(repo)
-            invalidate_cache('get_repo_cached_%s' % repo_name)
-            h.flash(_('deleted repository %s') % repo_name, category='success')
-            Session().commit()
-        except Exception:
-            log.error(traceback.format_exc())
-            h.flash(_('An error occurred during deletion of %s') % repo_name,
-                    category='error')
-
-        return redirect(url('admin_settings_my_account', anchor='my'))
-
-    @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
-    def toggle_locking(self, repo_name):
-        """
-        Toggle locking of repository by simple GET call to url
-
-        :param repo_name:
-        """
-
-        try:
-            repo = Repository.get_by_repo_name(repo_name)
-
-            if repo.enable_locking:
-                if repo.locked[0]:
-                    Repository.unlock(repo)
-                    action = _('unlocked')
-                else:
-                    Repository.lock(repo, c.rhodecode_user.user_id)
-                    action = _('locked')
-
-                h.flash(_('Repository has been %s') % action,
-                        category='success')
-        except Exception, e:
-            log.error(traceback.format_exc())
-            h.flash(_('An error occurred during unlocking'),
-                    category='error')
-        return redirect(url('summary_home', repo_name=repo_name))
diff --git a/rhodecode/controllers/summary.py b/rhodecode/controllers/summary.py
--- a/rhodecode/controllers/summary.py
+++ b/rhodecode/controllers/summary.py
@@ -30,20 +30,23 @@ import urllib
 from time import mktime
 from datetime import timedelta, date
 from urlparse import urlparse
-from rhodecode.lib.compat import product
-
-from rhodecode.lib.vcs.exceptions import ChangesetError, EmptyRepositoryError, \
-    NodeDoesNotExistError
 
 from pylons import tmpl_context as c, request, url, config
 from pylons.i18n.translation import _
+from webob.exc import HTTPBadRequest
 
 from beaker.cache import cache_region, region_invalidate
 
+from rhodecode.lib import helpers as h
+from rhodecode.lib.compat import product
+from rhodecode.lib.vcs.exceptions import ChangesetError, EmptyRepositoryError, \
+    NodeDoesNotExistError
 from rhodecode.config.conf import ALL_READMES, ALL_EXTS, LANGUAGES_EXTENSIONS_MAP
 from rhodecode.model.db import Statistics, CacheInvalidation
-from rhodecode.lib.utils2 import safe_unicode
-from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
+from rhodecode.lib.utils import jsonify
+from rhodecode.lib.utils2 import safe_unicode, safe_str
+from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator,\
+    NotAnonymous
 from rhodecode.lib.base import BaseRepoController, render
 from rhodecode.lib.vcs.backends.base import EmptyChangeset
 from rhodecode.lib.markup_renderer import MarkupRenderer
@@ -70,8 +73,6 @@ class SummaryController(BaseRepoControll
 
     def index(self, repo_name):
         c.dbrepo = dbrepo = c.rhodecode_db_repo
-        c.following = self.scm_model.is_following_repo(repo_name,
-                                                self.rhodecode_user.user_id)
 
         def url_generator(**kw):
             return url('shortlog_home', repo_name=repo_name, size=10, **kw)
@@ -101,10 +102,10 @@ class SummaryController(BaseRepoControll
            'pass': password,
            'scheme': parsed_url.scheme,
            'netloc': parsed_url.netloc,
-           'path': decoded_path
+           'path': urllib.quote(safe_str(decoded_path))
         }
 
-        uri = uri_tmpl % uri_dict
+        uri = (uri_tmpl % uri_dict)
         # generate another clone url by id
         uri_dict.update(
          {'path': decoded_path.replace(repo_name, '_%s' % c.dbrepo.repo_id)}
@@ -138,7 +139,9 @@ class SummaryController(BaseRepoControll
         if dbrepo.enable_statistics:
             c.show_stats = True
             c.no_data_msg = _('No data loaded yet')
-            run_task(get_commits_stats, c.dbrepo.repo_name, ts_min_y, ts_max_y)
+            recurse_limit = 500  # don't recurse more than 500 times when parsing
+            run_task(get_commits_stats, c.dbrepo.repo_name, ts_min_y,
+                     ts_max_y, recurse_limit)
         else:
             c.show_stats = False
             c.no_data_msg = _('Statistics are disabled for this repository')
@@ -186,6 +189,14 @@ class SummaryController(BaseRepoControll
             self.__get_readme_data(c.rhodecode_db_repo)
         return render('summary/summary.html')
 
+    @NotAnonymous()
+    @jsonify
+    def repo_size(self, repo_name):
+        if request.is_xhr:
+            return c.rhodecode_db_repo._repo_size()
+        else:
+            raise HTTPBadRequest()
+
     def __get_readme_data(self, db_repo):
         repo_name = db_repo.repo_name
 
diff --git a/rhodecode/i18n/en/LC_MESSAGES/rhodecode.mo b/rhodecode/i18n/en/LC_MESSAGES/rhodecode.mo
index 8cbf7e8c5911a564a3110e73d3892a447ef35477..678bc1fb6ff08138c37bf6d6353d5d38494ab9c9
GIT binary patch
literal 58504
zc%1Egd7McXOe?5i8Ht01Bxi)PUz`eI&w&zKnBIrTmF_Psqlg75QrpWi?2N9NqB
zI#qS*oKvSxovN;nFZ|I=js6RqrD?w+IQR<9^WWTCHSMPapCWiY!RH9(5PXkdD}ra=
zrfF>nwiZ}L@HYg<6YNHC5y4*&`~$&D2!2cOe1aF>u4xw#yqe&}1aBsIA;Cg|mogoa
zpAfvs1X~iEb35o+BJgE`=Mvl|={*9E5Im3I?cMzOSum{0k
z5%AfHK{pa=6h
zLC)Jdp`XKocf1qE^<^i>|L>j9&rdrG-#Y`ZLucUi>vbjG*`OL)A;Qv^=$
z40>mEhW;)hSjlt{oJa7IE`&pHO&8Exc!#F7A$S+TYY0xf1A4vk4vg=^J0Oo1carP~
z<`BG<@d@5Sa3;Z<3GOD?ktax3wAZOC@M{QW5q!KW__C=h+CN6{MuO*d1Adoom`8zb
zm?yKkq2CWA|I9qpZ=VN#R^~yjLnIw0_#=W1d63iSJm|rcJn-ppDPNWcIWNzHUaygM
zwoCe*Jm|y6QvZ*V{!;q+hqQlYzNTGH@E7@_r}@CYH6L_#CfJ_fuzb+}SU&1)&&Rwt
zm=C%BJs)~0Krgx%fX;yg3ki-O*qZ4tz`XpJU#MEbD=B%;^Dr
z+tdT&d8-Hbd$ECl>zA?W)Lf1g~bjE`&XPw-9>y_d?KdMK9=o$6nx1
zbuaLDOfT?pNiWQ&-Mt`>KMMR;FVJ~GZ_s&ZZ|H5C-YDjqV@awqL`9MW}aU5ysiM2y*FF1UdC7f*ublg1*-lflr|#^gE#l
z<9dQ%XYQ{Ee9(%a-`5nQy&H*r8q}=s!_{_9m8Kd{2~s|MR5Yk`nOYl@jo2
zo3y`M>KzrlFG@h)ze~WMi%U^2yA2=PQSu{%twt<>qqClP}7__X{haFP$sU
zPfZ2v_Y6sIBX|?zS3vJuRU*GvCGtmAqQ4g^F>g;+f*=1~3BI0H1vy+G@R};n-Kh$E
z?q3Bt-&F;E_^KeMSQYp`TGErNFmGp6LGCN1{syVHP4f3wfsPNP-j`L-_kT$LT3_T}
z(ie7C?+bno?~C<%bYIXjy)VW)TkyB_gLzH9oS
zUR!}T_XEA1`hgFG=!^8jdNQFO*4@?pVDCTchxPQ5{%E(bKlG@yKlqgB54!H}
z557OzALE!q@G^o6`a^FwNdBw+(eF-4ALx&99+LKtN&fHpL!UqIkMaIf%Fi1B`*P6$
z%!@t*=kPp|v^EgqyJ#Tv>;{5&a`r&bJ!c^7#CE|uG7$9qeIVAKZwJEP={ZQb99q#J
z(DUdZ;7uO{J)1K~?9m|Dzx9K#KJOg_y8lz)8H0g;;b4sO%E7>IJy`6Jl=m78`ScwO
zewtDq9Sr`BmGXxMLtc*yd_mxj!Jy}TY47vF(2xHo?VURW?OZ~TTr}+}fmnH$n~h?e?A2I`jx
zUVM8O+Pi!x=xinMwxQ^+Xej6%FckDx4+TH#Bt3R0_%TWHXAAzbL!l=x4aKW>(P{u+m&{&>NgHVpEe
zD|oAhq5mzzAeRGz_t7xu>mLN~8)@e!2Jn7qp#7^2@VTvlcJd71RT-euZwNmO%>PM(
zw@B)}Vt}5#2KaHpz&L+zpx?h4vR|vlc+aUu{^iy1Us_j#j-J&Rf1hgD;o54nGm{`~
zHMD1{VKngIIE4}cG40pRxwfNp;P{2mp+c&1A`&jmo=O9An(
z0~pV-0O)Uxj(3?&0O4c9A4+c?hQV@EwSm4GW_J?l=p$F#;r#VaT(&6BH
z`Ebnh#Bk6tVL0f0YB>6NaX8xDHym>QT+-hT$9OIq0Y2Y60(>YKfqdTx)E_$ndOt_X
z4~zhRzZd~ON(+G>zX?HKZx4ZvJ|XN2f+6@pQ$yg-`VhvwPwM?81bTl|hkh=tL;d19
z;F$!;1=Aj=6Md-z{-*>UL
zes7Mz9|%U^4?G?L9d8kg5j+tAKPsb;`^YHd+ZaXrW24ZUN21{8^eEPgMN#l`MHKYB
z6$O3AqmbKIQRv;7BT?`Ck=S=#HB#o^Nc1y%B9=f(#3X}udT
zuF?jKvu^{&F^FIz^PgZ3)~5#ecdbXEA8Qo+lj)Xz{jiZ1E0I!2YHMj
zNG#MIy$^hAISzDRFb?Ugap1@G*WfZuTC1hii`0s2-w0e0qz38=Sq0_5`F6EL4Hc@Xok
zHNhf+y&lAToAn_0{`7;;qm2)uoev*`oX&U%e7*i5=);{4K`)0$e&`|aZ=9rOO8U8n
zK<}1^pg*4o{Od!Y>pOv0PDH)V6VYzDq>YK-Z~a8@fAmD?#eEYoo`)ww51yI`z1}tv
za(iONT)~?^8S{SeWbl36Wa#&sQtz;||IuX7{fYGZpOdk^
zek0`H$LRu97-4t*H?&3+j5=RJ)1vy33QUfLT3X^Lp=9|7L#N6_Ae
zN5IdmlE0VW*fYq^J_35mAH_Tx`Y7z`!;eCa8y>}cIV!N_6zKhJQ!oz)Oo82+I|cLo
zr70NyTT>v9_oqPrKAQsm{CkSTwWlKgx~agsV=DMsHWl;?5*U~Yy+}xUoWMt?Vmxys
z{p?i8?Ukuwho_1io{IVNf%Nl*wD+C#ckVRQyJQ;pf8{jUCrv~Bo2E&;e;WMKfzuEd
zyk{EZ`>E9buW2|x``0wcbLL|xU;Y^4Qkx$G-+%WQ@c;A}EO?_>1cnRq}NLQ*QP_Rho{31
z{%8i|cf$opsG`+c*q{;Zje_Wn8>_*XmuJJ|aP@MYu^5`TRH
z{{6Nmfd98AFpqxyB<4xcljwKKlgMBDBAsYUeXWEfj&%^`cFxEk@T}d+Fv^de#5RgqNjrYr#YbWt2sD7
z`^8+)-(xQ7)z8Jem^4@R@pGXk>*k`LeRH7??@RixbDfryzCSPz^KZpG^!vs;1V4pwHI}%v}IF
z3m2fB0Shp0V*&b!Ex>s0T>yG#EI>cYrF^TvJqtkJkp#}l81UOx9U
z=s55+^#4Df27i9}4ETHFGvMQ(XE2}cdq(#40$+RvbiV!!=-m4Z^!8&ZZ?O>LxqKnU
zf89dlcUvg;5f(!J#zL%14GY1qnNsgXf!hV|ZK?N%g&5~o3n7>97D7%f7D10MSOk6l
z)gtieH;d43?jnq4;P`mPZy#6KP|$zzFq|VJ!i3;<1I!%H!enb
zm&L#@T`cGPf)|$Z2Nt9KnTx@Pd6Irb@V73;INug{VzKyZi(!YpTa5m%TY~mFFTwaq
zmVo~iOHgmn67XTf67VUp1nu7^^&S(vg-bx+%S*tYx1`=lDgW~l$opSQFs{p%!mqt%
zDdziKOF^H1Dez-ULEreLGR~#wZ{AYyY2{Mzd86c?SPFT6wG{HcU>VlQw#$Gwa~bBt
z#$}*?*D}o4kCtJ)EuMvbpZ_fU{~MkKy+fV_{@u@_-A5#UnZVbdh21{+EZV#DIoRoL
z&tYE1p2Iv@_#F8D=5x@Oubx9cS3D2gPR0AJU=06Dxa@WU76y!{0^hgl9eU$h+jxO6$>bnSBRzrCdISdMvHxEyl#FGu}|
z)JsVI1Iy(;fz(^H9QwXuIr?8C`Ma0H&K_D0eqOZ#>vj7Tpr_{wjJJ3N@DnQ_mwQ*B
zpNCeU-eW7!-=Y=hXZ;G$xorjL`%vng5ct^&(EHaF;Dfdj`M+8T`u<}j)|1?oSa*Xf
zVejXy#Cp1WCEES>O6bv#R)J5~tpZ)QuL9rmR$&}vtFZs7S_Qq0NdBl*=y!~yC#;fl
z%2jB8hU7oF3i>>M6~??P1$
z_7dzw{Y$`m^d*V&zJ&GXrI+CEeESm4&(3%m^yIw^yq+&Z&&pmFd-O8wU-)IL&*NVP
z-HQdjBKU8bG2n`uaNbm$MG_Z(9ev?(5`!i{P2-(7&|~a+x4_)7C*>=L+6RX=k(G?UDB1
zUk5&)kaoTnyq4=h=Vj}KAL}vyyQ~M^fc2<1Vm;^?zaIQ}d_BfFXFd8|wqEvY>oMLf
zlD~gF{FkHaLC3f2G5!`CV26LT0qykKfPHbl4X_(CHoz{wwE^vZw*mD0c%#IHH$pzQ
zY(%>qH)1^b8_|BnM$jAFi1V{C8!?V`8|9wDM$q@cMy#)Yl>9R`p`V{_0{^bu1b$q%
z33^qq3G;s7Cah1fP2k7eP0;hFrT(%_pnJn6oS*I31Uda;Gw@n(mVKGPE}K!Wcr)l4
zx*2|8-DdD}%4XPw1)H({y}B9e^B*>2eLQ;$#&^pWjJs$H?AEX?Xz$@I;M)_DUb6+`
zdv%N4AKD`KM7MySUvB|DXKa=AZL7pPw_;qkY(;tJt&mgcR`?$iw#q#+!P~VJ?Y*-V
z^nSP%{r+Ps_;B_%;Qw?R=)P~nK{^K2(=hy839l1L|Z}|@N
zQ?mo@-oFEKo-gT_c3?dFcF29D9pJ+^l7H!|sDIO|(EGAiQ9j{S@OR;>@T1ne3Vyuz
zD)jX)uY!&iuVG(sfBw3-ta`@U>l#_u0EJ
zFE8DN{yObKe?_~XPyKg6KYhDkZ=<_lKPK;j+*a>Ge@Ay={D0mBI?mY*d0w$w?v?CD
ze(r9_y=XW55lir%*bO~jv0Kh_cZ06acguPC9yu@HgMH)mdk`-v+XH?-Byh?e&^>Dp
z`2NfunP+>z|22ZQX%G5)ZI7I{O1-c5zz;ubuh_Z0vJcw}ywbg}Z@#^le-rjX59jQ~
z_&4kYzYgz3|DWy!-@e)__qq20FKZv#>9$Yqf$Rf4WA|Zv^Y($xSNDnEybt_4v`@|-
z_Q6ln_RIaT{TS!D`!S9S_T&8Qiv2i0o4FtU-O>GWFXRCHlb#2le@hR5jvWWk{znHO
zhrdht&)-IQ+qa>o-QR|N8S*yxaNpaoJCDDO^RokQV;mFTLA-eRJCN7!-+}yp{Vw{+
ze;4y?$h$Z{d*ofLubmHKd?OCZe&e9*Hv~R#Q106aoP7}X=c$A6?=~L9IKMdvd0c)7
z^WfS;(6@GnAkTtB;NO5la!*9?EJ=?(1U;W3_0}DN{PrG#d_O+~K7D-%>)FNcfgkzr
zK`#cr2mNh)5B#6-9{70RJ=FXBJ)EDlIE;B!br|^f9tPhZJ`DUNhsBRQEPm`^@bTbb
z@cEyIArJk1oS)^r558@EA9TMi=?~rqKaRf-e*NWr(VHWX>jg(Z*R@B$pFGL$cLe$v
zK7##3{SnA#?Gf0GjYrVl?jz{uvm=n>mq)NZ{rUrm(|-WD&z1C=4{(0=^#_=Doj=6>
zCMa;}huH7_?nChRvX8J{7k&hLJnkcmf5k`e8{Yj0?f?5D=-V%k!p@W&MZNe@$mNBj
za$a*3^YG|VoS%Jn6!Wd7mC!uXPOiGh5)2W1wrbz;~tISI5xqkB=jL$#L-a`s3h#`{U4yTaIHqcOI8}
zGsmIViQ|yl=;M(41IICrX_CKI@U|X@9=vfJ`nOx!IV}0#2;O(nUyBoH@8<%qJRx+Q
zK>hY7Fs{x5d!LYbCiueyzfRKD35h42ka&`$7oGr}Yb3q-1oVIZ3DEJrz)wy?%5~N
z@8XkKUsp=`n}WaZB;@q&N$e92pM*WU_!IP3{0Zt;e1iEi!B5d%
z8&0FWm{}XN;%1C01jBlH
zAmTUk=wEtdi#jI?EX$~E2BX0U$1O!#JVI^P2UCf-I;(XwHZ5GK@$uE`JXc{paQijE{uQ5$Oe|D`bEp`&!B9RewMr?#a>J~G?zJRH|
z^OQP-BDKi`>4qnv@VZArp$KT
zR5&D7B;>EQ_JvJs6^
zyQHiBYCUSk0!EZtkCPfxr!mt|gN{+fuu(^!HL*yY9uJrxtC8kSogNLDhGpupL|Bzj
zgQ1|$U|NWO2F)q@KN9nsG0X_dXM~f4FzZ@p@zi6Q+jzdSv&##LOZyh+-Al`RXJ>0&
z)r{tOrU#6Av$>h8buB6??Wc7uE7V7rjapJE)z@&E9$_Qo%84ebiQtq1pD&W2Dc9A<
z<4~ZU8ut77pKg#&5xX%HRR*y#KxEaKb=5SHILj9ZhWvUhYpF^z!_-GIi$-I^WHBdP
zV)9_Cv3nA(awVm@h~f(-G4nefAVItBPmYb8h=wADU-Zi#jG4Z8s8O#E8g5Sd{Vrls
zlCHi_qem+7GFs(21M&{W^y9B?))~PNt2b4*aZM22lvLJ(Xj5e7Re+2UCCL!tuZxI!
zvP>qMxOhAmuC+WlOifJ}k%d(&RHlhpPtr-M+$
zivJMu{;vol+tP$4mWM}BPNp)gMuOTU+vQ_9umw*P9YRvk=ca`2+GNRg8xC`!*wU
zy0YP97m_?U;!Qlxjrx`RExQIS`;if*+x${7?|ovH8LHtP47KFuv9DUgPN7LYzUku@
zltZgW8p1T8NCQ)JCC5f!vypJnxoO=XJ8KY#YssC2>>S{qyIq##{=)fEes2v~ZNDqe
z(+_8`100V;^y*-(a

|oQM;xHEr1pkjqq4!<$jH(enqbXvk>9Fu3IOTFS}E(OjDz z^{Hl%qJ~FfxOdN%74Zd?OOC}#_tCOODbM~=9DCdMQ2Yj6OeZm1xqUoi$fZR?R-#(5 z49F3p%_2to$Qh}LvsY`VDX+Q0iboZcAw#il!(~87+_&zi2=gI5M_nWQ)_LX>^$R|yE=PSft7PEwaV>9jk*uE6-#iMWFB&h?;91nDXHa- z-)XwnWFOXwBpNS}&CsDnAo}3(HLRfD(}wIr)!G||ZKaKR(C48CYjH|fVVDmNIMLLN zr{u{FEss|vA2Tu9=ysBtWPnK4E7P-&%~OF5Pi)A}OIoR9+ABHadnIlMO2W>ki^W-1 z`dm<#z7)pQRYn@0>rN|2G&P;9C7drTqffO}QeJ|VUr^k&BwtHL&GKm}g|C#u-=>x? zTdFEQ@9=3FS`J5bqitM0+MHKLL@4D4CD8&bnl^)fas@b5$ek4gF623N$*cL54_SW(a$_ICx4;7oV z6nV~qPPV~l@TBh!Mw4l^A9msGIl9F~ely1VP0=1!YzFbx8*b(v18$RMfUN9Yk?Sy4} zQp&g1IozKlmmD0!pA=*P^9O(J0E0JW+UdAqjj-dZc2Y9i&NVp(=Zpq8Axdh*nG_L-yNW*8KsG-SkTO^mi_8CmJ<>c(ugg5q^3 ze&*A7=M9t2OOW+5~xJi_x+|JYr{0h0K9q=(KVs%yfw4TGpmu`;!KPH#UZBu2Ea1%jBtWPe;0Gu}{IXWS#F9UJBmn zw5s-lu7jS_;R}C|p-hk$YNgg1#WU8U=(G@win7H}3s=FYcuZ!JrFF-mnshW(biYZi zS_IPO%7W0{2+?M%JD>M-H{)vQ#rp91kopQHH}=UG0E+my z4EXYw_R=^=pk$2pa?-l}=~`7)W>^)g6Hoz;JB_7BOCFDQkMLey3}cGf)cdg~;##|m zlz5jObgl5zQf-9%IogyrL}Gq&JtRj3UcA{O)E{^&H2P{&o&H%omUv^-bj6nxo(zb- zA~iN-B~zasZ(8M~x+C3{6E7gekA^3Nli}{{Qkfd~M^8TtT@*51CH5pwyNBkG zo%Wr-daJC~Dsw0crj6B#mTPvm8_59(@=x|;SSu`J0lVW_ zg+4Z^g*EDmg+J)m5r{;9MD5mWEtPZWU~M=ObB6h{UE>(rY~Q(VQj*p&{MHSq|$R~(V$dBEF)YHrY%jK7Ji#BnP=1CLZ&5w%5O zT(0NTfup3%RWMHEhW+L!y;{Y9(FSEv*THzY6E-SS8-2H%(wZiHwqf~#!8R%iFDy!; z+99&GI)}J|eEmgt7X{++Xltv@4OV^ldihonHM;=`!IKo&=2Q~zMkXT4qGJHSaxE`P zl?uNnB+*Nb2zr}lR0X7!=cKqEQ5=p&g5h`$Z&Zoa@`A4U#Rc%~c{js;nb#Mya;T|B z{-^rZl?2!-vOWbl07y$bnF3;0TRlM>k6Aua655*5W|>{QZ~{|7Iph3?qx=ezeWz;p zt^gw{e37V$92Ekm4&-b?<$eE7mQgC0E{S|-MFt!jXQNSM5Wxr><6EsJ&X;R3QF-N_ zdOlY@`({fF$xx&=C|Gq7TIa}G;;u}5$^n=Cq1Pp-7j=#tGWfm*>3JN11XaR@LJl;j z1I&YXAX&XZ&1TOAg{L-CX8LpVt|}JpvqSW1Mq^*VHiLE@v3OgVxoUc=^=o7z7-JsN z+N}P_H*a8yBDH#9SO6<^mZcJbg&|d3Bnfat6p}LWuP8-bk*^ zIJb&e%v7IB4duccewC6HU)K7Xr1MZL%Tuu#<9H#h>;?Ar)t%{b0E*4HkzHxjvJAE2 zV4canidNjH+c$pbvm_#?RcNL$$vAJgk&~{ihRVP>N=ZTAf^tnw$`V?VOix6hM1>el zjv={XOUYcmw3JL?ugK|O)YF7x#N7#2a1O8imosb02FN6*>^eR+b)q^d2ijvd7IuprM^{n;XGhg>hdOET z4Th7H#!Ol;{1%QDbCBb*B~G?nh*iOg!hBZa5}u&O(NTAbCpTJv7YI7i?tMYY^xiIjg(*t zXr{4mFvuFhz5!-6`B>h|KD3S}NUhmuuxCLWaVn!5vJY?()QLk=3qq@YBw4BPe^HBw zj|JH=bLFzMQ_so8rKV6YJR)75V?jA~ z!L&PC>a`hmRZ_Z$+}q?!0A>6a8`3h9MDLusaU9lA9oRSWB$n<9&?Y}glf%5!yW{xg z{VLOjP1kAV%rUZDor{`02}qp0)eG|7Mnhc(VM@K2oe1)_kRUE7&_|sSbvvLQ+fSuxwPR~tuJ|iJE_IY+ zyXm>vEO|;MDHpe-C^brhY`+b~h^Yot%)-tmSEgxZy1-^ROT64W5ZAm%EJB$l`}$Uz z@^IvP3e~l#=8Lf=q$^J`ik>njsO-sg6xx&P-uj8?c&aL6r7jtClvsdDCF?f2J~^7h z>}wjw;cZT>C*VUk?wVQ6Y(iZq6~VhrcRD@48@o?v>A=o3ZW5g1IOF{D|@tPlKT7IUvH{dRAhS9h<;zjka{d?n@?n+*^ zt94MXs3=m4ZoSWS0o5tCya%bFAbDKMyQKAq7qA>%T@tsHRaKh}b!W3aoVuuSi--b7 zMTF^Wc9T4(zM|3dTM;Vd-Yxqkkd+KD25azRzG$VPr!*e*&mitlX|O-{o4qLg#*6oz|3A8w zyLOz`Xk7*6aT<4XyIXTPsKGG~Ga6?DsZ~^VEw3C}SyaJ3p^8bm;*Awm-73oq3bYE6 zf%=o&3n9KKAQ_vpGiW2=e2Ks3Qs`t+x@?ypAvr0%>f|%kIp48F*rzN;1vY@{iW{Qh zO|F3Py+>&)NAJhBLN1QWzP8%r12#-W-eQ?BmvR%QQGy@R6DB_G=PGE=rv7;M(G}{d zt{tXQN#(?+-j$Xs5_TvAx1bHVDbtn);|nEJ1eAmK(X`th>e_w7g8Q-=CIRM@m7*dL zX;6Psei*5;48$6%RZznfv&piuyJXooeDOQkmVNC=ebXXRnD2b5=$A^Qxuq z80SEpZC8V?-$!{dLkL2D4e3FHB>{;dDr-#X(*{V!+xkG)qLqy1N z%S8|Rn*IVw(2`rl@4y;zB*U3xNW` zQCGe3?LHCX47oxqS4*1YSWcFq2NJdRop=@ej~k@z79aA(gLU?i7W$%U{9A;=Fkn^G zhP;YYFa;dPP#3zD>scWbMok|niB`c|KN2S|v}t~3f^v1M&Bn;)JbOJ$exCXg9OGJg zt)UM3{3*#?U1cQfU*|Gcv#gZ7bXT}5)Nd=~2Nd@1m~tc0?;TZRC|J{|qKvgPqfNd6 zMqL@TR<2f&s8)Bm_3A{eB;s;RLMaY1SDQFupgF|nn7k)WEs0r{UEtc0B!ByiBMMKU zeK_j1f9WvPlG$vDtdE}ZW`4x4*+1H@AfJ!cfy#*eS&Flz)@0nJoLafL)CeDB1G0W1bugi zSKZ6OI_(>(?H@>~khix;;+;)P?66yN1@>8lr_8xE*|Z3U3Y4u>$5RqXOIm6)BMl1A zU01H!qvTaQG^5lNOoKez1e?Zm_ga*zs9wrYhnqND4YU;J^7sV+L@=<+KaE?0+G$xHt^pxexL z$GCa?_NIW_2?Gf`Wao!y?jKu-2js(#(MUJNq%>ENHg2w)sLfPU{B*DL&{W4o&vDSy ztrQ7pt3#&B)H4SwxgB@!vn33hik|!#G-uoOjQxr?I%3zfK#mU#I zB*!<*`xG2nRL10J2zQ|;Pvv?^ThO@>lUbtRLpA=9ou+87Uz zo6I?_lG}1;cciMT-!+kawSx-s9tFIMDz=ew07nTd#Pl&DOh&=^xtuyJwlke5F$uFu zDYgJx+R7`fvcnZsxMm6e4N+Iga-WYo-ksh$U|-E_BZwkZ+sU^x)81yY3-QAbJC!cR znx;%0qXa|zv#_Q=+O_e$mqqQ|W^Q;^C10D+_{z?mjvnC>xcowqkDrz83;Vs3&_2dW zD!K9~xT%oq%8B3kWebG@9GrKzH{QCTkOk*u%IzU>dY^JW5H&7lP?*Y6n}BsY$CUOOmtWRmO~RO(WV z5sDH^5_Pl(_qlJMC2v#F>OvdfV8pMk*t4+2hKsAiju(zh(l({~#z@lejQ0zk`O#P1 z&Pm#N@=i?k3kwyo=*ttG|3I;1%csuPUD+PpNGZchG{{S<^!*HVt61x2s;ym+PdN;y zHOIE`g5$o!VgHEQzIT#C4ODCWTq{2hRnjq2JO=(niN)O|IR4#_W1HFlQdkZl)~egE zF!rYS>W> z=YZ(6YI|-sxPFuQ6F@e61@Bu%+vWW1Mi1|@?Ko?q<^fmV7j@te9Kr^>V=w5~#BYrILBP=nwqdmEKq zgEteuHTLF3n_O*3LpP9y;O&Az?Ei6!(X>HUYCy}|K5gvP8*a@Mi%vF^i9vgkGH5*A zL3ToO#eCTu!Yj8g@X7M(Oa5Fs5e|BOgQ7|J(2f~;ehlkN{vg~^fzk-y1q`ZfsuNPw zO1;);K|Y<^JSoZ0Izc4r>S|t7pbMZ}zE#9JXuNoycWE z2iNi-TW)N2P-^U-y0A;Ej1T_GD}7op^}@ZA*Z@6ep z4k#M6lzqcUb#W(2yt>{C{%M|Ac=Ejm=S$pjRvGqvaG0W5d_Kj8mzEuw_UjS#vI>7W zSI54$)Y4L~3I+_z{t5T@l~F~tyXCO0x@@WOt1vfU`$7uN%)n}dQ7L)0$|BXo+d9NH zZ#W~^B%UG4m7`09Q*qjIz4RC7r&v;sfU~44*S`G!gQuQQp1OMV#QVgII&{~{ViCT! zlwIi0?u(_rDa(t5i>&B-O2s2a`kXjC9TdkcGU6Nxpi3oO=rD*o0i3e#RW+o zw9jeRG7tBmvpF1+tG2{9L_;LCj<}9z#ycnCHQBc(@tEEkGnQQtChn1<=jyjt2jeY! zh|^E(Ys}TVsSsSdoDMm+w#+=*n|ZW1^JuS`d9*k4Xs?-hv^Vo;Z|2e7%%i=TM|(4m z_GTXK%{\n" "Language-Team: en \n" @@ -22,11 +22,11 @@ msgid "All Branches" msgstr "" #: rhodecode/controllers/changeset.py:83 -msgid "show white space" +msgid "Show white space" msgstr "" #: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97 -msgid "ignore white space" +msgid "Ignore white space" msgstr "" #: rhodecode/controllers/changeset.py:163 @@ -34,20 +34,20 @@ msgstr "" msgid "%s line context" msgstr "" -#: rhodecode/controllers/changeset.py:314 -#: rhodecode/controllers/pullrequests.py:417 +#: rhodecode/controllers/changeset.py:329 +#: rhodecode/controllers/pullrequests.py:438 #, python-format msgid "Status change -> %s" msgstr "" -#: rhodecode/controllers/changeset.py:345 +#: rhodecode/controllers/changeset.py:360 msgid "" -"Changing status on a changeset associated witha closed pull request is " +"Changing status on a changeset associated with a closed pull request is " "not allowed" msgstr "" -#: rhodecode/controllers/compare.py:75 -#: rhodecode/controllers/pullrequests.py:121 +#: rhodecode/controllers/compare.py:74 +#: rhodecode/controllers/pullrequests.py:167 #: rhodecode/controllers/shortlog.py:100 msgid "There are no changesets yet" msgstr "" @@ -89,156 +89,187 @@ msgid "%s %s feed" msgstr "" #: rhodecode/controllers/feed.py:86 -#: rhodecode/templates/changeset/changeset.html:137 -#: rhodecode/templates/changeset/changeset.html:149 -#: 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 +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 msgid "Changeset was too big and was cut off..." msgstr "" -#: rhodecode/controllers/feed.py:92 -msgid "commited on" -msgstr "" - -#: rhodecode/controllers/files.py:86 -msgid "click here to add new file" -msgstr "" - -#: rhodecode/controllers/files.py:87 +#: rhodecode/controllers/feed.py:91 +#, python-format +msgid "%s committed on %s" +msgstr "" + +#: rhodecode/controllers/files.py:88 +msgid "Click here to add new file" +msgstr "" + +#: rhodecode/controllers/files.py:89 #, python-format msgid "There are no files yet %s" msgstr "" -#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325 +#: rhodecode/controllers/files.py:267 rhodecode/controllers/files.py:335 #, python-format msgid "This repository is has been locked by %s on %s" msgstr "" -#: rhodecode/controllers/files.py:292 +#: rhodecode/controllers/files.py:279 +msgid "You can only edit files with revision being a valid branch " +msgstr "" + +#: rhodecode/controllers/files.py:293 #, python-format -msgid "Edited %s via RhodeCode" -msgstr "" - -#: rhodecode/controllers/files.py:297 +msgid "Edited file %s via RhodeCode" +msgstr "" + +#: rhodecode/controllers/files.py:309 msgid "No changes" msgstr "" -#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372 +#: rhodecode/controllers/files.py:318 rhodecode/controllers/files.py:388 #, python-format msgid "Successfully committed to %s" msgstr "" -#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378 +#: rhodecode/controllers/files.py:323 rhodecode/controllers/files.py:394 msgid "Error occurred during commit" msgstr "" -#: rhodecode/controllers/files.py:344 -#, python-format -msgid "Added %s via RhodeCode" -msgstr "" - -#: rhodecode/controllers/files.py:358 +#: rhodecode/controllers/files.py:347 +msgid "Added file via RhodeCode" +msgstr "" + +#: rhodecode/controllers/files.py:364 msgid "No content" msgstr "" -#: rhodecode/controllers/files.py:362 +#: rhodecode/controllers/files.py:368 msgid "No filename" msgstr "" -#: rhodecode/controllers/files.py:404 -msgid "downloads disabled" -msgstr "" - -#: rhodecode/controllers/files.py:415 +#: rhodecode/controllers/files.py:372 +msgid "Location must be relative path and must not contain .. in path" +msgstr "" + +#: rhodecode/controllers/files.py:420 +msgid "Downloads disabled" +msgstr "" + +#: rhodecode/controllers/files.py:431 #, python-format msgid "Unknown revision %s" msgstr "" -#: rhodecode/controllers/files.py:417 +#: rhodecode/controllers/files.py:433 msgid "Empty repository" msgstr "" -#: rhodecode/controllers/files.py:419 +#: rhodecode/controllers/files.py:435 msgid "Unknown archive type" msgstr "" -#: rhodecode/controllers/files.py:564 -#: rhodecode/templates/changeset/changeset_range.html:13 -#: rhodecode/templates/changeset/changeset_range.html:31 +#: rhodecode/controllers/files.py:617 +#: rhodecode/templates/changeset/changeset_range.html:9 msgid "Changesets" msgstr "" -#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:74 -#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550 +#: rhodecode/controllers/files.py:618 rhodecode/controllers/pullrequests.py:131 +#: rhodecode/controllers/summary.py:247 rhodecode/model/scm.py:606 +#: rhodecode/templates/switch_to_list.html:3 +#: rhodecode/templates/branches/branches.html:10 msgid "Branches" msgstr "" -#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:78 -#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561 +#: rhodecode/controllers/files.py:619 rhodecode/controllers/pullrequests.py:132 +#: rhodecode/controllers/summary.py:248 rhodecode/model/scm.py:617 +#: rhodecode/templates/switch_to_list.html:15 +#: rhodecode/templates/shortlog/shortlog_data.html:10 +#: rhodecode/templates/tags/tags.html:10 msgid "Tags" msgstr "" -#: rhodecode/controllers/forks.py:158 +#: rhodecode/controllers/forks.py:175 #, python-format -msgid "forked %s repository as %s" -msgstr "" - -#: rhodecode/controllers/forks.py:172 +msgid "Forked repository %s as %s" +msgstr "" + +#: rhodecode/controllers/forks.py:189 #, python-format msgid "An error occurred during repository forking %s" msgstr "" -#: rhodecode/controllers/journal.py:218 rhodecode/controllers/journal.py:261 +#: rhodecode/controllers/journal.py:275 rhodecode/controllers/journal.py:318 msgid "public journal" msgstr "" -#: rhodecode/controllers/journal.py:222 rhodecode/controllers/journal.py:265 -#: rhodecode/templates/base/base.html:232 +#: rhodecode/controllers/journal.py:279 rhodecode/controllers/journal.py:322 #: rhodecode/templates/journal/journal.html:12 msgid "journal" msgstr "" -#: rhodecode/controllers/login.py:143 -msgid "You have successfully registered into rhodecode" -msgstr "" - -#: rhodecode/controllers/login.py:164 +#: rhodecode/controllers/login.py:138 +msgid "You have successfully registered into RhodeCode" +msgstr "" + +#: rhodecode/controllers/login.py:159 msgid "Your password reset link was sent" msgstr "" -#: rhodecode/controllers/login.py:184 +#: rhodecode/controllers/login.py:179 msgid "" "Your password reset was successful, new password has been sent to your " "email" msgstr "" -#: rhodecode/controllers/pullrequests.py:76 rhodecode/model/scm.py:556 +#: rhodecode/controllers/pullrequests.py:118 +#: rhodecode/templates/changeset/changeset.html:10 +#: rhodecode/templates/email_templates/changeset_comment.html:15 +msgid "Changeset" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:128 +msgid "Special" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:129 +msgid "Peer branches" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:130 rhodecode/model/scm.py:612 +#: rhodecode/templates/switch_to_list.html:28 +#: rhodecode/templates/bookmarks/bookmarks.html:10 msgid "Bookmarks" msgstr "" -#: rhodecode/controllers/pullrequests.py:190 +#: rhodecode/controllers/pullrequests.py:228 msgid "Pull request requires a title with min. 3 chars" msgstr "" -#: rhodecode/controllers/pullrequests.py:192 -msgid "error during creation of pull request" -msgstr "" - -#: rhodecode/controllers/pullrequests.py:224 +#: rhodecode/controllers/pullrequests.py:230 +msgid "Error creating pull request" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:251 msgid "Successfully opened new pull request" msgstr "" -#: rhodecode/controllers/pullrequests.py:227 +#: rhodecode/controllers/pullrequests.py:254 msgid "Error occurred during sending pull request" msgstr "" -#: rhodecode/controllers/pullrequests.py:260 +#: rhodecode/controllers/pullrequests.py:287 msgid "Successfully deleted pull request" msgstr "" -#: rhodecode/controllers/pullrequests.py:452 +#: rhodecode/controllers/pullrequests.py:441 +msgid "Closing with" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:478 msgid "Closing pull request on other statuses than rejected or approved forbidden" msgstr "" @@ -254,55 +285,12 @@ msgstr "" msgid "An error occurred during this search operation" msgstr "" -#: rhodecode/controllers/settings.py:119 -#: rhodecode/controllers/admin/repos.py:272 -#, python-format -msgid "Repository %s updated successfully" -msgstr "" - -#: rhodecode/controllers/settings.py:137 -#: rhodecode/controllers/admin/repos.py:290 -#, python-format -msgid "error occurred during update of repository %s" -msgstr "" - -#: rhodecode/controllers/settings.py:162 -#: rhodecode/controllers/admin/repos.py:315 -#, python-format -msgid "deleted repository %s" -msgstr "" - -#: rhodecode/controllers/settings.py:166 -#: rhodecode/controllers/admin/repos.py:325 -#: rhodecode/controllers/admin/repos.py:331 -#, python-format -msgid "An error occurred during deletion of %s" -msgstr "" - -#: rhodecode/controllers/settings.py:185 -msgid "unlocked" -msgstr "" - -#: rhodecode/controllers/settings.py:188 -msgid "locked" -msgstr "" - -#: rhodecode/controllers/settings.py:190 -#, python-format -msgid "Repository has been %s" -msgstr "" - -#: rhodecode/controllers/settings.py:194 -#: rhodecode/controllers/admin/repos.py:423 -msgid "An error occurred during unlocking" -msgstr "" - -#: rhodecode/controllers/summary.py:140 +#: rhodecode/controllers/summary.py:141 msgid "No data loaded yet" msgstr "" -#: rhodecode/controllers/summary.py:144 -#: rhodecode/templates/summary/summary.html:157 +#: rhodecode/controllers/summary.py:147 +#: rhodecode/templates/summary/summary.html:149 msgid "Statistics are disabled for this repository" msgstr "" @@ -311,7 +299,7 @@ msgid "Default settings updated successf msgstr "" #: rhodecode/controllers/admin/defaults.py:110 -msgid "error occurred during update of defaults" +msgid "Error occurred during update of defaults" msgstr "" #: rhodecode/controllers/admin/ldap_settings.py:50 @@ -359,7 +347,7 @@ msgid "START_TLS on LDAP connection" msgstr "" #: rhodecode/controllers/admin/ldap_settings.py:126 -msgid "Ldap settings updated successfully" +msgid "LDAP settings updated successfully" msgstr "" #: rhodecode/controllers/admin/ldap_settings.py:130 @@ -367,533 +355,616 @@ msgid "Unable to activate ldap. The \"py msgstr "" #: rhodecode/controllers/admin/ldap_settings.py:147 -msgid "error occurred during update of ldap settings" -msgstr "" - -#: rhodecode/controllers/admin/permissions.py:59 -#: rhodecode/controllers/admin/permissions.py:63 -msgid "None" +msgid "Error occurred during update of ldap settings" msgstr "" #: rhodecode/controllers/admin/permissions.py:60 #: rhodecode/controllers/admin/permissions.py:64 -msgid "Read" +msgid "None" msgstr "" #: rhodecode/controllers/admin/permissions.py:61 #: rhodecode/controllers/admin/permissions.py:65 -msgid "Write" +msgid "Read" msgstr "" #: rhodecode/controllers/admin/permissions.py:62 #: rhodecode/controllers/admin/permissions.py:66 +msgid "Write" +msgstr "" + +#: rhodecode/controllers/admin/permissions.py:63 +#: rhodecode/controllers/admin/permissions.py:67 #: 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/repo_add.html:10 +#: rhodecode/templates/admin/repos/repo_add.html:14 #: 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/repos_groups/repos_groups_add.html:9 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:9 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:13 #: 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/user_edit.html:133 #: rhodecode/templates/admin/users/users.html:9 +#: rhodecode/templates/admin/users/users.html:85 #: 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 +#: rhodecode/templates/base/base.html:292 +#: rhodecode/templates/base/base.html:293 +#: rhodecode/templates/base/base.html:299 +#: rhodecode/templates/base/base.html:300 msgid "Admin" msgstr "" -#: rhodecode/controllers/admin/permissions.py:69 -msgid "disabled" -msgstr "" - -#: rhodecode/controllers/admin/permissions.py:71 -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:70 #: rhodecode/controllers/admin/permissions.py:76 #: rhodecode/controllers/admin/permissions.py:79 +msgid "Disabled" +msgstr "" + +#: rhodecode/controllers/admin/permissions.py:72 +msgid "Allowed with manual account activation" +msgstr "" + +#: rhodecode/controllers/admin/permissions.py:74 +msgid "Allowed with automatic account activation" +msgstr "" + +#: rhodecode/controllers/admin/permissions.py:77 +#: rhodecode/controllers/admin/permissions.py:80 msgid "Enabled" msgstr "" -#: rhodecode/controllers/admin/permissions.py:122 +#: rhodecode/controllers/admin/permissions.py:128 msgid "Default permissions updated successfully" msgstr "" -#: rhodecode/controllers/admin/permissions.py:136 -msgid "error occurred during update of permissions" -msgstr "" - -#: rhodecode/controllers/admin/repos.py:121 +#: rhodecode/controllers/admin/permissions.py:142 +msgid "Error occurred during update of permissions" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:127 msgid "--REMOVE FORK--" msgstr "" -#: rhodecode/controllers/admin/repos.py:190 +#: rhodecode/controllers/admin/repos.py:168 +#, python-format +msgid "Created repository %s from %s" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:174 #, python-format -msgid "created repository %s from %s" -msgstr "" - -#: rhodecode/controllers/admin/repos.py:194 +msgid "Created repository %s" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:197 +#, python-format +msgid "Error creating repository %s" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:266 +#, python-format +msgid "Repository %s updated successfully" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:284 #, python-format -msgid "created repository %s" -msgstr "" - -#: rhodecode/controllers/admin/repos.py:225 +msgid "Error occurred during update of repository %s" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:311 +#: rhodecode/controllers/api/api.py:877 #, python-format -msgid "error occurred during creation of repository %s" -msgstr "" - -#: rhodecode/controllers/admin/repos.py:320 +msgid "Detached %s forks" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:314 +#: rhodecode/controllers/api/api.py:879 +#, python-format +msgid "Deleted %s forks" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:319 +#, python-format +msgid "Deleted repository %s" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:322 #, python-format msgid "Cannot delete %s it still contains attached forks" msgstr "" -#: rhodecode/controllers/admin/repos.py:349 +#: rhodecode/controllers/admin/repos.py:327 +#, python-format +msgid "An error occurred during deletion of %s" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:365 +msgid "Repository permissions updated" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:384 msgid "An error occurred during deletion of repository user" msgstr "" -#: rhodecode/controllers/admin/repos.py:368 -msgid "An error occurred during deletion of repository users groups" -msgstr "" - -#: rhodecode/controllers/admin/repos.py:386 -msgid "An error occurred during deletion of repository stats" -msgstr "" - #: rhodecode/controllers/admin/repos.py:403 +msgid "An error occurred during deletion of repository user groups" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:421 +msgid "An error occurred during deletion of repository stats" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:438 msgid "An error occurred during cache invalidation" msgstr "" -#: rhodecode/controllers/admin/repos.py:443 +#: rhodecode/controllers/admin/repos.py:458 +#: rhodecode/controllers/admin/repos.py:485 +msgid "An error occurred during unlocking" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:476 +msgid "Unlocked" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:479 +msgid "Locked" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:481 +#, python-format +msgid "Repository has been %s" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:505 msgid "Updated repository visibility in public journal" msgstr "" -#: rhodecode/controllers/admin/repos.py:447 +#: rhodecode/controllers/admin/repos.py:509 msgid "An error occurred during setting this repository in public journal" msgstr "" -#: rhodecode/controllers/admin/repos.py:452 rhodecode/model/validators.py:300 +#: rhodecode/controllers/admin/repos.py:514 rhodecode/model/validators.py:302 msgid "Token mismatch" msgstr "" -#: rhodecode/controllers/admin/repos.py:465 +#: rhodecode/controllers/admin/repos.py:527 msgid "Pulled from remote location" msgstr "" -#: rhodecode/controllers/admin/repos.py:467 +#: rhodecode/controllers/admin/repos.py:529 msgid "An error occurred during pull from remote location" msgstr "" -#: rhodecode/controllers/admin/repos.py:483 +#: rhodecode/controllers/admin/repos.py:545 msgid "Nothing" msgstr "" -#: rhodecode/controllers/admin/repos.py:485 +#: rhodecode/controllers/admin/repos.py:547 #, python-format msgid "Marked repo %s as fork of %s" msgstr "" -#: rhodecode/controllers/admin/repos.py:489 +#: rhodecode/controllers/admin/repos.py:551 msgid "An error occurred during this operation" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:120 +#: rhodecode/controllers/admin/repos.py:590 +msgid "An error occurred during creation of field" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:604 +msgid "An error occurred during removal of field" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:145 #, python-format -msgid "created repos group %s" -msgstr "" - -#: rhodecode/controllers/admin/repos_groups.py:133 +msgid "Created repository group %s" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:157 #, python-format -msgid "error occurred during creation of repos group %s" -msgstr "" - -#: rhodecode/controllers/admin/repos_groups.py:167 +msgid "Error occurred during creation of repository group %s" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:214 +#: rhodecode/controllers/admin/repos_groups.py:286 +msgid "Cannot revoke permission for yourself as admin" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:220 #, python-format -msgid "updated repos group %s" -msgstr "" - -#: rhodecode/controllers/admin/repos_groups.py:180 +msgid "Updated repository group %s" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:235 #, python-format -msgid "error occurred during update of repos group %s" -msgstr "" - -#: rhodecode/controllers/admin/repos_groups.py:198 +msgid "Error occurred during update of repository group %s" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:253 #, python-format msgid "This group contains %s repositores and cannot be deleted" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:206 +#: rhodecode/controllers/admin/repos_groups.py:260 +#, python-format +msgid "This group contains %s subgroups and cannot be deleted" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:266 #, python-format -msgid "removed repos group %s" -msgstr "" - -#: rhodecode/controllers/admin/repos_groups.py:212 -msgid "Cannot delete this group it still contains subgroups" -msgstr "" - -#: rhodecode/controllers/admin/repos_groups.py:217 -#: rhodecode/controllers/admin/repos_groups.py:222 +msgid "Removed repository group %s" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:271 #, python-format -msgid "error occurred during deletion of repos group %s" -msgstr "" - -#: rhodecode/controllers/admin/repos_groups.py:243 +msgid "Error occurred during deletion of repos group %s" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:297 msgid "An error occurred during deletion of group user" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:264 -msgid "An error occurred during deletion of group users groups" -msgstr "" - -#: rhodecode/controllers/admin/settings.py:123 +#: rhodecode/controllers/admin/repos_groups.py:318 +msgid "An error occurred during deletion of group user groups" +msgstr "" + +#: rhodecode/controllers/admin/settings.py:126 #, python-format -msgid "Repositories successfully rescanned added: %s,removed: %s" -msgstr "" - -#: rhodecode/controllers/admin/settings.py:131 +msgid "Repositories successfully rescanned added: %s ; removed: %s" +msgstr "" + +#: rhodecode/controllers/admin/settings.py:135 msgid "Whoosh reindex task scheduled" msgstr "" -#: rhodecode/controllers/admin/settings.py:162 -msgid "Updated application settings" -msgstr "" - #: 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:207 +msgid "Updated application settings" +msgstr "" + +#: rhodecode/controllers/admin/settings.py:170 +#: rhodecode/controllers/admin/settings.py:301 +msgid "Error occurred during updating application settings" +msgstr "" + +#: rhodecode/controllers/admin/settings.py:216 msgid "Updated visualisation settings" msgstr "" -#: rhodecode/controllers/admin/settings.py:212 -msgid "error occurred during updating visualisation settings" -msgstr "" - -#: rhodecode/controllers/admin/settings.py:295 +#: rhodecode/controllers/admin/settings.py:221 +msgid "Error occurred during updating visualisation settings" +msgstr "" + +#: rhodecode/controllers/admin/settings.py:297 msgid "Updated VCS settings" msgstr "" -#: rhodecode/controllers/admin/settings.py:309 +#: rhodecode/controllers/admin/settings.py:311 msgid "Added new hook" msgstr "" -#: rhodecode/controllers/admin/settings.py:321 +#: rhodecode/controllers/admin/settings.py:323 msgid "Updated hooks" msgstr "" -#: rhodecode/controllers/admin/settings.py:325 -msgid "error occurred during hook creation" -msgstr "" - -#: rhodecode/controllers/admin/settings.py:344 +#: rhodecode/controllers/admin/settings.py:327 +msgid "Error occurred during hook creation" +msgstr "" + +#: rhodecode/controllers/admin/settings.py:346 msgid "Email task created" msgstr "" -#: rhodecode/controllers/admin/settings.py:399 +#: rhodecode/controllers/admin/settings.py:410 msgid "You can't edit this user since it's crucial for entire application" msgstr "" -#: rhodecode/controllers/admin/settings.py:430 +#: rhodecode/controllers/admin/settings.py:452 msgid "Your account was updated successfully" msgstr "" -#: rhodecode/controllers/admin/settings.py:445 -#: rhodecode/controllers/admin/users.py:196 +#: rhodecode/controllers/admin/settings.py:467 +#: rhodecode/controllers/admin/users.py:198 #, python-format -msgid "error occurred during update of user %s" +msgid "Error occurred during update of user %s" msgstr "" #: rhodecode/controllers/admin/users.py:130 #, python-format -msgid "created user %s" +msgid "Created user %s" msgstr "" #: rhodecode/controllers/admin/users.py:142 #, python-format -msgid "error occurred during creation of user %s" +msgid "Error occurred during creation of user %s" msgstr "" #: rhodecode/controllers/admin/users.py:176 msgid "User updated successfully" msgstr "" -#: rhodecode/controllers/admin/users.py:212 -msgid "successfully deleted user" -msgstr "" - -#: rhodecode/controllers/admin/users.py:217 +#: rhodecode/controllers/admin/users.py:214 +msgid "Successfully deleted user" +msgstr "" + +#: rhodecode/controllers/admin/users.py:219 msgid "An error occurred during deletion of user" msgstr "" -#: rhodecode/controllers/admin/users.py:231 +#: rhodecode/controllers/admin/users.py:233 msgid "You can't edit this user" msgstr "" -#: rhodecode/controllers/admin/users.py:272 +#: rhodecode/controllers/admin/users.py:276 msgid "Granted 'repository create' permission to user" msgstr "" -#: rhodecode/controllers/admin/users.py:277 +#: rhodecode/controllers/admin/users.py:281 msgid "Revoked 'repository create' permission to user" msgstr "" -#: rhodecode/controllers/admin/users.py:283 +#: rhodecode/controllers/admin/users.py:287 msgid "Granted 'repository fork' permission to user" msgstr "" -#: rhodecode/controllers/admin/users.py:288 +#: rhodecode/controllers/admin/users.py:292 msgid "Revoked 'repository fork' permission to user" msgstr "" -#: rhodecode/controllers/admin/users.py:294 -#: rhodecode/controllers/admin/users_groups.py:279 +#: rhodecode/controllers/admin/users.py:298 +#: rhodecode/controllers/admin/users_groups.py:281 msgid "An error occurred during permissions saving" msgstr "" -#: rhodecode/controllers/admin/users.py:309 +#: rhodecode/controllers/admin/users.py:312 #, python-format msgid "Added email %s to user" msgstr "" -#: rhodecode/controllers/admin/users.py:315 +#: rhodecode/controllers/admin/users.py:318 msgid "An error occurred during email saving" msgstr "" -#: rhodecode/controllers/admin/users.py:325 +#: rhodecode/controllers/admin/users.py:328 msgid "Removed email from user" msgstr "" +#: rhodecode/controllers/admin/users.py:341 +#, python-format +msgid "Added ip %s to user" +msgstr "" + +#: rhodecode/controllers/admin/users.py:347 +msgid "An error occurred during ip saving" +msgstr "" + +#: rhodecode/controllers/admin/users.py:359 +msgid "Removed ip from user" +msgstr "" + #: rhodecode/controllers/admin/users_groups.py:86 #, python-format -msgid "created users group %s" +msgid "Created user group %s" msgstr "" #: 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:164 +msgid "Error occurred during creation of user group %s" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:166 #, python-format -msgid "updated users group %s" -msgstr "" - -#: rhodecode/controllers/admin/users_groups.py:186 +msgid "Updated user group %s" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:188 #, python-format -msgid "error occurred during update of users group %s" -msgstr "" - -#: rhodecode/controllers/admin/users_groups.py:203 -msgid "successfully deleted users group" -msgstr "" - -#: rhodecode/controllers/admin/users_groups.py:208 -msgid "An error occurred during deletion of users group" -msgstr "" - -#: rhodecode/controllers/admin/users_groups.py:257 -msgid "Granted 'repository create' permission to users group" -msgstr "" - -#: rhodecode/controllers/admin/users_groups.py:262 -msgid "Revoked 'repository create' permission to users group" -msgstr "" - -#: rhodecode/controllers/admin/users_groups.py:268 -msgid "Granted 'repository fork' permission to users group" -msgstr "" - -#: rhodecode/controllers/admin/users_groups.py:273 -msgid "Revoked 'repository fork' permission to users group" -msgstr "" - -#: rhodecode/lib/auth.py:499 +msgid "Error occurred during update of user group %s" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:205 +msgid "Successfully deleted user group" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:210 +msgid "An error occurred during deletion of user group" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:259 +msgid "Granted 'repository create' permission to user group" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:264 +msgid "Revoked 'repository create' permission to user group" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:270 +msgid "Granted 'repository fork' permission to user group" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:275 +msgid "Revoked 'repository fork' permission to user group" +msgstr "" + +#: rhodecode/lib/auth.py:530 +#, python-format +msgid "IP %s not allowed" +msgstr "" + +#: rhodecode/lib/auth.py:579 msgid "You need to be a registered user to perform this action" msgstr "" -#: rhodecode/lib/auth.py:540 +#: rhodecode/lib/auth.py:620 msgid "You need to be a signed in to view this page" msgstr "" -#: rhodecode/lib/diffs.py:74 -msgid "binary file" -msgstr "" - -#: rhodecode/lib/diffs.py:90 +#: rhodecode/lib/diffs.py:66 +msgid "Binary file" +msgstr "" + +#: rhodecode/lib/diffs.py:82 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "" -#: rhodecode/lib/diffs.py:100 +#: rhodecode/lib/diffs.py:92 msgid "No changes detected" msgstr "" -#: rhodecode/lib/helpers.py:374 +#: rhodecode/lib/helpers.py:394 #, python-format msgid "%a, %d %b %Y %H:%M:%S" msgstr "" -#: rhodecode/lib/helpers.py:486 +#: rhodecode/lib/helpers.py:506 msgid "True" msgstr "" -#: rhodecode/lib/helpers.py:490 +#: rhodecode/lib/helpers.py:509 msgid "False" msgstr "" -#: rhodecode/lib/helpers.py:530 +#: rhodecode/lib/helpers.py:547 #, python-format msgid "Deleted branch: %s" msgstr "" -#: rhodecode/lib/helpers.py:533 +#: rhodecode/lib/helpers.py:550 #, python-format msgid "Created tag: %s" msgstr "" -#: rhodecode/lib/helpers.py:546 +#: rhodecode/lib/helpers.py:563 msgid "Changeset not found" msgstr "" -#: rhodecode/lib/helpers.py:589 -#, python-format -msgid "Show all combined changesets %s->%s" -msgstr "" - -#: rhodecode/lib/helpers.py:595 -msgid "compare view" -msgstr "" - #: rhodecode/lib/helpers.py:615 -msgid "and" -msgstr "" - -#: rhodecode/lib/helpers.py:616 #, python-format -msgid "%s more" -msgstr "" - -#: rhodecode/lib/helpers.py:617 rhodecode/templates/changelog/changelog.html:51 -msgid "revisions" +msgid "Show all combined changesets %s->%s" +msgstr "" + +#: rhodecode/lib/helpers.py:621 +msgid "compare view" msgstr "" #: rhodecode/lib/helpers.py:641 +msgid "and" +msgstr "" + +#: rhodecode/lib/helpers.py:642 +#, python-format +msgid "%s more" +msgstr "" + +#: rhodecode/lib/helpers.py:643 rhodecode/templates/changelog/changelog.html:44 +msgid "revisions" +msgstr "" + +#: rhodecode/lib/helpers.py:667 #, python-format msgid "fork name %s" msgstr "" -#: rhodecode/lib/helpers.py:658 -#: 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:664 -msgid "[deleted] repository" -msgstr "" - -#: rhodecode/lib/helpers.py:666 rhodecode/lib/helpers.py:676 -msgid "[created] repository" -msgstr "" - -#: rhodecode/lib/helpers.py:668 -msgid "[created] repository as fork" -msgstr "" - -#: rhodecode/lib/helpers.py:670 rhodecode/lib/helpers.py:678 -msgid "[forked] repository" -msgstr "" - -#: rhodecode/lib/helpers.py:672 rhodecode/lib/helpers.py:680 -msgid "[updated] repository" -msgstr "" - -#: rhodecode/lib/helpers.py:674 -msgid "[delete] repository" -msgstr "" - -#: rhodecode/lib/helpers.py:682 -msgid "[created] user" -msgstr "" - #: rhodecode/lib/helpers.py:684 -msgid "[updated] user" -msgstr "" - -#: rhodecode/lib/helpers.py:686 -msgid "[created] users group" -msgstr "" - -#: rhodecode/lib/helpers.py:688 -msgid "[updated] users group" +#: rhodecode/templates/pullrequests/pullrequest_show.html:8 +#, python-format +msgid "Pull request #%s" msgstr "" #: rhodecode/lib/helpers.py:690 -msgid "[commented] on revision in repository" -msgstr "" - -#: rhodecode/lib/helpers.py:692 -msgid "[commented] on pull request for" +msgid "[deleted] repository" +msgstr "" + +#: rhodecode/lib/helpers.py:692 rhodecode/lib/helpers.py:702 +msgid "[created] repository" msgstr "" #: rhodecode/lib/helpers.py:694 -msgid "[closed] pull request for" -msgstr "" - -#: rhodecode/lib/helpers.py:696 -msgid "[pushed] into" -msgstr "" - -#: rhodecode/lib/helpers.py:698 -msgid "[committed via RhodeCode] into repository" +msgid "[created] repository as fork" +msgstr "" + +#: rhodecode/lib/helpers.py:696 rhodecode/lib/helpers.py:704 +msgid "[forked] repository" +msgstr "" + +#: rhodecode/lib/helpers.py:698 rhodecode/lib/helpers.py:706 +msgid "[updated] repository" msgstr "" #: rhodecode/lib/helpers.py:700 +msgid "[delete] repository" +msgstr "" + +#: rhodecode/lib/helpers.py:708 +msgid "[created] user" +msgstr "" + +#: rhodecode/lib/helpers.py:710 +msgid "[updated] user" +msgstr "" + +#: rhodecode/lib/helpers.py:712 +msgid "[created] user group" +msgstr "" + +#: rhodecode/lib/helpers.py:714 +msgid "[updated] user group" +msgstr "" + +#: rhodecode/lib/helpers.py:716 +msgid "[commented] on revision in repository" +msgstr "" + +#: rhodecode/lib/helpers.py:718 +msgid "[commented] on pull request for" +msgstr "" + +#: rhodecode/lib/helpers.py:720 +msgid "[closed] pull request for" +msgstr "" + +#: rhodecode/lib/helpers.py:722 +msgid "[pushed] into" +msgstr "" + +#: rhodecode/lib/helpers.py:724 +msgid "[committed via RhodeCode] into repository" +msgstr "" + +#: rhodecode/lib/helpers.py:726 msgid "[pulled from remote] into repository" msgstr "" -#: rhodecode/lib/helpers.py:702 +#: rhodecode/lib/helpers.py:728 msgid "[pulled] from" msgstr "" -#: rhodecode/lib/helpers.py:704 +#: rhodecode/lib/helpers.py:730 msgid "[started following] repository" msgstr "" -#: rhodecode/lib/helpers.py:706 +#: rhodecode/lib/helpers.py:732 msgid "[stopped following] repository" msgstr "" -#: rhodecode/lib/helpers.py:883 +#: rhodecode/lib/helpers.py:910 #, python-format msgid " and %s more" msgstr "" -#: rhodecode/lib/helpers.py:887 +#: rhodecode/lib/helpers.py:914 msgid "No Files" msgstr "" -#: rhodecode/lib/helpers.py:1163 +#: rhodecode/lib/helpers.py:1198 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -901,165 +972,225 @@ msgid "" "repositories" msgstr "" -#: rhodecode/lib/utils2.py:403 +#: rhodecode/lib/unionrepo.py:193 +msgid "cannot create new union repository" +msgstr "" + +#: rhodecode/lib/utils2.py:411 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:404 +#: rhodecode/lib/utils2.py:412 #, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:405 +#: rhodecode/lib/utils2.py:413 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:406 +#: rhodecode/lib/utils2.py:414 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:407 +#: rhodecode/lib/utils2.py:415 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:408 +#: rhodecode/lib/utils2.py:416 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:424 +#: rhodecode/lib/utils2.py:432 #, python-format msgid "in %s" msgstr "" -#: rhodecode/lib/utils2.py:426 -#, python-format -msgid "%s ago" -msgstr "" - -#: 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:434 +#, python-format +msgid "%s ago" +msgstr "" + +#: rhodecode/lib/utils2.py:436 +#, python-format +msgid "in %s and %s" +msgstr "" + +#: rhodecode/lib/utils2.py:439 +#, python-format +msgid "%s and %s ago" +msgstr "" + +#: rhodecode/lib/utils2.py:442 msgid "just now" msgstr "" -#: 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:1183 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1183 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1289 rhodecode/model/db.py:1388 msgid "Repository no access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1184 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1184 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1290 rhodecode/model/db.py:1389 msgid "Repository read access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1185 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1185 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1291 rhodecode/model/db.py:1390 msgid "Repository write access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1186 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1186 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1292 rhodecode/model/db.py:1391 msgid "Repository admin access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1188 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1188 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1294 msgid "Repositories Group no access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1189 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1189 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1295 msgid "Repositories Group read access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1190 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1190 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1296 msgid "Repositories Group write access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1191 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1191 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1297 msgid "Repositories Group admin access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1193 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1193 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1299 rhodecode/model/db.py:1398 msgid "RhodeCode Administrator" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1194 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1194 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1300 rhodecode/model/db.py:1399 msgid "Repository creation disabled" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1195 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1195 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1301 rhodecode/model/db.py:1400 msgid "Repository creation enabled" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1196 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1196 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1302 rhodecode/model/db.py:1401 msgid "Repository forking disabled" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1197 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1197 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303 rhodecode/model/db.py:1402 msgid "Repository forking enabled" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1198 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1198 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304 rhodecode/model/db.py:1403 msgid "Register disabled" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1199 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1199 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305 rhodecode/model/db.py:1404 msgid "Register new user with RhodeCode with manual activation" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1202 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1202 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308 rhodecode/model/db.py:1407 msgid "Register new user with RhodeCode with auto activation" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1643 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1643 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1749 rhodecode/model/db.py:1838 msgid "Not Reviewed" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1644 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1644 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1750 rhodecode/model/db.py:1839 msgid "Approved" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1645 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1645 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1751 rhodecode/model/db.py:1840 msgid "Rejected" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1646 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1646 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1752 rhodecode/model/db.py:1841 msgid "Under Review" msgstr "" -#: rhodecode/model/comment.py:110 +#: rhodecode/model/comment.py:75 #, python-format msgid "on line %s" msgstr "" -#: rhodecode/model/comment.py:173 +#: rhodecode/model/comment.py:219 msgid "[Mention]" msgstr "" +#: rhodecode/model/db.py:1252 +msgid "top level" +msgstr "" + +#: rhodecode/model/db.py:1393 +msgid "Repository group no access" +msgstr "" + +#: rhodecode/model/db.py:1394 +msgid "Repository group read access" +msgstr "" + +#: rhodecode/model/db.py:1395 +msgid "Repository group write access" +msgstr "" + +#: rhodecode/model/db.py:1396 +msgid "Repository group admin access" +msgstr "" + #: rhodecode/model/forms.py:43 msgid "Please enter a login" msgstr "" @@ -1078,204 +1209,237 @@ msgstr "" msgid "Enter %(min)i characters or more" msgstr "" -#: rhodecode/model/notification.py:220 -#, python-format -msgid "commented on commit at %(when)s" -msgstr "" - -#: rhodecode/model/notification.py:221 -#, python-format -msgid "sent message at %(when)s" -msgstr "" - -#: rhodecode/model/notification.py:222 -#, python-format -msgid "mentioned you at %(when)s" -msgstr "" - -#: rhodecode/model/notification.py:223 -#, python-format -msgid "registered in RhodeCode at %(when)s" -msgstr "" - #: rhodecode/model/notification.py:224 #, python-format -msgid "opened new pull request at %(when)s" +msgid "%(user)s commented on changeset at %(when)s" msgstr "" #: rhodecode/model/notification.py:225 #, python-format -msgid "commented on pull request at %(when)s" -msgstr "" - -#: rhodecode/model/pull_request.py:90 +msgid "%(user)s sent message at %(when)s" +msgstr "" + +#: rhodecode/model/notification.py:226 +#, python-format +msgid "%(user)s mentioned you at %(when)s" +msgstr "" + +#: rhodecode/model/notification.py:227 +#, python-format +msgid "%(user)s registered in RhodeCode at %(when)s" +msgstr "" + +#: rhodecode/model/notification.py:228 #, python-format -msgid "%(user)s wants you to review pull request #%(pr_id)s" -msgstr "" - -#: rhodecode/model/scm.py:542 +msgid "%(user)s opened new pull request at %(when)s" +msgstr "" + +#: rhodecode/model/notification.py:229 +#, python-format +msgid "%(user)s commented on pull request at %(when)s" +msgstr "" + +#: rhodecode/model/pull_request.py:104 +#, python-format +msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s" +msgstr "" + +#: rhodecode/model/scm.py:598 msgid "latest tip" msgstr "" #: rhodecode/model/user.py:232 -msgid "new user registration" +msgid "New user registration" msgstr "" #: rhodecode/model/user.py:257 rhodecode/model/user.py:281 +msgid "You can't Edit this user since it's crucial for entire application" +msgstr "" + #: rhodecode/model/user.py:303 -msgid "You can't Edit this user since it's crucial for entire application" -msgstr "" - -#: rhodecode/model/user.py:327 msgid "You can't remove this user since it's crucial for entire application" msgstr "" -#: rhodecode/model/user.py:333 +#: rhodecode/model/user.py:309 #, 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:36 rhodecode/model/validators.py:37 +#: rhodecode/model/user.py:334 +msgid "Password reset link" +msgstr "" + +#: rhodecode/model/user.py:366 +msgid "Your new password" +msgstr "" + +#: rhodecode/model/user.py:367 +#, python-format +msgid "Your new RhodeCode password:%s" +msgstr "" + +#: rhodecode/model/validators.py:38 rhodecode/model/validators.py:39 msgid "Value cannot be an empty list" msgstr "" -#: rhodecode/model/validators.py:83 -#, python-format -msgid "Username \"%(username)s\" already exists" -msgstr "" - #: rhodecode/model/validators.py:85 #, python-format -msgid "Username \"%(username)s\" is forbidden" +msgid "Username \"%(username)s\" already exists" msgstr "" #: rhodecode/model/validators.py:87 +#, python-format +msgid "Username \"%(username)s\" is forbidden" +msgstr "" + +#: rhodecode/model/validators.py:89 msgid "" "Username may only contain alphanumeric characters underscores, periods or" " dashes and must begin with alphanumeric character" msgstr "" -#: rhodecode/model/validators.py:115 +#: rhodecode/model/validators.py:117 #, python-format msgid "Username %(username)s is not valid" 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" +#: rhodecode/model/validators.py:136 +msgid "Invalid user group name" msgstr "" #: rhodecode/model/validators.py:137 +#, python-format +msgid "User group \"%(usergroup)s\" already exists" +msgstr "" + +#: rhodecode/model/validators.py:139 msgid "" -"users group name may only contain alphanumeric characters underscores, " +"user group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" msgstr "" -#: rhodecode/model/validators.py:175 +#: rhodecode/model/validators.py:177 msgid "Cannot assign this group as parent" msgstr "" -#: rhodecode/model/validators.py:176 -#, python-format -msgid "Group \"%(group_name)s\" already exists" -msgstr "" - #: rhodecode/model/validators.py:178 #, python-format +msgid "Group \"%(group_name)s\" already exists" +msgstr "" + +#: rhodecode/model/validators.py:180 +#, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "" -#: rhodecode/model/validators.py:236 +#: rhodecode/model/validators.py:238 msgid "Invalid characters (non-ascii) in password" msgstr "" -#: rhodecode/model/validators.py:251 +#: rhodecode/model/validators.py:253 msgid "Passwords do not match" msgstr "" -#: rhodecode/model/validators.py:268 -msgid "invalid password" -msgstr "" - -#: rhodecode/model/validators.py:269 -msgid "invalid user name" -msgstr "" - #: rhodecode/model/validators.py:270 +msgid "invalid password" +msgstr "" + +#: rhodecode/model/validators.py:271 +msgid "invalid user name" +msgstr "" + +#: rhodecode/model/validators.py:272 msgid "Your account is disabled" msgstr "" -#: rhodecode/model/validators.py:314 -#, python-format -msgid "Repository name %(repo)s is disallowed" -msgstr "" - #: rhodecode/model/validators.py:316 #, python-format +msgid "Repository name %(repo)s is disallowed" +msgstr "" + +#: rhodecode/model/validators.py:318 +#, 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:319 #, python-format -msgid "Repositories group with name \"%(repo)s\" already exists" -msgstr "" - -#: rhodecode/model/validators.py:432 +msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" +msgstr "" + +#: rhodecode/model/validators.py:321 +#, python-format +msgid "Repository group with name \"%(repo)s\" already exists" +msgstr "" + +#: rhodecode/model/validators.py:438 msgid "invalid clone url" msgstr "" -#: rhodecode/model/validators.py:433 +#: rhodecode/model/validators.py:439 msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url" msgstr "" -#: rhodecode/model/validators.py:458 +#: rhodecode/model/validators.py:464 msgid "Fork have to be the same type as parent" msgstr "" -#: rhodecode/model/validators.py:473 +#: rhodecode/model/validators.py:479 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:591 +#: rhodecode/model/validators.py:481 +msgid "no permission to create repository in root location" +msgstr "" + +#: rhodecode/model/validators.py:518 +msgid "You don't have permissions to create a group in this location" +msgstr "" + +#: rhodecode/model/validators.py:557 +msgid "This username or user group name is not valid" +msgstr "" + +#: rhodecode/model/validators.py:650 msgid "This is not a valid path" msgstr "" -#: rhodecode/model/validators.py:606 +#: rhodecode/model/validators.py:665 msgid "This e-mail address is already taken" msgstr "" -#: rhodecode/model/validators.py:626 +#: rhodecode/model/validators.py:685 #, python-format msgid "e-mail \"%(email)s\" does not exist." msgstr "" -#: rhodecode/model/validators.py:663 +#: rhodecode/model/validators.py:722 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:682 +#: rhodecode/model/validators.py:735 #, python-format msgid "Revisions %(revs)s are already part of pull request or have set status" msgstr "" -#: rhodecode/templates/index.html:3 +#: rhodecode/model/validators.py:767 +msgid "Please enter a valid IPv4 or IpV6 address" +msgstr "" + +#: rhodecode/model/validators.py:768 +#, python-format +msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" +msgstr "" + +#: rhodecode/model/validators.py:800 +msgid "Key name can only consist of letters, underscore, dash or numbers" +msgstr "" + +#: rhodecode/templates/index.html:5 msgid "Dashboard" msgstr "" @@ -1284,205 +1448,226 @@ msgstr "" #: 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/bookmarks/bookmarks.html:9 #: rhodecode/templates/branches/branches.html:9 #: rhodecode/templates/journal/journal.html:9 -#: rhodecode/templates/journal/journal.html:48 -#: rhodecode/templates/tags/tags.html:10 +#: rhodecode/templates/journal/journal.html:46 +#: rhodecode/templates/journal/journal.html:47 +#: rhodecode/templates/tags/tags.html:9 msgid "quick filter..." msgstr "" #: rhodecode/templates/index_base.html:6 #: rhodecode/templates/admin/repos/repos.html:9 -#: rhodecode/templates/base/base.html:233 msgid "repositories" msgstr "" #: rhodecode/templates/index_base.html:13 -#: rhodecode/templates/index_base.html:15 +#: rhodecode/templates/index_base.html:18 +#: rhodecode/templates/admin/repos/repo_add.html:5 #: rhodecode/templates/admin/repos/repos.html:21 -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 -#: rhodecode/templates/admin/users_groups/users_group_add.html:32 -#: rhodecode/templates/admin/users_groups/users_group_edit.html:33 -msgid "Group name" -msgstr "" - -#: rhodecode/templates/index_base.html: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" +msgid "Add repository" +msgstr "" + +#: rhodecode/templates/index_base.html:15 +#: rhodecode/templates/index_base.html:20 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:31 +msgid "Add group" +msgstr "" + +#: rhodecode/templates/index_base.html:27 +msgid "Edit group" +msgstr "" + +#: rhodecode/templates/index_base.html:27 +msgid "You have admin right to this group, and can edit it" msgstr "" #: rhodecode/templates/index_base.html:40 -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47 -msgid "Repositories group" -msgstr "" - -#: rhodecode/templates/index_base.html:71 -#: rhodecode/templates/index_base.html:174 -#: rhodecode/templates/index_base.html:264 +#: rhodecode/templates/index_base.html:140 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:33 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:38 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:43 +#: rhodecode/templates/admin/users_groups/users_group_add.html:32 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:33 +#: rhodecode/templates/admin/users_groups/users_groups.html:34 +msgid "Group name" +msgstr "" + +#: rhodecode/templates/index_base.html:41 +#: rhodecode/templates/index_base.html:83 +#: rhodecode/templates/index_base.html:142 +#: rhodecode/templates/index_base.html:180 +#: rhodecode/templates/index_base.html:270 +#: rhodecode/templates/admin/repos/repo_add_base.html:56 +#: rhodecode/templates/admin/repos/repo_edit.html:75 +#: rhodecode/templates/admin/repos/repos.html:73 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:42 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:47 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:44 +#: rhodecode/templates/forks/fork.html:56 +#: rhodecode/templates/pullrequests/pullrequest.html:101 +#: rhodecode/templates/summary/summary.html:106 +msgid "Description" +msgstr "" + +#: rhodecode/templates/index_base.html:51 +#: 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_show.html:57 +#: rhodecode/templates/forks/fork.html:47 +msgid "Repository group" +msgstr "" + +#: rhodecode/templates/index_base.html:82 +#: rhodecode/templates/index_base.html:178 +#: rhodecode/templates/index_base.html:268 #: 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/admin/repos/repos.html:71 +#: rhodecode/templates/admin/users/user_edit_my_account.html:172 +#: rhodecode/templates/base/perms_summary.html:14 +#: rhodecode/templates/bookmarks/bookmarks.html:34 #: rhodecode/templates/bookmarks/bookmarks_data.html:6 -#: rhodecode/templates/branches/branches.html:50 +#: rhodecode/templates/branches/branches.html:47 #: rhodecode/templates/branches/branches_data.html:6 #: rhodecode/templates/files/files_browser.html:47 -#: rhodecode/templates/journal/journal.html:70 -#: rhodecode/templates/journal/journal.html:196 -#: 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/journal/journal.html:193 +#: rhodecode/templates/journal/journal.html:296 +#: rhodecode/templates/summary/summary.html:55 +#: rhodecode/templates/summary/summary.html:124 +#: rhodecode/templates/tags/tags.html:48 #: rhodecode/templates/tags/tags_data.html:6 msgid "Name" msgstr "" -#: rhodecode/templates/index_base.html:73 +#: rhodecode/templates/index_base.html:84 msgid "Last change" msgstr "" -#: 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:198 +#: rhodecode/templates/index_base.html:85 +#: rhodecode/templates/index_base.html:183 +#: rhodecode/templates/index_base.html:273 +#: rhodecode/templates/admin/repos/repos.html:74 +#: rhodecode/templates/admin/users/user_edit_my_account.html:174 +#: rhodecode/templates/journal/journal.html:195 +#: rhodecode/templates/journal/journal.html:298 msgid "Tip" msgstr "" -#: rhodecode/templates/index_base.html:75 -#: rhodecode/templates/index_base.html:181 -#: rhodecode/templates/index_base.html:269 +#: rhodecode/templates/index_base.html:86 +#: rhodecode/templates/index_base.html:185 +#: rhodecode/templates/index_base.html:275 #: rhodecode/templates/admin/repos/repo_edit.html:121 -#: rhodecode/templates/admin/repos/repos.html:73 +#: rhodecode/templates/admin/repos/repos.html:76 msgid "Owner" 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 +#: rhodecode/templates/index_base.html:87 msgid "Atom" msgstr "" -#: 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/index_base.html:171 +#: rhodecode/templates/index_base.html:209 +#: rhodecode/templates/index_base.html:296 +#: rhodecode/templates/admin/repos/repos.html:97 +#: rhodecode/templates/admin/users/user_edit_my_account.html:196 #: rhodecode/templates/admin/users/users.html:107 -#: rhodecode/templates/bookmarks/bookmarks.html:60 -#: rhodecode/templates/branches/branches.html:76 -#: rhodecode/templates/journal/journal.html:221 -#: rhodecode/templates/tags/tags.html:77 +#: rhodecode/templates/bookmarks/bookmarks.html:58 +#: rhodecode/templates/branches/branches.html:73 +#: rhodecode/templates/journal/journal.html:217 +#: rhodecode/templates/journal/journal.html:320 +#: rhodecode/templates/tags/tags.html:74 msgid "Click to sort ascending" msgstr "" -#: 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/index_base.html:172 +#: rhodecode/templates/index_base.html:210 +#: rhodecode/templates/index_base.html:297 +#: rhodecode/templates/admin/repos/repos.html:98 +#: rhodecode/templates/admin/users/user_edit_my_account.html:197 #: rhodecode/templates/admin/users/users.html:108 -#: rhodecode/templates/bookmarks/bookmarks.html:61 -#: rhodecode/templates/branches/branches.html:77 -#: rhodecode/templates/journal/journal.html:222 -#: rhodecode/templates/tags/tags.html:78 +#: rhodecode/templates/bookmarks/bookmarks.html:59 +#: rhodecode/templates/branches/branches.html:74 +#: rhodecode/templates/journal/journal.html:218 +#: rhodecode/templates/journal/journal.html:321 +#: rhodecode/templates/tags/tags.html:75 msgid "Click to sort descending" msgstr "" -#: rhodecode/templates/index_base.html:177 -#: rhodecode/templates/index_base.html:267 +#: rhodecode/templates/index_base.html:181 +#: rhodecode/templates/index_base.html:271 msgid "Last Change" msgstr "" -#: 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:223 -#: rhodecode/templates/tags/tags.html:79 -msgid "No records found." -msgstr "" - -#: 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:224 -#: rhodecode/templates/tags/tags.html:80 -msgid "Data error." -msgstr "" - #: 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/repos/repos.html:99 +#: rhodecode/templates/admin/users/user_edit_my_account.html:198 +#: rhodecode/templates/admin/users/users.html:109 +#: rhodecode/templates/bookmarks/bookmarks.html:60 +#: rhodecode/templates/branches/branches.html:75 +#: rhodecode/templates/journal/journal.html:219 +#: rhodecode/templates/journal/journal.html:322 +#: rhodecode/templates/tags/tags.html:76 +msgid "No records found." +msgstr "" + +#: rhodecode/templates/index_base.html:212 +#: rhodecode/templates/index_base.html:299 +#: rhodecode/templates/admin/repos/repos.html:100 +#: rhodecode/templates/admin/users/user_edit_my_account.html:199 +#: rhodecode/templates/admin/users/users.html:110 +#: rhodecode/templates/bookmarks/bookmarks.html:61 +#: rhodecode/templates/branches/branches.html:76 +#: rhodecode/templates/journal/journal.html:220 +#: rhodecode/templates/journal/journal.html:323 +#: rhodecode/templates/tags/tags.html:77 +msgid "Data error." +msgstr "" + +#: rhodecode/templates/index_base.html:213 +#: rhodecode/templates/index_base.html:300 +#: rhodecode/templates/admin/repos/repos.html:101 +#: rhodecode/templates/admin/users/user_edit_my_account.html:58 +#: rhodecode/templates/admin/users/user_edit_my_account.html:200 #: rhodecode/templates/admin/users/users.html:111 -#: rhodecode/templates/bookmarks/bookmarks.html:64 -#: rhodecode/templates/branches/branches.html:80 -#: rhodecode/templates/journal/journal.html:62 -#: rhodecode/templates/journal/journal.html:225 -#: rhodecode/templates/tags/tags.html:81 +#: rhodecode/templates/bookmarks/bookmarks.html:62 +#: rhodecode/templates/branches/branches.html:77 +#: rhodecode/templates/journal/journal.html:221 +#: rhodecode/templates/journal/journal.html:324 +#: rhodecode/templates/tags/tags.html:78 msgid "Loading..." msgstr "" -#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54 -msgid "Sign In" +#: rhodecode/templates/index_base.html:298 +msgid "No repositories found." +msgstr "" + +#: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:227 +msgid "Log In" msgstr "" #: rhodecode/templates/login.html:21 -msgid "Sign In to" +#, python-format +msgid "Log In to %s" msgstr "" #: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20 #: rhodecode/templates/admin/admin_log.html:5 #: rhodecode/templates/admin/users/user_add.html:32 -#: rhodecode/templates/admin/users/user_edit.html:50 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26 -#: rhodecode/templates/base/base.html:83 -#: rhodecode/templates/summary/summary.html:131 +#: rhodecode/templates/admin/users/user_edit.html:57 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:31 +#: rhodecode/templates/admin/users/users.html:77 +#: rhodecode/templates/base/base.html:203 +#: rhodecode/templates/summary/summary.html:123 msgid "Username" msgstr "" #: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29 #: rhodecode/templates/admin/ldap/ldap.html:46 #: rhodecode/templates/admin/users/user_add.html:41 -#: rhodecode/templates/base/base.html:92 +#: rhodecode/templates/base/base.html:212 msgid "Password" msgstr "" @@ -1490,16 +1675,20 @@ msgstr "" msgid "Remember me" msgstr "" +#: rhodecode/templates/login.html:54 +msgid "Sign In" +msgstr "" + #: rhodecode/templates/login.html:60 msgid "Forgot your password ?" msgstr "" -#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103 +#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:223 msgid "Don't have an account ?" msgstr "" #: rhodecode/templates/password_reset.html:5 -msgid "Reset your password" +msgid "Password Reset" msgstr "" #: rhodecode/templates/password_reset.html:11 @@ -1532,23 +1721,23 @@ msgstr "" #: 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 +#: rhodecode/templates/admin/users/user_edit.html:97 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62 msgid "First Name" msgstr "" #: 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 +#: rhodecode/templates/admin/users/user_edit.html:106 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71 msgid "Last Name" msgstr "" #: 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 +#: rhodecode/templates/admin/users/user_edit.html:115 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80 +#: rhodecode/templates/summary/summary.html:125 msgid "Email" msgstr "" @@ -1560,44 +1749,31 @@ msgstr "" msgid "Your account must wait for activation by administrator" msgstr "" -#: rhodecode/templates/repo_switcher_list.html:11 +#: rhodecode/templates/repo_switcher_list.html:10 #: 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 +#: rhodecode/templates/data_table/_dt_elements.html:61 +#: rhodecode/templates/summary/summary.html:77 msgid "Private repository" msgstr "" -#: rhodecode/templates/repo_switcher_list.html:16 +#: rhodecode/templates/repo_switcher_list.html:12 +#: rhodecode/templates/data_table/_dt_elements.html:63 +#: rhodecode/templates/summary/summary.html:79 msgid "Public repository" msgstr "" -#: rhodecode/templates/switch_to_list.html:3 -#: rhodecode/templates/branches/branches.html:14 -msgid "branches" -msgstr "" - #: rhodecode/templates/switch_to_list.html:10 #: rhodecode/templates/branches/branches_data.html:57 msgid "There are no branches yet" msgstr "" -#: rhodecode/templates/switch_to_list.html:15 -#: rhodecode/templates/shortlog/shortlog_data.html:10 -#: rhodecode/templates/tags/tags.html:15 -msgid "tags" -msgstr "" - #: rhodecode/templates/switch_to_list.html:22 #: rhodecode/templates/tags/tags_data.html:38 msgid "There are no tags yet" msgstr "" -#: rhodecode/templates/switch_to_list.html:28 -#: rhodecode/templates/bookmarks/bookmarks.html:15 -msgid "bookmarks" -msgstr "" - #: rhodecode/templates/switch_to_list.html:35 #: rhodecode/templates/bookmarks/bookmarks_data.html:32 msgid "There are no bookmarks yet" @@ -1605,6 +1781,7 @@ msgstr "" #: rhodecode/templates/admin/admin.html:5 #: rhodecode/templates/admin/admin.html:13 +#: rhodecode/templates/base/base.html:68 msgid "Admin journal" msgstr "" @@ -1626,11 +1803,13 @@ msgstr[0] "" msgstr[1] "" #: 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 +#: rhodecode/templates/admin/repos/repos.html:77 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 +#: rhodecode/templates/admin/users/user_edit_my_account.html:176 +#: rhodecode/templates/admin/users/users.html:87 +#: rhodecode/templates/admin/users_groups/users_groups.html:37 +#: rhodecode/templates/journal/journal.html:197 +#: rhodecode/templates/journal/journal.html:300 msgid "Action" msgstr "" @@ -1640,11 +1819,11 @@ msgid "Repository" msgstr "" #: rhodecode/templates/admin/admin_log.html:8 -#: rhodecode/templates/bookmarks/bookmarks.html:37 +#: rhodecode/templates/bookmarks/bookmarks.html:35 #: rhodecode/templates/bookmarks/bookmarks_data.html:7 -#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches.html:48 #: rhodecode/templates/branches/branches_data.html:7 -#: rhodecode/templates/tags/tags.html:52 +#: rhodecode/templates/tags/tags.html:49 #: rhodecode/templates/tags/tags_data.html:7 msgid "Date" msgstr "" @@ -1663,6 +1842,7 @@ msgid "Repositories defaults" msgstr "" #: rhodecode/templates/admin/defaults/defaults.html:11 +#: rhodecode/templates/base/base.html:75 msgid "Defaults" msgstr "" @@ -1675,8 +1855,7 @@ 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 +#: rhodecode/templates/forks/fork.html:69 msgid "" "Private repositories are only visible to people explicitly added as " "collaborators." @@ -1704,7 +1883,7 @@ 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 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72 msgid "Enable locking" msgstr "" @@ -1715,14 +1894,18 @@ 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/permissions/permissions.html:92 +#: rhodecode/templates/admin/repos/repo_edit.html:148 +#: rhodecode/templates/admin/repos/repo_edit.html:173 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:80 #: 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/user_add.html:94 +#: rhodecode/templates/admin/users/user_edit.html:140 +#: rhodecode/templates/admin/users/user_edit.html:185 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:88 +#: rhodecode/templates/admin/users_groups/users_group_add.html:49 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:90 #: rhodecode/templates/admin/users_groups/users_group_edit.html:135 -#: rhodecode/templates/settings/repo_settings.html:94 msgid "Save" msgstr "" @@ -1731,7 +1914,9 @@ msgid "LDAP administration" msgstr "" #: rhodecode/templates/admin/ldap/ldap.html:11 -msgid "Ldap" +#: rhodecode/templates/admin/users/users.html:86 +#: rhodecode/templates/base/base.html:74 +msgid "LDAP" msgstr "" #: rhodecode/templates/admin/ldap/ldap.html:28 @@ -1813,8 +1998,7 @@ msgid "Comments" msgstr "" #: rhodecode/templates/admin/notifications/notifications.html:31 -#: rhodecode/templates/base/base.html:267 -#: rhodecode/templates/base/base.html:269 +#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 msgid "Pull requests" msgstr "" @@ -1832,6 +2016,7 @@ msgid "Show notification" msgstr "" #: rhodecode/templates/admin/notifications/show_notification.html:9 +#: rhodecode/templates/base/base.html:241 msgid "Notifications" msgstr "" @@ -1840,11 +2025,12 @@ msgid "Permissions administration" 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:143 +#: rhodecode/templates/admin/repos/repo_edit.html:158 +#: rhodecode/templates/admin/repos/repo_edit.html:165 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64 +#: rhodecode/templates/admin/users/user_edit.html:150 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100 -#: rhodecode/templates/settings/repo_settings.html:86 +#: rhodecode/templates/base/base.html:73 msgid "Permissions" msgstr "" @@ -1858,30 +2044,21 @@ msgstr "" #: rhodecode/templates/admin/permissions/permissions.html:49 msgid "" -"All default permissions on each repository will be reset to choosen " +"All default permissions on each repository will be reset to chosen " "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" +msgid "Overwrite existing settings" 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" +"All default permissions on each repository group will be reset to chosen " +"permission, note that all custom default permission on repository groups " +"will be lost" msgstr "" #: rhodecode/templates/admin/permissions/permissions.html:69 @@ -1896,40 +2073,95 @@ msgstr "" msgid "Repository forking" msgstr "" -#: rhodecode/templates/admin/permissions/permissions.html:92 -#: rhodecode/templates/admin/repos/repo_edit.html:264 -msgid "set" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_add.html:5 -#: rhodecode/templates/admin/repos/repo_add_create_repository.html:5 -msgid "Add repository" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_add.html:11 -#: rhodecode/templates/admin/repos/repo_edit.html:11 -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10 +#: rhodecode/templates/admin/permissions/permissions.html:93 +#: rhodecode/templates/admin/permissions/permissions.html:154 +#: rhodecode/templates/admin/repos/repo_edit.html:149 +#: rhodecode/templates/admin/repos/repo_edit.html:174 +#: rhodecode/templates/admin/repos/repo_edit.html:388 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81 +#: rhodecode/templates/admin/settings/settings.html:115 +#: rhodecode/templates/admin/settings/settings.html:187 +#: rhodecode/templates/admin/settings/settings.html:278 +#: rhodecode/templates/admin/users/user_edit.html:141 +#: rhodecode/templates/admin/users/user_edit.html:186 +#: rhodecode/templates/admin/users/user_edit.html:235 +#: rhodecode/templates/admin/users/user_edit.html:283 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:89 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:136 +#: rhodecode/templates/files/files_add.html:80 +#: rhodecode/templates/files/files_edit.html:66 +#: rhodecode/templates/pullrequests/pullrequest.html:110 +msgid "Reset" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:103 +msgid "Default User Permissions" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:113 +#: rhodecode/templates/admin/users/user_edit.html:244 +msgid "Allowed IP addresses" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:127 +#: rhodecode/templates/admin/repos/repo_edit.html:347 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70 +#: rhodecode/templates/admin/users/user_edit.html:212 +#: rhodecode/templates/admin/users/user_edit.html:257 +#: rhodecode/templates/admin/users_groups/users_groups.html:46 +#: rhodecode/templates/data_table/_dt_elements.html:122 +#: rhodecode/templates/data_table/_dt_elements.html:130 +msgid "delete" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:128 +#: rhodecode/templates/admin/users/user_edit.html:258 +#, fuzzy, python-format +msgid "Confirm to delete this ip: %s" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:134 +#: rhodecode/templates/admin/users/user_edit.html:264 +msgid "All IP addresses are allowed" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:145 +#: rhodecode/templates/admin/users/user_edit.html:275 +msgid "New ip address" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:153 +#: rhodecode/templates/admin/repos/repo_add_base.html:73 +#: rhodecode/templates/admin/repos/repo_edit.html:387 +#: rhodecode/templates/admin/users/user_edit.html:234 +#: rhodecode/templates/admin/users/user_edit.html:282 +msgid "Add" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_add.html:12 +#: rhodecode/templates/admin/repos/repo_add.html:16 +#: rhodecode/templates/base/base.html:69 rhodecode/templates/base/base.html:103 +#: rhodecode/templates/base/base.html:263 msgid "Repositories" msgstr "" -#: rhodecode/templates/admin/repos/repo_add.html:13 -msgid "add new" +#: rhodecode/templates/admin/repos/repo_add.html:19 +msgid "Add new" msgstr "" #: rhodecode/templates/admin/repos/repo_add_base.html:20 -#: rhodecode/templates/summary/summary.html:104 -#: rhodecode/templates/summary/summary.html:105 +#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:97 msgid "Clone from" msgstr "" #: 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 "" #: rhodecode/templates/admin/repos/repo_add_base.html:33 -#: rhodecode/templates/forks/fork.html:54 +#: rhodecode/templates/forks/fork.html:51 msgid "Optionaly select a group to put this repository into." msgstr "" @@ -1939,57 +2171,39 @@ msgstr "" #: 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 +#: rhodecode/templates/forks/fork.html:38 msgid "Landing revision" msgstr "" #: 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 +#: rhodecode/templates/forks/fork.html:42 msgid "Default revision for files page, downloads, whoosh and readme" msgstr "" #: 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 +#: rhodecode/templates/forks/fork.html:60 msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "" -#: rhodecode/templates/admin/repos/repo_add_base.html:73 -msgid "add" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9 -msgid "add new repository" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:5 +#: rhodecode/templates/admin/repos/repo_edit.html:8 msgid "Edit repository" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:13 -#: rhodecode/templates/admin/users/user_edit.html:13 -#: rhodecode/templates/admin/users/user_edit.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" +#: rhodecode/templates/admin/repos/repo_edit.html:12 +#: rhodecode/templates/admin/settings/hooks.html:9 +#: rhodecode/templates/admin/settings/settings.html:11 +#: rhodecode/templates/base/base.html:76 rhodecode/templates/base/base.html:121 +#: rhodecode/templates/summary/summary.html:212 +msgid "Settings" msgstr "" #: rhodecode/templates/admin/repos/repo_edit.html:40 -#: rhodecode/templates/settings/repo_settings.html:39 msgid "Clone uri" msgstr "" #: 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 "" @@ -1997,175 +2211,204 @@ msgstr "" msgid "Change owner of this repository." 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: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:95 -msgid "Reset" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:152 -msgid "Administration" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:155 +#: rhodecode/templates/admin/repos/repo_edit.html:184 +msgid "Advanced settings" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:187 msgid "Statistics" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:159 +#: rhodecode/templates/admin/repos/repo_edit.html:191 msgid "Reset current statistics" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:159 +#: rhodecode/templates/admin/repos/repo_edit.html:191 msgid "Confirm to remove current statistics" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:162 +#: rhodecode/templates/admin/repos/repo_edit.html:194 msgid "Fetched to rev" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:163 +#: rhodecode/templates/admin/repos/repo_edit.html:195 msgid "Stats gathered" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:171 -msgid "Remote" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:175 -msgid "Pull changes from remote location" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:175 -msgid "Confirm to pull changes from remote side" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:186 -msgid "Cache" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:190 -msgid "Invalidate repository cache" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:190 -msgid "Confirm to invalidate repository cache" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html: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 "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" +msgid "Remote" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:207 +msgid "Pull changes from remote location" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:207 +msgid "Confirm to pull changes from remote side" 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 "Cache" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:222 +msgid "Invalidate repository cache" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:222 +msgid "Confirm to invalidate repository cache" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:225 +msgid "" +"Manually invalidate cache for this repository. On first access repository" +" will be cached again" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:230 +msgid "List of cached values" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:233 +msgid "Prefix" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:234 +msgid "Key" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:235 +#: rhodecode/templates/admin/users/user_add.html:86 +#: rhodecode/templates/admin/users/user_edit.html:124 +#: rhodecode/templates/admin/users/users.html:84 +#: rhodecode/templates/admin/users_groups/users_group_add.html:41 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:42 +#: rhodecode/templates/admin/users_groups/users_groups.html:36 +msgid "Active" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:250 +#: rhodecode/templates/base/base.html:280 +#: rhodecode/templates/base/base.html:281 msgid "Public journal" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:224 +#: rhodecode/templates/admin/repos/repo_edit.html:256 msgid "Remove from public journal" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:226 +#: rhodecode/templates/admin/repos/repo_edit.html:258 msgid "Add to public journal" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:231 +#: rhodecode/templates/admin/repos/repo_edit.html:263 msgid "" "All actions made on this repository will be accessible to everyone in " "public journal" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:238 +#: rhodecode/templates/admin/repos/repo_edit.html:270 msgid "Locking" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:243 +#: rhodecode/templates/admin/repos/repo_edit.html:275 msgid "Unlock locked repo" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:243 +#: rhodecode/templates/admin/repos/repo_edit.html:275 msgid "Confirm to unlock repository" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:246 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "lock repo" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:246 -msgid "Confirm to lock repository" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:247 -msgid "Repository is not locked" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:252 -msgid "Force locking on repository. Works only when anonymous access is disabled" -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 -#: rhodecode/templates/settings/repo_settings.html:115 +msgid "Confirm to lock repository" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:279 +msgid "Repository is not locked" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:284 +msgid "Force locking on repository. Works only when anonymous access is disabled" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:291 +msgid "Set as fork of" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:296 +msgid "set" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:300 +msgid "Manually set this repository as a fork of another from the list" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:306 +#: rhodecode/templates/changeset/changeset_file_comment.html:41 +msgid "Delete" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:315 msgid "Remove this repository" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:278 -#: rhodecode/templates/settings/repo_settings.html:115 +#: rhodecode/templates/admin/repos/repo_edit.html:315 msgid "Confirm to delete this repository" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:282 -#: rhodecode/templates/settings/repo_settings.html:119 +#: rhodecode/templates/admin/repos/repo_edit.html:317 +#, python-format +msgid "this repository has %s fork" +msgid_plural "this repository has %s forks" +msgstr[0] "" +msgstr[1] "" + +#: rhodecode/templates/admin/repos/repo_edit.html:318 +msgid "Detach forks" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:319 +msgid "Delete forks" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:322 msgid "" "This repository will be renamed in a special way in order to be " -"unaccesible for RhodeCode and VCS systems. If you need fully delete it " -"from file system please do it manually" +"unaccesible for RhodeCode and VCS systems. If you need to fully delete it" +" from file system please do it manually" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:336 +msgid "Extra fields" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:348 +#, fuzzy, python-format +msgid "Confirm to delete this field: %s" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:362 +msgid "New field key" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:370 +msgid "New field label" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:373 +msgid "Enter short label" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:379 +msgid "New field description" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:382 +msgid "Enter description of a field" msgstr "" #: rhodecode/templates/admin/repos/repo_edit_perms.html:3 @@ -2185,8 +2428,6 @@ 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:229 msgid "admin" msgstr "" @@ -2196,78 +2437,58 @@ msgid "member" msgstr "" #: rhodecode/templates/admin/repos/repo_edit_perms.html:16 -#: rhodecode/templates/data_table/_dt_elements.html:67 -#: rhodecode/templates/journal/journal.html:95 -#: rhodecode/templates/summary/summary.html:85 msgid "private repository" msgstr "" #: 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 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:20 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:35 msgid "default" msgstr "" #: 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 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:25 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:55 msgid "revoke" msgstr "" #: rhodecode/templates/admin/repos/repo_edit_perms.html:83 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:67 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:80 msgid "Add another member" msgstr "" #: rhodecode/templates/admin/repos/repo_edit_perms.html:97 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:100 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:103 -msgid "Failed to remove users group" +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:116 +msgid "Failed to remove user group" msgstr "" #: rhodecode/templates/admin/repos/repos.html:5 msgid "Repositories administration" msgstr "" -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:86 msgid "apply to children" msgstr "" -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 msgid "" -"Set or revoke permission to all children of that group, including " -"repositories and other groups" +"Set or revoke permission to all children of that group, including non-" +"private repositories and other groups" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 +#, python-format +msgid "%s Group Dashboard" 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 "" @@ -2276,80 +2497,78 @@ msgid "with" msgstr "" #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5 -msgid "Add repos group" -msgstr "" - -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10 -msgid "Repos groups" -msgstr "" - -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12 -msgid "add new repos group" -msgstr "" - -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50 +msgid "Add repository group" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:16 +#: rhodecode/templates/base/base.html:70 rhodecode/templates/base/base.html:82 +msgid "Repository groups" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:13 +msgid "Add new repository group" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:51 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:56 msgid "Group parent" msgstr "" -#: 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 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:59 msgid "save" msgstr "" #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5 -msgid "Edit repos group" -msgstr "" - -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12 -msgid "edit repos group" -msgstr "" - -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70 +msgid "Edit repository group" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:13 +#, python-format +msgid "Edit repository group %s" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:27 +msgid "Add child group" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:76 msgid "" "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 -msgid "Repositories groups administration" -msgstr "" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22 -msgid "ADD NEW GROUP" -msgstr "" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35 +msgid "Repository groups administration" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:45 msgid "Number of toplevel repositories" msgstr "" -#: 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 "" - -#: 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 "" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:64 +msgid "Edit" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:65 +#: rhodecode/templates/base/perms_summary.html:29 +#: rhodecode/templates/base/perms_summary.html:48 +#: rhodecode/templates/base/perms_summary.html:50 +#: rhodecode/templates/data_table/_dt_elements.html:116 +#: rhodecode/templates/data_table/_dt_elements.html:117 +msgid "edit" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70 #, 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" +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:78 +msgid "There are no repository groups yet" msgstr "" #: rhodecode/templates/admin/settings/hooks.html:5 @@ -2357,12 +2576,6 @@ msgstr "" msgid "Settings administration" msgstr "" -#: rhodecode/templates/admin/settings/hooks.html:9 -#: rhodecode/templates/admin/settings/settings.html:9 -#: rhodecode/templates/settings/repo_settings.html:13 -msgid "Settings" -msgstr "" - #: rhodecode/templates/admin/settings/hooks.html:24 msgid "Built in hooks - read only" msgstr "" @@ -2379,205 +2592,210 @@ msgstr "" msgid "Failed to remove hook" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:24 +#: rhodecode/templates/admin/settings/settings.html:26 msgid "Remap and rescan repositories" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:32 -msgid "rescan option" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:38 +#: rhodecode/templates/admin/settings/settings.html:34 +msgid "Rescan option" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:40 msgid "" "In case a repository was deleted from filesystem and there are leftovers " "in the database check this option to scan obsolete data in database and " "remove it." msgstr "" -#: rhodecode/templates/admin/settings/settings.html:39 -msgid "destroy old data" -msgstr "" - #: rhodecode/templates/admin/settings/settings.html:41 +msgid "Destroy old data" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:43 msgid "" "Rescan repositories location for new repositories. Also deletes obsolete " "if `destroy` flag is checked " msgstr "" -#: rhodecode/templates/admin/settings/settings.html:46 +#: rhodecode/templates/admin/settings/settings.html:48 msgid "Rescan repositories" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:52 +#: rhodecode/templates/admin/settings/settings.html:54 msgid "Whoosh indexing" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:60 -msgid "index build option" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:65 -msgid "build from scratch" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:71 +#: rhodecode/templates/admin/settings/settings.html:62 +msgid "Index build option" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:67 +msgid "Build from scratch" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:73 msgid "Reindex" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:77 +#: rhodecode/templates/admin/settings/settings.html:79 msgid "Global application settings" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:86 -msgid "Application name" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:95 -msgid "Realm text" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:104 -msgid "GA code" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:112 -#: rhodecode/templates/admin/settings/settings.html:178 -#: rhodecode/templates/admin/settings/settings.html:268 +#: rhodecode/templates/admin/settings/settings.html:88 +msgid "Site branding" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:97 +msgid "HTTP authentication realm" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:106 +msgid "Google Analytics code" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:114 +#: rhodecode/templates/admin/settings/settings.html:186 +#: rhodecode/templates/admin/settings/settings.html:277 msgid "Save settings" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:119 +#: rhodecode/templates/admin/settings/settings.html:121 msgid "Visualisation settings" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:127 +#: rhodecode/templates/admin/settings/settings.html:129 msgid "General" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:132 +#: rhodecode/templates/admin/settings/settings.html:134 msgid "Use lightweight dashboard" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:139 +#: rhodecode/templates/admin/settings/settings.html:140 +msgid "Use repository extra fields" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:147 msgid "Icons" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:144 +#: rhodecode/templates/admin/settings/settings.html:152 msgid "Show public repo icon on repositories" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:148 +#: rhodecode/templates/admin/settings/settings.html:156 msgid "Show private repo icon on repositories" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:155 +#: rhodecode/templates/admin/settings/settings.html:163 msgid "Meta-Tagging" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:160 +#: rhodecode/templates/admin/settings/settings.html:168 msgid "Stylify recognised metatags:" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:187 +#: rhodecode/templates/admin/settings/settings.html:195 msgid "VCS settings" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:196 +#: rhodecode/templates/admin/settings/settings.html:204 msgid "Web" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:201 -msgid "require ssl for vcs operations" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:203 +#: rhodecode/templates/admin/settings/settings.html:209 +msgid "Require SSL for vcs operations" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:211 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 +#: rhodecode/templates/admin/settings/settings.html:217 msgid "Hooks" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:214 -msgid "Update repository after push (hg update)" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:218 -msgid "Show repository size after push" -msgstr "" - #: rhodecode/templates/admin/settings/settings.html:222 -msgid "Log user push commands" +msgid "Update repository after push (hg update)" msgstr "" #: rhodecode/templates/admin/settings/settings.html:226 -msgid "Log user pull commands" +msgid "Show repository size after push" msgstr "" #: rhodecode/templates/admin/settings/settings.html:230 -msgid "advanced setup" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:235 +msgid "Log user push commands" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:234 +msgid "Log user pull commands" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:238 +msgid "Advanced setup" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:243 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 +#: rhodecode/templates/admin/settings/settings.html:248 +msgid "Enable largefiles extension" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:252 +msgid "Enable hgsubversion extension" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:254 msgid "" -"Requires hgsubversion library installed. Allows clonning from svn remote " +"Requires hgsubversion library installed. Allows cloning from svn remote " "locations" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:256 +#: rhodecode/templates/admin/settings/settings.html:264 msgid "Repositories location" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:261 +#: rhodecode/templates/admin/settings/settings.html:269 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:262 -#: rhodecode/templates/base/base.html:221 -msgid "unlock" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:263 +#: rhodecode/templates/admin/settings/settings.html:270 +#: rhodecode/templates/base/base.html:131 +msgid "Unlock" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:272 msgid "" "Location where repositories are stored. After changing this value a " "restart, and rescan is required" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:283 +#: rhodecode/templates/admin/settings/settings.html:292 msgid "Test Email" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:291 +#: rhodecode/templates/admin/settings/settings.html:300 msgid "Email to" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:299 -msgid "Send" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:305 -msgid "System Info and Packages" -msgstr "" - #: rhodecode/templates/admin/settings/settings.html:308 -msgid "show" +msgid "Send" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:314 +msgid "System Info and Packages" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:317 +#: rhodecode/templates/changelog/changelog.html:42 +msgid "Show" msgstr "" #: rhodecode/templates/admin/users/user_add.html:5 @@ -2586,11 +2804,13 @@ msgstr "" #: rhodecode/templates/admin/users/user_add.html:10 #: rhodecode/templates/admin/users/user_edit.html:11 +#: rhodecode/templates/base/base.html:71 msgid "Users" msgstr "" #: rhodecode/templates/admin/users/user_add.html:12 -msgid "add new user" +#: rhodecode/templates/admin/users/users.html:23 +msgid "Add new user" msgstr "" #: rhodecode/templates/admin/users/user_add.html:50 @@ -2601,6 +2821,12 @@ msgstr "" msgid "Edit user" msgstr "" +#: rhodecode/templates/admin/users/user_edit.html:13 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:13 +#, python-format +msgid "Edit %s" +msgstr "" + #: rhodecode/templates/admin/users/user_edit.html:34 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:10 msgid "Change your avatar at" @@ -2616,26 +2842,31 @@ msgstr "" msgid "API key" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:63 +#: rhodecode/templates/admin/users/user_edit.html:50 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:25 +msgid "Current IP" +msgstr "" + +#: rhodecode/templates/admin/users/user_edit.html:70 msgid "LDAP DN" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:72 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35 +#: rhodecode/templates/admin/users/user_edit.html:79 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 msgid "New password" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:81 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 +#: rhodecode/templates/admin/users/user_edit.html:88 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53 msgid "New password confirmation" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:151 +#: rhodecode/templates/admin/users/user_edit.html:158 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108 msgid "Inherit default permissions" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:156 +#: rhodecode/templates/admin/users/user_edit.html:163 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113 #, python-format msgid "" @@ -2643,53 +2874,31 @@ msgid "" "options does not have any action" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:162 +#: rhodecode/templates/admin/users/user_edit.html:169 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119 msgid "Create repositories" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:170 +#: rhodecode/templates/admin/users/user_edit.html:177 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127 msgid "Fork repositories" 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 -msgid "Nothing here yet" -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:217 -#: rhodecode/templates/admin/users_groups/users_group_edit.html:185 -msgid "Permission" -msgstr "" - -#: 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:247 +#: rhodecode/templates/admin/users/user_edit.html:200 msgid "Email addresses" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:260 +#: rhodecode/templates/admin/users/user_edit.html:213 #, python-format msgid "Confirm to delete this email: %s" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:274 +#: rhodecode/templates/admin/users/user_edit.html:227 msgid "New email address" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:281 -msgid "Add" -msgstr "" - #: rhodecode/templates/admin/users/user_edit_my_account.html:5 -#: rhodecode/templates/base/base.html:124 +#: rhodecode/templates/base/base.html:242 msgid "My account" msgstr "" @@ -2702,7 +2911,7 @@ msgid "My permissions" msgstr "" #: rhodecode/templates/admin/users/user_edit_my_account.html:38 -#: rhodecode/templates/journal/journal.html:49 +#: rhodecode/templates/journal/journal.html:54 msgid "My repos" msgstr "" @@ -2710,132 +2919,97 @@ msgstr "" msgid "My pull requests" msgstr "" -#: rhodecode/templates/admin/users/user_edit_my_account.html:45 -msgid "Add repo" -msgstr "" - #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:2 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:4 +msgid "Show closed pull requests" +msgstr "" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:6 msgid "Opened by me" msgstr "" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10 -#, python-format -msgid "Pull request #%s opened on %s" -msgstr "" - #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15 +#, python-format +msgid "Pull request #%s opened on %s" +msgstr "" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:17 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:45 +#: rhodecode/templates/pullrequests/pullrequest_data.html:7 +#: rhodecode/templates/pullrequests/pullrequest_show.html:27 +#: rhodecode/templates/pullrequests/pullrequest_show.html:42 +msgid "Closed" +msgstr "" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:23 msgid "Confirm to delete this pull request" msgstr "" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:26 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:30 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:51 +msgid "Nothing here yet" +msgstr "" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:34 msgid "I participate in" msgstr "" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:33 -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:30 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:42 +#: rhodecode/templates/pullrequests/pullrequest_data.html:11 #, python-format msgid "Pull request #%s opened by %s on %s" 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: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_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_page_repos.html:42 -msgid "No repositories yet" -msgstr "" - -#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40 -#: rhodecode/templates/journal/journal_page_repos.html:44 -msgid "create one now" -msgstr "" - #: rhodecode/templates/admin/users/users.html:5 msgid "Users administration" msgstr "" #: rhodecode/templates/admin/users/users.html:9 -#: rhodecode/templates/base/base.html:235 msgid "users" msgstr "" -#: rhodecode/templates/admin/users/users.html:23 -msgid "ADD NEW USER" -msgstr "" - -#: rhodecode/templates/admin/users/users.html:77 -msgid "username" -msgstr "" - #: rhodecode/templates/admin/users/users.html:80 -msgid "firstname" +msgid "Firstname" msgstr "" #: rhodecode/templates/admin/users/users.html:81 -msgid "lastname" +msgid "Lastname" msgstr "" #: rhodecode/templates/admin/users/users.html:82 -msgid "last login" -msgstr "" - -#: rhodecode/templates/admin/users/users.html:84 -#: rhodecode/templates/admin/users_groups/users_groups.html:34 -msgid "active" -msgstr "" - -#: rhodecode/templates/admin/users/users.html:86 -#: rhodecode/templates/base/base.html:238 -msgid "ldap" +msgid "Last login" msgstr "" #: rhodecode/templates/admin/users_groups/users_group_add.html:5 -msgid "Add users group" +msgid "Add user group" msgstr "" #: rhodecode/templates/admin/users_groups/users_group_add.html:10 -#: rhodecode/templates/admin/users_groups/users_groups.html:9 -msgid "Users groups" +#: rhodecode/templates/admin/users_groups/users_groups.html:11 +#: rhodecode/templates/base/base.html:72 +msgid "User groups" msgstr "" #: rhodecode/templates/admin/users_groups/users_group_add.html:12 -msgid "add new users group" +#: rhodecode/templates/admin/users_groups/users_groups.html:25 +msgid "Add new user group" msgstr "" #: rhodecode/templates/admin/users_groups/users_group_edit.html:5 -msgid "Edit users group" +msgid "Edit user group" msgstr "" #: rhodecode/templates/admin/users_groups/users_group_edit.html:11 -msgid "UsersGroups" +msgid "UserGroups" msgstr "" #: rhodecode/templates/admin/users_groups/users_group_edit.html:50 +#: rhodecode/templates/admin/users_groups/users_groups.html:35 msgid "Members" msgstr "" #: rhodecode/templates/admin/users_groups/users_group_edit.html:58 -msgid "Choosen group members" +msgid "Chosen group members" msgstr "" #: rhodecode/templates/admin/users_groups/users_group_edit.html:61 @@ -2850,262 +3024,261 @@ msgstr "" msgid "Add all elements" msgstr "" -#: rhodecode/templates/admin/users_groups/users_group_edit.html:146 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:150 msgid "Group members" msgstr "" -#: rhodecode/templates/admin/users_groups/users_group_edit.html:163 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:167 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 "" - -#: rhodecode/templates/admin/users_groups/users_groups.html:23 -msgid "ADD NEW USER GROUP" -msgstr "" - -#: rhodecode/templates/admin/users_groups/users_groups.html:32 -msgid "group name" -msgstr "" - -#: rhodecode/templates/admin/users_groups/users_groups.html:33 -#: rhodecode/templates/base/root.html:46 -msgid "members" -msgstr "" - -#: rhodecode/templates/admin/users_groups/users_groups.html:45 -#, python-format -msgid "Confirm to delete this users group: %s" -msgstr "" - -#: rhodecode/templates/base/base.html:41 +msgid "User groups administration" +msgstr "" + +#: rhodecode/templates/admin/users_groups/users_groups.html:47 +#, fuzzy, python-format +msgid "Confirm to delete this user group: %s" +msgstr "" + +#: rhodecode/templates/base/base.html:42 msgid "Submit a bug" msgstr "" -#: rhodecode/templates/base/base.html:77 -msgid "Login to your account" -msgstr "" - -#: rhodecode/templates/base/base.html:100 -msgid "Forgot password ?" -msgstr "" - -#: rhodecode/templates/base/base.html:107 -msgid "Log In" +#: rhodecode/templates/base/base.html:108 +#: rhodecode/templates/data_table/_dt_elements.html:9 +#: rhodecode/templates/data_table/_dt_elements.html:11 +#: rhodecode/templates/data_table/_dt_elements.html:13 +#: rhodecode/templates/pullrequests/pullrequest_show.html:81 +#: rhodecode/templates/summary/summary.html:8 +msgid "Summary" +msgstr "" + +#: rhodecode/templates/base/base.html:109 +#: rhodecode/templates/changelog/changelog.html:11 +#: rhodecode/templates/data_table/_dt_elements.html:17 +#: rhodecode/templates/data_table/_dt_elements.html:19 +#: rhodecode/templates/data_table/_dt_elements.html:21 +msgid "Changelog" +msgstr "" + +#: rhodecode/templates/base/base.html:110 +#: rhodecode/templates/data_table/_dt_elements.html:25 +#: rhodecode/templates/data_table/_dt_elements.html:27 +#: rhodecode/templates/data_table/_dt_elements.html:29 +#: rhodecode/templates/files/files.html:12 +msgid "Files" +msgstr "" + +#: rhodecode/templates/base/base.html:112 +msgid "Switch To" +msgstr "" + +#: rhodecode/templates/base/base.html:114 +#: rhodecode/templates/base/base.html:267 +msgid "loading..." msgstr "" #: rhodecode/templates/base/base.html:118 -msgid "Inbox" -msgstr "" - -#: 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/public_journal.html:4 -msgid "Journal" -msgstr "" - -#: rhodecode/templates/base/base.html:125 -msgid "Log Out" -msgstr "" - -#: rhodecode/templates/base/base.html:144 -msgid "Switch repository" -msgstr "" - -#: rhodecode/templates/base/base.html:146 -msgid "Products" -msgstr "" - -#: rhodecode/templates/base/base.html:152 -#: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47 -msgid "loading..." -msgstr "" - -#: 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 "" - -#: 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 "" - -#: rhodecode/templates/base/base.html:175 -#: rhodecode/templates/base/base.html:177 -#: rhodecode/templates/base/base.html:179 -msgid "Switch to" -msgstr "" - -#: 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 +msgid "Options" +msgstr "" + +#: rhodecode/templates/base/base.html:124 +#: rhodecode/templates/forks/forks_data.html:21 +msgid "Compare fork" +msgstr "" + +#: rhodecode/templates/base/base.html:126 +msgid "Lightweight changelog" +msgstr "" + +#: rhodecode/templates/base/base.html:127 +#: rhodecode/templates/base/base.html:287 +#: rhodecode/templates/search/search.html:14 +#: rhodecode/templates/search/search.html:54 +msgid "Search" +msgstr "" + +#: rhodecode/templates/base/base.html:133 +msgid "Lock" +msgstr "" + +#: rhodecode/templates/base/base.html:141 +msgid "Follow" +msgstr "" + +#: rhodecode/templates/base/base.html:142 +msgid "Unfollow" +msgstr "" + +#: rhodecode/templates/base/base.html:145 #: rhodecode/templates/data_table/_dt_elements.html:33 #: rhodecode/templates/data_table/_dt_elements.html:35 -msgid "Files" -msgstr "" - -#: rhodecode/templates/base/base.html:195 -#: rhodecode/templates/base/base.html:199 -msgid "Options" -msgstr "" - -#: rhodecode/templates/base/base.html:204 -#: rhodecode/templates/base/base.html:206 -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:212 rhodecode/templates/base/root.html:50 -#: rhodecode/templates/changelog/changelog.html:43 -msgid "Open new pull request" -msgstr "" - -#: 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:223 -msgid "lock" -msgstr "" - -#: rhodecode/templates/base/base.html:234 -msgid "repositories groups" -msgstr "" - -#: rhodecode/templates/base/base.html:236 -msgid "users groups" -msgstr "" - -#: rhodecode/templates/base/base.html:237 -msgid "permissions" -msgstr "" - -#: 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:259 -#: rhodecode/templates/base/base.html:261 -msgid "Forks" -msgstr "" - -#: 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 "" - -#: rhodecode/templates/base/root.html:42 -msgid "add another comment" +#: rhodecode/templates/data_table/_dt_elements.html:37 +#: rhodecode/templates/data_table/_dt_elements.html:74 +#: rhodecode/templates/forks/fork.html:9 +msgid "Fork" +msgstr "" + +#: rhodecode/templates/base/base.html:147 +msgid "Create Pull Request" +msgstr "" + +#: rhodecode/templates/base/base.html:153 +msgid "Show Pull Requests" +msgstr "" + +#: rhodecode/templates/base/base.html:153 +msgid "Pull Requests" +msgstr "" + +#: rhodecode/templates/base/base.html:190 +msgid "Not logged in" +msgstr "" + +#: rhodecode/templates/base/base.html:197 +msgid "Login to your account" +msgstr "" + +#: rhodecode/templates/base/base.html:220 +msgid "Forgot password ?" +msgstr "" + +#: rhodecode/templates/base/base.html:243 +msgid "Log Out" +msgstr "" + +#: rhodecode/templates/base/base.html:262 +msgid "Switch repository" +msgstr "" + +#: rhodecode/templates/base/base.html:274 +msgid "Show recent activity" +msgstr "" + +#: rhodecode/templates/base/base.html:275 +#: rhodecode/templates/journal/journal.html:4 +msgid "Journal" +msgstr "" + +#: rhodecode/templates/base/base.html:286 +msgid "Search in repositories" +msgstr "" + +#: rhodecode/templates/base/perms_summary.html:8 +msgid "No permissions defined yet" +msgstr "" + +#: rhodecode/templates/base/perms_summary.html:15 +msgid "Permission" +msgstr "" + +#: rhodecode/templates/base/perms_summary.html:16 +msgid "Edit Permission" msgstr "" #: rhodecode/templates/base/root.html:43 -#: rhodecode/templates/journal/journal.html:83 -#: rhodecode/templates/summary/summary.html:57 -msgid "Stop following this repository" +#, fuzzy +msgid "Add another comment" msgstr "" #: rhodecode/templates/base/root.html:44 -#: rhodecode/templates/summary/summary.html:61 -msgid "Start following this repository" +#: rhodecode/templates/data_table/_dt_elements.html:140 +msgid "Stop following this repository" msgstr "" #: rhodecode/templates/base/root.html:45 +msgid "Start following this repository" +msgstr "" + +#: rhodecode/templates/base/root.html:46 msgid "Group" msgstr "" +#: rhodecode/templates/base/root.html:47 +msgid "members" +msgstr "" + #: rhodecode/templates/base/root.html:48 -msgid "search truncated" +#: rhodecode/templates/pullrequests/pullrequest.html:181 +msgid "Loading ..." msgstr "" #: rhodecode/templates/base/root.html:49 -msgid "no matching files" +msgid "Search truncated" +msgstr "" + +#: rhodecode/templates/base/root.html:50 +msgid "No matching files" msgstr "" #: rhodecode/templates/base/root.html:51 -msgid "Open new pull request for selected changesets" +#: rhodecode/templates/changelog/changelog.html:36 +msgid "Open new pull request" msgstr "" #: rhodecode/templates/base/root.html:52 -msgid "Show selected changes __S -> __E" +msgid "Open new pull request for selected changesets" msgstr "" #: rhodecode/templates/base/root.html:53 +msgid "Show selected changesets __S -> __E" +msgstr "" + +#: rhodecode/templates/base/root.html:54 +msgid "Show selected changeset __S" +msgstr "" + +#: rhodecode/templates/base/root.html:55 msgid "Selection link" msgstr "" +#: rhodecode/templates/base/root.html:56 +#: rhodecode/templates/changeset/diff_block.html:8 +msgid "Collapse diff" +msgstr "" + +#: rhodecode/templates/base/root.html:57 +msgid "Expand diff" +msgstr "" + #: rhodecode/templates/bookmarks/bookmarks.html:5 #, python-format msgid "%s Bookmarks" msgstr "" -#: rhodecode/templates/bookmarks/bookmarks.html:39 +#: rhodecode/templates/bookmarks/bookmarks.html:37 #: rhodecode/templates/bookmarks/bookmarks_data.html:8 -#: rhodecode/templates/branches/branches.html:53 +#: rhodecode/templates/branches/branches.html:50 #: rhodecode/templates/branches/branches_data.html:8 -#: rhodecode/templates/tags/tags.html:54 +#: rhodecode/templates/shortlog/shortlog_data.html:8 +#: rhodecode/templates/tags/tags.html:51 #: rhodecode/templates/tags/tags_data.html:8 msgid "Author" msgstr "" +#: rhodecode/templates/bookmarks/bookmarks.html:38 +#: rhodecode/templates/bookmarks/bookmarks_data.html:9 +#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches_data.html:9 +#: rhodecode/templates/shortlog/shortlog_data.html:5 +#: rhodecode/templates/tags/tags.html:52 +#: rhodecode/templates/tags/tags_data.html:9 +msgid "Revision" +msgstr "" + #: rhodecode/templates/branches/branches.html:5 #, python-format msgid "%s Branches" msgstr "" -#: rhodecode/templates/branches/branches.html:29 +#: rhodecode/templates/branches/branches.html:26 msgid "Compare branches" msgstr "" -#: rhodecode/templates/branches/branches.html:56 +#: rhodecode/templates/branches/branches.html:53 #: 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.html:54 #: rhodecode/templates/tags/tags_data.html:10 msgid "Compare" msgstr "" @@ -3115,115 +3288,80 @@ msgstr "" msgid "%s Changelog" msgstr "" -#: rhodecode/templates/changelog/changelog.html:15 +#: rhodecode/templates/changelog/changelog.html:11 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" msgstr[0] "" msgstr[1] "" -#: rhodecode/templates/changelog/changelog.html:37 +#: rhodecode/templates/changelog/changelog.html:30 msgid "Clear selection" msgstr "" -#: rhodecode/templates/changelog/changelog.html:40 +#: rhodecode/templates/changelog/changelog.html:33 #: rhodecode/templates/forks/forks_data.html:19 #, python-format -msgid "compare fork with %s" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:40 +msgid "Compare fork with %s" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:33 msgid "Compare fork with parent" msgstr "" -#: rhodecode/templates/changelog/changelog.html:49 -msgid "Show" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:74 -#: rhodecode/templates/summary/summary.html:375 -msgid "show more" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:78 -msgid "Affected number of files, click to show more details" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:91 -#: rhodecode/templates/changeset/changeset.html:65 -#: rhodecode/templates/changeset/changeset_file_comment.html:20 -#: rhodecode/templates/changeset/changeset_range.html:46 -msgid "Changeset status" -msgstr "" - -#: 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:104 -msgid "Parent" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:110 -#: rhodecode/templates/changeset/changeset.html:42 -msgid "No parents" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:115 +#: rhodecode/templates/changelog/changelog.html:76 +#: rhodecode/templates/summary/summary.html:404 +msgid "Show more" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:89 +#: rhodecode/templates/changeset/changeset_range.html:86 +#, python-format +msgid "Bookmark %s" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:95 +#: rhodecode/templates/changeset/changeset.html:111 +#: rhodecode/templates/changeset/changeset_range.html:92 +#, python-format +msgid "Tag %s" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:100 #: rhodecode/templates/changeset/changeset.html:106 -#: rhodecode/templates/changeset/changeset_range.html:79 -msgid "merge" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:118 -#: rhodecode/templates/changeset/changeset.html:109 -#: 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 "" - -#: rhodecode/templates/changelog/changelog.html:124 -#: rhodecode/templates/changeset/changeset_range.html:88 -msgid "bookmark" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:130 -#: rhodecode/templates/changeset/changeset.html:114 -#: rhodecode/templates/changeset/changeset_range.html:94 -msgid "tag" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:301 +#: rhodecode/templates/changeset/changeset_range.html:80 +#, python-format +msgid "Branch %s" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:258 msgid "There are no changes yet" msgstr "" #: rhodecode/templates/changelog/changelog_details.html:4 -#: rhodecode/templates/changeset/changeset.html:94 -msgid "removed" +#: rhodecode/templates/changeset/changeset.html:91 +msgid "Removed" msgstr "" #: rhodecode/templates/changelog/changelog_details.html:5 -#: rhodecode/templates/changeset/changeset.html:95 -msgid "changed" +#: rhodecode/templates/changeset/changeset.html:92 +#, fuzzy +msgid "Changed" msgstr "" #: rhodecode/templates/changelog/changelog_details.html:6 -#: rhodecode/templates/changeset/changeset.html:96 -msgid "added" +#: rhodecode/templates/changeset/changeset.html:93 +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:98 -#: rhodecode/templates/changeset/changeset.html:99 -#: rhodecode/templates/changeset/changeset.html:100 +#: rhodecode/templates/changeset/changeset.html:95 +#: rhodecode/templates/changeset/changeset.html:96 +#: rhodecode/templates/changeset/changeset.html:97 #, python-format -msgid "affected %s files" +msgid "Affected %s files" msgstr "" #: rhodecode/templates/changeset/changeset.html:6 @@ -3231,112 +3369,144 @@ msgstr "" msgid "%s Changeset" msgstr "" -#: rhodecode/templates/changeset/changeset.html:14 -msgid "Changeset" -msgstr "" - -#: rhodecode/templates/changeset/changeset.html:52 +#: rhodecode/templates/changeset/changeset.html:39 +msgid "No parents" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:49 msgid "No children" msgstr "" -#: rhodecode/templates/changeset/changeset.html:70 -#: rhodecode/templates/changeset/diff_block.html:20 -msgid "raw diff" -msgstr "" - -#: rhodecode/templates/changeset/changeset.html:71 -msgid "patch diff" -msgstr "" - -#: rhodecode/templates/changeset/changeset.html:72 -#: rhodecode/templates/changeset/diff_block.html:21 -msgid "download diff" -msgstr "" - -#: rhodecode/templates/changeset/changeset.html:76 -#: rhodecode/templates/changeset/changeset_file_comment.html:82 +#: rhodecode/templates/changeset/changeset.html:62 +#: rhodecode/templates/changeset/changeset_file_comment.html:20 +#: rhodecode/templates/changeset/changeset_range.html:44 +msgid "Changeset status" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:67 +#: rhodecode/templates/changeset/diff_block.html:23 +msgid "Raw diff" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:68 +msgid "Patch diff" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:69 +#: rhodecode/templates/changeset/diff_block.html:24 +msgid "Download diff" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:73 +#: rhodecode/templates/changeset/changeset_file_comment.html:97 #, python-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "" msgstr[1] "" -#: rhodecode/templates/changeset/changeset.html:76 -#: rhodecode/templates/changeset/changeset_file_comment.html:82 +#: rhodecode/templates/changeset/changeset.html:73 +#: rhodecode/templates/changeset/changeset_file_comment.html:97 #, python-format msgid "(%d inline)" msgid_plural "(%d inline)" msgstr[0] "" msgstr[1] "" -#: rhodecode/templates/changeset/changeset.html:122 -#: rhodecode/templates/compare/compare_diff.html:44 -#: rhodecode/templates/pullrequests/pullrequest_show.html:76 +#: rhodecode/templates/changeset/changeset.html:103 +#: rhodecode/templates/changeset/changeset_range.html:77 +msgid "merge" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:119 +#: rhodecode/templates/compare/compare_diff.html:40 +#: rhodecode/templates/pullrequests/pullrequest_show.html:113 #, python-format msgid "%s file changed" msgid_plural "%s files changed" msgstr[0] "" msgstr[1] "" -#: rhodecode/templates/changeset/changeset.html:124 -#: rhodecode/templates/compare/compare_diff.html:46 -#: rhodecode/templates/pullrequests/pullrequest_show.html:78 +#: rhodecode/templates/changeset/changeset.html:121 +#: rhodecode/templates/compare/compare_diff.html:42 +#: rhodecode/templates/pullrequests/pullrequest_show.html:115 #, 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..." -msgstr "" - -#: rhodecode/templates/changeset/changeset_file_comment.html:45 -msgid "Commenting on line {1}." -msgstr "" - -#: rhodecode/templates/changeset/changeset_file_comment.html:46 -#: rhodecode/templates/changeset/changeset_file_comment.html:121 +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 +msgid "Showing a huge diff might take some time and resources" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 +msgid "Show full diff" +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:30 #, python-format -msgid "Comments parsed using %s syntax with %s support." -msgstr "" - -#: 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/templates/changeset/changeset_file_comment.html:59 -#: rhodecode/templates/changeset/changeset_file_comment.html:143 -msgid "Comment" +msgid "Status change on pull request #%s" +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:32 +#, python-format +msgid "Comment on pull request #%s" +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:57 +msgid "Submitting..." msgstr "" #: rhodecode/templates/changeset/changeset_file_comment.html:60 -#: rhodecode/templates/changeset/changeset_file_comment.html:71 -msgid "Hide" -msgstr "" - -#: rhodecode/templates/changeset/changeset_file_comment.html:67 +msgid "Commenting on line {1}." +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:61 +#: rhodecode/templates/changeset/changeset_file_comment.html:139 +#, python-format +msgid "Comments parsed using %s syntax with %s support." +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:63 +#: rhodecode/templates/changeset/changeset_file_comment.html:141 +msgid "Use @username inside this text to send notification to this RhodeCode user" +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:74 +#: rhodecode/templates/changeset/changeset_file_comment.html:161 +msgid "Comment" +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:75 +msgid "Cancel" +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:82 msgid "You need to be logged in to comment." msgstr "" -#: rhodecode/templates/changeset/changeset_file_comment.html:67 +#: rhodecode/templates/changeset/changeset_file_comment.html:82 msgid "Login now" msgstr "" -#: rhodecode/templates/changeset/changeset_file_comment.html:118 -msgid "Leave a comment" -msgstr "" - -#: rhodecode/templates/changeset/changeset_file_comment.html:125 -msgid "Check this to change current status of code-review for this changeset" -msgstr "" - -#: rhodecode/templates/changeset/changeset_file_comment.html:125 -msgid "change status" -msgstr "" - -#: rhodecode/templates/changeset/changeset_file_comment.html:145 +#: rhodecode/templates/changeset/changeset_file_comment.html:86 +msgid "Hide" +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:143 +msgid "Change status" +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:163 msgid "Comment and close" msgstr "" @@ -3345,97 +3515,118 @@ msgstr "" msgid "%s Changesets" msgstr "" -#: 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/changeset/changeset_range.html:52 msgid "Files affected" msgstr "" -#: rhodecode/templates/changeset/diff_block.html:19 -msgid "show full diff for this file" -msgstr "" - -#: rhodecode/templates/changeset/diff_block.html:27 -msgid "show inline comments" -msgstr "" - -#: rhodecode/templates/compare/compare_cs.html:5 +#: rhodecode/templates/changeset/diff_block.html:22 +msgid "Show full diff for this file" +msgstr "" + +#: rhodecode/templates/changeset/diff_block.html:30 +msgid "Show inline comments" +msgstr "" + +#: rhodecode/templates/changeset/diff_block.html:55 +msgid "Show file at latest version in this repo" +msgstr "" + +#: rhodecode/templates/changeset/diff_block.html:56 +msgid "Show file at initial version in this repo" +msgstr "" + +#: rhodecode/templates/compare/compare_cs.html:4 msgid "No changesets" msgstr "" -#: rhodecode/templates/compare/compare_diff.html:37 -#: rhodecode/templates/pullrequests/pullrequest_show.html:69 +#: rhodecode/templates/compare/compare_cs.html:32 +msgid "Ancestor" +msgstr "" + +#: rhodecode/templates/compare/compare_diff.html:5 +#, fuzzy, python-format +msgid "%s Compare" +msgstr "" + +#: rhodecode/templates/compare/compare_diff.html:9 +msgid "Compare revisions" +msgstr "" + +#: rhodecode/templates/compare/compare_diff.html:33 +#: rhodecode/templates/pullrequests/pullrequest_show.html:106 #, 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 +#: rhodecode/templates/compare/compare_diff.html:48 +#: rhodecode/templates/pullrequests/pullrequest_show.html:121 msgid "No files" msgstr "" -#: 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 "" - -#: rhodecode/templates/data_table/_dt_elements.html:60 -#: rhodecode/templates/journal/journal.html:89 -#: rhodecode/templates/summary/summary.html:77 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +msgid "confirm to show potentially huge diff" +msgstr "" + +#: rhodecode/templates/data_table/_dt_elements.html:54 +#: rhodecode/templates/summary/summary.html:69 msgid "Mercurial repository" msgstr "" -#: rhodecode/templates/data_table/_dt_elements.html:62 -#: rhodecode/templates/journal/journal.html:91 -#: rhodecode/templates/summary/summary.html:80 +#: rhodecode/templates/data_table/_dt_elements.html:56 +#: rhodecode/templates/summary/summary.html:72 msgid "Git repository" msgstr "" -#: rhodecode/templates/data_table/_dt_elements.html:69 -#: rhodecode/templates/journal/journal.html:97 -#: rhodecode/templates/summary/summary.html:87 -msgid "public repository" -msgstr "" - -#: rhodecode/templates/data_table/_dt_elements.html:80 -#: rhodecode/templates/summary/summary.html:96 -#: rhodecode/templates/summary/summary.html:97 -msgid "Fork of" -msgstr "" - -#: rhodecode/templates/data_table/_dt_elements.html:94 +#: rhodecode/templates/data_table/_dt_elements.html:74 +#, python-format +msgid "Fork of %s" +msgstr "" + +#: rhodecode/templates/data_table/_dt_elements.html:88 msgid "No changesets yet" msgstr "" -#: rhodecode/templates/data_table/_dt_elements.html:101 -#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:95 +#: rhodecode/templates/data_table/_dt_elements.html:97 #, 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 +#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:105 #, python-format msgid "Subscribe to %s atom feed" msgstr "" #: rhodecode/templates/data_table/_dt_elements.html:122 #, python-format +msgid "Confirm to delete this repository: %s" +msgstr "" + +#: rhodecode/templates/data_table/_dt_elements.html:131 +#, python-format msgid "Confirm to delete this user: %s" msgstr "" -#: rhodecode/templates/email_templates/changeset_comment.html:10 -msgid "New status$" +#: rhodecode/templates/email_templates/changeset_comment.html:9 +#: rhodecode/templates/email_templates/pull_request_comment.html:15 +msgid "New status" +msgstr "" + +#: rhodecode/templates/email_templates/changeset_comment.html:11 +#: rhodecode/templates/email_templates/pull_request_comment.html:9 +msgid "View this comment here" +msgstr "" + +#: rhodecode/templates/email_templates/changeset_comment.html:14 +msgid "Repo" +msgstr "" + +#: rhodecode/templates/email_templates/changeset_comment.html:16 +msgid "desc" msgstr "" #: rhodecode/templates/email_templates/main.html:8 @@ -3443,19 +3634,20 @@ msgid "This is a notification from Rhode msgstr "" #: rhodecode/templates/email_templates/password_reset.html:4 -msgid "Hello" +#, python-format +msgid "Hello %s" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:5 +msgid "We received a request to create a new password for your account." 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." +#: rhodecode/templates/email_templates/password_reset.html:11 +msgid "If you did not request new password please ignore this email." msgstr "" #: rhodecode/templates/email_templates/pull_request.html:4 @@ -3466,33 +3658,28 @@ msgid "" msgstr "" #: rhodecode/templates/email_templates/pull_request.html:5 -msgid "title" +msgid "View this pull request here" msgstr "" #: rhodecode/templates/email_templates/pull_request.html:6 -#: rhodecode/templates/pullrequests/pullrequest.html:115 +msgid "title" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:7 msgid "description" msgstr "" -#: rhodecode/templates/email_templates/pull_request.html:11 +#: rhodecode/templates/email_templates/pull_request.html:12 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 +#: rhodecode/templates/email_templates/pull_request_comment.html:3 #, 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" +msgid "Pull request #%s for repository %s" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request_comment.html:13 +msgid "Closing pull request with status" msgstr "" #: rhodecode/templates/email_templates/registration.html:4 @@ -3503,107 +3690,105 @@ msgstr "" msgid "View this user here" msgstr "" -#: rhodecode/templates/errors/error_document.html:46 +#: rhodecode/templates/errors/error_document.html:55 #, python-format msgid "You will be redirected to %s in %s seconds" msgstr "" #: rhodecode/templates/files/file_diff.html:4 -#, python-format -msgid "%s File diff" -msgstr "" - -#: rhodecode/templates/files/file_diff.html:12 +#, fuzzy, python-format +msgid "%s File Diff" +msgstr "" + +#: rhodecode/templates/files/file_diff.html:8 msgid "File diff" msgstr "" #: 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:351 -msgid "files" +#: rhodecode/templates/files/files.html:76 +#, fuzzy, python-format +msgid "%s Files" +msgstr "" + +#: rhodecode/templates/files/files.html:30 +#: rhodecode/templates/files/files_add.html:31 +#: rhodecode/templates/files/files_edit.html:31 +#: rhodecode/templates/shortlog/shortlog_data.html:9 +msgid "Branch" msgstr "" #: rhodecode/templates/files/files_add.html:4 -#: rhodecode/templates/files/files_edit.html:4 -#, python-format -msgid "%s Edit file" +#, fuzzy, python-format +msgid "%s Files Add" msgstr "" #: rhodecode/templates/files/files_add.html:19 -msgid "add file" -msgstr "" - -#: rhodecode/templates/files/files_add.html:40 +msgid "Add file" +msgstr "" + +#: rhodecode/templates/files/files_add.html:38 +#: rhodecode/templates/files/files_browser.html:31 +#: rhodecode/templates/shortlog/shortlog_data.html:78 msgid "Add new file" msgstr "" -#: rhodecode/templates/files/files_add.html:45 +#: rhodecode/templates/files/files_add.html:43 msgid "File Name" msgstr "" -#: rhodecode/templates/files/files_add.html:49 -#: rhodecode/templates/files/files_add.html:58 +#: rhodecode/templates/files/files_add.html:47 +#: rhodecode/templates/files/files_add.html:56 msgid "or" msgstr "" -#: rhodecode/templates/files/files_add.html:49 -#: rhodecode/templates/files/files_add.html:54 +#: rhodecode/templates/files/files_add.html:47 +#: rhodecode/templates/files/files_add.html:52 msgid "Upload file" msgstr "" -#: rhodecode/templates/files/files_add.html:58 +#: rhodecode/templates/files/files_add.html:56 msgid "Create new file" msgstr "" -#: rhodecode/templates/files/files_add.html:63 -#: rhodecode/templates/files/files_edit.html:39 +#: rhodecode/templates/files/files_add.html:61 +#: rhodecode/templates/files/files_edit.html:37 #: rhodecode/templates/files/files_ypjax.html:3 msgid "Location" msgstr "" -#: rhodecode/templates/files/files_add.html:67 +#: rhodecode/templates/files/files_add.html:65 msgid "use / to separate directories" msgstr "" -#: rhodecode/templates/files/files_add.html:77 -#: rhodecode/templates/files/files_edit.html:63 +#: rhodecode/templates/files/files_add.html:75 +#: rhodecode/templates/files/files_edit.html:61 #: rhodecode/templates/shortlog/shortlog_data.html:6 -msgid "commit message" -msgstr "" - -#: rhodecode/templates/files/files_add.html:81 -#: rhodecode/templates/files/files_edit.html:67 +msgid "Commit message" +msgstr "" + +#: rhodecode/templates/files/files_add.html:79 +#: rhodecode/templates/files/files_edit.html:65 msgid "Commit changes" msgstr "" #: rhodecode/templates/files/files_browser.html:13 -msgid "view" +msgid "View" msgstr "" #: rhodecode/templates/files/files_browser.html:14 -msgid "previous revision" +msgid "Previous revision" msgstr "" #: rhodecode/templates/files/files_browser.html:16 -msgid "next revision" +msgid "Next revision" msgstr "" #: rhodecode/templates/files/files_browser.html:23 -msgid "follow current branch" +msgid "Follow current branch" msgstr "" #: rhodecode/templates/files/files_browser.html:27 -msgid "search file list" -msgstr "" - -#: rhodecode/templates/files/files_browser.html:31 -#: rhodecode/templates/shortlog/shortlog_data.html:78 -msgid "add new file" +msgid "Search file list" msgstr "" #: rhodecode/templates/files/files_browser.html:35 @@ -3627,34 +3812,39 @@ msgid "Last modified" msgstr "" #: rhodecode/templates/files/files_browser.html:52 -msgid "Last commiter" +msgid "Last committer" +msgstr "" + +#: rhodecode/templates/files/files_edit.html:4 +#, fuzzy, python-format +msgid "%s Files Edit" msgstr "" #: rhodecode/templates/files/files_edit.html:19 -msgid "edit file" +msgid "Edit file" +msgstr "" + +#: rhodecode/templates/files/files_edit.html:47 +#: rhodecode/templates/files/files_source.html:23 +msgid "Show annotation" +msgstr "" + +#: rhodecode/templates/files/files_edit.html:48 +#: rhodecode/templates/files/files_source.html:25 +#: rhodecode/templates/files/files_source.html:55 +msgid "Show as raw" msgstr "" #: rhodecode/templates/files/files_edit.html:49 -#: rhodecode/templates/files/files_source.html:23 -msgid "show annotation" -msgstr "" - -#: 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 "" - -#: rhodecode/templates/files/files_edit.html:51 #: rhodecode/templates/files/files_source.html:26 -msgid "download as raw" -msgstr "" - -#: rhodecode/templates/files/files_edit.html:54 -msgid "source" -msgstr "" - -#: rhodecode/templates/files/files_edit.html:59 +msgid "Download as raw" +msgstr "" + +#: rhodecode/templates/files/files_edit.html:52 +msgid "Source" +msgstr "" + +#: rhodecode/templates/files/files_edit.html:57 msgid "Editing file" msgstr "" @@ -3663,16 +3853,16 @@ msgid "History" msgstr "" #: rhodecode/templates/files/files_history_box.html:9 -msgid "diff to revision" +msgid "Diff to revision" msgstr "" #: rhodecode/templates/files/files_history_box.html:10 #, fuzzy -msgid "show at revision" +msgid "Show at revision" msgstr "" #: rhodecode/templates/files/files_history_box.html:11 -msgid "show full history" +msgid "Show full history" msgstr "" #: rhodecode/templates/files/files_history_box.html:16 @@ -3687,15 +3877,28 @@ msgid "Load file history" msgstr "" #: rhodecode/templates/files/files_source.html:21 -msgid "show source" -msgstr "" - -#: rhodecode/templates/files/files_source.html:44 +msgid "Show source" +msgstr "" + +#: rhodecode/templates/files/files_source.html:29 +#, python-format +msgid "Edit on branch:%s" +msgstr "" + +#: rhodecode/templates/files/files_source.html:31 +msgid "Edit on branch:?" +msgstr "" + +#: rhodecode/templates/files/files_source.html:31 +msgid "Editing files allowed only when on branch head revision" +msgstr "" + +#: rhodecode/templates/files/files_source.html:46 #, python-format msgid "Binary file (%s)" msgstr "" -#: rhodecode/templates/files/files_source.html:53 +#: rhodecode/templates/files/files_source.html:55 msgid "File is too big to display" msgstr "" @@ -3716,8 +3919,10 @@ msgstr "" msgid "%s Followers" msgstr "" -#: rhodecode/templates/followers/followers.html:13 -msgid "followers" +#: rhodecode/templates/followers/followers.html:9 +#: rhodecode/templates/summary/summary.html:183 +#: rhodecode/templates/summary/summary.html:184 +msgid "Followers" msgstr "" #: rhodecode/templates/followers/followers_data.html:12 @@ -3729,32 +3934,32 @@ msgstr "" msgid "%s Fork" msgstr "" -#: rhodecode/templates/forks/fork.html:31 +#: rhodecode/templates/forks/fork.html:28 msgid "Fork name" msgstr "" -#: rhodecode/templates/forks/fork.html:68 +#: rhodecode/templates/forks/fork.html:65 msgid "Private" msgstr "" -#: rhodecode/templates/forks/fork.html:77 +#: rhodecode/templates/forks/fork.html:74 msgid "Copy permissions" msgstr "" -#: rhodecode/templates/forks/fork.html:81 +#: rhodecode/templates/forks/fork.html:78 msgid "Copy permissions from forked repository" msgstr "" -#: rhodecode/templates/forks/fork.html:86 +#: rhodecode/templates/forks/fork.html:84 msgid "Update after clone" msgstr "" -#: rhodecode/templates/forks/fork.html:90 +#: rhodecode/templates/forks/fork.html:88 msgid "Checkout source after making a clone" msgstr "" -#: rhodecode/templates/forks/fork.html:94 -msgid "fork this repository" +#: rhodecode/templates/forks/fork.html:93 +msgid "Fork this repository" msgstr "" #: rhodecode/templates/forks/forks.html:5 @@ -3762,12 +3967,14 @@ msgstr "" msgid "%s Forks" msgstr "" -#: rhodecode/templates/forks/forks.html:13 -msgid "forks" +#: rhodecode/templates/forks/forks.html:9 +#: rhodecode/templates/summary/summary.html:189 +#: rhodecode/templates/summary/summary.html:190 +msgid "Forks" msgstr "" #: rhodecode/templates/forks/forks_data.html:17 -msgid "forked" +msgid "Forked" msgstr "" #: rhodecode/templates/forks/forks_data.html:42 @@ -3783,44 +3990,27 @@ msgid "RSS journal feed" msgstr "" #: rhodecode/templates/journal/journal.html:32 -#: rhodecode/templates/pullrequests/pullrequest.html:55 msgid "Refresh" msgstr "" #: rhodecode/templates/journal/journal.html:35 #: rhodecode/templates/journal/public_journal.html:24 -msgid "RSS feed" -msgstr "" - -#: rhodecode/templates/journal/journal.html:38 -#: rhodecode/templates/journal/public_journal.html:27 msgid "ATOM feed" msgstr "" -#: rhodecode/templates/journal/journal.html:49 +#: rhodecode/templates/journal/journal.html:51 msgid "Watched" msgstr "" -#: rhodecode/templates/journal/journal.html:54 -msgid "ADD" -msgstr "" - -#: rhodecode/templates/journal/journal.html:77 -msgid "following user" -msgstr "" - -#: rhodecode/templates/journal/journal.html:77 -msgid "user" -msgstr "" - -#: rhodecode/templates/journal/journal.html:110 -msgid "You are not following any users or repositories" -msgstr "" - #: rhodecode/templates/journal/journal_data.html:55 msgid "No entries yet" msgstr "" +#: rhodecode/templates/journal/public_journal.html:4 +#: rhodecode/templates/journal/public_journal.html:21 +msgid "Public Journal" +msgstr "" + #: rhodecode/templates/journal/public_journal.html:13 msgid "ATOM public journal feed" msgstr "" @@ -3829,148 +4019,128 @@ msgstr "" msgid "RSS public journal feed" msgstr "" -#: rhodecode/templates/journal/public_journal.html:21 -msgid "Public Journal" -msgstr "" - #: rhodecode/templates/pullrequests/pullrequest.html:4 -#: rhodecode/templates/pullrequests/pullrequest.html:12 +#: rhodecode/templates/pullrequests/pullrequest.html:8 msgid "New pull request" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:54 -msgid "refresh overview" -msgstr "" - -#: rhodecode/templates/pullrequests/pullrequest.html:66 +#: rhodecode/templates/pullrequests/pullrequest.html:52 msgid "Detailed compare view" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:70 -#: rhodecode/templates/pullrequests/pullrequest_show.html:100 +#: rhodecode/templates/pullrequests/pullrequest.html:56 +#: rhodecode/templates/pullrequests/pullrequest_show.html:137 msgid "Pull request reviewers" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:79 -#: rhodecode/templates/pullrequests/pullrequest_show.html:112 +#: rhodecode/templates/pullrequests/pullrequest.html:65 +#: rhodecode/templates/pullrequests/pullrequest_show.html:149 msgid "owner" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:91 -#: rhodecode/templates/pullrequests/pullrequest_show.html:127 +#: rhodecode/templates/pullrequests/pullrequest.html:77 msgid "Add reviewer to this pull request." msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:97 +#: rhodecode/templates/pullrequests/pullrequest.html:83 msgid "Create new pull request" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:106 +#: rhodecode/templates/pullrequests/pullrequest.html:92 +#: rhodecode/templates/pullrequests/pullrequest_data.html:14 #: rhodecode/templates/pullrequests/pullrequest_show.html:25 -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:33 msgid "Title" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:123 +#: rhodecode/templates/pullrequests/pullrequest.html:109 msgid "Send pull request" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:23 -#, python-format -msgid "Closed %s" -msgstr "" - -#: rhodecode/templates/pullrequests/pullrequest_show.html:23 +#: rhodecode/templates/pullrequests/pullrequest_show.html:4 #, python-format -msgid "with status %s" -msgstr "" - -#: rhodecode/templates/pullrequests/pullrequest_show.html:31 -msgid "Status" -msgstr "" - -#: rhodecode/templates/pullrequests/pullrequest_show.html:36 +msgid "%s Pull Request #%s" +msgstr "" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:35 +msgid "Review status" +msgstr "" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:40 msgid "Pull request status" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:44 +#: rhodecode/templates/pullrequests/pullrequest_show.html:53 msgid "Still not reviewed by" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:48 +#: rhodecode/templates/pullrequests/pullrequest_show.html:57 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" msgstr[0] "" msgstr[1] "" -#: 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" +#: rhodecode/templates/pullrequests/pullrequest_show.html:59 +msgid "Pull request was reviewed by all reviewers" msgstr "" #: rhodecode/templates/pullrequests/pullrequest_show.html:65 +msgid "Origin repository" +msgstr "" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:89 +msgid "Created on" +msgstr "" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:102 msgid "Compare view" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:112 +#: rhodecode/templates/pullrequests/pullrequest_show.html:149 #, fuzzy msgid "reviewer" msgstr "" +#: rhodecode/templates/pullrequests/pullrequest_show.html:164 +msgid "Add or remove reviewer to this pull request." +msgstr "" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:168 +#, fuzzy +msgid "Save changes" +msgstr "" + #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4 -msgid "all pull requests" -msgstr "" - -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:12 -msgid "All pull requests" -msgstr "" - -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:27 -msgid "Closed" +#, python-format +msgid "%s Pull Requests" msgstr "" #: rhodecode/templates/search/search.html:6 -#, python-format -msgid "Search \"%s\" in repository: %s" +msgid "Search repository" msgstr "" #: rhodecode/templates/search/search.html:8 -#, python-format -msgid "Search \"%s\" in all repositories" -msgstr "" - -#: rhodecode/templates/search/search.html:12 -#: rhodecode/templates/search/search.html:32 -#, python-format -msgid "Search in repository: %s" -msgstr "" - -#: rhodecode/templates/search/search.html:14 -#: rhodecode/templates/search/search.html:34 +#: rhodecode/templates/search/search.html:16 msgid "Search in all repositories" msgstr "" -#: rhodecode/templates/search/search.html:48 +#: rhodecode/templates/search/search.html:50 msgid "Search term" msgstr "" -#: rhodecode/templates/search/search.html:60 +#: rhodecode/templates/search/search.html:62 msgid "Search in" msgstr "" -#: rhodecode/templates/search/search.html:63 -msgid "File contents" -msgstr "" - -#: rhodecode/templates/search/search.html:64 -msgid "Commit messages" -msgstr "" - #: rhodecode/templates/search/search.html:65 +msgid "File contents" +msgstr "" + +#: rhodecode/templates/search/search.html:66 +msgid "Commit messages" +msgstr "" + +#: rhodecode/templates/search/search.html:67 msgid "File names" msgstr "" @@ -3980,39 +4150,23 @@ msgstr "" msgid "Permission denied" msgstr "" -#: rhodecode/templates/settings/repo_settings.html:5 -#, python-format -msgid "%s Settings" -msgstr "" - -#: rhodecode/templates/settings/repo_settings.html:102 -msgid "Delete repository" -msgstr "" - -#: rhodecode/templates/settings/repo_settings.html:109 -msgid "Remove repo" -msgstr "" - #: rhodecode/templates/shortlog/shortlog.html:5 -#, python-format -msgid "%s Shortlog" -msgstr "" - +#, fuzzy, python-format +msgid "%s Lightweight Changelog" +msgstr "" + +#: rhodecode/templates/shortlog/shortlog.html:11 #: rhodecode/templates/shortlog/shortlog.html:15 -#: rhodecode/templates/shortlog/shortlog.html:19 -msgid "shortlog" -msgstr "" - -#: rhodecode/templates/shortlog/shortlog_data.html:5 -msgid "revision" +msgid "Lightweight Changelog" msgstr "" #: rhodecode/templates/shortlog/shortlog_data.html:7 -msgid "age" -msgstr "" - -#: rhodecode/templates/shortlog/shortlog_data.html:8 -msgid "author" +msgid "Age" +msgstr "" + +#: rhodecode/templates/shortlog/shortlog_data.html:20 +#, python-format +msgid "Click to open associated pull request #%s" msgstr "" #: rhodecode/templates/shortlog/shortlog_data.html:75 @@ -4032,156 +4186,165 @@ msgstr "" msgid "%s Summary" msgstr "" -#: rhodecode/templates/summary/summary.html:12 -msgid "summary" -msgstr "" - -#: rhodecode/templates/summary/summary.html:20 +#: rhodecode/templates/summary/summary.html:16 #, python-format -msgid "repo %s ATOM feed" -msgstr "" - -#: rhodecode/templates/summary/summary.html:21 +msgid "%s ATOM feed" +msgstr "" + +#: rhodecode/templates/summary/summary.html:17 #, python-format -msgid "repo %s RSS feed" -msgstr "" - -#: rhodecode/templates/summary/summary.html:49 -#: rhodecode/templates/summary/summary.html:52 -msgid "ATOM" -msgstr "" - -#: rhodecode/templates/summary/summary.html:70 +msgid "%s RSS feed" +msgstr "" + +#: rhodecode/templates/summary/summary.html:62 #, python-format msgid "Repository locked by %s" msgstr "" -#: rhodecode/templates/summary/summary.html:72 +#: rhodecode/templates/summary/summary.html:64 msgid "Repository unlocked" msgstr "" -#: rhodecode/templates/summary/summary.html:91 +#: rhodecode/templates/summary/summary.html:83 #, python-format msgid "Non changable ID %s" msgstr "" +#: rhodecode/templates/summary/summary.html:88 +msgid "Public" +msgstr "" + +#: rhodecode/templates/summary/summary.html:88 +#: rhodecode/templates/summary/summary.html:89 +msgid "Fork of" +msgstr "" + #: rhodecode/templates/summary/summary.html:96 -msgid "public" -msgstr "" - -#: rhodecode/templates/summary/summary.html:104 -msgid "remote clone" -msgstr "" - -#: rhodecode/templates/summary/summary.html:125 +msgid "Remote clone" +msgstr "" + +#: rhodecode/templates/summary/summary.html:117 msgid "Contact" msgstr "" -#: rhodecode/templates/summary/summary.html:139 +#: rhodecode/templates/summary/summary.html:131 msgid "Clone url" msgstr "" -#: rhodecode/templates/summary/summary.html:142 +#: rhodecode/templates/summary/summary.html:136 msgid "Show by Name" msgstr "" +#: rhodecode/templates/summary/summary.html:137 +msgid "Show by ID" +msgstr "" + #: rhodecode/templates/summary/summary.html:143 -msgid "Show by ID" +msgid "Trending files" msgstr "" #: rhodecode/templates/summary/summary.html:151 -msgid "Trending files" +#: rhodecode/templates/summary/summary.html:167 +#: rhodecode/templates/summary/summary.html:232 +msgid "enable" msgstr "" #: 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:167 msgid "Download" msgstr "" +#: rhodecode/templates/summary/summary.html:163 +msgid "There are no downloads yet" +msgstr "" + +#: rhodecode/templates/summary/summary.html:165 +msgid "Downloads are disabled for this repository" +msgstr "" + #: rhodecode/templates/summary/summary.html:171 -msgid "There are no downloads yet" -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 +#: rhodecode/templates/summary/summary.html:174 msgid "Check this to download archive with subrepos" msgstr "" -#: rhodecode/templates/summary/summary.html:182 +#: rhodecode/templates/summary/summary.html:174 msgid "with subrepos" msgstr "" -#: rhodecode/templates/summary/summary.html:195 +#: rhodecode/templates/summary/summary.html:197 +msgid "Repository Size" +msgstr "" + +#: rhodecode/templates/summary/summary.html:204 +#: rhodecode/templates/summary/summary.html:206 +msgid "Feed" +msgstr "" + +#: rhodecode/templates/summary/summary.html:224 msgid "Commit activity by day / author" msgstr "" -#: rhodecode/templates/summary/summary.html:206 +#: rhodecode/templates/summary/summary.html:235 msgid "Stats gathered: " msgstr "" -#: rhodecode/templates/summary/summary.html:227 -msgid "Shortlog" -msgstr "" - -#: rhodecode/templates/summary/summary.html:229 +#: rhodecode/templates/summary/summary.html:256 +msgid "Latest changes" +msgstr "" + +#: rhodecode/templates/summary/summary.html:258 msgid "Quick start" msgstr "" -#: rhodecode/templates/summary/summary.html:243 +#: rhodecode/templates/summary/summary.html:272 #, python-format msgid "Readme file at revision '%s'" msgstr "" -#: rhodecode/templates/summary/summary.html:246 +#: rhodecode/templates/summary/summary.html:275 msgid "Permalink to this readme" msgstr "" -#: rhodecode/templates/summary/summary.html:304 +#: rhodecode/templates/summary/summary.html:333 #, python-format msgid "Download %s as %s" msgstr "" -#: rhodecode/templates/summary/summary.html:661 +#: rhodecode/templates/summary/summary.html:380 +msgid "files" +msgstr "" + +#: rhodecode/templates/summary/summary.html:690 msgid "commits" msgstr "" -#: rhodecode/templates/summary/summary.html:662 +#: rhodecode/templates/summary/summary.html:691 msgid "files added" msgstr "" -#: rhodecode/templates/summary/summary.html:663 +#: rhodecode/templates/summary/summary.html:692 msgid "files changed" msgstr "" -#: rhodecode/templates/summary/summary.html:664 +#: rhodecode/templates/summary/summary.html:693 msgid "files removed" msgstr "" -#: rhodecode/templates/summary/summary.html:667 +#: rhodecode/templates/summary/summary.html:695 msgid "commit" msgstr "" -#: rhodecode/templates/summary/summary.html:668 +#: rhodecode/templates/summary/summary.html:696 msgid "file added" msgstr "" -#: rhodecode/templates/summary/summary.html:669 +#: rhodecode/templates/summary/summary.html:697 msgid "file changed" msgstr "" -#: rhodecode/templates/summary/summary.html:670 +#: rhodecode/templates/summary/summary.html:698 msgid "file removed" msgstr "" @@ -4190,23 +4353,7 @@ msgstr "" msgid "%s Tags" msgstr "" -#: rhodecode/templates/tags/tags.html:29 +#: rhodecode/templates/tags/tags.html:26 msgid "Compare tags" msgstr "" -#~ msgid "" -#~ "%s repository is not mapped to db" -#~ " perhaps it was created or renamed" -#~ " from the file system please run " -#~ "the application again in order to " -#~ "rescan repositories" -#~ msgstr "" - -#~ 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 "" - diff --git a/rhodecode/i18n/fr/LC_MESSAGES/rhodecode.mo b/rhodecode/i18n/fr/LC_MESSAGES/rhodecode.mo index 0733cb32b08905fcf38dcd34249aa8a876ca8257..505f67c600c87c21239d68ec0b3b3297fc2a2d7c GIT binary patch literal 46039 zc%03B33we>b^kzEQ}#fitkZyqomkInoLDA~Wl6T>NU|)+Hi>cU(R=fxvEQ3{o_SBU zoXsJd?Icc|g)DZ0v)kFcB!oi4@OPt#j;*U=|z;jjnbWz{ywGq zD18H^pQQ9nl>P~&Z>98aD18g1|3c|IDE*D*zhesOwNiQ_r35OkJ458J*;U! z>FarX{oYCGt0}#O($`S>@hKQ*zxMaXTK*@LzKYVPwf#4yVEi9Y%1e8J(l=82x~ZuD zZc1;Z^aGT>ozl-tMfo=_lutPo2%)MX_j?5&zI6UJReGFN!A`pTPXeF zG_?C?N@r2}_EyWvQM!!MMU;-WqQ56K{~ua0|C4f9@7x^bzl73PP}-lv`d8)vpV1uP z7-;#WIl%EsZNDoAcz;~`IY8+2S?KrGvn}g`l%6sh zaPFIp^?S3i-Wz5EuRb{&@cO!@&&|g8znYElUoi)G@wPdb-&u38p58gA@6G{y#x=cs zj>2IM;InrQ;C0U&@P$X_06#vZ?LRvQ^ZFX4XHoh~Z8z_9)L(cy;Mj9I_Wk_R0mtg; zn8!u>eY4iP^K{Jf(CMJZ&!3KU{Ill&O4HZP#k}4<7xVofrDyQI&ILYhoC|u~G#B+R znF~C;ZZ5{VdoKEYXfEdYyY{w^_(qA+cBVtk|F5%vPcK^lIK6%W z=;VD1z#nHXz&uuIIDXPUn9Z0z&9 z&ITN3oDF!*ryZ)wN6@7Dao zTK}nb?Bk!eV}GA%2fY8f9rJun`+uPwc=O6dX#c)NXg^~S`kl83<1AeSxDPJE{6`j{ zznYd`wFvy<1}(o&+dsAl`}5Qy!0G8l81Emo-EXv?6FboVyE`!786BA4=^cR2q7KY& zSqJ)G(*Zf)bzr_bIsoq*wB3G62{o-xbUK@_jQ5)6}zyW>$`wQH+QN0q;!Dk zt_yJc&o030#KlPeU@^v-vKaEOZ86sWk;RaUWlG;e>F&kQj}9)zeE)ti;Q0Jv!0E&# zpv!kGQU0+6^Io(B{q-%ueAg|(c$=4CzB`rxKX)y`d>_*C$Cdz&Ut9ut^2;TF_w1#p zw{R)oxpXP!w_+*A3zlO27c9m6KDrce``A*<`|wiC8~b)eH}+=_rNpAG`@6wUzSoU@PgsU=-?a?=O<#ugJ<9<9QT@JP8Rm7% zGQj7^GR$vc8Svm+%b<7s`!dM&cbGnbK70=FEjS0`-g^$leUj25rC&VA5bOE)AmqvC29@s&VIK2_(C^?7@VGRD^6grF&k*qI zGecP4*M~qSKc@7Plzw0(=KCE=NtLo*whH~VtpffHuEKmjx(fJvA-n_-;d7&-ThSC|62Qf_ZsNM zCsRtQmes!ocI!23un&K!-_KD>BFH-JBf#UzN1&(erIbt>>sucIUw*?{@QcN3vA$?6 z^tM~qqQ8l?psVk!1>K!=KHAMYAMo6CKJfT@N{QuIN6rWT_|5r%<7?MpKi|I&?K{?i z&b@Vj*NyA2U;EbqKfbt5?JzBWPQU+W9p?Au_1M?Bns%xrQUyuIoTMxKB zz8-M>^m@?GXV-(y{&YR~-nZ9dAD&&0ef#lx%=bSv|2+=swK%}rX%6scrUQI9OY_%j zJ=eiFB?tX&*7R}*^VzNKZ*j1Wdo(@lU|yedz;B+>?`Iv%<3AkW<*&5=R}Le6(=g!v zu3??$FzQbm#&~mvF~2sge>SBrr*xT?_YSKcXBcoR4g>#c+U^SNcjqwHv0KNxa~S-6 zzm|Vq>wjq&@czm$^sBFG{nzJ#&u^!61Er_uG5)?h+TEWA93ImAPf@z#Wdsk+?{=}j zt6l7O$pxIQb}|3GT7J;Q{J-FWzkS_Rf0K*(zp9A-PSW%bi&*#cBKliUMEm9Xy-vR? zMZj-c5&L&_5#!#X?H| zZWR5za}@LbfPT*$RXbo5e7t`Y@Gof^jRJmKM}Y_1wEgx`z~Samz~$jl*j-;5#X4T= zfnUDc1HJWlsK3dB9N6x`K7Y!?dVkh=MrqL2BOwfs^a^me5W_}=ORevkN|yHEI__s{x(@ArMo=SM#H z?Rx^q!QlXOu{(hMe;@!np9!$v&j*0p%PN@P`znCTX%)<8Ii)vInyhEp3`)Gi1jQD0r!5*-xFdU`$LTXc!>FZS<8P& z=_lfFHXez~{aQdc&g;=;jL%@ah{8;PhMse(>HZY*JkY7X`9vGyBYhsax?I(yczoNzRl`a+5$Mfbqnyw-h%qG zwxE337RbXPEw63?y}gU|nw<2OQr%j`^QDj(u7<4tYE@j(J}* zj{U!J9P__>9CGZ4w)^Hd@ZzUh{;P551+UwR{a!}trIe0t#XNqz74v`p1(?tL3$QOk z7XWToUI4t^eF5n26BmHKetrSg_l66hpV=3Jp1UsuzuI{r@ap~xp;C#YG z;4`neNa^?@%;U_9Fz^10pa-qL2yokV5%BMxivXvGF9O^?cM<0OrHcUn?@{XWx-|dX zi;;#GW8AAR2HsqMG4}EE7o(rAT&#M@#i0A=E(Sb*s`XxR3HI?#m!RIPOHjV}67aQ; zTmn7)z$MtHpI?G;UbsZ<_ifmhwr!xBrQ0x{bGHF+&)I-=iCZNq;58Kt`!zLx^OZ@(1#{kcoQS6{dk{Q8`a0xz!kD8{>oQerjM zqaOu7wl71!!r;4-Z1tCxX3zpv>FmqAZ>`>lP*{L>T;AX zxg790U%xAt1FlzTddKCEV~<@9JbLnhCW72DD8Teqv7yj}eQ+X1(;wxeFVrYp8%JZC%R zJ+>Y5-LoBV`NVeU^Ap>#AOF1_^!R%_(EgMi80U-~s$cJb{2JJy_SO#I!?imw&OKt#R|DRMuSP$gx*GHNlBQqRdf&eq>zQ&5^oIUx0Pjn$0p4A64e(~) zHJHc4*FaDE!ZpCpA6x_b<%DZNpRLz|o@Z$~kJ9y&F1!|e>n=?XY5F-$pS~9Ir|h)4s>zpby)x2 z>oDH~*Fkp=e}UJpLqaXsdF`SswBH(n3^^YHb6-zTmIKK$MF*vEgp z9^)`m;r)L7ZmetSZs;iscB6fHH`Y0}8+z2;yV2hlcLT0J(e`h@0prfT0sGo>1N5Gu z8vvhuH$Xmo@dk|Z!y5pnU)}&Xz2`>EYyOSs@0=U4pCdN{PM6#WezN;U;O+h!fmdJA z^i?;Z{=%Dp-ygmSbY8m&`0xoW|2n0gru1KK0=yo$8F=!9rhk1i=Jou|z~^^-jC2`F zPo}h&(rq7uUi0+Fu->=dLcE328Mk0xKY0uA^O;+)U*EX}^L|eAe{&1gdE%`Y=bg8r z{6n{5euI<}%3B-t`#*10ed0ES^KHs+Z`1SE+c56(+pu5WZP=IaHjK0PHqhb2n*W*G zz~6s#8{qV&+x5KucJP@tO*h@H`pxao`#z)jKfWDs`NKU}-)VaQ$20bTju-C%T@CHg z^RYeHzx*ETTWyc}+xEatxPK4$^d1hMa1-8}J>x8~pjayP+?xzgzXYyRnYlnttqVz;n;t&=a1x z8}ohbJ*t=91Gq1|NA>V~fKL_u-gyu9{jPfe&u?nG*WZhMc>lfN)2H8y^<8)`@b<2I zp|^eNUi3HRKKSbv-G}|yeIM|6;y$eNZ|;MB@|OESw?mXZN$E}Z17B7=0Jxq10Oot~ z0~qg?2LR_MAHaNn^Z@$(^#hp4TlNDkr|t)zJbgd*du%`EzjZ(M=bHVhZ|w)1|7<_> z;}`a09diy~oO=%7`)Nwa#Iw$N5c~e%!$JPdd~^DyxG9ghJ2&Uggp43|6t`upJ{z>9x<1bWn49z{CuQOtAw zqZ)6b`FA}EJoxgXfZq=^{gu{x+d;M84gxM~4}yOL2Qkk}4yxbvAo_XYAok;#gP@n6 zAB2C(Is|y1a0var;Slik1BU?L(+)un%{~OYU3>_9qjU)C+Ik3hd-);ommP-y&zrUV zpKAKdAnE}`wnA%BZslRiw>jT+Yjrx ztEPt!V}74MtmmAEv7Ud_`v0Qe|DowGwcX2)03L5XqHzmHkbknKGml{23y-KBtm(N& zFn{L=;JD!k@VIsa@VWMg`XRO6Jx9PtAJ+1p9RZ*JFG{yEeLe>Ix$`mf_t0Zl#}kjC z{$EgP*^XbZTOzw0gs#=%OtV|)bJ%V<*KS$b*3#S7GH6jwJ}8%6ziRx9_;*F-)? zgIXA;l2P{jTGdT|Av5r+qsb4+3f(c!-Ry?uZz+h}eBc+-Uy?cQI$@krM#R%Ex^97g zE((H;WhdMy`HMow&yTwDyJOVxN8C~{l72*PHS;0$76+wLfZ_Qg+!&{lu_O#?6}!`k zMu!6@lo1DOWg2jte-1e#Qp*_$BmrdOuUd692-9CulK_dP{KLacOP=o%l>Mr^MdpW{ zi3l*2Ao8j~IBt89?FUu6>{Kdl!L9~&Vc4#?;iyxIY_Do>b|O0;x=xh}gOD2fPMLld z!=P+eM_s$KBy5Aw&!_%l8m`ld!fMp*-oisyCoO6DH#N!QJQ$!Ee{iFahC6H zmc`2lL8ewI1x^9*unS)3=BuS~d(3m}fzhDgcF=!PH3hwX0!0}n)lu4vN{t2&-Ay$& zs^+8$m1LJ7xwQxrq0Mm1j#pyzpqfTD&v2A*m_CVQ@Hg$EB>$y&%^%(Uwo@q3)NJK2IHZ!zGvJnRm@>)c_Wsi1%H|v;n8QX-IL$@4MUAq+Ij{$LGT}9$$oOLw7 z6Em!GT8}O-0w1JlK+8JD%%omKoIF2zJk@JHEp{Wo6ZqrhpcX0eTJ4oe7>qIESA#PB zA%;3kGDo;1HJ}RM!0ltSAr7NDI74JDY9H*f7BL^}?6VemzQbT5o?uUDiKbeqNJ;2! zQOzq=85&Hgk=;r#A~q8ErE#l+>45(F%%C0G(GjIOATV*}3K1!BF|8tq!pQNtK3^b_AH895cdf-x(3E@u|3W**DV!!1V?yBhZ|PCB6D+>WSpDl9z@jH z!DgSB7h!JQ{^sHe+?nl+IaP;}s+G!4m6gm&G7`y3C2I0ZL{yPDcEQMFTC7Dz2Ft2y z5ZJ@shzLxPU9~FBt~iY;i`a6pNIT`%M9z6prR0ob;#_ikJ>_ya%MkMd4fMf%5;#N* zFbL((gqXfCN41tB9y-t`NN&e{BeYZNdiW^&h`LjYp<$0ike_tLV6Zw=@zYcQo97|p9Ii>@h|+Sw%!_hyew6%Rgr_Oe zW`gb5(KzAv7J!*QYn2ME87+wjSZ0lR)p2`xoHa{(daOEWc^(@Xf0l{%9sOp~ic@*l<$i2!J0dvY_%>=1dMb- zJdS}_88?MsLk1?vTj*x=u@2F5Q_ar!&h8TOGrDU>tRoZB>-xI;>1RX&1gzca?CNdr z>$Fmhzmu3EWK)iRyH=-LbZR6G%*i*&BVDr~gGDtFS4EoKcv6uy%7m3e9jy>jPfM6n zG|k>jGm1uq0$JRYd1yuxN}_z|RYY)hx+*f*CK9Q^In<#TZYkz>dJ&62T2J7gQng1N z+GAo34peOWY|6*L$qzAQ*w#vO=yR)ANxq?e7PMzsNB2xqISKqTCsfC=Ab z1O65Ti+?c#kzF=FqFCb<0Zd>b4or{)`P-u`nPc!;T|7Mg##(ds%Z};sP_G7~bY+mX|iXkbU6T1+qo_ruv1u$x{_|Z>;?i+GwQa&wbvZWIEd={B4Q%EbB z>M_>|iR4M~VgV%9Eh;!RakZM;tRjiKk-FN26zf@)aR?XOQan~P%2JfHJePL6xxFIN zW0JxMvNy{?y0-9gGs^VYlvxdR=*U_OLQA=(SaJ=yg3gPb5(&}8ZdIsN3dgL)taSE~ zv5sHj1Yl7rU!v~FFE3SeQk@7zZ0V!E{v~~-DAJxjL(&Pf_xPtlimB&galnd>Vn7{! z*sGbV7^LRZ>EX6$X3AZtrxDTuE2I%^4#EQQ70nS1Gn>6p{(u$HvW8vpNJKoz>UhO9 zRA;H@%R=~9P(+&H?Qq#FW}!hmeMy$9EGY%UPATKq{8rsQkq%;^IfVPvBGcH)3 zXK%m~;wsF=Pch}LaEVh)jXXB$n^kAFJV|9DU;MRCZkZy~ypESSH9DE7oSFW(?J^cd zS}QhS@FftzPX*M{_JK}o>CjNWs8Fn}>1wI3QrTMS(vCAnU&`!ZDRs=iSsG9`{70ym zez6=}8W06^bHCJwS7A{~CPsIjrCoQCx05!#V8cFv_9-Gb-eL7Kku^jVY-m|ItJ^2V zg^HYvUxGFpN|3s(43`zNH)eOPh?|mItP)X$%;f}ONXk0H++jY|@|AhAcFhi~U^ogy z!Q#5yE@=bSDOBoJd2Te0$Le^ajPHgHW^$=1L<+5>(tF-iF_m@kY1LS3pJubxO+W|F zONvIT)ykA;>hx&LKTUs&k{@@Vb~3@2DRGDZwW$^ePr_^`*9w=Zy?&1CR>aa21}UHn z1Z~rR>B&S9@n~7i?e_RkvTTu)A9>h8a^JGpTM@(AkTm1u)7n5vr)rzYO@|0BP zw0ayc^+XxyacHhE3-MccWAe*jjgmKzX_q(JL6*qu`Li4lt0v)W^>`zr)y*#dHT=(J zZr;cR;PO!4L=qB&NJEJA9I~;ZDqFIeiJ$8EiGSE-(q5T&hHlAW|0rQ$6-uL&FoCLn z!OrD?rDWzM%{L2SWwZyTGUg0!A!oOX@hh`VoHr2KOunQNgw<(EL_%qz{cWmwAwxqo zik@J^?)Eid^lORaV|lGADf2?LPYA9KJN=Dp!XPu77GP|XeEY#>{Y8DllcA2|UdOMI zwlr?qPw-nd(N%Nya#F`dP^w^S;y2aZ5?6WJJ$obSU1#i;5!Nrtin^u~k34TJwWm@? zG!D|c`Abb5RlVcZ1g~CY{Jn0-#udpjQbb%IoGHyTL|!kM0j)#M2=ANK>y=%WsaEf} z9edU3XJ4QWBXl#K0xoNt@u#5~Nd}xHeO;@%1}veYK4SlFM$zsQ8;vw2Rm}Pf0g?G& z3}w?2sNGj@%Jl^{6dd{yJGjSP$&Y;l=}%%>Rp>uy9{YeYUrBQ)T>Mi+11somAue_O zd^ip>OTOg9CN5+O6#=Zj*?VV?5CJNMQMPY_*A_z4#t_#ssn8`}S%}~`%TbPxd5X^6 z-N~EZ#~vrzE8$4)W?34c8||y6X5Z$H_6gq=$6r7KdCVuP_|9v#5(WW!Gu#}@!C5DU^-{1ON|meDQ;C^geP%*nb@@;zy8FlG zute^zteTrHg;WEpKXi-U7D~J^_Ht<2C>ccXvtZP-ql(L@MQSRm)*c_HIdZVY&R8-q zoZ)~bAB3boG;}#`_2Y0MR#y76XASz9sXvJqD>)JAulK*!XNboZSlyz2?Mdr2DOKsl z%)LshRp&A7QqG<&s$oO@_;fpyt#0xD3|Hl^SpRKY7YRb9P=^J;9&OH zlrx$grw+KSK!yZG23YP42!2B2a177XDJ{_{R9K|Nj#4^8XvivIZ0RLAJSmaY0*T}t z6`y2=fM<_k8OPVEEP}PMT^N6Oq-1WP6n<^`QFbb(8j|61R4USwx!8b!Rgy6`dxWfc z0{yx}FD{#zNO`DAPmGCRt6p zip!exB&#$tMv2o6yRNVbBU?i@*r}53Kuo9@pt18rkMQfN71DZj?f|o5Besk;$C7bS zmrUST{syyA7NwdISVLZdQKD(bd@C*`yP_1uryfyio_j@mJ=vVqFc@EN7fa3vgGbDI z0tF948jk#Jc07TC^0>*~I4A3Qss>hK*Tp{~0rOZiHIAnMB-r=Cx>NRuEri3$INKbM z^V#Ee5jCqmsf#FOjO{7;24=pfD=L-j!NDE@IGar#JgDmR&Dq^WDJF=@AmT%aTUUwC z+2S{Xe{{}_xovD6u(9A)s!Rmd;86R((7K_XK^BW*j~ll3;L1fq16^I#Ai+ldr2aM7 z_L{I0Dfy+gkAX>ARM*xffl;R4q6Erm7`!wMr$v0Ys7-VBYQ}YqHYnlzlZ+5{TSG%6 zz0C!U>S4&Z8W%c}hf~gt^ywGmPgXk~bgPDu#-H(=)k{&wa0f@pPUSzcY_e&GJ=QS{ zqogHjT|i7k>X3TU-I@Fp14}+)F-<*J+2UhQ7|+x*VtukTON5AoxJRkTtCCaq#446E z7b!Gt801t8HO}_(fuC_0%PvZ_RCzl}EwX;(lv$5}_ovk*=)7DRYBCW^R0TB!};VG@dnBaq|RQYmoIT z0tz$dCebk{mxHgkMl0vV3@QD2>~k`%8`&d{_&E!8pKZ2e)FMR|yLABzn?VU4(FhT- z3kg*yH>ezS&f_JoI4)-A2w|to$5zz2GZM8~gSBBfkhh0xBl=NQ#}j?AFL2m}1BVcc zowTf0)|Z4)6c?ldKXI8A)B%(!j6J_u`Z8;%Lf&Aa#=)3_B-t`Xs5J=ZakpO#1R46B z{6+~I7#cX&lEBR&CJP)84vpeS&xRk#Nn(j4X2!KU`Vv1|#K^(kKD!mb<-?g#9K^)c z)ArR-rq#%1{!A7a<2tSXWajPM;A9!ucdMJ3iwLq$8TP8t)MPl8*y`vG5zAAwXSB|q z#lGh%$t|fJPL+OQ8I>3Fo6D&K_+zUskjeg1W zh2Wl{v=7%8e-R@opC;FQG6TVCIe6Do4LZw z+-7<;<9^G`OI37gU?AtXa_V33fvg`(}oh zxj56#BmRvLPZ0&->L~!2>g?bV! zdrqGFK4a95qWCslI31-;&;-#rnt4*kthvowJQp$$4(w6+3bYw zDKB&89f#${$0#}KVAxu1Fm_&veuu6K1dcn3c(@vS8dkHhZJkRv!zT3zp;{qTTlUQ504hi<0eHd@hFvJm;F=mO6}LTwG$C%7!iS)q=W$Po5+TIv zqf@DXCvg(Xm4o^Yf_wA zAuN-?s4^{%#Ue55Y!kHESHD&fO(YCedVk*s!f*fA4Uu{}L3X|DQ%d&z*`G{2I7rr2l zVrxw=<7nWowbn>vbzyCTFrgA`3Ks_cG0PJo_srNW)PmKOx#P4}&dRbi5&5|GSedcQ z!zdJ5Ujr2_+g{bSY$if_vw4+^#;+}XjEDb%f z06U9Aa4aJZ$5P#zWW8V$3;M*7B?>{#V$Nd0b#1{5#3yq23H?Jqz*F%NS$c|{)QvKg zqolT1AKjGXB%aqeL-?2IGO<>-0YNF7EpJGetg*(o z4~TM!669`+RcSn1tWzg9$&p!6f{u73iMha%tc+hOrX}N->UX@0EWvRh$BNk3$u8+g zol-3YJCOS)c8d{$eALp&Vt0)k&0Bo=Wjd5qLKh#4)gK0Y?$+8}Xk7)TVw=HOXXa++ zPCt>455j6|Z#3c+S{KzuqSm3H&F<=L@9tUH-q|_OH8^-;|MH>M4n4DJ<$Dj&sU8PowGNSD z6O~w~wArgzMIip$SsQc7-2KoPz84ncJLkLA1=PqNsga0m9dey=8!;FALp?nUOI|Jr zM;4seU#f*psdX_4->A*@EAkngHEX_&pJz?+?FIJCsVDY!_jaY=n3j+I)w62VV(Xb{J)U^c4O_eXe8BY3W}i9iRZm=^Iv~Muyv<%D2KS8I zyxiOqE%8X$EX_(az9~Jur98dmTzg_)v%B1m7rJ$ya=UtiUgF*mU*aBhYp5wdj&`rx z%cLRP?6olSVO;BWjh~Y3`1l)Hi%YdFx|SBWYuQPIulN?8ej;quBUz{!>5Z_u@3=)0 z=$w3q8;zfFc9ZMg0}}_LT6yAt)?l}x{_HN5dImpn;=q+N1siEJ(Kl>^_O zIKV_rb96Wab(m#>m_!o?xJ8~CQ$l(l2`|D6`pswWZV9z=_A0kV%*Nfy`$@Y%lP%Hc zrnO&T#RkXje92HQR%5PYQT4Yo5`9?fZ!XG+#bqLDXzqC%$A3m}hjbXSdyNcCIipvl0?wg3fb%t*C$#4_0M& zSsltH^-C#=I1NCUWNkf+NKhx9dg!TrEzwi^p88`#6ySychEf`w_uOchV}y*M!Oorf zHaV+3Yr~r~%lMNmrG1EGGx*$?{u@57>+Vbxv0hXZpvSR+gw$-*GwQQPlwg;@hW5uv zqL*l8Rldhia4R+TWx926W5=A!cfWWKBxFt}Ik>&17~Y>L0L&W>w8 zTwhH;(46)HG=FIwM5Y(u*j<1!6QpwDd&FcSSNU?t@$?{v$|>jwS&j#KVqlEa!UPwy z=nPh!62mdO1kVX769>@cae*(b&afxuM-omb;@GP$2n!{ICXple$=dVziT#n@IC62} zzcxm6ZR5^=M?n2Wm4In1?}7*D(VN`%xxV%7y^%Mh-RxuZ?ut301aiKl#!Z5cpFbJBWw3 zRu1$Cuy9&sek>-urXK&d-$D?>Nq_U1chx2|Ph$wU7%P_9Ugm%Quz(9f1i5UsD&&6*wM(}!q;-!Ik zGPU?kg|wUa-GngtkyXu%T=)Z5!5)Lh%kgM^R$@G;=gSQzk@2d8wy_R+e61!^hlvwW z)7CL&NMke&!TFSlrcCRpeP82E)yyRO(BsCctoQQ%W}B z#f{^Tu*x&<2pjj`(0(JYny4u}_+U^QC8pG@Hw`~yQw=O7qd>a#fNr{qI&ojW5P3af zi=4~x>_buLzBi!?1X+i)02nICyAwlfpwocV$uK)o)r=^Jp+R&$5-PPvsdbNMDa>ml zO!lmt5a~~r&%p=ONzCen*YIfu@ptxm=y8JCKsbE-P=#zjY~)VkkE$Vu1hJ-Nlq(zV znL?1S2@`}qIT#bqG2XQ3NVy8nhab2oF*bBFM=r2aQdAK3j5w@>RGgTVk@5fRwu5J9 z#3cA$R&cf`e@>)lOMMMe*3P5dV|LlFR_tIFaP}hp}MXHP=S? zWpyfX@%3kwSXiXIq0yeIOVFsAp;9beE5arWi!$x4$)=cNfzjBdfL$`or}a!twNL2d zIlDtG9t{Tw9h@T*tsh9;1&IoUR^s~;+b=-JT z*umGvWYp!8+P9S*N990bvEm0gBs^ncKWi{rhZRf?WK^bfv?e0m1CDQckq>wr+fq~= z<+!Z*vA|Q+sZm`p9IJA6CZ8K7_OZ~)y!4@b82jcnC?s%$<%lx*wnAdKP3p<87CW^q zRzL9?;ss=<*P=}|s==-{hsCQBXJ1e@_$<#BI(;qUW3<=+G3#|CKLspDHFR>q(EOmB z;pnj`oc_>fMOakz(*%9v#l2WEh)v7|bq|X)QCU(nB$DF=k4Szo@WqA4$BI5@F_}!8k-*h9y z_Cy9bA(`PsUX#36LY%r{UN05y+@P4G4%i7`V zICB9>4Co9E=2F*9?BTmw7-*wRyzBjUGW<$VV#$gZ+kPLW-_zqHE7(+Yl{s8T5FAP0Z!I1VOUbpc;`=ahNNjHan{oTNL+W?LT)k6Jic#TWZp z3)T+hhfi_i_ZJh5Q&Fyz)Q!cdy6m(Xe|42BB_}VRzwJ{lMpvSER0Fx_lHmk7d(cx1 zR^`o&pR}QknTAtImLJrL%zPDsp-b({w0&a2Mj7E2ANh*Ad6lW6CU$%F#g{=BE=)lc z;=Ow3KjAj9Un@#X>SNT1Mkm3VI#p}XwUbeaBYNr-HT(;N6v|$TLOFi>g$0s%QVDAm0vCn?@!l{kH*hV7 zlk9TbiL@-$>cR$MQO(zB*lIKScjG5!MA1(kma&tEWfFBI&B?qkBex?s1co#%KL%qj zqSDM4X0nBuCuZCz(a%#9=rz?TeQSoeMdF4Lh01MwXeI`-A%5cLOOwMfzgeZp9X#!| ze9F@Cb!X01>w6B=x>EWQZgXJv&>O&ooR!Ixd7c5Kl)1IZrFa z+w|Zo$B&la;DIcL(3k-PWaEr=7(Z)=WI&<83DiL$B>g$=FLT$TIT-ZKI(&%nF7q{k zsYg5{tqZKp6+KpQ7;PNiWgn%ylPev_()c=>@U0Tb?KS9F(PynS;1RtgM-}N3>z>RB zm^wi$&pyHJ9WtWs_`;>2@^i4%Ur$y@Lb~S8XBD zB~)>q0yWVsB{~*&2kydRKsa@3V559I4K0by zqP%gO%Un%PCIUEB(AqaEF|trL)#IH_utIJ+GbfD^l#PuZ*2!9FPuR|wzl6adn7m6>PlT-L+L~=Twb7VVLXPCr;Fn|7BNPt3qt(pX zpr-v&XXF?KoiS8WaSG=W-py%rD<^GroOW@S1Shpan^lx0Vu5!+g;3YaBYuZdgx=st3uNRS)> z{uWO1V|3J>WhLpqNS0o%k$0Y04CyDPr>RiYL)Fzu9Zw&Cg5Xc%F9z9Ea>8MGt3MIU$#2CLeRqjSLcNZm z@l)7x{daoan$lBxR$}@uhd3fDRme0uie2mir`lxB?SlHYQnzM{=`mB!yc?x_cv@Zk zyw^&dL`e)nEev3s;Jmz8bgOEnh;hQlhlyntADgGg=S`HxZol9e&K)^=imkFbxj8a% zz~>NL{#WnxP&j)!Y^s`ghKel#eS9jZ$qIINXZD*9_x`V6p)$>LV;!uZ$svp>dSI{U zVY-1d$7+V~=!RxZU#Lp^a%}P0o96~`grpqnzx3y-QWt8spN7R4zxfO*`*78eOeKA~ zs^*P_rk~Pk*Z9Lc?CuB^QY-(deQn8$Rl?7Sua(UcfQEYlb;qx6W5|oyA4wW^Rk=~~ zTpqr|aD%zZxAm>7dhZUSqtzaUOe7)B+v^uBFI~mtUS_97tGvs@FJJk7O-AJ4ZXy)1 zA%=sInkz);v4?(;>3BF0(ajNH=^Z0nQEO5x78S0bArv#Yh?3DA1<_grz>Q(DDk_r0 zI=4>kJX)jJ-p#g%@38T08aJb%^4nOkLzMrmg^B%T7g3|MHC5xKEd5t}I5dYJ-C_$Q zj8`G)_7r_#h>pZlG?iPfX;RPp71aVj!HuGIL- zxEu26UA2zevMbY(e}hgu?n!V7;}-&RS)bEjXzGRaG`VGM?urgoQ$P?~_T;>cn139> zmhC+WThSmOopY?`%B_K{TNDvjx!BjLLAgz;GdN5#<8@!g}pCT*YFD{ zR)~KA54woClti-ldXna$Q=kG)AH`lLLMm7Ic!XaI7hPivH_SpU8X$0y!7n;5__ z6?s8*bYee;3qAGFv)c|D4}Z~@npb7V=ZL0idcVojDAxEWC5(9tNh5xMFH~h$ty-O= zoU9{Ol~+X~%{X^&iQ-IG{29h3oAIT+6Wf->I!nn-E_T#=!%QPJtKno`2s3r_$R2^` z+{b-~f*b388K+9lXk=t-jI^24EM5(T>b{8|pq;_yQ zwav(O7Z+RVY9z!^DLKA~Z&%`cLp~e%zk8<*_Z!^!mZc~a2XHxnMTUv9^KF&cdbTB7 z7;8eqatSmJvo)_s8!AQaMGW`I^&USm8AEjz$!lxJ(IlVTG0KQB zk^d_-I! z$;$&3qGR!eg7n&B<_t1-tY_+0@}nuPuZ${or6+#tMu$3Viu90B9J%q@G8GLEb>gFE z!{I1_9L@R`XvR-17|+}}a$|Plz}lv+dQ$e+I59pPl2#sho>%Wm$2= zk%rgcn;C~1{z-)d1=5Q)iO(aB%}I0O=0;W;%x_+aXG10lgts!}8fRP0wA`dH{)f2K zMj;JW0v6(s>IhbLHk5hQB&MZ=lO|E6i)*4j!eeFO0121niL(W@y3n$t2Ow!wI|5vI z3O#BVcWF#T67!IrAx`?3-vAEf+%R)=)rrHx_~b;dC-b{z3BwWBLt*j?QCuT^;V-ct zr|UfrnrCvgo*I&hPz~^2z@&G{S%yXv`^C?ET)q~KZQqJxFB8mqThR;?XE9?M3ruh! R;-&RDg1YA;pb880{~v&E@-P4Z 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-12-14 04:19+0100\n" +"POT-Creation-Date: 2013-04-05 10:19-0700\n" "PO-Revision-Date: 2012-10-02 11:32+0100\n" "Last-Translator: Vincent Duvert \n" "Language-Team: fr \n" @@ -22,11 +22,13 @@ msgid "All Branches" msgstr "Toutes les branches" #: rhodecode/controllers/changeset.py:83 -msgid "show white space" +#, fuzzy +msgid "Show white space" msgstr "Afficher les espaces et tabulations" #: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97 -msgid "ignore white space" +#, fuzzy +msgid "Ignore white space" msgstr "Ignorer les espaces et tabulations" #: rhodecode/controllers/changeset.py:163 @@ -34,22 +36,23 @@ msgstr "Ignorer les espaces et tabulatio msgid "%s line context" msgstr "Afficher %s lignes de contexte" -#: rhodecode/controllers/changeset.py:314 -#: rhodecode/controllers/pullrequests.py:417 +#: rhodecode/controllers/changeset.py:329 +#: rhodecode/controllers/pullrequests.py:438 #, python-format msgid "Status change -> %s" msgstr "Changement de statut -> %s" -#: rhodecode/controllers/changeset.py:345 +#: rhodecode/controllers/changeset.py:360 +#, fuzzy msgid "" -"Changing status on a changeset associated witha closed pull request is " +"Changing status on a changeset associated with a 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:121 +#: rhodecode/controllers/compare.py:74 +#: rhodecode/controllers/pullrequests.py:167 #: rhodecode/controllers/shortlog.py:100 msgid "There are no changesets yet" msgstr "Il n’y a aucun changement pour le moment" @@ -95,126 +98,141 @@ msgid "%s %s feed" msgstr "Flux %s de %s" #: rhodecode/controllers/feed.py:86 -#: rhodecode/templates/changeset/changeset.html:137 -#: rhodecode/templates/changeset/changeset.html:149 -#: 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 +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 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:92 -msgid "commited on" -msgstr "a commité, le" - -#: rhodecode/controllers/files.py:86 -msgid "click here to add new file" +#: rhodecode/controllers/feed.py:91 +#, fuzzy, python-format +msgid "%s committed on %s" +msgstr "%s a commité, le %s" + +#: rhodecode/controllers/files.py:88 +#, fuzzy +msgid "Click here to add new file" msgstr "Ajouter un nouveau fichier" -#: rhodecode/controllers/files.py:87 +#: rhodecode/controllers/files.py:89 #, python-format msgid "There are no files yet %s" msgstr "Il n’y a pas encore de fichiers %s" -#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325 +#: rhodecode/controllers/files.py:267 rhodecode/controllers/files.py:335 #, 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:292 -#, python-format -msgid "Edited %s via RhodeCode" +#: rhodecode/controllers/files.py:279 +msgid "You can only edit files with revision being a valid branch " +msgstr "" + +#: rhodecode/controllers/files.py:293 +#, fuzzy, python-format +msgid "Edited file %s via RhodeCode" msgstr "%s édité via RhodeCode" -#: rhodecode/controllers/files.py:297 +#: rhodecode/controllers/files.py:309 msgid "No changes" msgstr "Aucun changement" -#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372 +#: rhodecode/controllers/files.py:318 rhodecode/controllers/files.py:388 #, python-format msgid "Successfully committed to %s" msgstr "Commit réalisé avec succès sur %s" -#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378 +#: rhodecode/controllers/files.py:323 rhodecode/controllers/files.py:394 msgid "Error occurred during commit" msgstr "Une erreur est survenue durant le commit" -#: rhodecode/controllers/files.py:344 -#, python-format -msgid "Added %s via RhodeCode" +#: rhodecode/controllers/files.py:347 +#, fuzzy +msgid "Added file via RhodeCode" msgstr "%s ajouté par RhodeCode" -#: rhodecode/controllers/files.py:358 +#: rhodecode/controllers/files.py:364 msgid "No content" msgstr "Aucun contenu" -#: rhodecode/controllers/files.py:362 +#: rhodecode/controllers/files.py:368 msgid "No filename" msgstr "Aucun nom de fichier" -#: rhodecode/controllers/files.py:404 -msgid "downloads disabled" +#: rhodecode/controllers/files.py:372 +msgid "Location must be relative path and must not contain .. in path" +msgstr "" + +#: rhodecode/controllers/files.py:420 +#, fuzzy +msgid "Downloads disabled" msgstr "Les téléchargements sont désactivés" -#: rhodecode/controllers/files.py:415 +#: rhodecode/controllers/files.py:431 #, python-format msgid "Unknown revision %s" msgstr "Révision %s inconnue." -#: rhodecode/controllers/files.py:417 +#: rhodecode/controllers/files.py:433 msgid "Empty repository" msgstr "Dépôt vide." -#: rhodecode/controllers/files.py:419 +#: rhodecode/controllers/files.py:435 msgid "Unknown archive type" msgstr "Type d’archive inconnu" -#: rhodecode/controllers/files.py:564 -#: rhodecode/templates/changeset/changeset_range.html:13 -#: rhodecode/templates/changeset/changeset_range.html:31 +#: rhodecode/controllers/files.py:617 +#: rhodecode/templates/changeset/changeset_range.html:9 msgid "Changesets" msgstr "Changesets" -#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:74 -#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550 +#: rhodecode/controllers/files.py:618 rhodecode/controllers/pullrequests.py:131 +#: rhodecode/controllers/summary.py:247 rhodecode/model/scm.py:606 +#: rhodecode/templates/switch_to_list.html:3 +#: rhodecode/templates/branches/branches.html:10 msgid "Branches" msgstr "Branches" -#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:78 -#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561 +#: rhodecode/controllers/files.py:619 rhodecode/controllers/pullrequests.py:132 +#: rhodecode/controllers/summary.py:248 rhodecode/model/scm.py:617 +#: rhodecode/templates/switch_to_list.html:15 +#: rhodecode/templates/shortlog/shortlog_data.html:10 +#: rhodecode/templates/tags/tags.html:10 msgid "Tags" msgstr "Tags" -#: rhodecode/controllers/forks.py:158 -#, python-format -msgid "forked %s repository as %s" +#: rhodecode/controllers/forks.py:175 +#, fuzzy, python-format +msgid "Forked repository %s as %s" msgstr "dépôt %s forké en tant que %s" -#: rhodecode/controllers/forks.py:172 +#: rhodecode/controllers/forks.py:189 #, python-format 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:218 rhodecode/controllers/journal.py:261 +#: rhodecode/controllers/journal.py:275 rhodecode/controllers/journal.py:318 msgid "public journal" msgstr "Journal public" -#: rhodecode/controllers/journal.py:222 rhodecode/controllers/journal.py:265 -#: rhodecode/templates/base/base.html:232 +#: rhodecode/controllers/journal.py:279 rhodecode/controllers/journal.py:322 #: rhodecode/templates/journal/journal.html:12 msgid "journal" msgstr "Journal" -#: rhodecode/controllers/login.py:143 -msgid "You have successfully registered into rhodecode" +#: rhodecode/controllers/login.py:138 +#, fuzzy +msgid "You have successfully registered into RhodeCode" msgstr "Vous vous êtes inscrits avec succès à RhodeCode" -#: rhodecode/controllers/login.py:164 +#: rhodecode/controllers/login.py:159 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 +#: rhodecode/controllers/login.py:179 msgid "" "Your password reset was successful, new password has been sent to your " "email" @@ -222,31 +240,53 @@ 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:76 rhodecode/model/scm.py:556 +#: rhodecode/controllers/pullrequests.py:118 +#: rhodecode/templates/changeset/changeset.html:10 +#: rhodecode/templates/email_templates/changeset_comment.html:15 +msgid "Changeset" +msgstr "Changements" + +#: rhodecode/controllers/pullrequests.py:128 +msgid "Special" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:129 +#, fuzzy +msgid "Peer branches" +msgstr "Branches" + +#: rhodecode/controllers/pullrequests.py:130 rhodecode/model/scm.py:612 +#: rhodecode/templates/switch_to_list.html:28 +#: rhodecode/templates/bookmarks/bookmarks.html:10 msgid "Bookmarks" msgstr "Signets" -#: rhodecode/controllers/pullrequests.py:190 +#: rhodecode/controllers/pullrequests.py:228 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:192 -msgid "error during creation of pull request" +#: rhodecode/controllers/pullrequests.py:230 +#, fuzzy +msgid "Error creating pull request" msgstr "Une erreur est survenue lors de la création de la requête de pull." -#: rhodecode/controllers/pullrequests.py:224 +#: rhodecode/controllers/pullrequests.py:251 msgid "Successfully opened new pull request" msgstr "La requête de pull a été ouverte avec succès." -#: rhodecode/controllers/pullrequests.py:227 +#: rhodecode/controllers/pullrequests.py:254 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:260 +#: rhodecode/controllers/pullrequests.py:287 msgid "Successfully deleted pull request" msgstr "La requête de pull a été supprimée avec succès." -#: rhodecode/controllers/pullrequests.py:452 +#: rhodecode/controllers/pullrequests.py:441 +msgid "Closing with" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:478 msgid "Closing pull request on other statuses than rejected or approved forbidden" msgstr "" @@ -264,55 +304,12 @@ msgstr "" msgid "An error occurred during this search operation" msgstr "Une erreur est survenue durant l’opération de recherche." -#: rhodecode/controllers/settings.py:119 -#: rhodecode/controllers/admin/repos.py:272 -#, python-format -msgid "Repository %s updated successfully" -msgstr "Dépôt %s mis à jour avec succès." - -#: rhodecode/controllers/settings.py:137 -#: rhodecode/controllers/admin/repos.py:290 -#, 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:162 -#: rhodecode/controllers/admin/repos.py:315 -#, python-format -msgid "deleted repository %s" -msgstr "Dépôt %s supprimé" - -#: rhodecode/controllers/settings.py:166 -#: rhodecode/controllers/admin/repos.py:325 -#: rhodecode/controllers/admin/repos.py:331 -#, python-format -msgid "An error occurred during deletion of %s" -msgstr "Erreur pendant la suppression de %s" - -#: rhodecode/controllers/settings.py:185 -msgid "unlocked" -msgstr "déverrouillé" - -#: rhodecode/controllers/settings.py:188 -msgid "locked" -msgstr "verrouillé" - -#: rhodecode/controllers/settings.py:190 -#, python-format -msgid "Repository has been %s" -msgstr "Le dépôt a été %s." - -#: rhodecode/controllers/settings.py:194 -#: rhodecode/controllers/admin/repos.py:423 -msgid "An error occurred during unlocking" -msgstr "Une erreur est survenue durant le déverrouillage." - -#: rhodecode/controllers/summary.py:140 +#: rhodecode/controllers/summary.py:141 msgid "No data loaded yet" msgstr "Aucune donnée actuellement disponible." -#: rhodecode/controllers/summary.py:144 -#: rhodecode/templates/summary/summary.html:157 +#: rhodecode/controllers/summary.py:147 +#: rhodecode/templates/summary/summary.html:149 msgid "Statistics are disabled for this repository" msgstr "La mise à jour des statistiques est désactivée pour ce dépôt." @@ -323,7 +320,7 @@ msgstr "Mise à jour réussie des réglages LDAP" #: rhodecode/controllers/admin/defaults.py:110 #, fuzzy -msgid "error occurred during update of defaults" +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 @@ -371,7 +368,7 @@ msgid "START_TLS on LDAP connection" msgstr "START_TLS à la connexion" #: rhodecode/controllers/admin/ldap_settings.py:126 -msgid "Ldap settings updated successfully" +msgid "LDAP settings updated successfully" msgstr "Mise à jour réussie des réglages LDAP" #: rhodecode/controllers/admin/ldap_settings.py:130 @@ -379,549 +376,658 @@ msgid "Unable to activate ldap. The \"py msgstr "Impossible d’activer LDAP. La bibliothèque « python-ldap » est manquante." #: rhodecode/controllers/admin/ldap_settings.py:147 -msgid "error occurred during update of ldap settings" +#, fuzzy +msgid "Error occurred during update of ldap settings" 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" +msgid "None" +msgstr "Aucun" #: rhodecode/controllers/admin/permissions.py:61 #: rhodecode/controllers/admin/permissions.py:65 -msgid "Write" -msgstr "Écrire" +msgid "Read" +msgstr "Lire" #: rhodecode/controllers/admin/permissions.py:62 #: rhodecode/controllers/admin/permissions.py:66 +msgid "Write" +msgstr "Écrire" + +#: rhodecode/controllers/admin/permissions.py:63 +#: rhodecode/controllers/admin/permissions.py:67 #: 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/repo_add.html:10 +#: rhodecode/templates/admin/repos/repo_add.html:14 #: 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/repos_groups/repos_groups_add.html:9 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:9 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:13 #: 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/user_edit.html:133 #: rhodecode/templates/admin/users/users.html:9 +#: rhodecode/templates/admin/users/users.html:85 #: 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 +#: rhodecode/templates/base/base.html:292 +#: rhodecode/templates/base/base.html:293 +#: rhodecode/templates/base/base.html:299 +#: rhodecode/templates/base/base.html:300 msgid "Admin" msgstr "Administration" -#: rhodecode/controllers/admin/permissions.py:69 -msgid "disabled" -msgstr "Désactivé" - -#: rhodecode/controllers/admin/permissions.py:71 -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 +#: rhodecode/controllers/admin/permissions.py:70 +#: rhodecode/controllers/admin/permissions.py:76 +#: rhodecode/controllers/admin/permissions.py:79 msgid "Disabled" msgstr "Interdite" -#: rhodecode/controllers/admin/permissions.py:76 -#: rhodecode/controllers/admin/permissions.py:79 +#: rhodecode/controllers/admin/permissions.py:72 +#, fuzzy +msgid "Allowed with manual account activation" +msgstr "Autorisé avec activation manuelle du compte" + +#: rhodecode/controllers/admin/permissions.py:74 +#, fuzzy +msgid "Allowed with automatic account activation" +msgstr "Autorisé avec activation automatique du compte" + +#: rhodecode/controllers/admin/permissions.py:77 +#: rhodecode/controllers/admin/permissions.py:80 msgid "Enabled" msgstr "Autorisée" -#: rhodecode/controllers/admin/permissions.py:122 +#: rhodecode/controllers/admin/permissions.py:128 msgid "Default permissions updated successfully" msgstr "Permissions par défaut mises à jour avec succès" -#: rhodecode/controllers/admin/permissions.py:136 -msgid "error occurred during update of permissions" +#: rhodecode/controllers/admin/permissions.py:142 +#, fuzzy +msgid "Error occurred during update of permissions" msgstr "erreur pendant la mise à jour des permissions" -#: rhodecode/controllers/admin/repos.py:121 +#: rhodecode/controllers/admin/repos.py:127 msgid "--REMOVE FORK--" msgstr "[Pas un fork]" -#: rhodecode/controllers/admin/repos.py:190 -#, python-format -msgid "created repository %s from %s" +#: rhodecode/controllers/admin/repos.py:168 +#, fuzzy, python-format +msgid "Created repository %s from %s" msgstr "Le dépôt %s a été créé depuis %s." -#: rhodecode/controllers/admin/repos.py:194 +#: rhodecode/controllers/admin/repos.py:174 +#, fuzzy, python-format +msgid "Created repository %s" +msgstr "Le dépôt %s a été créé." + +#: rhodecode/controllers/admin/repos.py:197 +#, fuzzy, python-format +msgid "Error creating repository %s" +msgstr "Le dépôt %s a été créé." + +#: rhodecode/controllers/admin/repos.py:266 #, python-format -msgid "created repository %s" -msgstr "Le dépôt %s a été créé." - -#: rhodecode/controllers/admin/repos.py:225 +msgid "Repository %s updated successfully" +msgstr "Dépôt %s mis à jour avec succès." + +#: rhodecode/controllers/admin/repos.py:284 +#, fuzzy, 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/admin/repos.py:311 +#: rhodecode/controllers/api/api.py:877 #, 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:320 +msgid "Detached %s forks" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:314 +#: rhodecode/controllers/api/api.py:879 +#, fuzzy, python-format +msgid "Deleted %s forks" +msgstr "Dépôt %s supprimé" + +#: rhodecode/controllers/admin/repos.py:319 +#, fuzzy, python-format +msgid "Deleted repository %s" +msgstr "Dépôt %s supprimé" + +#: rhodecode/controllers/admin/repos.py:322 #, 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:349 +#: rhodecode/controllers/admin/repos.py:327 +#, python-format +msgid "An error occurred during deletion of %s" +msgstr "Erreur pendant la suppression de %s" + +#: rhodecode/controllers/admin/repos.py:365 +#, fuzzy +msgid "Repository permissions updated" +msgstr "Création de dépôt désactivée" + +#: rhodecode/controllers/admin/repos.py:384 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:368 -msgid "An error occurred during deletion of repository users groups" +#: rhodecode/controllers/admin/repos.py:403 +#, fuzzy +msgid "An error occurred during deletion of repository user groups" msgstr "" "Une erreur est survenue durant la suppression du groupe d’utilisateurs de" " ce dépôt." -#: rhodecode/controllers/admin/repos.py:386 +#: rhodecode/controllers/admin/repos.py:421 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:403 +#: rhodecode/controllers/admin/repos.py:438 msgid "An error occurred during cache invalidation" msgstr "Une erreur est survenue durant l’invalidation du cache." -#: rhodecode/controllers/admin/repos.py:443 +#: rhodecode/controllers/admin/repos.py:458 +#: rhodecode/controllers/admin/repos.py:485 +msgid "An error occurred during unlocking" +msgstr "Une erreur est survenue durant le déverrouillage." + +#: rhodecode/controllers/admin/repos.py:476 +#, fuzzy +msgid "Unlocked" +msgstr "déverrouillé" + +#: rhodecode/controllers/admin/repos.py:479 +#, fuzzy +msgid "Locked" +msgstr "verrouillé" + +#: rhodecode/controllers/admin/repos.py:481 +#, python-format +msgid "Repository has been %s" +msgstr "Le dépôt a été %s." + +#: rhodecode/controllers/admin/repos.py:505 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:447 +#: rhodecode/controllers/admin/repos.py:509 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:452 rhodecode/model/validators.py:300 +#: rhodecode/controllers/admin/repos.py:514 rhodecode/model/validators.py:302 msgid "Token mismatch" msgstr "Jeton d’authentification incorrect." -#: rhodecode/controllers/admin/repos.py:465 +#: rhodecode/controllers/admin/repos.py:527 msgid "Pulled from remote location" msgstr "Les changements distants ont été récupérés." -#: rhodecode/controllers/admin/repos.py:467 +#: rhodecode/controllers/admin/repos.py:529 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:483 +#: rhodecode/controllers/admin/repos.py:545 msgid "Nothing" msgstr "[Aucun dépôt]" -#: rhodecode/controllers/admin/repos.py:485 +#: rhodecode/controllers/admin/repos.py:547 #, 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:489 +#: rhodecode/controllers/admin/repos.py:551 msgid "An error occurred during this operation" msgstr "Une erreur est survenue durant cette opération." -#: rhodecode/controllers/admin/repos_groups.py:120 -#, python-format -msgid "created repos group %s" +#: rhodecode/controllers/admin/repos.py:590 +#, fuzzy +msgid "An error occurred during creation of field" +msgstr "Une erreur est survenue durant la création de l’utilisateur %s." + +#: rhodecode/controllers/admin/repos.py:604 +#, fuzzy +msgid "An error occurred during removal of field" +msgstr "Une erreur est survenue durant l’enregistrement de l’e-mail." + +#: rhodecode/controllers/admin/repos_groups.py:145 +#, fuzzy, python-format +msgid "Created repository group %s" msgstr "Le groupe de dépôts %s a été créé." -#: rhodecode/controllers/admin/repos_groups.py:133 -#, python-format -msgid "error occurred during creation of repos group %s" +#: rhodecode/controllers/admin/repos_groups.py:157 +#, fuzzy, python-format +msgid "Error occurred during creation of repository group %s" msgstr "Une erreur est survenue durant la création du groupe de dépôts %s." -#: rhodecode/controllers/admin/repos_groups.py:167 -#, python-format -msgid "updated repos group %s" +#: rhodecode/controllers/admin/repos_groups.py:214 +#: rhodecode/controllers/admin/repos_groups.py:286 +msgid "Cannot revoke permission for yourself as admin" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:220 +#, fuzzy, python-format +msgid "Updated repository group %s" msgstr "Le groupe de dépôts %s a été mis à jour." -#: rhodecode/controllers/admin/repos_groups.py:180 -#, python-format -msgid "error occurred during update of repos group %s" +#: rhodecode/controllers/admin/repos_groups.py:235 +#, fuzzy, python-format +msgid "Error occurred during update of repository group %s" msgstr "Une erreur est survenue durant la mise à jour du groupe de dépôts %s." -#: rhodecode/controllers/admin/repos_groups.py:198 +#: rhodecode/controllers/admin/repos_groups.py:253 #, 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:206 -#, python-format -msgid "removed repos group %s" +#: rhodecode/controllers/admin/repos_groups.py:260 +#, fuzzy, python-format +msgid "This group contains %s subgroups and cannot be deleted" +msgstr "Ce groupe contient %s dépôts et ne peut être supprimé." + +#: rhodecode/controllers/admin/repos_groups.py:266 +#, fuzzy, python-format +msgid "Removed repository group %s" msgstr "Le groupe de dépôts %s a été supprimé." -#: 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:217 -#: rhodecode/controllers/admin/repos_groups.py:222 -#, python-format -msgid "error occurred during deletion of repos group %s" +#: rhodecode/controllers/admin/repos_groups.py:271 +#, fuzzy, 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:243 +#: rhodecode/controllers/admin/repos_groups.py:297 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:264 -msgid "An error occurred during deletion of group users groups" +#: rhodecode/controllers/admin/repos_groups.py:318 +#, fuzzy +msgid "An error occurred during deletion of group user groups" 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" +#: rhodecode/controllers/admin/settings.py:126 +#, fuzzy, 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:131 +#: rhodecode/controllers/admin/settings.py:135 msgid "Whoosh reindex task scheduled" msgstr "La tâche de réindexation Whoosh a été planifiée." -#: rhodecode/controllers/admin/settings.py:162 +#: rhodecode/controllers/admin/settings.py:166 msgid "Updated application settings" msgstr "Réglages mis à jour" -#: rhodecode/controllers/admin/settings.py:166 -#: rhodecode/controllers/admin/settings.py:299 -msgid "error occurred during updating application settings" +#: rhodecode/controllers/admin/settings.py:170 +#: rhodecode/controllers/admin/settings.py:301 +#, fuzzy +msgid "Error occurred during updating application settings" msgstr "Une erreur est survenue durant la mise à jour des options." -#: rhodecode/controllers/admin/settings.py:207 +#: rhodecode/controllers/admin/settings.py:216 msgid "Updated visualisation settings" msgstr "Réglages d’affichage mis à jour." -#: rhodecode/controllers/admin/settings.py:212 -msgid "error occurred during updating visualisation settings" +#: rhodecode/controllers/admin/settings.py:221 +#, fuzzy +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:295 +#: rhodecode/controllers/admin/settings.py:297 msgid "Updated VCS settings" msgstr "Réglages des gestionnaires de versions mis à jour." -#: rhodecode/controllers/admin/settings.py:309 +#: rhodecode/controllers/admin/settings.py:311 msgid "Added new hook" msgstr "Le nouveau hook a été ajouté." -#: rhodecode/controllers/admin/settings.py:321 +#: rhodecode/controllers/admin/settings.py:323 msgid "Updated hooks" msgstr "Hooks mis à jour" -#: rhodecode/controllers/admin/settings.py:325 -msgid "error occurred during hook creation" +#: rhodecode/controllers/admin/settings.py:327 +#, fuzzy +msgid "Error occurred during hook creation" msgstr "Une erreur est survenue durant la création du hook." -#: rhodecode/controllers/admin/settings.py:344 +#: rhodecode/controllers/admin/settings.py:346 msgid "Email task created" msgstr "La tâche d’e-mail a été créée." -#: rhodecode/controllers/admin/settings.py:399 +#: rhodecode/controllers/admin/settings.py:410 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:430 +#: rhodecode/controllers/admin/settings.py:452 msgid "Your account was updated successfully" msgstr "Votre compte a été mis à jour avec succès" -#: rhodecode/controllers/admin/settings.py:445 -#: rhodecode/controllers/admin/users.py:196 -#, python-format -msgid "error occurred during update of user %s" +#: rhodecode/controllers/admin/settings.py:467 +#: rhodecode/controllers/admin/users.py:198 +#, fuzzy, python-format +msgid "Error occurred during update of user %s" msgstr "Une erreur est survenue durant la mise à jour de l’utilisateur %s." #: rhodecode/controllers/admin/users.py:130 -#, python-format -msgid "created user %s" +#, fuzzy, python-format +msgid "Created user %s" msgstr "utilisateur %s créé" #: rhodecode/controllers/admin/users.py:142 -#, python-format -msgid "error occurred during creation of user %s" +#, fuzzy, python-format +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:176 msgid "User updated successfully" msgstr "L’utilisateur a été mis à jour avec succès." -#: rhodecode/controllers/admin/users.py:212 -msgid "successfully deleted user" +#: rhodecode/controllers/admin/users.py:214 +#, fuzzy +msgid "Successfully deleted user" msgstr "L’utilisateur a été supprimé avec succès." -#: rhodecode/controllers/admin/users.py:217 +#: rhodecode/controllers/admin/users.py:219 msgid "An error occurred during deletion of user" msgstr "Une erreur est survenue durant la suppression de l’utilisateur." -#: rhodecode/controllers/admin/users.py:231 +#: rhodecode/controllers/admin/users.py:233 msgid "You can't edit this user" msgstr "Vous ne pouvez pas éditer cet utilisateur" -#: rhodecode/controllers/admin/users.py:272 +#: rhodecode/controllers/admin/users.py:276 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:277 +#: rhodecode/controllers/admin/users.py:281 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:283 +#: rhodecode/controllers/admin/users.py:287 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:288 +#: rhodecode/controllers/admin/users.py:292 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:294 -#: rhodecode/controllers/admin/users_groups.py:279 +#: rhodecode/controllers/admin/users.py:298 +#: rhodecode/controllers/admin/users_groups.py:281 msgid "An error occurred during permissions saving" msgstr "Une erreur est survenue durant l’enregistrement des permissions." -#: rhodecode/controllers/admin/users.py:309 +#: rhodecode/controllers/admin/users.py:312 #, python-format msgid "Added email %s to user" msgstr "L’e-mail « %s » a été ajouté à l’utilisateur." -#: rhodecode/controllers/admin/users.py:315 +#: rhodecode/controllers/admin/users.py:318 msgid "An error occurred during email saving" msgstr "Une erreur est survenue durant l’enregistrement de l’e-mail." -#: rhodecode/controllers/admin/users.py:325 +#: rhodecode/controllers/admin/users.py:328 msgid "Removed email from user" msgstr "L’e-mail a été enlevé de l’utilisateur." +#: rhodecode/controllers/admin/users.py:341 +#, fuzzy, python-format +msgid "Added ip %s to user" +msgstr "L’e-mail « %s » a été ajouté à l’utilisateur." + +#: rhodecode/controllers/admin/users.py:347 +#, fuzzy +msgid "An error occurred during ip saving" +msgstr "Une erreur est survenue durant l’enregistrement de l’e-mail." + +#: rhodecode/controllers/admin/users.py:359 +#, fuzzy +msgid "Removed ip from user" +msgstr "L’e-mail a été enlevé de l’utilisateur." + #: rhodecode/controllers/admin/users_groups.py:86 -#, python-format -msgid "created users group %s" +#, fuzzy, python-format +msgid "Created user group %s" msgstr "Le groupe d’utilisateurs %s a été créé." #: rhodecode/controllers/admin/users_groups.py:97 -#, python-format -msgid "error occurred during creation of users group %s" +#, fuzzy, python-format +msgid "Error occurred during creation of user group %s" msgstr "Une erreur est survenue durant la création du groupe d’utilisateurs %s." -#: rhodecode/controllers/admin/users_groups.py:164 -#, python-format -msgid "updated users group %s" +#: rhodecode/controllers/admin/users_groups.py:166 +#, fuzzy, python-format +msgid "Updated user group %s" msgstr "Le groupe d’utilisateurs %s a été mis à jour." -#: rhodecode/controllers/admin/users_groups.py:186 -#, python-format -msgid "error occurred during update of users group %s" +#: rhodecode/controllers/admin/users_groups.py:188 +#, fuzzy, python-format +msgid "Error occurred during update of user group %s" msgstr "Une erreur est survenue durant la mise à jour du groupe d’utilisateurs %s." -#: rhodecode/controllers/admin/users_groups.py:203 -msgid "successfully deleted users group" +#: rhodecode/controllers/admin/users_groups.py:205 +#, fuzzy +msgid "Successfully deleted user group" msgstr "Le groupe d’utilisateurs a été supprimé avec succès." -#: rhodecode/controllers/admin/users_groups.py:208 -msgid "An error occurred during deletion of users group" +#: rhodecode/controllers/admin/users_groups.py:210 +#, fuzzy +msgid "An error occurred during deletion of user group" msgstr "Une erreur est survenue lors de la suppression du groupe d’utilisateurs." -#: rhodecode/controllers/admin/users_groups.py:257 -msgid "Granted 'repository create' permission to users group" +#: rhodecode/controllers/admin/users_groups.py:259 +#, fuzzy +msgid "Granted 'repository create' permission to user 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:262 -msgid "Revoked 'repository create' permission to users group" +#: rhodecode/controllers/admin/users_groups.py:264 +#, fuzzy +msgid "Revoked 'repository create' permission to user 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:268 -msgid "Granted 'repository fork' permission to users group" +#: rhodecode/controllers/admin/users_groups.py:270 +#, fuzzy +msgid "Granted 'repository fork' permission to user group" msgstr "La permission de fork de dépôts a été accordée au groupe d’utilisateur." -#: rhodecode/controllers/admin/users_groups.py:273 -msgid "Revoked 'repository fork' permission to users group" +#: rhodecode/controllers/admin/users_groups.py:275 +#, fuzzy +msgid "Revoked 'repository fork' permission to user group" msgstr "La permission de fork de dépôts a été révoquée au groupe d’utilisateurs." -#: rhodecode/lib/auth.py:499 +#: rhodecode/lib/auth.py:530 +#, fuzzy, python-format +msgid "IP %s not allowed" +msgstr "Followers de %s" + +#: rhodecode/lib/auth.py:579 msgid "You need to be a registered user to perform this action" msgstr "Vous devez être un utilisateur enregistré pour effectuer cette action." -#: rhodecode/lib/auth.py:540 +#: rhodecode/lib/auth.py:620 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:74 -msgid "binary file" +#: rhodecode/lib/diffs.py:66 +#, fuzzy +msgid "Binary file" msgstr "Fichier binaire" -#: rhodecode/lib/diffs.py:90 +#: rhodecode/lib/diffs.py:82 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:100 +#: rhodecode/lib/diffs.py:92 msgid "No changes detected" msgstr "Aucun changement détecté." -#: rhodecode/lib/helpers.py:374 +#: rhodecode/lib/helpers.py:394 #, python-format msgid "%a, %d %b %Y %H:%M:%S" msgstr "%d/%m/%Y à %H:%M:%S" -#: rhodecode/lib/helpers.py:486 +#: rhodecode/lib/helpers.py:506 msgid "True" msgstr "Vrai" -#: rhodecode/lib/helpers.py:490 +#: rhodecode/lib/helpers.py:509 msgid "False" msgstr "Faux" -#: rhodecode/lib/helpers.py:530 +#: rhodecode/lib/helpers.py:547 #, fuzzy, python-format msgid "Deleted branch: %s" msgstr "Dépôt %s supprimé" -#: rhodecode/lib/helpers.py:533 +#: rhodecode/lib/helpers.py:550 #, fuzzy, python-format msgid "Created tag: %s" msgstr "utilisateur %s créé" -#: rhodecode/lib/helpers.py:546 +#: rhodecode/lib/helpers.py:563 msgid "Changeset not found" msgstr "Ensemble de changements non trouvé" -#: rhodecode/lib/helpers.py:589 +#: rhodecode/lib/helpers.py:615 #, python-format msgid "Show all combined changesets %s->%s" msgstr "Afficher les changements combinés %s->%s" -#: rhodecode/lib/helpers.py:595 +#: rhodecode/lib/helpers.py:621 msgid "compare view" msgstr "vue de comparaison" -#: rhodecode/lib/helpers.py:615 +#: rhodecode/lib/helpers.py:641 msgid "and" msgstr "et" -#: rhodecode/lib/helpers.py:616 +#: rhodecode/lib/helpers.py:642 #, python-format msgid "%s more" msgstr "%s de plus" -#: rhodecode/lib/helpers.py:617 rhodecode/templates/changelog/changelog.html:51 +#: rhodecode/lib/helpers.py:643 rhodecode/templates/changelog/changelog.html:44 msgid "revisions" msgstr "révisions" -#: rhodecode/lib/helpers.py:641 +#: rhodecode/lib/helpers.py:667 #, fuzzy, python-format msgid "fork name %s" msgstr "Nom du fork %s" -#: rhodecode/lib/helpers.py:658 -#: rhodecode/templates/pullrequests/pullrequest_show.html:4 -#: rhodecode/templates/pullrequests/pullrequest_show.html:12 +#: rhodecode/lib/helpers.py:684 +#: rhodecode/templates/pullrequests/pullrequest_show.html:8 #, python-format msgid "Pull request #%s" msgstr "Requête de pull #%s" -#: rhodecode/lib/helpers.py:664 +#: rhodecode/lib/helpers.py:690 msgid "[deleted] repository" msgstr "[a supprimé] le dépôt" -#: rhodecode/lib/helpers.py:666 rhodecode/lib/helpers.py:676 +#: rhodecode/lib/helpers.py:692 rhodecode/lib/helpers.py:702 msgid "[created] repository" msgstr "[a créé] le dépôt" -#: rhodecode/lib/helpers.py:668 +#: rhodecode/lib/helpers.py:694 msgid "[created] repository as fork" msgstr "[a créé] le dépôt en tant que fork" -#: rhodecode/lib/helpers.py:670 rhodecode/lib/helpers.py:678 +#: rhodecode/lib/helpers.py:696 rhodecode/lib/helpers.py:704 msgid "[forked] repository" msgstr "[a forké] le dépôt" -#: rhodecode/lib/helpers.py:672 rhodecode/lib/helpers.py:680 +#: rhodecode/lib/helpers.py:698 rhodecode/lib/helpers.py:706 msgid "[updated] repository" msgstr "[a mis à jour] le dépôt" -#: rhodecode/lib/helpers.py:674 +#: rhodecode/lib/helpers.py:700 msgid "[delete] repository" msgstr "[a supprimé] le dépôt" -#: rhodecode/lib/helpers.py:682 +#: rhodecode/lib/helpers.py:708 msgid "[created] user" msgstr "[a créé] l’utilisateur" -#: rhodecode/lib/helpers.py:684 +#: rhodecode/lib/helpers.py:710 msgid "[updated] user" msgstr "[a mis à jour] l’utilisateur" -#: rhodecode/lib/helpers.py:686 -msgid "[created] users group" +#: rhodecode/lib/helpers.py:712 +#, fuzzy +msgid "[created] user group" msgstr "[a créé] le groupe d’utilisateurs" -#: rhodecode/lib/helpers.py:688 -msgid "[updated] users group" +#: rhodecode/lib/helpers.py:714 +#, fuzzy +msgid "[updated] user group" msgstr "[a mis à jour] le groupe d’utilisateurs" -#: rhodecode/lib/helpers.py:690 +#: rhodecode/lib/helpers.py:716 msgid "[commented] on revision in repository" msgstr "[a commenté] une révision du dépôt" -#: rhodecode/lib/helpers.py:692 +#: rhodecode/lib/helpers.py:718 msgid "[commented] on pull request for" msgstr "[a commenté] la requête de pull pour" -#: rhodecode/lib/helpers.py:694 +#: rhodecode/lib/helpers.py:720 msgid "[closed] pull request for" msgstr "[a fermé] la requête de pull de" -#: rhodecode/lib/helpers.py:696 +#: rhodecode/lib/helpers.py:722 msgid "[pushed] into" msgstr "[a pushé] dans" -#: rhodecode/lib/helpers.py:698 +#: rhodecode/lib/helpers.py:724 msgid "[committed via RhodeCode] into repository" msgstr "[a commité via RhodeCode] dans le dépôt" -#: rhodecode/lib/helpers.py:700 +#: rhodecode/lib/helpers.py:726 msgid "[pulled from remote] into repository" msgstr "[a pullé depuis un site distant] dans le dépôt" -#: rhodecode/lib/helpers.py:702 +#: rhodecode/lib/helpers.py:728 msgid "[pulled] from" msgstr "[a pullé] depuis" -#: rhodecode/lib/helpers.py:704 +#: rhodecode/lib/helpers.py:730 msgid "[started following] repository" msgstr "[suit maintenant] le dépôt" -#: rhodecode/lib/helpers.py:706 +#: rhodecode/lib/helpers.py:732 msgid "[stopped following] repository" msgstr "[ne suit plus] le dépôt" -#: rhodecode/lib/helpers.py:883 +#: rhodecode/lib/helpers.py:910 #, python-format msgid " and %s more" msgstr "et %s de plus" -#: rhodecode/lib/helpers.py:887 +#: rhodecode/lib/helpers.py:914 msgid "No Files" msgstr "Aucun fichier" -#: rhodecode/lib/helpers.py:1163 +#: rhodecode/lib/helpers.py:1198 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -932,165 +1038,230 @@ msgstr "" "probablement été créé ou renommé manuellement. Veuillez relancer " "l’application pour rescanner les dépôts." -#: rhodecode/lib/utils2.py:403 +#: rhodecode/lib/unionrepo.py:193 +#, fuzzy +msgid "cannot create new union repository" +msgstr "[a créé] le dépôt" + +#: rhodecode/lib/utils2.py:411 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d an" msgstr[1] "%d ans" -#: rhodecode/lib/utils2.py:404 +#: rhodecode/lib/utils2.py:412 #, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "%d mois" msgstr[1] "%d mois" -#: rhodecode/lib/utils2.py:405 +#: rhodecode/lib/utils2.py:413 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d jour" msgstr[1] "%d jours" -#: rhodecode/lib/utils2.py:406 +#: rhodecode/lib/utils2.py:414 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d heure" msgstr[1] "%d heures" -#: rhodecode/lib/utils2.py:407 +#: rhodecode/lib/utils2.py:415 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minute" msgstr[1] "%d minutes" -#: rhodecode/lib/utils2.py:408 +#: rhodecode/lib/utils2.py:416 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d seconde" msgstr[1] "%d secondes" -#: rhodecode/lib/utils2.py:424 +#: rhodecode/lib/utils2.py:432 #, fuzzy, python-format msgid "in %s" msgstr "à la ligne %s" -#: rhodecode/lib/utils2.py:426 +#: rhodecode/lib/utils2.py:434 #, python-format msgid "%s ago" msgstr "Il y a %s" -#: rhodecode/lib/utils2.py:428 +#: rhodecode/lib/utils2.py:436 #, fuzzy, python-format msgid "in %s and %s" msgstr "Il y a %s et %s" -#: rhodecode/lib/utils2.py:431 +#: rhodecode/lib/utils2.py:439 #, python-format msgid "%s and %s ago" msgstr "Il y a %s et %s" -#: rhodecode/lib/utils2.py:434 +#: rhodecode/lib/utils2.py:442 msgid "just now" msgstr "à l’instant" -#: 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:1183 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1183 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1289 rhodecode/model/db.py:1388 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:1184 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1184 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1290 rhodecode/model/db.py:1389 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:1185 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1185 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1291 rhodecode/model/db.py:1390 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:1186 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1186 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1292 rhodecode/model/db.py:1391 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:1188 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1188 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1294 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:1189 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1189 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1295 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:1190 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1190 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1296 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:1191 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1191 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1297 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:1193 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1193 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1299 rhodecode/model/db.py:1398 msgid "RhodeCode Administrator" msgstr "Administrateur RhodeCode" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1194 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1194 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1300 rhodecode/model/db.py:1399 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:1195 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1195 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1301 rhodecode/model/db.py:1400 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:1196 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1196 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1302 rhodecode/model/db.py:1401 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:1197 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1197 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303 rhodecode/model/db.py:1402 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:1198 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1198 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304 rhodecode/model/db.py:1403 msgid "Register disabled" msgstr "Enregistrement désactivé" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1199 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1199 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305 rhodecode/model/db.py:1404 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:1202 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1202 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308 rhodecode/model/db.py:1407 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:1643 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1643 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1749 rhodecode/model/db.py:1838 msgid "Not Reviewed" msgstr "Pas encore relue" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1644 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1644 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1750 rhodecode/model/db.py:1839 msgid "Approved" msgstr "Approuvée " -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1645 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1645 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1751 rhodecode/model/db.py:1840 msgid "Rejected" msgstr "Rejetée" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1646 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1646 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1752 rhodecode/model/db.py:1841 msgid "Under Review" msgstr "En cours de relecture" -#: rhodecode/model/comment.py:110 +#: rhodecode/model/comment.py:75 #, python-format msgid "on line %s" msgstr "à la ligne %s" -#: rhodecode/model/comment.py:173 +#: rhodecode/model/comment.py:219 msgid "[Mention]" msgstr "[Mention]" +#: rhodecode/model/db.py:1252 +msgid "top level" +msgstr "" + +#: rhodecode/model/db.py:1393 +#, fuzzy +msgid "Repository group no access" +msgstr "Aucun accès au groupe de dépôts" + +#: rhodecode/model/db.py:1394 +#, fuzzy +msgid "Repository group read access" +msgstr "Accès en lecture au groupe de dépôts" + +#: rhodecode/model/db.py:1395 +#, fuzzy +msgid "Repository group write access" +msgstr "Accès en écriture au groupe de dépôts" + +#: rhodecode/model/db.py:1396 +#, fuzzy +msgid "Repository group admin access" +msgstr "Accès administrateur au groupe de dépôts" + #: rhodecode/model/forms.py:43 msgid "Please enter a login" msgstr "Veuillez entrer un identifiant" @@ -1109,63 +1280,65 @@ msgstr "Veuillez entrer un mot de passe" msgid "Enter %(min)i characters or more" msgstr "Entrez au moins %(min)i caractères" -#: rhodecode/model/notification.py:220 -#, 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 -#, fuzzy, python-format -msgid "sent message at %(when)s" -msgstr "a envoyé un message %(when)s" - -#: rhodecode/model/notification.py:222 -#, fuzzy, python-format -msgid "mentioned you at %(when)s" -msgstr "vous a mentioné %(when)s" - -#: rhodecode/model/notification.py:223 -#, fuzzy, python-format -msgid "registered in RhodeCode at %(when)s" -msgstr "s’est enregistré sur RhodeCode %(when)s" - #: rhodecode/model/notification.py:224 #, fuzzy, python-format -msgid "opened new pull request at %(when)s" -msgstr "a ouvert une nouvelle requête de pull %(when)s" +msgid "%(user)s commented on changeset at %(when)s" +msgstr "%(user)s a posté un commentaire sur le commit %(when)s" #: rhodecode/model/notification.py:225 #, 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:542 +msgid "%(user)s sent message at %(when)s" +msgstr "%(user)s a envoyé un message %(when)s" + +#: rhodecode/model/notification.py:226 +#, fuzzy, python-format +msgid "%(user)s mentioned you at %(when)s" +msgstr "%(user)s vous a mentioné %(when)s" + +#: rhodecode/model/notification.py:227 +#, fuzzy, python-format +msgid "%(user)s registered in RhodeCode at %(when)s" +msgstr "%(user)s s’est enregistré sur RhodeCode %(when)s" + +#: rhodecode/model/notification.py:228 +#, fuzzy, python-format +msgid "%(user)s opened new pull request at %(when)s" +msgstr "%(user)s a ouvert une nouvelle requête de pull %(when)s" + +#: rhodecode/model/notification.py:229 +#, fuzzy, python-format +msgid "%(user)s commented on pull request at %(when)s" +msgstr "%(user)s a commenté sur la requête de pull %(when)s" + +#: rhodecode/model/pull_request.py:104 +#, fuzzy, python-format +msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s" +msgstr "" +"%(user)s voudrait que vous examiniez sa requête de pull nº%(pr_id)s: " +"%(pr_title)s" + +#: rhodecode/model/scm.py:598 msgid "latest tip" msgstr "Dernier sommet" #: rhodecode/model/user.py:232 -msgid "new user registration" +#, fuzzy +msgid "New user registration" msgstr "Nouveau compte utilisateur enregistré" #: rhodecode/model/user.py:257 rhodecode/model/user.py:281 -#: rhodecode/model/user.py:303 msgid "You can't Edit this user since it's crucial for entire application" msgstr "" "Vous ne pouvez pas éditer cet utilisateur ; il est nécessaire pour le bon" " fonctionnement de l’application." -#: rhodecode/model/user.py:327 +#: rhodecode/model/user.py:303 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:333 +#: rhodecode/model/user.py:309 #, python-format msgid "" "user \"%s\" still owns %s repositories and cannot be removed. Switch " @@ -1174,21 +1347,36 @@ 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 +#: rhodecode/model/user.py:334 +#, fuzzy +msgid "Password reset link" +msgstr "Réinitialisation du mot de passe" + +#: rhodecode/model/user.py:366 +#, fuzzy +msgid "Your new password" +msgstr "Nouveau mot de passe" + +#: rhodecode/model/user.py:367 +#, python-format +msgid "Your new RhodeCode password:%s" +msgstr "" + +#: rhodecode/model/validators.py:38 rhodecode/model/validators.py:39 msgid "Value cannot be an empty list" msgstr "Cette valeur ne peut être une liste vide." -#: rhodecode/model/validators.py:83 +#: rhodecode/model/validators.py:85 #, python-format msgid "Username \"%(username)s\" already exists" msgstr "Le nom d’utilisateur « %(username)s » existe déjà." -#: rhodecode/model/validators.py:85 +#: rhodecode/model/validators.py:87 #, python-format msgid "Username \"%(username)s\" is forbidden" msgstr "Le nom d’utilisateur « %(username)s » n’est pas autorisé" -#: rhodecode/model/validators.py:87 +#: rhodecode/model/validators.py:89 msgid "" "Username may only contain alphanumeric characters underscores, periods or" " dashes and must begin with alphanumeric character" @@ -1197,119 +1385,132 @@ msgstr "" "numériques ainsi que les caractères suivants : « _ . - ». Il doit " "commencer par un caractère alpha-numérique." -#: rhodecode/model/validators.py:115 +#: rhodecode/model/validators.py:117 #, python-format msgid "Username %(username)s is not valid" msgstr "Le nom d’utilisateur « %(username)s » n’est pas valide." -#: rhodecode/model/validators.py:134 -msgid "Invalid users group name" +#: rhodecode/model/validators.py:136 +#, fuzzy +msgid "Invalid user group name" msgstr "Nom de groupe d’utilisateurs invalide." -#: rhodecode/model/validators.py:135 -#, python-format -msgid "Users group \"%(usersgroup)s\" already exists" -msgstr "Le groupe d’utilisateurs « %(usersgroup)s » existe déjà." - #: rhodecode/model/validators.py:137 +#, fuzzy, python-format +msgid "User group \"%(usergroup)s\" already exists" +msgstr "Le groupe d’utilisateurs « %(usergroup)s » existe déjà." + +#: rhodecode/model/validators.py:139 +#, fuzzy msgid "" -"users group name may only contain alphanumeric characters underscores, " +"user 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 +#: rhodecode/model/validators.py:177 msgid "Cannot assign this group as parent" msgstr "Impossible d’assigner ce groupe en tant que parent." -#: rhodecode/model/validators.py:176 +#: rhodecode/model/validators.py:178 #, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "Le groupe « %(group_name)s » existe déjà." -#: rhodecode/model/validators.py:178 +#: rhodecode/model/validators.py:180 #, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "Un dépôt portant le nom « %(group_name)s » existe déjà." -#: rhodecode/model/validators.py:236 +#: rhodecode/model/validators.py:238 msgid "Invalid characters (non-ascii) in password" msgstr "Caractères incorrects (non-ASCII) dans le mot de passe." -#: rhodecode/model/validators.py:251 +#: rhodecode/model/validators.py:253 msgid "Passwords do not match" msgstr "Les mots de passe ne correspondent pas." -#: rhodecode/model/validators.py:268 +#: rhodecode/model/validators.py:270 msgid "invalid password" msgstr "mot de passe invalide" -#: rhodecode/model/validators.py:269 +#: rhodecode/model/validators.py:271 msgid "invalid user name" msgstr "nom d’utilisateur invalide" -#: rhodecode/model/validators.py:270 +#: rhodecode/model/validators.py:272 msgid "Your account is disabled" msgstr "Votre compte est désactivé" -#: rhodecode/model/validators.py:314 +#: rhodecode/model/validators.py:316 #, python-format msgid "Repository name %(repo)s is disallowed" msgstr "Le nom de dépôt « %(repo)s » n’est pas autorisé." -#: rhodecode/model/validators.py:316 +#: rhodecode/model/validators.py:318 #, python-format msgid "Repository named %(repo)s already exists" msgstr "Un dépôt portant le nom « %(repo)s » existe déjà." -#: rhodecode/model/validators.py:317 +#: rhodecode/model/validators.py:319 #, python-format msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" msgstr "Le dépôt « %(repo)s » existe déjà dans le groupe « %(group)s »." -#: rhodecode/model/validators.py:319 -#, python-format -msgid "Repositories group with name \"%(repo)s\" already exists" +#: rhodecode/model/validators.py:321 +#, fuzzy, python-format +msgid "Repository group with name \"%(repo)s\" already exists" msgstr "Un groupe de dépôts portant le nom « %(repo)s » existe déjà." -#: rhodecode/model/validators.py:432 +#: rhodecode/model/validators.py:438 msgid "invalid clone url" msgstr "URL de clonage invalide." -#: rhodecode/model/validators.py:433 +#: rhodecode/model/validators.py:439 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)." -#: rhodecode/model/validators.py:458 +#: rhodecode/model/validators.py:464 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 +#: rhodecode/model/validators.py:479 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." -#: rhodecode/model/validators.py:498 -msgid "This username or users group name is not valid" +#: rhodecode/model/validators.py:481 +#, fuzzy +msgid "no permission to create repository in root location" +msgstr "Vous n’avez pas la permission de créer un dépôt dans ce groupe." + +#: rhodecode/model/validators.py:518 +#, fuzzy +msgid "You don't have permissions to create a group in this location" +msgstr "Vous n’avez pas la permission de créer un dépôt dans ce groupe." + +#: rhodecode/model/validators.py:557 +#, fuzzy +msgid "This username or user group name is not valid" msgstr "Ce nom d’utilisateur ou de groupe n’est pas valide." -#: rhodecode/model/validators.py:591 +#: rhodecode/model/validators.py:650 msgid "This is not a valid path" msgstr "Ceci n’est pas un chemin valide" -#: rhodecode/model/validators.py:606 +#: rhodecode/model/validators.py:665 msgid "This e-mail address is already taken" msgstr "Cette adresse e-mail est déjà enregistrée" -#: rhodecode/model/validators.py:626 +#: rhodecode/model/validators.py:685 #, python-format msgid "e-mail \"%(email)s\" does not exist." msgstr "L’adresse e-mail « %(email)s » n’existe pas" -#: rhodecode/model/validators.py:663 +#: rhodecode/model/validators.py:722 msgid "" "The LDAP Login attribute of the CN must be specified - this is the name " "of the attribute that is equivalent to \"username\"" @@ -1317,14 +1518,27 @@ msgstr "" "L’attribut Login du CN doit être spécifié. Cet attribut correspond au nom" " d’utilisateur." -#: rhodecode/model/validators.py:682 +#: rhodecode/model/validators.py:735 #, 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." -#: rhodecode/templates/index.html:3 +#: rhodecode/model/validators.py:767 +msgid "Please enter a valid IPv4 or IpV6 address" +msgstr "" + +#: rhodecode/model/validators.py:768 +#, python-format +msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" +msgstr "" + +#: rhodecode/model/validators.py:800 +msgid "Key name can only consist of letters, underscore, dash or numbers" +msgstr "" + +#: rhodecode/templates/index.html:5 msgid "Dashboard" msgstr "Tableau de bord" @@ -1333,205 +1547,229 @@ msgstr "Tableau de bord" #: 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/bookmarks/bookmarks.html:9 #: rhodecode/templates/branches/branches.html:9 #: rhodecode/templates/journal/journal.html:9 -#: rhodecode/templates/journal/journal.html:48 -#: rhodecode/templates/tags/tags.html:10 +#: rhodecode/templates/journal/journal.html:46 +#: rhodecode/templates/journal/journal.html:47 +#: rhodecode/templates/tags/tags.html:9 msgid "quick filter..." msgstr "Filtre rapide…" #: rhodecode/templates/index_base.html:6 #: rhodecode/templates/admin/repos/repos.html:9 -#: rhodecode/templates/base/base.html:233 msgid "repositories" msgstr "Dépôts" #: rhodecode/templates/index_base.html:13 -#: rhodecode/templates/index_base.html:15 +#: rhodecode/templates/index_base.html:18 +#: rhodecode/templates/admin/repos/repo_add.html:5 #: rhodecode/templates/admin/repos/repos.html:21 -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 +msgid "Add repository" +msgstr "Ajouter un dépôt" + +#: rhodecode/templates/index_base.html:15 +#: rhodecode/templates/index_base.html:20 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:31 +#, fuzzy +msgid "Add group" +msgstr "Édition du groupe de dépôt" + +#: rhodecode/templates/index_base.html:27 +#, fuzzy +msgid "Edit group" +msgstr "Édition du groupe de dépôt" + +#: rhodecode/templates/index_base.html:27 +msgid "You have admin right to this group, and can edit it" +msgstr "" + +#: rhodecode/templates/index_base.html:40 +#: rhodecode/templates/index_base.html:140 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:33 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:38 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:43 #: rhodecode/templates/admin/users_groups/users_group_add.html:32 #: rhodecode/templates/admin/users_groups/users_group_edit.html:33 +#: rhodecode/templates/admin/users_groups/users_groups.html:34 msgid "Group name" msgstr "Nom de groupe" -#: 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/index_base.html:41 +#: rhodecode/templates/index_base.html:83 +#: rhodecode/templates/index_base.html:142 +#: rhodecode/templates/index_base.html:180 +#: rhodecode/templates/index_base.html:270 #: 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 +#: rhodecode/templates/admin/repos/repos.html:73 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:42 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:47 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:44 +#: rhodecode/templates/forks/fork.html:56 +#: rhodecode/templates/pullrequests/pullrequest.html:101 +#: rhodecode/templates/summary/summary.html:106 msgid "Description" msgstr "Description" -#: rhodecode/templates/index_base.html:40 -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47 -msgid "Repositories group" -msgstr "Groupe de dépôts" - -#: rhodecode/templates/index_base.html:71 -#: rhodecode/templates/index_base.html:174 -#: rhodecode/templates/index_base.html:264 +#: rhodecode/templates/index_base.html:51 +#: 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_show.html:57 +#: rhodecode/templates/forks/fork.html:47 +msgid "Repository group" +msgstr "Groupe de dépôt" + +#: rhodecode/templates/index_base.html:82 +#: rhodecode/templates/index_base.html:178 +#: rhodecode/templates/index_base.html:268 #: 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/admin/repos/repos.html:71 +#: rhodecode/templates/admin/users/user_edit_my_account.html:172 +#: rhodecode/templates/base/perms_summary.html:14 +#: rhodecode/templates/bookmarks/bookmarks.html:34 #: rhodecode/templates/bookmarks/bookmarks_data.html:6 -#: rhodecode/templates/branches/branches.html:50 +#: rhodecode/templates/branches/branches.html:47 #: rhodecode/templates/branches/branches_data.html:6 #: rhodecode/templates/files/files_browser.html:47 -#: rhodecode/templates/journal/journal.html:70 -#: rhodecode/templates/journal/journal.html:196 -#: 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/journal/journal.html:193 +#: rhodecode/templates/journal/journal.html:296 +#: rhodecode/templates/summary/summary.html:55 +#: rhodecode/templates/summary/summary.html:124 +#: rhodecode/templates/tags/tags.html:48 #: rhodecode/templates/tags/tags_data.html:6 msgid "Name" msgstr "Nom" -#: rhodecode/templates/index_base.html:73 +#: rhodecode/templates/index_base.html:84 msgid "Last change" msgstr "Dernière modification" -#: 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:198 +#: rhodecode/templates/index_base.html:85 +#: rhodecode/templates/index_base.html:183 +#: rhodecode/templates/index_base.html:273 +#: rhodecode/templates/admin/repos/repos.html:74 +#: rhodecode/templates/admin/users/user_edit_my_account.html:174 +#: rhodecode/templates/journal/journal.html:195 +#: rhodecode/templates/journal/journal.html:298 msgid "Tip" msgstr "Sommet" -#: rhodecode/templates/index_base.html:75 -#: rhodecode/templates/index_base.html:181 -#: rhodecode/templates/index_base.html:269 +#: rhodecode/templates/index_base.html:86 +#: rhodecode/templates/index_base.html:185 +#: rhodecode/templates/index_base.html:275 #: rhodecode/templates/admin/repos/repo_edit.html:121 -#: rhodecode/templates/admin/repos/repos.html:73 +#: rhodecode/templates/admin/repos/repos.html:76 msgid "Owner" msgstr "Propriétaire" -#: 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 +#: rhodecode/templates/index_base.html:87 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/index_base.html:171 +#: rhodecode/templates/index_base.html:209 +#: rhodecode/templates/index_base.html:296 +#: rhodecode/templates/admin/repos/repos.html:97 +#: rhodecode/templates/admin/users/user_edit_my_account.html:196 #: rhodecode/templates/admin/users/users.html:107 -#: rhodecode/templates/bookmarks/bookmarks.html:60 -#: rhodecode/templates/branches/branches.html:76 -#: rhodecode/templates/journal/journal.html:221 -#: rhodecode/templates/tags/tags.html:77 +#: rhodecode/templates/bookmarks/bookmarks.html:58 +#: rhodecode/templates/branches/branches.html:73 +#: rhodecode/templates/journal/journal.html:217 +#: rhodecode/templates/journal/journal.html:320 +#: rhodecode/templates/tags/tags.html:74 msgid "Click to sort ascending" msgstr "Tri ascendant" -#: 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/index_base.html:172 +#: rhodecode/templates/index_base.html:210 +#: rhodecode/templates/index_base.html:297 +#: rhodecode/templates/admin/repos/repos.html:98 +#: rhodecode/templates/admin/users/user_edit_my_account.html:197 #: rhodecode/templates/admin/users/users.html:108 -#: rhodecode/templates/bookmarks/bookmarks.html:61 -#: rhodecode/templates/branches/branches.html:77 -#: rhodecode/templates/journal/journal.html:222 -#: rhodecode/templates/tags/tags.html:78 +#: rhodecode/templates/bookmarks/bookmarks.html:59 +#: rhodecode/templates/branches/branches.html:74 +#: rhodecode/templates/journal/journal.html:218 +#: rhodecode/templates/journal/journal.html:321 +#: rhodecode/templates/tags/tags.html:75 msgid "Click to sort descending" msgstr "Tri descendant" -#: rhodecode/templates/index_base.html:177 -#: rhodecode/templates/index_base.html:267 +#: rhodecode/templates/index_base.html:181 +#: rhodecode/templates/index_base.html:271 msgid "Last Change" msgstr "Dernière modification" -#: 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/index_base.html:211 +#: rhodecode/templates/admin/repos/repos.html:99 +#: rhodecode/templates/admin/users/user_edit_my_account.html:198 #: rhodecode/templates/admin/users/users.html:109 -#: rhodecode/templates/bookmarks/bookmarks.html:62 -#: rhodecode/templates/branches/branches.html:78 -#: rhodecode/templates/journal/journal.html:223 -#: rhodecode/templates/tags/tags.html:79 +#: rhodecode/templates/bookmarks/bookmarks.html:60 +#: rhodecode/templates/branches/branches.html:75 +#: rhodecode/templates/journal/journal.html:219 +#: rhodecode/templates/journal/journal.html:322 +#: rhodecode/templates/tags/tags.html:76 msgid "No records found." msgstr "Aucun élément n’a été trouvé." -#: 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/index_base.html:212 +#: rhodecode/templates/index_base.html:299 +#: rhodecode/templates/admin/repos/repos.html:100 +#: rhodecode/templates/admin/users/user_edit_my_account.html:199 #: rhodecode/templates/admin/users/users.html:110 -#: rhodecode/templates/bookmarks/bookmarks.html:63 -#: rhodecode/templates/branches/branches.html:79 -#: rhodecode/templates/journal/journal.html:224 -#: rhodecode/templates/tags/tags.html:80 +#: rhodecode/templates/bookmarks/bookmarks.html:61 +#: rhodecode/templates/branches/branches.html:76 +#: rhodecode/templates/journal/journal.html:220 +#: rhodecode/templates/journal/journal.html:323 +#: rhodecode/templates/tags/tags.html:77 msgid "Data error." msgstr "Erreur d’intégrité des données." -#: 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/index_base.html:213 +#: rhodecode/templates/index_base.html:300 +#: rhodecode/templates/admin/repos/repos.html:101 +#: rhodecode/templates/admin/users/user_edit_my_account.html:58 +#: rhodecode/templates/admin/users/user_edit_my_account.html:200 #: rhodecode/templates/admin/users/users.html:111 -#: rhodecode/templates/bookmarks/bookmarks.html:64 -#: rhodecode/templates/branches/branches.html:80 -#: rhodecode/templates/journal/journal.html:62 -#: rhodecode/templates/journal/journal.html:225 -#: rhodecode/templates/tags/tags.html:81 +#: rhodecode/templates/bookmarks/bookmarks.html:62 +#: rhodecode/templates/branches/branches.html:77 +#: rhodecode/templates/journal/journal.html:221 +#: rhodecode/templates/journal/journal.html:324 +#: rhodecode/templates/tags/tags.html:78 msgid "Loading..." msgstr "Chargement…" -#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54 -msgid "Sign In" +#: rhodecode/templates/index_base.html:298 +#, fuzzy +msgid "No repositories found." +msgstr "Groupes de dépôts" + +#: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:227 +msgid "Log In" msgstr "Connexion" #: rhodecode/templates/login.html:21 -msgid "Sign In to" -msgstr "Connexion à" +#, python-format +msgid "Log In to %s" +msgstr "" #: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20 #: rhodecode/templates/admin/admin_log.html:5 #: rhodecode/templates/admin/users/user_add.html:32 -#: rhodecode/templates/admin/users/user_edit.html:50 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26 -#: rhodecode/templates/base/base.html:83 -#: rhodecode/templates/summary/summary.html:131 +#: rhodecode/templates/admin/users/user_edit.html:57 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:31 +#: rhodecode/templates/admin/users/users.html:77 +#: rhodecode/templates/base/base.html:203 +#: rhodecode/templates/summary/summary.html:123 msgid "Username" msgstr "Nom d’utilisateur" #: 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 +#: rhodecode/templates/base/base.html:212 msgid "Password" msgstr "Mot de passe" @@ -1539,17 +1777,22 @@ msgstr "Mot de passe" msgid "Remember me" msgstr "Se souvenir de moi" +#: rhodecode/templates/login.html:54 +msgid "Sign In" +msgstr "Connexion" + #: rhodecode/templates/login.html:60 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:223 msgid "Don't have an account ?" msgstr "Vous n’avez pas de compte ?" #: rhodecode/templates/password_reset.html:5 -msgid "Reset your password" -msgstr "Mot de passe oublié ?" +#, fuzzy +msgid "Password Reset" +msgstr "Réinitialisation du mot de passe" #: rhodecode/templates/password_reset.html:11 msgid "Reset your password to" @@ -1581,23 +1824,23 @@ msgstr "Confirmation" #: 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 +#: rhodecode/templates/admin/users/user_edit.html:97 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62 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:99 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62 +#: rhodecode/templates/admin/users/user_edit.html:106 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71 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:108 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71 -#: rhodecode/templates/summary/summary.html:133 +#: rhodecode/templates/admin/users/user_edit.html:115 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80 +#: rhodecode/templates/summary/summary.html:125 msgid "Email" msgstr "E-mail" @@ -1609,44 +1852,31 @@ msgstr "Votre compte utilisateur sera actif dès la fin de l’enregistrement." msgid "Your account must wait for activation by administrator" msgstr "Votre compte utilisateur devra être activé par un administrateur." -#: rhodecode/templates/repo_switcher_list.html:11 +#: rhodecode/templates/repo_switcher_list.html:10 #: 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 +#: rhodecode/templates/data_table/_dt_elements.html:61 +#: rhodecode/templates/summary/summary.html:77 msgid "Private repository" msgstr "Dépôt privé" -#: rhodecode/templates/repo_switcher_list.html:16 +#: rhodecode/templates/repo_switcher_list.html:12 +#: rhodecode/templates/data_table/_dt_elements.html:63 +#: rhodecode/templates/summary/summary.html:79 msgid "Public repository" msgstr "Dépôt public" -#: rhodecode/templates/switch_to_list.html:3 -#: rhodecode/templates/branches/branches.html:14 -msgid "branches" -msgstr "Branches" - #: rhodecode/templates/switch_to_list.html:10 #: rhodecode/templates/branches/branches_data.html:57 msgid "There are no branches yet" msgstr "Aucune branche n’a été créée pour le moment." -#: rhodecode/templates/switch_to_list.html:15 -#: rhodecode/templates/shortlog/shortlog_data.html:10 -#: rhodecode/templates/tags/tags.html:15 -msgid "tags" -msgstr "Tags" - #: rhodecode/templates/switch_to_list.html:22 #: rhodecode/templates/tags/tags_data.html:38 msgid "There are no tags yet" msgstr "Aucun tag n’a été créé pour le moment." -#: rhodecode/templates/switch_to_list.html:28 -#: rhodecode/templates/bookmarks/bookmarks.html:15 -msgid "bookmarks" -msgstr "Signets" - #: rhodecode/templates/switch_to_list.html:35 #: rhodecode/templates/bookmarks/bookmarks_data.html:32 msgid "There are no bookmarks yet" @@ -1654,6 +1884,7 @@ msgstr "Aucun signet n’a été créé." #: rhodecode/templates/admin/admin.html:5 #: rhodecode/templates/admin/admin.html:13 +#: rhodecode/templates/base/base.html:68 msgid "Admin journal" msgstr "Historique d’administration" @@ -1677,11 +1908,13 @@ msgstr[0] "" msgstr[1] "" #: 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 +#: rhodecode/templates/admin/repos/repos.html:77 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 +#: rhodecode/templates/admin/users/user_edit_my_account.html:176 +#: rhodecode/templates/admin/users/users.html:87 +#: rhodecode/templates/admin/users_groups/users_groups.html:37 +#: rhodecode/templates/journal/journal.html:197 +#: rhodecode/templates/journal/journal.html:300 msgid "Action" msgstr "Action" @@ -1691,11 +1924,11 @@ msgid "Repository" msgstr "Dépôt" #: rhodecode/templates/admin/admin_log.html:8 -#: rhodecode/templates/bookmarks/bookmarks.html:37 +#: rhodecode/templates/bookmarks/bookmarks.html:35 #: rhodecode/templates/bookmarks/bookmarks_data.html:7 -#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches.html:48 #: rhodecode/templates/branches/branches_data.html:7 -#: rhodecode/templates/tags/tags.html:52 +#: rhodecode/templates/tags/tags.html:49 #: rhodecode/templates/tags/tags_data.html:7 msgid "Date" msgstr "Date" @@ -1715,6 +1948,7 @@ msgid "Repositories defaults" msgstr "Groupes de dépôts" #: rhodecode/templates/admin/defaults/defaults.html:11 +#: rhodecode/templates/base/base.html:75 #, fuzzy msgid "Defaults" msgstr "[Par défaut]" @@ -1728,8 +1962,7 @@ 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 +#: rhodecode/templates/forks/fork.html:69 msgid "" "Private repositories are only visible to people explicitly added as " "collaborators." @@ -1759,7 +1992,7 @@ 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 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72 msgid "Enable locking" msgstr "Activer le verrouillage" @@ -1770,14 +2003,18 @@ 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/permissions/permissions.html:92 +#: rhodecode/templates/admin/repos/repo_edit.html:148 +#: rhodecode/templates/admin/repos/repo_edit.html:173 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:80 #: 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/user_add.html:94 +#: rhodecode/templates/admin/users/user_edit.html:140 +#: rhodecode/templates/admin/users/user_edit.html:185 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:88 +#: rhodecode/templates/admin/users_groups/users_group_add.html:49 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:90 #: rhodecode/templates/admin/users_groups/users_group_edit.html:135 -#: rhodecode/templates/settings/repo_settings.html:94 msgid "Save" msgstr "Enregistrer" @@ -1786,7 +2023,10 @@ msgid "LDAP administration" msgstr "Administration LDAP" #: rhodecode/templates/admin/ldap/ldap.html:11 -msgid "Ldap" +#: rhodecode/templates/admin/users/users.html:86 +#: rhodecode/templates/base/base.html:74 +#, fuzzy +msgid "LDAP" msgstr "LDAP" #: rhodecode/templates/admin/ldap/ldap.html:28 @@ -1867,8 +2107,7 @@ msgid "Comments" msgstr "Commentaires" #: rhodecode/templates/admin/notifications/notifications.html:31 -#: rhodecode/templates/base/base.html:267 -#: rhodecode/templates/base/base.html:269 +#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 msgid "Pull requests" msgstr "Requêtes de pull" @@ -1886,6 +2125,7 @@ msgid "Show notification" msgstr "Notification" #: rhodecode/templates/admin/notifications/show_notification.html:9 +#: rhodecode/templates/base/base.html:241 msgid "Notifications" msgstr "Notifications" @@ -1894,11 +2134,12 @@ msgid "Permissions administration" 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:143 +#: rhodecode/templates/admin/repos/repo_edit.html:158 +#: rhodecode/templates/admin/repos/repo_edit.html:165 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64 +#: rhodecode/templates/admin/users/user_edit.html:150 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100 -#: rhodecode/templates/settings/repo_settings.html:86 +#: rhodecode/templates/base/base.html:73 msgid "Permissions" msgstr "Permissions" @@ -1911,8 +2152,9 @@ msgid "Anonymous access" msgstr "Accès anonyme" #: rhodecode/templates/admin/permissions/permissions.html:49 +#, fuzzy msgid "" -"All default permissions on each repository will be reset to choosen " +"All default permissions on each repository will be reset to chosen " "permission, note that all custom default permission on repositories will " "be lost" msgstr "" @@ -1922,24 +2164,16 @@ msgstr "" #: rhodecode/templates/admin/permissions/permissions.html:50 #: rhodecode/templates/admin/permissions/permissions.html:63 -msgid "overwrite existing settings" +#, fuzzy +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" +"All default permissions on each repository group will be reset to chosen " +"permission, note that all custom default permission on repository groups " +"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 " @@ -1957,40 +2191,99 @@ msgstr "Création de dépôt" msgid "Repository forking" msgstr "Fork de dépôt" -#: rhodecode/templates/admin/permissions/permissions.html:92 -#: rhodecode/templates/admin/repos/repo_edit.html:264 -msgid "set" -msgstr "Définir" - -#: rhodecode/templates/admin/repos/repo_add.html:5 -#: rhodecode/templates/admin/repos/repo_add_create_repository.html:5 -msgid "Add repository" -msgstr "Ajouter un dépôt" - -#: 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 +#: rhodecode/templates/admin/permissions/permissions.html:93 +#: rhodecode/templates/admin/permissions/permissions.html:154 +#: rhodecode/templates/admin/repos/repo_edit.html:149 +#: rhodecode/templates/admin/repos/repo_edit.html:174 +#: rhodecode/templates/admin/repos/repo_edit.html:388 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81 +#: rhodecode/templates/admin/settings/settings.html:115 +#: rhodecode/templates/admin/settings/settings.html:187 +#: rhodecode/templates/admin/settings/settings.html:278 +#: rhodecode/templates/admin/users/user_edit.html:141 +#: rhodecode/templates/admin/users/user_edit.html:186 +#: rhodecode/templates/admin/users/user_edit.html:235 +#: rhodecode/templates/admin/users/user_edit.html:283 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:89 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:136 +#: rhodecode/templates/files/files_add.html:80 +#: rhodecode/templates/files/files_edit.html:66 +#: rhodecode/templates/pullrequests/pullrequest.html:110 +msgid "Reset" +msgstr "Réinitialiser" + +#: rhodecode/templates/admin/permissions/permissions.html:103 +#, fuzzy +msgid "Default User Permissions" +msgstr "Permissions par défaut" + +#: rhodecode/templates/admin/permissions/permissions.html:113 +#: rhodecode/templates/admin/users/user_edit.html:244 +#, fuzzy +msgid "Allowed IP addresses" +msgstr "Adresses e-mail" + +#: rhodecode/templates/admin/permissions/permissions.html:127 +#: rhodecode/templates/admin/repos/repo_edit.html:347 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70 +#: rhodecode/templates/admin/users/user_edit.html:212 +#: rhodecode/templates/admin/users/user_edit.html:257 +#: rhodecode/templates/admin/users_groups/users_groups.html:46 +#: rhodecode/templates/data_table/_dt_elements.html:122 +#: rhodecode/templates/data_table/_dt_elements.html:130 +msgid "delete" +msgstr "Supprimer" + +#: rhodecode/templates/admin/permissions/permissions.html:128 +#: rhodecode/templates/admin/users/user_edit.html:258 +#, fuzzy, python-format +msgid "Confirm to delete this ip: %s" +msgstr "Veuillez confirmer la suppression de l’e-mail : %s" + +#: rhodecode/templates/admin/permissions/permissions.html:134 +#: rhodecode/templates/admin/users/user_edit.html:264 +msgid "All IP addresses are allowed" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:145 +#: rhodecode/templates/admin/users/user_edit.html:275 +#, fuzzy +msgid "New ip address" +msgstr "Nouvelle adrese" + +#: rhodecode/templates/admin/permissions/permissions.html:153 +#: rhodecode/templates/admin/repos/repo_add_base.html:73 +#: rhodecode/templates/admin/repos/repo_edit.html:387 +#: rhodecode/templates/admin/users/user_edit.html:234 +#: rhodecode/templates/admin/users/user_edit.html:282 +msgid "Add" +msgstr "Ajouter" + +#: rhodecode/templates/admin/repos/repo_add.html:12 +#: rhodecode/templates/admin/repos/repo_add.html:16 +#: rhodecode/templates/base/base.html:69 rhodecode/templates/base/base.html:103 +#: rhodecode/templates/base/base.html:263 msgid "Repositories" msgstr "Dépôts" -#: rhodecode/templates/admin/repos/repo_add.html:13 -msgid "add new" +#: rhodecode/templates/admin/repos/repo_add.html:19 +#, fuzzy +msgid "Add new" msgstr "ajouter un nouveau" #: rhodecode/templates/admin/repos/repo_add_base.html:20 -#: rhodecode/templates/summary/summary.html:104 -#: rhodecode/templates/summary/summary.html:105 +#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:97 msgid "Clone from" msgstr "Cloner depuis" #: 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 "URL http(s) depuis laquelle le dépôt doit être cloné." #: rhodecode/templates/admin/repos/repo_add_base.html:33 -#: rhodecode/templates/forks/fork.html:54 +#: rhodecode/templates/forks/fork.html:51 msgid "Optionaly select a group to put this repository into." msgstr "Sélectionnez un groupe (optionel) dans lequel sera placé le dépôt." @@ -2000,15 +2293,13 @@ msgstr "Type de dépôt à créer." #: 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 +#: rhodecode/templates/forks/fork.html:38 msgid "Landing revision" msgstr "Révision d’arrivée" #: 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 +#: rhodecode/templates/forks/fork.html:42 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 " @@ -2016,45 +2307,29 @@ msgstr "" #: 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 +#: rhodecode/templates/forks/fork.html:60 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:73 -msgid "add" -msgstr "Ajouter" - -#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9 -msgid "add new repository" -msgstr "ajouter un nouveau dépôt" - -#: rhodecode/templates/admin/repos/repo_edit.html:5 +#: rhodecode/templates/admin/repos/repo_edit.html:8 msgid "Edit repository" 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: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 "éditer" +#: rhodecode/templates/admin/repos/repo_edit.html:12 +#: rhodecode/templates/admin/settings/hooks.html:9 +#: rhodecode/templates/admin/settings/settings.html:11 +#: rhodecode/templates/base/base.html:76 rhodecode/templates/base/base.html:121 +#: rhodecode/templates/summary/summary.html:212 +msgid "Settings" +msgstr "Options" #: rhodecode/templates/admin/repos/repo_edit.html:40 -#: rhodecode/templates/settings/repo_settings.html:39 msgid "Clone uri" msgstr "URL de clone" #: 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 "Sélectionnez un groupe (optionel) dans lequel sera placé le dépôt." @@ -2062,72 +2337,56 @@ msgstr "Sélectionnez un groupe (optionel) dans lequel sera placé le dépôt." msgid "Change owner of this repository." 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: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:95 -msgid "Reset" -msgstr "Réinitialiser" - -#: rhodecode/templates/admin/repos/repo_edit.html:152 -msgid "Administration" -msgstr "Administration" - -#: rhodecode/templates/admin/repos/repo_edit.html:155 +#: rhodecode/templates/admin/repos/repo_edit.html:184 +#, fuzzy +msgid "Advanced settings" +msgstr "Enregister les options" + +#: rhodecode/templates/admin/repos/repo_edit.html:187 msgid "Statistics" msgstr "Statistiques" -#: rhodecode/templates/admin/repos/repo_edit.html:159 +#: rhodecode/templates/admin/repos/repo_edit.html:191 msgid "Reset current statistics" msgstr "Réinitialiser les statistiques" -#: rhodecode/templates/admin/repos/repo_edit.html:159 +#: rhodecode/templates/admin/repos/repo_edit.html:191 msgid "Confirm to remove current statistics" msgstr "Souhaitez-vous vraiment réinitialiser les statistiques de ce dépôt ?" -#: rhodecode/templates/admin/repos/repo_edit.html:162 +#: rhodecode/templates/admin/repos/repo_edit.html:194 msgid "Fetched to rev" msgstr "Parcouru jusqu’à la révision" -#: rhodecode/templates/admin/repos/repo_edit.html:163 +#: rhodecode/templates/admin/repos/repo_edit.html:195 msgid "Stats gathered" msgstr "Statistiques obtenues" -#: rhodecode/templates/admin/repos/repo_edit.html:171 +#: rhodecode/templates/admin/repos/repo_edit.html:203 msgid "Remote" msgstr "Dépôt distant" -#: rhodecode/templates/admin/repos/repo_edit.html:175 +#: rhodecode/templates/admin/repos/repo_edit.html:207 msgid "Pull changes from remote location" msgstr "Récupérer les changements depuis le site distant" -#: rhodecode/templates/admin/repos/repo_edit.html:175 +#: rhodecode/templates/admin/repos/repo_edit.html:207 msgid "Confirm to pull changes from remote side" msgstr "Voulez-vous vraiment récupérer les changements depuis le site distant ?" -#: rhodecode/templates/admin/repos/repo_edit.html:186 +#: rhodecode/templates/admin/repos/repo_edit.html:218 msgid "Cache" msgstr "Cache" -#: rhodecode/templates/admin/repos/repo_edit.html:190 +#: rhodecode/templates/admin/repos/repo_edit.html:222 msgid "Invalidate repository cache" msgstr "Invalider le cache du dépôt" -#: rhodecode/templates/admin/repos/repo_edit.html:190 +#: rhodecode/templates/admin/repos/repo_edit.html:222 msgid "Confirm to invalidate repository cache" msgstr "Voulez-vous vraiment invalider le cache du dépôt ?" -#: rhodecode/templates/admin/repos/repo_edit.html:193 +#: rhodecode/templates/admin/repos/repo_edit.html:225 msgid "" "Manually invalidate cache for this repository. On first access repository" " will be cached again" @@ -2135,43 +2394,44 @@ 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 +#: rhodecode/templates/admin/repos/repo_edit.html:230 msgid "List of cached values" msgstr "Liste des valeurs en cache" -#: rhodecode/templates/admin/repos/repo_edit.html:201 +#: rhodecode/templates/admin/repos/repo_edit.html:233 msgid "Prefix" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:202 +#: rhodecode/templates/admin/repos/repo_edit.html:234 #, fuzzy msgid "Key" msgstr "Clé d’API" -#: rhodecode/templates/admin/repos/repo_edit.html:203 +#: rhodecode/templates/admin/repos/repo_edit.html:235 #: rhodecode/templates/admin/users/user_add.html:86 -#: rhodecode/templates/admin/users/user_edit.html:117 +#: rhodecode/templates/admin/users/user_edit.html:124 +#: rhodecode/templates/admin/users/users.html:84 #: rhodecode/templates/admin/users_groups/users_group_add.html:41 #: rhodecode/templates/admin/users_groups/users_group_edit.html:42 +#: rhodecode/templates/admin/users_groups/users_groups.html:36 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 +#: rhodecode/templates/admin/repos/repo_edit.html:250 +#: rhodecode/templates/base/base.html:280 +#: rhodecode/templates/base/base.html:281 msgid "Public journal" msgstr "Journal public" -#: rhodecode/templates/admin/repos/repo_edit.html:224 +#: rhodecode/templates/admin/repos/repo_edit.html:256 msgid "Remove from public journal" msgstr "Supprimer du journal public" -#: rhodecode/templates/admin/repos/repo_edit.html:226 +#: rhodecode/templates/admin/repos/repo_edit.html:258 msgid "Add to public journal" msgstr "Ajouter le dépôt au journal public" -#: rhodecode/templates/admin/repos/repo_edit.html:231 +#: rhodecode/templates/admin/repos/repo_edit.html:263 msgid "" "All actions made on this repository will be accessible to everyone in " "public journal" @@ -2179,66 +2439,84 @@ 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 +#: rhodecode/templates/admin/repos/repo_edit.html:270 msgid "Locking" msgstr "Verrouillage" -#: rhodecode/templates/admin/repos/repo_edit.html:243 +#: rhodecode/templates/admin/repos/repo_edit.html:275 msgid "Unlock locked repo" msgstr "Déverrouiller le dépôt" -#: rhodecode/templates/admin/repos/repo_edit.html:243 +#: rhodecode/templates/admin/repos/repo_edit.html:275 msgid "Confirm to unlock repository" msgstr "Veuillez confirmer le déverrouillage de ce dépôt." -#: rhodecode/templates/admin/repos/repo_edit.html:246 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "lock repo" msgstr "Verrouiller le dépôt" -#: rhodecode/templates/admin/repos/repo_edit.html:246 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "Confirm to lock repository" msgstr "Veuillez confirmer le verrouillage de ce dépôt." -#: rhodecode/templates/admin/repos/repo_edit.html:247 +#: rhodecode/templates/admin/repos/repo_edit.html:279 msgid "Repository is not locked" msgstr "Ce dépôt n’est pas verrouillé." -#: rhodecode/templates/admin/repos/repo_edit.html:252 +#: rhodecode/templates/admin/repos/repo_edit.html:284 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:259 +#: rhodecode/templates/admin/repos/repo_edit.html:291 msgid "Set as fork of" msgstr "Indiquer comme fork" -#: rhodecode/templates/admin/repos/repo_edit.html:268 +#: rhodecode/templates/admin/repos/repo_edit.html:296 +msgid "set" +msgstr "Définir" + +#: rhodecode/templates/admin/repos/repo_edit.html:300 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:274 -#: rhodecode/templates/changeset/changeset_file_comment.html:26 +#: rhodecode/templates/admin/repos/repo_edit.html:306 +#: rhodecode/templates/changeset/changeset_file_comment.html:41 msgid "Delete" msgstr "Supprimer" -#: rhodecode/templates/admin/repos/repo_edit.html:278 -#: rhodecode/templates/settings/repo_settings.html:115 +#: rhodecode/templates/admin/repos/repo_edit.html:315 msgid "Remove this repository" msgstr "Supprimer ce dépôt" -#: rhodecode/templates/admin/repos/repo_edit.html:278 -#: rhodecode/templates/settings/repo_settings.html:115 +#: rhodecode/templates/admin/repos/repo_edit.html:315 msgid "Confirm to delete this repository" msgstr "Voulez-vous vraiment supprimer ce dépôt ?" -#: rhodecode/templates/admin/repos/repo_edit.html:282 -#: rhodecode/templates/settings/repo_settings.html:119 +#: rhodecode/templates/admin/repos/repo_edit.html:317 +#, fuzzy, python-format +msgid "this repository has %s fork" +msgid_plural "this repository has %s forks" +msgstr[0] "[a créé] le dépôt en tant que %s fork" +msgstr[1] "[a créé] le dépôt en tant que %s fork" + +#: rhodecode/templates/admin/repos/repo_edit.html:318 +#, fuzzy +msgid "Detach forks" +msgstr "Indiquer comme fork" + +#: rhodecode/templates/admin/repos/repo_edit.html:319 +#, fuzzy +msgid "Delete forks" +msgstr "Supprimer" + +#: rhodecode/templates/admin/repos/repo_edit.html:322 #, fuzzy msgid "" "This repository will be renamed in a special way in order to be " -"unaccesible for RhodeCode and VCS systems. If you need fully delete it " -"from file system please do it manually" +"unaccesible for RhodeCode and VCS systems. If you need to fully delete it" +" from file system 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" @@ -2248,6 +2526,37 @@ msgstr "" "Si vous voulez le supprimer complètement, effectuez la suppression " "manuellement." +#: rhodecode/templates/admin/repos/repo_edit.html:336 +msgid "Extra fields" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:348 +#, fuzzy, python-format +msgid "Confirm to delete this field: %s" +msgstr "Veuillez confirmer la suppression de l’e-mail : %s" + +#: rhodecode/templates/admin/repos/repo_edit.html:362 +#, fuzzy +msgid "New field key" +msgstr "Ajouter un fichier" + +#: rhodecode/templates/admin/repos/repo_edit.html:370 +msgid "New field label" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:373 +msgid "Enter short label" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:379 +#, fuzzy +msgid "New field description" +msgstr "Description" + +#: rhodecode/templates/admin/repos/repo_edit.html:382 +msgid "Enter description of a field" +msgstr "" + #: rhodecode/templates/admin/repos/repo_edit_perms.html:3 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3 msgid "none" @@ -2265,8 +2574,6 @@ 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:229 msgid "admin" msgstr "Administration" @@ -2276,80 +2583,62 @@ msgid "member" msgstr "Membre" #: rhodecode/templates/admin/repos/repo_edit_perms.html:16 -#: rhodecode/templates/data_table/_dt_elements.html:67 -#: rhodecode/templates/journal/journal.html:95 -#: rhodecode/templates/summary/summary.html:85 msgid "private repository" msgstr "Dépôt privé" #: 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 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:20 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:35 msgid "default" msgstr "[Par défaut]" #: 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 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:25 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:55 msgid "revoke" msgstr "Révoquer" #: rhodecode/templates/admin/repos/repo_edit_perms.html:83 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:67 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:80 msgid "Add another member" msgstr "Ajouter un utilisateur" #: rhodecode/templates/admin/repos/repo_edit_perms.html:97 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:100 msgid "Failed to remove user" msgstr "Échec de suppression de l’utilisateur" #: 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" +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:116 +#, fuzzy +msgid "Failed to remove user group" msgstr "Erreur lors de la suppression du groupe d’utilisateurs." #: rhodecode/templates/admin/repos/repos.html:5 msgid "Repositories administration" msgstr "Administration des dépôts" -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:86 msgid "apply to children" msgstr "Appliquer aux enfants" -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 +#, fuzzy msgid "" -"Set or revoke permission to all children of that group, including " -"repositories and other groups" +"Set or revoke permission to all children of that group, including non-" +"private 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:4 +#, python-format +msgid "%s Group Dashboard" +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 "Accueil" @@ -2358,40 +2647,48 @@ msgid "with" msgstr "comprenant" #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5 -msgid "Add repos group" -msgstr "Créer un groupe de dépôt" - -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10 -msgid "Repos groups" -msgstr "Groupes de dépôts" - -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12 -msgid "add new repos group" +#, fuzzy +msgid "Add repository group" +msgstr "Groupe de dépôt" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:16 +#: rhodecode/templates/base/base.html:70 rhodecode/templates/base/base.html:82 +#, fuzzy +msgid "Repository groups" +msgstr "Groupe de dépôt" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:13 +#, fuzzy +msgid "Add new repository group" msgstr "Nouveau groupe de dépôt" -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:51 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:56 msgid "Group parent" msgstr "Parent du groupe" -#: 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 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:59 msgid "save" msgstr "Enregistrer" #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5 -msgid "Edit repos group" -msgstr "Éditer le groupe de dépôt" - -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12 -msgid "edit repos group" +#, fuzzy +msgid "Edit repository group" msgstr "Édition du groupe de dépôt" -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:13 +#, fuzzy, python-format +msgid "Edit repository group %s" +msgstr "Édition du groupe de dépôt %s" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:27 +#, fuzzy +msgid "Add child group" +msgstr "Ajouter un nouveau groupe" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:76 msgid "" "Enable lock-by-pulling on group. This option will be applied to all other" " groups and repositories inside" @@ -2400,40 +2697,38 @@ msgstr "" "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" +#, fuzzy +msgid "Repository groups administration" msgstr "Administration des groupes de dépôts" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22 -msgid "ADD NEW GROUP" -msgstr "AJOUTER UN NOUVEAU GROUPE" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:45 msgid "Number of toplevel repositories" msgstr "Nombre de sous-dépôts" -#: 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 "Action" - -#: 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 "Supprimer" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:64 +#, fuzzy +msgid "Edit" +msgstr "éditer" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:65 +#: rhodecode/templates/base/perms_summary.html:29 +#: rhodecode/templates/base/perms_summary.html:48 +#: rhodecode/templates/base/perms_summary.html:50 +#: rhodecode/templates/data_table/_dt_elements.html:116 +#: rhodecode/templates/data_table/_dt_elements.html:117 +msgid "edit" +msgstr "éditer" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70 #, 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" +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:78 +#, fuzzy +msgid "There are no repository groups yet" msgstr "Aucun groupe de dépôts n’a été créé pour le moment." #: rhodecode/templates/admin/settings/hooks.html:5 @@ -2441,12 +2736,6 @@ msgstr "Aucun groupe de dépôts n’a été créé pour le moment." msgid "Settings administration" msgstr "Administration générale" -#: rhodecode/templates/admin/settings/hooks.html:9 -#: rhodecode/templates/admin/settings/settings.html:9 -#: rhodecode/templates/settings/repo_settings.html:13 -msgid "Settings" -msgstr "Options" - #: rhodecode/templates/admin/settings/hooks.html:24 msgid "Built in hooks - read only" msgstr "Hooks prédéfinis (lecture seule)" @@ -2463,15 +2752,16 @@ msgstr "Enlever" msgid "Failed to remove hook" msgstr "Erreur lors de la suppression du hook." -#: rhodecode/templates/admin/settings/settings.html:24 +#: rhodecode/templates/admin/settings/settings.html:26 msgid "Remap and rescan repositories" msgstr "Ré-associer et re-scanner les dépôts" -#: rhodecode/templates/admin/settings/settings.html:32 -msgid "rescan option" +#: rhodecode/templates/admin/settings/settings.html:34 +#, fuzzy +msgid "Rescan option" msgstr "Option de re-scan" -#: rhodecode/templates/admin/settings/settings.html:38 +#: rhodecode/templates/admin/settings/settings.html:40 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 " @@ -2480,11 +2770,12 @@ 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" +#: rhodecode/templates/admin/settings/settings.html:41 +#, fuzzy +msgid "Destroy old data" msgstr "Supprimer les données obsolètes" -#: rhodecode/templates/admin/settings/settings.html:41 +#: rhodecode/templates/admin/settings/settings.html:43 msgid "" "Rescan repositories location for new repositories. Also deletes obsolete " "if `destroy` flag is checked " @@ -2493,94 +2784,102 @@ msgstr "" "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 +#: rhodecode/templates/admin/settings/settings.html:48 msgid "Rescan repositories" msgstr "Re-scanner les dépôts" -#: rhodecode/templates/admin/settings/settings.html:52 +#: rhodecode/templates/admin/settings/settings.html:54 msgid "Whoosh indexing" msgstr "Indexation Whoosh" -#: rhodecode/templates/admin/settings/settings.html:60 -msgid "index build option" +#: rhodecode/templates/admin/settings/settings.html:62 +#, fuzzy +msgid "Index build option" msgstr "Option d’indexation" -#: rhodecode/templates/admin/settings/settings.html:65 -msgid "build from scratch" +#: rhodecode/templates/admin/settings/settings.html:67 +#, fuzzy +msgid "Build from scratch" msgstr "Purger et reconstruire l’index" -#: rhodecode/templates/admin/settings/settings.html:71 +#: rhodecode/templates/admin/settings/settings.html:73 msgid "Reindex" msgstr "Mettre à jour l’index" -#: rhodecode/templates/admin/settings/settings.html:77 +#: rhodecode/templates/admin/settings/settings.html:79 msgid "Global application settings" msgstr "Réglages d’application globaux" -#: rhodecode/templates/admin/settings/settings.html:86 -msgid "Application name" -msgstr "Nom de l’application" - -#: rhodecode/templates/admin/settings/settings.html:95 -msgid "Realm text" -msgstr "Texte du royaume" - -#: rhodecode/templates/admin/settings/settings.html:104 -msgid "GA code" -msgstr "Code GA" - -#: rhodecode/templates/admin/settings/settings.html:112 -#: rhodecode/templates/admin/settings/settings.html:178 -#: rhodecode/templates/admin/settings/settings.html:268 +#: rhodecode/templates/admin/settings/settings.html:88 +msgid "Site branding" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:97 +msgid "HTTP authentication realm" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:106 +msgid "Google Analytics code" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:114 +#: rhodecode/templates/admin/settings/settings.html:186 +#: rhodecode/templates/admin/settings/settings.html:277 msgid "Save settings" msgstr "Enregister les options" -#: rhodecode/templates/admin/settings/settings.html:119 +#: rhodecode/templates/admin/settings/settings.html:121 msgid "Visualisation settings" msgstr "Réglages d’affichage" -#: rhodecode/templates/admin/settings/settings.html:127 +#: rhodecode/templates/admin/settings/settings.html:129 #, fuzzy msgid "General" msgstr "Activer" -#: rhodecode/templates/admin/settings/settings.html:132 +#: rhodecode/templates/admin/settings/settings.html:134 msgid "Use lightweight dashboard" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:139 +#: rhodecode/templates/admin/settings/settings.html:140 +#, fuzzy +msgid "Use repository extra fields" +msgstr "Dépôts" + +#: rhodecode/templates/admin/settings/settings.html:147 msgid "Icons" msgstr "Icônes" -#: rhodecode/templates/admin/settings/settings.html:144 +#: rhodecode/templates/admin/settings/settings.html:152 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 +#: rhodecode/templates/admin/settings/settings.html:156 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 +#: rhodecode/templates/admin/settings/settings.html:163 msgid "Meta-Tagging" msgstr "Meta-Tagging" -#: rhodecode/templates/admin/settings/settings.html:160 +#: rhodecode/templates/admin/settings/settings.html:168 msgid "Stylify recognised metatags:" msgstr "Styliser les méta-tags reconnus :" -#: rhodecode/templates/admin/settings/settings.html:187 +#: rhodecode/templates/admin/settings/settings.html:195 msgid "VCS settings" msgstr "Réglages de gestionnaire de version" -#: rhodecode/templates/admin/settings/settings.html:196 +#: rhodecode/templates/admin/settings/settings.html:204 msgid "Web" msgstr "Web" -#: rhodecode/templates/admin/settings/settings.html:201 -msgid "require ssl for vcs operations" +#: rhodecode/templates/admin/settings/settings.html:209 +#, fuzzy +msgid "Require SSL for vcs operations" msgstr "SSL requis pour les opérations de push/pull" -#: rhodecode/templates/admin/settings/settings.html:203 +#: rhodecode/templates/admin/settings/settings.html:211 msgid "" "RhodeCode will require SSL for pushing or pulling. If SSL is missing it " "will return HTTP Error 406: Not Acceptable" @@ -2588,55 +2887,59 @@ 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 +#: rhodecode/templates/admin/settings/settings.html:217 msgid "Hooks" msgstr "Hooks" -#: rhodecode/templates/admin/settings/settings.html:214 +#: rhodecode/templates/admin/settings/settings.html:222 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:218 +#: rhodecode/templates/admin/settings/settings.html:226 msgid "Show repository size after push" msgstr "Afficher la taille du dépôt après un push" -#: rhodecode/templates/admin/settings/settings.html:222 +#: rhodecode/templates/admin/settings/settings.html:230 msgid "Log user push commands" msgstr "Journaliser les commandes de push" -#: rhodecode/templates/admin/settings/settings.html:226 +#: rhodecode/templates/admin/settings/settings.html:234 msgid "Log user pull commands" msgstr "Journaliser les commandes de pull" -#: rhodecode/templates/admin/settings/settings.html:230 -msgid "advanced setup" +#: rhodecode/templates/admin/settings/settings.html:238 +#, fuzzy +msgid "Advanced setup" msgstr "Avancé" -#: rhodecode/templates/admin/settings/settings.html:235 +#: rhodecode/templates/admin/settings/settings.html:243 msgid "Mercurial Extensions" msgstr "Extensions Mercurial" -#: rhodecode/templates/admin/settings/settings.html:240 -msgid "largefiles extensions" +#: rhodecode/templates/admin/settings/settings.html:248 +#, fuzzy +msgid "Enable largefiles extension" msgstr "Extensions largefiles" -#: rhodecode/templates/admin/settings/settings.html:244 -msgid "hgsubversion extensions" +#: rhodecode/templates/admin/settings/settings.html:252 +#, fuzzy +msgid "Enable hgsubversion extension" msgstr "Extensions hgsubversion" -#: rhodecode/templates/admin/settings/settings.html:246 +#: rhodecode/templates/admin/settings/settings.html:254 +#, fuzzy msgid "" -"Requires hgsubversion library installed. Allows clonning from svn remote " +"Requires hgsubversion library installed. Allows cloning 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 +#: rhodecode/templates/admin/settings/settings.html:264 msgid "Repositories location" msgstr "Emplacement des dépôts" -#: rhodecode/templates/admin/settings/settings.html:261 +#: rhodecode/templates/admin/settings/settings.html:269 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 " @@ -2646,12 +2949,13 @@ msgstr "" "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" +#: rhodecode/templates/admin/settings/settings.html:270 +#: rhodecode/templates/base/base.html:131 +#, fuzzy +msgid "Unlock" msgstr "Déverrouiller" -#: rhodecode/templates/admin/settings/settings.html:263 +#: rhodecode/templates/admin/settings/settings.html:272 msgid "" "Location where repositories are stored. After changing this value a " "restart, and rescan is required" @@ -2659,25 +2963,26 @@ 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 +#: rhodecode/templates/admin/settings/settings.html:292 msgid "Test Email" msgstr "E-mail de test" -#: rhodecode/templates/admin/settings/settings.html:291 +#: rhodecode/templates/admin/settings/settings.html:300 msgid "Email to" msgstr "Envoyer l’e-mail à" -#: rhodecode/templates/admin/settings/settings.html:299 +#: rhodecode/templates/admin/settings/settings.html:308 msgid "Send" msgstr "Envoyer" -#: rhodecode/templates/admin/settings/settings.html:305 +#: rhodecode/templates/admin/settings/settings.html:314 msgid "System Info and Packages" msgstr "Information système et paquets" -#: rhodecode/templates/admin/settings/settings.html:308 -msgid "show" -msgstr "Montrer" +#: rhodecode/templates/admin/settings/settings.html:317 +#: rhodecode/templates/changelog/changelog.html:42 +msgid "Show" +msgstr "Afficher" #: rhodecode/templates/admin/users/user_add.html:5 msgid "Add user" @@ -2685,11 +2990,14 @@ msgstr "Ajouter un utilisateur" #: rhodecode/templates/admin/users/user_add.html:10 #: rhodecode/templates/admin/users/user_edit.html:11 +#: rhodecode/templates/base/base.html:71 msgid "Users" msgstr "Utilisateurs" #: rhodecode/templates/admin/users/user_add.html:12 -msgid "add new user" +#: rhodecode/templates/admin/users/users.html:23 +#, fuzzy +msgid "Add new user" msgstr "nouvel utilisateur" #: rhodecode/templates/admin/users/user_add.html:50 @@ -2700,6 +3008,12 @@ msgstr "Confirmation" msgid "Edit user" msgstr "Éditer l'utilisateur" +#: rhodecode/templates/admin/users/user_edit.html:13 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:13 +#, fuzzy, python-format +msgid "Edit %s" +msgstr "éditer %s" + #: rhodecode/templates/admin/users/user_edit.html:34 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:10 msgid "Change your avatar at" @@ -2715,26 +3029,31 @@ msgstr "en utilisant l’adresse" msgid "API key" msgstr "Clé d’API" -#: rhodecode/templates/admin/users/user_edit.html:63 +#: rhodecode/templates/admin/users/user_edit.html:50 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:25 +msgid "Current IP" +msgstr "" + +#: rhodecode/templates/admin/users/user_edit.html:70 msgid "LDAP DN" msgstr "DN LDAP" -#: rhodecode/templates/admin/users/user_edit.html:72 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35 +#: rhodecode/templates/admin/users/user_edit.html:79 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 msgid "New password" msgstr "Nouveau mot de passe" -#: rhodecode/templates/admin/users/user_edit.html:81 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 +#: rhodecode/templates/admin/users/user_edit.html:88 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53 msgid "New password confirmation" msgstr "Confirmation du nouveau mot de passe" -#: rhodecode/templates/admin/users/user_edit.html:151 +#: rhodecode/templates/admin/users/user_edit.html:158 #: 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:156 +#: rhodecode/templates/admin/users/user_edit.html:163 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113 #, python-format msgid "" @@ -2744,53 +3063,31 @@ 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/user_edit.html:169 #: 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:170 +#: rhodecode/templates/admin/users/user_edit.html:177 #: 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: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: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 "Permission" - -#: 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:247 +#: rhodecode/templates/admin/users/user_edit.html:200 msgid "Email addresses" msgstr "Adresses e-mail" -#: rhodecode/templates/admin/users/user_edit.html:260 +#: rhodecode/templates/admin/users/user_edit.html:213 #, 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:274 +#: rhodecode/templates/admin/users/user_edit.html:227 msgid "New email address" msgstr "Nouvelle adrese" -#: rhodecode/templates/admin/users/user_edit.html:281 -msgid "Add" -msgstr "Ajouter" - #: rhodecode/templates/admin/users/user_edit_my_account.html:5 -#: rhodecode/templates/base/base.html:124 +#: rhodecode/templates/base/base.html:242 msgid "My account" msgstr "Mon compte" @@ -2803,7 +3100,7 @@ msgid "My permissions" msgstr "Mes permissions" #: rhodecode/templates/admin/users/user_edit_my_account.html:38 -#: rhodecode/templates/journal/journal.html:49 +#: rhodecode/templates/journal/journal.html:54 msgid "My repos" msgstr "Mes dépôts" @@ -2811,132 +3108,107 @@ msgstr "Mes dépôts" msgid "My pull requests" msgstr "Mes requêtes de pull" -#: rhodecode/templates/admin/users/user_edit_my_account.html:45 -msgid "Add repo" -msgstr "Ajouter un dépôt" - #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:2 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:4 +#, fuzzy +msgid "Show closed pull requests" +msgstr "[a fermé] la requête de pull de" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:6 msgid "Opened by me" msgstr "Ouvertes par moi" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15 #, python-format msgid "Pull request #%s opened on %s" msgstr "Requête de pull nº%s ouverte le %s" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:17 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:45 +#: rhodecode/templates/pullrequests/pullrequest_data.html:7 +#: rhodecode/templates/pullrequests/pullrequest_show.html:27 +#: rhodecode/templates/pullrequests/pullrequest_show.html:42 +msgid "Closed" +msgstr "Fermée" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:23 msgid "Confirm to delete this pull request" msgstr "Veuillez confirmer la suppression de cette requête de pull." -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:26 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:30 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:51 +msgid "Nothing here yet" +msgstr "Rien ici pour le moment" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:34 msgid "I participate in" msgstr "Je participe à" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:33 -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:30 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:42 +#: rhodecode/templates/pullrequests/pullrequest_data.html:11 #, python-format msgid "Pull request #%s opened by %s on %s" 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: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_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_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_page_repos.html:44 -msgid "create one now" -msgstr "En créer un maintenant" - #: rhodecode/templates/admin/users/users.html:5 msgid "Users administration" msgstr "Administration des utilisateurs" #: rhodecode/templates/admin/users/users.html:9 -#: rhodecode/templates/base/base.html:235 msgid "users" msgstr "Utilisateurs" -#: rhodecode/templates/admin/users/users.html:23 -msgid "ADD NEW USER" -msgstr "NOUVEL UTILISATEUR" - -#: rhodecode/templates/admin/users/users.html:77 -msgid "username" -msgstr "Nom d’utilisateur" - #: rhodecode/templates/admin/users/users.html:80 -msgid "firstname" +#, fuzzy +msgid "Firstname" msgstr "Prénom" #: rhodecode/templates/admin/users/users.html:81 -msgid "lastname" +#, fuzzy +msgid "Lastname" msgstr "Nom de famille" #: rhodecode/templates/admin/users/users.html:82 -msgid "last login" +#, fuzzy +msgid "Last login" msgstr "Dernière connexion" -#: rhodecode/templates/admin/users/users.html:84 -#: rhodecode/templates/admin/users_groups/users_groups.html:34 -msgid "active" -msgstr "Actif" - -#: 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" +#, fuzzy +msgid "Add user group" msgstr "Ajouter un groupe d’utilisateur" #: rhodecode/templates/admin/users_groups/users_group_add.html:10 -#: rhodecode/templates/admin/users_groups/users_groups.html:9 -msgid "Users groups" +#: rhodecode/templates/admin/users_groups/users_groups.html:11 +#: rhodecode/templates/base/base.html:72 +#, fuzzy +msgid "User groups" msgstr "Groupes d’utilisateurs" #: rhodecode/templates/admin/users_groups/users_group_add.html:12 -msgid "add new users group" +#: rhodecode/templates/admin/users_groups/users_groups.html:25 +#, fuzzy +msgid "Add new user group" msgstr "Ajouter un nouveau groupe" #: rhodecode/templates/admin/users_groups/users_group_edit.html:5 -msgid "Edit users group" +#, fuzzy +msgid "Edit user group" msgstr "Éditer le groupe d’utilisateurs" #: rhodecode/templates/admin/users_groups/users_group_edit.html:11 -msgid "UsersGroups" -msgstr "UsersGroups" +#, fuzzy +msgid "UserGroups" +msgstr "Groupes d’utilisateurs" #: rhodecode/templates/admin/users_groups/users_group_edit.html:50 +#: rhodecode/templates/admin/users_groups/users_groups.html:35 msgid "Members" msgstr "Membres" #: rhodecode/templates/admin/users_groups/users_group_edit.html:58 -msgid "Choosen group members" +#, fuzzy +msgid "Chosen group members" msgstr "Membres du groupe" #: rhodecode/templates/admin/users_groups/users_group_edit.html:61 @@ -2951,267 +3223,281 @@ msgstr "Membres disponibles" msgid "Add all elements" msgstr "Tout ajouter" -#: rhodecode/templates/admin/users_groups/users_group_edit.html:146 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:150 msgid "Group members" msgstr "Membres du groupe" -#: rhodecode/templates/admin/users_groups/users_group_edit.html:163 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:167 #, fuzzy msgid "No members yet" msgstr "Membres" -#: rhodecode/templates/admin/users_groups/users_group_edit.html:171 +#: rhodecode/templates/admin/users_groups/users_groups.html:5 #, 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" +msgid "User groups administration" msgstr "Gestion des groupes d’utilisateurs" -#: rhodecode/templates/admin/users_groups/users_groups.html:23 -msgid "ADD NEW USER GROUP" -msgstr "AJOUTER UN NOUVEAU GROUPE" - -#: rhodecode/templates/admin/users_groups/users_groups.html:32 -msgid "group name" -msgstr "Nom du groupe" - -#: rhodecode/templates/admin/users_groups/users_groups.html:33 -#: rhodecode/templates/base/root.html:46 -msgid "members" -msgstr "Membres" - -#: rhodecode/templates/admin/users_groups/users_groups.html:45 -#, python-format -msgid "Confirm to delete this users group: %s" +#: rhodecode/templates/admin/users_groups/users_groups.html:47 +#, fuzzy, python-format +msgid "Confirm to delete this user group: %s" msgstr "Voulez-vous vraiment supprimer le groupe d‘utilisateurs « %s » ?" -#: rhodecode/templates/base/base.html:41 +#: rhodecode/templates/base/base.html:42 msgid "Submit a bug" msgstr "Signaler un bogue" -#: rhodecode/templates/base/base.html:77 -msgid "Login to your account" -msgstr "Connexion à votre compte" - -#: rhodecode/templates/base/base.html:100 -msgid "Forgot password ?" -msgstr "Mot de passe oublié ?" - -#: rhodecode/templates/base/base.html:107 -msgid "Log In" -msgstr "Connexion" +#: rhodecode/templates/base/base.html:108 +#: rhodecode/templates/data_table/_dt_elements.html:9 +#: rhodecode/templates/data_table/_dt_elements.html:11 +#: rhodecode/templates/data_table/_dt_elements.html:13 +#: rhodecode/templates/pullrequests/pullrequest_show.html:81 +#: rhodecode/templates/summary/summary.html:8 +msgid "Summary" +msgstr "Résumé" + +#: rhodecode/templates/base/base.html:109 +#: rhodecode/templates/changelog/changelog.html:11 +#: rhodecode/templates/data_table/_dt_elements.html:17 +#: rhodecode/templates/data_table/_dt_elements.html:19 +#: rhodecode/templates/data_table/_dt_elements.html:21 +msgid "Changelog" +msgstr "Historique" + +#: rhodecode/templates/base/base.html:110 +#: rhodecode/templates/data_table/_dt_elements.html:25 +#: rhodecode/templates/data_table/_dt_elements.html:27 +#: rhodecode/templates/data_table/_dt_elements.html:29 +#: rhodecode/templates/files/files.html:12 +msgid "Files" +msgstr "Fichiers" + +#: rhodecode/templates/base/base.html:112 +#, fuzzy +msgid "Switch To" +msgstr "Aller" + +#: rhodecode/templates/base/base.html:114 +#: rhodecode/templates/base/base.html:267 +msgid "loading..." +msgstr "Chargement…" #: rhodecode/templates/base/base.html:118 -msgid "Inbox" -msgstr "Boîte de réception" - -#: 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/public_journal.html:4 -msgid "Journal" -msgstr "Historique" - -#: rhodecode/templates/base/base.html:125 -msgid "Log Out" -msgstr "Se déconnecter" - -#: rhodecode/templates/base/base.html:144 -msgid "Switch repository" -msgstr "Aller au dépôt" - -#: rhodecode/templates/base/base.html:146 -msgid "Products" -msgstr "Produits" - -#: rhodecode/templates/base/base.html:152 -#: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47 -msgid "loading..." -msgstr "Chargement…" - -#: 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 "Résumé" - -#: 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 "Historique" - -#: rhodecode/templates/base/base.html:175 -#: rhodecode/templates/base/base.html:177 -#: rhodecode/templates/base/base.html:179 -msgid "Switch to" -msgstr "Aller" - -#: 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 "Fichiers" - -#: rhodecode/templates/base/base.html:195 -#: rhodecode/templates/base/base.html:199 msgid "Options" msgstr "Options" -#: rhodecode/templates/base/base.html:204 -#: rhodecode/templates/base/base.html:206 -msgid "repository settings" -msgstr "Réglages de dépôt" - -#: rhodecode/templates/base/base.html:210 -#: rhodecode/templates/data_table/_dt_elements.html:80 -#: rhodecode/templates/forks/fork.html:13 -msgid "fork" -msgstr "Fork" - -#: 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:215 +#: rhodecode/templates/base/base.html:124 #: 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:223 -msgid "lock" -msgstr "Verrouiller" - -#: rhodecode/templates/base/base.html:234 -msgid "repositories groups" -msgstr "Groupes de dépôts" - -#: rhodecode/templates/base/base.html:236 -msgid "users groups" -msgstr "Groupes d’utilisateurs" - -#: rhodecode/templates/base/base.html:237 -msgid "permissions" -msgstr "Permissions" - -#: 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:251 -#: rhodecode/templates/base/base.html:253 -msgid "Followers" -msgstr "Followers" - -#: rhodecode/templates/base/base.html:259 -#: rhodecode/templates/base/base.html:261 -msgid "Forks" -msgstr "Forks" - -#: rhodecode/templates/base/base.html:340 -#: rhodecode/templates/base/base.html:342 -#: rhodecode/templates/base/base.html:344 -#: rhodecode/templates/search/search.html:52 +#: rhodecode/templates/base/base.html:126 +msgid "Lightweight changelog" +msgstr "" + +#: rhodecode/templates/base/base.html:127 +#: rhodecode/templates/base/base.html:287 +#: rhodecode/templates/search/search.html:14 +#: rhodecode/templates/search/search.html:54 msgid "Search" msgstr "Rechercher" -#: rhodecode/templates/base/root.html:42 -msgid "add another comment" -msgstr "Nouveau commentaire" +#: rhodecode/templates/base/base.html:133 +#, fuzzy +msgid "Lock" +msgstr "Verrouiller" + +#: rhodecode/templates/base/base.html:141 +#, fuzzy +msgid "Follow" +msgstr "followers" + +#: rhodecode/templates/base/base.html:142 +#, fuzzy +msgid "Unfollow" +msgstr "followers" + +#: rhodecode/templates/base/base.html:145 +#: rhodecode/templates/data_table/_dt_elements.html:33 +#: rhodecode/templates/data_table/_dt_elements.html:35 +#: rhodecode/templates/data_table/_dt_elements.html:37 +#: rhodecode/templates/data_table/_dt_elements.html:74 +#: rhodecode/templates/forks/fork.html:9 +msgid "Fork" +msgstr "Fork" + +#: rhodecode/templates/base/base.html:147 +#, fuzzy +msgid "Create Pull Request" +msgstr "Nouvelle requête de pull" + +#: rhodecode/templates/base/base.html:153 +#, fuzzy +msgid "Show Pull Requests" +msgstr "Nouvelle requête de pull" + +#: rhodecode/templates/base/base.html:153 +#, fuzzy +msgid "Pull Requests" +msgstr "Requêtes de pull" + +#: rhodecode/templates/base/base.html:190 +#, fuzzy +msgid "Not logged in" +msgstr "Dernière connexion" + +#: rhodecode/templates/base/base.html:197 +msgid "Login to your account" +msgstr "Connexion à votre compte" + +#: rhodecode/templates/base/base.html:220 +msgid "Forgot password ?" +msgstr "Mot de passe oublié ?" + +#: rhodecode/templates/base/base.html:243 +msgid "Log Out" +msgstr "Se déconnecter" + +#: rhodecode/templates/base/base.html:262 +msgid "Switch repository" +msgstr "Aller au dépôt" + +#: rhodecode/templates/base/base.html:274 +msgid "Show recent activity" +msgstr "" + +#: rhodecode/templates/base/base.html:275 +#: rhodecode/templates/journal/journal.html:4 +msgid "Journal" +msgstr "Historique" + +#: rhodecode/templates/base/base.html:286 +#, fuzzy +msgid "Search in repositories" +msgstr "Rechercher dans tous les dépôts" + +#: rhodecode/templates/base/perms_summary.html:8 +#, fuzzy +msgid "No permissions defined yet" +msgstr "Copier les permissions" + +#: rhodecode/templates/base/perms_summary.html:15 +msgid "Permission" +msgstr "Permission" + +#: rhodecode/templates/base/perms_summary.html:16 +msgid "Edit Permission" +msgstr "Éditer" #: rhodecode/templates/base/root.html:43 -#: rhodecode/templates/journal/journal.html:83 -#: rhodecode/templates/summary/summary.html:57 -msgid "Stop following this repository" -msgstr "Arrêter de suivre ce dépôt" +#, fuzzy +msgid "Add another comment" +msgstr "Nouveau commentaire" #: rhodecode/templates/base/root.html:44 -#: rhodecode/templates/summary/summary.html:61 +#: rhodecode/templates/data_table/_dt_elements.html:140 +msgid "Stop following this repository" +msgstr "Arrêter de suivre ce dépôt" + +#: rhodecode/templates/base/root.html:45 msgid "Start following this repository" msgstr "Suivre ce dépôt" -#: rhodecode/templates/base/root.html:45 +#: rhodecode/templates/base/root.html:46 msgid "Group" msgstr "Groupe" +#: rhodecode/templates/base/root.html:47 +msgid "members" +msgstr "Membres" + #: rhodecode/templates/base/root.html:48 -msgid "search truncated" -msgstr "Résultats tronqués" +#: rhodecode/templates/pullrequests/pullrequest.html:181 +#, fuzzy +msgid "Loading ..." +msgstr "Chargement…" #: rhodecode/templates/base/root.html:49 -msgid "no matching files" +#, fuzzy +msgid "Search truncated" +msgstr "Résultats tronqués" + +#: rhodecode/templates/base/root.html:50 +#, fuzzy +msgid "No matching files" msgstr "Aucun fichier ne correspond" #: rhodecode/templates/base/root.html:51 +#: rhodecode/templates/changelog/changelog.html:36 +msgid "Open new pull request" +msgstr "Nouvelle requête de pull" + +#: rhodecode/templates/base/root.html:52 #, 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" +#: rhodecode/templates/base/root.html:53 +#, fuzzy +msgid "Show selected changesets __S -> __E" msgstr "Afficher les changements sélections de __S à __E" -#: rhodecode/templates/base/root.html:53 +#: rhodecode/templates/base/root.html:54 +#, fuzzy +msgid "Show selected changeset __S" +msgstr "Afficher les changements sélections de __S à __E" + +#: rhodecode/templates/base/root.html:55 msgid "Selection link" msgstr "Lien vers la sélection" +#: rhodecode/templates/base/root.html:56 +#: rhodecode/templates/changeset/diff_block.html:8 +#, fuzzy +msgid "Collapse diff" +msgstr "Diff de fichier" + +#: rhodecode/templates/base/root.html:57 +#, fuzzy +msgid "Expand diff" +msgstr "Diff brut" + #: rhodecode/templates/bookmarks/bookmarks.html:5 #, python-format msgid "%s Bookmarks" msgstr "Signets de %s" -#: rhodecode/templates/bookmarks/bookmarks.html:39 +#: rhodecode/templates/bookmarks/bookmarks.html:37 #: rhodecode/templates/bookmarks/bookmarks_data.html:8 -#: rhodecode/templates/branches/branches.html:53 +#: rhodecode/templates/branches/branches.html:50 #: rhodecode/templates/branches/branches_data.html:8 -#: rhodecode/templates/tags/tags.html:54 +#: rhodecode/templates/shortlog/shortlog_data.html:8 +#: rhodecode/templates/tags/tags.html:51 #: rhodecode/templates/tags/tags_data.html:8 msgid "Author" msgstr "Auteur" +#: rhodecode/templates/bookmarks/bookmarks.html:38 +#: rhodecode/templates/bookmarks/bookmarks_data.html:9 +#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches_data.html:9 +#: rhodecode/templates/shortlog/shortlog_data.html:5 +#: rhodecode/templates/tags/tags.html:52 +#: rhodecode/templates/tags/tags_data.html:9 +msgid "Revision" +msgstr "Révision" + #: rhodecode/templates/branches/branches.html:5 #, python-format msgid "%s Branches" msgstr "Branches de %s" -#: rhodecode/templates/branches/branches.html:29 +#: rhodecode/templates/branches/branches.html:26 msgid "Compare branches" msgstr "Comparer les branches" -#: rhodecode/templates/branches/branches.html:56 +#: rhodecode/templates/branches/branches.html:53 #: 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.html:54 #: rhodecode/templates/tags/tags_data.html:10 msgid "Compare" msgstr "Comparer" @@ -3221,117 +3507,85 @@ msgstr "Comparer" msgid "%s Changelog" msgstr "Historique de %s" -#: rhodecode/templates/changelog/changelog.html:15 +#: rhodecode/templates/changelog/changelog.html:11 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" msgstr[0] "Affichage de %d révision sur %d" msgstr[1] "Affichage de %d révisions sur %d" -#: rhodecode/templates/changelog/changelog.html:37 +#: rhodecode/templates/changelog/changelog.html:30 #, fuzzy msgid "Clear selection" msgstr "Réglages de recherche" -#: rhodecode/templates/changelog/changelog.html:40 +#: rhodecode/templates/changelog/changelog.html:33 #: rhodecode/templates/forks/forks_data.html:19 -#, python-format -msgid "compare fork with %s" +#, fuzzy, python-format +msgid "Compare fork with %s" msgstr "Comparer le fork avec %s" -#: rhodecode/templates/changelog/changelog.html:40 +#: rhodecode/templates/changelog/changelog.html:33 #, 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:74 -#: rhodecode/templates/summary/summary.html:375 -msgid "show more" +#: rhodecode/templates/changelog/changelog.html:76 +#: rhodecode/templates/summary/summary.html:404 +#, fuzzy +msgid "Show more" msgstr "montrer plus" -#: 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:91 -#: rhodecode/templates/changeset/changeset.html:65 -#: 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: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:104 -msgid "Parent" -msgstr "Parent" - -#: rhodecode/templates/changelog/changelog.html:110 -#: rhodecode/templates/changeset/changeset.html:42 -msgid "No parents" -msgstr "Aucun parent" - -#: rhodecode/templates/changelog/changelog.html:115 +#: rhodecode/templates/changelog/changelog.html:89 +#: rhodecode/templates/changeset/changeset_range.html:86 +#, fuzzy, python-format +msgid "Bookmark %s" +msgstr "Signets %s" + +#: rhodecode/templates/changelog/changelog.html:95 +#: rhodecode/templates/changeset/changeset.html:111 +#: rhodecode/templates/changeset/changeset_range.html:92 +#, fuzzy, python-format +msgid "Tag %s" +msgstr "Tags %s" + +#: rhodecode/templates/changelog/changelog.html:100 #: rhodecode/templates/changeset/changeset.html:106 -#: rhodecode/templates/changeset/changeset_range.html:79 -msgid "merge" -msgstr "Fusion" - -#: rhodecode/templates/changelog/changelog.html:118 -#: rhodecode/templates/changeset/changeset.html:109 -#: 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 "Branche" - -#: rhodecode/templates/changelog/changelog.html:124 -#: rhodecode/templates/changeset/changeset_range.html:88 -msgid "bookmark" -msgstr "Signet" - -#: rhodecode/templates/changelog/changelog.html:130 -#: rhodecode/templates/changeset/changeset.html:114 -#: rhodecode/templates/changeset/changeset_range.html:94 -msgid "tag" -msgstr "Tag" - -#: rhodecode/templates/changelog/changelog.html:301 +#: rhodecode/templates/changeset/changeset_range.html:80 +#, fuzzy, python-format +msgid "Branch %s" +msgstr "Branches %s" + +#: rhodecode/templates/changelog/changelog.html:258 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:94 -msgid "removed" +#: rhodecode/templates/changeset/changeset.html:91 +#, fuzzy +msgid "Removed" msgstr "Supprimés" #: rhodecode/templates/changelog/changelog_details.html:5 -#: rhodecode/templates/changeset/changeset.html:95 -msgid "changed" +#: rhodecode/templates/changeset/changeset.html:92 +#, fuzzy +msgid "Changed" msgstr "Modifiés" #: rhodecode/templates/changelog/changelog_details.html:6 -#: rhodecode/templates/changeset/changeset.html:96 -msgid "added" +#: rhodecode/templates/changeset/changeset.html:93 +#, fuzzy +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:98 -#: rhodecode/templates/changeset/changeset.html:99 -#: rhodecode/templates/changeset/changeset.html:100 -#, python-format -msgid "affected %s files" +#: rhodecode/templates/changeset/changeset.html:95 +#: rhodecode/templates/changeset/changeset.html:96 +#: rhodecode/templates/changeset/changeset.html:97 +#, fuzzy, python-format +msgid "Affected %s files" msgstr "%s fichiers affectés" #: rhodecode/templates/changeset/changeset.html:6 @@ -3339,118 +3593,155 @@ msgstr "%s fichiers affectés" msgid "%s Changeset" msgstr "Changeset de %s" -#: rhodecode/templates/changeset/changeset.html:14 -msgid "Changeset" -msgstr "Changements" - -#: rhodecode/templates/changeset/changeset.html:52 +#: rhodecode/templates/changeset/changeset.html:39 +msgid "No parents" +msgstr "Aucun parent" + +#: rhodecode/templates/changeset/changeset.html:49 #, fuzzy msgid "No children" msgstr "Appliquer aux enfants" -#: rhodecode/templates/changeset/changeset.html:70 -#: rhodecode/templates/changeset/diff_block.html:20 -msgid "raw diff" -msgstr "Diff brut" - -#: rhodecode/templates/changeset/changeset.html:71 +#: rhodecode/templates/changeset/changeset.html:62 +#: rhodecode/templates/changeset/changeset_file_comment.html:20 +#: rhodecode/templates/changeset/changeset_range.html:44 +msgid "Changeset status" +msgstr "Statut du changeset" + +#: rhodecode/templates/changeset/changeset.html:67 +#: rhodecode/templates/changeset/diff_block.html:23 #, fuzzy -msgid "patch diff" +msgid "Raw diff" msgstr "Diff brut" -#: rhodecode/templates/changeset/changeset.html:72 -#: rhodecode/templates/changeset/diff_block.html:21 -msgid "download diff" +#: rhodecode/templates/changeset/changeset.html:68 +#, fuzzy +msgid "Patch diff" +msgstr "Diff brut" + +#: rhodecode/templates/changeset/changeset.html:69 +#: rhodecode/templates/changeset/diff_block.html:24 +#, fuzzy +msgid "Download diff" msgstr "Télécharger le diff" -#: rhodecode/templates/changeset/changeset.html:76 -#: rhodecode/templates/changeset/changeset_file_comment.html:82 +#: rhodecode/templates/changeset/changeset.html:73 +#: rhodecode/templates/changeset/changeset_file_comment.html:97 #, python-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d commentaire" msgstr[1] "%d commentaires" -#: rhodecode/templates/changeset/changeset.html:76 -#: rhodecode/templates/changeset/changeset_file_comment.html:82 +#: rhodecode/templates/changeset/changeset.html:73 +#: rhodecode/templates/changeset/changeset_file_comment.html:97 #, python-format msgid "(%d inline)" msgid_plural "(%d inline)" msgstr[0] "(et %d en ligne)" msgstr[1] "(et %d en ligne)" -#: rhodecode/templates/changeset/changeset.html:122 -#: rhodecode/templates/compare/compare_diff.html:44 -#: rhodecode/templates/pullrequests/pullrequest_show.html:76 +#: rhodecode/templates/changeset/changeset.html:103 +#: rhodecode/templates/changeset/changeset_range.html:77 +msgid "merge" +msgstr "Fusion" + +#: rhodecode/templates/changeset/changeset.html:119 +#: rhodecode/templates/compare/compare_diff.html:40 +#: rhodecode/templates/pullrequests/pullrequest_show.html:113 #, 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:124 -#: rhodecode/templates/compare/compare_diff.html:46 -#: rhodecode/templates/pullrequests/pullrequest_show.html:78 +#: rhodecode/templates/changeset/changeset.html:121 +#: rhodecode/templates/compare/compare_diff.html:42 +#: rhodecode/templates/pullrequests/pullrequest_show.html:115 #, 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 +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 +msgid "Showing a huge diff might take some time and resources" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 +#, fuzzy +msgid "Show full diff" +msgstr "Chargement de la liste des fichiers…" + +#: rhodecode/templates/changeset/changeset_file_comment.html:30 +#, fuzzy, python-format +msgid "Status change on pull request #%s" +msgstr "Requêtes de pull %s" + +#: rhodecode/templates/changeset/changeset_file_comment.html:32 +#, fuzzy, python-format +msgid "Comment on pull request #%s" +msgstr "[a commenté] la requête de pull pour %s" + +#: rhodecode/templates/changeset/changeset_file_comment.html:57 msgid "Submitting..." msgstr "Envoi…" -#: rhodecode/templates/changeset/changeset_file_comment.html:45 +#: rhodecode/templates/changeset/changeset_file_comment.html:60 msgid "Commenting on line {1}." msgstr "Commentaire sur la ligne {1}." -#: rhodecode/templates/changeset/changeset_file_comment.html:46 -#: rhodecode/templates/changeset/changeset_file_comment.html:121 +#: rhodecode/templates/changeset/changeset_file_comment.html:61 +#: rhodecode/templates/changeset/changeset_file_comment.html:139 #, 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." -#: rhodecode/templates/changeset/changeset_file_comment.html:48 -#: rhodecode/templates/changeset/changeset_file_comment.html:123 +#: rhodecode/templates/changeset/changeset_file_comment.html:63 +#: rhodecode/templates/changeset/changeset_file_comment.html:141 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." -#: rhodecode/templates/changeset/changeset_file_comment.html:59 -#: rhodecode/templates/changeset/changeset_file_comment.html:143 +#: rhodecode/templates/changeset/changeset_file_comment.html:74 +#: rhodecode/templates/changeset/changeset_file_comment.html:161 msgid "Comment" msgstr "Commentaire" -#: rhodecode/templates/changeset/changeset_file_comment.html:60 -#: rhodecode/templates/changeset/changeset_file_comment.html:71 -msgid "Hide" -msgstr "Masquer" - -#: rhodecode/templates/changeset/changeset_file_comment.html:67 +#: rhodecode/templates/changeset/changeset_file_comment.html:75 +#, fuzzy +msgid "Cancel" +msgstr "Modifiés" + +#: rhodecode/templates/changeset/changeset_file_comment.html:82 msgid "You need to be logged in to comment." msgstr "Vous devez être connecté pour poster des commentaires." -#: rhodecode/templates/changeset/changeset_file_comment.html:67 +#: rhodecode/templates/changeset/changeset_file_comment.html:82 msgid "Login now" msgstr "Se connecter maintenant" -#: rhodecode/templates/changeset/changeset_file_comment.html:118 -msgid "Leave a comment" -msgstr "Laisser un commentaire" - -#: rhodecode/templates/changeset/changeset_file_comment.html:125 -msgid "Check this to change current status of code-review for this changeset" -msgstr "Cochez pour changer le statut de la relecture de code pour ce changeset" - -#: rhodecode/templates/changeset/changeset_file_comment.html:125 -msgid "change status" +#: rhodecode/templates/changeset/changeset_file_comment.html:86 +msgid "Hide" +msgstr "Masquer" + +#: rhodecode/templates/changeset/changeset_file_comment.html:143 +#, fuzzy +msgid "Change status" msgstr "Modifier le statut" -#: rhodecode/templates/changeset/changeset_file_comment.html:145 +#: rhodecode/templates/changeset/changeset_file_comment.html:163 msgid "Comment and close" msgstr "Commenter et fermer" @@ -3459,121 +3750,146 @@ msgstr "Commenter et fermer" msgid "%s Changesets" msgstr "Changesets de %s" -#: rhodecode/templates/changeset/changeset_range.html:29 -#: rhodecode/templates/compare/compare_diff.html:29 -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/changeset/changeset_range.html:52 msgid "Files affected" msgstr "Fichiers affectés" -#: rhodecode/templates/changeset/diff_block.html:19 -msgid "show full diff for this file" +#: rhodecode/templates/changeset/diff_block.html:22 +msgid "Show full diff for this file" msgstr "" -#: rhodecode/templates/changeset/diff_block.html:27 -msgid "show inline comments" +#: rhodecode/templates/changeset/diff_block.html:30 +#, fuzzy +msgid "Show inline comments" msgstr "Afficher les commentaires" -#: rhodecode/templates/compare/compare_cs.html:5 +#: rhodecode/templates/changeset/diff_block.html:55 +msgid "Show file at latest version in this repo" +msgstr "" + +#: rhodecode/templates/changeset/diff_block.html:56 +msgid "Show file at initial version in this repo" +msgstr "" + +#: rhodecode/templates/compare/compare_cs.html:4 msgid "No changesets" msgstr "Aucun changeset" -#: rhodecode/templates/compare/compare_diff.html:37 -#: rhodecode/templates/pullrequests/pullrequest_show.html:69 +#: rhodecode/templates/compare/compare_cs.html:32 +#, fuzzy +msgid "Ancestor" +msgstr "Branches" + +#: rhodecode/templates/compare/compare_diff.html:5 +#, fuzzy, python-format +msgid "%s Compare" +msgstr "%s Comparer" + +#: rhodecode/templates/compare/compare_diff.html:9 +#, fuzzy +msgid "Compare revisions" +msgstr "révision précédente" + +#: rhodecode/templates/compare/compare_diff.html:33 +#: rhodecode/templates/pullrequests/pullrequest_show.html:106 #, 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 +#: rhodecode/templates/compare/compare_diff.html:48 +#: rhodecode/templates/pullrequests/pullrequest_show.html:121 #, fuzzy msgid "No files" msgstr "Fichiers" -#: 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 "Fork" - -#: rhodecode/templates/data_table/_dt_elements.html:60 -#: rhodecode/templates/journal/journal.html:89 -#: rhodecode/templates/summary/summary.html:77 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +msgid "confirm to show potentially huge diff" +msgstr "" + +#: rhodecode/templates/data_table/_dt_elements.html:54 +#: rhodecode/templates/summary/summary.html:69 msgid "Mercurial repository" msgstr "Dépôt Mercurial" -#: rhodecode/templates/data_table/_dt_elements.html:62 -#: rhodecode/templates/journal/journal.html:91 -#: rhodecode/templates/summary/summary.html:80 +#: rhodecode/templates/data_table/_dt_elements.html:56 +#: rhodecode/templates/summary/summary.html:72 msgid "Git repository" msgstr "Dépôt Git" -#: rhodecode/templates/data_table/_dt_elements.html:69 -#: rhodecode/templates/journal/journal.html:97 -#: 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:96 -#: rhodecode/templates/summary/summary.html:97 -msgid "Fork of" -msgstr "Fork de" - -#: rhodecode/templates/data_table/_dt_elements.html:94 +#: rhodecode/templates/data_table/_dt_elements.html:74 +#, fuzzy, python-format +msgid "Fork of %s" +msgstr "Nom du fork %s" + +#: rhodecode/templates/data_table/_dt_elements.html:88 msgid "No changesets yet" msgstr "Dépôt vide" -#: rhodecode/templates/data_table/_dt_elements.html:101 -#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:95 +#: rhodecode/templates/data_table/_dt_elements.html:97 #, 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 +#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:105 #, 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 repository: %s" +msgstr "Voulez-vous vraiment supprimer le dépôt %s ?" + +#: rhodecode/templates/data_table/_dt_elements.html:131 +#, 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 +#: rhodecode/templates/email_templates/changeset_comment.html:9 +#: rhodecode/templates/email_templates/pull_request_comment.html:15 #, fuzzy -msgid "New status$" +msgid "New status" msgstr "Modifier le statut" +#: rhodecode/templates/email_templates/changeset_comment.html:11 +#: rhodecode/templates/email_templates/pull_request_comment.html:9 +msgid "View this comment here" +msgstr "" + +#: rhodecode/templates/email_templates/changeset_comment.html:14 +#, fuzzy +msgid "Repo" +msgstr "Mes dépôts" + +#: rhodecode/templates/email_templates/changeset_comment.html:16 +msgid "desc" +msgstr "" + #: rhodecode/templates/email_templates/main.html:8 #, 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" +#, python-format +msgid "Hello %s" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:5 +msgid "We received a request to create a new password for your account." 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." +#: rhodecode/templates/email_templates/password_reset.html:11 +msgid "If you did not request new password please ignore this email." msgstr "" #: rhodecode/templates/email_templates/pull_request.html:4 @@ -3585,36 +3901,31 @@ msgstr "" #: rhodecode/templates/email_templates/pull_request.html:5 #, fuzzy -msgid "title" -msgstr "Titre" +msgid "View this pull request here" +msgstr "Ajouter un relecteur à cette requête de pull." #: rhodecode/templates/email_templates/pull_request.html:6 -#: rhodecode/templates/pullrequests/pullrequest.html:115 +#, fuzzy +msgid "title" +msgstr "Titre" + +#: rhodecode/templates/email_templates/pull_request.html:7 msgid "description" msgstr "Description" -#: rhodecode/templates/email_templates/pull_request.html:11 +#: rhodecode/templates/email_templates/pull_request.html:12 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 +#: rhodecode/templates/email_templates/pull_request_comment.html:3 #, fuzzy, python-format -msgid "User %s commented on pull request #%s for repository %s" -msgstr "" - -#: rhodecode/templates/email_templates/pull_request_comment.html:10 +msgid "Pull request #%s for repository %s" +msgstr "Requête de pull nº%s ouverte le %s" + +#: rhodecode/templates/email_templates/pull_request_comment.html:13 #, fuzzy -msgid "New status" -msgstr "Modifier le statut" - -#: rhodecode/templates/email_templates/pull_request_comment.html:14 -msgid "View this comment here" -msgstr "" +msgid "Closing pull request with status" +msgstr "Statut de la requête de pull" #: rhodecode/templates/email_templates/registration.html:4 #, fuzzy @@ -3625,109 +3936,115 @@ msgstr "Vous vous êtes inscrits avec succès à RhodeCode" msgid "View this user here" msgstr "" -#: rhodecode/templates/errors/error_document.html:46 +#: rhodecode/templates/errors/error_document.html:55 #, python-format msgid "You will be redirected to %s in %s seconds" msgstr "Vous serez redirigé vers %s dans %s secondes." #: rhodecode/templates/files/file_diff.html:4 -#, python-format -msgid "%s File diff" +#, fuzzy, python-format +msgid "%s File Diff" msgstr "Diff de fichier de %s" -#: rhodecode/templates/files/file_diff.html:12 +#: rhodecode/templates/files/file_diff.html:8 msgid "File diff" msgstr "Diff de fichier" #: rhodecode/templates/files/files.html:4 -#: rhodecode/templates/files/files.html:74 -#, python-format -msgid "%s files" +#: rhodecode/templates/files/files.html:76 +#, fuzzy, python-format +msgid "%s Files" msgstr "Fichiers de %s" -#: rhodecode/templates/files/files.html:12 -#: rhodecode/templates/summary/summary.html:351 -msgid "files" -msgstr "Fichiers" +#: rhodecode/templates/files/files.html:30 +#: rhodecode/templates/files/files_add.html:31 +#: rhodecode/templates/files/files_edit.html:31 +#: rhodecode/templates/shortlog/shortlog_data.html:9 +#, fuzzy +msgid "Branch" +msgstr "Branche" #: rhodecode/templates/files/files_add.html:4 -#: rhodecode/templates/files/files_edit.html:4 -#, python-format -msgid "%s Edit file" -msgstr "Edition de fichier de %s" +#, fuzzy, python-format +msgid "%s Files Add" +msgstr "Fichiers de %s" #: rhodecode/templates/files/files_add.html:19 -msgid "add file" +#, fuzzy +msgid "Add file" msgstr "Ajouter un fichier" -#: rhodecode/templates/files/files_add.html:40 +#: rhodecode/templates/files/files_add.html:38 +#: rhodecode/templates/files/files_browser.html:31 +#: rhodecode/templates/shortlog/shortlog_data.html:78 msgid "Add new file" msgstr "Ajouter un nouveau fichier" -#: rhodecode/templates/files/files_add.html:45 +#: rhodecode/templates/files/files_add.html:43 msgid "File Name" msgstr "Nom de fichier" -#: rhodecode/templates/files/files_add.html:49 -#: rhodecode/templates/files/files_add.html:58 +#: rhodecode/templates/files/files_add.html:47 +#: rhodecode/templates/files/files_add.html:56 msgid "or" msgstr "ou" -#: rhodecode/templates/files/files_add.html:49 -#: rhodecode/templates/files/files_add.html:54 +#: rhodecode/templates/files/files_add.html:47 +#: rhodecode/templates/files/files_add.html:52 msgid "Upload file" msgstr "Téléverser un fichier" -#: rhodecode/templates/files/files_add.html:58 +#: rhodecode/templates/files/files_add.html:56 msgid "Create new file" msgstr "Créer un nouveau fichier" -#: rhodecode/templates/files/files_add.html:63 -#: rhodecode/templates/files/files_edit.html:39 +#: rhodecode/templates/files/files_add.html:61 +#: rhodecode/templates/files/files_edit.html:37 #: rhodecode/templates/files/files_ypjax.html:3 msgid "Location" msgstr "Emplacement" -#: rhodecode/templates/files/files_add.html:67 +#: rhodecode/templates/files/files_add.html:65 msgid "use / to separate directories" msgstr "Utilisez / pour séparer les répertoires" -#: rhodecode/templates/files/files_add.html:77 -#: rhodecode/templates/files/files_edit.html:63 +#: rhodecode/templates/files/files_add.html:75 +#: rhodecode/templates/files/files_edit.html:61 #: rhodecode/templates/shortlog/shortlog_data.html:6 -msgid "commit message" +#, fuzzy +msgid "Commit message" msgstr "Message de commit" -#: rhodecode/templates/files/files_add.html:81 -#: rhodecode/templates/files/files_edit.html:67 +#: rhodecode/templates/files/files_add.html:79 +#: rhodecode/templates/files/files_edit.html:65 msgid "Commit changes" msgstr "Commiter les changements" #: rhodecode/templates/files/files_browser.html:13 -msgid "view" +#, fuzzy +msgid "View" msgstr "voir" #: rhodecode/templates/files/files_browser.html:14 -msgid "previous revision" +#, fuzzy +msgid "Previous revision" msgstr "révision précédente" #: rhodecode/templates/files/files_browser.html:16 -msgid "next revision" +#, fuzzy +msgid "Next revision" msgstr "révision suivante" #: rhodecode/templates/files/files_browser.html:23 -msgid "follow current branch" +#, fuzzy +msgid "Follow current branch" msgstr "Suivre la branche actuelle" #: rhodecode/templates/files/files_browser.html:27 -msgid "search file list" +#, fuzzy +msgid "Search file list" msgstr "Rechercher un fichier" -#: rhodecode/templates/files/files_browser.html:31 -#: rhodecode/templates/shortlog/shortlog_data.html:78 -msgid "add new file" -msgstr "Ajouter un fichier" - #: rhodecode/templates/files/files_browser.html:35 msgid "Loading file list..." msgstr "Chargement de la liste des fichiers…" @@ -3749,34 +4066,44 @@ msgid "Last modified" msgstr "Dernière modification" #: rhodecode/templates/files/files_browser.html:52 -msgid "Last commiter" +msgid "Last committer" msgstr "Dernier commiteur" +#: rhodecode/templates/files/files_edit.html:4 +#, fuzzy, python-format +msgid "%s Files Edit" +msgstr "Fichiers de %s" + #: rhodecode/templates/files/files_edit.html:19 -msgid "edit file" +#, fuzzy +msgid "Edit file" msgstr "Éditer le fichier" +#: rhodecode/templates/files/files_edit.html:47 +#: rhodecode/templates/files/files_source.html:23 +#, fuzzy +msgid "Show annotation" +msgstr "Afficher les annotations" + +#: rhodecode/templates/files/files_edit.html:48 +#: rhodecode/templates/files/files_source.html:25 +#: rhodecode/templates/files/files_source.html:55 +#, fuzzy +msgid "Show as raw" +msgstr "montrer le fichier brut" + #: rhodecode/templates/files/files_edit.html:49 -#: 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: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:26 -msgid "download as raw" +#, fuzzy +msgid "Download as raw" msgstr "télécharger le fichier brut" -#: rhodecode/templates/files/files_edit.html:54 -msgid "source" +#: rhodecode/templates/files/files_edit.html:52 +#, fuzzy +msgid "Source" msgstr "Source" -#: rhodecode/templates/files/files_edit.html:59 +#: rhodecode/templates/files/files_edit.html:57 msgid "Editing file" msgstr "Édition du fichier" @@ -3785,16 +4112,18 @@ msgid "History" msgstr "Historique" #: rhodecode/templates/files/files_history_box.html:9 -msgid "diff to revision" +#, fuzzy +msgid "Diff to revision" msgstr "Diff avec la révision" #: rhodecode/templates/files/files_history_box.html:10 -msgid "show at revision" +#, fuzzy +msgid "Show at revision" msgstr "Afficher à la révision" #: rhodecode/templates/files/files_history_box.html:11 #, fuzzy -msgid "show full history" +msgid "Show full history" msgstr "Chargement de la liste des fichiers…" #: rhodecode/templates/files/files_history_box.html:16 @@ -3810,15 +4139,30 @@ msgid "Load file history" msgstr "Chargement de la liste des fichiers…" #: rhodecode/templates/files/files_source.html:21 -msgid "show source" +#, fuzzy +msgid "Show source" msgstr "montrer les sources" -#: rhodecode/templates/files/files_source.html:44 +#: rhodecode/templates/files/files_source.html:29 +#, fuzzy, python-format +msgid "Edit on branch:%s" +msgstr "Dépôt %s supprimé" + +#: rhodecode/templates/files/files_source.html:31 +#, fuzzy +msgid "Edit on branch:?" +msgstr "Dépôt %s supprimé" + +#: rhodecode/templates/files/files_source.html:31 +msgid "Editing files allowed only when on branch head revision" +msgstr "" + +#: rhodecode/templates/files/files_source.html:46 #, python-format msgid "Binary file (%s)" msgstr "Fichier binaire (%s)" -#: rhodecode/templates/files/files_source.html:53 +#: rhodecode/templates/files/files_source.html:55 msgid "File is too big to display" msgstr "Ce fichier est trop gros pour être affiché." @@ -3839,9 +4183,11 @@ msgstr "Aucun fichier à cet endroit" msgid "%s Followers" msgstr "Followers de %s" -#: rhodecode/templates/followers/followers.html:13 -msgid "followers" -msgstr "followers" +#: rhodecode/templates/followers/followers.html:9 +#: rhodecode/templates/summary/summary.html:183 +#: rhodecode/templates/summary/summary.html:184 +msgid "Followers" +msgstr "Followers" #: rhodecode/templates/followers/followers_data.html:12 msgid "Started following -" @@ -3852,32 +4198,33 @@ msgstr "A commencé à suivre le dépôt :" msgid "%s Fork" msgstr "Fork de %s" -#: rhodecode/templates/forks/fork.html:31 +#: rhodecode/templates/forks/fork.html:28 msgid "Fork name" msgstr "Nom du fork" -#: rhodecode/templates/forks/fork.html:68 +#: rhodecode/templates/forks/fork.html:65 msgid "Private" msgstr "Privé" -#: rhodecode/templates/forks/fork.html:77 +#: rhodecode/templates/forks/fork.html:74 msgid "Copy permissions" msgstr "Copier les permissions" -#: rhodecode/templates/forks/fork.html:81 +#: rhodecode/templates/forks/fork.html:78 msgid "Copy permissions from forked repository" msgstr "Copier les permissions depuis le dépôt forké" -#: rhodecode/templates/forks/fork.html:86 +#: rhodecode/templates/forks/fork.html:84 msgid "Update after clone" msgstr "MÀJ après le clonage" -#: rhodecode/templates/forks/fork.html:90 +#: rhodecode/templates/forks/fork.html:88 msgid "Checkout source after making a clone" msgstr "Mettre à jour depuis la source après clonage" -#: rhodecode/templates/forks/fork.html:94 -msgid "fork this repository" +#: rhodecode/templates/forks/fork.html:93 +#, fuzzy +msgid "Fork this repository" msgstr "Forker ce dépôt" #: rhodecode/templates/forks/forks.html:5 @@ -3885,12 +4232,15 @@ msgstr "Forker ce dépôt" msgid "%s Forks" msgstr "Forks de %s" -#: rhodecode/templates/forks/forks.html:13 -msgid "forks" -msgstr "forks" +#: rhodecode/templates/forks/forks.html:9 +#: rhodecode/templates/summary/summary.html:189 +#: rhodecode/templates/summary/summary.html:190 +msgid "Forks" +msgstr "Forks" #: rhodecode/templates/forks/forks_data.html:17 -msgid "forked" +#, fuzzy +msgid "Forked" msgstr "forké" #: rhodecode/templates/forks/forks_data.html:42 @@ -3906,44 +4256,27 @@ msgid "RSS journal feed" msgstr "Flux RSS du journal" #: rhodecode/templates/journal/journal.html:32 -#: rhodecode/templates/pullrequests/pullrequest.html:55 msgid "Refresh" msgstr "Rafraîchir" #: rhodecode/templates/journal/journal.html:35 #: rhodecode/templates/journal/public_journal.html:24 -msgid "RSS feed" -msgstr "Flux RSS" - -#: rhodecode/templates/journal/journal.html:38 -#: rhodecode/templates/journal/public_journal.html:27 msgid "ATOM feed" msgstr "Flux ATOM" -#: rhodecode/templates/journal/journal.html:49 +#: rhodecode/templates/journal/journal.html:51 msgid "Watched" msgstr "Surveillé" -#: rhodecode/templates/journal/journal.html:54 -msgid "ADD" -msgstr "AJOUTER" - -#: rhodecode/templates/journal/journal.html:77 -msgid "following user" -msgstr "utilisateur suivant" - -#: rhodecode/templates/journal/journal.html:77 -msgid "user" -msgstr "utilisateur" - -#: rhodecode/templates/journal/journal.html:110 -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:55 msgid "No entries yet" msgstr "Aucune entrée pour le moment" +#: rhodecode/templates/journal/public_journal.html:4 +#: rhodecode/templates/journal/public_journal.html:21 +msgid "Public Journal" +msgstr "Journal public" + #: rhodecode/templates/journal/public_journal.html:13 msgid "ATOM public journal feed" msgstr "Flux ATOM du journal public" @@ -3952,148 +4285,133 @@ msgstr "Flux ATOM du journal public" msgid "RSS public journal feed" msgstr "Flux RSS du journal public" -#: rhodecode/templates/journal/public_journal.html:21 -msgid "Public Journal" -msgstr "Journal public" - #: rhodecode/templates/pullrequests/pullrequest.html:4 -#: rhodecode/templates/pullrequests/pullrequest.html:12 +#: rhodecode/templates/pullrequests/pullrequest.html:8 msgid "New pull request" msgstr "Nouvelle requête de pull" -#: rhodecode/templates/pullrequests/pullrequest.html:54 -msgid "refresh overview" -msgstr "Rafraîchir les informations" - -#: rhodecode/templates/pullrequests/pullrequest.html:66 +#: rhodecode/templates/pullrequests/pullrequest.html:52 msgid "Detailed compare view" msgstr "Comparaison détaillée" -#: rhodecode/templates/pullrequests/pullrequest.html:70 -#: rhodecode/templates/pullrequests/pullrequest_show.html:100 +#: rhodecode/templates/pullrequests/pullrequest.html:56 +#: rhodecode/templates/pullrequests/pullrequest_show.html:137 msgid "Pull request reviewers" msgstr "Relecteurs de la requête de pull" -#: rhodecode/templates/pullrequests/pullrequest.html:79 -#: rhodecode/templates/pullrequests/pullrequest_show.html:112 +#: rhodecode/templates/pullrequests/pullrequest.html:65 +#: rhodecode/templates/pullrequests/pullrequest_show.html:149 msgid "owner" msgstr "Propriétaire" -#: rhodecode/templates/pullrequests/pullrequest.html:91 -#: rhodecode/templates/pullrequests/pullrequest_show.html:127 +#: rhodecode/templates/pullrequests/pullrequest.html:77 msgid "Add reviewer to this pull request." msgstr "Ajouter un relecteur à cette requête de pull." -#: rhodecode/templates/pullrequests/pullrequest.html:97 +#: rhodecode/templates/pullrequests/pullrequest.html:83 msgid "Create new pull request" msgstr "Nouvelle requête de pull" -#: rhodecode/templates/pullrequests/pullrequest.html:106 +#: rhodecode/templates/pullrequests/pullrequest.html:92 +#: rhodecode/templates/pullrequests/pullrequest_data.html:14 #: rhodecode/templates/pullrequests/pullrequest_show.html:25 -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:33 msgid "Title" msgstr "Titre" -#: rhodecode/templates/pullrequests/pullrequest.html:123 +#: rhodecode/templates/pullrequests/pullrequest.html:109 msgid "Send pull request" msgstr "Envoyer la requête de pull" -#: rhodecode/templates/pullrequests/pullrequest_show.html:23 -#, python-format -msgid "Closed %s" -msgstr "Fermée %s" - -#: rhodecode/templates/pullrequests/pullrequest_show.html:23 -#, python-format -msgid "with status %s" -msgstr "avec %s comme statut." - -#: rhodecode/templates/pullrequests/pullrequest_show.html:31 -msgid "Status" -msgstr "Statut" - -#: rhodecode/templates/pullrequests/pullrequest_show.html:36 +#: rhodecode/templates/pullrequests/pullrequest_show.html:4 +#, fuzzy, python-format +msgid "%s Pull Request #%s" +msgstr "%s Requête de pull #%s" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:35 +#, fuzzy +msgid "Review status" +msgstr "Modifier le statut" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:40 msgid "Pull request status" msgstr "Statut de la requête de pull" -#: rhodecode/templates/pullrequests/pullrequest_show.html:44 +#: rhodecode/templates/pullrequests/pullrequest_show.html:53 msgid "Still not reviewed by" msgstr "Pas encore relue par" -#: rhodecode/templates/pullrequests/pullrequest_show.html:48 +#: rhodecode/templates/pullrequests/pullrequest_show.html:57 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" msgstr[0] "%d relecteur" msgstr[1] "%d relecteurs" -#: rhodecode/templates/pullrequests/pullrequest_show.html:50 -msgid "pull request was reviewed by all reviewers" +#: rhodecode/templates/pullrequests/pullrequest_show.html:59 +#, fuzzy +msgid "Pull request was reviewed by all reviewers" msgstr "La requête de pull a été relue par tous les relecteurs." -#: rhodecode/templates/pullrequests/pullrequest_show.html:58 +#: rhodecode/templates/pullrequests/pullrequest_show.html:65 +#, fuzzy +msgid "Origin repository" +msgstr "Dépôt Git" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:89 msgid "Created on" msgstr "Créé le" -#: rhodecode/templates/pullrequests/pullrequest_show.html:65 +#: rhodecode/templates/pullrequests/pullrequest_show.html:102 msgid "Compare view" msgstr "Vue de comparaison" -#: rhodecode/templates/pullrequests/pullrequest_show.html:112 +#: rhodecode/templates/pullrequests/pullrequest_show.html:149 #, fuzzy msgid "reviewer" msgstr "%d relecteur" +#: rhodecode/templates/pullrequests/pullrequest_show.html:164 +#, fuzzy +msgid "Add or remove reviewer to this pull request." +msgstr "Ajouter un relecteur à cette requête de pull." + +#: rhodecode/templates/pullrequests/pullrequest_show.html:168 +#, fuzzy +msgid "Save changes" +msgstr "Aucun changement" + #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4 -msgid "all pull requests" -msgstr "Requêtes de pull" - -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:12 -msgid "All pull requests" -msgstr "Toutes les requêtes de pull" - -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:27 -msgid "Closed" -msgstr "Fermée" +#, fuzzy, python-format +msgid "%s Pull Requests" +msgstr "%s Mes requêtes de pull" #: rhodecode/templates/search/search.html:6 -#, python-format -msgid "Search \"%s\" in repository: %s" -msgstr "Rechercher « %s » dans le dépôt : %s" +#, fuzzy +msgid "Search repository" +msgstr "Rechercher dans le dépôt : %s" #: rhodecode/templates/search/search.html:8 -#, python-format -msgid "Search \"%s\" in all repositories" -msgstr "Rechercher « %s » dans tous les dépôts" - -#: rhodecode/templates/search/search.html:12 -#: rhodecode/templates/search/search.html:32 -#, python-format -msgid "Search in repository: %s" -msgstr "Rechercher dans le dépôt : %s" - -#: rhodecode/templates/search/search.html:14 -#: rhodecode/templates/search/search.html:34 +#: rhodecode/templates/search/search.html:16 msgid "Search in all repositories" msgstr "Rechercher dans tous les dépôts" -#: rhodecode/templates/search/search.html:48 +#: rhodecode/templates/search/search.html:50 msgid "Search term" msgstr "Termes de la recherches" -#: rhodecode/templates/search/search.html:60 +#: rhodecode/templates/search/search.html:62 msgid "Search in" msgstr "Rechercher dans" -#: rhodecode/templates/search/search.html:63 +#: rhodecode/templates/search/search.html:65 msgid "File contents" msgstr "Le contenu des fichiers" -#: rhodecode/templates/search/search.html:64 +#: rhodecode/templates/search/search.html:66 msgid "Commit messages" msgstr "Les messages de commit" -#: rhodecode/templates/search/search.html:65 +#: rhodecode/templates/search/search.html:67 msgid "File names" msgstr "Les noms de fichiers" @@ -4103,42 +4421,25 @@ msgstr "Les noms de fichiers" msgid "Permission denied" msgstr "Permission refusée" -#: rhodecode/templates/settings/repo_settings.html:5 -#, python-format -msgid "%s Settings" -msgstr "Réglages de %s" - -#: rhodecode/templates/settings/repo_settings.html:102 -#, fuzzy -msgid "Delete repository" -msgstr "[a supprimé] le dépôt" - -#: rhodecode/templates/settings/repo_settings.html:109 -#, fuzzy -msgid "Remove repo" -msgstr "Enlever" - #: rhodecode/templates/shortlog/shortlog.html:5 -#, python-format -msgid "%s Shortlog" -msgstr "Résumé de %s" - +#, fuzzy, python-format +msgid "%s Lightweight Changelog" +msgstr "%s fichié modifié" + +#: rhodecode/templates/shortlog/shortlog.html:11 #: 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" +msgid "Lightweight Changelog" +msgstr "" #: rhodecode/templates/shortlog/shortlog_data.html:7 -msgid "age" +#, fuzzy +msgid "Age" msgstr "Âge" -#: rhodecode/templates/shortlog/shortlog_data.html:8 -msgid "author" -msgstr "Auteur" +#: rhodecode/templates/shortlog/shortlog_data.html:20 +#, python-format +msgid "Click to open associated pull request #%s" +msgstr "Cliquez ici pour ouvrir la requête de pull associée #%s." #: rhodecode/templates/shortlog/shortlog_data.html:75 msgid "Add or upload files directly via RhodeCode" @@ -4157,157 +4458,171 @@ msgstr "Le dépôt existe déjà ?" msgid "%s Summary" msgstr "Résumé de %s" -#: rhodecode/templates/summary/summary.html:12 -msgid "summary" -msgstr "résumé" - -#: rhodecode/templates/summary/summary.html:20 -#, python-format -msgid "repo %s ATOM feed" -msgstr "Flux ATOM du dépôt %s" - -#: rhodecode/templates/summary/summary.html:21 -#, python-format -msgid "repo %s RSS feed" -msgstr "Flux RSS du dépôt %s" - -#: rhodecode/templates/summary/summary.html:49 -#: rhodecode/templates/summary/summary.html:52 -msgid "ATOM" -msgstr "ATOM" - -#: rhodecode/templates/summary/summary.html:70 +#: rhodecode/templates/summary/summary.html:16 +#, fuzzy, python-format +msgid "%s ATOM feed" +msgstr "Flux %s de" + +#: rhodecode/templates/summary/summary.html:17 +#, fuzzy, python-format +msgid "%s RSS feed" +msgstr "Flux %s de" + +#: rhodecode/templates/summary/summary.html:62 #, fuzzy, python-format msgid "Repository locked by %s" msgstr "Ce dépôt n’est pas verrouillé %s." -#: rhodecode/templates/summary/summary.html:72 +#: rhodecode/templates/summary/summary.html:64 #, fuzzy msgid "Repository unlocked" msgstr "Ce dépôt n’est pas verrouillé." -#: rhodecode/templates/summary/summary.html:91 +#: rhodecode/templates/summary/summary.html:83 #, python-format msgid "Non changable ID %s" msgstr "Identifiant permanent : %s" -#: rhodecode/templates/summary/summary.html:96 -msgid "public" +#: rhodecode/templates/summary/summary.html:88 +#, fuzzy +msgid "Public" msgstr "publique" -#: rhodecode/templates/summary/summary.html:104 -msgid "remote clone" +#: rhodecode/templates/summary/summary.html:88 +#: rhodecode/templates/summary/summary.html:89 +msgid "Fork of" +msgstr "Fork de" + +#: rhodecode/templates/summary/summary.html:96 +#, fuzzy +msgid "Remote clone" msgstr "Clone distant" -#: rhodecode/templates/summary/summary.html:125 +#: rhodecode/templates/summary/summary.html:117 msgid "Contact" msgstr "Contact" -#: rhodecode/templates/summary/summary.html:139 +#: rhodecode/templates/summary/summary.html:131 msgid "Clone url" msgstr "URL de clone" -#: rhodecode/templates/summary/summary.html:142 +#: rhodecode/templates/summary/summary.html:136 msgid "Show by Name" msgstr "Afficher par nom" -#: rhodecode/templates/summary/summary.html:143 +#: rhodecode/templates/summary/summary.html:137 msgid "Show by ID" msgstr "Afficher par ID" +#: rhodecode/templates/summary/summary.html:143 +msgid "Trending files" +msgstr "Populaires" + #: rhodecode/templates/summary/summary.html:151 -msgid "Trending files" -msgstr "Populaires" +#: rhodecode/templates/summary/summary.html:167 +#: rhodecode/templates/summary/summary.html:232 +msgid "enable" +msgstr "Activer" #: 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:167 msgid "Download" msgstr "Téléchargements" -#: rhodecode/templates/summary/summary.html:171 +#: rhodecode/templates/summary/summary.html:163 msgid "There are no downloads yet" msgstr "Il n’y a pas encore de téléchargements proposés." -#: rhodecode/templates/summary/summary.html:173 +#: rhodecode/templates/summary/summary.html:165 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:179 +#: rhodecode/templates/summary/summary.html:171 msgid "Download as zip" msgstr "Télécharger en ZIP" -#: rhodecode/templates/summary/summary.html:182 +#: rhodecode/templates/summary/summary.html:174 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:182 +#: rhodecode/templates/summary/summary.html:174 msgid "with subrepos" msgstr "avec les sous-dépôts" -#: rhodecode/templates/summary/summary.html:195 +#: rhodecode/templates/summary/summary.html:197 +#, fuzzy +msgid "Repository Size" +msgstr "Dépôts" + +#: rhodecode/templates/summary/summary.html:204 +#: rhodecode/templates/summary/summary.html:206 +#, fuzzy +msgid "Feed" +msgstr "Flux RSS" + +#: rhodecode/templates/summary/summary.html:224 msgid "Commit activity by day / author" msgstr "Activité de commit par jour et par auteur" -#: rhodecode/templates/summary/summary.html:206 +#: rhodecode/templates/summary/summary.html:235 msgid "Stats gathered: " msgstr "Statistiques obtenues :" -#: rhodecode/templates/summary/summary.html:227 -msgid "Shortlog" -msgstr "Résumé des changements" - -#: rhodecode/templates/summary/summary.html:229 +#: rhodecode/templates/summary/summary.html:256 +#, fuzzy +msgid "Latest changes" +msgstr "Dernière modification" + +#: rhodecode/templates/summary/summary.html:258 msgid "Quick start" msgstr "Démarrage rapide" -#: rhodecode/templates/summary/summary.html:243 +#: rhodecode/templates/summary/summary.html:272 #, python-format msgid "Readme file at revision '%s'" msgstr "Fichier « Lisez-moi » à la révision « %s »" -#: rhodecode/templates/summary/summary.html:246 +#: rhodecode/templates/summary/summary.html:275 msgid "Permalink to this readme" msgstr "Lien permanent vers ce fichier « Lisez-moi »" -#: rhodecode/templates/summary/summary.html:304 +#: rhodecode/templates/summary/summary.html:333 #, python-format msgid "Download %s as %s" msgstr "Télécharger %s comme archive %s" -#: rhodecode/templates/summary/summary.html:661 +#: rhodecode/templates/summary/summary.html:380 +msgid "files" +msgstr "Fichiers" + +#: rhodecode/templates/summary/summary.html:690 msgid "commits" msgstr "commits" -#: rhodecode/templates/summary/summary.html:662 +#: rhodecode/templates/summary/summary.html:691 msgid "files added" msgstr "fichiers ajoutés" -#: rhodecode/templates/summary/summary.html:663 +#: rhodecode/templates/summary/summary.html:692 msgid "files changed" msgstr "fichiers modifiés" -#: rhodecode/templates/summary/summary.html:664 +#: rhodecode/templates/summary/summary.html:693 msgid "files removed" msgstr "fichiers supprimés" -#: rhodecode/templates/summary/summary.html:667 +#: rhodecode/templates/summary/summary.html:695 msgid "commit" msgstr "commit" -#: rhodecode/templates/summary/summary.html:668 +#: rhodecode/templates/summary/summary.html:696 msgid "file added" msgstr "fichier ajouté" -#: rhodecode/templates/summary/summary.html:669 +#: rhodecode/templates/summary/summary.html:697 msgid "file changed" msgstr "fichié modifié" -#: rhodecode/templates/summary/summary.html:670 +#: rhodecode/templates/summary/summary.html:698 msgid "file removed" msgstr "fichier supprimé" @@ -4316,34 +4631,8 @@ msgstr "fichier supprimé" msgid "%s Tags" msgstr "Tags de %s" -#: rhodecode/templates/tags/tags.html:29 +#: rhodecode/templates/tags/tags.html:26 #, fuzzy msgid "Compare tags" msgstr "Comparer" -#~ 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 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." - diff --git a/rhodecode/i18n/how_to b/rhodecode/i18n/how_to --- a/rhodecode/i18n/how_to +++ b/rhodecode/i18n/how_to @@ -8,17 +8,17 @@ python setup.py extract_messages <- get python setup.py init_catalog -l pl <- create a language directory for lang #edit the new po file with poedit or any other editor msgfmt -f -c <- check format and errors -python setup.py compile_catalog <- create translation files +python setup.py compile_catalog -l pl <- create translation files ############# # to update # ############# python setup.py extract_messages <- get messages from project -python setup.py update_catalog <- to update the translations +python setup.py update_catalog -l pl<- to update the translations #edit the new updated po file with poedit msgfmt -f -c <- check format and errors -python setup.py compile_catalog <- create translation files +python setup.py compile_catalog -l pl <- create translation files ################### diff --git a/rhodecode/i18n/ja/LC_MESSAGES/rhodecode.mo b/rhodecode/i18n/ja/LC_MESSAGES/rhodecode.mo index 5372cec08566c5f7fd9f9f696e577084a6f48332..41adcd28b546a1193fd737b98302a1b8413c8efb GIT binary patch literal 69729 zc%1FM2Y8&-u?GB6lF%U`xi^K}yMgOq0}?in5Cj;EE!zSY*>c4gSV=2s?bWW>UD*~~ zK*dFF*x1I#y;r&7-l?JYl2AjC)e>regp!1RX5RVgek;ii_ul`1o}UM6_Vjb+%$YMY zXU_TF`N4_z8T8+{6Aa@Vf^YrIaQ(OFa>F={;9`Oo65K#Ali+Iv&n5Vs-x$V41Uo7m zOz;;3s|j95a23HH5o{v(Zv_8A@C<@KyuvWfB6uFb9}>Kb;13Aq5d1O0n>4;$^GzXm z3c-a}pg(IAZYOvu!3Q<`jKbFmo=&h)%YCNt-w-^B;AvS1|0oOj&ed>dg5M)}br$kv zXQ5yHve2&}!Lte8o`rthlZEz|W}%%rEx(K4cL^TS`X9@}cwW}}nzf#<2?hwBd8J{L zaQg($Bsl*{)U%%8{RFoW{C9%aUxoC1g69*A6Z{Ur1y>>eGJ+=)Tu1Qx1RuBx{eD!_ z-@Xd{YEbw-L7IBw)2lF^zg>lXopd$&dCt{n@8YY0k87?*{k^Y7eFLus-fp}a?G$Uc zQp-=j8g#LY-~|Mqy&CiX#nr&a_qu|P&glv|xuz@H8Qc~5ZtjZlm39UFB)X!VDP7Ue zm6~t2=KF0|;QN`b82=lZ{=SC4?uzlAehuLFuTeU<2K0X}!9m;)f=dX_Avl}hrPrdr zj}z>~>xAGh34XU5)n5VCLfF4fI2A+PHjr3n;W1cU}2AyA;je4%paBeo};ihbqFVb*nHrg4R zjruDI{*>VCY|PVU&A%fX{oGHm3&D4?(f_l0qTDq-u|5X&#JnbYf=;S>qF?iRqP?X( zK^N;a{BTdu$1^?A-**Y-5d4H-M}k-O!g?(vm`5?{NL6GcwW#4>+WzL%-35AKkkG6pV$}uKdmq5`{#X;p4}JY9NriB32S^+U(CaO zeL*M7`l7$P`U0P?Xt|FS8vT&(tbQo>%YGPtmwuSHuKh5N+5JH8{rh2EjOYja-P#ZB zR`kQTrW3rH+v^8BeAW;1_S62T@4Wt~|APJ)*X8{|=e_%*A0zsso!d11PR)N$f6UWD z&9_O@AL)k!08hM>J=L$ID-8v=a%c?j_O zw;`B^6Ndu+bSV1Wc_{GQXDH@*;85UW=upg4(NN&OOv85##k#E>ig{nDo6w(@o3KB9auejDt410Ii7dvoBhjDgk;pe`B37_W`I@3|nZjK+qd(7R zeec{1`uLO9_l?$b$}Q9u!Ltb#F#X?x@$I?=bhQ5#jPqd)KXnV{^+k<;=N8awqr!jO z0zUP_TQR=>x)uG&BuGsfJqTXI>*iLBr~X#(i%)JveP;yG&wo>RVG!+I8$^Hm2GRc^ zLEtl};dl`ExKrb&Y5v7Q(8-!0#n+AGaR`7xSrLO$kqrsi9fuX;#6=H*e%_d-7C^-az9q1N+v&39@6 z>i_ow;5kr$dM+g^gre|m)e^`8;Oxc)N?d|n<#f36Md{uai18yd#AlA8YCVa(G#VaOkkhB2Ri*L)|BLVe#K zh5r6@6x#jGDBz*TDCECk6#6}E6!0Axh4D-pg?g5ZLjTr`!aN)rh4H*R3jO;?>-lUH z=MYG zL4WU!pqA#{F;<<^C8&f4_*Lozr3{-z|oG!wHh;XN-#} zy~L3J_XLTAjrU_%Z+T^Ce|Q=C7cWEo)|3uUq2i*Hdxy z^N(@N-=}fV-w6qnJ2L@&EReuDoRUC$^AjkyMB}#-B+@VrCosMXlj!$lN#yU7#Jmqk zVtp1S(Ozv5?cJY5d#jS5uboMZ=fNcS@3Tqplcpr*@%!ayH>(`@$SFsEipnv+Z{t|-y9dW& zJ-#;RGDk4~;{A-W-SVeLYU)*$UvV zV+HVcNd@ZZQ31JaWCg|*tiU)+Dlm>xf)$K^`qPWxUn(H)W!;W;Cfp8rW%cc#!xQg7 zKmPL$)PKbtn1_LPAU&$-lkWh%uDk>MX5Ssa!`pX&4}D5-H^Gem#yA=X{)XTwcVfP} z---FZ{Z6#A{7$U9eFV1>Y`GKr?Si{7z9;U&dVc0E%*RU#|9BV1`?12$?*c#i>MqE8 zKfW8|9C|nAW9;2n5999!y-mLx^SR<~;BVL6SQiI1-wPUk{ch0t`&#Ztm6*Q^Dlxyk zDuJiLmDt~Is{}rlSAs5fSAu?Ds|5bvs{|f1s!*<1m6#-qf-0=52da?&tt#NXxeEDD zsK&hhyc+%MSPeXOsRo{hRbxKxBuGKfqd`WmI18q8~H z4f-{{2KZT~@jGfjk5AV?zj(O@^Yg>;;2%F8kNP@}M>{>oV;=jA$9{GDc-Sp>jmNxy zso@_?AX;YpO~ATaFai3`Zxx<65&G|S6M^3`6S04L#Jwi<2-fC)Z*em+-t!W8uD`wBZxLAm}@P;a4z6H|cS+9|;Q zJySpzv!-A?i>Ig^cnawHr74)V*Qa3K|2PHX_)z12I2HNMnF=~MZz|}o<5bjhnZ^&* zd^b%+dj(TbUsT~8Q?*}O{+_8A*8+v>wEQm3e^B#3rQsK*qW^DC1;71B!^Sl9^9R!q z{^>N(|3%Z#k6$Ugb{gjGhG}SLu$H@N8rmtG209uw4dYp&+-A7OnroY3TRo+Mna6qy1B-W54~;bmYsJj&hex$9!Ee9s0x7)4>;SpN@97 zYx%v?v5p=gIEv?sU^TC!dywz>dsMHv2Y7u$Sg$WB{Ik}3;%ua!F&p{+Yc|p^Q`mPl>Mzpt3WbwrV|~rn@S)jQ zpU-KzKhMTGJaG=%`LV)t=b+yg%>iC7orC%9Hb>6`=b*me9Mp5$9PBewH2z7g=XHYr zM)OcV2jl+gKD2-4T+rV|b1`4H&Q<%{T+n;jT*%K=bHUeF%+-1ozOJxkF8cZ9T=c`3 z2Y&q%g}<7I_yO~PzflS+=V3f^=YhYhoQHXTSi>LB1OGhpe(>Eag1wn8?niwO-4DFJ zaXc4RT#+Oi7qw%vB zpx+x8==#w3M;1Vzdy626{KgL!;{2|9AQJWuJEa4&@;Zb zoW{!Zv>g3ezZ~UXS&nk2t^i)HSpmB1so~)(ufY`2NvKggdOn_%2zA{zWu>p2D>nznkD-g72+_{PvqwsK0m> z=;F>*psN)cerOfO(WvkPP5(^GoxK`#(P=f}2N0aj>tZ$JgnzC^zHVy_gIJg`l;Eud zo7W&cXD#S&+FJB;^IFt%Xf68p_F9xbZ5`mb>yYm^3VSOYwhnkGSqFKod>!WRL5=^% zI^gw`^$4H0Uia(ukQ4i_huknu(`T)RT(NXLV7*?Vu-^vYWz+_w-==Vq zrZ3j;-VJE~`3>lAv%)VnK)yMt4(s>YI-GOfRfqn+R0sMxb0gM$_l?kNZ`+7+XDIXw5^a^&fALq=4^$WamQB0(^lYbv4&S|ML+gw z{Igp@hp%i^`Ex7q@Plp8=daxcy57DG<=@$ca-V7VYfbg=M@Bqd$ z?E&DW?g7;Q_yZ{a`2!gDsoRnN((S-w)^_ysw(aQO`0dEIemm-WaXae!csuyeX*)14 zgLfc);ttfeVu#ADJ1`I1cc}eW;p;m_vND?!~&i zU?0}Y*nK#s+PM$$-|WNu^x2Q{H41;bAN@M{0NUwx0QHt1K)GE9P~Qm$QC~NLHxQh9 z5PbD_2bGQvVViX1E&sE_n6C>Jc0G)K z4LFSS35QYczQZWD;;{ND9R@xh)9^c*uR-(uMa!S@An`JS|M4K`d7i?@9z_06AH;kZ z4@{ZqPU)%Rv;OA$LqrRb!1Mk(3qn@pg!yfqHq)HlbDmT>dJ^>xcoO=|uqT1PvL`{WlQrK`jep=t z^y_IY_ok-5_oV7c3XgvZ<2~~!jQ{edknbjqk7;<`Q>bSH!TtodJ%#hT4>KP>>1E`<})aFJ;C{m=Vu^Ke)5d^|2+#jyZu?@ z+y5-^^u)7B|C7d_@Er8Ovz|k{KY0%Q@1)_*8ou^9;IEg)k9VpeO~Qb&jZgdJg;(thEI9{u=5L` zvtciwy@@ZNp1K!+$46g4xz9EIJ1?St7rcn}`@D#JqhCZli!}WyO@IGIwb#4^*jeG= zm(c$0FM)rocuD=mUP62OUqbn(HTo>1|M((fy%_sv((?@wLbv+gJ->eq{T=oi%HQ%D=x3b539n(j&r*2sHSmSz*U*pie~0?IDD3q+#E<+P z?0&_+L%sFCLpy)hd?)-K@Fxl{R+#;J^nb+f!B=a3k9~OY@3CH<`91W}6J7^@z2J3> z?>2>VUkCp7zmED&e*^8G_Xg^{O2dV3fZyEt2IRQKZ$K}8MAP4WL-pD>FmB^bwL842 zcJDW#@AY^S`|s_V{=l0m7i;+WH_`9c-bDMSzXiPh>MgW$ox%}sAwBsP=xWhh>JRW1 z==b5b(B7wSK@RQoHs=3kh0(V$p1a=0IF`JPdiHDl8*eLpzKwRydI$9In|Hv^ZhQyz zYSe&)O(M@ zB^tlE3GMD|QvZ-9^y?jkCp06yV>8lwG^>2vjQKBa#(q7c8TPp^n^EscEx^N>EtvPr z7M$PpYC-z;7Sy*-!;fqJ=UT8YeW2mYKcW4;e?mC?C+zFBf5JHC{0Z~2>Q9*eR~7#3 z&njR48R>Uwc=MkzuBZNt@*gSuM)RHdKKT2!@2g+w`;Y@Cy$?D3(f2X#hWEkuPX9pt z5kElw&L6-IlB4mfK0v-53LpPK{Wd-Te``|s$p@IPuRj2NobVy$HSWe?j@=Utq7D{};6Xg~p%vDcb3+u=rD?Py7_~vF%gjd;L@N^PigUlFzV?1`xdD zI1=YSgZ}>6=h!bV`zzMbl)oZ>{a=BfK{g~iaJpR8y-X8G<#&_Qr>Sz1~%B}fA z^^Pwfr@r$A@KgT<%6&udCW2RdiSXPnF;6di3B0`fCHnuV!XJO7ddF9or@k7FeTDY! z{tDw*qTzSG!npsT;Vxf;pXGiHJ#E6*;KMI|jrvabJKF6)u$bU){*HE+{T+1k7{Q4I z|N3{FW8L`=jPK!pp#C@i0sMcZ@g4q&{&oGQ`sw`>`r?d#;ymkFf)8^3f2zFs4cdR= z8}QdRzfnE#8}#FwZ$LNyWgI8{y^tWc*Owr-KaQZ-?+9|awFH?D?I6hW^B>0@2Ri^k z)^D#QD0-HLClF*kdz;57s2VrBmT4#juZMHbppyQC&>6bLXh#@`NZRd zUlbC&mEbIbY|r@gM5JH!9n@R)9rSx4!J!2A5#(|H;Je4ky1x9o2q(Xbe$UtV2MDtK z^ASN_PouwgoX9QZ3KtP%yV4^H|4NYgLZ_3C6TJ5z$b95Bg6wxN`6Q%oQuqYH0Mn`F zKk?+_M9%C&Q2ZYV^0{D+!oA!n;nvJWf3Y_+3a){1Z<>eT@n~Q1}@^mXp5L@TI4sd=^1oZ`Ug?k=ZeJV}DA$KIjo6BW)p9dxnabl`RS>8STfE!Uv%{nOE}PZgeU z2H@FefWFQ<1NnL@?5}Xh8K8ran(wYN(9e};p#809U>)ou$me&T5F{1RxamyfyWlL$ z`{ic=A6K4*dT%6X1cK4RK!-%2G!_pT9XggLLh(+CKtZguG!#vS3Inldpr9leEe<6@ z$v`j}=+JR&NhsPWktT0hc_b2uhi)qmCDLT)yx~}svRA~){j@YNn}MR7&jqBBzW$NLZL$b*=Bvxz(h&EgS{dd4D=7{;h@Pq?@wIX1+9-5t#3xf^KB zUBVkD5d-t`ta0a+m(s8+_~)Qtu_OnJV*;>J%usoMa8lO-8l&k(ZTusQ zkry#Ou&fHraKam5h67{6$r5fj93>LvwPSUqFcb+%L`o&?EffhysUf1J&^SRn*Z{Ap zvRERVjKwPg;Y1)Bqg4|uE2Da8RTSn2%0lsyU>Vh(qy|>f zBuhf*Rt2rl(m+`x6ikEy@$#soP=%3jL6G}GNDb2JrT=5`!cZJ*FHsPT+8trkb?m^4 zocr9#^*bYDV0PdBL$U)s`wzS!Bg5z>yn|PCpd>gZl#WLj-TL(DKh)@!n-drvsxWNw zmtUi3Ax47{M@(6HK6TiWP*4ynr^Vf^fX5+V3{^}-P5%NxA~Zrb*1SXzDodzaCQoq2 zm4-_5X&G}=K}k4L7${~smoOtye%MhoLKE7_9B@pXE4Sdo6>y}>%$3FjS70GL2gwqe zd?)wIG&7f%MPk81rMbdzJXDa3R0PI^gHG%g7CJiP2|C(tM~jr=M!v*a19A^0REWQU zP-!q6VUnlfX5J7wo!V8Vjk46tjH?o2g%l(7BNnYF zjg=>q^BUdC%Hp((5;}+#&>s@{@=10V=?NPI#Kvx8Xqtn}r?KlNjO)7PWgFMAeAJ_# zaa}kXWPI_y?)V+(*dfu$FeP(Fqb;RlGf^N(=I(M`ISUgqy@>)EBOheAY>+@wV+##iT~Pf6vb$4sv9%oQm&n9L#Jvk0ajy0_f`#K` zEEdQQ7mN5U!g6_%`doAovjY;Hii%hz7Im{QoG6O~D=-{RXh3G3r}_ z5MDq+Nl}ue+n_9cX)a0xhFu!eWUhhkq#(p;MMgr9rn}Q}9~~gsSj3s2Q`$um#j>%$ zIVg{^p0IN!VsRdRK`2_ti`X4s7;+@A%*5+Of70@|ent3Kf>A=i;+e5n6o?ju zm=72gc96}FZ^=$$iI7<96kqb?H;rEMu()>=QD6p=1Z+dZ>$wAPj_ z_OzADn{G+FA*UozfE~)t#@lk5-pV+Y=v)#`B3$UIL$zPo@uT46VcNzDT>XIr;Atuf zX2nJ}ViZYFoa%+$c`qzrRF_paMYEI$bdrfT{`J7z(DGHj%CPt6!zTNuuFl=jI58A*X zp=I*#kkLaGxxrjtt^>C{QZ-1wxIlSXp>!xwE<#)p;jY5UXtE2DPGIjSBOY~;wF@RL z3XG+$CQ5|&vLIDz_sJxHR@>lS@j_6bViE!{9k?RE3ZRjOp>XoO_8NJvc8Ha}$Bt!WTXNVVYvORqE=vFQ0pSlMW!GZorv zC?43ceu(KbA>FgY2jU>Xv99p#;W9fc8=M(}QKV4YmD%ueDLbo~&B)FWeaaHV4Y4ru zAMS}jn_>`_r6j+gs>x59e?_}l%#OJR5sr>{!p@5P7K|i_8fpD<6frGUgg>{@iW7NP zwmNJE5~kcH5`BP=IPC6{I2A0kCo-GygTJO(!yO8l;bbr|+O+hVQ8D^aM!UUp>`_r` z`t<0QYyP(6MG#ZX~d;7 z@+&f!3#yDG_{HV;97Q>zq~w8JDs`V8+J=^JvYA&y)uSZdI* zx1_{Sr=o<2bVwq^M_HKe(2+EwPGR2J;rWx!O4Mr+t8!2D`p%-DD#fS5q%9Cv1=R3`A=7HDIWmkgqE5wpy zyIV+?*{a|A8#uQ^M~S?JC#F;4T-vT#+^!%2Aj~KEyV6fw}Cy3-h&3^ zifMwaAc|G0D^hCo4iSy=Kelkitp ziIOTzxr46bu%Mpsn`iKj^LJ)VNwKD}C>;qEC1WgJu^pJ#0jmf3Tw#H2?Nd>Stz>)} zAInd~L`C7eT+S*3K}pzEI7!`&7KX+J^2PFuIw*>o4k!K2^(ajgeW#exkrsVMFi{W= zcM{vbqR7r_8sshtut6=%E4Kfh5B3UcV-1@_@`N5o->GWcUyT( zI64M^T#oHUNGYcklf?CUFmXdDR3>I{k(>nUF~M+IEF4W{vZ6|T9hlv%N8fD7_N>jY zT;`U=5}8z01^<(_12O~56`7vGY;L42o>&2)>!Lt8VLYBFAR-~vl$2!_@uKBe3L=d2 zA3j?UNc^3O;ddSokyj8a3n4}f@6>>vh)7)Pnk;9@<9?~-!{`%)U}Gs7eS!(oH3z?C zH?e*>HWP^(=qgv>C};ZE#1V|dio=?#G)DUzN%9hkqWWYgVOt&jy@Z^x1&&xCxBv>W zh|^Sq>GcpOQO>|IJW#g6o4+Lki3~|cB!23#n)xG8T28IV>2)N?o+Cu(Nf;6&g&Bn& zqfi4_2gwq<_*hxZE(L{`Huo%4m>K9MmiGelKtNVB^aAD?q;p~3-D~>FfqA6DX%fVVxQ`(qGtfUubHH+n3JgB}0y?kacw|>EJ_MeVM?Q&yIhl1M zb=I-`n|PY3Jf#Ljgbx-x*pRp|5UFeM51!7t+q2ZK|)%NQVH>H_=Nt$Yl}e zCnm-a+mIZ#B|Dbgr|b}PMGl9{Tvb?1+!XxS#=}^)MHi_bxu1D$}|PSj+Akl zI%)F_N9~@*L$qNOCUB6Mi5Lejv7*%pSd0}pJ(!I9@gW{joiOUqSV5sM<6?2L;}G}U zgwDP>DYc*MP;!PFBjIOEDB>2Z`}fQ4LxkDK=+DP|DVA;DSYZh`L<|)=r?o%)it{T7 zjTGP>&`M+3U_@dh%LZ80BxAW1EwFK+R_~cTKgwaa+J4v zr@i0t+bhE4La+|0aSTF(C(`0ho_Gj?Ik{slW0@+aY{;+eF_M61OL*P9A{RCy|NH50-8=%^}_5?85Ac(KI`XG-~1R2Cl)8UFr~^0BUij* z6a-9JG}rAjqd`|Or!#bJy7My2BPiE$5!rDTa&E3t#RTcpk7ld3WbZ_DC* zuRe9*XlCG2Q6WX2JpWil|70aCOGbRbI^17&qU)(kq%sm||^IG+-W2tg$T;rVRaORN~n z3s|scU!1U98J%v4?JH%uHG0a$%|MvdLV|FIpdY2dGN%CQ;{B8=yB%}ufr4KJ>OwLQ z>ZZ%bTH|C+JnmwenvbEn3nrM-$k3Gv+gP$=pq71ISR z0u|JefEa8Z&UhJuIRev0tR^^5wn95!`hoi5)5mYXnVbgEa2#=Gb)mggyQZ^{8||_W z2J-Uy$fi4{z~T04B`4emsgW>ATq0f4e#9GCWni4~+SvpC3 zbU=*qIE}lk^RKhmsKGXlP+5{0q>(qM+rUA$4C<4|GNITc9rnh&!PgBMn4N9p(HzJh zOWn`YS%G2%W2XY!P-jMvR$%>7;m<+cc9LJTL#WUgPpbhEph~UZ@$zVau#Y@wgW~T7 z6M2e17<*c3U73NQ%sA9{U6tJY5TCYTU9!Fv0`F9}oC>vsXiMM%q}=6^0w;gmN_C!i z37a-635rDTb=OvZ3DYhDN9>@w&0Iu-DTtJdIg~B=WxhHPHSKh_;I>SJskPa&ZRC~2 z#>yYhB~FP7!tj_c77m92r$Zv6YX>tA`<~l%nLbGP?XV+B1Z^=nJ*=N%8& zO5@b$B%AR}t{ZmT*>dNMz(n0jMs7tE0e8^0e2N2*ooHI7B?ea{?Tg0}DXt&#%V|JD zjB}y_;eym#QJT$GBwNW94;6%>wpXwjXSxH-|Hm{4ABuwb-!$`2Yi z+!z#;D^+q`eGtzHocacpzzr{eBbA_a8A%v*DA2v1b^MfIO5~%nK!$pcCnSrAr<&a^ zFI=9FrfJU~6O8Z*Csdxx`caDq6UZ)M<_mq%^c++m?R@a{VeC>zCxx}r8iPs zb>R}vAiIuGRE|#Mx;V+Q<jbzw0w~y2j=yn**iH;#IQJTZkMJ5;v&KfZiD5bUEU(uLNYG-=Per1)Rrk zstjCD6q%quTbJXU*Ev)qD!>IfqD^Hf=?aos=kQZaQ%vyb+~+~5mH?k=WfPwjHFwJq z)FAJPM8a0qom#jWX}#I)tJ%=GnF)c_(9DhvR=994t6CIWv4->J<#^16hBu^pUI30P z35x{G>2@+;do8kr<$ijiFvh8+dfJN)n`}#-HE?@-m`D+n7=yxP^e;)W)*zCEqpZc? zNMlf3y*P19Hz;0CS@?{W|9Jc#nKnhI%QObV`PVkIhQwi$os>g?bIU4{B_ua<%(=GG zZs|@^T&`9Te>F`G`fdiKi^0qz^>~f~*of)J=qND->*}7IC7Y3!4Vfl$un@KabGAh) z9c&si2Ez#x@*8Zj8s$7ax1_s3#}dFVQBsTNAT}jQ@H2$B1?H4c%cIdg*q9eG7>upIsoEF{}Ep#tJ^N`CXa*-&ws))lO zrO>+f!YPgsg`DoCgW)V|iWn)Up&sW$xj&lv&XMjUnW)Y(!E(P$GpyG%W#@GL_Nr}? z1pJPB`vXTA7@A-0RxPQc5hz^sf?^n_#4jP*Pq>N_m0P zH_i67qTPiw;&7}`9PoLvl!vRR!-5wMRD7$FwlNYPoUy*(S|3BicgN=QB%Orh{)Lz@ zhVVk?KOihs`Q+r?5$&Q4Pa0m#L7Xqq4-JaXu`x6xs$H1RK!R3n7H{JX$LZl=UhFo# zQZlK6d}F9%=jWknI37}of$y6nxVdt+jt^zar!kxemJN)>;wuYgPg_s{@65u1Ep=n? zz&=)PnbeSZxkv9&TFfp#1ceV9pWc!&%buTB4RJLWeL5=# z+%BuGs~De!`|@meF6-$b$S{REJ=phMo?23l8H2s&nJj{@)mh1w)qc3kUhi~43F0k3 z-yD)?_4gt-E3)L*gsQE=m*mjb7||DR6OJ@Sz`{2&WhbQ+^SQ&3DW(vgbc@NjU3W&< zMhMrPzLB6xS5Dlx8`)N*X|i=B3a@bobwQ1QsO+v(wFY-2ZX&zm%2FI3eEN+{Bk_*H z2$ugi#Mz7y39muRT|X)I^446MWTnY8kr=cqsDs9HBE%;QhY^_BA*6ECy-&B-0{b#` zc{J?0p<<}{(6kx4uF4kJ*ToZJD2=hFU|7^t%cN-NX}bZO8|+nSI9)4MlO)MTNR!1H z%c?KpPo}|)&cNBR0b{Z}edc;wPy%`sZ$LXyS3@gr!j(DU%*_Hyk$Dk@MPgw-_^Yo8 z8ey+Hz7=Dw;;_?|UIaW-@V5M2q%Ah?je^(nSVPU?Nz%C@wga_w{oc^W^32N~Bv%o8 zjmA8CnD53CkKtGu1Q2Dl#e4*V21ILE-jy*@PAn=6kKS;bxb@hb7w2E#&v4nottUF| zwR5R>O#_?LA`(Q0bK@Ol)M1QX^>@7B_&ps2ZQ zzZIWMgP*Fo75T|3Mku)!8J2-#N$%T++GAr5T+s z%jo>8K$p&0U9QOJe0k^2lrh6RulDBqb>NaNS(kRXu=5p^k1s`J3?k_^5#hZ)E6{Ur zpFV+p-TGz+u5vZqm9j>Q%Sm3z7!(SYW(7tC16TFwb8RG?8H*QpJta3%9uGz`dXglR z$O=TuB$&9m%asBAyt?x#eRKL|+r#fdL+%cb=?pfBWQkgQaan{W>`FN7g_2j7CyO$E zW9Q?J7KP#&+0lX+FaNB-Z}P**Q+lc3Pk5`y3S1{+!G{?$kJ zOtGKzt*@F^U%kD)W@&v*O?^#meN~+Vm)F()m!ST*VR|= zZFkA4>iVh;^;JtbH?mgmuCG~3Kl}?c&fQvHHLt#Eynmb3vyL2G)L1*yzpzDF)LPU0 z{VmfTNH?D4Jo@VW^)(0TtM^c?EtOSA4li$I^cy@qalCv?c{bPAY^<-DU0<_WYMj-$ zt-8Lts=jIs52Wf)ebxMSzK-m~D2E&8trjr9x@GQc{?$-BQS#O7YFt!{UuMhIE2wdf zYFax>vhLl%kJr-w^)>g^SFhx*)lB9ndB4>gSzj|(kg}z|W{HeqixsjD<>eYy_y5sDzzjeL=C6l zsH(2v;I@{fhtnq1S5`|~l~akZfoQXNiE5ZUrDgsqF7ACV+2l1`F)f(ILL=OX`l>BG zu4|Y$f!b(ZLv^gGubNt4Jw=wr!usmj^;K(S)i0&C>#Hc9icYStn&F<@-GaV}^)<_= z6)Hk#;B3{?guhH}m^q#BLkqTH)#S#7JL;?MGn1CeVx%VKbN!yKRnMxgrbZ_o*;CoD zZ;eT?vJfbL^;ENXoh&e61=ZVxW|WaJ)zwk9<?Fd53DoW^AUGq#a4^F)l3|yd$?XA?lRSrjK>HQv`sz(g_Po|zgoee> z!$-^%Ay99Ih6x*6=1y%b8>6F|kg`U(m4vrgSTVyiUtDCap-Z-5!aBjtW})_F_F8VJ zUCoTt!2nazG+`!~teLiHrfc1rG;8>?4F9}@>E<;v?0|`OzZx9L9!hf5?3de|L;CA% z*eBV4JXNy=32F9X_dZ~C;9^~_7TGlIoYpjF8!ZPS)W&;O`;Jk_i5AWlsjNoY++@zX zcWK-BPLGa%aS(<-ITAO~?(#x4+$gjryiLUVWmIv6GS3hrhUVNg=j6)p zCi7^k_olDjMTg)>zWJIqFK?PTQ334=9yA#(b@wx8tJ=`KZd1eN1u5aQI|L1@rRp9P zJ{ZYWdui?3zhovI@_{qKJxJnP&Fi)`%-CXbWm_^zH@9n<{3@$Vg7FYtUBea(e@*jp zs%|CWp>g(f-VrFX-HmBlxwb0p{r|6hAN6bB=G^fzb5E?%JZVG2)cbh4-1`Ab!HXt0 zOxepz3G1_Q^3?WbmCb9VEr3;RZW_Owax_evdt}ch*^Ji--O+lQ)--=#)10NQCE?hq z>bS2}n;|o`v#^WUWPzGuPx~rx$&oIm^lj9_yQGVc9ZjWPCJl+|fbidcr6P9+zom-) zg<&3hcfOtWb@O1#JG{7I)BVIn+b-s1np(D9O*XDu-!gyZ(X}V|USUo@@!-h~Gv+oN znsSR*1b;g0(fTV4Sm_wjF8pRkfxbE~c)m zfT2}6tt6h7*YYaW27Qf0Qew80kTjAY{Y(cb`P{wtuUw1-z%Pl4_gItAw5Y1-zSYhJ zM~XX)QY?BeU)Qv1AJEXSY)8Y)TAnSW@;aJo+5e6lJWNEDY6dvE-VjNob|@XTcx{P_ zR=v+8I)5FjW$ucW%9Tob{@vN!Itj>HSjY75FVgF@q#9Dzu~AK>K2;}8MXyfQ@myhm zJ7xK&ESZ^gT)QR4+aqS;;1M?*nkMBBN{!rWS0|Wm*U0$hSyebCESGVirD{)o)h>fT zQmf1GcCmGsHmHc>ko9WfR$wwTFSNZ7_~;r{OPXPg@-xT zIoyT`HLmdBfjORV9~VJb0-BlLRa6(l&LZkv7_mMPJB$z zP`jSie8Z%Djf+=X^yN5cahbzr;|JUKFSfU3U1W?jyP&%k_sK=8X=-A3?xoD|%~;1K zMN?p#<9U_(rKOAYaA~UnF=5+b0PB#%lH5!=*;I|pIVOZn*QEx_ZPiq{K5v$D%brJB z+HI+G7p?X!{n3G?a+g1KE7LkXqWjSf$A9rS>NsTeBaP7et>g}%QXt5e` z>AH=JHZ~lb&9<7hP+?V*BA<8-0oAiCLqMAomUift$en_#RDH-?lB5_BlVX_>#}%zK z+ce{l2zQ&Cc5Z84SKC-Kp<&rJX?BBSlRdW1bBx(}-j(NihtPP>>ZV-_1atcZd8?%g z<~Ew9RzFjMJ1lIe*47^-VUDa(&(VapFN`29raWtoC@$9i+Ugl@+RZdIxz%b?=NAbo zuOh$)seU@Aow*I=w0aiAa~^ZsMVt#KeLIe*rQnyI4koSC zEWlpJcH&ggva(7Q^U5kbFDe~N?W#wAnAJFK5-kuX8N140{iN%iPgX;ZVB9-swSA6? zb5+j<>t?o6yBTF3Y&v#!KlZ7V;8RiahK-~h8Vxg6$?~%1)yk{qDNaR}gtbY;0b3TX zpi0vB+L6g&AaQU0&Fi-}?bzz%a4reLR=7yvqke$ndk-9CqN>F756y!Z(s)ZPle&pa zCL5`QVOZ-~)EHsJshODJ>F{jUs{1eb7f6q&qC)+(CD^lMd~ zdf;cSG1HRaiy22OqL@J4VtIYd{UR7lPFW6X_zz$aqKD zeUD6e%%%U;ezY~HqdG(~{UVOC58nbc_=$uhxr#{Gt}2*S9!oiEH$I9o{=|Fi75Gfs zQB{^gi^o{{U+hO3hrVN(6`TzmOG(#JkdLWio_#3gIf*bDr!H?eu+zgeU8};B=j$3) zZEL)5UV20xMOME%ZotP>K}Y-RKb=%|)^vyOv2E#e%6n^@4<#xDPyOl~Dp{{F~Nk#7$*>jbWmC6NjgFuh_=DQ72GpD=56Kb*oMyely z4^G{EfUcX?RG7B!?KBu!s$tr)&K4Y#NdxluS{>O_*<8DkKZ%rLgHFTB8YZke!X{XC zd@veo_w#7IUq}+!M2$QySH-~jo|dpjo*%GGG)MN_!{@*4U={yrWj+-+arZ6tsl8P? zs&NHU-!GN5Fkd)NoyqLmI)QX0Fs1W4aW-jvx2bu<^yYO3#Br9=;9$!Z>N;M0a(ZR7 zELbLfmZGETk$ip4LaAw){mYX6?HxoCac9BnnrqT^!;ES^`SkH=^_~w~C&La00;iGJ z%~G%!J!gq3*{2wLY&TK+IEffx^BO%QII?G|?T1gAYt#ILR*wHye>p1EyG6~}?A>K9 z>Q)S>O}pkdPCjhe^E@c7bDvo4+_#&4sQM~WiJG9@79vbQDlTM8#sv-l=|0@?>$DEm zdgUmIs9!zFDrL}nd2Lm%=y*#fv5U`qNL^n-oKWZma$pQ>+YAESg99Lw1CB1S}SIELaF!2{wX3m%yg#t zWKVyTkiyz5FMRhw`XT?@aqI>~YS!Y0g-e{WDZGmtCK6NHorL!74a(IPxs)tn_x#MYl!pwW0uBCE8)6&%`(bl1<-^EgIOZbeLDy0rl%kLDx zeH!m$g>5Z|?p3YjFzvK3hS50$lABTLLK^qs$YnZWHSd9y5_BCa{R@_FKHgfo)WUZyQrx;7^PMX~BlR_B9=jg|`Ex}&tqrPecRP!L&Fdc!_e4yQ&z2~cfZJ79z4?NO^BC5nY)@nH zd(sXwhc3x`O@?F293B%t3Ed>=c$v;^mX@Y%z3J?K;kotL z6bUk|^w*~MYNdZ^agtA)66ly};_lQ+c9E*<*tb=TBO10GHd`;&S~l$CmpWYtOs|zy z(z7~dU~Z=ZziK?M=A_~J-m65u9opi)5AQLP);YIKhi;VqB-(EtxxqI!Q`XeQb)H-F^R(&$+mcz1H1A)-qVJmN~{ndN3ZoV}iC!i-b)PZt`#l z8$M5~sEcWu+pt1eE{D%nuL{_1tWN6&SCZxyhyN)K7ijIWMEgCe+b)z6{=fYAq^B>| z?we}y@be)~Ii}j=IqFM8gAQ^d!Xm!fFvaD6z^^@FpUc7vQ;btTZ{n0gPRI8V`Jl=7 z5DbZR>CeAfaZK^;ZYo*GN~zwL_WPE;XO74Ih09is3y<|vm#t9x|Ik-2TWOIbK+nvk zoxIjRgW1}sT1iW{EVh6)eB57CI^x-+;R$u&8K2^74a4xzT(mjt^fIj9^mzUQ^+)F03EUOiv zBgM;C?6BgM;NJu0!! zUdnQT<4XSj(lw|CsPQl(EdX}nba_5K}I#ch5Ll_rkA{Z8vP zSA5rXHPfo(7gC+aPW%MpJWe$gY<2FatZL;usFD1T+`XS;a}_y?)+>-}t#72(n@=)W zUq;0vIrfcf4cj&UaJsC;5+yZ+tR zWb4K#M2th`Z62q+z|SOYYtyVI-DC1I`#y>$``%GAi~8QKvo6);^x(5otwvu?U2C=4 zzQ;uT+Hxx(wTl}UEj1t2unsxe?y=kMzo?QWn|9Y?V>iV(VLu*V`%<)Cz>#M8T$osL zz2)kCxzx;5Ekflw4eODRm7d;Cx!Lp3jy2^+liTt|Y22}&kINlq8rxo^@22=vsk&9Y z`|TUonF=_le0J6`D*p`lE^WYx9s8{o)8K7-=Q);;>lqCT5xdukqxS}#Ghz+eM+gfv z)AR6jr95e|!ETF<<5Oi_T3*o}H)F5)#SZIpsI5iSif6K=ms;&wU${+w?bG%e_gul{ zD4O<$wNo4Ctqx@9MXt0p>E*4~?|_=F_&iBYK`?DXR>1oL3{^`E+g7?ZjH(7B5+~k!WJ};&CmLxzvmwO1rGR6FZ|keR4F^{=9GF2ALX4_~&%W#{8`djeLahf( zAA>DEBr|CZ2_=rVhg^@U8y@cGf9(H1{LNp}Tf+MgU@Pt=PO?gq$#k1Jwq(C+^J%j> zWd?61I7wLf*0(vdwC1n$W%NCz)Pr5f|E{;{H>aLdq?RO_$LEISIh(YvD0)2T4Qr94 zyK_R#w@jKYmX{5t>TP+5n=b;H6XUSa%&V`SBo>ybmO@ChZ|0n5-z~BtSudU5ct4-e zHr4HNjK8(F`Wq%rZ{E3Edp0Mw_M{N2k`YiP5q1m_|Rx)hox12#4Lz^*M;9$$RCq1REOX?rq#I z&suY%(*51r582kE0>3KRS2FI`^GQ?rU1V8mI6|Vx(d64aWsg5^;t4H`lu#yKGvw zSttmPBgj#JozmqS8C0|T?a-@VErft#t@Nqy(RBlTxWKL(DHEo=~`KKNw4XW^IJ)-kb9q4b{|@H1k}*wVaaF3XH*I?(DnTs|dScg54=$@|%jiEQH& ziBGOF7sRn=K`2(RB7Zm0OZ0A^cJeQY#-SJ9mXv~{rW zX(`8H@-omdC?R|e+Ilt9YdFrm84Cujx=3LT+vON%zvQPgd(?Pj|9u zJG1VT@?$^i1vyoQ<12ofy|1tlA*a8>+cak>uh&$4bq3|X7l%sDrR?|;x{t4wCa7Oa zs>0%UxoTgn$PRT46IQ#V!^VYs*a=NUbM?J;3+~SMt=CdJIs#If`Cb27`&!e#@-_9g zZtK@c^DOOJij?CEU>oe$!R0ZrG;+O*+iWr49rHX@@Aqu0Z>_R|eCkcF1lohZY9d}h ze57&XGD{o$*6`r}V!qj5^Gz!^#itkOq?mc@vCg9gIpxHFUEy+(&alxI~M^rXIP=`Rs_8kcD> z-@JEyYtQSXVsU7jFx;$~KRBQE`rWbKflx`Nb^j5UB$sw4;aixFEhx=p4LLKm_Y=n# z?9=U#Bb+Cl>9SSTjc^j)NI$L1tF5(Jq;7=I$KxDF2B}4;w_q3}4Y!d|1l`s$ySRIr zco&m%?jS=o2D(U&n!U)e95f04Sle3{}QRAi+zCFiU zOhu!Ayc>;X9#cN7TIYYDZ(YZ9;iSI0x}}PrhwywPa;iwb+fz+k=6>SY2Ge~@zV{j}k`d@L zs@^v%J-2h*?{s-S0qaWhzM||%a|Qm#8qlXR+}cxbqcip?n;U|)fT_K z$sYAfH#PTtqcrzExV!S41i$D7EB$(Cf`)o$RBcX%%lu!UNadEc{mS{|kvp(NkN?aS zRqJbvYNtFV_gCS16tWI$_yebo%ZF`T+e*chOcmpw*p7vK$s08rCVG*XhkbLsJl^}Okv^7haF$E*zjkGVni4!CsH3soVZP&Q+xe 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-12-14 04:19+0100\n" -"PO-Revision-Date: 2013-01-02 01:39+0900\n" +"POT-Creation-Date: 2013-04-05 10:19-0700\n" +"PO-Revision-Date: 2013-04-06 21:38+0900\n" "Last-Translator: FULL NAME \n" "Language-Team: ja \n" "Plural-Forms: nplurals=1; plural=0\n" @@ -27,11 +27,11 @@ msgid "All Branches" msgstr "すべてのブランチ" #: rhodecode/controllers/changeset.py:83 -msgid "show white space" +msgid "Show white space" msgstr "空白を表示" #: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97 -msgid "ignore white space" +msgid "Ignore white space" msgstr "空白を無視" #: rhodecode/controllers/changeset.py:163 @@ -39,20 +39,20 @@ msgstr "空白を無視" msgid "%s line context" msgstr "" -#: rhodecode/controllers/changeset.py:314 -#: rhodecode/controllers/pullrequests.py:417 +#: rhodecode/controllers/changeset.py:329 +#: rhodecode/controllers/pullrequests.py:438 #, python-format msgid "Status change -> %s" msgstr "ステータス変更 -> %s" -#: rhodecode/controllers/changeset.py:345 +#: rhodecode/controllers/changeset.py:360 msgid "" -"Changing status on a changeset associated witha closed pull request is " +"Changing status on a changeset associated with a closed pull request is " "not allowed" -msgstr "" - -#: rhodecode/controllers/compare.py:75 -#: rhodecode/controllers/pullrequests.py:121 +msgstr "クローズしたプルリクエストに関連するチェンジセットのステータスを変更することは許可されていません" + +#: rhodecode/controllers/compare.py:74 +#: rhodecode/controllers/pullrequests.py:167 #: rhodecode/controllers/shortlog.py:100 msgid "There are no changesets yet" msgstr "まだ変更がありません" @@ -94,156 +94,187 @@ msgid "%s %s feed" msgstr "%s %s フィード" #: rhodecode/controllers/feed.py:86 -#: rhodecode/templates/changeset/changeset.html:137 -#: rhodecode/templates/changeset/changeset.html:149 -#: 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 +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 msgid "Changeset was too big and was cut off..." msgstr "チェンジセットが大きすぎるため、省略しました" -#: rhodecode/controllers/feed.py:92 -msgid "commited on" -msgstr "コミット" - -#: rhodecode/controllers/files.py:86 -msgid "click here to add new file" +#: rhodecode/controllers/feed.py:91 +#, python-format +msgid "%s committed on %s" +msgstr "%s コミット %s" + +#: rhodecode/controllers/files.py:88 +msgid "Click here to add new file" msgstr "新しいファイルを追加" -#: rhodecode/controllers/files.py:87 +#: rhodecode/controllers/files.py:89 #, python-format msgid "There are no files yet %s" msgstr "まだファイルがありません %s" -#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325 +#: rhodecode/controllers/files.py:267 rhodecode/controllers/files.py:335 #, python-format msgid "This repository is has been locked by %s on %s" msgstr "このリポジトリは %s によって %s にロックされました" -#: rhodecode/controllers/files.py:292 +#: rhodecode/controllers/files.py:279 +msgid "You can only edit files with revision being a valid branch " +msgstr "" + +#: rhodecode/controllers/files.py:293 #, python-format -msgid "Edited %s via RhodeCode" +msgid "Edited file %s via RhodeCode" msgstr "RhodeCode経由で %s を変更" -#: rhodecode/controllers/files.py:297 +#: rhodecode/controllers/files.py:309 msgid "No changes" msgstr "変更点なし" -#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372 +#: rhodecode/controllers/files.py:318 rhodecode/controllers/files.py:388 #, python-format msgid "Successfully committed to %s" msgstr "%s へのコミットが成功しました" -#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378 +#: rhodecode/controllers/files.py:323 rhodecode/controllers/files.py:394 msgid "Error occurred during commit" msgstr "コミット中にエラーが発生しました" -#: rhodecode/controllers/files.py:344 -#, python-format -msgid "Added %s via RhodeCode" -msgstr "RhodeCode経由で %s を追加" - -#: rhodecode/controllers/files.py:358 +#: rhodecode/controllers/files.py:347 +msgid "Added file via RhodeCode" +msgstr "RhodeCode経由でファイルを追加" + +#: rhodecode/controllers/files.py:364 msgid "No content" msgstr "内容がありません" -#: rhodecode/controllers/files.py:362 +#: rhodecode/controllers/files.py:368 msgid "No filename" msgstr "ファイル名がありません" -#: rhodecode/controllers/files.py:404 -msgid "downloads disabled" +#: rhodecode/controllers/files.py:372 +msgid "Location must be relative path and must not contain .. in path" +msgstr "場所には相対パスかつ .. を含まないパスを入力してください" + +#: rhodecode/controllers/files.py:420 +msgid "Downloads disabled" msgstr "ダウンロードは無効化されています" -#: rhodecode/controllers/files.py:415 +#: rhodecode/controllers/files.py:431 #, python-format msgid "Unknown revision %s" msgstr "%s は未知のリビジョンです" -#: rhodecode/controllers/files.py:417 +#: rhodecode/controllers/files.py:433 msgid "Empty repository" msgstr "空のリポジトリ" -#: rhodecode/controllers/files.py:419 +#: rhodecode/controllers/files.py:435 msgid "Unknown archive type" msgstr "未知のアーカイブ種別です" -#: rhodecode/controllers/files.py:564 -#: rhodecode/templates/changeset/changeset_range.html:13 -#: rhodecode/templates/changeset/changeset_range.html:31 +#: rhodecode/controllers/files.py:617 +#: rhodecode/templates/changeset/changeset_range.html:9 msgid "Changesets" msgstr "チェンジセット" -#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:74 -#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550 +#: rhodecode/controllers/files.py:618 rhodecode/controllers/pullrequests.py:131 +#: rhodecode/controllers/summary.py:247 rhodecode/model/scm.py:606 +#: rhodecode/templates/switch_to_list.html:3 +#: rhodecode/templates/branches/branches.html:10 msgid "Branches" msgstr "ブランチ" -#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:78 -#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561 +#: rhodecode/controllers/files.py:619 rhodecode/controllers/pullrequests.py:132 +#: rhodecode/controllers/summary.py:248 rhodecode/model/scm.py:617 +#: rhodecode/templates/switch_to_list.html:15 +#: rhodecode/templates/shortlog/shortlog_data.html:10 +#: rhodecode/templates/tags/tags.html:10 msgid "Tags" msgstr "タグ" -#: rhodecode/controllers/forks.py:158 +#: rhodecode/controllers/forks.py:175 #, python-format -msgid "forked %s repository as %s" -msgstr "リポジトリ %s を %s としてフォーク" - -#: rhodecode/controllers/forks.py:172 +msgid "Forked repository %s as %s" +msgstr "リポジトリ %s を %s としてフォークしました" + +#: rhodecode/controllers/forks.py:189 #, python-format msgid "An error occurred during repository forking %s" msgstr "リポジトリ %s のフォーク中にエラーが発生しました" -#: rhodecode/controllers/journal.py:218 rhodecode/controllers/journal.py:261 +#: rhodecode/controllers/journal.py:275 rhodecode/controllers/journal.py:318 msgid "public journal" msgstr "公開ジャーナル" -#: rhodecode/controllers/journal.py:222 rhodecode/controllers/journal.py:265 -#: rhodecode/templates/base/base.html:232 +#: rhodecode/controllers/journal.py:279 rhodecode/controllers/journal.py:322 #: rhodecode/templates/journal/journal.html:12 msgid "journal" msgstr "ジャーナル" -#: rhodecode/controllers/login.py:143 -msgid "You have successfully registered into rhodecode" -msgstr "rhodecodeへの登録を受け付けました" - -#: rhodecode/controllers/login.py:164 +#: rhodecode/controllers/login.py:138 +msgid "You have successfully registered into RhodeCode" +msgstr "RhodeCodeへの登録を受け付けました" + +#: rhodecode/controllers/login.py:159 msgid "Your password reset link was sent" msgstr "パスワードリセットのリンクを送信しました" -#: rhodecode/controllers/login.py:184 +#: rhodecode/controllers/login.py:179 msgid "" "Your password reset was successful, new password has been sent to your " "email" msgstr "パスワードをリセットしました。新しいパスワードをあなたのメールアドレスに送りました" -#: rhodecode/controllers/pullrequests.py:76 rhodecode/model/scm.py:556 +#: rhodecode/controllers/pullrequests.py:118 +#: rhodecode/templates/changeset/changeset.html:10 +#: rhodecode/templates/email_templates/changeset_comment.html:15 +msgid "Changeset" +msgstr "チェンジセット" + +#: rhodecode/controllers/pullrequests.py:128 +msgid "Special" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:129 +msgid "Peer branches" +msgstr "相手のブランチ" + +#: rhodecode/controllers/pullrequests.py:130 rhodecode/model/scm.py:612 +#: rhodecode/templates/switch_to_list.html:28 +#: rhodecode/templates/bookmarks/bookmarks.html:10 msgid "Bookmarks" msgstr "ブックマーク" -#: rhodecode/controllers/pullrequests.py:190 +#: rhodecode/controllers/pullrequests.py:228 msgid "Pull request requires a title with min. 3 chars" msgstr "プルリクエストには3文字以上のタイトルが必要です" -#: rhodecode/controllers/pullrequests.py:192 -msgid "error during creation of pull request" +#: rhodecode/controllers/pullrequests.py:230 +msgid "Error creating pull request" msgstr "プルリクエストの作成中にエラーが発生しました" -#: rhodecode/controllers/pullrequests.py:224 +#: rhodecode/controllers/pullrequests.py:251 msgid "Successfully opened new pull request" msgstr "新しいプルリクエストを作成しました" -#: rhodecode/controllers/pullrequests.py:227 +#: rhodecode/controllers/pullrequests.py:254 msgid "Error occurred during sending pull request" msgstr "プルリクエストの作成中にエラーが発生しました" -#: rhodecode/controllers/pullrequests.py:260 +#: rhodecode/controllers/pullrequests.py:287 msgid "Successfully deleted pull request" msgstr "プルリクエストを削除しました" -#: rhodecode/controllers/pullrequests.py:452 +#: rhodecode/controllers/pullrequests.py:441 +msgid "Closing with" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:478 msgid "Closing pull request on other statuses than rejected or approved forbidden" msgstr "" @@ -259,55 +290,12 @@ msgstr "検索するためのインデックスがありません。whooshでインデックスを作成して下さい" msgid "An error occurred during this search operation" msgstr "検索を実行する際にエラーがおきました" -#: rhodecode/controllers/settings.py:119 -#: rhodecode/controllers/admin/repos.py:272 -#, python-format -msgid "Repository %s updated successfully" -msgstr "リポジトリ %s の更新に成功しました" - -#: rhodecode/controllers/settings.py:137 -#: rhodecode/controllers/admin/repos.py:290 -#, python-format -msgid "error occurred during update of repository %s" -msgstr "リポジトリ %s の更新中にエラーが発生しました" - -#: rhodecode/controllers/settings.py:162 -#: rhodecode/controllers/admin/repos.py:315 -#, python-format -msgid "deleted repository %s" -msgstr "リポジトリ %s を削除しました" - -#: rhodecode/controllers/settings.py:166 -#: rhodecode/controllers/admin/repos.py:325 -#: rhodecode/controllers/admin/repos.py:331 -#, python-format -msgid "An error occurred during deletion of %s" -msgstr "リポジトリ %s の削除中にエラーが発生しました" - -#: rhodecode/controllers/settings.py:185 -msgid "unlocked" -msgstr "アンロック" - -#: rhodecode/controllers/settings.py:188 -msgid "locked" -msgstr "ロック" - -#: rhodecode/controllers/settings.py:190 -#, python-format -msgid "Repository has been %s" -msgstr "リポジトリは %s されています" - -#: rhodecode/controllers/settings.py:194 -#: rhodecode/controllers/admin/repos.py:423 -msgid "An error occurred during unlocking" -msgstr "アンロック時にエラーが発生しました" - -#: rhodecode/controllers/summary.py:140 +#: rhodecode/controllers/summary.py:141 msgid "No data loaded yet" msgstr "まだデータが読み込まれていません" -#: rhodecode/controllers/summary.py:144 -#: rhodecode/templates/summary/summary.html:157 +#: rhodecode/controllers/summary.py:147 +#: rhodecode/templates/summary/summary.html:149 msgid "Statistics are disabled for this repository" msgstr "このリポジトリの統計は無効化されています" @@ -316,7 +304,7 @@ msgid "Default settings updated successf msgstr "デフォルト設定を更新しました" #: rhodecode/controllers/admin/defaults.py:110 -msgid "error occurred during update of defaults" +msgid "Error occurred during update of defaults" msgstr "デフォルト設定の更新中にエラーが発生しました" #: rhodecode/controllers/admin/ldap_settings.py:50 @@ -364,7 +352,7 @@ msgid "START_TLS on LDAP connection" msgstr "LDAP接続でSTART_TLSを使用" #: rhodecode/controllers/admin/ldap_settings.py:126 -msgid "Ldap settings updated successfully" +msgid "LDAP settings updated successfully" msgstr "LDAP設定を更新しました" #: rhodecode/controllers/admin/ldap_settings.py:130 @@ -372,533 +360,616 @@ msgid "Unable to activate ldap. The \"py msgstr "LDAPを有効にできませんでした。\"python-ldap\"ライブラリがありません。" #: rhodecode/controllers/admin/ldap_settings.py:147 -msgid "error occurred during update of ldap settings" +msgid "Error occurred during update of ldap settings" 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 "読込" +msgid "None" +msgstr "なし" #: rhodecode/controllers/admin/permissions.py:61 #: rhodecode/controllers/admin/permissions.py:65 -msgid "Write" -msgstr "書込" +msgid "Read" +msgstr "読込" #: rhodecode/controllers/admin/permissions.py:62 #: rhodecode/controllers/admin/permissions.py:66 +msgid "Write" +msgstr "書込" + +#: rhodecode/controllers/admin/permissions.py:63 +#: rhodecode/controllers/admin/permissions.py:67 #: 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/repo_add.html:10 +#: rhodecode/templates/admin/repos/repo_add.html:14 #: 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/repos_groups/repos_groups_add.html:9 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:9 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:13 #: 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/user_edit.html:133 #: rhodecode/templates/admin/users/users.html:9 +#: rhodecode/templates/admin/users/users.html:85 #: 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 +#: rhodecode/templates/base/base.html:292 +#: rhodecode/templates/base/base.html:293 +#: rhodecode/templates/base/base.html:299 +#: rhodecode/templates/base/base.html:300 msgid "Admin" msgstr "管理" -#: rhodecode/controllers/admin/permissions.py:69 -msgid "disabled" -msgstr "無効にする" - -#: rhodecode/controllers/admin/permissions.py:71 -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 +#: rhodecode/controllers/admin/permissions.py:70 +#: rhodecode/controllers/admin/permissions.py:76 +#: rhodecode/controllers/admin/permissions.py:79 msgid "Disabled" msgstr "無効" -#: rhodecode/controllers/admin/permissions.py:76 -#: rhodecode/controllers/admin/permissions.py:79 +#: rhodecode/controllers/admin/permissions.py:72 +msgid "Allowed with manual account activation" +msgstr "手動でアカウントを有効にする" + +#: rhodecode/controllers/admin/permissions.py:74 +msgid "Allowed with automatic account activation" +msgstr "自動でアカウントを有効にする" + +#: rhodecode/controllers/admin/permissions.py:77 +#: rhodecode/controllers/admin/permissions.py:80 msgid "Enabled" msgstr "有効" -#: rhodecode/controllers/admin/permissions.py:122 +#: rhodecode/controllers/admin/permissions.py:128 msgid "Default permissions updated successfully" msgstr "デフォルトの権限を更新しました" -#: rhodecode/controllers/admin/permissions.py:136 -msgid "error occurred during update of permissions" +#: rhodecode/controllers/admin/permissions.py:142 +msgid "Error occurred during update of permissions" msgstr "権限の更新中にエラーが発生しました" -#: rhodecode/controllers/admin/repos.py:121 +#: rhodecode/controllers/admin/repos.py:127 msgid "--REMOVE FORK--" msgstr "--フォーク元を削除--" -#: rhodecode/controllers/admin/repos.py:190 +#: rhodecode/controllers/admin/repos.py:168 +#, python-format +msgid "Created repository %s from %s" +msgstr "リポジトリ %s を %s から作成しました" + +#: rhodecode/controllers/admin/repos.py:174 #, python-format -msgid "created repository %s from %s" -msgstr "リポジトリ %s を %s から作成" - -#: rhodecode/controllers/admin/repos.py:194 +msgid "Created repository %s" +msgstr "リポジトリ %s を作成しました" + +#: rhodecode/controllers/admin/repos.py:197 +#, python-format +msgid "Error creating repository %s" +msgstr "リポジトリ %s の作成中にエラーが発生しました" + +#: rhodecode/controllers/admin/repos.py:266 +#, python-format +msgid "Repository %s updated successfully" +msgstr "リポジトリ %s の更新に成功しました" + +#: rhodecode/controllers/admin/repos.py:284 #, python-format -msgid "created repository %s" -msgstr "リポジトリ %s を作成しました" - -#: rhodecode/controllers/admin/repos.py:225 +msgid "Error occurred during update of repository %s" +msgstr "リポジトリ %s の更新中にエラーが発生しました" + +#: rhodecode/controllers/admin/repos.py:311 +#: rhodecode/controllers/api/api.py:877 #, python-format -msgid "error occurred during creation of repository %s" -msgstr "リポジトリ %s を作成中にエラーが発生しました" - -#: rhodecode/controllers/admin/repos.py:320 +msgid "Detached %s forks" +msgstr "%s 個のフォークを切り離しました" + +#: rhodecode/controllers/admin/repos.py:314 +#: rhodecode/controllers/api/api.py:879 +#, python-format +msgid "Deleted %s forks" +msgstr "%s 個のフォークを削除しました" + +#: rhodecode/controllers/admin/repos.py:319 +#, python-format +msgid "Deleted repository %s" +msgstr "リポジトリ %s を削除しました" + +#: rhodecode/controllers/admin/repos.py:322 #, python-format msgid "Cannot delete %s it still contains attached forks" msgstr "フォークしたリポジトリが存在するため、 %s は削除できません" -#: rhodecode/controllers/admin/repos.py:349 +#: rhodecode/controllers/admin/repos.py:327 +#, python-format +msgid "An error occurred during deletion of %s" +msgstr "リポジトリ %s の削除中にエラーが発生しました" + +#: rhodecode/controllers/admin/repos.py:365 +msgid "Repository permissions updated" +msgstr "リポジトリ権限を更新しました" + +#: rhodecode/controllers/admin/repos.py:384 msgid "An error occurred during deletion of repository user" msgstr "リポジトリユーザーの削除中にエラーが発生しました" -#: rhodecode/controllers/admin/repos.py:368 -msgid "An error occurred during deletion of repository users groups" +#: rhodecode/controllers/admin/repos.py:403 +msgid "An error occurred during deletion of repository user groups" msgstr "リポジトリユーザーグループの削除中にエラーが発生しました" -#: rhodecode/controllers/admin/repos.py:386 +#: rhodecode/controllers/admin/repos.py:421 msgid "An error occurred during deletion of repository stats" msgstr "リポジトリステートの削除中にエラーが発生しました" -#: rhodecode/controllers/admin/repos.py:403 +#: rhodecode/controllers/admin/repos.py:438 msgid "An error occurred during cache invalidation" -msgstr "キャッシュの無効化時にエラーが発生しました" - -#: rhodecode/controllers/admin/repos.py:443 +msgstr "キャッシュの無効化中にエラーが発生しました" + +#: rhodecode/controllers/admin/repos.py:458 +#: rhodecode/controllers/admin/repos.py:485 +msgid "An error occurred during unlocking" +msgstr "アンロック中にエラーが発生しました" + +#: rhodecode/controllers/admin/repos.py:476 +msgid "Unlocked" +msgstr "アンロック" + +#: rhodecode/controllers/admin/repos.py:479 +msgid "Locked" +msgstr "ロック" + +#: rhodecode/controllers/admin/repos.py:481 +#, python-format +msgid "Repository has been %s" +msgstr "リポジトリは %s されています" + +#: rhodecode/controllers/admin/repos.py:505 msgid "Updated repository visibility in public journal" msgstr "公開ジャーナルでのリポジトリの可視性を更新しました" -#: rhodecode/controllers/admin/repos.py:447 +#: rhodecode/controllers/admin/repos.py:509 msgid "An error occurred during setting this repository in public journal" msgstr "このリポジトリの公開ジャーナルの設定中にエラーが発生しました" -#: rhodecode/controllers/admin/repos.py:452 rhodecode/model/validators.py:300 +#: rhodecode/controllers/admin/repos.py:514 rhodecode/model/validators.py:302 msgid "Token mismatch" msgstr "トークンが合いません" -#: rhodecode/controllers/admin/repos.py:465 +#: rhodecode/controllers/admin/repos.py:527 msgid "Pulled from remote location" msgstr "リモートから取得" -#: rhodecode/controllers/admin/repos.py:467 +#: rhodecode/controllers/admin/repos.py:529 msgid "An error occurred during pull from remote location" msgstr "リモートから取得中にエラーが発生しました" -#: rhodecode/controllers/admin/repos.py:483 +#: rhodecode/controllers/admin/repos.py:545 msgid "Nothing" msgstr "ありません" -#: rhodecode/controllers/admin/repos.py:485 +#: rhodecode/controllers/admin/repos.py:547 #, python-format msgid "Marked repo %s as fork of %s" msgstr "%s リポジトリを %s のフォークとして印をつける" -#: rhodecode/controllers/admin/repos.py:489 +#: rhodecode/controllers/admin/repos.py:551 msgid "An error occurred during this operation" msgstr "操作中にエラーが発生しました" -#: rhodecode/controllers/admin/repos_groups.py:120 +#: rhodecode/controllers/admin/repos.py:590 +msgid "An error occurred during creation of field" +msgstr "フィールドの作成中にエラーが発生しました" + +#: rhodecode/controllers/admin/repos.py:604 +msgid "An error occurred during removal of field" +msgstr "フィールドの削除中にエラーが発生しました" + +#: rhodecode/controllers/admin/repos_groups.py:145 #, python-format -msgid "created repos group %s" +msgid "Created repository group %s" msgstr "リポジトリグループ %s を作成しました" -#: rhodecode/controllers/admin/repos_groups.py:133 +#: rhodecode/controllers/admin/repos_groups.py:157 #, python-format -msgid "error occurred during creation of repos group %s" -msgstr "リポジトリグループ %s を作成中にエラーが発生しました" - -#: rhodecode/controllers/admin/repos_groups.py:167 +msgid "Error occurred during creation of repository group %s" +msgstr "リポジトリグループ %s の作成中にエラーが発生しました" + +#: rhodecode/controllers/admin/repos_groups.py:214 +#: rhodecode/controllers/admin/repos_groups.py:286 +msgid "Cannot revoke permission for yourself as admin" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:220 #, python-format -msgid "updated repos group %s" +msgid "Updated repository group %s" msgstr "リポジトリグループ %s を更新しました" -#: rhodecode/controllers/admin/repos_groups.py:180 +#: rhodecode/controllers/admin/repos_groups.py:235 #, python-format -msgid "error occurred during update of repos group %s" -msgstr "リポジトリグループ %s を更新中にエラーが発生しました" - -#: rhodecode/controllers/admin/repos_groups.py:198 +msgid "Error occurred during update of repository group %s" +msgstr "リポジトリグループ %s の更新中にエラーが発生しました" + +#: rhodecode/controllers/admin/repos_groups.py:253 #, python-format msgid "This group contains %s repositores and cannot be deleted" msgstr "このグループは %s リポジトリを含んでいるため削除出来ません" -#: rhodecode/controllers/admin/repos_groups.py:206 +#: rhodecode/controllers/admin/repos_groups.py:260 #, python-format -msgid "removed repos group %s" +msgid "This group contains %s subgroups and cannot be deleted" +msgstr "このグループは %s サブグループを含んでいるため削除出来ません" + +#: rhodecode/controllers/admin/repos_groups.py:266 +#, python-format +msgid "Removed repository group %s" 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:217 -#: rhodecode/controllers/admin/repos_groups.py:222 +#: rhodecode/controllers/admin/repos_groups.py:271 #, python-format -msgid "error occurred during deletion of repos group %s" +msgid "Error occurred during deletion of repos group %s" msgstr "リポジトリグループ %s の削除中にエラーが発生しました" -#: rhodecode/controllers/admin/repos_groups.py:243 +#: rhodecode/controllers/admin/repos_groups.py:297 msgid "An error occurred during deletion of group user" msgstr "グループユーザーを削除中にエラーが発生しました" -#: rhodecode/controllers/admin/repos_groups.py:264 -msgid "An error occurred during deletion of group users groups" -msgstr "グループユーザーのグループを削除中にエラーが発生しました" - -#: rhodecode/controllers/admin/settings.py:123 +#: rhodecode/controllers/admin/repos_groups.py:318 +msgid "An error occurred during deletion of group user groups" +msgstr "グループユーザーのグループの削除中にエラーが発生しました" + +#: rhodecode/controllers/admin/settings.py:126 #, python-format -msgid "Repositories successfully rescanned added: %s,removed: %s" -msgstr "リポジトリを再度スキャンしました。 追加: %s 削除: %s" - -#: rhodecode/controllers/admin/settings.py:131 +msgid "Repositories successfully rescanned added: %s ; removed: %s" +msgstr "リポジトリの再スキャンに成功しました。 追加: %s 削除: %s" + +#: rhodecode/controllers/admin/settings.py:135 msgid "Whoosh reindex task scheduled" msgstr "Whooshの再インデックスタスクを予定に入れました" -#: rhodecode/controllers/admin/settings.py:162 -msgid "Updated application settings" -msgstr "アプリケーション設定を更新しました" - #: 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:207 +msgid "Updated application settings" +msgstr "アプリケーション設定を更新しました" + +#: rhodecode/controllers/admin/settings.py:170 +#: rhodecode/controllers/admin/settings.py:301 +msgid "Error occurred during updating application settings" +msgstr "アプリケーション設定の更新中にエラーが発生しました" + +#: rhodecode/controllers/admin/settings.py:216 msgid "Updated visualisation settings" -msgstr "表示の設定を更新しました" - -#: rhodecode/controllers/admin/settings.py:212 -msgid "error occurred during updating visualisation settings" -msgstr "表示の設定を更新中にエラーが発生しました" - -#: rhodecode/controllers/admin/settings.py:295 +msgstr "表示設定を更新しました" + +#: rhodecode/controllers/admin/settings.py:221 +msgid "Error occurred during updating visualisation settings" +msgstr "表示設定の更新中にエラーが発生しました" + +#: rhodecode/controllers/admin/settings.py:297 msgid "Updated VCS settings" -msgstr "VCSの設定を更新しました" - -#: rhodecode/controllers/admin/settings.py:309 +msgstr "VCS設定を更新しました" + +#: rhodecode/controllers/admin/settings.py:311 msgid "Added new hook" msgstr "新しいフックを追加しました" -#: rhodecode/controllers/admin/settings.py:321 +#: rhodecode/controllers/admin/settings.py:323 msgid "Updated hooks" msgstr "フックを更新しました" -#: rhodecode/controllers/admin/settings.py:325 -msgid "error occurred during hook creation" -msgstr "フックの作成時にエラーが発生しました" - -#: rhodecode/controllers/admin/settings.py:344 +#: rhodecode/controllers/admin/settings.py:327 +msgid "Error occurred during hook creation" +msgstr "フックの作成中にエラーが発生しました" + +#: rhodecode/controllers/admin/settings.py:346 msgid "Email task created" msgstr "メールのタスクを作成しました" -#: rhodecode/controllers/admin/settings.py:399 +#: rhodecode/controllers/admin/settings.py:410 msgid "You can't edit this user since it's crucial for entire application" msgstr "このユーザーを編集出来ません。このユーザーはアプリケーションにとって必要不可欠です。" -#: rhodecode/controllers/admin/settings.py:430 +#: rhodecode/controllers/admin/settings.py:452 msgid "Your account was updated successfully" msgstr "アカウントを更新しました" -#: rhodecode/controllers/admin/settings.py:445 -#: rhodecode/controllers/admin/users.py:196 +#: rhodecode/controllers/admin/settings.py:467 +#: rhodecode/controllers/admin/users.py:198 #, python-format -msgid "error occurred during update of user %s" +msgid "Error occurred during update of user %s" msgstr "ユーザー %s の更新中にエラーが発生しました" #: rhodecode/controllers/admin/users.py:130 #, python-format -msgid "created user %s" +msgid "Created user %s" msgstr "ユーザー %s を作成しました" #: rhodecode/controllers/admin/users.py:142 #, python-format -msgid "error occurred during creation of user %s" +msgid "Error occurred during creation of user %s" msgstr "ユーザー %s の作成中にエラーが発生しました" #: rhodecode/controllers/admin/users.py:176 msgid "User updated successfully" msgstr "ユーザーの更新に成功しました" -#: rhodecode/controllers/admin/users.py:212 -msgid "successfully deleted user" +#: rhodecode/controllers/admin/users.py:214 +msgid "Successfully deleted user" msgstr "ユーザーの削除に成功しました" -#: rhodecode/controllers/admin/users.py:217 +#: rhodecode/controllers/admin/users.py:219 msgid "An error occurred during deletion of user" msgstr "ユーザーの削除中にエラーが発生しました" -#: rhodecode/controllers/admin/users.py:231 +#: rhodecode/controllers/admin/users.py:233 msgid "You can't edit this user" msgstr "このユーザーは編集できません" -#: rhodecode/controllers/admin/users.py:272 +#: rhodecode/controllers/admin/users.py:276 msgid "Granted 'repository create' permission to user" msgstr "ユーザーに 'リポジトリ作成' 権限を与えました" -#: rhodecode/controllers/admin/users.py:277 +#: rhodecode/controllers/admin/users.py:281 msgid "Revoked 'repository create' permission to user" msgstr "ユーザーの 'リポジトリ作成' 権限を取り消しました" -#: rhodecode/controllers/admin/users.py:283 +#: rhodecode/controllers/admin/users.py:287 msgid "Granted 'repository fork' permission to user" msgstr "ユーザーに 'リポジトリフォーク' 権限を与えました" -#: rhodecode/controllers/admin/users.py:288 +#: rhodecode/controllers/admin/users.py:292 msgid "Revoked 'repository fork' permission to user" msgstr "ユーザーの 'リポジトリフォーク' 権限を取り消しました" -#: rhodecode/controllers/admin/users.py:294 -#: rhodecode/controllers/admin/users_groups.py:279 +#: rhodecode/controllers/admin/users.py:298 +#: rhodecode/controllers/admin/users_groups.py:281 msgid "An error occurred during permissions saving" msgstr "権限の保存時にエラーが発生しました" -#: rhodecode/controllers/admin/users.py:309 +#: rhodecode/controllers/admin/users.py:312 #, python-format msgid "Added email %s to user" msgstr "ユーザーにメール %s を追加しました" -#: rhodecode/controllers/admin/users.py:315 +#: rhodecode/controllers/admin/users.py:318 msgid "An error occurred during email saving" msgstr "メールの保存時にエラーが発生しました" -#: rhodecode/controllers/admin/users.py:325 +#: rhodecode/controllers/admin/users.py:328 msgid "Removed email from user" msgstr "ユーザーからメールを削除しました" +#: rhodecode/controllers/admin/users.py:341 +#, python-format +msgid "Added ip %s to user" +msgstr "ユーザーにIPアドレス %s を追加しました" + +#: rhodecode/controllers/admin/users.py:347 +msgid "An error occurred during ip saving" +msgstr "IPアドレスの保存中にエラーが発生しました" + +#: rhodecode/controllers/admin/users.py:359 +msgid "Removed ip from user" +msgstr "ユーザーからIPアドレスを削除しました" + #: rhodecode/controllers/admin/users_groups.py:86 #, python-format -msgid "created users group %s" +msgid "Created user group %s" msgstr "ユーザーグループ %s を作成しました" #: rhodecode/controllers/admin/users_groups.py:97 #, python-format -msgid "error occurred during creation of users group %s" +msgid "Error occurred during creation of user group %s" msgstr "ユーザーグループ %s の作成中にエラーが発生しました" -#: rhodecode/controllers/admin/users_groups.py:164 +#: rhodecode/controllers/admin/users_groups.py:166 #, python-format -msgid "updated users group %s" +msgid "Updated user group %s" msgstr "ユーザーグループ %s を更新しました" -#: rhodecode/controllers/admin/users_groups.py:186 +#: rhodecode/controllers/admin/users_groups.py:188 #, python-format -msgid "error occurred during update of users group %s" +msgid "Error occurred during update of user group %s" msgstr "ユーザーグループ %s の更新中にエラーが発生しました" -#: rhodecode/controllers/admin/users_groups.py:203 -msgid "successfully deleted users group" -msgstr "ユーザーグループ" - -#: rhodecode/controllers/admin/users_groups.py:208 -msgid "An error occurred during deletion of users group" +#: rhodecode/controllers/admin/users_groups.py:205 +msgid "Successfully deleted user group" +msgstr "ユーザーグループの削除に成功しました" + +#: rhodecode/controllers/admin/users_groups.py:210 +msgid "An error occurred during deletion of user group" msgstr "ユーザーグループの削除中にエラーが発生しました" -#: rhodecode/controllers/admin/users_groups.py:257 -msgid "Granted 'repository create' permission to users group" +#: rhodecode/controllers/admin/users_groups.py:259 +msgid "Granted 'repository create' permission to user group" msgstr "ユーザーグループに 'リポジトリ作成' 権限を与えました" -#: rhodecode/controllers/admin/users_groups.py:262 -msgid "Revoked 'repository create' permission to users group" +#: rhodecode/controllers/admin/users_groups.py:264 +msgid "Revoked 'repository create' permission to user group" msgstr "ユーザーグループの 'リポジトリ作成' 権限を取り消しました" -#: rhodecode/controllers/admin/users_groups.py:268 -msgid "Granted 'repository fork' permission to users group" +#: rhodecode/controllers/admin/users_groups.py:270 +msgid "Granted 'repository fork' permission to user group" msgstr "ユーザーグループに 'リポジトリフォーク' 権限を与えました" -#: rhodecode/controllers/admin/users_groups.py:273 -msgid "Revoked 'repository fork' permission to users group" +#: rhodecode/controllers/admin/users_groups.py:275 +msgid "Revoked 'repository fork' permission to user group" msgstr "ユーザーグループの 'リポジトリフォーク' 権限を取り消しました" -#: rhodecode/lib/auth.py:499 +#: rhodecode/lib/auth.py:530 +#, python-format +msgid "IP %s not allowed" +msgstr "IPアドレス %s は許可されません" + +#: rhodecode/lib/auth.py:579 msgid "You need to be a registered user to perform this action" msgstr "このアクションを実行するためには登録ユーザーである必要があります" -#: rhodecode/lib/auth.py:540 +#: rhodecode/lib/auth.py:620 msgid "You need to be a signed in to view this page" msgstr "このページを閲覧するためにはサインインが必要です" -#: rhodecode/lib/diffs.py:74 -msgid "binary file" +#: rhodecode/lib/diffs.py:66 +msgid "Binary file" msgstr "バイナリファイル" -#: rhodecode/lib/diffs.py:90 +#: rhodecode/lib/diffs.py:82 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "チェンジセットが大きすぎるため省略しました。差分を表示する場合は差分メニューを使用してください" -#: rhodecode/lib/diffs.py:100 +#: rhodecode/lib/diffs.py:92 msgid "No changes detected" msgstr "検出された変更はありません" -#: rhodecode/lib/helpers.py:374 +#: rhodecode/lib/helpers.py:394 #, python-format msgid "%a, %d %b %Y %H:%M:%S" msgstr "%a, %d %b %Y %H:%M:%S" -#: rhodecode/lib/helpers.py:486 +#: rhodecode/lib/helpers.py:506 msgid "True" msgstr "True" -#: rhodecode/lib/helpers.py:490 +#: rhodecode/lib/helpers.py:509 msgid "False" msgstr "False" -#: rhodecode/lib/helpers.py:530 +#: rhodecode/lib/helpers.py:547 #, python-format msgid "Deleted branch: %s" msgstr "削除されたブランチ: %s" -#: rhodecode/lib/helpers.py:533 +#: rhodecode/lib/helpers.py:550 #, python-format msgid "Created tag: %s" msgstr "作成したタグ: %s" -#: rhodecode/lib/helpers.py:546 +#: rhodecode/lib/helpers.py:563 msgid "Changeset not found" msgstr "リビジョンが見つかりません" -#: rhodecode/lib/helpers.py:589 +#: rhodecode/lib/helpers.py:615 #, python-format msgid "Show all combined changesets %s->%s" msgstr "%s から %s までのすべてのチェンジセットを表示" -#: rhodecode/lib/helpers.py:595 +#: rhodecode/lib/helpers.py:621 msgid "compare view" msgstr "比較の表示" -#: rhodecode/lib/helpers.py:615 +#: rhodecode/lib/helpers.py:641 msgid "and" msgstr "と" -#: rhodecode/lib/helpers.py:616 +#: rhodecode/lib/helpers.py:642 #, python-format msgid "%s more" msgstr "%s 以上" -#: rhodecode/lib/helpers.py:617 rhodecode/templates/changelog/changelog.html:51 +#: rhodecode/lib/helpers.py:643 rhodecode/templates/changelog/changelog.html:44 msgid "revisions" msgstr "リビジョン" -#: rhodecode/lib/helpers.py:641 +#: rhodecode/lib/helpers.py:667 #, python-format msgid "fork name %s" msgstr "フォーク名 %s" -#: rhodecode/lib/helpers.py:658 -#: rhodecode/templates/pullrequests/pullrequest_show.html:4 -#: rhodecode/templates/pullrequests/pullrequest_show.html:12 +#: rhodecode/lib/helpers.py:684 +#: rhodecode/templates/pullrequests/pullrequest_show.html:8 #, python-format msgid "Pull request #%s" msgstr "プルリクエスト #%s" -#: rhodecode/lib/helpers.py:664 +#: rhodecode/lib/helpers.py:690 msgid "[deleted] repository" msgstr "リポジトリを[削除]" -#: rhodecode/lib/helpers.py:666 rhodecode/lib/helpers.py:676 +#: rhodecode/lib/helpers.py:692 rhodecode/lib/helpers.py:702 msgid "[created] repository" msgstr "リポジトリを[作成]" -#: rhodecode/lib/helpers.py:668 +#: rhodecode/lib/helpers.py:694 msgid "[created] repository as fork" msgstr "フォークしてリポジトリを[作成]" -#: rhodecode/lib/helpers.py:670 rhodecode/lib/helpers.py:678 +#: rhodecode/lib/helpers.py:696 rhodecode/lib/helpers.py:704 msgid "[forked] repository" msgstr "リポジトリを[フォーク]" -#: rhodecode/lib/helpers.py:672 rhodecode/lib/helpers.py:680 +#: rhodecode/lib/helpers.py:698 rhodecode/lib/helpers.py:706 msgid "[updated] repository" msgstr "リポジトリを[更新]" -#: rhodecode/lib/helpers.py:674 +#: rhodecode/lib/helpers.py:700 msgid "[delete] repository" msgstr "リポジトリを[削除]" -#: rhodecode/lib/helpers.py:682 +#: rhodecode/lib/helpers.py:708 msgid "[created] user" msgstr "ユーザーを[作成]" -#: rhodecode/lib/helpers.py:684 +#: rhodecode/lib/helpers.py:710 msgid "[updated] user" msgstr "ユーザーを[更新]" -#: rhodecode/lib/helpers.py:686 -msgid "[created] users group" +#: rhodecode/lib/helpers.py:712 +msgid "[created] user group" msgstr "ユーザーグループを[作成]" -#: rhodecode/lib/helpers.py:688 -msgid "[updated] users group" +#: rhodecode/lib/helpers.py:714 +msgid "[updated] user group" msgstr "ユーザーグループを[更新]" -#: rhodecode/lib/helpers.py:690 +#: rhodecode/lib/helpers.py:716 msgid "[commented] on revision in repository" msgstr "リポジトリのリビジョンに[コメント]" -#: rhodecode/lib/helpers.py:692 +#: rhodecode/lib/helpers.py:718 msgid "[commented] on pull request for" msgstr "プルリクエストに[コメント]" -#: rhodecode/lib/helpers.py:694 +#: rhodecode/lib/helpers.py:720 msgid "[closed] pull request for" msgstr "プルリクエストを[クローズ]" -#: rhodecode/lib/helpers.py:696 +#: rhodecode/lib/helpers.py:722 msgid "[pushed] into" msgstr "[プッシュ]" -#: rhodecode/lib/helpers.py:698 +#: rhodecode/lib/helpers.py:724 msgid "[committed via RhodeCode] into repository" msgstr "リポジトリに[RhodeCode経由でコミット]" -#: rhodecode/lib/helpers.py:700 +#: rhodecode/lib/helpers.py:726 msgid "[pulled from remote] into repository" msgstr "リポジトリに[リモートからプル]" -#: rhodecode/lib/helpers.py:702 +#: rhodecode/lib/helpers.py:728 msgid "[pulled] from" msgstr "[プル]" -#: rhodecode/lib/helpers.py:704 +#: rhodecode/lib/helpers.py:730 msgid "[started following] repository" msgstr "リポジトリの[フォローを開始]" -#: rhodecode/lib/helpers.py:706 +#: rhodecode/lib/helpers.py:732 msgid "[stopped following] repository" msgstr "リポジトリの[フォローを停止]" -#: rhodecode/lib/helpers.py:883 +#: rhodecode/lib/helpers.py:910 #, python-format msgid " and %s more" msgstr " と %s 以上" -#: rhodecode/lib/helpers.py:887 +#: rhodecode/lib/helpers.py:914 msgid "No Files" msgstr "ファイルなし" -#: rhodecode/lib/helpers.py:1163 +#: rhodecode/lib/helpers.py:1198 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -908,159 +979,219 @@ msgstr "" "%s " "リポジトリはDB内に見つかりませんでした。おそらくファイルシステム上で作られたか名前が変更されたためです。リポジトリをもう一度チェックするためにアプリケーションを立ち上げ直してください。" -#: rhodecode/lib/utils2.py:403 +#: rhodecode/lib/unionrepo.py:193 +msgid "cannot create new union repository" +msgstr "新しいユニオンリポジトリは作成できません" + +#: rhodecode/lib/utils2.py:411 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d 年" -#: rhodecode/lib/utils2.py:404 +#: rhodecode/lib/utils2.py:412 #, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "%d ヶ月" -#: rhodecode/lib/utils2.py:405 +#: rhodecode/lib/utils2.py:413 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d 日" -#: rhodecode/lib/utils2.py:406 +#: rhodecode/lib/utils2.py:414 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d 時間" -#: rhodecode/lib/utils2.py:407 +#: rhodecode/lib/utils2.py:415 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d 分" -#: rhodecode/lib/utils2.py:408 +#: rhodecode/lib/utils2.py:416 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d 秒" -#: rhodecode/lib/utils2.py:424 +#: rhodecode/lib/utils2.py:432 #, python-format msgid "in %s" msgstr "" -#: rhodecode/lib/utils2.py:426 +#: rhodecode/lib/utils2.py:434 #, python-format msgid "%s ago" msgstr "%s 前" -#: rhodecode/lib/utils2.py:428 +#: rhodecode/lib/utils2.py:436 #, python-format msgid "in %s and %s" msgstr "" -#: rhodecode/lib/utils2.py:431 +#: rhodecode/lib/utils2.py:439 #, python-format msgid "%s and %s ago" msgstr "%s と %s 前" -#: rhodecode/lib/utils2.py:434 +#: rhodecode/lib/utils2.py:442 msgid "just now" msgstr "ちょうどいま" -#: 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:1183 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1183 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1289 rhodecode/model/db.py:1388 msgid "Repository no access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1184 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1184 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1290 rhodecode/model/db.py:1389 msgid "Repository read access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1185 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1185 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1291 rhodecode/model/db.py:1390 msgid "Repository write access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1186 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1186 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1292 rhodecode/model/db.py:1391 msgid "Repository admin access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1188 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1188 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1294 msgid "Repositories Group no access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1189 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1189 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1295 msgid "Repositories Group read access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1190 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1190 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1296 msgid "Repositories Group write access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1191 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1191 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1297 msgid "Repositories Group admin access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1193 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1193 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1299 rhodecode/model/db.py:1398 msgid "RhodeCode Administrator" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1194 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1194 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1300 rhodecode/model/db.py:1399 msgid "Repository creation disabled" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1195 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1195 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1301 rhodecode/model/db.py:1400 msgid "Repository creation enabled" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1196 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1196 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1302 rhodecode/model/db.py:1401 msgid "Repository forking disabled" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1197 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1197 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303 rhodecode/model/db.py:1402 msgid "Repository forking enabled" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1198 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1198 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304 rhodecode/model/db.py:1403 msgid "Register disabled" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1199 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1199 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305 rhodecode/model/db.py:1404 msgid "Register new user with RhodeCode with manual activation" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1202 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1202 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308 rhodecode/model/db.py:1407 msgid "Register new user with RhodeCode with auto activation" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1643 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1643 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1749 rhodecode/model/db.py:1838 msgid "Not Reviewed" msgstr "未レビュー" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1644 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1644 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1750 rhodecode/model/db.py:1839 msgid "Approved" msgstr "承認" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1645 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1645 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1751 rhodecode/model/db.py:1840 msgid "Rejected" msgstr "却下" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1646 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1646 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1752 rhodecode/model/db.py:1841 msgid "Under Review" msgstr "レビュー中" -#: rhodecode/model/comment.py:110 +#: rhodecode/model/comment.py:75 #, python-format msgid "on line %s" msgstr "" -#: rhodecode/model/comment.py:173 +#: rhodecode/model/comment.py:219 msgid "[Mention]" msgstr "[Mention]" +#: rhodecode/model/db.py:1252 +msgid "top level" +msgstr "" + +#: rhodecode/model/db.py:1393 +msgid "Repository group no access" +msgstr "" + +#: rhodecode/model/db.py:1394 +msgid "Repository group read access" +msgstr "" + +#: rhodecode/model/db.py:1395 +msgid "Repository group write access" +msgstr "" + +#: rhodecode/model/db.py:1396 +msgid "Repository group admin access" +msgstr "" + #: rhodecode/model/forms.py:43 msgid "Please enter a login" msgstr "ログイン名を入力してください" @@ -1079,206 +1210,239 @@ msgstr "パスワードを入力してください" msgid "Enter %(min)i characters or more" msgstr "%(min)i 文字以上必要です" -#: rhodecode/model/notification.py:220 -#, python-format -msgid "commented on commit at %(when)s" -msgstr "コミットにコメント %(when)s" - -#: rhodecode/model/notification.py:221 -#, python-format -msgid "sent message at %(when)s" -msgstr "メッセージを送信 %(when)s" - -#: rhodecode/model/notification.py:222 -#, python-format -msgid "mentioned you at %(when)s" -msgstr "Mention %(when)s" - -#: rhodecode/model/notification.py:223 -#, python-format -msgid "registered in RhodeCode at %(when)s" -msgstr "RhodeCodeに登録 %(when)s" - #: rhodecode/model/notification.py:224 #, python-format -msgid "opened new pull request at %(when)s" -msgstr "新しいプルリクエストを作成 %(when)s" +msgid "%(user)s commented on changeset at %(when)s" +msgstr "%(user)s がコミットにコメント %(when)s" #: rhodecode/model/notification.py:225 #, python-format -msgid "commented on pull request at %(when)s" -msgstr "プルリクエストにコメント %(when)s" - -#: rhodecode/model/pull_request.py:90 +msgid "%(user)s sent message at %(when)s" +msgstr "%(user)s がメッセージを送信 %(when)s" + +#: rhodecode/model/notification.py:226 +#, python-format +msgid "%(user)s mentioned you at %(when)s" +msgstr "%(user)s があなたにメンション %(when)s" + +#: rhodecode/model/notification.py:227 +#, python-format +msgid "%(user)s registered in RhodeCode at %(when)s" +msgstr "%(user)s がRhodeCodeに登録 %(when)s" + +#: rhodecode/model/notification.py:228 #, python-format -msgid "%(user)s wants you to review pull request #%(pr_id)s" -msgstr "%(user)s がプリリクエスト #%(pr_id)s のレビューを求めています" - -#: rhodecode/model/scm.py:542 +msgid "%(user)s opened new pull request at %(when)s" +msgstr "%(user)s が新しいプルリクエストを作成 %(when)s" + +#: rhodecode/model/notification.py:229 +#, python-format +msgid "%(user)s commented on pull request at %(when)s" +msgstr "%(user)s がプルリクエストにコメント %(when)s" + +#: rhodecode/model/pull_request.py:104 +#, python-format +msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s" +msgstr "%(user)s がプリリクエスト #%(pr_id)s のレビューを求めています %(pr_title)s" + +#: rhodecode/model/scm.py:598 msgid "latest tip" msgstr "最新のtip" #: rhodecode/model/user.py:232 -msgid "new user registration" +msgid "New user registration" msgstr "新規ユーザー登録" #: rhodecode/model/user.py:257 rhodecode/model/user.py:281 -#: rhodecode/model/user.py:303 msgid "You can't Edit this user since it's crucial for entire application" msgstr "アプリケーション全体にとって重要なユーザなため、編集出来ません" -#: rhodecode/model/user.py:327 +#: rhodecode/model/user.py:303 msgid "You can't remove this user since it's crucial for entire application" msgstr "アプリケーション全体にとって重要なユーザなため、削除できません" -#: rhodecode/model/user.py:333 +#: rhodecode/model/user.py:309 #, 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:36 rhodecode/model/validators.py:37 +#: rhodecode/model/user.py:334 +msgid "Password reset link" +msgstr "パスワードリセットのリンク" + +#: rhodecode/model/user.py:366 +msgid "Your new password" +msgstr "新しいパスワード" + +#: rhodecode/model/user.py:367 +#, python-format +msgid "Your new RhodeCode password:%s" +msgstr "新しいRhodeCodeパスワード:%s" + +#: rhodecode/model/validators.py:38 rhodecode/model/validators.py:39 msgid "Value cannot be an empty list" msgstr "空のリストには出来ません" -#: rhodecode/model/validators.py:83 +#: rhodecode/model/validators.py:85 #, python-format msgid "Username \"%(username)s\" already exists" msgstr "ユーザー名 \"%(username)s\" はすでに使われています" -#: rhodecode/model/validators.py:85 +#: rhodecode/model/validators.py:87 #, python-format msgid "Username \"%(username)s\" is forbidden" msgstr "ユーザー名 \"%(username)s\" は許可されていません" -#: rhodecode/model/validators.py:87 +#: rhodecode/model/validators.py:89 msgid "" "Username may only contain alphanumeric characters underscores, periods or" " dashes and must begin with alphanumeric character" msgstr "ユーザー名はアルファベット、アンダースコア(_)、ピリオド(.)、ダッシュ(-)しか使えません。また、アルファベットから始まる必要があります" -#: rhodecode/model/validators.py:115 +#: rhodecode/model/validators.py:117 #, python-format msgid "Username %(username)s is not valid" msgstr "ユーザー名 %(username)s は不正です" -#: rhodecode/model/validators.py:134 -msgid "Invalid users group name" +#: rhodecode/model/validators.py:136 +msgid "Invalid user group name" msgstr "不正なユーザーグループ名です" -#: rhodecode/model/validators.py:135 -#, python-format -msgid "Users group \"%(usersgroup)s\" already exists" -msgstr "ユーザーグループ \"%(usersgroup)s\" はすでに存在します" - #: rhodecode/model/validators.py:137 +#, python-format +msgid "User group \"%(usergroup)s\" already exists" +msgstr "ユーザーグループ \"%(usergroup)s\" はすでに存在します" + +#: rhodecode/model/validators.py:139 msgid "" -"users group name may only contain alphanumeric characters underscores, " +"user group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" msgstr "" "ユーザーグループ名はアルファベット、アンダースコア(_)、ピリオド(.)、ダッシュ(-)しか使えません。また、アルファベットから始まる必要があります" " " -#: rhodecode/model/validators.py:175 +#: rhodecode/model/validators.py:177 msgid "Cannot assign this group as parent" msgstr "このグループは親にできません" -#: rhodecode/model/validators.py:176 +#: rhodecode/model/validators.py:178 #, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "グループ \"%(group_name)s\" はすでに存在します" -#: rhodecode/model/validators.py:178 +#: rhodecode/model/validators.py:180 #, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "グループ名 \"%(group_name)s\" を持つリポジトリはすでに存在します" -#: rhodecode/model/validators.py:236 +#: rhodecode/model/validators.py:238 msgid "Invalid characters (non-ascii) in password" msgstr "パスワードに利用出来ない文字列(non-ascii)です" -#: rhodecode/model/validators.py:251 +#: rhodecode/model/validators.py:253 msgid "Passwords do not match" msgstr "パスワードが一致しません" -#: rhodecode/model/validators.py:268 +#: rhodecode/model/validators.py:270 msgid "invalid password" msgstr "不正なパスワードです" -#: rhodecode/model/validators.py:269 +#: rhodecode/model/validators.py:271 msgid "invalid user name" msgstr "不正なユーザー名です" -#: rhodecode/model/validators.py:270 +#: rhodecode/model/validators.py:272 msgid "Your account is disabled" msgstr "アカウントは無効です" -#: rhodecode/model/validators.py:314 +#: rhodecode/model/validators.py:316 #, python-format msgid "Repository name %(repo)s is disallowed" msgstr "リポジトリ名 %(repo)s は許可されていません" -#: rhodecode/model/validators.py:316 +#: rhodecode/model/validators.py:318 #, python-format msgid "Repository named %(repo)s already exists" msgstr "リポジトリ %(repo)s はすでに存在します" -#: rhodecode/model/validators.py:317 +#: rhodecode/model/validators.py:319 #, python-format msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" msgstr "リポジトリ \"%(repo)s\" は グループ \"%(group)s\" にすでに存在します" -#: rhodecode/model/validators.py:319 +#: rhodecode/model/validators.py:321 #, python-format -msgid "Repositories group with name \"%(repo)s\" already exists" +msgid "Repository group with name \"%(repo)s\" already exists" msgstr "リポジトリグループ名 \"%(repo)s\" はすでに存在します" -#: rhodecode/model/validators.py:432 +#: rhodecode/model/validators.py:438 msgid "invalid clone url" msgstr "無効なクローンURIです" -#: rhodecode/model/validators.py:433 +#: rhodecode/model/validators.py:439 msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url" msgstr "無効なクローンURIです。有効な http(s)/svn+http(s) のURIを指定してください" -#: rhodecode/model/validators.py:458 +#: rhodecode/model/validators.py:464 msgid "Fork have to be the same type as parent" msgstr "フォークは親と同じタイプの必要があります" -#: rhodecode/model/validators.py:473 +#: rhodecode/model/validators.py:479 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" +#: rhodecode/model/validators.py:481 +msgid "no permission to create repository in root location" +msgstr "ルートにリポジトリを作成する権限がありません" + +#: rhodecode/model/validators.py:518 +msgid "You don't have permissions to create a group in this location" +msgstr "この場所にグループを作成する権限がありません" + +#: rhodecode/model/validators.py:557 +msgid "This username or user group name is not valid" msgstr "ユーザー名かユーザーグループが不正です" -#: rhodecode/model/validators.py:591 +#: rhodecode/model/validators.py:650 msgid "This is not a valid path" msgstr "不正なパスです" -#: rhodecode/model/validators.py:606 +#: rhodecode/model/validators.py:665 msgid "This e-mail address is already taken" msgstr "このメールアドレスはすでに取得されています" -#: rhodecode/model/validators.py:626 +#: rhodecode/model/validators.py:685 #, python-format msgid "e-mail \"%(email)s\" does not exist." msgstr "メールアドレス \"%(email)s\" は存在しません" -#: rhodecode/model/validators.py:663 +#: rhodecode/model/validators.py:722 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:682 +#: rhodecode/model/validators.py:735 #, python-format msgid "Revisions %(revs)s are already part of pull request or have set status" +msgstr "リビジョン %(revs) はすでにプルリクエストの一部かステータスが設定されています" + +#: rhodecode/model/validators.py:767 +msgid "Please enter a valid IPv4 or IpV6 address" +msgstr "有効なIPv4かIPv6のアドレスを入力してください" + +#: rhodecode/model/validators.py:768 +#, python-format +msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" msgstr "" -#: rhodecode/templates/index.html:3 +#: rhodecode/model/validators.py:800 +msgid "Key name can only consist of letters, underscore, dash or numbers" +msgstr "キー名はアルファベット、アンダースコア(_)、ピリオド(.)、ダッシュ(-)、数字しか使えません。" + +#: rhodecode/templates/index.html:5 msgid "Dashboard" msgstr "ダッシュボード" @@ -1287,205 +1451,226 @@ msgstr "ダッシュボード" #: 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/bookmarks/bookmarks.html:9 #: rhodecode/templates/branches/branches.html:9 #: rhodecode/templates/journal/journal.html:9 -#: rhodecode/templates/journal/journal.html:48 -#: rhodecode/templates/tags/tags.html:10 +#: rhodecode/templates/journal/journal.html:46 +#: rhodecode/templates/journal/journal.html:47 +#: rhodecode/templates/tags/tags.html:9 msgid "quick filter..." msgstr "クイックフィルタ..." #: rhodecode/templates/index_base.html:6 #: rhodecode/templates/admin/repos/repos.html:9 -#: rhodecode/templates/base/base.html:233 msgid "repositories" msgstr "リポジトリ" #: rhodecode/templates/index_base.html:13 -#: rhodecode/templates/index_base.html:15 +#: rhodecode/templates/index_base.html:18 +#: rhodecode/templates/admin/repos/repo_add.html:5 #: rhodecode/templates/admin/repos/repos.html:21 -msgid "ADD REPOSITORY" +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 +#: rhodecode/templates/index_base.html:15 +#: rhodecode/templates/index_base.html:20 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:31 +msgid "Add group" +msgstr "グループの追加" + +#: rhodecode/templates/index_base.html:27 +msgid "Edit group" +msgstr "グループの編集" + +#: rhodecode/templates/index_base.html:27 +msgid "You have admin right to this group, and can edit it" +msgstr "" + +#: rhodecode/templates/index_base.html:40 +#: rhodecode/templates/index_base.html:140 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:33 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:38 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:43 #: rhodecode/templates/admin/users_groups/users_group_add.html:32 #: rhodecode/templates/admin/users_groups/users_group_edit.html:33 +#: rhodecode/templates/admin/users_groups/users_groups.html:34 msgid "Group name" msgstr "グループ名" -#: 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/index_base.html:41 +#: rhodecode/templates/index_base.html:83 +#: rhodecode/templates/index_base.html:142 +#: rhodecode/templates/index_base.html:180 +#: rhodecode/templates/index_base.html:270 #: 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 +#: rhodecode/templates/admin/repos/repos.html:73 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:42 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:47 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:44 +#: rhodecode/templates/forks/fork.html:56 +#: rhodecode/templates/pullrequests/pullrequest.html:101 +#: rhodecode/templates/summary/summary.html:106 msgid "Description" msgstr "説明" -#: rhodecode/templates/index_base.html:40 -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47 -msgid "Repositories group" +#: rhodecode/templates/index_base.html:51 +#: 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_show.html:57 +#: rhodecode/templates/forks/fork.html:47 +msgid "Repository group" msgstr "リポジトリグループ" -#: rhodecode/templates/index_base.html:71 -#: rhodecode/templates/index_base.html:174 -#: rhodecode/templates/index_base.html:264 +#: rhodecode/templates/index_base.html:82 +#: rhodecode/templates/index_base.html:178 +#: rhodecode/templates/index_base.html:268 #: 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/admin/repos/repos.html:71 +#: rhodecode/templates/admin/users/user_edit_my_account.html:172 +#: rhodecode/templates/base/perms_summary.html:14 +#: rhodecode/templates/bookmarks/bookmarks.html:34 #: rhodecode/templates/bookmarks/bookmarks_data.html:6 -#: rhodecode/templates/branches/branches.html:50 +#: rhodecode/templates/branches/branches.html:47 #: rhodecode/templates/branches/branches_data.html:6 #: rhodecode/templates/files/files_browser.html:47 -#: rhodecode/templates/journal/journal.html:70 -#: rhodecode/templates/journal/journal.html:196 -#: 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/journal/journal.html:193 +#: rhodecode/templates/journal/journal.html:296 +#: rhodecode/templates/summary/summary.html:55 +#: rhodecode/templates/summary/summary.html:124 +#: rhodecode/templates/tags/tags.html:48 #: rhodecode/templates/tags/tags_data.html:6 msgid "Name" msgstr "名前" -#: rhodecode/templates/index_base.html:73 +#: rhodecode/templates/index_base.html:84 msgid "Last change" msgstr "最後の変更時刻" -#: 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:198 +#: rhodecode/templates/index_base.html:85 +#: rhodecode/templates/index_base.html:183 +#: rhodecode/templates/index_base.html:273 +#: rhodecode/templates/admin/repos/repos.html:74 +#: rhodecode/templates/admin/users/user_edit_my_account.html:174 +#: rhodecode/templates/journal/journal.html:195 +#: rhodecode/templates/journal/journal.html:298 msgid "Tip" msgstr "Tip" -#: rhodecode/templates/index_base.html:75 -#: rhodecode/templates/index_base.html:181 -#: rhodecode/templates/index_base.html:269 +#: rhodecode/templates/index_base.html:86 +#: rhodecode/templates/index_base.html:185 +#: rhodecode/templates/index_base.html:275 #: rhodecode/templates/admin/repos/repo_edit.html:121 -#: rhodecode/templates/admin/repos/repos.html:73 +#: rhodecode/templates/admin/repos/repos.html:76 msgid "Owner" msgstr "所有者" -#: 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 +#: rhodecode/templates/index_base.html:87 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/index_base.html:171 +#: rhodecode/templates/index_base.html:209 +#: rhodecode/templates/index_base.html:296 +#: rhodecode/templates/admin/repos/repos.html:97 +#: rhodecode/templates/admin/users/user_edit_my_account.html:196 #: rhodecode/templates/admin/users/users.html:107 -#: rhodecode/templates/bookmarks/bookmarks.html:60 -#: rhodecode/templates/branches/branches.html:76 -#: rhodecode/templates/journal/journal.html:221 -#: rhodecode/templates/tags/tags.html:77 +#: rhodecode/templates/bookmarks/bookmarks.html:58 +#: rhodecode/templates/branches/branches.html:73 +#: rhodecode/templates/journal/journal.html:217 +#: rhodecode/templates/journal/journal.html:320 +#: rhodecode/templates/tags/tags.html:74 msgid "Click to sort ascending" msgstr "昇順で並び換え" -#: 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/index_base.html:172 +#: rhodecode/templates/index_base.html:210 +#: rhodecode/templates/index_base.html:297 +#: rhodecode/templates/admin/repos/repos.html:98 +#: rhodecode/templates/admin/users/user_edit_my_account.html:197 #: rhodecode/templates/admin/users/users.html:108 -#: rhodecode/templates/bookmarks/bookmarks.html:61 -#: rhodecode/templates/branches/branches.html:77 -#: rhodecode/templates/journal/journal.html:222 -#: rhodecode/templates/tags/tags.html:78 +#: rhodecode/templates/bookmarks/bookmarks.html:59 +#: rhodecode/templates/branches/branches.html:74 +#: rhodecode/templates/journal/journal.html:218 +#: rhodecode/templates/journal/journal.html:321 +#: rhodecode/templates/tags/tags.html:75 msgid "Click to sort descending" msgstr "降順で並び替え" -#: rhodecode/templates/index_base.html:177 -#: rhodecode/templates/index_base.html:267 +#: rhodecode/templates/index_base.html:181 +#: rhodecode/templates/index_base.html:271 msgid "Last Change" msgstr "最後の変更点" -#: 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/index_base.html:211 +#: rhodecode/templates/admin/repos/repos.html:99 +#: rhodecode/templates/admin/users/user_edit_my_account.html:198 #: rhodecode/templates/admin/users/users.html:109 -#: rhodecode/templates/bookmarks/bookmarks.html:62 -#: rhodecode/templates/branches/branches.html:78 -#: rhodecode/templates/journal/journal.html:223 -#: rhodecode/templates/tags/tags.html:79 +#: rhodecode/templates/bookmarks/bookmarks.html:60 +#: rhodecode/templates/branches/branches.html:75 +#: rhodecode/templates/journal/journal.html:219 +#: rhodecode/templates/journal/journal.html:322 +#: rhodecode/templates/tags/tags.html:76 msgid "No records found." msgstr "レコードが見つかりません" -#: 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/index_base.html:212 +#: rhodecode/templates/index_base.html:299 +#: rhodecode/templates/admin/repos/repos.html:100 +#: rhodecode/templates/admin/users/user_edit_my_account.html:199 #: rhodecode/templates/admin/users/users.html:110 -#: rhodecode/templates/bookmarks/bookmarks.html:63 -#: rhodecode/templates/branches/branches.html:79 -#: rhodecode/templates/journal/journal.html:224 -#: rhodecode/templates/tags/tags.html:80 +#: rhodecode/templates/bookmarks/bookmarks.html:61 +#: rhodecode/templates/branches/branches.html:76 +#: rhodecode/templates/journal/journal.html:220 +#: rhodecode/templates/journal/journal.html:323 +#: rhodecode/templates/tags/tags.html:77 msgid "Data error." msgstr "データエラー" -#: 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/index_base.html:213 +#: rhodecode/templates/index_base.html:300 +#: rhodecode/templates/admin/repos/repos.html:101 +#: rhodecode/templates/admin/users/user_edit_my_account.html:58 +#: rhodecode/templates/admin/users/user_edit_my_account.html:200 #: rhodecode/templates/admin/users/users.html:111 -#: rhodecode/templates/bookmarks/bookmarks.html:64 -#: rhodecode/templates/branches/branches.html:80 -#: rhodecode/templates/journal/journal.html:62 -#: rhodecode/templates/journal/journal.html:225 -#: rhodecode/templates/tags/tags.html:81 +#: rhodecode/templates/bookmarks/bookmarks.html:62 +#: rhodecode/templates/branches/branches.html:77 +#: rhodecode/templates/journal/journal.html:221 +#: rhodecode/templates/journal/journal.html:324 +#: rhodecode/templates/tags/tags.html:78 msgid "Loading..." msgstr "読み込み中..." -#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54 -msgid "Sign In" -msgstr "サインイン" +#: rhodecode/templates/index_base.html:298 +msgid "No repositories found." +msgstr "リポジトリが見つかりません" + +#: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:227 +msgid "Log In" +msgstr "ログイン" #: rhodecode/templates/login.html:21 -msgid "Sign In to" -msgstr "" +#, python-format +msgid "Log In to %s" +msgstr "%s へログイン" #: 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 +#: rhodecode/templates/admin/users/user_edit.html:57 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:31 +#: rhodecode/templates/admin/users/users.html:77 +#: rhodecode/templates/base/base.html:203 +#: rhodecode/templates/summary/summary.html:123 msgid "Username" msgstr "ユーザー名" #: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29 #: rhodecode/templates/admin/ldap/ldap.html:46 #: rhodecode/templates/admin/users/user_add.html:41 -#: rhodecode/templates/base/base.html:92 +#: rhodecode/templates/base/base.html:212 msgid "Password" msgstr "パスワード" @@ -1493,16 +1678,20 @@ msgstr "パスワード" msgid "Remember me" msgstr "次回から自動的にサインイン" +#: rhodecode/templates/login.html:54 +msgid "Sign In" +msgstr "サインイン" + #: rhodecode/templates/login.html:60 msgid "Forgot your password ?" msgstr "パスワードを忘れた場合はこちら" -#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103 +#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:223 msgid "Don't have an account ?" msgstr "アカウントを持っていない場合はこちら" #: rhodecode/templates/password_reset.html:5 -msgid "Reset your password" +msgid "Password Reset" msgstr "パスワードリセット" #: rhodecode/templates/password_reset.html:11 @@ -1535,23 +1724,23 @@ msgstr "パスワード再入力" #: 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 +#: rhodecode/templates/admin/users/user_edit.html:97 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62 msgid "First Name" msgstr "名前" #: 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 +#: rhodecode/templates/admin/users/user_edit.html:106 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71 msgid "Last Name" msgstr "名字" #: 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 +#: rhodecode/templates/admin/users/user_edit.html:115 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80 +#: rhodecode/templates/summary/summary.html:125 msgid "Email" msgstr "メールアドレス" @@ -1563,44 +1752,31 @@ msgstr "アカウントは登録後にアクティブになります" msgid "Your account must wait for activation by administrator" msgstr "アカウントは管理者のアクティベーションを待つ必要があります" -#: rhodecode/templates/repo_switcher_list.html:11 +#: rhodecode/templates/repo_switcher_list.html:10 #: 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 +#: rhodecode/templates/data_table/_dt_elements.html:61 +#: rhodecode/templates/summary/summary.html:77 msgid "Private repository" msgstr "非公開リポジトリ" -#: rhodecode/templates/repo_switcher_list.html:16 +#: rhodecode/templates/repo_switcher_list.html:12 +#: rhodecode/templates/data_table/_dt_elements.html:63 +#: rhodecode/templates/summary/summary.html:79 msgid "Public repository" msgstr "公開リポジトリ" -#: rhodecode/templates/switch_to_list.html:3 -#: rhodecode/templates/branches/branches.html:14 -msgid "branches" -msgstr "ブランチ" - #: rhodecode/templates/switch_to_list.html:10 #: rhodecode/templates/branches/branches_data.html:57 msgid "There are no branches yet" msgstr "まだブランチがありません" -#: rhodecode/templates/switch_to_list.html:15 -#: rhodecode/templates/shortlog/shortlog_data.html:10 -#: rhodecode/templates/tags/tags.html:15 -msgid "tags" -msgstr "タグ" - #: rhodecode/templates/switch_to_list.html:22 #: rhodecode/templates/tags/tags_data.html:38 msgid "There are no tags yet" msgstr "まだタグがありません" -#: rhodecode/templates/switch_to_list.html:28 -#: rhodecode/templates/bookmarks/bookmarks.html:15 -msgid "bookmarks" -msgstr "ブックマーク" - #: rhodecode/templates/switch_to_list.html:35 #: rhodecode/templates/bookmarks/bookmarks_data.html:32 msgid "There are no bookmarks yet" @@ -1608,6 +1784,7 @@ msgstr "まだブックマークがありません" #: rhodecode/templates/admin/admin.html:5 #: rhodecode/templates/admin/admin.html:13 +#: rhodecode/templates/base/base.html:68 msgid "Admin journal" msgstr "管理者ジャーナル" @@ -1628,11 +1805,13 @@ msgid_plural "%s entries" msgstr[0] "%s エントリ" #: 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 +#: rhodecode/templates/admin/repos/repos.html:77 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 +#: rhodecode/templates/admin/users/user_edit_my_account.html:176 +#: rhodecode/templates/admin/users/users.html:87 +#: rhodecode/templates/admin/users_groups/users_groups.html:37 +#: rhodecode/templates/journal/journal.html:197 +#: rhodecode/templates/journal/journal.html:300 msgid "Action" msgstr "アクション" @@ -1642,11 +1821,11 @@ msgid "Repository" msgstr "リポジトリ" #: rhodecode/templates/admin/admin_log.html:8 -#: rhodecode/templates/bookmarks/bookmarks.html:37 +#: rhodecode/templates/bookmarks/bookmarks.html:35 #: rhodecode/templates/bookmarks/bookmarks_data.html:7 -#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches.html:48 #: rhodecode/templates/branches/branches_data.html:7 -#: rhodecode/templates/tags/tags.html:52 +#: rhodecode/templates/tags/tags.html:49 #: rhodecode/templates/tags/tags_data.html:7 msgid "Date" msgstr "日時" @@ -1665,6 +1844,7 @@ msgid "Repositories defaults" msgstr "リポジトリのデフォルト設定" #: rhodecode/templates/admin/defaults/defaults.html:11 +#: rhodecode/templates/base/base.html:75 msgid "Defaults" msgstr "デフォルト設定" @@ -1677,8 +1857,7 @@ 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 +#: rhodecode/templates/forks/fork.html:69 msgid "" "Private repositories are only visible to people explicitly added as " "collaborators." @@ -1706,7 +1885,7 @@ 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 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72 msgid "Enable locking" msgstr "ロックを有効にする" @@ -1717,14 +1896,18 @@ msgstr "リポジトリのpullのロックを有効にします" #: 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/permissions/permissions.html:92 +#: rhodecode/templates/admin/repos/repo_edit.html:148 +#: rhodecode/templates/admin/repos/repo_edit.html:173 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:80 #: 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/user_add.html:94 +#: rhodecode/templates/admin/users/user_edit.html:140 +#: rhodecode/templates/admin/users/user_edit.html:185 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:88 +#: rhodecode/templates/admin/users_groups/users_group_add.html:49 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:90 #: rhodecode/templates/admin/users_groups/users_group_edit.html:135 -#: rhodecode/templates/settings/repo_settings.html:94 msgid "Save" msgstr "保存" @@ -1733,7 +1916,9 @@ msgid "LDAP administration" msgstr "LDAP管理" #: rhodecode/templates/admin/ldap/ldap.html:11 -msgid "Ldap" +#: rhodecode/templates/admin/users/users.html:86 +#: rhodecode/templates/base/base.html:74 +msgid "LDAP" msgstr "LDAP" #: rhodecode/templates/admin/ldap/ldap.html:28 @@ -1814,8 +1999,7 @@ msgid "Comments" msgstr "コメント" #: rhodecode/templates/admin/notifications/notifications.html:31 -#: rhodecode/templates/base/base.html:267 -#: rhodecode/templates/base/base.html:269 +#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 msgid "Pull requests" msgstr "プルリクエスト" @@ -1833,6 +2017,7 @@ msgid "Show notification" msgstr "通知を表示" #: rhodecode/templates/admin/notifications/show_notification.html:9 +#: rhodecode/templates/base/base.html:241 msgid "Notifications" msgstr "通知" @@ -1841,11 +2026,12 @@ msgid "Permissions administration" 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:143 +#: rhodecode/templates/admin/repos/repo_edit.html:158 +#: rhodecode/templates/admin/repos/repo_edit.html:165 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64 +#: rhodecode/templates/admin/users/user_edit.html:150 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100 -#: rhodecode/templates/settings/repo_settings.html:86 +#: rhodecode/templates/base/base.html:73 msgid "Permissions" msgstr "権限設定" @@ -1859,30 +2045,21 @@ msgstr "匿名アクセス" #: rhodecode/templates/admin/permissions/permissions.html:49 msgid "" -"All default permissions on each repository will be reset to choosen " +"All default permissions on each repository will be reset to chosen " "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" +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" +"All default permissions on each repository group will be reset to chosen " +"permission, note that all custom default permission on repository groups " +"will be lost" msgstr "" #: rhodecode/templates/admin/permissions/permissions.html:69 @@ -1897,40 +2074,95 @@ msgstr "リポジトリ作成" msgid "Repository forking" msgstr "リポジトリフォーク" -#: rhodecode/templates/admin/permissions/permissions.html:92 -#: rhodecode/templates/admin/repos/repo_edit.html:264 -msgid "set" -msgstr "保存" - -#: rhodecode/templates/admin/repos/repo_add.html:5 -#: rhodecode/templates/admin/repos/repo_add_create_repository.html:5 -msgid "Add repository" -msgstr "リポジトリの追加" - -#: rhodecode/templates/admin/repos/repo_add.html:11 -#: rhodecode/templates/admin/repos/repo_edit.html:11 -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10 +#: rhodecode/templates/admin/permissions/permissions.html:93 +#: rhodecode/templates/admin/permissions/permissions.html:154 +#: rhodecode/templates/admin/repos/repo_edit.html:149 +#: rhodecode/templates/admin/repos/repo_edit.html:174 +#: rhodecode/templates/admin/repos/repo_edit.html:388 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81 +#: rhodecode/templates/admin/settings/settings.html:115 +#: rhodecode/templates/admin/settings/settings.html:187 +#: rhodecode/templates/admin/settings/settings.html:278 +#: rhodecode/templates/admin/users/user_edit.html:141 +#: rhodecode/templates/admin/users/user_edit.html:186 +#: rhodecode/templates/admin/users/user_edit.html:235 +#: rhodecode/templates/admin/users/user_edit.html:283 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:89 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:136 +#: rhodecode/templates/files/files_add.html:80 +#: rhodecode/templates/files/files_edit.html:66 +#: rhodecode/templates/pullrequests/pullrequest.html:110 +msgid "Reset" +msgstr "リセット" + +#: rhodecode/templates/admin/permissions/permissions.html:103 +msgid "Default User Permissions" +msgstr "デフォルトのユーザー権限" + +#: rhodecode/templates/admin/permissions/permissions.html:113 +#: rhodecode/templates/admin/users/user_edit.html:244 +msgid "Allowed IP addresses" +msgstr "許可するIPアドレス" + +#: rhodecode/templates/admin/permissions/permissions.html:127 +#: rhodecode/templates/admin/repos/repo_edit.html:347 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70 +#: rhodecode/templates/admin/users/user_edit.html:212 +#: rhodecode/templates/admin/users/user_edit.html:257 +#: rhodecode/templates/admin/users_groups/users_groups.html:46 +#: rhodecode/templates/data_table/_dt_elements.html:122 +#: rhodecode/templates/data_table/_dt_elements.html:130 +msgid "delete" +msgstr "削除" + +#: rhodecode/templates/admin/permissions/permissions.html:128 +#: rhodecode/templates/admin/users/user_edit.html:258 +#, python-format +msgid "Confirm to delete this ip: %s" +msgstr "このIPアドレスを削除してよろしいですか: %s" + +#: rhodecode/templates/admin/permissions/permissions.html:134 +#: rhodecode/templates/admin/users/user_edit.html:264 +msgid "All IP addresses are allowed" +msgstr "すべてのIPアドレスが許可されています" + +#: rhodecode/templates/admin/permissions/permissions.html:145 +#: rhodecode/templates/admin/users/user_edit.html:275 +msgid "New ip address" +msgstr "新しいIPアドレス" + +#: rhodecode/templates/admin/permissions/permissions.html:153 +#: rhodecode/templates/admin/repos/repo_add_base.html:73 +#: rhodecode/templates/admin/repos/repo_edit.html:387 +#: rhodecode/templates/admin/users/user_edit.html:234 +#: rhodecode/templates/admin/users/user_edit.html:282 +msgid "Add" +msgstr "追加" + +#: rhodecode/templates/admin/repos/repo_add.html:12 +#: rhodecode/templates/admin/repos/repo_add.html:16 +#: rhodecode/templates/base/base.html:69 rhodecode/templates/base/base.html:103 +#: rhodecode/templates/base/base.html:263 msgid "Repositories" msgstr "リポジトリ" -#: rhodecode/templates/admin/repos/repo_add.html:13 -msgid "add new" +#: rhodecode/templates/admin/repos/repo_add.html:19 +msgid "Add new" msgstr "新規追加" #: rhodecode/templates/admin/repos/repo_add_base.html:20 -#: rhodecode/templates/summary/summary.html:104 -#: rhodecode/templates/summary/summary.html:105 +#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:97 msgid "Clone from" msgstr "クローン元" #: 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 "オプション:クローンするリポジトリのHTTP[S]のURLを指定します" #: rhodecode/templates/admin/repos/repo_add_base.html:33 -#: rhodecode/templates/forks/fork.html:54 +#: rhodecode/templates/forks/fork.html:51 msgid "Optionaly select a group to put this repository into." msgstr "オプション:このリポジトリが属するグループを選択します" @@ -1940,57 +2172,39 @@ msgstr "作成するリポジトリのタイプを指定します" #: 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 +#: rhodecode/templates/forks/fork.html:38 msgid "Landing revision" msgstr "ランディングリビジョン" #: 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 +#: rhodecode/templates/forks/fork.html:42 msgid "Default revision for files page, downloads, whoosh and readme" msgstr "ファイルページ、ダウンロード、検索、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 +#: rhodecode/templates/forks/fork.html:60 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" -msgstr "追加" - -#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9 -msgid "add new repository" -msgstr "新しいリポジトリの追加" - -#: rhodecode/templates/admin/repos/repo_edit.html:5 +#: rhodecode/templates/admin/repos/repo_edit.html:8 msgid "Edit repository" msgstr "リポジトリを編集" -#: rhodecode/templates/admin/repos/repo_edit.html:13 -#: rhodecode/templates/admin/users/user_edit.html:13 -#: rhodecode/templates/admin/users/user_edit.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 "編集" +#: rhodecode/templates/admin/repos/repo_edit.html:12 +#: rhodecode/templates/admin/settings/hooks.html:9 +#: rhodecode/templates/admin/settings/settings.html:11 +#: rhodecode/templates/base/base.html:76 rhodecode/templates/base/base.html:121 +#: rhodecode/templates/summary/summary.html:212 +msgid "Settings" +msgstr "設定" #: rhodecode/templates/admin/repos/repo_edit.html:40 -#: rhodecode/templates/settings/repo_settings.html:39 msgid "Clone uri" msgstr "クローン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 "オプション: このリポジトリを配置するグループを選択します" @@ -1998,179 +2212,207 @@ msgstr "オプション: このリポジトリを配置するグループを選択します" msgid "Change owner of this repository." 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: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:95 -msgid "Reset" -msgstr "リセット" - -#: rhodecode/templates/admin/repos/repo_edit.html:152 -msgid "Administration" -msgstr "管理" - -#: rhodecode/templates/admin/repos/repo_edit.html:155 +#: rhodecode/templates/admin/repos/repo_edit.html:184 +msgid "Advanced settings" +msgstr "高度な設定" + +#: rhodecode/templates/admin/repos/repo_edit.html:187 msgid "Statistics" msgstr "統計" -#: rhodecode/templates/admin/repos/repo_edit.html:159 +#: rhodecode/templates/admin/repos/repo_edit.html:191 msgid "Reset current statistics" msgstr "現在の統計情報をリセットする" -#: rhodecode/templates/admin/repos/repo_edit.html:159 +#: rhodecode/templates/admin/repos/repo_edit.html:191 msgid "Confirm to remove current statistics" msgstr "現在の統計情報をリセットしてもよろしいですか?" -#: rhodecode/templates/admin/repos/repo_edit.html:162 +#: rhodecode/templates/admin/repos/repo_edit.html:194 msgid "Fetched to rev" msgstr "収集するリビジョン" -#: rhodecode/templates/admin/repos/repo_edit.html:163 +#: rhodecode/templates/admin/repos/repo_edit.html:195 msgid "Stats gathered" msgstr "収集した統計情報" -#: rhodecode/templates/admin/repos/repo_edit.html:171 +#: rhodecode/templates/admin/repos/repo_edit.html:203 msgid "Remote" msgstr "リモート" -#: rhodecode/templates/admin/repos/repo_edit.html:175 +#: rhodecode/templates/admin/repos/repo_edit.html:207 msgid "Pull changes from remote location" msgstr "リモートから変更を取り込む" -#: rhodecode/templates/admin/repos/repo_edit.html:175 +#: rhodecode/templates/admin/repos/repo_edit.html:207 msgid "Confirm to pull changes from remote side" msgstr "リモートから変更を取り込んでもよろしいですか?" -#: rhodecode/templates/admin/repos/repo_edit.html:186 +#: rhodecode/templates/admin/repos/repo_edit.html:218 msgid "Cache" msgstr "キャッシュ" -#: rhodecode/templates/admin/repos/repo_edit.html:190 +#: rhodecode/templates/admin/repos/repo_edit.html:222 msgid "Invalidate repository cache" msgstr "リポジトリのキャッシュを無効化" -#: rhodecode/templates/admin/repos/repo_edit.html:190 +#: rhodecode/templates/admin/repos/repo_edit.html:222 msgid "Confirm to invalidate repository cache" msgstr "リポジトリのキャッシュを無効化してもよろしいですか?" -#: rhodecode/templates/admin/repos/repo_edit.html:193 +#: rhodecode/templates/admin/repos/repo_edit.html:225 msgid "" "Manually invalidate cache for this repository. On first access repository" " will be cached again" msgstr "このリポジトリのキャッシュを手動で無効化します。リポジトリへの初回アクセス時に再びキャッシュされます。" -#: rhodecode/templates/admin/repos/repo_edit.html:198 +#: rhodecode/templates/admin/repos/repo_edit.html:230 msgid "List of cached values" msgstr "キャッシュしている値の一覧" -#: rhodecode/templates/admin/repos/repo_edit.html:201 +#: rhodecode/templates/admin/repos/repo_edit.html:233 msgid "Prefix" msgstr "プレフィックス" -#: rhodecode/templates/admin/repos/repo_edit.html:202 +#: rhodecode/templates/admin/repos/repo_edit.html:234 msgid "Key" msgstr "キー" -#: rhodecode/templates/admin/repos/repo_edit.html:203 +#: rhodecode/templates/admin/repos/repo_edit.html:235 #: rhodecode/templates/admin/users/user_add.html:86 -#: rhodecode/templates/admin/users/user_edit.html:117 +#: rhodecode/templates/admin/users/user_edit.html:124 +#: rhodecode/templates/admin/users/users.html:84 #: rhodecode/templates/admin/users_groups/users_group_add.html:41 #: rhodecode/templates/admin/users_groups/users_group_edit.html:42 +#: rhodecode/templates/admin/users_groups/users_groups.html:36 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 +#: rhodecode/templates/admin/repos/repo_edit.html:250 +#: rhodecode/templates/base/base.html:280 +#: rhodecode/templates/base/base.html:281 msgid "Public journal" msgstr "公開ジャーナル" -#: rhodecode/templates/admin/repos/repo_edit.html:224 +#: rhodecode/templates/admin/repos/repo_edit.html:256 msgid "Remove from public journal" msgstr "公開ジャーナルから削除する" -#: rhodecode/templates/admin/repos/repo_edit.html:226 +#: rhodecode/templates/admin/repos/repo_edit.html:258 msgid "Add to public journal" msgstr "公開ジャーナルに追加する" -#: rhodecode/templates/admin/repos/repo_edit.html:231 +#: rhodecode/templates/admin/repos/repo_edit.html:263 msgid "" "All actions made on this repository will be accessible to everyone in " "public journal" msgstr "公開ジャーナルでは、このリポジトリに対して行った操作のすべてが公開されます" -#: rhodecode/templates/admin/repos/repo_edit.html:238 +#: rhodecode/templates/admin/repos/repo_edit.html:270 msgid "Locking" msgstr "ロック" -#: rhodecode/templates/admin/repos/repo_edit.html:243 +#: rhodecode/templates/admin/repos/repo_edit.html:275 msgid "Unlock locked repo" msgstr "リポジトリのアンロック" -#: rhodecode/templates/admin/repos/repo_edit.html:243 +#: rhodecode/templates/admin/repos/repo_edit.html:275 msgid "Confirm to unlock repository" msgstr "このリポジトリのロックを外しますか?" -#: rhodecode/templates/admin/repos/repo_edit.html:246 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "lock repo" msgstr "リポジトリのロック" -#: rhodecode/templates/admin/repos/repo_edit.html:246 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "Confirm to lock repository" msgstr "このリポジトリをロックしますか?" -#: rhodecode/templates/admin/repos/repo_edit.html:247 +#: rhodecode/templates/admin/repos/repo_edit.html:279 msgid "Repository is not locked" msgstr "リポジトリはロックされていません" -#: rhodecode/templates/admin/repos/repo_edit.html:252 +#: rhodecode/templates/admin/repos/repo_edit.html:284 msgid "Force locking on repository. Works only when anonymous access is disabled" msgstr "リポジトリを強制ロックします。匿名アクセスが無効になっている場合のみ動作します。" -#: rhodecode/templates/admin/repos/repo_edit.html:259 +#: rhodecode/templates/admin/repos/repo_edit.html:291 msgid "Set as fork of" msgstr "フォーク元の設定" -#: rhodecode/templates/admin/repos/repo_edit.html:268 +#: rhodecode/templates/admin/repos/repo_edit.html:296 +msgid "set" +msgstr "保存" + +#: rhodecode/templates/admin/repos/repo_edit.html:300 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 +#: rhodecode/templates/admin/repos/repo_edit.html:306 +#: rhodecode/templates/changeset/changeset_file_comment.html:41 msgid "Delete" msgstr "削除" -#: rhodecode/templates/admin/repos/repo_edit.html:278 -#: rhodecode/templates/settings/repo_settings.html:115 +#: rhodecode/templates/admin/repos/repo_edit.html:315 msgid "Remove this repository" msgstr "このリポジトリを削除" -#: rhodecode/templates/admin/repos/repo_edit.html:278 -#: rhodecode/templates/settings/repo_settings.html:115 +#: rhodecode/templates/admin/repos/repo_edit.html:315 msgid "Confirm to delete this repository" msgstr "このリポジトリを削除しますか?" -#: rhodecode/templates/admin/repos/repo_edit.html:282 -#: rhodecode/templates/settings/repo_settings.html:119 +#: rhodecode/templates/admin/repos/repo_edit.html:317 +#, python-format +msgid "this repository has %s fork" +msgid_plural "this repository has %s forks" +msgstr[0] "%s 個のフォークがあります" + +#: rhodecode/templates/admin/repos/repo_edit.html:318 +msgid "Detach forks" +msgstr "フォークの切り離し" + +#: rhodecode/templates/admin/repos/repo_edit.html:319 +msgid "Delete forks" +msgstr "フォークも削除" + +#: rhodecode/templates/admin/repos/repo_edit.html:322 msgid "" "This repository will be renamed in a special way in order to be " -"unaccesible for RhodeCode and VCS systems. If you need fully delete it " -"from file system please do it manually" +"unaccesible for RhodeCode and VCS systems. If you need to fully delete it" +" from file system please do it manually" msgstr "" "このリポジトリはRhodeCodeとVCSシステムからアクセス出来ないようにするために特別な方法でリネームされます。\n" "完全な削除が必要な場合はファイルシステムから手動で削除してください" +#: rhodecode/templates/admin/repos/repo_edit.html:336 +msgid "Extra fields" +msgstr "拡張フィールド" + +#: rhodecode/templates/admin/repos/repo_edit.html:348 +#, python-format +msgid "Confirm to delete this field: %s" +msgstr "このフィールドを削除してよろしいですか: %s" + +#: rhodecode/templates/admin/repos/repo_edit.html:362 +msgid "New field key" +msgstr "新しいフィールドのキー" + +#: rhodecode/templates/admin/repos/repo_edit.html:370 +msgid "New field label" +msgstr "新しいフィールドのラベル" + +#: rhodecode/templates/admin/repos/repo_edit.html:373 +msgid "Enter short label" +msgstr "ラベルを入力してください" + +#: rhodecode/templates/admin/repos/repo_edit.html:379 +msgid "New field description" +msgstr "新しいフィールドの説明" + +#: rhodecode/templates/admin/repos/repo_edit.html:382 +msgid "Enter description of a field" +msgstr "フィールドの説明を入力してください" + #: rhodecode/templates/admin/repos/repo_edit_perms.html:3 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3 msgid "none" @@ -2188,8 +2430,6 @@ 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:229 msgid "admin" msgstr "管理" @@ -2199,78 +2439,58 @@ msgid "member" msgstr "メンバー" #: rhodecode/templates/admin/repos/repo_edit_perms.html:16 -#: rhodecode/templates/data_table/_dt_elements.html:67 -#: rhodecode/templates/journal/journal.html:95 -#: rhodecode/templates/summary/summary.html:85 msgid "private repository" msgstr "非公開リポジトリ" #: 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 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:20 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:35 msgid "default" msgstr "default" #: 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 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:25 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:55 msgid "revoke" msgstr "取消" #: rhodecode/templates/admin/repos/repo_edit_perms.html:83 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:67 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:80 msgid "Add another member" msgstr "別のメンバーを追加" #: rhodecode/templates/admin/repos/repo_edit_perms.html:97 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:100 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:103 -msgid "Failed to remove users group" +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:116 +msgid "Failed to remove user group" msgstr "ユーザーグループの削除に失敗しました" #: rhodecode/templates/admin/repos/repos.html:5 msgid "Repositories administration" msgstr "リポジトリ管理" -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:86 msgid "apply to children" msgstr "子リポジトリにも適用" -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 msgid "" -"Set or revoke permission to all children of that group, including " -"repositories and other groups" +"Set or revoke permission to all children of that group, including non-" +"private repositories and other groups" msgstr "" +#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 +#, python-format +msgid "%s Group Dashboard" +msgstr "%s グループダッシュボード" + #: 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 "ホーム" @@ -2279,79 +2499,77 @@ msgid "with" msgstr "と" #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5 -msgid "Add repos group" -msgstr "リポジトリグループを追加" - -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10 -msgid "Repos groups" +msgid "Add repository group" +msgstr "リポジトリグループの追加" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:16 +#: rhodecode/templates/base/base.html:70 rhodecode/templates/base/base.html:82 +msgid "Repository groups" msgstr "リポジトリグループ" -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12 -msgid "add new repos group" +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:13 +msgid "Add new repository group" msgstr "新しいリポジトリグループを追加" -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:51 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:56 msgid "Group parent" msgstr "親グループ" -#: 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 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:59 msgid "save" msgstr "保存" #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5 -msgid "Edit repos group" +msgid "Edit repository group" msgstr "リポジトリグループを編集" -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12 -msgid "edit repos group" -msgstr "リポジトリグループを編集" - -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:13 +#, python-format +msgid "Edit repository group %s" +msgstr "リポジトリグループを編集 %s" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:27 +msgid "Add child group" +msgstr "子グループの追加" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:76 msgid "" "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 -msgid "Repositories groups administration" +msgid "Repository groups administration" msgstr "リポジトリグループ管理" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22 -msgid "ADD NEW GROUP" -msgstr "新しいグループを追加" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:45 msgid "Number of toplevel repositories" msgstr "トップレベルリポジトリの数" -#: 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 "アクション" - -#: 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 "削除" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:64 +msgid "Edit" +msgstr "編集" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:65 +#: rhodecode/templates/base/perms_summary.html:29 +#: rhodecode/templates/base/perms_summary.html:48 +#: rhodecode/templates/base/perms_summary.html:50 +#: rhodecode/templates/data_table/_dt_elements.html:116 +#: rhodecode/templates/data_table/_dt_elements.html:117 +msgid "edit" +msgstr "編集" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70 #, 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] "このグループを削除してもよろしいですか?: %s %s リポジトリ" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63 -msgid "There are no repositories groups yet" +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:78 +msgid "There are no repository groups yet" msgstr "まだリポジトリグループがありません" #: rhodecode/templates/admin/settings/hooks.html:5 @@ -2359,12 +2577,6 @@ msgstr "まだリポジトリグループがありません" msgid "Settings administration" msgstr "設定管理" -#: rhodecode/templates/admin/settings/hooks.html:9 -#: rhodecode/templates/admin/settings/settings.html:9 -#: rhodecode/templates/settings/repo_settings.html:13 -msgid "Settings" -msgstr "設定" - #: rhodecode/templates/admin/settings/hooks.html:24 msgid "Built in hooks - read only" msgstr "組み込みフック - 読み込み専用" @@ -2381,208 +2593,212 @@ msgstr "削除" msgid "Failed to remove hook" msgstr "フックの削除に失敗しました" -#: rhodecode/templates/admin/settings/settings.html:24 +#: rhodecode/templates/admin/settings/settings.html:26 msgid "Remap and rescan repositories" msgstr "リポジトリの再マッピングと再スキャン" -#: rhodecode/templates/admin/settings/settings.html:32 -msgid "rescan option" +#: rhodecode/templates/admin/settings/settings.html:34 +msgid "Rescan option" msgstr "再スキャンオプション" -#: rhodecode/templates/admin/settings/settings.html:38 +#: rhodecode/templates/admin/settings/settings.html:40 msgid "" "In case a repository was deleted from filesystem and there are leftovers " "in the database check this option to scan obsolete data in database and " "remove it." msgstr "" -#: rhodecode/templates/admin/settings/settings.html:39 -msgid "destroy old data" +#: rhodecode/templates/admin/settings/settings.html:41 +msgid "Destroy old data" msgstr "古いデータを削除する" -#: rhodecode/templates/admin/settings/settings.html:41 +#: rhodecode/templates/admin/settings/settings.html:43 msgid "" "Rescan repositories location for new repositories. Also deletes obsolete " "if `destroy` flag is checked " msgstr "" -#: rhodecode/templates/admin/settings/settings.html:46 +#: rhodecode/templates/admin/settings/settings.html:48 msgid "Rescan repositories" msgstr "リポジトリを再チェック" -#: rhodecode/templates/admin/settings/settings.html:52 +#: rhodecode/templates/admin/settings/settings.html:54 msgid "Whoosh indexing" msgstr "Whooshインデックス" -#: rhodecode/templates/admin/settings/settings.html:60 -msgid "index build option" +#: rhodecode/templates/admin/settings/settings.html:62 +msgid "Index build option" msgstr "インデックス作成時の設定" -#: rhodecode/templates/admin/settings/settings.html:65 -msgid "build from scratch" +#: rhodecode/templates/admin/settings/settings.html:67 +msgid "Build from scratch" msgstr "一度削除してから再度インデックスを作成" -#: rhodecode/templates/admin/settings/settings.html:71 +#: rhodecode/templates/admin/settings/settings.html:73 msgid "Reindex" msgstr "再インデックス" -#: rhodecode/templates/admin/settings/settings.html:77 +#: rhodecode/templates/admin/settings/settings.html:79 msgid "Global application settings" msgstr "アプリケーション全体の設定" -#: rhodecode/templates/admin/settings/settings.html:86 -msgid "Application name" -msgstr "アプリケーション名" - -#: rhodecode/templates/admin/settings/settings.html:95 -msgid "Realm text" -msgstr "Realmテキスト" - -#: rhodecode/templates/admin/settings/settings.html:104 -msgid "GA code" -msgstr "GAコード" - -#: rhodecode/templates/admin/settings/settings.html:112 -#: rhodecode/templates/admin/settings/settings.html:178 -#: rhodecode/templates/admin/settings/settings.html:268 +#: rhodecode/templates/admin/settings/settings.html:88 +msgid "Site branding" +msgstr "サイト名" + +#: rhodecode/templates/admin/settings/settings.html:97 +msgid "HTTP authentication realm" +msgstr "HTTP認証レルム" + +#: rhodecode/templates/admin/settings/settings.html:106 +msgid "Google Analytics code" +msgstr "Google Analyticsコード" + +#: rhodecode/templates/admin/settings/settings.html:114 +#: rhodecode/templates/admin/settings/settings.html:186 +#: rhodecode/templates/admin/settings/settings.html:277 msgid "Save settings" msgstr "設定を保存" -#: rhodecode/templates/admin/settings/settings.html:119 +#: rhodecode/templates/admin/settings/settings.html:121 msgid "Visualisation settings" msgstr "表示の設定" -#: rhodecode/templates/admin/settings/settings.html:127 +#: rhodecode/templates/admin/settings/settings.html:129 msgid "General" msgstr "一般" -#: rhodecode/templates/admin/settings/settings.html:132 +#: rhodecode/templates/admin/settings/settings.html:134 msgid "Use lightweight dashboard" msgstr "軽量ダッシュボードを使用" -#: rhodecode/templates/admin/settings/settings.html:139 +#: rhodecode/templates/admin/settings/settings.html:140 +msgid "Use repository extra fields" +msgstr "リポジトリの拡張フィールドを使用" + +#: rhodecode/templates/admin/settings/settings.html:147 msgid "Icons" msgstr "アイコン" -#: rhodecode/templates/admin/settings/settings.html:144 +#: rhodecode/templates/admin/settings/settings.html:152 msgid "Show public repo icon on repositories" msgstr "公開リポジトリのアイコンを表示" -#: rhodecode/templates/admin/settings/settings.html:148 +#: rhodecode/templates/admin/settings/settings.html:156 msgid "Show private repo icon on repositories" msgstr "非公開リポジトリのアイコンを表示" -#: rhodecode/templates/admin/settings/settings.html:155 +#: rhodecode/templates/admin/settings/settings.html:163 msgid "Meta-Tagging" msgstr "メタタグ" -#: rhodecode/templates/admin/settings/settings.html:160 +#: rhodecode/templates/admin/settings/settings.html:168 msgid "Stylify recognised metatags:" msgstr "次のメタタグを変換する" -#: rhodecode/templates/admin/settings/settings.html:187 +#: rhodecode/templates/admin/settings/settings.html:195 msgid "VCS settings" msgstr "VCSの設定" -#: rhodecode/templates/admin/settings/settings.html:196 +#: rhodecode/templates/admin/settings/settings.html:204 msgid "Web" msgstr "Web" -#: rhodecode/templates/admin/settings/settings.html:201 -msgid "require ssl for vcs operations" +#: rhodecode/templates/admin/settings/settings.html:209 +msgid "Require SSL for vcs operations" msgstr "VCSの操作にSSLを必須とする" -#: rhodecode/templates/admin/settings/settings.html:203 +#: rhodecode/templates/admin/settings/settings.html:211 msgid "" "RhodeCode will require SSL for pushing or pulling. If SSL is missing it " "will return HTTP Error 406: Not Acceptable" -msgstr "RhodeCodeはPushとPullにSSLを要求します。もしSSLでない場合、HTTP Error 406: Not Acceptalbeを返します" - -#: rhodecode/templates/admin/settings/settings.html:209 +msgstr "" +"RhodeCodeはPushとPullにSSLを要求します。もしSSLでない場合、HTTP Error 406: Not " +"Acceptalbeを返します" + +#: rhodecode/templates/admin/settings/settings.html:217 msgid "Hooks" msgstr "フック" -#: rhodecode/templates/admin/settings/settings.html:214 +#: rhodecode/templates/admin/settings/settings.html:222 msgid "Update repository after push (hg update)" msgstr "プッシュ後にリポジトリをを更新する (hg update)" -#: rhodecode/templates/admin/settings/settings.html:218 +#: rhodecode/templates/admin/settings/settings.html:226 msgid "Show repository size after push" msgstr "プッシュ後にリポジトリのサイズを表示する" -#: rhodecode/templates/admin/settings/settings.html:222 -msgid "Log user push commands" -msgstr "ユーザーのプッシュコマンドを記録する" - -#: rhodecode/templates/admin/settings/settings.html:226 -msgid "Log user pull commands" -msgstr "ユーザーのプルコマンドを記録する" - #: rhodecode/templates/admin/settings/settings.html:230 -msgid "advanced setup" +msgid "Log user push commands" +msgstr "ユーザーのプッシュコマンドを記録する" + +#: rhodecode/templates/admin/settings/settings.html:234 +msgid "Log user pull commands" +msgstr "ユーザーのプルコマンドを記録する" + +#: rhodecode/templates/admin/settings/settings.html:238 +msgid "Advanced setup" msgstr "高度な設定" -#: rhodecode/templates/admin/settings/settings.html:235 +#: rhodecode/templates/admin/settings/settings.html:243 msgid "Mercurial Extensions" msgstr "Mercurialエクステンション" -#: rhodecode/templates/admin/settings/settings.html:240 -msgid "largefiles extensions" -msgstr "largefilesエクステンション" - -#: rhodecode/templates/admin/settings/settings.html:244 -msgid "hgsubversion extensions" -msgstr "hgsubversionエクステンション" - -#: rhodecode/templates/admin/settings/settings.html:246 +#: rhodecode/templates/admin/settings/settings.html:248 +msgid "Enable largefiles extension" +msgstr "largefilesエクステンションを有効化" + +#: rhodecode/templates/admin/settings/settings.html:252 +msgid "Enable hgsubversion extension" +msgstr "hgsubversionエクステンションを有効化" + +#: rhodecode/templates/admin/settings/settings.html:254 msgid "" -"Requires hgsubversion library installed. Allows clonning from svn remote " +"Requires hgsubversion library installed. Allows cloning from svn remote " "locations" msgstr "hgsubversion のインストールが必要です。リモートロケーションのsvnからクローン出来るようになります" -#: rhodecode/templates/admin/settings/settings.html:256 +#: rhodecode/templates/admin/settings/settings.html:264 msgid "Repositories location" msgstr "リポジトリロケーション" -#: rhodecode/templates/admin/settings/settings.html:261 +#: rhodecode/templates/admin/settings/settings.html:269 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:262 -#: rhodecode/templates/base/base.html:221 -msgid "unlock" +msgstr "これはアプリケーションの重要な設定です。本当に変更が必要でしょうか。もし、変更した場合、変更を反映さ競るためにアプリケーションを再起動する必要があります。アンロックにするにはこのラベルをクリックして下さい" + +#: rhodecode/templates/admin/settings/settings.html:270 +#: rhodecode/templates/base/base.html:131 +msgid "Unlock" msgstr "アンロック" -#: rhodecode/templates/admin/settings/settings.html:263 +#: rhodecode/templates/admin/settings/settings.html:272 msgid "" "Location where repositories are stored. After changing this value a " "restart, and rescan is required" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:283 +#: rhodecode/templates/admin/settings/settings.html:292 msgid "Test Email" msgstr "テストメール" -#: rhodecode/templates/admin/settings/settings.html:291 +#: rhodecode/templates/admin/settings/settings.html:300 msgid "Email to" msgstr "送信先" -#: rhodecode/templates/admin/settings/settings.html:299 +#: rhodecode/templates/admin/settings/settings.html:308 msgid "Send" msgstr "送る" -#: rhodecode/templates/admin/settings/settings.html:305 +#: rhodecode/templates/admin/settings/settings.html:314 msgid "System Info and Packages" msgstr "システム情報とパッケージ" -#: rhodecode/templates/admin/settings/settings.html:308 -msgid "show" +#: rhodecode/templates/admin/settings/settings.html:317 +#: rhodecode/templates/changelog/changelog.html:42 +msgid "Show" msgstr "表示" #: rhodecode/templates/admin/users/user_add.html:5 @@ -2591,12 +2807,14 @@ msgstr "ユーザーを追加" #: rhodecode/templates/admin/users/user_add.html:10 #: rhodecode/templates/admin/users/user_edit.html:11 +#: rhodecode/templates/base/base.html:71 msgid "Users" msgstr "ユーザー" #: rhodecode/templates/admin/users/user_add.html:12 -msgid "add new user" -msgstr "新しいユーザーを追加" +#: rhodecode/templates/admin/users/users.html:23 +msgid "Add new user" +msgstr "新しいユーザーの追加" #: rhodecode/templates/admin/users/user_add.html:50 msgid "Password confirmation" @@ -2606,6 +2824,12 @@ msgstr "パスワード再入力" msgid "Edit user" msgstr "ユーザー編集" +#: rhodecode/templates/admin/users/user_edit.html:13 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:13 +#, python-format +msgid "Edit %s" +msgstr "編集 %s" + #: rhodecode/templates/admin/users/user_edit.html:34 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:10 msgid "Change your avatar at" @@ -2621,26 +2845,31 @@ msgstr "メールアドレス:" msgid "API key" msgstr "APIキー" -#: rhodecode/templates/admin/users/user_edit.html:63 +#: rhodecode/templates/admin/users/user_edit.html:50 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:25 +msgid "Current IP" +msgstr "現在のIP" + +#: rhodecode/templates/admin/users/user_edit.html:70 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 +#: rhodecode/templates/admin/users/user_edit.html:79 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 msgid "New password" msgstr "新しいパスワード" -#: rhodecode/templates/admin/users/user_edit.html:81 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 +#: rhodecode/templates/admin/users/user_edit.html:88 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53 msgid "New password confirmation" msgstr "新しいパスワード 再入力" -#: rhodecode/templates/admin/users/user_edit.html:151 +#: rhodecode/templates/admin/users/user_edit.html:158 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108 msgid "Inherit default permissions" msgstr "デフォルトの権限を継承する" -#: rhodecode/templates/admin/users/user_edit.html:156 +#: rhodecode/templates/admin/users/user_edit.html:163 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113 #, python-format msgid "" @@ -2648,53 +2877,31 @@ msgid "" "options does not have any action" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:162 +#: rhodecode/templates/admin/users/user_edit.html:169 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119 msgid "Create repositories" msgstr "リポジトリを作成する" -#: rhodecode/templates/admin/users/user_edit.html:170 +#: rhodecode/templates/admin/users/user_edit.html:177 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127 msgid "Fork repositories" 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 -msgid "Nothing here yet" -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:217 -#: rhodecode/templates/admin/users_groups/users_group_edit.html:185 -msgid "Permission" -msgstr "権限" - -#: 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:247 +#: rhodecode/templates/admin/users/user_edit.html:200 msgid "Email addresses" msgstr "メールアドレス" -#: rhodecode/templates/admin/users/user_edit.html:260 +#: rhodecode/templates/admin/users/user_edit.html:213 #, python-format msgid "Confirm to delete this email: %s" msgstr "このメールを削除してよろしいですか: %s" -#: rhodecode/templates/admin/users/user_edit.html:274 +#: rhodecode/templates/admin/users/user_edit.html:227 msgid "New email address" msgstr "新しいメールアドレス" -#: rhodecode/templates/admin/users/user_edit.html:281 -msgid "Add" -msgstr "追加" - #: rhodecode/templates/admin/users/user_edit_my_account.html:5 -#: rhodecode/templates/base/base.html:124 +#: rhodecode/templates/base/base.html:242 msgid "My account" msgstr "アカウント" @@ -2707,7 +2914,7 @@ msgid "My permissions" msgstr "権限" #: rhodecode/templates/admin/users/user_edit_my_account.html:38 -#: rhodecode/templates/journal/journal.html:49 +#: rhodecode/templates/journal/journal.html:54 msgid "My repos" msgstr "リポジトリ" @@ -2715,132 +2922,97 @@ msgstr "リポジトリ" msgid "My pull requests" msgstr "プルリクエスト" -#: rhodecode/templates/admin/users/user_edit_my_account.html:45 -msgid "Add repo" -msgstr "リポジトリの追加" - #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:2 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:4 +msgid "Show closed pull requests" +msgstr "クローズしたプルリクエストを表示" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:6 msgid "Opened by me" msgstr "自分が作成" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15 #, python-format msgid "Pull request #%s opened on %s" msgstr "プルリクエスト #%s %s に作成" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:17 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:45 +#: rhodecode/templates/pullrequests/pullrequest_data.html:7 +#: rhodecode/templates/pullrequests/pullrequest_show.html:27 +#: rhodecode/templates/pullrequests/pullrequest_show.html:42 +msgid "Closed" +msgstr "クローズ" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:23 msgid "Confirm to delete this pull request" msgstr "このプルリクエストを削除しますか?" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:26 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:30 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:51 +msgid "Nothing here yet" +msgstr "まだありません" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:34 msgid "I participate in" msgstr "レビュアーとして参加" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:33 -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:30 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:42 +#: rhodecode/templates/pullrequests/pullrequest_data.html:11 #, python-format msgid "Pull request #%s opened by %s on %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: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_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_page_repos.html:42 -msgid "No repositories yet" -msgstr "まだリポジトリがありません" - -#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40 -#: rhodecode/templates/journal/journal_page_repos.html:44 -msgid "create one now" -msgstr "今すぐ作成する" - #: rhodecode/templates/admin/users/users.html:5 msgid "Users administration" msgstr "ユーザー管理" #: rhodecode/templates/admin/users/users.html:9 -#: rhodecode/templates/base/base.html:235 msgid "users" msgstr "ユーザー" -#: rhodecode/templates/admin/users/users.html:23 -msgid "ADD NEW USER" -msgstr "新しいユーザーを追加" - -#: rhodecode/templates/admin/users/users.html:77 -msgid "username" -msgstr "ユーザー名" - #: rhodecode/templates/admin/users/users.html:80 -msgid "firstname" +msgid "Firstname" msgstr "名前" #: rhodecode/templates/admin/users/users.html:81 -msgid "lastname" +msgid "Lastname" msgstr "名字" #: rhodecode/templates/admin/users/users.html:82 -msgid "last login" -msgstr "最終ログイン日" - -#: rhodecode/templates/admin/users/users.html:84 -#: rhodecode/templates/admin/users_groups/users_groups.html:34 -msgid "active" -msgstr "アクティブ" - -#: rhodecode/templates/admin/users/users.html:86 -#: rhodecode/templates/base/base.html:238 -msgid "ldap" -msgstr "LDAP" +msgid "Last login" +msgstr "最終ログイン日時" #: rhodecode/templates/admin/users_groups/users_group_add.html:5 -msgid "Add users group" -msgstr "ユーザーグループを追加" +msgid "Add user group" +msgstr "ユーザーグループの追加" #: rhodecode/templates/admin/users_groups/users_group_add.html:10 -#: rhodecode/templates/admin/users_groups/users_groups.html:9 -msgid "Users groups" +#: rhodecode/templates/admin/users_groups/users_groups.html:11 +#: rhodecode/templates/base/base.html:72 +msgid "User groups" msgstr "ユーザーグループ" #: rhodecode/templates/admin/users_groups/users_group_add.html:12 -msgid "add new users group" -msgstr "新しいユーザーグループを追加" +#: rhodecode/templates/admin/users_groups/users_groups.html:25 +msgid "Add new user group" +msgstr "新しいユーザーグループの追加" #: rhodecode/templates/admin/users_groups/users_group_edit.html:5 -msgid "Edit users group" +msgid "Edit user group" msgstr "ユーザーグループを編集" #: rhodecode/templates/admin/users_groups/users_group_edit.html:11 -msgid "UsersGroups" +msgid "UserGroups" msgstr "ユーザーグループ" #: rhodecode/templates/admin/users_groups/users_group_edit.html:50 +#: rhodecode/templates/admin/users_groups/users_groups.html:35 msgid "Members" msgstr "メンバー" #: rhodecode/templates/admin/users_groups/users_group_edit.html:58 -msgid "Choosen group members" +msgid "Chosen group members" msgstr "グループメンバーを選ぶ" #: rhodecode/templates/admin/users_groups/users_group_edit.html:61 @@ -2855,262 +3027,260 @@ msgstr "有効なメンバー" msgid "Add all elements" msgstr "全ての要素を追加" -#: rhodecode/templates/admin/users_groups/users_group_edit.html:146 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:150 msgid "Group members" msgstr "グループメンバー" -#: rhodecode/templates/admin/users_groups/users_group_edit.html:163 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:167 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" +msgid "User groups administration" msgstr "ユーザーグループ管理" -#: rhodecode/templates/admin/users_groups/users_groups.html:23 -msgid "ADD NEW USER GROUP" -msgstr "新しいユーザーグループを追加" - -#: rhodecode/templates/admin/users_groups/users_groups.html:32 -msgid "group name" -msgstr "グループ名" - -#: rhodecode/templates/admin/users_groups/users_groups.html:33 -#: rhodecode/templates/base/root.html:46 -msgid "members" -msgstr "メンバー" - -#: rhodecode/templates/admin/users_groups/users_groups.html:45 +#: rhodecode/templates/admin/users_groups/users_groups.html:47 #, python-format -msgid "Confirm to delete this users group: %s" +msgid "Confirm to delete this user group: %s" msgstr "ユーザグループを削除しますか?: %s" -#: rhodecode/templates/base/base.html:41 +#: rhodecode/templates/base/base.html:42 msgid "Submit a bug" msgstr "バグレポート" -#: rhodecode/templates/base/base.html:77 -msgid "Login to your account" -msgstr "ログイン" - -#: rhodecode/templates/base/base.html:100 -msgid "Forgot password ?" -msgstr "パスワードを忘れた場合はこちら" - -#: rhodecode/templates/base/base.html:107 -msgid "Log In" -msgstr "ログイン" +#: rhodecode/templates/base/base.html:108 +#: rhodecode/templates/data_table/_dt_elements.html:9 +#: rhodecode/templates/data_table/_dt_elements.html:11 +#: rhodecode/templates/data_table/_dt_elements.html:13 +#: rhodecode/templates/pullrequests/pullrequest_show.html:81 +#: rhodecode/templates/summary/summary.html:8 +msgid "Summary" +msgstr "要約" + +#: rhodecode/templates/base/base.html:109 +#: rhodecode/templates/changelog/changelog.html:11 +#: rhodecode/templates/data_table/_dt_elements.html:17 +#: rhodecode/templates/data_table/_dt_elements.html:19 +#: rhodecode/templates/data_table/_dt_elements.html:21 +msgid "Changelog" +msgstr "履歴" + +#: rhodecode/templates/base/base.html:110 +#: rhodecode/templates/data_table/_dt_elements.html:25 +#: rhodecode/templates/data_table/_dt_elements.html:27 +#: rhodecode/templates/data_table/_dt_elements.html:29 +#: rhodecode/templates/files/files.html:12 +msgid "Files" +msgstr "ファイル" + +#: rhodecode/templates/base/base.html:112 +msgid "Switch To" +msgstr "ブランチの切り替え" + +#: rhodecode/templates/base/base.html:114 +#: rhodecode/templates/base/base.html:267 +msgid "loading..." +msgstr "読み込み中..." #: rhodecode/templates/base/base.html:118 -msgid "Inbox" -msgstr "受信箱" - -#: 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/public_journal.html:4 -msgid "Journal" -msgstr "ジャーナル" - -#: rhodecode/templates/base/base.html:125 -msgid "Log Out" -msgstr "ログアウト" - -#: rhodecode/templates/base/base.html:144 -msgid "Switch repository" -msgstr "リポジトリの切り替え" - -#: rhodecode/templates/base/base.html:146 -msgid "Products" -msgstr "" - -#: rhodecode/templates/base/base.html:152 -#: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47 -msgid "loading..." -msgstr "読み込み中..." - -#: 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 "要約" - -#: 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 "履歴" - -#: rhodecode/templates/base/base.html:175 -#: rhodecode/templates/base/base.html:177 -#: rhodecode/templates/base/base.html:179 -msgid "Switch to" -msgstr "ブランチの切り替え" - -#: 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 "ファイル" - -#: rhodecode/templates/base/base.html:195 -#: rhodecode/templates/base/base.html:199 msgid "Options" msgstr "オプション" -#: rhodecode/templates/base/base.html:204 -#: rhodecode/templates/base/base.html:206 -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:212 rhodecode/templates/base/root.html:50 -#: rhodecode/templates/changelog/changelog.html:43 -msgid "Open new pull request" -msgstr "新しいプルリクエストを作成" - -#: rhodecode/templates/base/base.html:215 +#: rhodecode/templates/base/base.html:124 #: 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:223 -msgid "lock" -msgstr "ロック" - -#: rhodecode/templates/base/base.html:234 -msgid "repositories groups" -msgstr "リポジトリグループ" - -#: rhodecode/templates/base/base.html:236 -msgid "users groups" -msgstr "ユーザーグループ" - -#: rhodecode/templates/base/base.html:237 -msgid "permissions" -msgstr "権限" - -#: 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:259 -#: rhodecode/templates/base/base.html:261 -msgid "Forks" -msgstr "フォーク" - -#: rhodecode/templates/base/base.html:340 -#: rhodecode/templates/base/base.html:342 -#: rhodecode/templates/base/base.html:344 -#: rhodecode/templates/search/search.html:52 +#: rhodecode/templates/base/base.html:126 +msgid "Lightweight changelog" +msgstr "軽量履歴" + +#: rhodecode/templates/base/base.html:127 +#: rhodecode/templates/base/base.html:287 +#: rhodecode/templates/search/search.html:14 +#: rhodecode/templates/search/search.html:54 msgid "Search" msgstr "検索" -#: rhodecode/templates/base/root.html:42 -msgid "add another comment" -msgstr "別のコメントを追加" +#: rhodecode/templates/base/base.html:133 +msgid "Lock" +msgstr "ロック" + +#: rhodecode/templates/base/base.html:141 +msgid "Follow" +msgstr "フォロー" + +#: rhodecode/templates/base/base.html:142 +msgid "Unfollow" +msgstr "アンフォロー" + +#: rhodecode/templates/base/base.html:145 +#: rhodecode/templates/data_table/_dt_elements.html:33 +#: rhodecode/templates/data_table/_dt_elements.html:35 +#: rhodecode/templates/data_table/_dt_elements.html:37 +#: rhodecode/templates/data_table/_dt_elements.html:74 +#: rhodecode/templates/forks/fork.html:9 +msgid "Fork" +msgstr "フォーク" + +#: rhodecode/templates/base/base.html:147 +msgid "Create Pull Request" +msgstr "プルリクエストを作成" + +#: rhodecode/templates/base/base.html:153 +msgid "Show Pull Requests" +msgstr "プルリクエストを表示" + +#: rhodecode/templates/base/base.html:153 +msgid "Pull Requests" +msgstr "プルリクエスト" + +#: rhodecode/templates/base/base.html:190 +msgid "Not logged in" +msgstr "ログインしていません" + +#: rhodecode/templates/base/base.html:197 +msgid "Login to your account" +msgstr "ログイン" + +#: rhodecode/templates/base/base.html:220 +msgid "Forgot password ?" +msgstr "パスワードを忘れた場合はこちら" + +#: rhodecode/templates/base/base.html:243 +msgid "Log Out" +msgstr "ログアウト" + +#: rhodecode/templates/base/base.html:262 +msgid "Switch repository" +msgstr "リポジトリの切り替え" + +#: rhodecode/templates/base/base.html:274 +msgid "Show recent activity" +msgstr "最近の活動を表示" + +#: rhodecode/templates/base/base.html:275 +#: rhodecode/templates/journal/journal.html:4 +msgid "Journal" +msgstr "ジャーナル" + +#: rhodecode/templates/base/base.html:286 +msgid "Search in repositories" +msgstr "全てのリポジトリから検索" + +#: rhodecode/templates/base/perms_summary.html:8 +msgid "No permissions defined yet" +msgstr "まだ権限設定がありません" + +#: rhodecode/templates/base/perms_summary.html:15 +msgid "Permission" +msgstr "権限" + +#: rhodecode/templates/base/perms_summary.html:16 +msgid "Edit Permission" +msgstr "権限の編集" #: rhodecode/templates/base/root.html:43 -#: rhodecode/templates/journal/journal.html:83 -#: rhodecode/templates/summary/summary.html:57 -msgid "Stop following this repository" -msgstr "このリポジトリのフォローをやめる" +msgid "Add another comment" +msgstr "別のコメントを追加" #: rhodecode/templates/base/root.html:44 -#: rhodecode/templates/summary/summary.html:61 +#: rhodecode/templates/data_table/_dt_elements.html:140 +msgid "Stop following this repository" +msgstr "このリポジトリのフォローをやめる" + +#: rhodecode/templates/base/root.html:45 msgid "Start following this repository" msgstr "このリポジトリのフォローする" -#: rhodecode/templates/base/root.html:45 +#: rhodecode/templates/base/root.html:46 msgid "Group" msgstr "グループ" +#: rhodecode/templates/base/root.html:47 +msgid "members" +msgstr "メンバー" + #: rhodecode/templates/base/root.html:48 -msgid "search truncated" -msgstr "検索結果は省略されています" +#: rhodecode/templates/pullrequests/pullrequest.html:181 +msgid "Loading ..." +msgstr "読み込み中..." #: rhodecode/templates/base/root.html:49 -msgid "no matching files" +msgid "Search truncated" +msgstr "検索結果は省略されています" + +#: rhodecode/templates/base/root.html:50 +msgid "No matching files" msgstr "マッチするファイルはありません" #: rhodecode/templates/base/root.html:51 -msgid "Open new pull request for selected changesets" -msgstr "選択したチェンジセットから新しいプルリクエストを作成" +#: rhodecode/templates/changelog/changelog.html:36 +msgid "Open new pull request" +msgstr "新しいプルリクエストを作成" #: rhodecode/templates/base/root.html:52 -msgid "Show selected changes __S -> __E" -msgstr "選択した変更 __S -> __E を表示" +msgid "Open new pull request for selected changesets" +msgstr "選択したチェンジセットから新しいプルリクエストを作成" #: rhodecode/templates/base/root.html:53 +msgid "Show selected changesets __S -> __E" +msgstr "選択した変更 __S -> __E を表示" + +#: rhodecode/templates/base/root.html:54 +msgid "Show selected changeset __S" +msgstr "選択した変更 __S を表示" + +#: rhodecode/templates/base/root.html:55 msgid "Selection link" msgstr "" +#: rhodecode/templates/base/root.html:56 +#: rhodecode/templates/changeset/diff_block.html:8 +msgid "Collapse diff" +msgstr "差分を折りたたむ" + +#: rhodecode/templates/base/root.html:57 +msgid "Expand diff" +msgstr "差分を表示" + #: rhodecode/templates/bookmarks/bookmarks.html:5 #, python-format msgid "%s Bookmarks" msgstr "%s ブックマーク" -#: rhodecode/templates/bookmarks/bookmarks.html:39 +#: rhodecode/templates/bookmarks/bookmarks.html:37 #: rhodecode/templates/bookmarks/bookmarks_data.html:8 -#: rhodecode/templates/branches/branches.html:53 +#: rhodecode/templates/branches/branches.html:50 #: rhodecode/templates/branches/branches_data.html:8 -#: rhodecode/templates/tags/tags.html:54 +#: rhodecode/templates/shortlog/shortlog_data.html:8 +#: rhodecode/templates/tags/tags.html:51 #: rhodecode/templates/tags/tags_data.html:8 msgid "Author" msgstr "作成者" +#: rhodecode/templates/bookmarks/bookmarks.html:38 +#: rhodecode/templates/bookmarks/bookmarks_data.html:9 +#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches_data.html:9 +#: rhodecode/templates/shortlog/shortlog_data.html:5 +#: rhodecode/templates/tags/tags.html:52 +#: rhodecode/templates/tags/tags_data.html:9 +msgid "Revision" +msgstr "リビジョン" + #: rhodecode/templates/branches/branches.html:5 #, python-format msgid "%s Branches" msgstr "%s ブランチ" -#: rhodecode/templates/branches/branches.html:29 +#: rhodecode/templates/branches/branches.html:26 msgid "Compare branches" msgstr "ブランチの比較" -#: rhodecode/templates/branches/branches.html:56 +#: rhodecode/templates/branches/branches.html:53 #: 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.html:54 #: rhodecode/templates/tags/tags_data.html:10 msgid "Compare" msgstr "比較" @@ -3120,114 +3290,78 @@ msgstr "比較" msgid "%s Changelog" msgstr "%s チェンジログ" -#: rhodecode/templates/changelog/changelog.html:15 +#: rhodecode/templates/changelog/changelog.html:11 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" -msgstr[0] "" - -#: rhodecode/templates/changelog/changelog.html:37 +msgstr[0] "%d / %d リビジョンを表示" + +#: rhodecode/templates/changelog/changelog.html:30 msgid "Clear selection" msgstr "選択を解除" -#: rhodecode/templates/changelog/changelog.html:40 +#: rhodecode/templates/changelog/changelog.html:33 #: rhodecode/templates/forks/forks_data.html:19 #, python-format -msgid "compare fork with %s" +msgid "Compare fork with %s" msgstr "%s とフォークを比較" -#: rhodecode/templates/changelog/changelog.html:40 +#: rhodecode/templates/changelog/changelog.html:33 msgid "Compare fork with parent" msgstr "フォークを比較" -#: rhodecode/templates/changelog/changelog.html:49 -msgid "Show" -msgstr "表示" - -#: rhodecode/templates/changelog/changelog.html:74 -#: rhodecode/templates/summary/summary.html:375 -msgid "show more" +#: rhodecode/templates/changelog/changelog.html:76 +#: rhodecode/templates/summary/summary.html:404 +msgid "Show more" msgstr "もっと表示" -#: rhodecode/templates/changelog/changelog.html:78 -msgid "Affected number of files, click to show more details" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:91 -#: rhodecode/templates/changeset/changeset.html:65 -#: rhodecode/templates/changeset/changeset_file_comment.html:20 -#: rhodecode/templates/changeset/changeset_range.html:46 -msgid "Changeset status" -msgstr "リビジョンステータス" - -#: 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:104 -msgid "Parent" -msgstr "親リビジョン" - -#: rhodecode/templates/changelog/changelog.html:110 -#: rhodecode/templates/changeset/changeset.html:42 -msgid "No parents" -msgstr "親リビジョンはありません" - -#: rhodecode/templates/changelog/changelog.html:115 +#: rhodecode/templates/changelog/changelog.html:89 +#: rhodecode/templates/changeset/changeset_range.html:86 +#, python-format +msgid "Bookmark %s" +msgstr "ブックマーク %s" + +#: rhodecode/templates/changelog/changelog.html:95 +#: rhodecode/templates/changeset/changeset.html:111 +#: rhodecode/templates/changeset/changeset_range.html:92 +#, python-format +msgid "Tag %s" +msgstr "タグ %s" + +#: rhodecode/templates/changelog/changelog.html:100 #: rhodecode/templates/changeset/changeset.html:106 -#: rhodecode/templates/changeset/changeset_range.html:79 -msgid "merge" -msgstr "マージ" - -#: rhodecode/templates/changelog/changelog.html:118 -#: rhodecode/templates/changeset/changeset.html:109 -#: 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 "ブランチ" - -#: rhodecode/templates/changelog/changelog.html:124 -#: rhodecode/templates/changeset/changeset_range.html:88 -msgid "bookmark" -msgstr "ブックマーク" - -#: rhodecode/templates/changelog/changelog.html:130 -#: rhodecode/templates/changeset/changeset.html:114 -#: rhodecode/templates/changeset/changeset_range.html:94 -msgid "tag" -msgstr "タグ" - -#: rhodecode/templates/changelog/changelog.html:301 +#: rhodecode/templates/changeset/changeset_range.html:80 +#, python-format +msgid "Branch %s" +msgstr "ブランチ %s" + +#: rhodecode/templates/changelog/changelog.html:258 msgid "There are no changes yet" msgstr "まだ変更がありません" #: rhodecode/templates/changelog/changelog_details.html:4 -#: rhodecode/templates/changeset/changeset.html:94 -msgid "removed" +#: rhodecode/templates/changeset/changeset.html:91 +msgid "Removed" msgstr "削除" #: rhodecode/templates/changelog/changelog_details.html:5 -#: rhodecode/templates/changeset/changeset.html:95 -msgid "changed" +#: rhodecode/templates/changeset/changeset.html:92 +msgid "Changed" msgstr "変更" #: rhodecode/templates/changelog/changelog_details.html:6 -#: rhodecode/templates/changeset/changeset.html:96 -msgid "added" +#: rhodecode/templates/changeset/changeset.html:93 +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:98 -#: rhodecode/templates/changeset/changeset.html:99 -#: rhodecode/templates/changeset/changeset.html:100 +#: rhodecode/templates/changeset/changeset.html:95 +#: rhodecode/templates/changeset/changeset.html:96 +#: rhodecode/templates/changeset/changeset.html:97 #, python-format -msgid "affected %s files" +msgid "Affected %s files" msgstr "%s ファイルに影響" #: rhodecode/templates/changeset/changeset.html:6 @@ -3235,108 +3369,140 @@ msgstr "%s ファイルに影響" msgid "%s Changeset" msgstr "%s チェンジセット" -#: rhodecode/templates/changeset/changeset.html:14 -msgid "Changeset" -msgstr "チェンジセット" - -#: rhodecode/templates/changeset/changeset.html:52 +#: rhodecode/templates/changeset/changeset.html:39 +msgid "No parents" +msgstr "親リビジョンはありません" + +#: rhodecode/templates/changeset/changeset.html:49 msgid "No children" msgstr "子リビジョンはありません" -#: rhodecode/templates/changeset/changeset.html:70 -#: rhodecode/templates/changeset/diff_block.html:20 -msgid "raw diff" -msgstr "差分を表示" - -#: rhodecode/templates/changeset/changeset.html:71 -msgid "patch diff" +#: rhodecode/templates/changeset/changeset.html:62 +#: rhodecode/templates/changeset/changeset_file_comment.html:20 +#: rhodecode/templates/changeset/changeset_range.html:44 +msgid "Changeset status" +msgstr "リビジョンステータス" + +#: rhodecode/templates/changeset/changeset.html:67 +#: rhodecode/templates/changeset/diff_block.html:23 +msgid "Raw diff" +msgstr "diffとして差分を表示" + +#: rhodecode/templates/changeset/changeset.html:68 +msgid "Patch diff" msgstr "パッチとして差分を表示" -#: rhodecode/templates/changeset/changeset.html:72 -#: rhodecode/templates/changeset/diff_block.html:21 -msgid "download diff" +#: rhodecode/templates/changeset/changeset.html:69 +#: rhodecode/templates/changeset/diff_block.html:24 +msgid "Download diff" msgstr "差分をダウンロード" -#: rhodecode/templates/changeset/changeset.html:76 -#: rhodecode/templates/changeset/changeset_file_comment.html:82 +#: rhodecode/templates/changeset/changeset.html:73 +#: rhodecode/templates/changeset/changeset_file_comment.html:97 #, python-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d コメント" -#: rhodecode/templates/changeset/changeset.html:76 -#: rhodecode/templates/changeset/changeset_file_comment.html:82 +#: rhodecode/templates/changeset/changeset.html:73 +#: rhodecode/templates/changeset/changeset_file_comment.html:97 #, python-format msgid "(%d inline)" msgid_plural "(%d inline)" msgstr[0] "(%d インライン)" -#: rhodecode/templates/changeset/changeset.html:122 -#: rhodecode/templates/compare/compare_diff.html:44 -#: rhodecode/templates/pullrequests/pullrequest_show.html:76 +#: rhodecode/templates/changeset/changeset.html:103 +#: rhodecode/templates/changeset/changeset_range.html:77 +msgid "merge" +msgstr "マージ" + +#: rhodecode/templates/changeset/changeset.html:119 +#: rhodecode/templates/compare/compare_diff.html:40 +#: rhodecode/templates/pullrequests/pullrequest_show.html:113 #, python-format msgid "%s file changed" msgid_plural "%s files changed" msgstr[0] "%s ファイルに影響" -#: rhodecode/templates/changeset/changeset.html:124 -#: rhodecode/templates/compare/compare_diff.html:46 -#: rhodecode/templates/pullrequests/pullrequest_show.html:78 +#: rhodecode/templates/changeset/changeset.html:121 +#: rhodecode/templates/compare/compare_diff.html:42 +#: rhodecode/templates/pullrequests/pullrequest_show.html:115 #, 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 +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 +msgid "Showing a huge diff might take some time and resources" +msgstr "巨大な差分の表示はすこし時間とリソースがかかる場合があります" + +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 +msgid "Show full diff" +msgstr "すべての差分を表示" + +#: rhodecode/templates/changeset/changeset_file_comment.html:30 +#, python-format +msgid "Status change on pull request #%s" +msgstr "プルリクエスト #%s のステータスを変更" + +#: rhodecode/templates/changeset/changeset_file_comment.html:32 +#, python-format +msgid "Comment on pull request #%s" +msgstr "プルリクエストにコメント #%s" + +#: rhodecode/templates/changeset/changeset_file_comment.html:57 msgid "Submitting..." msgstr "サブミット中..." -#: rhodecode/templates/changeset/changeset_file_comment.html:45 +#: rhodecode/templates/changeset/changeset_file_comment.html:60 msgid "Commenting on line {1}." msgstr "{1} 行目にコメント" -#: rhodecode/templates/changeset/changeset_file_comment.html:46 -#: rhodecode/templates/changeset/changeset_file_comment.html:121 +#: rhodecode/templates/changeset/changeset_file_comment.html:61 +#: rhodecode/templates/changeset/changeset_file_comment.html:139 #, python-format msgid "Comments parsed using %s syntax with %s support." msgstr "コメントには %s 構文 ( %s サポートつき ) が利用出来ます" -#: rhodecode/templates/changeset/changeset_file_comment.html:48 -#: rhodecode/templates/changeset/changeset_file_comment.html:123 +#: rhodecode/templates/changeset/changeset_file_comment.html:63 +#: rhodecode/templates/changeset/changeset_file_comment.html:141 msgid "Use @username inside this text to send notification to this RhodeCode user" msgstr "テキスト内で @username を使うと、この RhodeCode のユーザーに通知を送信します" -#: rhodecode/templates/changeset/changeset_file_comment.html:59 -#: rhodecode/templates/changeset/changeset_file_comment.html:143 +#: rhodecode/templates/changeset/changeset_file_comment.html:74 +#: rhodecode/templates/changeset/changeset_file_comment.html:161 msgid "Comment" msgstr "コメント" -#: rhodecode/templates/changeset/changeset_file_comment.html:60 -#: rhodecode/templates/changeset/changeset_file_comment.html:71 -msgid "Hide" -msgstr "隠す" - -#: rhodecode/templates/changeset/changeset_file_comment.html:67 +#: rhodecode/templates/changeset/changeset_file_comment.html:75 +msgid "Cancel" +msgstr "キャンセル" + +#: rhodecode/templates/changeset/changeset_file_comment.html:82 msgid "You need to be logged in to comment." msgstr "コメントするにはログインが必要です" -#: rhodecode/templates/changeset/changeset_file_comment.html:67 +#: rhodecode/templates/changeset/changeset_file_comment.html:82 msgid "Login now" msgstr "今すぐログインする" -#: rhodecode/templates/changeset/changeset_file_comment.html:118 -msgid "Leave a comment" -msgstr "コメントを残す" - -#: rhodecode/templates/changeset/changeset_file_comment.html:125 -msgid "Check this to change current status of code-review for this changeset" -msgstr "チェックするとチェンジセットの現在のコードレビューステータスを変更出来ます" - -#: rhodecode/templates/changeset/changeset_file_comment.html:125 -msgid "change status" +#: rhodecode/templates/changeset/changeset_file_comment.html:86 +msgid "Hide" +msgstr "隠す" + +#: rhodecode/templates/changeset/changeset_file_comment.html:143 +msgid "Change status" msgstr "ステータスを変更する" -#: rhodecode/templates/changeset/changeset_file_comment.html:145 +#: rhodecode/templates/changeset/changeset_file_comment.html:163 msgid "Comment and close" msgstr "コメントしてクローズ" @@ -3345,116 +3511,138 @@ msgstr "コメントしてクローズ" msgid "%s Changesets" 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/changeset/changeset_range.html:52 msgid "Files affected" msgstr "影響のあるファイル" -#: rhodecode/templates/changeset/diff_block.html:19 -msgid "show full diff for this file" -msgstr "このファイルの全差分を表示" - -#: rhodecode/templates/changeset/diff_block.html:27 -msgid "show inline comments" +#: rhodecode/templates/changeset/diff_block.html:22 +msgid "Show full diff for this file" +msgstr "このファイルのすべての差分を表示" + +#: rhodecode/templates/changeset/diff_block.html:30 +msgid "Show inline comments" msgstr "インラインコメントを表示" -#: rhodecode/templates/compare/compare_cs.html:5 +#: rhodecode/templates/changeset/diff_block.html:55 +msgid "Show file at latest version in this repo" +msgstr "このリポジトリの最新バージョンのファイルを表示" + +#: rhodecode/templates/changeset/diff_block.html:56 +msgid "Show file at initial version in this repo" +msgstr "このリポジトリの初期バージョンのファイルを表示" + +#: rhodecode/templates/compare/compare_cs.html:4 msgid "No changesets" msgstr "チェンジセットはありません" -#: rhodecode/templates/compare/compare_diff.html:37 -#: rhodecode/templates/pullrequests/pullrequest_show.html:69 +#: rhodecode/templates/compare/compare_cs.html:32 +msgid "Ancestor" +msgstr "祖先" + +#: rhodecode/templates/compare/compare_diff.html:5 +#, python-format +msgid "%s Compare" +msgstr "%s 比較" + +#: rhodecode/templates/compare/compare_diff.html:9 +msgid "Compare revisions" +msgstr "リビジョンの比較" + +#: rhodecode/templates/compare/compare_diff.html:33 +#: rhodecode/templates/pullrequests/pullrequest_show.html:106 #, 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 +#: rhodecode/templates/compare/compare_diff.html:48 +#: rhodecode/templates/pullrequests/pullrequest_show.html:121 msgid "No files" msgstr "ファイルはありません" -#: 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 "フォーク" - -#: rhodecode/templates/data_table/_dt_elements.html:60 -#: rhodecode/templates/journal/journal.html:89 -#: rhodecode/templates/summary/summary.html:77 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +msgid "confirm to show potentially huge diff" +msgstr "巨大な差分の可能性がありますが表示しますか?" + +#: rhodecode/templates/data_table/_dt_elements.html:54 +#: rhodecode/templates/summary/summary.html:69 msgid "Mercurial repository" msgstr "Mercurialリポジトリ" -#: rhodecode/templates/data_table/_dt_elements.html:62 -#: rhodecode/templates/journal/journal.html:91 -#: rhodecode/templates/summary/summary.html:80 +#: rhodecode/templates/data_table/_dt_elements.html:56 +#: rhodecode/templates/summary/summary.html:72 msgid "Git repository" msgstr "Gitリポジトリ" -#: rhodecode/templates/data_table/_dt_elements.html:69 -#: rhodecode/templates/journal/journal.html:97 -#: rhodecode/templates/summary/summary.html:87 -msgid "public repository" -msgstr "公開リポジトリ" - -#: rhodecode/templates/data_table/_dt_elements.html:80 -#: rhodecode/templates/summary/summary.html:96 -#: rhodecode/templates/summary/summary.html:97 -msgid "Fork of" -msgstr "フォーク元: " - -#: rhodecode/templates/data_table/_dt_elements.html:94 +#: rhodecode/templates/data_table/_dt_elements.html:74 +#, python-format +msgid "Fork of %s" +msgstr "%s のフォーク" + +#: rhodecode/templates/data_table/_dt_elements.html:88 msgid "No changesets yet" msgstr "まだチェンジセットがありません" -#: rhodecode/templates/data_table/_dt_elements.html:101 -#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:95 +#: rhodecode/templates/data_table/_dt_elements.html:97 #, 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 +#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:105 #, 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 repository: %s" +msgstr "このリポジトリを削除しますか? : %s" + +#: rhodecode/templates/data_table/_dt_elements.html:131 +#, python-format msgid "Confirm to delete this user: %s" msgstr "このユーザーを本当に削除してよろしいですか?: %s" -#: rhodecode/templates/email_templates/changeset_comment.html:10 -msgid "New status$" -msgstr "新しいステータス$" +#: rhodecode/templates/email_templates/changeset_comment.html:9 +#: rhodecode/templates/email_templates/pull_request_comment.html:15 +msgid "New status" +msgstr "新しいステータス" + +#: rhodecode/templates/email_templates/changeset_comment.html:11 +#: rhodecode/templates/email_templates/pull_request_comment.html:9 +msgid "View this comment here" +msgstr "このコメントを閲覧する" + +#: rhodecode/templates/email_templates/changeset_comment.html:14 +msgid "Repo" +msgstr "リポジトリ" + +#: rhodecode/templates/email_templates/changeset_comment.html:16 +msgid "desc" +msgstr "説明" #: rhodecode/templates/email_templates/main.html:8 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 +#, python-format +msgid "Hello %s" +msgstr "こんにちは %s" + +#: rhodecode/templates/email_templates/password_reset.html:5 msgid "We received a request to create a new password for your account." msgstr "あなたのアカウントの新しいパスワードの生成リクエストを受け取りました。" -#: rhodecode/templates/email_templates/password_reset.html:8 +#: rhodecode/templates/email_templates/password_reset.html:6 msgid "You can generate it by clicking following URL" msgstr "下のURLをクリックすることで再生成が行えます。" -#: rhodecode/templates/email_templates/password_reset.html:12 -msgid "If you didn't request new password please ignore this email." +#: rhodecode/templates/email_templates/password_reset.html:11 +msgid "If you did not request new password please ignore this email." msgstr "新しいパスワードのリクエストをしていない場合は、このメールを無視して下さい。" #: rhodecode/templates/email_templates/pull_request.html:4 @@ -3465,34 +3653,29 @@ msgid "" msgstr "ユーザ %s がリポジトリ %s で新しいプルリクエストを作成しました。変更をレビューしてください。" #: rhodecode/templates/email_templates/pull_request.html:5 -msgid "title" -msgstr "タイトル" +msgid "View this pull request here" +msgstr "このプルリクエストを閲覧する" #: rhodecode/templates/email_templates/pull_request.html:6 -#: rhodecode/templates/pullrequests/pullrequest.html:115 +msgid "title" +msgstr "タイトル" + +#: rhodecode/templates/email_templates/pull_request.html:7 msgid "description" msgstr "説明" -#: rhodecode/templates/email_templates/pull_request.html:11 +#: rhodecode/templates/email_templates/pull_request.html:12 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 +#: rhodecode/templates/email_templates/pull_request_comment.html:3 #, python-format -msgid "User %s commented on pull request #%s for repository %s" -msgstr "ユーザ %s がプルリクエスト #%s (リポジトリ %s) にコメントしました。" - -#: 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 "このコメントを閲覧する" +msgid "Pull request #%s for repository %s" +msgstr "プルリクエスト #%s (リポジトリ %s)" + +#: rhodecode/templates/email_templates/pull_request_comment.html:13 +msgid "Closing pull request with status" +msgstr "このステータスでプルリクエストをクローズ" #: rhodecode/templates/email_templates/registration.html:4 msgid "A new user have registered in RhodeCode" @@ -3502,109 +3685,107 @@ msgstr "新しいユーザがRhodeCodeへ登録しました" msgid "View this user here" msgstr "このユーザを閲覧する" -#: rhodecode/templates/errors/error_document.html:46 +#: rhodecode/templates/errors/error_document.html:55 #, python-format msgid "You will be redirected to %s in %s seconds" msgstr "" #: rhodecode/templates/files/file_diff.html:4 #, python-format -msgid "%s File diff" +msgid "%s File Diff" msgstr "%s ファイル差分" -#: rhodecode/templates/files/file_diff.html:12 +#: rhodecode/templates/files/file_diff.html:8 msgid "File diff" msgstr "ファイル差分" #: rhodecode/templates/files/files.html:4 -#: rhodecode/templates/files/files.html:74 +#: rhodecode/templates/files/files.html:76 #, python-format -msgid "%s files" +msgid "%s Files" msgstr "%s ファイル" -#: rhodecode/templates/files/files.html:12 -#: rhodecode/templates/summary/summary.html:351 -msgid "files" -msgstr "ファイル" +#: rhodecode/templates/files/files.html:30 +#: rhodecode/templates/files/files_add.html:31 +#: rhodecode/templates/files/files_edit.html:31 +#: rhodecode/templates/shortlog/shortlog_data.html:9 +msgid "Branch" +msgstr "ブランチ" #: rhodecode/templates/files/files_add.html:4 -#: rhodecode/templates/files/files_edit.html:4 #, python-format -msgid "%s Edit file" -msgstr "" +msgid "%s Files Add" +msgstr "%s ファイルを追加" #: rhodecode/templates/files/files_add.html:19 -msgid "add file" +msgid "Add file" msgstr "ファイルを追加" -#: rhodecode/templates/files/files_add.html:40 +#: rhodecode/templates/files/files_add.html:38 +#: rhodecode/templates/files/files_browser.html:31 +#: rhodecode/templates/shortlog/shortlog_data.html:78 msgid "Add new file" msgstr "新しいファイルを追加" -#: rhodecode/templates/files/files_add.html:45 +#: rhodecode/templates/files/files_add.html:43 msgid "File Name" msgstr "ファイル名" -#: rhodecode/templates/files/files_add.html:49 -#: rhodecode/templates/files/files_add.html:58 +#: rhodecode/templates/files/files_add.html:47 +#: rhodecode/templates/files/files_add.html:56 msgid "or" msgstr "または" -#: rhodecode/templates/files/files_add.html:49 -#: rhodecode/templates/files/files_add.html:54 +#: rhodecode/templates/files/files_add.html:47 +#: rhodecode/templates/files/files_add.html:52 msgid "Upload file" msgstr "アップロード" -#: rhodecode/templates/files/files_add.html:58 +#: rhodecode/templates/files/files_add.html:56 msgid "Create new file" msgstr "新しいファイルを作成" -#: rhodecode/templates/files/files_add.html:63 -#: rhodecode/templates/files/files_edit.html:39 +#: rhodecode/templates/files/files_add.html:61 +#: rhodecode/templates/files/files_edit.html:37 #: rhodecode/templates/files/files_ypjax.html:3 msgid "Location" msgstr "場所" -#: rhodecode/templates/files/files_add.html:67 +#: rhodecode/templates/files/files_add.html:65 msgid "use / to separate directories" msgstr "ディレクトリの区切りには / を使います" -#: rhodecode/templates/files/files_add.html:77 -#: rhodecode/templates/files/files_edit.html:63 +#: rhodecode/templates/files/files_add.html:75 +#: rhodecode/templates/files/files_edit.html:61 #: rhodecode/templates/shortlog/shortlog_data.html:6 -msgid "commit message" +msgid "Commit message" msgstr "コミットメッセージ" -#: rhodecode/templates/files/files_add.html:81 -#: rhodecode/templates/files/files_edit.html:67 +#: rhodecode/templates/files/files_add.html:79 +#: rhodecode/templates/files/files_edit.html:65 msgid "Commit changes" msgstr "変更をコミット" #: rhodecode/templates/files/files_browser.html:13 -msgid "view" +msgid "View" msgstr "閲覧" #: rhodecode/templates/files/files_browser.html:14 -msgid "previous revision" +msgid "Previous revision" msgstr "前のリビジョン" #: rhodecode/templates/files/files_browser.html:16 -msgid "next revision" +msgid "Next revision" msgstr "次のリビジョン" #: rhodecode/templates/files/files_browser.html:23 -msgid "follow current branch" +msgid "Follow current branch" msgstr "このブランチで追跡" #: rhodecode/templates/files/files_browser.html:27 -msgid "search file list" +msgid "Search file list" msgstr "ファイル一覧を検索" -#: rhodecode/templates/files/files_browser.html:31 -#: rhodecode/templates/shortlog/shortlog_data.html:78 -msgid "add new file" -msgstr "新しいファイルを追加" - #: rhodecode/templates/files/files_browser.html:35 msgid "Loading file list..." msgstr "ファイル一覧を読み込み中..." @@ -3626,34 +3807,39 @@ msgid "Last modified" msgstr "最終更新日" #: rhodecode/templates/files/files_browser.html:52 -msgid "Last commiter" +msgid "Last committer" msgstr "最後の作成者" +#: rhodecode/templates/files/files_edit.html:4 +#, python-format +msgid "%s Files Edit" +msgstr "%s ファイルを編集" + #: rhodecode/templates/files/files_edit.html:19 -msgid "edit file" +msgid "Edit file" msgstr "ファイルを編集" +#: rhodecode/templates/files/files_edit.html:47 +#: rhodecode/templates/files/files_source.html:23 +msgid "Show annotation" +msgstr "アノテーションを表示" + +#: rhodecode/templates/files/files_edit.html:48 +#: rhodecode/templates/files/files_source.html:25 +#: rhodecode/templates/files/files_source.html:55 +msgid "Show as raw" +msgstr "元のファイルを表示" + #: rhodecode/templates/files/files_edit.html:49 -#: rhodecode/templates/files/files_source.html:23 -msgid "show annotation" -msgstr "アノテーションを表示" - -#: 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 "元のファイルを表示" - -#: rhodecode/templates/files/files_edit.html:51 #: rhodecode/templates/files/files_source.html:26 -msgid "download as raw" +msgid "Download as raw" msgstr "元のファイルをダウンロード" -#: rhodecode/templates/files/files_edit.html:54 -msgid "source" +#: rhodecode/templates/files/files_edit.html:52 +msgid "Source" msgstr "ソース" -#: rhodecode/templates/files/files_edit.html:59 +#: rhodecode/templates/files/files_edit.html:57 msgid "Editing file" msgstr "ファイルを編集" @@ -3662,15 +3848,15 @@ msgid "History" msgstr "変更履歴" #: rhodecode/templates/files/files_history_box.html:9 -msgid "diff to revision" +msgid "Diff to revision" msgstr "このリビジョンの差分を見る" #: rhodecode/templates/files/files_history_box.html:10 -msgid "show at revision" +msgid "Show at revision" msgstr "このリビジョンを見る" #: rhodecode/templates/files/files_history_box.html:11 -msgid "show full history" +msgid "Show full history" msgstr "すべての履歴を表示" #: rhodecode/templates/files/files_history_box.html:16 @@ -3684,15 +3870,28 @@ msgid "Load file history" msgstr "ファイルの履歴を読み込む" #: rhodecode/templates/files/files_source.html:21 -msgid "show source" +msgid "Show source" msgstr "ソースを表示" -#: rhodecode/templates/files/files_source.html:44 +#: rhodecode/templates/files/files_source.html:29 +#, python-format +msgid "Edit on branch:%s" +msgstr "ブランチ:%s で編集" + +#: rhodecode/templates/files/files_source.html:31 +msgid "Edit on branch:?" +msgstr "ブランチ:? で編集" + +#: rhodecode/templates/files/files_source.html:31 +msgid "Editing files allowed only when on branch head revision" +msgstr "ファイル編集はブランチのヘッドリビジョンでのみ許可されています" + +#: rhodecode/templates/files/files_source.html:46 #, python-format msgid "Binary file (%s)" msgstr "バイナリファイル (%s)" -#: rhodecode/templates/files/files_source.html:53 +#: rhodecode/templates/files/files_source.html:55 msgid "File is too big to display" msgstr "表示するには大きすぎるファイルです" @@ -3713,8 +3912,10 @@ msgstr "そのパスにはファイルはありません" msgid "%s Followers" msgstr "%s フォロワー" -#: rhodecode/templates/followers/followers.html:13 -msgid "followers" +#: rhodecode/templates/followers/followers.html:9 +#: rhodecode/templates/summary/summary.html:183 +#: rhodecode/templates/summary/summary.html:184 +msgid "Followers" msgstr "フォロワー" #: rhodecode/templates/followers/followers_data.html:12 @@ -3726,32 +3927,32 @@ msgstr "フォロー開始日 -" msgid "%s Fork" msgstr "%s フォーク" -#: rhodecode/templates/forks/fork.html:31 +#: rhodecode/templates/forks/fork.html:28 msgid "Fork name" msgstr "フォーク名" -#: rhodecode/templates/forks/fork.html:68 +#: rhodecode/templates/forks/fork.html:65 msgid "Private" msgstr "非公開" -#: rhodecode/templates/forks/fork.html:77 +#: rhodecode/templates/forks/fork.html:74 msgid "Copy permissions" msgstr "権限のコピー" -#: rhodecode/templates/forks/fork.html:81 +#: rhodecode/templates/forks/fork.html:78 msgid "Copy permissions from forked repository" msgstr "フォーク元リポジトリから権限をコピーします" -#: rhodecode/templates/forks/fork.html:86 +#: rhodecode/templates/forks/fork.html:84 msgid "Update after clone" msgstr "クローン後にupdateする" -#: rhodecode/templates/forks/fork.html:90 +#: rhodecode/templates/forks/fork.html:88 msgid "Checkout source after making a clone" msgstr "クローンした後にソースをチェックアウトします" -#: rhodecode/templates/forks/fork.html:94 -msgid "fork this repository" +#: rhodecode/templates/forks/fork.html:93 +msgid "Fork this repository" msgstr "このリポジトリをフォーク" #: rhodecode/templates/forks/forks.html:5 @@ -3759,12 +3960,14 @@ msgstr "このリポジトリをフォーク" msgid "%s Forks" msgstr "%s フォーク" -#: rhodecode/templates/forks/forks.html:13 -msgid "forks" +#: rhodecode/templates/forks/forks.html:9 +#: rhodecode/templates/summary/summary.html:189 +#: rhodecode/templates/summary/summary.html:190 +msgid "Forks" msgstr "フォーク" #: rhodecode/templates/forks/forks_data.html:17 -msgid "forked" +msgid "Forked" msgstr "フォークしました" #: rhodecode/templates/forks/forks_data.html:42 @@ -3780,44 +3983,27 @@ msgid "RSS journal feed" msgstr "RSS ジャーナルフィード" #: rhodecode/templates/journal/journal.html:32 -#: rhodecode/templates/pullrequests/pullrequest.html:55 msgid "Refresh" msgstr "更新" #: rhodecode/templates/journal/journal.html:35 #: rhodecode/templates/journal/public_journal.html:24 -msgid "RSS feed" -msgstr "RSSフィード" - -#: rhodecode/templates/journal/journal.html:38 -#: rhodecode/templates/journal/public_journal.html:27 msgid "ATOM feed" msgstr "ATOMフィード" -#: rhodecode/templates/journal/journal.html:49 +#: rhodecode/templates/journal/journal.html:51 msgid "Watched" msgstr "ウォッチ" -#: rhodecode/templates/journal/journal.html:54 -msgid "ADD" -msgstr "追加" - -#: rhodecode/templates/journal/journal.html:77 -msgid "following user" -msgstr "フォローしているユーザー" - -#: rhodecode/templates/journal/journal.html:77 -msgid "user" -msgstr "ユーザー" - -#: rhodecode/templates/journal/journal.html:110 -msgid "You are not following any users or repositories" -msgstr "まだどのユーザーもリポジトリもフォローしていません" - #: rhodecode/templates/journal/journal_data.html:55 msgid "No entries yet" msgstr "まだエントリがありません" +#: rhodecode/templates/journal/public_journal.html:4 +#: rhodecode/templates/journal/public_journal.html:21 +msgid "Public Journal" +msgstr "公開ジャーナル" + #: rhodecode/templates/journal/public_journal.html:13 msgid "ATOM public journal feed" msgstr "ATOM 公開ジャーナルフィード" @@ -3826,146 +4012,125 @@ msgstr "ATOM 公開ジャーナルフィード" msgid "RSS public journal feed" msgstr "RSS 公開ジャーナルフィード" -#: rhodecode/templates/journal/public_journal.html:21 -msgid "Public Journal" -msgstr "公開ジャーナル" - #: rhodecode/templates/pullrequests/pullrequest.html:4 -#: rhodecode/templates/pullrequests/pullrequest.html:12 +#: rhodecode/templates/pullrequests/pullrequest.html:8 msgid "New pull request" msgstr "新しいプルリクエスト" -#: rhodecode/templates/pullrequests/pullrequest.html:54 -msgid "refresh overview" -msgstr "概要の更新" - -#: rhodecode/templates/pullrequests/pullrequest.html:66 +#: rhodecode/templates/pullrequests/pullrequest.html:52 msgid "Detailed compare view" msgstr "比較ビュー詳細" -#: rhodecode/templates/pullrequests/pullrequest.html:70 -#: rhodecode/templates/pullrequests/pullrequest_show.html:100 +#: rhodecode/templates/pullrequests/pullrequest.html:56 +#: rhodecode/templates/pullrequests/pullrequest_show.html:137 msgid "Pull request reviewers" msgstr "プルリクエストレビュアー" -#: rhodecode/templates/pullrequests/pullrequest.html:79 -#: rhodecode/templates/pullrequests/pullrequest_show.html:112 +#: rhodecode/templates/pullrequests/pullrequest.html:65 +#: rhodecode/templates/pullrequests/pullrequest_show.html:149 msgid "owner" msgstr "所有者" -#: rhodecode/templates/pullrequests/pullrequest.html:91 -#: rhodecode/templates/pullrequests/pullrequest_show.html:127 +#: rhodecode/templates/pullrequests/pullrequest.html:77 msgid "Add reviewer to this pull request." msgstr "このプルリクエストにレビュアーを追加" -#: rhodecode/templates/pullrequests/pullrequest.html:97 +#: rhodecode/templates/pullrequests/pullrequest.html:83 msgid "Create new pull request" msgstr "新しいプルリクエストを作成" -#: rhodecode/templates/pullrequests/pullrequest.html:106 +#: rhodecode/templates/pullrequests/pullrequest.html:92 +#: rhodecode/templates/pullrequests/pullrequest_data.html:14 #: rhodecode/templates/pullrequests/pullrequest_show.html:25 -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:33 msgid "Title" msgstr "タイトル" -#: rhodecode/templates/pullrequests/pullrequest.html:123 +#: rhodecode/templates/pullrequests/pullrequest.html:109 msgid "Send pull request" msgstr "プルリクエストを送る" -#: rhodecode/templates/pullrequests/pullrequest_show.html:23 -#, python-format -msgid "Closed %s" -msgstr "%s にクローズ" - -#: rhodecode/templates/pullrequests/pullrequest_show.html:23 +#: rhodecode/templates/pullrequests/pullrequest_show.html:4 #, python-format -msgid "with status %s" -msgstr "ステータス: %s" - -#: rhodecode/templates/pullrequests/pullrequest_show.html:31 -msgid "Status" -msgstr "ステータス" - -#: rhodecode/templates/pullrequests/pullrequest_show.html:36 +msgid "%s Pull Request #%s" +msgstr "%s プルリクエスト #%s" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:35 +msgid "Review status" +msgstr "レビューステータス" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:40 msgid "Pull request status" msgstr "プルリクエストステータス" -#: rhodecode/templates/pullrequests/pullrequest_show.html:44 +#: rhodecode/templates/pullrequests/pullrequest_show.html:53 msgid "Still not reviewed by" msgstr "未レビュー" -#: rhodecode/templates/pullrequests/pullrequest_show.html:48 +#: rhodecode/templates/pullrequests/pullrequest_show.html:57 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" msgstr[0] "%d レビュアー" -#: rhodecode/templates/pullrequests/pullrequest_show.html:50 -msgid "pull request was reviewed by all reviewers" +#: rhodecode/templates/pullrequests/pullrequest_show.html:59 +msgid "Pull request was reviewed by all reviewers" msgstr "プルリクエストはすべてのレビュアーにレビューされました" -#: rhodecode/templates/pullrequests/pullrequest_show.html:58 +#: rhodecode/templates/pullrequests/pullrequest_show.html:65 +msgid "Origin repository" +msgstr "Originリポジトリ" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:89 msgid "Created on" msgstr "作成日" -#: rhodecode/templates/pullrequests/pullrequest_show.html:65 +#: rhodecode/templates/pullrequests/pullrequest_show.html:102 msgid "Compare view" msgstr "比較ビュー" -#: rhodecode/templates/pullrequests/pullrequest_show.html:112 +#: rhodecode/templates/pullrequests/pullrequest_show.html:149 msgid "reviewer" msgstr "レビュアー" +#: rhodecode/templates/pullrequests/pullrequest_show.html:164 +msgid "Add or remove reviewer to this pull request." +msgstr "このプルリクエストにレビュアーを追加/削除" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:168 +msgid "Save changes" +msgstr "変更を保存" + #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4 -msgid "all pull requests" -msgstr "すべてのプルリクエスト" - -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:12 -msgid "All pull requests" -msgstr "すべてのプルリクエスト" - -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:27 -msgid "Closed" -msgstr "クローズ" +#, python-format +msgid "%s Pull Requests" +msgstr "%s プルリクエスト" #: rhodecode/templates/search/search.html:6 -#, python-format -msgid "Search \"%s\" in repository: %s" -msgstr "\"%s\" を %s リポジトリから検索" +msgid "Search repository" +msgstr "リポジトリから検索" #: rhodecode/templates/search/search.html:8 -#, python-format -msgid "Search \"%s\" in all repositories" -msgstr "\"%s\" を全てのリポジトリから検索" - -#: rhodecode/templates/search/search.html:12 -#: rhodecode/templates/search/search.html:32 -#, python-format -msgid "Search in repository: %s" -msgstr "%s リポジトリから検索" - -#: rhodecode/templates/search/search.html:14 -#: rhodecode/templates/search/search.html:34 +#: rhodecode/templates/search/search.html:16 msgid "Search in all repositories" msgstr "全てのリポジトリから検索" -#: rhodecode/templates/search/search.html:48 +#: rhodecode/templates/search/search.html:50 msgid "Search term" msgstr "検索キーワード" -#: rhodecode/templates/search/search.html:60 +#: rhodecode/templates/search/search.html:62 msgid "Search in" msgstr "検索対象" -#: rhodecode/templates/search/search.html:63 +#: rhodecode/templates/search/search.html:65 msgid "File contents" msgstr "ファイル内容" -#: rhodecode/templates/search/search.html:64 +#: rhodecode/templates/search/search.html:66 msgid "Commit messages" msgstr "コミットメッセージ" -#: rhodecode/templates/search/search.html:65 +#: rhodecode/templates/search/search.html:67 msgid "File names" msgstr "ファイル名" @@ -3975,40 +4140,24 @@ msgstr "ファイル名" msgid "Permission denied" msgstr "権限がありません" -#: rhodecode/templates/settings/repo_settings.html:5 -#, python-format -msgid "%s Settings" -msgstr "%s 設定" - -#: rhodecode/templates/settings/repo_settings.html:102 -msgid "Delete repository" -msgstr "リポジトリを削除" - -#: rhodecode/templates/settings/repo_settings.html:109 -msgid "Remove repo" -msgstr "削除" - #: rhodecode/templates/shortlog/shortlog.html:5 #, python-format -msgid "%s Shortlog" -msgstr "%s 短いログ" - +msgid "%s Lightweight Changelog" +msgstr "%s 軽量履歴" + +#: rhodecode/templates/shortlog/shortlog.html:11 #: 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 "リビジョン" +msgid "Lightweight Changelog" +msgstr "軽量履歴" #: rhodecode/templates/shortlog/shortlog_data.html:7 -msgid "age" +msgid "Age" msgstr "経過時間" -#: rhodecode/templates/shortlog/shortlog_data.html:8 -msgid "author" -msgstr "作成者" +#: rhodecode/templates/shortlog/shortlog_data.html:20 +#, python-format +msgid "Click to open associated pull request #%s" +msgstr "関連するプルリクエストを開く #%s" #: rhodecode/templates/shortlog/shortlog_data.html:75 msgid "Add or upload files directly via RhodeCode" @@ -4027,156 +4176,165 @@ msgstr "存在するリポジトリをプッシュ" msgid "%s Summary" msgstr "%s 要約" -#: rhodecode/templates/summary/summary.html:12 -msgid "summary" -msgstr "要約" - -#: rhodecode/templates/summary/summary.html:20 +#: rhodecode/templates/summary/summary.html:16 #, python-format -msgid "repo %s ATOM feed" -msgstr "リポジトリ %s ATOM フィード" - -#: rhodecode/templates/summary/summary.html:21 +msgid "%s ATOM feed" +msgstr "%s ATOM フィード" + +#: rhodecode/templates/summary/summary.html:17 #, python-format -msgid "repo %s RSS feed" -msgstr "リポジトリ %s RSS フィード" - -#: rhodecode/templates/summary/summary.html:49 -#: rhodecode/templates/summary/summary.html:52 -msgid "ATOM" -msgstr "ATOM" - -#: rhodecode/templates/summary/summary.html:70 +msgid "%s RSS feed" +msgstr "%s RSS フィード" + +#: rhodecode/templates/summary/summary.html:62 #, python-format msgid "Repository locked by %s" msgstr "リポジトリは %s によってロックされました" -#: rhodecode/templates/summary/summary.html:72 +#: rhodecode/templates/summary/summary.html:64 msgid "Repository unlocked" msgstr "リポジトリはロックされていません" -#: rhodecode/templates/summary/summary.html:91 +#: rhodecode/templates/summary/summary.html:83 #, python-format msgid "Non changable ID %s" msgstr "変更不能ID %s" -#: rhodecode/templates/summary/summary.html:96 -msgid "public" +#: rhodecode/templates/summary/summary.html:88 +msgid "Public" msgstr "公開" -#: rhodecode/templates/summary/summary.html:104 -msgid "remote clone" +#: rhodecode/templates/summary/summary.html:88 +#: rhodecode/templates/summary/summary.html:89 +msgid "Fork of" +msgstr "フォーク元: " + +#: rhodecode/templates/summary/summary.html:96 +msgid "Remote clone" msgstr "リモートクローン" -#: rhodecode/templates/summary/summary.html:125 +#: rhodecode/templates/summary/summary.html:117 msgid "Contact" msgstr "コンタクト" -#: rhodecode/templates/summary/summary.html:139 +#: rhodecode/templates/summary/summary.html:131 msgid "Clone url" msgstr "クローンURL" -#: rhodecode/templates/summary/summary.html:142 +#: rhodecode/templates/summary/summary.html:136 msgid "Show by Name" msgstr "名前で表示" -#: rhodecode/templates/summary/summary.html:143 +#: rhodecode/templates/summary/summary.html:137 msgid "Show by ID" msgstr "IDで表示" +#: rhodecode/templates/summary/summary.html:143 +msgid "Trending files" +msgstr "トレンドファイル" + #: rhodecode/templates/summary/summary.html:151 -msgid "Trending files" -msgstr "トレンドファイル" +#: rhodecode/templates/summary/summary.html:167 +#: rhodecode/templates/summary/summary.html:232 +msgid "enable" +msgstr "有効にする" #: 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:167 msgid "Download" msgstr "ダウンロード" -#: rhodecode/templates/summary/summary.html:171 +#: rhodecode/templates/summary/summary.html:163 msgid "There are no downloads yet" msgstr "まだダウンロードがありません" -#: rhodecode/templates/summary/summary.html:173 +#: rhodecode/templates/summary/summary.html:165 msgid "Downloads are disabled for this repository" msgstr "このリポジトリのダウンロードは無効化されています" -#: rhodecode/templates/summary/summary.html:179 +#: rhodecode/templates/summary/summary.html:171 msgid "Download as zip" msgstr "ZIPとしてダウンロード" -#: rhodecode/templates/summary/summary.html:182 +#: rhodecode/templates/summary/summary.html:174 msgid "Check this to download archive with subrepos" msgstr "チェックするとダウンロードアーカイブにサブリポジトリが含まれます" -#: rhodecode/templates/summary/summary.html:182 +#: rhodecode/templates/summary/summary.html:174 msgid "with subrepos" msgstr "サブリポジトリを含む" -#: rhodecode/templates/summary/summary.html:195 +#: rhodecode/templates/summary/summary.html:197 +msgid "Repository Size" +msgstr "リポジトリサイズ" + +#: rhodecode/templates/summary/summary.html:204 +#: rhodecode/templates/summary/summary.html:206 +msgid "Feed" +msgstr "フィード" + +#: rhodecode/templates/summary/summary.html:224 msgid "Commit activity by day / author" msgstr "コミットアクティビティ 日/作成者" -#: rhodecode/templates/summary/summary.html:206 +#: rhodecode/templates/summary/summary.html:235 msgid "Stats gathered: " msgstr "収集した統計情報: " -#: rhodecode/templates/summary/summary.html:227 -msgid "Shortlog" -msgstr "ログ" - -#: rhodecode/templates/summary/summary.html:229 +#: rhodecode/templates/summary/summary.html:256 +msgid "Latest changes" +msgstr "最近の変更点" + +#: rhodecode/templates/summary/summary.html:258 msgid "Quick start" msgstr "クイックスタート" -#: rhodecode/templates/summary/summary.html:243 +#: rhodecode/templates/summary/summary.html:272 #, python-format msgid "Readme file at revision '%s'" msgstr "リビジョン '%s' のReadmeファイル" -#: rhodecode/templates/summary/summary.html:246 +#: rhodecode/templates/summary/summary.html:275 msgid "Permalink to this readme" msgstr "パーマリンク" -#: rhodecode/templates/summary/summary.html:304 +#: rhodecode/templates/summary/summary.html:333 #, python-format msgid "Download %s as %s" msgstr "%s を %sとしてダウンロード" -#: rhodecode/templates/summary/summary.html:661 +#: rhodecode/templates/summary/summary.html:380 +msgid "files" +msgstr "ファイル" + +#: rhodecode/templates/summary/summary.html:690 msgid "commits" msgstr "コミット" -#: rhodecode/templates/summary/summary.html:662 +#: rhodecode/templates/summary/summary.html:691 msgid "files added" msgstr "追加されたファイル" -#: rhodecode/templates/summary/summary.html:663 +#: rhodecode/templates/summary/summary.html:692 msgid "files changed" msgstr "変更されたファイル" -#: rhodecode/templates/summary/summary.html:664 +#: rhodecode/templates/summary/summary.html:693 msgid "files removed" msgstr "削除されたファイル" -#: rhodecode/templates/summary/summary.html:667 +#: rhodecode/templates/summary/summary.html:695 msgid "commit" msgstr "コミット" -#: rhodecode/templates/summary/summary.html:668 +#: rhodecode/templates/summary/summary.html:696 msgid "file added" msgstr "追加されたファイル" -#: rhodecode/templates/summary/summary.html:669 +#: rhodecode/templates/summary/summary.html:697 msgid "file changed" msgstr "変更されたファイル" -#: rhodecode/templates/summary/summary.html:670 +#: rhodecode/templates/summary/summary.html:698 msgid "file removed" msgstr "削除されたファイル" @@ -4185,27 +4343,7 @@ msgstr "削除されたファイル" msgid "%s Tags" msgstr "%s タグ" -#: rhodecode/templates/tags/tags.html:29 +#: rhodecode/templates/tags/tags.html:26 msgid "Compare tags" msgstr "タグの比較" -#~ msgid "" -#~ "%s repository is not mapped to db" -#~ " perhaps it was created or renamed" -#~ " from the file system please run " -#~ "the application again in order to " -#~ "rescan repositories" -#~ msgstr "" -#~ "%s " -#~ "リポジトリはDB内に見つかりませんでした。おそらくファイルシステム上で作られたか名前が変更されたためです。リポジトリをもう一度チェックするためにアプリケーションを立ち上げ直してください。" - -#~ 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 " -#~ "リポジトリはDB内に見つかりませんでした。おそらくファイルシステム上で作られたか名前が変更されたためです。リポジトリをもう一度チェックするためにアプリケーションを立ち上げ直してください。" - diff --git a/rhodecode/i18n/pl/LC_MESSAGES/rhodecode.mo b/rhodecode/i18n/pl/LC_MESSAGES/rhodecode.mo index 4cb8fac01d597bd258b2380292e766170f82539e..679e54f22b20b23917dfb7665fcbc2cd9204d90c GIT binary patch literal 46441 zc$~d`3!GKeb@xe{YV&R$ZQ49fO;OO95d=X-Kn7-j0p{U67zIJk+pkai zxffAE5DmsBJ`fda#HcYUpsh8gNh*`{t4*3Vec2>!9&OqrZS&>THffuFYpwq}uRC`D zP5bft&E4nh=h|zp_ugmoH*bI4od*58^|glaUP|wKr;+*h-Z_TxCQ9E&>90_FHl@Ex z>2gZnLg@&lzf9>ErQEbi>Dwv2iPB%A^pNI1r}aKh=^H5h8}0Yol)jPDf7SQbo{jXa zl)jnA*Y~q2J)P1;l>QQ>7oCl9)|`$0Hfi}7rKeHqYWwhPjDH=a@1XP^N=-_ipmc)a zq4cekE<6YAS5bNorM;BCi_(8M2j%}w=~)a{i(&jC!_k8JODTOlrCpT1jncjr%-hoP zdJEv$rRj~7{sQB>1^C$Cf_WTn!91U%lt413T7cjGOX(Rrehct_Ml0rjK`YjwqZRco zX$4&4t(bSI72|AgMZedyVtsF-bcoW&D5WVGKWoLj&Tcb|b15C5^n8Yw(gh3;rL;80 zKT|r3(s!MUc1tNek5Y%yHl`a&S5W%Wx#;gLbCJJrF5tK4V!k)b1^fpneI2C_&Bgpb zIv4nPelGC%87=?PT;TDqwEfrS0^i@)e*S~fcT@Vhd6@qP=3%^9l+I)NmtvQ#zZ{Th0UBJxA#vr7u$2!uXkQ z7{5tr=X}tOGaqzRn~(l)n~!#n&&N2=YWk`9nE(HokM;WEe9Zf+^MQ}Q*M9zOKIZ*a zS{$0X@oSWRfYR;-paW+C#@)66?Qd8B_-|c+et&BL;CNEsKd0%REdXA=PN~CuNJQ{K zN{f{K2Dd*S>wolojQ3ZRo=NGypAY4Wtm*GA1YDnA2)O=y zA?W2>3jz0A7Ga+6UxfM#7Xe>u7omJu-|aw z=ie^Ie7>vsZ)=BqJEI->``SStN7@1Br`y5Tf7*`q_|JB%|LZO^j8^8K3$cEK7ovVy z-*;Vzc^$eCa`g`{1pI${A@K80n!a`k=J9JwFz)-8V7{$OFt0`W-n9hu)3*fcI;rhK zZMR+XKePnn-Kp&!Ujlx7W(nZ?*%HXZUtWrJKWi!Is%0ta4=u$!w=6~dv85Pio917w z>Gex7?#-0Ghtm5s|96*SUY}VCdGeP_!SAOnLqGGE0ndw zzs~c~_lK9E|Ht(G$TGnD+uHA^HUG2Au&ys@{#PhHNa;700nV#0!n)i`>2juzivZ7Q z%TeC49OJB^bS=~Oa_EPHly>lXYWdffgPy*<9C-Tia`4aT9gwT<=>QzdH0|p^{VO^E zcd-NYw{`#zAJX!BI)K-QHUC(L;#1SV?7(>c+<|re?+)Paohv}^AE1<`YRslIN9p(q z!28k)@a>mY0MCD|`Twv2^zc1RPg@B-df!T=!<86!5v5xw?V*%VW<0SH@cq+D(ECqU zqQ7@_0csj!+ll!<-w8PX zNc;avC+Owd+Wr^16fa$hmoD@_Tk{un0skwyFpmvg=r^zBTe~1fc53;4ZU0ag*6E1$ z`^hfg?Xz0`)h@vCPukCEtI+S;R$;skuEIPPtpeOjRsnC_s{r@Kt1#Z^D(H{$DvWdM zDy+kSRggPRY5T8IN-S-BXBF&_vsS|{xokE1y?r(CckgQS^WbXq^BAQh%8XB~2K+x= z4Sn~vHGuoDuO=w)!H zx92te;(DypwA-+B-Fxw{AJa7^Dn+XMK%(E~jFR}bKP zOE2hQRxkQn)(bmkLoe)u9lfA~M|x5J6TKMkPkTX!-_myP=|lc}O2?Rv`aq9Q_M!i0 z`hf4x_o1J^?Zf*0Yaj6Yx_KU-E0q30KjwMi#aN$9F2?#^ zaWVR{FUGp~7elVqFUGugUko{N=whtjQy0Uo`^3ed&shWLXTbpATs(mMbpwEJ;{f2u zX}#?OpxbK)us#nDV4a^D0H3@t0Q`MR`+Msk@cJ8r&_inmmA?kD{?`q{PW%X^3wfS{ znBRYEdioH?dFv47`R*aWF?$H*twZSN{2{Evu-12m;GYCTn9qYlSpTQA-lvB^XMZ*X zdi>51@ca5<%;(Huj5mK6@~&eT>$zzd^@3sW^KHX`|JbnlC&QTc*R=i*hM`~IxB+m# zb%V-nN^6vUfKn1o#(@pc$6w!o`Lv8cAFUt3I(}>faC~+I{eEo(^!*bp|CLKnKKByP z+1g7mKkE|kPnFW&q4dZlfY-T{d`C)ez7*^8xl7USzg!ABJbfeJUbqqT+`bWbT&`)~ zM$Bi6rn!xf6B8SupReDDc}#5tKL36r*8K+?)sEN%K7Eg-ZJR(h9h*>Zaue`;%_gkF zeVZU3AK!%a`s+=g=bvl>-hS~i%)g(~UT&}Nzk32M3-I{-7VzQk zZ9zX@*njTv@5q7g7w3StTn_8DEeATeGY9-UtmV(?`{#3j@9R0N?`e6Y@5}>^Gc@hUqumvG z^cUuVx7~T*^+S2^)6IFvzXN&T|G_-g?a@5od{*eg@7gG9K#;2Bdj)CvijsdTm$3UM& zZFiOSyK@Zi-Y^C@?$mJ~7=vDTRO@|O+kI{f>+(lqu-m?<UZ9F^_{T?8A?_!1vc(;Q2=` z=J6&E`R90mZ!ddEom8J&f~=hxPvx5Bg?F8S7OjLtouihCFa9zoL{>yYY<>^Sy8@ z=-%53dboEh=R^Z`hTQUBds-TniRMifuqW}3-%xh^C>w2-)bE?oo zK^6EtTE%?6tmXf#?f+fdzjhno`PFTZ11;My?pn>ibQ|#EQF@fpySG8#t*wDRw$`w& z_tlX9Vhwciy_)(5b)swu6q}c@^yb&a0q*_g#hd zFJ1-u`}|da^GjE$p1KO-e(x&G?=?F>A7|_Uzqakbe3tD%y;VEFkC*HK|2SIjaV>v- z2j=}pntp8u;QrAL!1J1`A=ejQjr`?TgHC#`#`MLSV%Xeau!c4D3Uo$zaR>H8x)u@2Af1l~TO?=S5H zUjJk#@c)gSu+#r#C)TTH7uGqy3;b2z1v^Pk# zab9yB_~h-^VZ6E5p`Rt!VO23&)-=?1dv*i9+jj%5yS3e;ls-r4le@8Q<9o0^H&VKW(qntD|MH)E zu>Nh=>p0iLzO=7LKS!^JoP6$j(D6^N2cBNL7kGN}UeL>#dm$ed@749&3wZp!nD6er zy05fX_95{3p$~zM zKm8$$|E&)J-XCcC`h9@U+=qFeyAOD~U?2KlsqY*10Z-OG$jQn+(A}N;fR96(9^MDM zerzA`_sM-2_w)N8=U(0idHQ3`fA>wQCvL(x^KU}G%WgtHYi?4%=qAkPO09qUP3Y&) zO&I6+O<12ly9sc9TkHMwCh+s=A4dH%Ka76YeHi7NKMXpa)O7cUL8lLB`A78q=?`PQ zpZzf8*h?RVzIs{fz4m74=eOPrep+_3#z$|4f4=`_-7nJg-M6Tna0}XRxdn7kxCQg5 z+=6<0Z^5`zx2Roki~1Y4VBY_s?{B;n@W1O;ywAH8{Vu%~{IvE~%p%EiG zD=7WYtr+LKw*v0h+=ld>w*miW-3B^ab{paam)(XqR`oW}g<-ftd2{q_UE%f$zP$IX=XQ)(Z;I{fwl(Eq<30KDz@ zBL3KOFYx;5do{jwFV^=5`u-Drf8#-n|Mr8rPjpb@s|R%-f>JWojr>92_b(0tj&B~s zI(_$`#=q}_JUQn+%zNQ|pohNuF#k*S{pS17?>+Z{Pae4s{e1C0(B)6=gB|gf`(c+X zyC3=9{owcA_k-?_-H*7)_wQFd`2gtc{0B6?^8m)#_yFLY(6syj=xEymp!)|N(DMKf zV7wO}zBu3=VND?$dzxO-E3F&Jnz?J_0$Ar}Q;U zXGg$a!4c5I)tcUT1oXE52;{@#TJMWTfcL*X0)759P5=G~#{JF_m7_nPwjcog$Gd=zlLcog`5`KbCIM}fcB z9K(En{TSdl>lntLe@x?`n%}4CrekP7ehlN4H9tHCI^3!4_8h~ww;uz4JbFz1tYet} zOUD5JpKANRItIA^?ild$FUP^^9W@~=+8I9jO137a8r8o1s zJfrsdvskxP&qAMF{4Dy(QEHf$n>T0qX34AA#w@GFoJFsr=B!K2S!>#7^|a3#G$<$M zl}ff7q#k{K&RaE2%E=94GM ztl3s2N-4u<@W*UB&yOoSuTZio1<7AgvE1B*Ezc__EO*>4dgIB9ZwHwdskh227Cj8l zFO@=+O2+Dn7naRV%bytatcr{{7?xd zOH}rJC-5pY)A3E$3(S&LE>pjOXXZ!EvR#?5%G7&cRxKK|Vp{%@6F7SuWa^Z=03Sl@jW(=;SPhg)nG2E&)qjShy3I4;9H zC-dCeI?&bAx1q~i)iw*Mp3kS2NMFHJjJsfh z7Ofo8;1&DI(Ds8isX`^$DM&7(i600#cFA&zOe0h?mCX=N5ZBQwF*$ydE{gJ(a3a5S z_nTHePfO_29IT4Xh#;2BOQDqmJ(jGzZF(-CO%Ytxp-Q9FCYPfQoKa#0g2&!!S85(n zD~;Va3)i$O6+)et%Y_wQ<$PFi+;KB!5k%Brt5tOJ78Yoxx)EEL-WXxv)as3ktN^A? zrG9FXeqaTsI7+J3sSkDHnpkMx+Db1o*CH-2IkW=2SSPK^)Fw<{u}fZHn?)~o5{#$j zHAd2xvrdF~65j!*jpXtQ=s}u#G_8|BCiQ&MJ-LZfsUEsC*#gkxxwVoP`bxY;N4Z?_ zwld)dUWtB41&orG6lqEgr~-6G$5vVpi%A`l!8cZP40ahSSYCGa8Y>*vVl=T@m_5s% zV zeFQ|Q%#W-iNJP`bf`EI=%bNL73z9xw!A?;O7n?P<671p_k6?-HSjoz0jHSL!TG`HV z52CS5uj-QUBFb%8-?pd%cV=2!t-zurFcNLA+MPv7Mspd74G=$xDjOq-oloU4FNS_9 zgLPWqdFH4yE?QG`To@2^V=c^CB$mgBSv$DkWJ)FsH1l$nka-n=@1p2ImU#RMY(NirYB$j3cG#aHcvZA3LdW zqFJ$WYb=koyq#7KIY_>w8cXUK;E);U%4SrV@8mOma5k}zC;=DZgUm}Omw^XLpV=HN;(#}mUc^`2cNK z*78s3>{(jgkvyNOl6wnm49XSog~95PFbX0 zr>#1W-7ZmsoI@aq@0@ULr{l9uCyaRRSpj?z@@Xvi4CY0Y576TW@g{v4FP7H6S$E3u zJM8Ja_AJO~SjrVi|eiw_8pIAf+-K1aqNU4ZLL5Q|pmbpNX zIl-nzv_M7|50Br-4amOP(R*O|g~)r1vOIbylju#u=Za~xzO$o0dXANuXklg_IO#$Y zZH=}3D1&*jb+p#Xe4uJW#9f;?1lv$pG4?>%Lxt1Jo*Y~^sqZU|C7i>aHp_{b2TI#C zsamWR^))3)rsWV&E=^~qsS^5J*4MLUlbJQgVL4VIAwrfU`;_9=qk?6UoDA(|6-f(^ zH`LB2RL{1VMYLcSqp|!6R_S&Ya35D;~iW?nL$N|_Kj6w zv_uYzYdS4g$a$4jBr{=^9SFBd;Z|c6ThYB12?u$S=m#4M@+S71JUNNwmKb>`;t&Vw z>n|BgV-?tY$Sh7N(e*DqX0jakBc# zWFuC+N}lA3=7`Ch%`V6fL=jDE)Rs_;&p-yXvYqk;q@F7i;U{klX+~QhYPO2i5NU8Z#?j9IgVt1sv2&hgJ6ZfEsTGi|0uUu#948QuglcvOU~=@{rV z)(j2xi?PUdsm_-ADwd2jEFIQRe~gng9<}BlVPbk>MY_f#2I%JQsHszC-Apc1caGI% zw@bDRc^+0KQetU1FABJ&f^96HSYFwpFN*e9KwME_F(oTbO3)hR4s(f*pwf@6b`HIH zqrN9L7uV%>aT~}!VKaw}=5Ck9aoEhCuI9U8mZinaY@+2>aupnBjyUg1pGnoo8)z}v zc_y?$XvIYnK~SFU&pFrM>Yk&|;ygqhsOL@sg;{Bc5OrnfiBJKwGaHI)HG;6tw#(xC zii8tXdV;pH=eR+eIV>wN(ACk|(*>`b^)SoNtjzS=sH+o~#(YSe47%QXxnada&JKtt@i0hn-JbGa+XkBJs(&?3;MVUxAP0Y6| zL#M)+P?KQ2H*R*jnlSmz^5vy33?!B4He43Msl^*7scfR2bT&;OwM6pndR2X*z7bo| zPMusZET{HnWc`a?y0EnVLj$b^RpBpLEY*jmBUe2a4bqv$dhY@^~+S zmzLU7sU;=@8P5Es-jCYOQES3ik4o$wyTbk!DIu~XY!{L#$xP|091ZX z*{l?eo|+lO`RTFO(-0QAsU?WZx@-KJGHoOSp_bmR4P66<@K7%~Wp>6=?iIIpnZTPDfl09EEKZVuy# zA4N;Bv2Ew0Qrpc{YH*q4O*X)yLS|M`qWbK|52h8E8fIrD9!tb_O(%t3;4yZ?(Ssz=;e?WEvE=9yDC#Ailn92G~IW4(R)QKOSIA}7wxTf zF>4p~^>(eNHC}J@m1!2!9Pg&N!d-~0+4(f$xi})w#Il3E1Rjd2<|dN8i-=pIrbM=$?o(1dgPmPV`iZu~G#-%hf|Exgd6%_Ne~Nok z&y6azAN!cL`cp-gqK%m`$2R1{Lh0_`x`5StcX`9YWGZB982uG{%-KeXvy~$!nod_W zVnwi))$Ose&4fq>D;wDk?-*LLcgOK&ayhI~kAU|oWROhjvS##S|0J@0`m@_9`kJXf zL!>O;^yyC%_6Ld88Z&rbMX7q0hVEyq)1*|@C2Na-W~;GmTBSB~zSx@6>PJToGTAC0 z`!iyi-y(y0`n*W9GUqZjjEh5#a*IAU1_lSSJHwpOY{z)OZUr&KBr?E?Y(VG}CXAJe zcAYiLKZ^>-XtEQOVk0~8{o$6GKFZx!oqK^Q>tZ^blDtyM`h_4Ia?=*1z6bsMFV z&=&*5n&q@zlaYy3DpH)K*npr_lC5@jmt6A%`wjbgTGSZsLUy!!Ee*xP8_15HVj#F} z!qw46U6XRxJ3*mruFYIrC4b0nTHYW_GG+NF44KJ|iEki1=UCp7^UBDW?zXboI-c=w zsZP4(tQq`)RF&p9QZGCUQ=FG3&gq4=JFQH2f16}A?J6p3(v!?GoiRc3Z`8I$fTXf@ zpNxYq*$$8csg%wa?=3=f6nxQLwuWl?q+UZ9Azg7gZPl97R84mhvI7Z!3Q#ADU8Eaj ziLx1sPRom_Pt21@@JV*aR>GY1FP3;Nlwa}cA|xN@7>JtoD3Ul~M#98v3ld?hAV}b~#}7F$RY^28J#lT0h8YR)PhoK)~SeilKq7E@O~zBR@&x4uJfnMFb{A6wOLD_7NyhwhHVAc>yg8(0#AV->iWZL9(k2-F~ekbr- zmytA)IwV-SJL5<30Oci8`_yy5E-8oV7*Z#7JStnWNQ6j)J9EXflZ2dd%JMUvoabhu z&azNaEwT4bP>b9v*^Jkn@+dR$KAd`VhJeXd%60QycLk>9_;HqHPK4vpF$)O_1y+HG zj{~LwdF7FjAtx2686Rlrc99O3qm*UDAd5WSrIOPJg9MZ@ShjP7V`Gr*Hd<&F<4q10 zpWa)b8FmhHwME|Iox25hU5AYXoQU3IA}R)Bho|!#?fRpR~t(z zz8@7NCPN(8%WI@6Qy7J)vwW7Wp@#l6M>#rqJ4pI2%F;wQV)iJ}`J8w-*5ewHuizNem^rs~{&^fE4@iGW z?aCbKC(>0paqGF9IzZ4k@H{bEWG~0AY-JB2wBa@vi6Gf3!I76X?Me^%WctFnsG+0} z+m*nU9GoS)Aau#S)bNDo^5(FFLOJYECK|P6^MwcuTM=QAL{$+)8UruG>z)MJK%>zy zHi@xhi}dKs^peQ&oT(rRPi4yDo#5$3h&fR<6K=M|YYG~3Qz}=CNmG0w**l5!V4K;W z9C+4~2~vv;0NHJ}$esvU6gAr$6U|O0j||E?NF0C(D{>BwND7>$0)q*)MGAzjG{l_g zHGQz?o?_FeEv_a<-87;ik;0+IP?VoI0BOr!BML)Knf?MYf`-U+ zbJ>7G^k}G}ThoY34pl;`!hvA^X*iP0s~}ckn=y<%`^43@&0^k?vjt?Qmuta<=eBar z8DxPFeFH)@+oZW1G9xh&xdD0*UU-$tdHrDY(o4Z5l8(>vNt`;$jDrU>$zhyB(&>wN zFf2}=DrcPQ)2wtPK33i4?1^!86z6Egyt!fJU}DcjnN7ENqe2`Oir!KqNfgT|@^QQA zXL+OgR4Jr|_NR3oAC@hjk+H1ABVW?3(y_GgWiMmK}BS zdE(5tQo2sWO2SAedM>@6o9tVX5F+E<@$z!$gpsDKuIi4J zFXB;6yOOanlWAu5F!P9!p}GySqn1b!(onXX9FlFK4UA`5Tm76#V)?1;%+fWK;nNZ1 zHKn@|OOBKnBeodA4#%IYxVKm)up~?G*hGh-qb;L0>R{9uN$CcjrM_2e)hT>P%ID!i z4tI>O7jIlj^u)gUxSY9QmpfqDmSfp1k}Eb5hX>ZjwPihRKJ5jiCyNnFi%}c4HzcYa z?TXr-MaC32Oz=Z1lH+mD@?$;5^W%dLmCV;YsV?kH7c&;Ts=h0!@ZhWHB%hqo%X;iv z6O!Sx8Z*}QQ|q4nJ|Q_)E3M&}N@T49=f+D_X^E60a6*pKr74X+iaq4`dnTEv#Q!U7 z=b;~Uc&D}Fga7yjs`<21m5bi^cwALEs7)$G8#6Sze4G^7{9IQ&b$rElX^PAfdY$i@LXYhkF8d+yrZ*oplfjO4gGyXtt)l2sg=JzXgANBJ8ypL+y$+3 z&o}4IZJ)Qeb?&0MbE#r$v{R6&H?Q@)x#ryY?F$y1Gj|@<)Em!R?!0*mmXEiUi_55@J06lMZ5^_$QoG6Vr#JK$!-`dGT}7(dZ#Uhty!uP$ zUufcS>1=oD(s|}Z=3JACXU&_tZ0ULCnPnH&(l8iny&$Q_vm3K3tz9nR znnokA;~NL8_^B2@;lcKu<9l++^MPD#+KWW7 z>w51&^pbNjMK2z!;(CGtc{*0|n0=~v1x|=YEKT*^g1Y59MeF!pe%)vlrgmBRf+IH# zSW~->AE3GOODCnS>lDm-$+28qL=cv1$?HZA>Qo&*sG^yDqr^{DrpdZ&S4RCcK5Ji= z(NB(9Sn|jrbwucO1+{`>lfy)Ya3R#Hfn5qYl?9Go`20X6eyGXAn<>mE&EY8Qh~)9~C{RN_QMwYbcV$_V>Wsh70OP0ZY@S%)=hS8|h9$-zuQKXiH3 z9m+Xb*Z+SyAk{+_SCx2yn6QxGFXAbP;ChV(Xjn3N%_dpVm8>!^A%EP$S22{lsTb@7 zijZT?b=I)Oa5TXtL4D)fxeBaJEnFXzh`52S8sP$Ypc=g zRcmHA^+GKu@F=M@C1Yt)_K~Z+k>`>NL(c?<(ciamL}l|e4WRZBDJL~<`JW#5Y(zfrk!5in#8YJ_3MO4;+yEmiWbv4 z7VSyb9{18Sv9!?T88UM9ofn5uId!n;OeznI+V!$Gb&&ijS~4lEW4gx=Xsa|q5H}Y{ zfTrLPsSrWK#G#Y4G^SQ(;Iw!eh^`lfb!W*@x@Hw*63Imn;yn?8C)mz-Y?d(+ftEa( z~Ll`sHuUlouub~MD>r`up<%-3khAe`a z8^1sXA&>H96(nTkqKd@gNz9#* z(J;?rvG%hHL8yyIN~e{$x>(@dI+LeT3qqrx)aCI5q-$t$6{6re8HBwACF?!vfy88u zXor;%HDdgLt0pb#royITE?u4Z;P@V@Osno%L@PvkRi-3L8Hdz8i{b_vd8M~pup+5= zBzk?$E<%FSXs`~YLXEK3NV{p9k!MZF zD%y1dG_^Sz9X1$G)#VRuEIgZ|HGBAXOc#u7AVpYk9f#$exiAa1NU!PzXvNg93vfy|~ob>R^# zBb8XC0?Rx>Fj1`M6K9GA#b>>}detj>gxZZ3A&E?gAXMl{v{aa!WM{2PoL!F`)fml# zETZyL&zn=v)AaIeca=S;Cjucf3q>}Ug!e{j1Pfci1dj~F20U3U4#74V*;af>h8k3! zPxP7dX0B196`j;7o*Pb@b$NhE$d_phSBhx>HpXbk-m0-K_Ra?3jZs&QB5hJjLmo)X zH{wmXStD*`ryfbLFbe~OI`O1e@^Yk!IT|e7Pm;rvPur`0nb7K3Z3c}QvI-&Z!xAgY zCUT~Q-!mSv`)A?G4H7;Zt$-Pnv8@Kqy0|GHnHSQVG$JCLOj#IlDf4sH$rlCp4K?>r z$5oXSb}7{+u*O-&Dk;ZQF2<)9!G!gRr3!h|s_o>?fTW(%R$P&ZmvG7`saSRR3k}xY zt82>6#s5&-*k<6*9>GmZ}>=%wAl7{Y)FR;wvFM)?YEMA zGL2Zp(16UmWrtWdvYNO_lt&H(2{~I$#+U`H?BK&e^~Gc4NF*-GV3K1K1(9W8HG-88 zLDamlPw_&%_^HLCA6PB6zkuYjdP5D}i`dJ(p7 zO2no`mVYTMG|eUPq=P_Om9-LEC3eN1w8)A;jwS9xuf^(f_D$$SE%AxEq!zJ;V;Jk`7hEy+{!NzljBt0toe`lcB- zWNV6XX?Cek(3P*zYMaA}(N8(7i!!Y=FXMY?ONm{*`m0I=4Dx6BP?DW`sYP#knMxFq zAak6((fE>;yvN@J1q}>60yN;plITT^rI>P(Xa-BGC^AR7F=`Okwd1Um1c`1IL7+ga zp*FLx%s3&UVP}|hAb*nV!`7xnOF6@iD}sufk=jpyXJW6~Rg&WYQAD$0lL=HC?AGbE z+#Jc97EA)85_Frp3596Vrg5o$YK)1E2^(`((PX9 zEhp1muBsVS$d?j+hNQ2n-8ZA_S|PAVTY71Mngm9SZa<)Rw!E@L)o=|8GjW)gm>-9; z6XnYR8f)g_3=gfM3Vz*~x>qbOn2Ag%d`(KPRj*pV|6srH*G4PBCpZq0AhPb^`H6K+ z1|XaCH6ggjd=iPwJ=T8zL6w;3!9eVbJjT$MHST5w9*YTX;`jt9g5406BehaEbudko zZdRwYnHt1Xcd{DT`C5xPp07pGp~M#k(23xx3F=@+1S}*cEav!&2n8g(UGCPV!K2*O zDx7gSN-6Xm@@>QtB+19us!$Tt%3+I$)W{)a)J}6UqprxJA4u%g1_v)TZtHU6%G53v z^max^n&VEOm#$>BP!!!I8WRp7v6ZXOaP>+*`PIZQZpQi|FDs=?g;LHE{XWgAIO|n) zkV44R?z0T+S^!z__NIO8G)bMC4mieE_qQRSmTFIUW&HCw8+sWU=@{s|^aMAy3>PZ3 zNxia#%_<8-^Zi(jXF@mUtl_!TZD|toB5T8b7 zC0{-#Vf$Kai8w^C95oijOKmmq&jAGzMxz!BeOO0wtcZMeQ3<}dtaWNl%{(^#qey-@ z$uWLnAr11_7@T(-$ZVtzYl*c*oihUK3}MQs%Ez_~@eb!Zc^D!ravgIvRf{fssS@W< z)oC@ujMv)2#A)#sMO33EHJaS~GHpn!Tnj{VnB=Cvcx;pnVJlZt_j%mogSL^+FsY25 z4lmK%GAtLxUdR}#lGe1q-v#PAC~(|@L(z80;#*-PCW6g0y&Hy&AOeg?l2otUChPdL zif!1p_#eC&hVO)_z~0zs71)}|1P-Mj6SYTH%Da%Bl6|D!J8F@~x5RJ|P4<8cAh~E43J%Lw zvVzJ^5NdE~G$eCa>T$du8Y|}zMmP#Vgn$cUSRX=(jc|;y1|7nuMq@VP;8UuQUl|3w z*T!be&v}nb4@oOON2^&i3jujgwUTgSZUP}&TX;L=m$#Yy9-<%O5>F;mi?mnC8s~^$ zbn@TP4Lj-ydvy%-3euP1Bq5{djT0`|EXZCjGg8Zza4$tWN3yuN@7E}4vrW`ecA}79 zLuDlh{^WK%4pk-N^T&Z!J)1?^!moOhyzJt+7z4tvEU~gt0Nhs7)Bzz>@^(2n+ZDEk zOOZj~sNIuNqY%bYzygrVg}$tKH&g*gDOo$?XV*bgMjt|qYJPigr)0(JEURp-z+qYq z$VBn$#0=o0{0RoxLh$RhD$e*So2(sBinE8TakZ5AYcT$d!Q@jTMh{_AaOoNBIoJ|N zwMd+cCzdLe$Fz4X8IdX5JTf3vi^C@nJRFdq z^@Q!k^(+O!n$en;;q;5%6=bQK{c3&63t8@D4Xq&mDT$d^YozuAMKlmHUACiDf=Na> zJ*UV}sLFVgrkpI8dLd^w0zLHtL)ExnjXu(3AUTloPUEgZ#V&Z2yl6D3*4=5A?WtWn zE~2$ew_Jkab)>^c&LgLnEU_RIgd|Xjmc`JFg!N=>jIwbuNftWkP!ahaja>?}T6%3) zXIHP;-?y>5ugB<10$6M$35k&Wn2APSS#?5evfN>G7AIhlTvKPf#Ik`Iito+gw&}}y z>X7-We*DuFIcb1UeeFsTAcWJ!^&9Gj4_oX*YlBR z>b5TDpFzi3mPpemg2IMVMh>h&MRh4@C7_42PlZlmY{Mx*By^S9GftPKo>ONNWbafW z3Anij&ym1+71#9?=%qr6JK)eT9@1_bVq_eL6J4P@oTQvQV(rm}V;|5pWW9(2sQP7& z>CrTD*mP}cHbBZqHRCfbNmjfY9Up+17VidKBysN4j(TkR;bc?H1$?Q`2=A)dg&C{^ zxxq*If)ABMM@ zV4P{kBZ+UO_nD$N-HeA3aLz|XqTEzfjkwJitk*`#OTslm(@ri83=W>?;F1(ahqJ12 z^h>F^Pd3pJoB{7h&`v}-ZWijxON3_X1-Zs2@(q%3h?U7#uro(UQh~d=?AehoRD&NS zHa+j`?|Egt#Ew|=4vcPchzdTLg|Q*lm#@^r9B()z=NO!n@tY95Y{Xkpd}k7}dShNB zBtq}aj(DMEiGkt|oCZI#a%DT$2r`=!_x8(!2(b>nD zH&?RLh)~sN@f$-LiaG)0=`D_if>b{2_URjaGsX3?z0O!^hLJV4m03#h3-u18>1Rmm zRunvK=qgp9whUjBh;U_Q$>KYXqW+k7AudwYJh4@s)YVDZfZd8TD zVJh+1CkYxhj-r%5D50_B;A{G*>tG^RB0oDV_F1>{ZmQl`5ibhg8yr@}!VzQT1zr%{ zHMXO$UVIEj&x>$~k#A74%qz&%WgGblafA`iv-kvySX=Db>w`JUoy!J7YTqR;6(2g% z5CgHL7Flr&e#UKzLN%J2$+b$d_JYk^{rCYk5lLo?c%MuuY2Iovy#o6}MN_=@=s(=? z##BJQ${6#j>7XIToVkC=WLijH!UX$*?^lw|jBG$d&hW;&VQuDGEFeqca1xg`)vL7D zIVaizl2G%BFJY2R=d|sCVB5gPu8}@+Z|LFpJ)ON>tip&GG)V>d$(jfY)}$t8HGZ(u zyMHNS&P}9)fa#zinlkxSta^ME~j=&=!zVViX4o>`9aB>S;3a|HK<*meB*ha{P0Y93}bCGK_4f*p@n}S0}TY7Dq`@jh=p!o1U~$cW3m(f{0w1|Am{LbbxZkY39s2F*?W3;g;Z}v`Nh262__x>z}G0 zA6z|QgQgciDJX<%LQAF5w~e_c@|d+c(Ms~2P?J2ndFHFUC@K^C+!%daFjEF^?q~0h z8o=b@E2K7B9DkhTi|_bT967@}{mcWkDtjy;Nl>M0;yNi6&&ea)#gm?-NJP6?C;e6; zH=ZqnR6li_0k_-D#?zCyV5%V;6o2o;tX}Y@c7wG~JTDqZKP(O5l9Fz>dhL0?w+ouW~4xW@{#)lky1y%EsiXZ*YTS0W_Qk*Jgy*M05w!a_i z=w{AitZ20hE4AC?r8t`DC;*cM1OY0KFVvBb_`x zK9#43OxuWXC8Uyyu_nRFnlXruT=Ecu0+&%ezsy_0wtQYxwJM=&7h*i{t^&hVbV#}q zRwns&u&G^YS40QnthQ;n4RkVDLhohua9D8Mn+_0jkeWAgjO1?I1;;3;D zg^vhETdG1oyxYU!F<$NZxR=KkE8)FhyJ1=Z^|M1EdqZ+eqTzEh@i}5Mx-Iif1-5Q^ zk>t9oGy2mvT}9@w-gqS~K?mO(Wy#zexI^R*nzn zN4X?@aeR~KFRLrt{t1r6T8d6+h+mf+HwZIFH%?}`n6uO8RLzO;Ioam1>C1Oy%~X^e z#mQ9Qvs--FDn-~{6gkGa3E5;VwfMWEnFb@bEsVpt`2J7M`C=z%{URV&nM)n&7!>7(}nUutq2X};pjjMe_0{g zqAk;Z@&#!Mmo*J#WH!9gts3sm$_5Iix1CnMAr{i4MdsqI=xdY|<2P%gpZG%dFz?C^ z0?yW0#W7r@#UWRl-Ksnky)DOR3Kg$hz)?w!jTQKFWI3ls^iZ$4+@Tn|(jWiFQRyCQ zr4)X0wT3`i8p@I*HLF&;+|rfuNJrw6gE(T*AS%mT)!68b%2zlfjAJw348p*gOn-wB z?>Fn=V^oOSHU^bZoOW;1oRB_J*hf@fL8!BN_@*Oh+~48-Dla7N*_jOGpg09 zkoq7auUzj~X5ORox!eL%dFd39n_pr!S=^O|0J% zf4|3$j2H>Y=ht>aN9t_UVw(zcjZ_r5)6MH^^_a=YXxE)#A7>H?l1gM5;QkC;D<&6h z3{~SZDUAnr?Mxvg9QVw&BO54bTd84FCEf58b`z#mck%U4GzMXr&sVam9PL>-C%a*6 zsQTiuN$~HCyXWc84~9}f+?4o;o02L>3yH?vcR4bx`|g`YYSGmdn~hEJXOp$fv0k1j z#I`A3#aC80??qdoStXyojtmQxx{$1KcVJU|)y3vhD~Mx(sZ-Z>Qk&+RVh3YW6hN5X zeRMXru^`oT6R67RU1IDEk9$p~rM})~vuC*N|WADe$Vd5V{w#oLLYd<-SGp7Gh)X4jp`UauNyeAyX) z7G&sNnS5TLhbr)#Ts|YO(PH8?`W!(T*!q%ONrU%z{pIGfis3dp&CiZVHTsbYU<~&} zC!QNib$f<$Jy8>uMr$%UGBW)QU(OKN>G-`w)|iXf1RZlp_sAHo<>`|IP!K$-QH7hSyU*I6btbC>*Iw4_^33TEj z96U)~wFbxMTx?eI;@})8@dN8W_H4t9w?Wif\n" "Language-Team: Test\n" -"Language: pl\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" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Virtaal 0.7.1\n" "Generated-By: Babel 0.9.6\n" #: rhodecode/controllers/changelog.py:95 @@ -25,12 +24,13 @@ msgid "All Branches" msgstr "Wszystkie gałęzie" #: rhodecode/controllers/changeset.py:83 -msgid "show white space" +#, fuzzy +msgid "Show white space" msgstr "pokazuj spacje" -#: rhodecode/controllers/changeset.py:90 -#: rhodecode/controllers/changeset.py:97 -msgid "ignore white space" +#: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97 +#, fuzzy +msgid "Ignore white space" msgstr "ignoruj pokazywanie spacji" #: rhodecode/controllers/changeset.py:163 @@ -38,18 +38,22 @@ msgstr "ignoruj pokazywanie spacji" msgid "%s line context" msgstr "%s linia w kontekście" -#: rhodecode/controllers/changeset.py:314 -#: rhodecode/controllers/pullrequests.py:417 +#: rhodecode/controllers/changeset.py:329 +#: rhodecode/controllers/pullrequests.py:438 #, python-format msgid "Status change -> %s" msgstr "Zmiana statusu -> %s" -#: rhodecode/controllers/changeset.py:345 -msgid "Changing status on a changeset associated witha closed pull request is not allowed" -msgstr "Zmiana statusu na grupy zmian powiązania łączy zamkniętego wniosku jest niedozwolona" - -#: rhodecode/controllers/compare.py:75 -#: rhodecode/controllers/pullrequests.py:121 +#: rhodecode/controllers/changeset.py:360 +msgid "" +"Changing status on a changeset associated with a closed pull request is " +"not allowed" +msgstr "" +"Zmiana statusu na grupy zmian powiązania łączy zamkniętego wniosku jest " +"niedozwolona" + +#: rhodecode/controllers/compare.py:74 +#: rhodecode/controllers/pullrequests.py:167 #: rhodecode/controllers/shortlog.py:100 msgid "There are no changesets yet" msgstr "Brak zestawienia zmian" @@ -60,7 +64,9 @@ msgstr "Strona główna" #: rhodecode/controllers/error.py:98 msgid "The request could not be understood by the server due to malformed syntax." -msgstr "Wniosek nie może być rozumiany przez serwer z powodu zniekształconej składni." +msgstr "" +"Wniosek nie może być rozumiany przez serwer z powodu zniekształconej " +"składni." #: rhodecode/controllers/error.py:101 msgid "Unauthorized access to resource" @@ -75,8 +81,12 @@ msgid "The resource could not be found" msgstr "Zasób nie został znaleziony" #: rhodecode/controllers/error.py:107 -msgid "The server encountered an unexpected condition which prevented it from fulfilling the request." -msgstr "Serwer napotkał niespodziewany warunek, który uniemożliwia jej spełnienie żądania." +msgid "" +"The server encountered an unexpected condition which prevented it from " +"fulfilling the request." +msgstr "" +"Serwer napotkał niespodziewany warunek, który uniemożliwia jej spełnienie" +" żądania." #: rhodecode/controllers/feed.py:52 #, python-format @@ -89,167 +99,198 @@ msgid "%s %s feed" msgstr "%s %s zasilać" #: rhodecode/controllers/feed.py:86 -#: rhodecode/templates/changeset/changeset.html:137 -#: rhodecode/templates/changeset/changeset.html:149 -#: 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 +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 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" +#: rhodecode/controllers/feed.py:91 +#, fuzzy, python-format +msgid "%s committed on %s" +msgstr "%s zakomitowal w %s" + +#: rhodecode/controllers/files.py:88 +#, fuzzy +msgid "Click here to add new file" msgstr "Kliknij tutaj, by dodać nowy plik" -#: rhodecode/controllers/files.py:87 +#: rhodecode/controllers/files.py:89 #, python-format msgid "There are no files yet %s" msgstr "Brak plików %s" -#: rhodecode/controllers/files.py:265 -#: rhodecode/controllers/files.py:325 +#: rhodecode/controllers/files.py:267 rhodecode/controllers/files.py:335 #, 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" +#: rhodecode/controllers/files.py:279 +msgid "You can only edit files with revision being a valid branch " +msgstr "" + +#: rhodecode/controllers/files.py:293 +#, fuzzy, python-format +msgid "Edited file %s via RhodeCode" msgstr "Edytowanie %s w RhodeCode" -#: rhodecode/controllers/files.py:297 +#: rhodecode/controllers/files.py:309 msgid "No changes" msgstr "Bez zmian" -#: rhodecode/controllers/files.py:308 -#: rhodecode/controllers/files.py:372 +#: rhodecode/controllers/files.py:318 rhodecode/controllers/files.py:388 #, python-format msgid "Successfully committed to %s" msgstr "Committ wykonany do %s" -#: rhodecode/controllers/files.py:313 -#: rhodecode/controllers/files.py:378 +#: rhodecode/controllers/files.py:323 rhodecode/controllers/files.py:394 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" +#: rhodecode/controllers/files.py:347 +#, fuzzy +msgid "Added file via RhodeCode" msgstr "Dodano %s poprzez RhodeCode" -#: rhodecode/controllers/files.py:358 +#: rhodecode/controllers/files.py:364 msgid "No content" msgstr "Brak treści" -#: rhodecode/controllers/files.py:362 +#: rhodecode/controllers/files.py:368 msgid "No filename" msgstr "Brak nazwy pliku" -#: rhodecode/controllers/files.py:404 -msgid "downloads disabled" +#: rhodecode/controllers/files.py:372 +msgid "Location must be relative path and must not contain .. in path" +msgstr "" + +#: rhodecode/controllers/files.py:420 +#, fuzzy +msgid "Downloads disabled" msgstr "Pobieranie wyłączone" -#: rhodecode/controllers/files.py:415 +#: rhodecode/controllers/files.py:431 #, python-format msgid "Unknown revision %s" msgstr "Nieznana wersja %s" -#: rhodecode/controllers/files.py:417 +#: rhodecode/controllers/files.py:433 msgid "Empty repository" msgstr "Puste repozytorium" -#: rhodecode/controllers/files.py:419 +#: rhodecode/controllers/files.py:435 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 +#: rhodecode/controllers/files.py:617 +#: rhodecode/templates/changeset/changeset_range.html:9 msgid "Changesets" msgstr "Różnice" -#: rhodecode/controllers/files.py:565 -#: rhodecode/controllers/pullrequests.py:74 -#: rhodecode/controllers/summary.py:236 -#: rhodecode/model/scm.py:550 +#: rhodecode/controllers/files.py:618 rhodecode/controllers/pullrequests.py:131 +#: rhodecode/controllers/summary.py:247 rhodecode/model/scm.py:606 +#: rhodecode/templates/switch_to_list.html:3 +#: rhodecode/templates/branches/branches.html:10 msgid "Branches" msgstr "Gałęzie" -#: rhodecode/controllers/files.py:566 -#: rhodecode/controllers/pullrequests.py:78 -#: rhodecode/controllers/summary.py:237 -#: rhodecode/model/scm.py:561 +#: rhodecode/controllers/files.py:619 rhodecode/controllers/pullrequests.py:132 +#: rhodecode/controllers/summary.py:248 rhodecode/model/scm.py:617 +#: rhodecode/templates/switch_to_list.html:15 +#: rhodecode/templates/shortlog/shortlog_data.html:10 +#: rhodecode/templates/tags/tags.html:10 msgid "Tags" msgstr "Etykiety" -#: rhodecode/controllers/forks.py:158 -#, python-format -msgid "forked %s repository as %s" +#: rhodecode/controllers/forks.py:175 +#, fuzzy, python-format +msgid "Forked repository %s as %s" msgstr "gałęzi %s w repozytorium %s" -#: rhodecode/controllers/forks.py:172 +#: rhodecode/controllers/forks.py:189 #, python-format msgid "An error occurred during repository forking %s" msgstr "Wystąpił błąd podczas rozgałęzienia %s repozytorium" -#: rhodecode/controllers/journal.py:218 -#: rhodecode/controllers/journal.py:261 +#: rhodecode/controllers/journal.py:275 rhodecode/controllers/journal.py:318 msgid "public journal" msgstr "Dziennik publiczny" -#: rhodecode/controllers/journal.py:222 -#: rhodecode/controllers/journal.py:265 -#: rhodecode/templates/base/base.html:232 +#: rhodecode/controllers/journal.py:279 rhodecode/controllers/journal.py:322 #: rhodecode/templates/journal/journal.html:12 msgid "journal" msgstr "dziennik" -#: rhodecode/controllers/login.py:143 -msgid "You have successfully registered into rhodecode" +#: rhodecode/controllers/login.py:138 +#, fuzzy +msgid "You have successfully registered into RhodeCode" msgstr "Udało Ci się zarejestrować na stronie" -#: rhodecode/controllers/login.py:164 +#: rhodecode/controllers/login.py:159 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" +#: rhodecode/controllers/login.py:179 +msgid "" +"Your password reset was successful, new password has been sent to your " +"email" msgstr "Twoje hasło zostało zresetowane, nowe hasło zostanie wysłane na e-mail" -#: rhodecode/controllers/pullrequests.py:76 -#: rhodecode/model/scm.py:556 +#: rhodecode/controllers/pullrequests.py:118 +#: rhodecode/templates/changeset/changeset.html:10 +#: rhodecode/templates/email_templates/changeset_comment.html:15 +msgid "Changeset" +msgstr "Grupy zmian" + +#: rhodecode/controllers/pullrequests.py:128 +msgid "Special" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:129 +#, fuzzy +msgid "Peer branches" +msgstr "gałęzie" + +#: rhodecode/controllers/pullrequests.py:130 rhodecode/model/scm.py:612 +#: rhodecode/templates/switch_to_list.html:28 +#: rhodecode/templates/bookmarks/bookmarks.html:10 msgid "Bookmarks" msgstr "Zakładki" -#: rhodecode/controllers/pullrequests.py:190 +#: rhodecode/controllers/pullrequests.py:228 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:192 -msgid "error during creation of pull request" +#: rhodecode/controllers/pullrequests.py:230 +#, fuzzy +msgid "Error creating pull request" msgstr "błąd podczas tworzenia prośby o łączenie gałęzi" -#: rhodecode/controllers/pullrequests.py:224 +#: rhodecode/controllers/pullrequests.py:251 msgid "Successfully opened new pull request" msgstr "Prośba o wykonanie połączenia gałęzi została wykonana prawidłowo" -#: rhodecode/controllers/pullrequests.py:227 +#: rhodecode/controllers/pullrequests.py:254 msgid "Error occurred during sending pull request" msgstr "Wystąpił błąd podczas prośby o połączenie gałęzi" -#: rhodecode/controllers/pullrequests.py:260 +#: rhodecode/controllers/pullrequests.py:287 msgid "Successfully deleted pull request" msgstr "Prośba o skasowanie połączenia gałęzi została wykonana prawidłowo" -#: rhodecode/controllers/pullrequests.py:452 +#: rhodecode/controllers/pullrequests.py:441 +msgid "Closing with" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:478 #, fuzzy msgid "Closing pull request on other statuses than rejected or approved forbidden" -msgstr "Zamknij wszystkie wnioski połączenia gałęzi innych stanów niż odrzucony, zatwierdzony lub zabroniony" +msgstr "" +"Zamknij wszystkie wnioski połączenia gałęzi innych stanów niż odrzucony, " +"zatwierdzony lub zabroniony" #: rhodecode/controllers/search.py:134 msgid "Invalid search query. Try quoting it." @@ -263,55 +304,12 @@ msgstr "Nie ma szukanego indeksu. Proszę uruchomić indeksowanie whoosh" msgid "An error occurred during this search operation" msgstr "Wystąpił błąd podczas wyszukiwania tej operacji" -#: rhodecode/controllers/settings.py:119 -#: rhodecode/controllers/admin/repos.py:272 -#, python-format -msgid "Repository %s updated successfully" -msgstr "Repozytorium %s zostało pomyślnie zaktualizowane" - -#: rhodecode/controllers/settings.py:137 -#: rhodecode/controllers/admin/repos.py:290 -#, python-format -msgid "error occurred during update of repository %s" -msgstr "wystąpił błąd podczas aktualizacji repozytorium %s" - -#: rhodecode/controllers/settings.py:162 -#: rhodecode/controllers/admin/repos.py:315 -#, python-format -msgid "deleted repository %s" -msgstr "usunięte repozytorium %s" - -#: rhodecode/controllers/settings.py:166 -#: rhodecode/controllers/admin/repos.py:325 -#: rhodecode/controllers/admin/repos.py:331 -#, python-format -msgid "An error occurred during deletion of %s" -msgstr "Wystąpił błąd podczas usuwania %s" - -#: rhodecode/controllers/settings.py:185 -msgid "unlocked" -msgstr "Odblokowany" - -#: rhodecode/controllers/settings.py:188 -msgid "locked" -msgstr "zablokowany" - -#: rhodecode/controllers/settings.py:190 -#, python-format -msgid "Repository has been %s" -msgstr "Repozytoriów jest %s" - -#: rhodecode/controllers/settings.py:194 -#: rhodecode/controllers/admin/repos.py:423 -msgid "An error occurred during unlocking" -msgstr "Wystąpił błąd podczas odblokowywania" - -#: rhodecode/controllers/summary.py:140 +#: rhodecode/controllers/summary.py:141 msgid "No data loaded yet" msgstr "Żadne dane nie zostały załadowane" -#: rhodecode/controllers/summary.py:144 -#: rhodecode/templates/summary/summary.html:157 +#: rhodecode/controllers/summary.py:147 +#: rhodecode/templates/summary/summary.html:149 msgid "Statistics are disabled for this repository" msgstr "Statystyki są wyłączone dla tego repozytorium" @@ -320,7 +318,8 @@ msgid "Default settings updated successf msgstr "Domyślne ustawienia zostały pomyślnie zaktualizowane" #: rhodecode/controllers/admin/defaults.py:110 -msgid "error occurred during update of defaults" +#, fuzzy +msgid "Error occurred during update of defaults" msgstr "wystąpił błąd podczas aktualizacji wartości domyślnych" #: rhodecode/controllers/admin/ldap_settings.py:50 @@ -368,7 +367,7 @@ 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" +msgid "LDAP settings updated successfully" msgstr "Ustawienia LDAP zostały zaktualizowane" #: rhodecode/controllers/admin/ldap_settings.py:130 @@ -376,543 +375,664 @@ msgid "Unable to activate ldap. The \"py 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" +#, fuzzy +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" +msgid "None" +msgstr "Brak" #: rhodecode/controllers/admin/permissions.py:61 #: rhodecode/controllers/admin/permissions.py:65 -msgid "Write" -msgstr "Zapis" +msgid "Read" +msgstr "Odczyt" #: rhodecode/controllers/admin/permissions.py:62 #: rhodecode/controllers/admin/permissions.py:66 +msgid "Write" +msgstr "Zapis" + +#: rhodecode/controllers/admin/permissions.py:63 +#: rhodecode/controllers/admin/permissions.py:67 #: 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/repo_add.html:10 +#: rhodecode/templates/admin/repos/repo_add.html:14 #: 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/repos_groups/repos_groups_add.html:9 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:9 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:13 #: 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/user_edit.html:133 #: rhodecode/templates/admin/users/users.html:9 +#: rhodecode/templates/admin/users/users.html:85 #: 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 +#: rhodecode/templates/base/base.html:292 +#: rhodecode/templates/base/base.html:293 +#: rhodecode/templates/base/base.html:299 +#: rhodecode/templates/base/base.html:300 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 +#: rhodecode/controllers/admin/permissions.py:70 +#: rhodecode/controllers/admin/permissions.py:76 +#: rhodecode/controllers/admin/permissions.py:79 msgid "Disabled" msgstr "Wyłączone" -#: rhodecode/controllers/admin/permissions.py:76 -#: rhodecode/controllers/admin/permissions.py:79 +#: rhodecode/controllers/admin/permissions.py:72 +#, fuzzy +msgid "Allowed with manual account activation" +msgstr "dozwolona z ręczną aktywacją konta" + +#: rhodecode/controllers/admin/permissions.py:74 +#, fuzzy +msgid "Allowed with automatic account activation" +msgstr "dozwolona z automatyczną aktywacją konta" + +#: rhodecode/controllers/admin/permissions.py:77 +#: rhodecode/controllers/admin/permissions.py:80 msgid "Enabled" msgstr "Włączone" -#: rhodecode/controllers/admin/permissions.py:122 +#: rhodecode/controllers/admin/permissions.py:128 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" +#: rhodecode/controllers/admin/permissions.py:142 +#, fuzzy +msgid "Error occurred during update of permissions" msgstr "wystąpił błąd podczas aktualizacji uprawnień" -#: rhodecode/controllers/admin/repos.py:121 +#: rhodecode/controllers/admin/repos.py:127 msgid "--REMOVE FORK--" msgstr "--USUŃ ROZGAŁĘZIENIE--" -#: rhodecode/controllers/admin/repos.py:190 -#, python-format -msgid "created repository %s from %s" +#: rhodecode/controllers/admin/repos.py:168 +#, fuzzy, python-format +msgid "Created repository %s from %s" msgstr "utworzone repozytorium %s z %s" -#: rhodecode/controllers/admin/repos.py:194 +#: rhodecode/controllers/admin/repos.py:174 +#, fuzzy, python-format +msgid "Created repository %s" +msgstr "utworzone repozytorium %s" + +#: rhodecode/controllers/admin/repos.py:197 +#, fuzzy, python-format +msgid "Error creating repository %s" +msgstr "utworzone repozytorium %s" + +#: rhodecode/controllers/admin/repos.py:266 #, python-format -msgid "created repository %s" -msgstr "utworzone repozytorium %s" - -#: rhodecode/controllers/admin/repos.py:225 +msgid "Repository %s updated successfully" +msgstr "Repozytorium %s zostało pomyślnie zaktualizowane" + +#: rhodecode/controllers/admin/repos.py:284 +#, fuzzy, python-format +msgid "Error occurred during update of repository %s" +msgstr "wystąpił błąd podczas aktualizacji repozytorium %s" + +#: rhodecode/controllers/admin/repos.py:311 +#: rhodecode/controllers/api/api.py:877 #, python-format -msgid "error occurred during creation of repository %s" -msgstr "wystąpił błąd podczas tworzenia repozytorium %s" - -#: rhodecode/controllers/admin/repos.py:320 +msgid "Detached %s forks" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:314 +#: rhodecode/controllers/api/api.py:879 +#, fuzzy, python-format +msgid "Deleted %s forks" +msgstr "usunięte repozytorium %s" + +#: rhodecode/controllers/admin/repos.py:319 +#, fuzzy, python-format +msgid "Deleted repository %s" +msgstr "usunięte repozytorium %s" + +#: rhodecode/controllers/admin/repos.py:322 #, 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:349 +#: rhodecode/controllers/admin/repos.py:327 +#, python-format +msgid "An error occurred during deletion of %s" +msgstr "Wystąpił błąd podczas usuwania %s" + +#: rhodecode/controllers/admin/repos.py:365 +#, fuzzy +msgid "Repository permissions updated" +msgstr "Repozytorium wyłączone" + +#: rhodecode/controllers/admin/repos.py:384 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:368 -msgid "An error occurred during deletion of repository users groups" +#: rhodecode/controllers/admin/repos.py:403 +#, fuzzy +msgid "An error occurred during deletion of repository user groups" msgstr "Wystąpił błąd podczas usunięcia grupy użytkowników z repozytorium" -#: rhodecode/controllers/admin/repos.py:386 +#: rhodecode/controllers/admin/repos.py:421 msgid "An error occurred during deletion of repository stats" msgstr "Wystąpił błąd podczas usuwania z repozytorium statystyk" -#: rhodecode/controllers/admin/repos.py:403 +#: rhodecode/controllers/admin/repos.py:438 msgid "An error occurred during cache invalidation" msgstr "Wystąpił błąd podczas unieważniania cache" -#: rhodecode/controllers/admin/repos.py:443 +#: rhodecode/controllers/admin/repos.py:458 +#: rhodecode/controllers/admin/repos.py:485 +msgid "An error occurred during unlocking" +msgstr "Wystąpił błąd podczas odblokowywania" + +#: rhodecode/controllers/admin/repos.py:476 +#, fuzzy +msgid "Unlocked" +msgstr "Odblokowany" + +#: rhodecode/controllers/admin/repos.py:479 +#, fuzzy +msgid "Locked" +msgstr "zablokowany" + +#: rhodecode/controllers/admin/repos.py:481 +#, python-format +msgid "Repository has been %s" +msgstr "Repozytoriów jest %s" + +#: rhodecode/controllers/admin/repos.py:505 msgid "Updated repository visibility in public journal" msgstr "Zaktualizowano widoczność stron w publicznym dzienniku" -#: rhodecode/controllers/admin/repos.py:447 +#: rhodecode/controllers/admin/repos.py:509 msgid "An error occurred during setting this repository in public journal" msgstr "Wystąpił błąd podczas ustawiania tego repozytorium w dzienniku publicznym" -#: rhodecode/controllers/admin/repos.py:452 -#: rhodecode/model/validators.py:300 +#: rhodecode/controllers/admin/repos.py:514 rhodecode/model/validators.py:302 msgid "Token mismatch" msgstr "Niezgodność tokenu" -#: rhodecode/controllers/admin/repos.py:465 +#: rhodecode/controllers/admin/repos.py:527 msgid "Pulled from remote location" msgstr "Pobieranie z lokalizacji zdalnej" -#: rhodecode/controllers/admin/repos.py:467 +#: rhodecode/controllers/admin/repos.py:529 msgid "An error occurred during pull from remote location" msgstr "Wystąpił błąd podczas pobierania z lokalizacji zdalnej" -#: rhodecode/controllers/admin/repos.py:483 +#: rhodecode/controllers/admin/repos.py:545 msgid "Nothing" msgstr "Brak" -#: rhodecode/controllers/admin/repos.py:485 +#: rhodecode/controllers/admin/repos.py:547 #, python-format msgid "Marked repo %s as fork of %s" msgstr "Oznaczono %s repo jako rozwidlenie %s" -#: rhodecode/controllers/admin/repos.py:489 +#: rhodecode/controllers/admin/repos.py:551 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" +#: rhodecode/controllers/admin/repos.py:590 +#, fuzzy +msgid "An error occurred during creation of field" +msgstr "wystąpił błąd podczas tworzenia użytkownika %s" + +#: rhodecode/controllers/admin/repos.py:604 +#, fuzzy +msgid "An error occurred during removal of field" +msgstr "Wystąpił błąd podczas zapisywania e-maila" + +#: rhodecode/controllers/admin/repos_groups.py:145 +#, fuzzy, python-format +msgid "Created repository 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" +#: rhodecode/controllers/admin/repos_groups.py:157 +#, fuzzy, python-format +msgid "Error occurred during creation of repository 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" +#: rhodecode/controllers/admin/repos_groups.py:214 +#: rhodecode/controllers/admin/repos_groups.py:286 +msgid "Cannot revoke permission for yourself as admin" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:220 +#, fuzzy, python-format +msgid "Updated repository 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" +#: rhodecode/controllers/admin/repos_groups.py:235 +#, fuzzy, python-format +msgid "Error occurred during update of repository group %s" msgstr "wystąpił błąd podczas aktualizacji grupy repo %s" -#: rhodecode/controllers/admin/repos_groups.py:198 +#: rhodecode/controllers/admin/repos_groups.py:253 #, 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" +#: rhodecode/controllers/admin/repos_groups.py:260 +#, fuzzy, python-format +msgid "This group contains %s subgroups and cannot be deleted" +msgstr "Ta grupa zawiera %s repozytorium i nie może być usunięta" + +#: rhodecode/controllers/admin/repos_groups.py:266 +#, fuzzy, python-format +msgid "Removed repository 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" +#: rhodecode/controllers/admin/repos_groups.py:271 +#, fuzzy, 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 +#: rhodecode/controllers/admin/repos_groups.py:297 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" +#: rhodecode/controllers/admin/repos_groups.py:318 +#, fuzzy +msgid "An error occurred during deletion of group user 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 +#: rhodecode/controllers/admin/settings.py:126 +#, fuzzy, 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:135 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" +msgid "Updated application settings" +msgstr "Aktualizacja ustawień aplikacji" + +#: rhodecode/controllers/admin/settings.py:170 +#: rhodecode/controllers/admin/settings.py:301 +#, fuzzy +msgid "Error occurred during updating application settings" msgstr "wystąpił błąd podczas aktualizacji ustawień aplikacji" -#: rhodecode/controllers/admin/settings.py:207 +#: rhodecode/controllers/admin/settings.py:216 msgid "Updated visualisation settings" msgstr "Aktualizacja ustawień wizualizacji" -#: rhodecode/controllers/admin/settings.py:212 -msgid "error occurred during updating visualisation settings" +#: rhodecode/controllers/admin/settings.py:221 +#, fuzzy +msgid "Error occurred during updating visualisation settings" msgstr "Wystąpił błąd podczas aktualizacji ustawień wizualizacji" -#: rhodecode/controllers/admin/settings.py:295 +#: rhodecode/controllers/admin/settings.py:297 msgid "Updated VCS settings" msgstr "Aktualizacja ustawień VCS" -#: rhodecode/controllers/admin/settings.py:309 +#: rhodecode/controllers/admin/settings.py:311 msgid "Added new hook" msgstr "Dodano nowy hook" -#: rhodecode/controllers/admin/settings.py:321 +#: rhodecode/controllers/admin/settings.py:323 msgid "Updated hooks" msgstr "Aktualizacja hooku" -#: rhodecode/controllers/admin/settings.py:325 -msgid "error occurred during hook creation" +#: rhodecode/controllers/admin/settings.py:327 +#, fuzzy +msgid "Error occurred during hook creation" msgstr "Wystąpił błąd podczas tworzenia hooku" -#: rhodecode/controllers/admin/settings.py:344 +#: rhodecode/controllers/admin/settings.py:346 msgid "Email task created" msgstr "E-mail został wysłany" -#: rhodecode/controllers/admin/settings.py:399 +#: rhodecode/controllers/admin/settings.py:410 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 +msgstr "" +"Nie możesz edytować tego użytkownika ponieważ jest kluczowy dla całej " +"aplikacji" + +#: rhodecode/controllers/admin/settings.py:452 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" +#: rhodecode/controllers/admin/settings.py:467 +#: rhodecode/controllers/admin/users.py:198 +#, fuzzy, 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" +#, fuzzy, 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" +#, fuzzy, 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" +#: rhodecode/controllers/admin/users.py:214 +#, fuzzy +msgid "Successfully deleted user" msgstr "użytkownik został usunięty" -#: rhodecode/controllers/admin/users.py:217 +#: rhodecode/controllers/admin/users.py:219 msgid "An error occurred during deletion of user" msgstr "Wystąpił błąd podczas usuwania użytkownika" -#: rhodecode/controllers/admin/users.py:231 +#: rhodecode/controllers/admin/users.py:233 msgid "You can't edit this user" msgstr "Nie możesz edytować tego użytkownika" -#: rhodecode/controllers/admin/users.py:272 +#: rhodecode/controllers/admin/users.py:276 msgid "Granted 'repository create' permission to user" msgstr "Przyznano użytkownikowi uprawnienie do 'tworzenia repozytorium'" -#: rhodecode/controllers/admin/users.py:277 +#: rhodecode/controllers/admin/users.py:281 msgid "Revoked 'repository create' permission to user" msgstr "Cofnięto użytkownikowi uprawnienie do 'tworzenia repozytorium'" -#: rhodecode/controllers/admin/users.py:283 +#: rhodecode/controllers/admin/users.py:287 msgid "Granted 'repository fork' permission to user" msgstr "Przyznano użytkownikowi uprawnienie do 'tworzenia rozgałęzień'" -#: rhodecode/controllers/admin/users.py:288 +#: rhodecode/controllers/admin/users.py:292 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 +#: rhodecode/controllers/admin/users.py:298 +#: rhodecode/controllers/admin/users_groups.py:281 msgid "An error occurred during permissions saving" msgstr "Wystąpił błąd podczas zapisywania uprawnień" -#: rhodecode/controllers/admin/users.py:309 +#: rhodecode/controllers/admin/users.py:312 #, python-format msgid "Added email %s to user" msgstr "Dodano e-mail %s do użytkownika" -#: rhodecode/controllers/admin/users.py:315 +#: rhodecode/controllers/admin/users.py:318 msgid "An error occurred during email saving" msgstr "Wystąpił błąd podczas zapisywania e-maila" -#: rhodecode/controllers/admin/users.py:325 +#: rhodecode/controllers/admin/users.py:328 msgid "Removed email from user" msgstr "Usunięto e-mail użytkownikowi" +#: rhodecode/controllers/admin/users.py:341 +#, fuzzy, python-format +msgid "Added ip %s to user" +msgstr "Dodano e-mail %s do użytkownika" + +#: rhodecode/controllers/admin/users.py:347 +#, fuzzy +msgid "An error occurred during ip saving" +msgstr "Wystąpił błąd podczas zapisywania e-maila" + +#: rhodecode/controllers/admin/users.py:359 +#, fuzzy +msgid "Removed ip from user" +msgstr "Usunięto e-mail użytkownikowi" + #: rhodecode/controllers/admin/users_groups.py:86 -#, python-format -msgid "created users group %s" +#, fuzzy, python-format +msgid "Created user 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" +#, fuzzy, python-format +msgid "Error occurred during creation of user 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" +#: rhodecode/controllers/admin/users_groups.py:166 +#, fuzzy, python-format +msgid "Updated user 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" +#: rhodecode/controllers/admin/users_groups.py:188 +#, fuzzy, python-format +msgid "Error occurred during update of user 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" +#: rhodecode/controllers/admin/users_groups.py:205 +#, fuzzy +msgid "Successfully deleted user 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" +#: rhodecode/controllers/admin/users_groups.py:210 +#, fuzzy +msgid "An error occurred during deletion of user 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" +#: rhodecode/controllers/admin/users_groups.py:259 +#, fuzzy +msgid "Granted 'repository create' permission to user 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" +#: rhodecode/controllers/admin/users_groups.py:264 +#, fuzzy +msgid "Revoked 'repository create' permission to user 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" +#: rhodecode/controllers/admin/users_groups.py:270 +#, fuzzy +msgid "Granted 'repository fork' permission to user 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" +#: rhodecode/controllers/admin/users_groups.py:275 +#, fuzzy +msgid "Revoked 'repository fork' permission to user group" msgstr "Cofnięto grupie użytkowników uprawnienia do 'tworzenia rozgałęzień'" -#: rhodecode/lib/auth.py:499 +#: rhodecode/lib/auth.py:530 +#, fuzzy, python-format +msgid "IP %s not allowed" +msgstr "Obserwatorzy %s" + +#: rhodecode/lib/auth.py:579 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 +#: rhodecode/lib/auth.py:620 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" +#: rhodecode/lib/diffs.py:66 +#, fuzzy +msgid "Binary file" msgstr "plik binarny" -#: rhodecode/lib/diffs.py:90 +#: rhodecode/lib/diffs.py:82 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 +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:92 msgid "No changes detected" msgstr "Nie wykryto zmian" -#: rhodecode/lib/helpers.py:374 +#: rhodecode/lib/helpers.py:394 #, python-format msgid "%a, %d %b %Y %H:%M:%S" msgstr "%d.%m.%Y, %H:%M:%S" -#: rhodecode/lib/helpers.py:486 +#: rhodecode/lib/helpers.py:506 msgid "True" msgstr "Prawda" -#: rhodecode/lib/helpers.py:490 +#: rhodecode/lib/helpers.py:509 msgid "False" msgstr "Fałsz" -#: rhodecode/lib/helpers.py:530 +#: rhodecode/lib/helpers.py:547 #, python-format msgid "Deleted branch: %s" msgstr "Usunięta gałąź: %s" -#: rhodecode/lib/helpers.py:533 +#: rhodecode/lib/helpers.py:550 #, python-format msgid "Created tag: %s" msgstr "Utworzony tag: %s" -#: rhodecode/lib/helpers.py:546 +#: rhodecode/lib/helpers.py:563 msgid "Changeset not found" msgstr "Nie znaleziono changeset" -#: rhodecode/lib/helpers.py:589 +#: rhodecode/lib/helpers.py:615 #, python-format msgid "Show all combined changesets %s->%s" msgstr "Pokaż wszystkie zestawienia zmian changesets %s->%s" -#: rhodecode/lib/helpers.py:595 +#: rhodecode/lib/helpers.py:621 msgid "compare view" msgstr "Wyświetl porównanie" -#: rhodecode/lib/helpers.py:615 +#: rhodecode/lib/helpers.py:641 msgid "and" msgstr "i" -#: rhodecode/lib/helpers.py:616 +#: rhodecode/lib/helpers.py:642 #, python-format msgid "%s more" msgstr "%s więcej" -#: rhodecode/lib/helpers.py:617 -#: rhodecode/templates/changelog/changelog.html:51 +#: rhodecode/lib/helpers.py:643 rhodecode/templates/changelog/changelog.html:44 msgid "revisions" msgstr "rewizja" -#: rhodecode/lib/helpers.py:641 +#: rhodecode/lib/helpers.py:667 #, python-format msgid "fork name %s" msgstr "nazwa rozgałęzienia %s" -#: rhodecode/lib/helpers.py:658 -#: rhodecode/templates/pullrequests/pullrequest_show.html:4 -#: rhodecode/templates/pullrequests/pullrequest_show.html:12 +#: rhodecode/lib/helpers.py:684 +#: rhodecode/templates/pullrequests/pullrequest_show.html:8 #, python-format msgid "Pull request #%s" msgstr "Połączonych gałęzi #%s" -#: rhodecode/lib/helpers.py:664 +#: rhodecode/lib/helpers.py:690 msgid "[deleted] repository" msgstr "[usunięte] repozytorium" -#: rhodecode/lib/helpers.py:666 -#: rhodecode/lib/helpers.py:676 +#: rhodecode/lib/helpers.py:692 rhodecode/lib/helpers.py:702 msgid "[created] repository" msgstr "[utworzone] repozytorium" -#: rhodecode/lib/helpers.py:668 +#: rhodecode/lib/helpers.py:694 msgid "[created] repository as fork" msgstr "[utworzone] repozytorium jako rozgałęzienie" -#: rhodecode/lib/helpers.py:670 -#: rhodecode/lib/helpers.py:678 +#: rhodecode/lib/helpers.py:696 rhodecode/lib/helpers.py:704 msgid "[forked] repository" msgstr "[rozgałęzione] repozytorium" -#: rhodecode/lib/helpers.py:672 -#: rhodecode/lib/helpers.py:680 +#: rhodecode/lib/helpers.py:698 rhodecode/lib/helpers.py:706 msgid "[updated] repository" msgstr "[zaktualizowane] repozytorium" -#: rhodecode/lib/helpers.py:674 +#: rhodecode/lib/helpers.py:700 msgid "[delete] repository" msgstr "[skasowane] repozytorium" -#: rhodecode/lib/helpers.py:682 +#: rhodecode/lib/helpers.py:708 msgid "[created] user" msgstr "[utworzony] użytkownik" -#: rhodecode/lib/helpers.py:684 +#: rhodecode/lib/helpers.py:710 msgid "[updated] user" msgstr "[zaktualizowany] użytkownik" -#: rhodecode/lib/helpers.py:686 -msgid "[created] users group" +#: rhodecode/lib/helpers.py:712 +#, fuzzy +msgid "[created] user group" msgstr "[utworzona] grupa użytkowników" -#: rhodecode/lib/helpers.py:688 -msgid "[updated] users group" +#: rhodecode/lib/helpers.py:714 +#, fuzzy +msgid "[updated] user group" msgstr "[zaktualizowana] grupa użytkowników" -#: rhodecode/lib/helpers.py:690 +#: rhodecode/lib/helpers.py:716 msgid "[commented] on revision in repository" msgstr "[komentarz] do zmiany w repozytorium" -#: rhodecode/lib/helpers.py:692 +#: rhodecode/lib/helpers.py:718 msgid "[commented] on pull request for" msgstr "[komentarz] wniosek o połączenie gałęzi" -#: rhodecode/lib/helpers.py:694 +#: rhodecode/lib/helpers.py:720 msgid "[closed] pull request for" msgstr "[zamknięty] wniosek o połączenie gałęzi" -#: rhodecode/lib/helpers.py:696 +#: rhodecode/lib/helpers.py:722 msgid "[pushed] into" msgstr "[wysłane zmiany] w" -#: rhodecode/lib/helpers.py:698 +#: rhodecode/lib/helpers.py:724 msgid "[committed via RhodeCode] into repository" msgstr "[committed przez RhodeCode] do repozytorium" -#: rhodecode/lib/helpers.py:700 +#: rhodecode/lib/helpers.py:726 msgid "[pulled from remote] into repository" msgstr "[pobieranie z zdalnego] do repozytorium" -#: rhodecode/lib/helpers.py:702 +#: rhodecode/lib/helpers.py:728 msgid "[pulled] from" msgstr "[pobrano] z" -#: rhodecode/lib/helpers.py:704 +#: rhodecode/lib/helpers.py:730 msgid "[started following] repository" msgstr "[start następnego] repozytorium" -#: rhodecode/lib/helpers.py:706 +#: rhodecode/lib/helpers.py:732 msgid "[stopped following] repository" msgstr "[zatrzymany po] repozytorium" -#: rhodecode/lib/helpers.py:883 +#: rhodecode/lib/helpers.py:910 #, python-format msgid " and %s more" msgstr "i %s więcej" -#: rhodecode/lib/helpers.py:887 +#: rhodecode/lib/helpers.py:914 msgid "No Files" msgstr "Brak Plików" -#: rhodecode/lib/helpers.py:1163 +#: rhodecode/lib/helpers.py:1198 #, 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/lib/utils2.py:403 +msgid "" +"%s repository is not mapped to db perhaps it was created or renamed from " +"the filesystem please run the application again in order to rescan " +"repositories" +msgstr "" +"%s repozytorium nie jest mapowane do db może zostało utworzone lub " +"zmienione z systemie plików proszę uruchomić aplikację ponownie, aby " +"ponownie przeskanować repozytoria" + +#: rhodecode/lib/unionrepo.py:193 +#, fuzzy +msgid "cannot create new union repository" +msgstr "[utworzone] repozytorium" + +#: rhodecode/lib/utils2.py:411 #, python-format msgid "%d year" msgid_plural "%d years" @@ -920,7 +1040,7 @@ msgstr[0] "%d rok" msgstr[1] "%d lata" msgstr[2] "%d lat" -#: rhodecode/lib/utils2.py:404 +#: rhodecode/lib/utils2.py:412 #, python-format msgid "%d month" msgid_plural "%d months" @@ -928,7 +1048,7 @@ msgstr[0] "%d miesiąc" msgstr[1] "%d miesięcy" msgstr[2] "%d miesięcy" -#: rhodecode/lib/utils2.py:405 +#: rhodecode/lib/utils2.py:413 #, python-format msgid "%d day" msgid_plural "%d days" @@ -936,7 +1056,7 @@ msgstr[0] "%d dzień" msgstr[1] "%d dni" msgstr[2] "%d dni" -#: rhodecode/lib/utils2.py:406 +#: rhodecode/lib/utils2.py:414 #, python-format msgid "%d hour" msgid_plural "%d hours" @@ -944,7 +1064,7 @@ msgstr[0] "%d godzina" msgstr[1] "%d godziny" msgstr[2] "%d godzin" -#: rhodecode/lib/utils2.py:407 +#: rhodecode/lib/utils2.py:415 #, python-format msgid "%d minute" msgid_plural "%d minutes" @@ -952,7 +1072,7 @@ msgstr[0] "%d minuta" msgstr[1] "%d minuty" msgstr[2] "%d minut" -#: rhodecode/lib/utils2.py:408 +#: rhodecode/lib/utils2.py:416 #, python-format msgid "%d second" msgid_plural "%d seconds" @@ -960,143 +1080,183 @@ msgstr[0] "%d sekunda" msgstr[1] "%d sekund" msgstr[2] "%d sekund" -#: rhodecode/lib/utils2.py:424 +#: rhodecode/lib/utils2.py:432 #, python-format msgid "in %s" msgstr "w %s" -#: rhodecode/lib/utils2.py:426 +#: rhodecode/lib/utils2.py:434 #, python-format msgid "%s ago" msgstr "%s temu" -#: rhodecode/lib/utils2.py:428 +#: rhodecode/lib/utils2.py:436 #, python-format msgid "in %s and %s" msgstr "w %s i %s" -#: rhodecode/lib/utils2.py:431 +#: rhodecode/lib/utils2.py:439 #, python-format msgid "%s and %s ago" msgstr "%s i %s temu" -#: rhodecode/lib/utils2.py:434 +#: rhodecode/lib/utils2.py:442 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:1183 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1183 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1289 rhodecode/model/db.py:1388 msgid "Repository no access" msgstr "Brak dostępu do repozytorium" #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 -#: rhodecode/model/db.py:1184 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1184 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1290 rhodecode/model/db.py:1389 msgid "Repository read access" msgstr "Repozytorium do odczytu" #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 -#: rhodecode/model/db.py:1185 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1185 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1291 rhodecode/model/db.py:1390 msgid "Repository write access" msgstr "Repozytorium do zapisu" #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 -#: rhodecode/model/db.py:1186 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1186 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1292 rhodecode/model/db.py:1391 msgid "Repository admin access" msgstr "Administracja dostępu do repozytorium" #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 -#: rhodecode/model/db.py:1188 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1188 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1294 msgid "Repositories Group no access" msgstr "Grupy repozytoriów brak dostępu" #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 -#: rhodecode/model/db.py:1189 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1189 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1295 msgid "Repositories Group read access" msgstr "Grupy repozytoriów dostęp do odczytu" #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 -#: rhodecode/model/db.py:1190 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1190 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1296 msgid "Repositories Group write access" msgstr "Grupy repozytoriów dostęp do zapisu" #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 -#: rhodecode/model/db.py:1191 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1191 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1297 msgid "Repositories Group admin access" msgstr "Repozytoria Grupy dostęp administratora" #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 -#: rhodecode/model/db.py:1193 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1193 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1299 rhodecode/model/db.py:1398 msgid "RhodeCode Administrator" msgstr "Administrator Repo" #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 -#: rhodecode/model/db.py:1194 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1194 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1300 rhodecode/model/db.py:1399 msgid "Repository creation disabled" msgstr "Repozytorium wyłączone" #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 -#: rhodecode/model/db.py:1195 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1195 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1301 rhodecode/model/db.py:1400 msgid "Repository creation enabled" msgstr "Repozytorium włączone" #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 -#: rhodecode/model/db.py:1196 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1196 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1302 rhodecode/model/db.py:1401 msgid "Repository forking disabled" msgstr "Rozwidlenie repozytorium wyłączone" #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 -#: rhodecode/model/db.py:1197 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1197 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303 rhodecode/model/db.py:1402 msgid "Repository forking enabled" msgstr "Rozwidlenie repozytorium włączone" #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 -#: rhodecode/model/db.py:1198 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1198 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304 rhodecode/model/db.py:1403 msgid "Register disabled" msgstr "Rejestracja wyłączona" #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 -#: rhodecode/model/db.py:1199 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1199 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305 rhodecode/model/db.py:1404 msgid "Register new user with RhodeCode with manual activation" msgstr "Rejestracja nowego użytkownika na stronie z ręczną aktywacją" #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 -#: rhodecode/model/db.py:1202 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1202 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308 rhodecode/model/db.py:1407 msgid "Register new user with RhodeCode with auto activation" msgstr "Rejestracja nowego użytkownika na stronie z automatyczną aktywacją" #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 -#: rhodecode/model/db.py:1643 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1643 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1749 rhodecode/model/db.py:1838 msgid "Not Reviewed" msgstr "Brak Korekty" #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 -#: rhodecode/model/db.py:1644 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1644 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1750 rhodecode/model/db.py:1839 msgid "Approved" msgstr "Zaakceptowano" #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 -#: rhodecode/model/db.py:1645 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1645 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1751 rhodecode/model/db.py:1840 msgid "Rejected" msgstr "Odrzucono" #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 -#: rhodecode/model/db.py:1646 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1646 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1752 rhodecode/model/db.py:1841 msgid "Under Review" msgstr "Objęty Przeglądem" -#: rhodecode/model/comment.py:110 +#: rhodecode/model/comment.py:75 #, python-format msgid "on line %s" msgstr "widziany %s" -#: rhodecode/model/comment.py:173 +#: rhodecode/model/comment.py:219 msgid "[Mention]" msgstr "[Wymieniony]" +#: rhodecode/model/db.py:1252 +msgid "top level" +msgstr "" + +#: rhodecode/model/db.py:1393 +#, fuzzy +msgid "Repository group no access" +msgstr "Grupy repozytoriów brak dostępu" + +#: rhodecode/model/db.py:1394 +#, fuzzy +msgid "Repository group read access" +msgstr "Grupy repozytoriów dostęp do odczytu" + +#: rhodecode/model/db.py:1395 +#, fuzzy +msgid "Repository group write access" +msgstr "Grupy repozytoriów dostęp do zapisu" + +#: rhodecode/model/db.py:1396 +#, fuzzy +msgid "Repository group admin access" +msgstr "Repozytoria Grupy dostęp administratora" + #: rhodecode/model/forms.py:43 msgid "Please enter a login" msgstr "Wpisz login" @@ -1115,198 +1275,257 @@ msgstr "Wpisz hasło" 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" +#, fuzzy, python-format +msgid "%(user)s commented on changeset at %(when)s" +msgstr "%(user)s skomentował zatwierdzenie %(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 +#, fuzzy, python-format +msgid "%(user)s sent message at %(when)s" +msgstr "%(user)s wysłał wiadomość do %(when)s" + +#: rhodecode/model/notification.py:226 +#, fuzzy, python-format +msgid "%(user)s mentioned you at %(when)s" +msgstr "%(user)s wspomniał o Tobie w %(when)s" + +#: rhodecode/model/notification.py:227 +#, fuzzy, python-format +msgid "%(user)s registered in RhodeCode at %(when)s" +msgstr "%(user)s zarejestrował na stronie w %(when)s" + +#: rhodecode/model/notification.py:228 +#, fuzzy, python-format +msgid "%(user)s opened new pull request at %(when)s" +msgstr "%(user)s otworzył nowe połączenie gałęzi w %(when)s" + +#: rhodecode/model/notification.py:229 +#, fuzzy, python-format +msgid "%(user)s commented on pull request at %(when)s" +msgstr "%(user)s skomentował nowe połączenie gałęzi w %(when)s" + +#: rhodecode/model/pull_request.py:104 +#, fuzzy, python-format +msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s" +msgstr "%(user)s chce żeby przejrzeć nowe gałęzie #%(pr_id)s: %(pr_title)s" + +#: rhodecode/model/scm.py:598 msgid "latest tip" msgstr "ostatni tip" #: rhodecode/model/user.py:232 -msgid "new user registration" +#, fuzzy +msgid "New user registration" msgstr "nowy użytkownik się zarejestrował" -#: rhodecode/model/user.py:257 -#: rhodecode/model/user.py:281 -#: rhodecode/model/user.py:303 +#: rhodecode/model/user.py:257 rhodecode/model/user.py:281 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:327 +msgstr "" +"Nie możesz edytować tego użytkownika ponieważ jest kluczowy dla całej " +"aplikacji" + +#: rhodecode/model/user.py:303 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:333 +msgstr "" +"Nie możesz usunąć tego użytkownika ponieważ jest kluczowy dla całej " +"aplikacji" + +#: rhodecode/model/user.py:309 #, python-format -msgid "user \"%s\" still owns %s repositories and cannot be removed. Switch owners or remove those repositories. %s" -msgstr "użytkownik \"%s\" wciąż posiada repozytoria następujące %s i nie może zostać usunięty. Zmień właściciela lub usuń te repozytoria. %s" - -#: rhodecode/model/validators.py:36 -#: rhodecode/model/validators.py:37 +msgid "" +"user \"%s\" still owns %s repositories and cannot be removed. Switch " +"owners or remove those repositories. %s" +msgstr "" +"użytkownik \"%s\" wciąż posiada repozytoria następujące %s i nie może " +"zostać usunięty. Zmień właściciela lub usuń te repozytoria. %s" + +#: rhodecode/model/user.py:334 +#, fuzzy +msgid "Password reset link" +msgstr "łącze resetowania hasła" + +#: rhodecode/model/user.py:366 +#, fuzzy +msgid "Your new password" +msgstr "Nowe hasło" + +#: rhodecode/model/user.py:367 +#, python-format +msgid "Your new RhodeCode password:%s" +msgstr "" + +#: rhodecode/model/validators.py:38 rhodecode/model/validators.py:39 msgid "Value cannot be an empty list" msgstr "Wartość listy nie może być pusta" -#: rhodecode/model/validators.py:83 +#: rhodecode/model/validators.py:85 #, python-format msgid "Username \"%(username)s\" already exists" msgstr "Użytkownik \"%(username)s\" już istnieje" -#: rhodecode/model/validators.py:85 +#: rhodecode/model/validators.py:87 #, 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 +#: rhodecode/model/validators.py:89 +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:117 #, 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" +#: rhodecode/model/validators.py:136 +#, fuzzy +msgid "Invalid user 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 +#, fuzzy, python-format +msgid "User group \"%(usergroup)s\" already exists" +msgstr "Nazwa grupy \"%(usergroup)s\" już istnieje" + +#: rhodecode/model/validators.py:139 +#, fuzzy +msgid "" +"user 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:177 msgid "Cannot assign this group as parent" msgstr "Nie można przypisać do tej grupy jako rodzic" -#: rhodecode/model/validators.py:176 +#: rhodecode/model/validators.py:178 #, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "Nazwa grupy \"%(group_name)s\" już istnieje" -#: rhodecode/model/validators.py:178 +#: rhodecode/model/validators.py:180 #, 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 +#: rhodecode/model/validators.py:238 msgid "Invalid characters (non-ascii) in password" msgstr "Nieprawidłowe znaki (nie-ascii) w haśle" -#: rhodecode/model/validators.py:251 +#: rhodecode/model/validators.py:253 msgid "Passwords do not match" msgstr "Hasła różnią się" -#: rhodecode/model/validators.py:268 +#: rhodecode/model/validators.py:270 msgid "invalid password" msgstr "nieprawidłowe hasło" -#: rhodecode/model/validators.py:269 +#: rhodecode/model/validators.py:271 msgid "invalid user name" msgstr "niepoprawna nazwa użytkownika" -#: rhodecode/model/validators.py:270 +#: rhodecode/model/validators.py:272 msgid "Your account is disabled" msgstr "Twoje konto jest wyłączone" -#: rhodecode/model/validators.py:314 +#: rhodecode/model/validators.py:316 #, python-format msgid "Repository name %(repo)s is disallowed" msgstr "Nazwa repozytorium %(repo)s jest zabroniona" -#: rhodecode/model/validators.py:316 +#: rhodecode/model/validators.py:318 #, 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" +msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" +msgstr "Repozytorium \"%(repo)s\" już istnieje w grupie \"%(group)s\"" + +#: rhodecode/model/validators.py:321 +#, fuzzy, python-format +msgid "Repository group with name \"%(repo)s\" already exists" msgstr "Grupa repozytoriów z nazwą \"%(repo)s\" już istnieje" -#: rhodecode/model/validators.py:432 +#: rhodecode/model/validators.py:438 msgid "invalid clone url" msgstr "nieprawidłowe url klonowania" -#: rhodecode/model/validators.py:433 +#: rhodecode/model/validators.py:439 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 +#: rhodecode/model/validators.py:464 msgid "Fork have to be the same type as parent" msgstr "Fork musi być tego samego typu, jak rodzic" -#: rhodecode/model/validators.py:473 +#: rhodecode/model/validators.py:479 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" +#: rhodecode/model/validators.py:481 +#, fuzzy +msgid "no permission to create repository in root location" +msgstr "Nie masz uprawnień do tworzenia repozytorium w tej grupie" + +#: rhodecode/model/validators.py:518 +#, fuzzy +msgid "You don't have permissions to create a group in this location" +msgstr "Nie masz uprawnień do tworzenia repozytorium w tej grupie" + +#: rhodecode/model/validators.py:557 +#, fuzzy +msgid "This username or user group name is not valid" msgstr "Ta nazwa użytkownika lub grupy użytkowników nie jest prawidłowa" -#: rhodecode/model/validators.py:591 +#: rhodecode/model/validators.py:650 msgid "This is not a valid path" msgstr "To nie jest prawidłowa ścieżka" -#: rhodecode/model/validators.py:606 +#: rhodecode/model/validators.py:665 msgid "This e-mail address is already taken" msgstr "Ten adres e-mail jest już zajęty" -#: rhodecode/model/validators.py:626 +#: rhodecode/model/validators.py:685 #, python-format msgid "e-mail \"%(email)s\" does not exist." msgstr "e-mail \"%(email)s\" nie istnieje." -#: rhodecode/model/validators.py:663 -msgid "The LDAP Login attribute of the CN must be specified - this is the name of the attribute that is equivalent to \"username\"" -msgstr "Atrybut logowania CN do LDAP należy określić, jest to nazwa atrybutu, który jest odpowiednikiem \"username\"" - -#: rhodecode/model/validators.py:682 +#: rhodecode/model/validators.py:722 +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:735 #, 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 +#: rhodecode/model/validators.py:767 +msgid "Please enter a valid IPv4 or IpV6 address" +msgstr "" + +#: rhodecode/model/validators.py:768 +#, python-format +msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" +msgstr "" + +#: rhodecode/model/validators.py:800 +msgid "Key name can only consist of letters, underscore, dash or numbers" +msgstr "" + +#: rhodecode/templates/index.html:5 msgid "Dashboard" msgstr "Repozytorium" @@ -1315,208 +1534,229 @@ msgstr "Repozytorium" #: 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/bookmarks/bookmarks.html:9 #: rhodecode/templates/branches/branches.html:9 #: rhodecode/templates/journal/journal.html:9 -#: rhodecode/templates/journal/journal.html:48 -#: rhodecode/templates/tags/tags.html:10 +#: rhodecode/templates/journal/journal.html:46 +#: rhodecode/templates/journal/journal.html:47 +#: rhodecode/templates/tags/tags.html:9 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/index_base.html:18 +#: rhodecode/templates/admin/repos/repo_add.html:5 #: 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 +msgid "Add repository" +msgstr "Dodaj repozytorium" + +#: rhodecode/templates/index_base.html:15 +#: rhodecode/templates/index_base.html:20 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:31 +#, fuzzy +msgid "Add group" +msgstr "edytuj grupy repo" + +#: rhodecode/templates/index_base.html:27 +#, fuzzy +msgid "Edit group" +msgstr "edytuj grupy repo" + +#: rhodecode/templates/index_base.html:27 +msgid "You have admin right to this group, and can edit it" +msgstr "" + +#: rhodecode/templates/index_base.html:40 +#: rhodecode/templates/index_base.html:140 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:33 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:38 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:43 #: rhodecode/templates/admin/users_groups/users_group_add.html:32 #: rhodecode/templates/admin/users_groups/users_group_edit.html:33 +#: rhodecode/templates/admin/users_groups/users_groups.html:34 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/index_base.html:41 +#: rhodecode/templates/index_base.html:83 +#: rhodecode/templates/index_base.html:142 +#: rhodecode/templates/index_base.html:180 +#: rhodecode/templates/index_base.html:270 #: 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 +#: rhodecode/templates/admin/repos/repos.html:73 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:42 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:47 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:44 +#: rhodecode/templates/forks/fork.html:56 +#: rhodecode/templates/pullrequests/pullrequest.html:101 +#: rhodecode/templates/summary/summary.html:106 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/index_base.html:51 +#: 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_show.html:57 +#: rhodecode/templates/forks/fork.html:47 +msgid "Repository group" +msgstr "Repozytorium grupy" + +#: rhodecode/templates/index_base.html:82 +#: rhodecode/templates/index_base.html:178 +#: rhodecode/templates/index_base.html:268 #: 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/admin/repos/repos.html:71 +#: rhodecode/templates/admin/users/user_edit_my_account.html:172 +#: rhodecode/templates/base/perms_summary.html:14 +#: rhodecode/templates/bookmarks/bookmarks.html:34 #: rhodecode/templates/bookmarks/bookmarks_data.html:6 -#: rhodecode/templates/branches/branches.html:50 +#: rhodecode/templates/branches/branches.html:47 #: rhodecode/templates/branches/branches_data.html:6 #: rhodecode/templates/files/files_browser.html:47 -#: rhodecode/templates/journal/journal.html:70 -#: rhodecode/templates/journal/journal.html:196 -#: 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/journal/journal.html:193 +#: rhodecode/templates/journal/journal.html:296 +#: rhodecode/templates/summary/summary.html:55 +#: rhodecode/templates/summary/summary.html:124 +#: rhodecode/templates/tags/tags.html:48 #: rhodecode/templates/tags/tags_data.html:6 msgid "Name" msgstr "Nazwa" -#: rhodecode/templates/index_base.html:73 +#: rhodecode/templates/index_base.html:84 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:198 +#: rhodecode/templates/index_base.html:85 +#: rhodecode/templates/index_base.html:183 +#: rhodecode/templates/index_base.html:273 +#: rhodecode/templates/admin/repos/repos.html:74 +#: rhodecode/templates/admin/users/user_edit_my_account.html:174 +#: rhodecode/templates/journal/journal.html:195 +#: rhodecode/templates/journal/journal.html:298 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/index_base.html:86 +#: rhodecode/templates/index_base.html:185 +#: rhodecode/templates/index_base.html:275 #: rhodecode/templates/admin/repos/repo_edit.html:121 -#: rhodecode/templates/admin/repos/repos.html:73 +#: rhodecode/templates/admin/repos/repos.html:76 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 +#: rhodecode/templates/index_base.html:87 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/index_base.html:171 +#: rhodecode/templates/index_base.html:209 +#: rhodecode/templates/index_base.html:296 +#: rhodecode/templates/admin/repos/repos.html:97 +#: rhodecode/templates/admin/users/user_edit_my_account.html:196 #: rhodecode/templates/admin/users/users.html:107 -#: rhodecode/templates/bookmarks/bookmarks.html:60 -#: rhodecode/templates/branches/branches.html:76 -#: rhodecode/templates/journal/journal.html:221 -#: rhodecode/templates/tags/tags.html:77 +#: rhodecode/templates/bookmarks/bookmarks.html:58 +#: rhodecode/templates/branches/branches.html:73 +#: rhodecode/templates/journal/journal.html:217 +#: rhodecode/templates/journal/journal.html:320 +#: rhodecode/templates/tags/tags.html:74 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/index_base.html:172 +#: rhodecode/templates/index_base.html:210 +#: rhodecode/templates/index_base.html:297 +#: rhodecode/templates/admin/repos/repos.html:98 +#: rhodecode/templates/admin/users/user_edit_my_account.html:197 #: rhodecode/templates/admin/users/users.html:108 -#: rhodecode/templates/bookmarks/bookmarks.html:61 -#: rhodecode/templates/branches/branches.html:77 -#: rhodecode/templates/journal/journal.html:222 -#: rhodecode/templates/tags/tags.html:78 +#: rhodecode/templates/bookmarks/bookmarks.html:59 +#: rhodecode/templates/branches/branches.html:74 +#: rhodecode/templates/journal/journal.html:218 +#: rhodecode/templates/journal/journal.html:321 +#: rhodecode/templates/tags/tags.html:75 msgid "Click to sort descending" msgstr "Kliknij, aby posortować malejąco" -#: rhodecode/templates/index_base.html:177 -#: rhodecode/templates/index_base.html:267 +#: rhodecode/templates/index_base.html:181 +#: rhodecode/templates/index_base.html:271 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/index_base.html:211 +#: rhodecode/templates/admin/repos/repos.html:99 +#: rhodecode/templates/admin/users/user_edit_my_account.html:198 #: rhodecode/templates/admin/users/users.html:109 -#: rhodecode/templates/bookmarks/bookmarks.html:62 -#: rhodecode/templates/branches/branches.html:78 -#: rhodecode/templates/journal/journal.html:223 -#: rhodecode/templates/tags/tags.html:79 +#: rhodecode/templates/bookmarks/bookmarks.html:60 +#: rhodecode/templates/branches/branches.html:75 +#: rhodecode/templates/journal/journal.html:219 +#: rhodecode/templates/journal/journal.html:322 +#: rhodecode/templates/tags/tags.html:76 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/index_base.html:212 +#: rhodecode/templates/index_base.html:299 +#: rhodecode/templates/admin/repos/repos.html:100 +#: rhodecode/templates/admin/users/user_edit_my_account.html:199 #: rhodecode/templates/admin/users/users.html:110 -#: rhodecode/templates/bookmarks/bookmarks.html:63 -#: rhodecode/templates/branches/branches.html:79 -#: rhodecode/templates/journal/journal.html:224 -#: rhodecode/templates/tags/tags.html:80 +#: rhodecode/templates/bookmarks/bookmarks.html:61 +#: rhodecode/templates/branches/branches.html:76 +#: rhodecode/templates/journal/journal.html:220 +#: rhodecode/templates/journal/journal.html:323 +#: rhodecode/templates/tags/tags.html:77 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/index_base.html:213 +#: rhodecode/templates/index_base.html:300 +#: rhodecode/templates/admin/repos/repos.html:101 +#: rhodecode/templates/admin/users/user_edit_my_account.html:58 +#: rhodecode/templates/admin/users/user_edit_my_account.html:200 #: rhodecode/templates/admin/users/users.html:111 -#: rhodecode/templates/bookmarks/bookmarks.html:64 -#: rhodecode/templates/branches/branches.html:80 -#: rhodecode/templates/journal/journal.html:62 -#: rhodecode/templates/journal/journal.html:225 -#: rhodecode/templates/tags/tags.html:81 +#: rhodecode/templates/bookmarks/bookmarks.html:62 +#: rhodecode/templates/branches/branches.html:77 +#: rhodecode/templates/journal/journal.html:221 +#: rhodecode/templates/journal/journal.html:324 +#: rhodecode/templates/tags/tags.html:78 msgid "Loading..." msgstr "Wczytywanie..." -#: rhodecode/templates/login.html:5 -#: rhodecode/templates/login.html:54 -msgid "Sign In" +#: rhodecode/templates/index_base.html:298 +#, fuzzy +msgid "No repositories found." +msgstr "grupy w repozytorium" + +#: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:227 +msgid "Log 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 +#, python-format +msgid "Log In to %s" +msgstr "" + +#: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20 #: rhodecode/templates/admin/admin_log.html:5 #: rhodecode/templates/admin/users/user_add.html:32 -#: rhodecode/templates/admin/users/user_edit.html:50 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26 -#: rhodecode/templates/base/base.html:83 -#: rhodecode/templates/summary/summary.html:131 +#: rhodecode/templates/admin/users/user_edit.html:57 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:31 +#: rhodecode/templates/admin/users/users.html:77 +#: rhodecode/templates/base/base.html:203 +#: rhodecode/templates/summary/summary.html:123 msgid "Username" msgstr "Nazwa użytkownika" -#: rhodecode/templates/login.html:40 -#: rhodecode/templates/register.html:29 +#: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29 #: rhodecode/templates/admin/ldap/ldap.html:46 #: rhodecode/templates/admin/users/user_add.html:41 -#: rhodecode/templates/base/base.html:92 +#: rhodecode/templates/base/base.html:212 msgid "Password" msgstr "Hasło" @@ -1524,18 +1764,22 @@ msgstr "Hasło" msgid "Remember me" msgstr "Zapamiętaj mnie" +#: rhodecode/templates/login.html:54 +msgid "Sign In" +msgstr "Zaloguj się" + #: 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 +#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:223 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" +#, fuzzy +msgid "Password Reset" +msgstr "łącze resetowania hasła" #: rhodecode/templates/password_reset.html:11 msgid "Reset your password to" @@ -1553,8 +1797,7 @@ msgstr "Zresetuj swoje hasło" msgid "Password reset link will be send to matching email address" msgstr "Link do zresetowania hasła zostanie wysłany na adres e-mail" -#: rhodecode/templates/register.html:5 -#: rhodecode/templates/register.html:74 +#: rhodecode/templates/register.html:5 rhodecode/templates/register.html:74 msgid "Sign Up" msgstr "Zarejestruj się" @@ -1568,23 +1811,23 @@ 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 +#: rhodecode/templates/admin/users/user_edit.html:97 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62 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 +#: rhodecode/templates/admin/users/user_edit.html:106 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71 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 +#: rhodecode/templates/admin/users/user_edit.html:115 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80 +#: rhodecode/templates/summary/summary.html:125 msgid "Email" msgstr "E-mail" @@ -1596,44 +1839,31 @@ msgstr "Twoje konto zostanie aktywowane 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/repo_switcher_list.html:10 #: 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 +#: rhodecode/templates/data_table/_dt_elements.html:61 +#: rhodecode/templates/summary/summary.html:77 msgid "Private repository" msgstr "Prywatne repozytorium" -#: rhodecode/templates/repo_switcher_list.html:16 +#: rhodecode/templates/repo_switcher_list.html:12 +#: rhodecode/templates/data_table/_dt_elements.html:63 +#: rhodecode/templates/summary/summary.html:79 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" @@ -1641,6 +1871,7 @@ msgstr "Nie ma jeszcze zakładek" #: rhodecode/templates/admin/admin.html:5 #: rhodecode/templates/admin/admin.html:13 +#: rhodecode/templates/base/base.html:68 msgid "Admin journal" msgstr "Dziennik administratora" @@ -1663,11 +1894,13 @@ msgstr[1] "%s wejść" msgstr[2] "%s wejść" #: 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 +#: rhodecode/templates/admin/repos/repos.html:77 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 +#: rhodecode/templates/admin/users/user_edit_my_account.html:176 +#: rhodecode/templates/admin/users/users.html:87 +#: rhodecode/templates/admin/users_groups/users_groups.html:37 +#: rhodecode/templates/journal/journal.html:197 +#: rhodecode/templates/journal/journal.html:300 msgid "Action" msgstr "Działanie" @@ -1677,11 +1910,11 @@ msgid "Repository" msgstr "Repozytorium" #: rhodecode/templates/admin/admin_log.html:8 -#: rhodecode/templates/bookmarks/bookmarks.html:37 +#: rhodecode/templates/bookmarks/bookmarks.html:35 #: rhodecode/templates/bookmarks/bookmarks_data.html:7 -#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches.html:48 #: rhodecode/templates/branches/branches_data.html:7 -#: rhodecode/templates/tags/tags.html:52 +#: rhodecode/templates/tags/tags.html:49 #: rhodecode/templates/tags/tags_data.html:7 msgid "Date" msgstr "Data" @@ -1700,6 +1933,7 @@ msgid "Repositories defaults" msgstr "Repozytoria domyślne" #: rhodecode/templates/admin/defaults/defaults.html:11 +#: rhodecode/templates/base/base.html:75 msgid "Defaults" msgstr "Domyślne" @@ -1712,10 +1946,13 @@ 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/forks/fork.html:69 +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 @@ -1739,7 +1976,7 @@ 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 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72 msgid "Enable locking" msgstr "Włącz blokowanie" @@ -1750,14 +1987,18 @@ 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/permissions/permissions.html:92 +#: rhodecode/templates/admin/repos/repo_edit.html:148 +#: rhodecode/templates/admin/repos/repo_edit.html:173 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:80 #: 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/user_add.html:94 +#: rhodecode/templates/admin/users/user_edit.html:140 +#: rhodecode/templates/admin/users/user_edit.html:185 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:88 +#: rhodecode/templates/admin/users_groups/users_group_add.html:49 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:90 #: rhodecode/templates/admin/users_groups/users_group_edit.html:135 -#: rhodecode/templates/settings/repo_settings.html:94 msgid "Save" msgstr "Zapisz" @@ -1766,8 +2007,11 @@ msgid "LDAP administration" msgstr "Administracja LDAP" #: rhodecode/templates/admin/ldap/ldap.html:11 -msgid "Ldap" -msgstr "Ldap" +#: rhodecode/templates/admin/users/users.html:86 +#: rhodecode/templates/base/base.html:74 +#, fuzzy +msgid "LDAP" +msgstr "ldap" #: rhodecode/templates/admin/ldap/ldap.html:28 msgid "Connection settings" @@ -1847,8 +2091,7 @@ msgid "Comments" msgstr "Komentarze" #: rhodecode/templates/admin/notifications/notifications.html:31 -#: rhodecode/templates/base/base.html:267 -#: rhodecode/templates/base/base.html:269 +#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 msgid "Pull requests" msgstr "Połączone gałęzie" @@ -1866,6 +2109,7 @@ msgid "Show notification" msgstr "Pokaż powiadomienia" #: rhodecode/templates/admin/notifications/show_notification.html:9 +#: rhodecode/templates/base/base.html:241 msgid "Notifications" msgstr "Powiadomienia" @@ -1874,11 +2118,12 @@ 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/repos/repo_edit.html:158 +#: rhodecode/templates/admin/repos/repo_edit.html:165 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64 +#: rhodecode/templates/admin/users/user_edit.html:150 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100 -#: rhodecode/templates/settings/repo_settings.html:86 +#: rhodecode/templates/base/base.html:73 msgid "Permissions" msgstr "Uprawnienia" @@ -1891,26 +2136,32 @@ 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." +#, fuzzy +msgid "" +"All default permissions on each repository will be reset to chosen " +"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" +#, fuzzy +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." +#, fuzzy +msgid "" +"All default permissions on each repository group will be reset to chosen " +"permission, note that all custom default permission on repository groups " +"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" @@ -1924,40 +2175,99 @@ msgstr "Tworzenie repozytorium" 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 +#: rhodecode/templates/admin/permissions/permissions.html:93 +#: rhodecode/templates/admin/permissions/permissions.html:154 +#: rhodecode/templates/admin/repos/repo_edit.html:149 +#: rhodecode/templates/admin/repos/repo_edit.html:174 +#: rhodecode/templates/admin/repos/repo_edit.html:388 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81 +#: rhodecode/templates/admin/settings/settings.html:115 +#: rhodecode/templates/admin/settings/settings.html:187 +#: rhodecode/templates/admin/settings/settings.html:278 +#: rhodecode/templates/admin/users/user_edit.html:141 +#: rhodecode/templates/admin/users/user_edit.html:186 +#: rhodecode/templates/admin/users/user_edit.html:235 +#: rhodecode/templates/admin/users/user_edit.html:283 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:89 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:136 +#: rhodecode/templates/files/files_add.html:80 +#: rhodecode/templates/files/files_edit.html:66 +#: rhodecode/templates/pullrequests/pullrequest.html:110 +msgid "Reset" +msgstr "Zresetuj" + +#: rhodecode/templates/admin/permissions/permissions.html:103 +#, fuzzy +msgid "Default User Permissions" +msgstr "Domyślne uprawnienia" + +#: rhodecode/templates/admin/permissions/permissions.html:113 +#: rhodecode/templates/admin/users/user_edit.html:244 +#, fuzzy +msgid "Allowed IP addresses" +msgstr "Adresy e-mail" + +#: rhodecode/templates/admin/permissions/permissions.html:127 +#: rhodecode/templates/admin/repos/repo_edit.html:347 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70 +#: rhodecode/templates/admin/users/user_edit.html:212 +#: rhodecode/templates/admin/users/user_edit.html:257 +#: rhodecode/templates/admin/users_groups/users_groups.html:46 +#: rhodecode/templates/data_table/_dt_elements.html:122 +#: rhodecode/templates/data_table/_dt_elements.html:130 +msgid "delete" +msgstr "usuń" + +#: rhodecode/templates/admin/permissions/permissions.html:128 +#: rhodecode/templates/admin/users/user_edit.html:258 +#, fuzzy, python-format +msgid "Confirm to delete this ip: %s" +msgstr "Potwierdź, aby usunąć ten e-mail: %s" + +#: rhodecode/templates/admin/permissions/permissions.html:134 +#: rhodecode/templates/admin/users/user_edit.html:264 +msgid "All IP addresses are allowed" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:145 +#: rhodecode/templates/admin/users/user_edit.html:275 +#, fuzzy +msgid "New ip address" +msgstr "Nowy adres e-mail" + +#: rhodecode/templates/admin/permissions/permissions.html:153 +#: rhodecode/templates/admin/repos/repo_add_base.html:73 +#: rhodecode/templates/admin/repos/repo_edit.html:387 +#: rhodecode/templates/admin/users/user_edit.html:234 +#: rhodecode/templates/admin/users/user_edit.html:282 +msgid "Add" +msgstr "Dodaj" + +#: rhodecode/templates/admin/repos/repo_add.html:12 +#: rhodecode/templates/admin/repos/repo_add.html:16 +#: rhodecode/templates/base/base.html:69 rhodecode/templates/base/base.html:103 +#: rhodecode/templates/base/base.html:263 msgid "Repositories" msgstr "Repozytoria" -#: rhodecode/templates/admin/repos/repo_add.html:13 -msgid "add new" +#: rhodecode/templates/admin/repos/repo_add.html:19 +#, fuzzy +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 +#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:97 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 +#: rhodecode/templates/forks/fork.html:51 msgid "Optionaly select a group to put this repository into." msgstr "Opcjonalnie wybierz grupę do wprowadzenia tego repozytorium." @@ -1967,57 +2277,39 @@ msgstr "Rodzaj repozytorium do stworzeni #: 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 +#: rhodecode/templates/forks/fork.html:38 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 +#: rhodecode/templates/forks/fork.html:42 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 +#: rhodecode/templates/forks/fork.html:60 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 +#: rhodecode/templates/admin/repos/repo_edit.html:8 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:12 +#: rhodecode/templates/admin/settings/hooks.html:9 +#: rhodecode/templates/admin/settings/settings.html:11 +#: rhodecode/templates/base/base.html:76 rhodecode/templates/base/base.html:121 +#: rhodecode/templates/summary/summary.html:212 +msgid "Settings" +msgstr "Ustawienia" #: 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." @@ -2025,169 +2317,221 @@ msgstr "Opcjonalnie wybierz grupę do wprowadzenia tego repozytorium." 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:95 -msgid "Reset" -msgstr "Zresetuj" - -#: rhodecode/templates/admin/repos/repo_edit.html:152 -msgid "Administration" -msgstr "Administracja" - -#: rhodecode/templates/admin/repos/repo_edit.html:155 +#: rhodecode/templates/admin/repos/repo_edit.html:184 +#, fuzzy +msgid "Advanced settings" +msgstr "Zapisz ustawienia" + +#: rhodecode/templates/admin/repos/repo_edit.html:187 msgid "Statistics" msgstr "Statystyki" -#: rhodecode/templates/admin/repos/repo_edit.html:159 +#: rhodecode/templates/admin/repos/repo_edit.html:191 msgid "Reset current statistics" msgstr "Zresetuj bieżące statystyki" -#: rhodecode/templates/admin/repos/repo_edit.html:159 +#: rhodecode/templates/admin/repos/repo_edit.html:191 msgid "Confirm to remove current statistics" msgstr "Potwierdź usunięcie aktualnych statystyk" -#: rhodecode/templates/admin/repos/repo_edit.html:162 +#: rhodecode/templates/admin/repos/repo_edit.html:194 msgid "Fetched to rev" msgstr "Ściągnięte do rev" -#: rhodecode/templates/admin/repos/repo_edit.html:163 +#: rhodecode/templates/admin/repos/repo_edit.html:195 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 "Prefiks" - -#: rhodecode/templates/admin/repos/repo_edit.html:202 -msgid "Key" -msgstr "Klucz" - #: 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" +msgid "Remote" +msgstr "Zdalnie" + +#: rhodecode/templates/admin/repos/repo_edit.html:207 +msgid "Pull changes from remote location" +msgstr "Pobierz z zdalnej lokalizacji" + +#: rhodecode/templates/admin/repos/repo_edit.html:207 +msgid "Confirm to pull changes from remote side" +msgstr "Potwierdź pull z zdalnej strony" #: 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 "Cache" +msgstr "Pamięć podręczna" + +#: rhodecode/templates/admin/repos/repo_edit.html:222 +msgid "Invalidate repository cache" +msgstr "Unieważnij pamięć podręczną repozytorium" + +#: rhodecode/templates/admin/repos/repo_edit.html:222 +msgid "Confirm to invalidate repository cache" +msgstr "Potwierdź unieważnienie pamięci podręcznej repozytorium" + +#: rhodecode/templates/admin/repos/repo_edit.html:225 +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:230 +msgid "List of cached values" +msgstr "Lista buforowanych wartości" + +#: rhodecode/templates/admin/repos/repo_edit.html:233 +msgid "Prefix" +msgstr "Prefiks" + +#: rhodecode/templates/admin/repos/repo_edit.html:234 +msgid "Key" +msgstr "Klucz" + +#: rhodecode/templates/admin/repos/repo_edit.html:235 +#: rhodecode/templates/admin/users/user_add.html:86 +#: rhodecode/templates/admin/users/user_edit.html:124 +#: rhodecode/templates/admin/users/users.html:84 +#: rhodecode/templates/admin/users_groups/users_group_add.html:41 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:42 +#: rhodecode/templates/admin/users_groups/users_groups.html:36 +msgid "Active" +msgstr "Aktywny" + +#: rhodecode/templates/admin/repos/repo_edit.html:250 +#: rhodecode/templates/base/base.html:280 +#: rhodecode/templates/base/base.html:281 msgid "Public journal" msgstr "Dziennik publiczny" -#: rhodecode/templates/admin/repos/repo_edit.html:224 +#: rhodecode/templates/admin/repos/repo_edit.html:256 msgid "Remove from public journal" msgstr "Usuń z dziennika publicznego" -#: rhodecode/templates/admin/repos/repo_edit.html:226 +#: rhodecode/templates/admin/repos/repo_edit.html:258 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 +#: rhodecode/templates/admin/repos/repo_edit.html:263 +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:270 msgid "Locking" msgstr "Blokuj" -#: rhodecode/templates/admin/repos/repo_edit.html:243 +#: rhodecode/templates/admin/repos/repo_edit.html:275 msgid "Unlock locked repo" msgstr "Odblokuj zablokowane repo" -#: rhodecode/templates/admin/repos/repo_edit.html:243 +#: rhodecode/templates/admin/repos/repo_edit.html:275 msgid "Confirm to unlock repository" msgstr "Potwierdź odblokowanie repozytorium" -#: rhodecode/templates/admin/repos/repo_edit.html:246 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "lock repo" msgstr "blokada repo" -#: rhodecode/templates/admin/repos/repo_edit.html:246 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "Confirm to lock repository" msgstr "Potwierdź blokowanie repozytorium" -#: rhodecode/templates/admin/repos/repo_edit.html:247 +#: rhodecode/templates/admin/repos/repo_edit.html:279 msgid "Repository is not locked" msgstr "Repozytorium nie jest zablokowane" -#: rhodecode/templates/admin/repos/repo_edit.html:252 +#: rhodecode/templates/admin/repos/repo_edit.html:284 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 +msgstr "" +"Wymuś blokowanie na repozytorium. Działa tylko wtedy, gdy dostęp " +"anonimowy jest wyłączony" + +#: rhodecode/templates/admin/repos/repo_edit.html:291 msgid "Set as fork of" msgstr "Ustaw jako rozwidlenie" -#: rhodecode/templates/admin/repos/repo_edit.html:268 +#: rhodecode/templates/admin/repos/repo_edit.html:296 +msgid "set" +msgstr "ustaw" + +#: rhodecode/templates/admin/repos/repo_edit.html:300 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 +#: rhodecode/templates/admin/repos/repo_edit.html:306 +#: rhodecode/templates/changeset/changeset_file_comment.html:41 msgid "Delete" msgstr "Usuń" -#: rhodecode/templates/admin/repos/repo_edit.html:278 -#: rhodecode/templates/settings/repo_settings.html:115 +#: rhodecode/templates/admin/repos/repo_edit.html:315 msgid "Remove this repository" msgstr "Usuń to repozytorium" -#: rhodecode/templates/admin/repos/repo_edit.html:278 -#: rhodecode/templates/settings/repo_settings.html:115 +#: rhodecode/templates/admin/repos/repo_edit.html:315 msgid "Confirm to delete this repository" msgstr "Potwierdź, aby usunąć repozytorium" -#: rhodecode/templates/admin/repos/repo_edit.html:282 -#: rhodecode/templates/settings/repo_settings.html:119 -msgid "This repository will be renamed in a special way in order to be unaccesible for RhodeCode and VCS systems. If you need fully delete it from file system please do it manually" -msgstr "To repozytorium zostanie zmienione w sposób szczególny, żeby było niedostępne dla strony i systemów VCS. Jeśli chcesz całkowicie usunąć go z systemu plików prosimy zrobić to ręcznie" +#: rhodecode/templates/admin/repos/repo_edit.html:317 +#, fuzzy, python-format +msgid "this repository has %s fork" +msgid_plural "this repository has %s forks" +msgstr[0] "to repozytorium ma %s fork" +msgstr[1] "to repozytorium ma %s forki" +msgstr[2] "to repozytorium ma %s forków" + +#: rhodecode/templates/admin/repos/repo_edit.html:318 +#, fuzzy +msgid "Detach forks" +msgstr "Ustaw jako rozwidlenie" + +#: rhodecode/templates/admin/repos/repo_edit.html:319 +#, fuzzy +msgid "Delete forks" +msgstr "usuń" + +#: rhodecode/templates/admin/repos/repo_edit.html:322 +#, fuzzy +msgid "" +"This repository will be renamed in a special way in order to be " +"unaccesible for RhodeCode and VCS systems. If you need to fully delete it" +" from file system please do it manually" +msgstr "" +"To repozytorium zostanie zmienione w sposób szczególny, żeby było " +"niedostępne dla strony i systemów VCS. Jeśli chcesz całkowicie usunąć go " +"z systemu plików prosimy zrobić to ręcznie" + +#: rhodecode/templates/admin/repos/repo_edit.html:336 +msgid "Extra fields" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:348 +#, fuzzy, python-format +msgid "Confirm to delete this field: %s" +msgstr "Potwierdź, aby usunąć ten e-mail: %s" + +#: rhodecode/templates/admin/repos/repo_edit.html:362 +#, fuzzy +msgid "New field key" +msgstr "dodaj nowy plik" + +#: rhodecode/templates/admin/repos/repo_edit.html:370 +msgid "New field label" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:373 +msgid "Enter short label" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:379 +#, fuzzy +msgid "New field description" +msgstr "opis" + +#: rhodecode/templates/admin/repos/repo_edit.html:382 +msgid "Enter description of a field" +msgstr "" #: rhodecode/templates/admin/repos/repo_edit_perms.html:3 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3 @@ -2206,8 +2550,6 @@ 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" @@ -2217,79 +2559,63 @@ 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:95 -#: 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 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:20 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:35 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 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:25 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:55 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 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:80 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 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:100 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" +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:116 +#, fuzzy +msgid "Failed to remove user 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 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:86 #, fuzzy msgid "apply to children" msgstr "dotyczy dzieci" -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 #, fuzzy -msgid "Set or revoke permission to all children of that group, including repositories and other groups" -msgstr "Ustawia lub cofa uprawnienia do wszystkich dzieci z tej grupy, w tym repozytoria oraz innych grup" +msgid "" +"Set or revoke permission to all children of that group, including non-" +"private repositories and other groups" +msgstr "" +"Ustawia lub cofa uprawnienia do wszystkich dzieci z tej grupy, w tym " +"repozytoria oraz innych grup" + +#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 +#, python-format +msgid "%s Group Dashboard" +msgstr "%s Grupa" #: 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" @@ -2298,70 +2624,79 @@ 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" +#, fuzzy +msgid "Add repository group" +msgstr "Repozytorium grupy" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:16 +#: rhodecode/templates/base/base.html:70 rhodecode/templates/base/base.html:82 +#, fuzzy +msgid "Repository groups" +msgstr "Repozytorium grupy" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:13 +#, fuzzy +msgid "Add new repository 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 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:51 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:56 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 +msgstr "Rodzic gropy" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:59 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" +#, fuzzy +msgid "Edit repository 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_edit.html:13 +#, fuzzy, python-format +msgid "Edit repository group %s" +msgstr "edytuj grupe %s" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:27 +#, fuzzy +msgid "Add child group" +msgstr "dodaj nową grupę użytkowników" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:76 +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" +#, fuzzy +msgid "Repository 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 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:45 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 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:64 +#, fuzzy +msgid "Edit" +msgstr "edycja" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:65 +#: rhodecode/templates/base/perms_summary.html:29 +#: rhodecode/templates/base/perms_summary.html:48 +#: rhodecode/templates/base/perms_summary.html:50 +#: rhodecode/templates/data_table/_dt_elements.html:116 +#: rhodecode/templates/data_table/_dt_elements.html:117 +msgid "edit" +msgstr "edycja" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70 #, python-format msgid "Confirm to delete this group: %s with %s repository" msgid_plural "Confirm to delete this group: %s with %s repositories" @@ -2369,8 +2704,9 @@ msgstr[0] "Potwierdź żeby usunąć grupę %s wraz z %s repozytorium" msgstr[1] "Potwierdź żeby usunąć grupę %s wraz z %s repozytoriami" msgstr[2] "Potwierdź żeby usunąć grupę %s wraz z %s repozytoriami" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63 -msgid "There are no repositories groups yet" +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:78 +#, fuzzy +msgid "There are no repository groups yet" msgstr "Nie ma jeszcze grup repozytoriów" #: rhodecode/templates/admin/settings/hooks.html:5 @@ -2378,12 +2714,6 @@ msgstr "Nie ma jeszcze grup repozytoriów" 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" @@ -2400,192 +2730,236 @@ msgstr "usuń" msgid "Failed to remove hook" msgstr "Nie udało się usunąć hooka" -#: rhodecode/templates/admin/settings/settings.html:24 +#: rhodecode/templates/admin/settings/settings.html:26 msgid "Remap and rescan repositories" msgstr "Mapowanie i skanowanie repozytorów" -#: rhodecode/templates/admin/settings/settings.html:32 -msgid "rescan option" +#: rhodecode/templates/admin/settings/settings.html:34 +#, fuzzy +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:40 +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: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 +#, fuzzy +msgid "Destroy old data" +msgstr "zniszcz stare dane" + +#: rhodecode/templates/admin/settings/settings.html:43 +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:48 msgid "Rescan repositories" msgstr "Skanuj ponownie repozytoria" -#: rhodecode/templates/admin/settings/settings.html:52 +#: rhodecode/templates/admin/settings/settings.html:54 msgid "Whoosh indexing" msgstr "indeksowanie Whoosh" -#: rhodecode/templates/admin/settings/settings.html:60 -msgid "index build option" +#: rhodecode/templates/admin/settings/settings.html:62 +#, fuzzy +msgid "Index build option" msgstr "opcja budowania indeksowania" -#: rhodecode/templates/admin/settings/settings.html:65 -msgid "build from scratch" +#: rhodecode/templates/admin/settings/settings.html:67 +#, fuzzy +msgid "Build from scratch" msgstr "buduj od podstaw" -#: rhodecode/templates/admin/settings/settings.html:71 +#: rhodecode/templates/admin/settings/settings.html:73 msgid "Reindex" msgstr "Indeksuj ponownie" -#: rhodecode/templates/admin/settings/settings.html:77 +#: rhodecode/templates/admin/settings/settings.html:79 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 +#: rhodecode/templates/admin/settings/settings.html:88 +msgid "Site branding" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:97 +msgid "HTTP authentication realm" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:106 +msgid "Google Analytics code" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:114 +#: rhodecode/templates/admin/settings/settings.html:186 +#: rhodecode/templates/admin/settings/settings.html:277 msgid "Save settings" msgstr "Zapisz ustawienia" -#: rhodecode/templates/admin/settings/settings.html:119 +#: rhodecode/templates/admin/settings/settings.html:121 msgid "Visualisation settings" msgstr "Ustawienia wizualizacji" -#: rhodecode/templates/admin/settings/settings.html:127 +#: rhodecode/templates/admin/settings/settings.html:129 msgid "General" msgstr "Główne" -#: rhodecode/templates/admin/settings/settings.html:132 +#: rhodecode/templates/admin/settings/settings.html:134 msgid "Use lightweight dashboard" msgstr "Użyj lekkiego pulpitu" -#: rhodecode/templates/admin/settings/settings.html:139 +#: rhodecode/templates/admin/settings/settings.html:140 +#, fuzzy +msgid "Use repository extra fields" +msgstr "repozytoria" + +#: rhodecode/templates/admin/settings/settings.html:147 msgid "Icons" msgstr "Ikony" -#: rhodecode/templates/admin/settings/settings.html:144 +#: rhodecode/templates/admin/settings/settings.html:152 msgid "Show public repo icon on repositories" msgstr "Pokazuj w publicznym repo ikonę w repozytoriach" -#: rhodecode/templates/admin/settings/settings.html:148 +#: rhodecode/templates/admin/settings/settings.html:156 msgid "Show private repo icon on repositories" msgstr "Pokazuj w prywatnym repo ikonę w repozytoriach" -#: rhodecode/templates/admin/settings/settings.html:155 +#: rhodecode/templates/admin/settings/settings.html:163 msgid "Meta-Tagging" msgstr "Tagowanie meta" -#: rhodecode/templates/admin/settings/settings.html:160 +#: rhodecode/templates/admin/settings/settings.html:168 msgid "Stylify recognised metatags:" msgstr "Stylizacja rozpoznanych meta tagów:" -#: rhodecode/templates/admin/settings/settings.html:187 +#: rhodecode/templates/admin/settings/settings.html:195 msgid "VCS settings" msgstr "VCS ustawienia" -#: rhodecode/templates/admin/settings/settings.html:196 +#: rhodecode/templates/admin/settings/settings.html:204 msgid "Web" msgstr "www" -#: rhodecode/templates/admin/settings/settings.html:201 -msgid "require ssl for vcs operations" +#: rhodecode/templates/admin/settings/settings.html:209 +#, fuzzy +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 +#: rhodecode/templates/admin/settings/settings.html:211 +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:217 msgid "Hooks" msgstr "Aktualizacja" -#: rhodecode/templates/admin/settings/settings.html:214 +#: rhodecode/templates/admin/settings/settings.html:222 msgid "Update repository after push (hg update)" msgstr "Aktualizacja repozytorium po wysłaniu zmian (aktualizacja hg)" -#: rhodecode/templates/admin/settings/settings.html:218 +#: rhodecode/templates/admin/settings/settings.html:226 msgid "Show repository size after push" msgstr "Pokaż rozmiar repozytorium po wysłaniu zmian" -#: rhodecode/templates/admin/settings/settings.html:222 +#: rhodecode/templates/admin/settings/settings.html:230 msgid "Log user push commands" msgstr "Logi poleceń wysłania zmian użytkowników" -#: rhodecode/templates/admin/settings/settings.html:226 +#: rhodecode/templates/admin/settings/settings.html:234 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" +#: rhodecode/templates/admin/settings/settings.html:238 +#, fuzzy +msgid "Advanced setup" msgstr "zaawansowane ustawienia" -#: rhodecode/templates/admin/settings/settings.html:235 +#: rhodecode/templates/admin/settings/settings.html:243 msgid "Mercurial Extensions" msgstr "Rozszerzenia Mercurial" -#: rhodecode/templates/admin/settings/settings.html:240 -msgid "largefiles extensions" +#: rhodecode/templates/admin/settings/settings.html:248 +#, fuzzy +msgid "Enable largefiles extension" msgstr "rozszerzenia dużych pliów" -#: rhodecode/templates/admin/settings/settings.html:244 -msgid "hgsubversion extensions" +#: rhodecode/templates/admin/settings/settings.html:252 +#, fuzzy +msgid "Enable hgsubversion extension" 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 +#: rhodecode/templates/admin/settings/settings.html:254 +#, fuzzy +msgid "" +"Requires hgsubversion library installed. Allows cloning from svn remote " +"locations" +msgstr "" +"Wymaga biblioteki hgsubversion zainstalowanej. Umożliwia klonowanie z " +"zdalnych lokalizacji svn" + +#: rhodecode/templates/admin/settings/settings.html:264 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" +#: rhodecode/templates/admin/settings/settings.html:269 +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:270 +#: rhodecode/templates/base/base.html:131 +#, fuzzy +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 +#: rhodecode/templates/admin/settings/settings.html:272 +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:292 msgid "Test Email" msgstr "Test e-maila" -#: rhodecode/templates/admin/settings/settings.html:291 +#: rhodecode/templates/admin/settings/settings.html:300 msgid "Email to" msgstr "E-mail do" -#: rhodecode/templates/admin/settings/settings.html:299 +#: rhodecode/templates/admin/settings/settings.html:308 msgid "Send" msgstr "Wyślij" -#: rhodecode/templates/admin/settings/settings.html:305 +#: rhodecode/templates/admin/settings/settings.html:314 msgid "System Info and Packages" msgstr "Informacje Systemowe i pakiety" -#: rhodecode/templates/admin/settings/settings.html:308 -msgid "show" -msgstr "pokaż" +#: rhodecode/templates/admin/settings/settings.html:317 +#: rhodecode/templates/changelog/changelog.html:42 +msgid "Show" +msgstr "Wyświetl" #: rhodecode/templates/admin/users/user_add.html:5 msgid "Add user" @@ -2593,11 +2967,14 @@ msgstr "Dodaj użytkownika" #: rhodecode/templates/admin/users/user_add.html:10 #: rhodecode/templates/admin/users/user_edit.html:11 +#: rhodecode/templates/base/base.html:71 msgid "Users" msgstr "Użytkownicy" #: rhodecode/templates/admin/users/user_add.html:12 -msgid "add new user" +#: rhodecode/templates/admin/users/users.html:23 +#, fuzzy +msgid "Add new user" msgstr "dodaj nowego użytkownika" #: rhodecode/templates/admin/users/user_add.html:50 @@ -2608,6 +2985,12 @@ msgstr "Potwierdzenie hasła" msgid "Edit user" msgstr "Edytuj użytkownika" +#: rhodecode/templates/admin/users/user_edit.html:13 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:13 +#, fuzzy, python-format +msgid "Edit %s" +msgstr "edycja %s" + #: rhodecode/templates/admin/users/user_edit.html:34 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:10 msgid "Change your avatar at" @@ -2623,78 +3006,65 @@ msgstr "Używa:" msgid "API key" msgstr "Klucz API" -#: rhodecode/templates/admin/users/user_edit.html:63 +#: rhodecode/templates/admin/users/user_edit.html:50 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:25 +msgid "Current IP" +msgstr "" + +#: rhodecode/templates/admin/users/user_edit.html:70 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 +#: rhodecode/templates/admin/users/user_edit.html:79 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 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 +#: rhodecode/templates/admin/users/user_edit.html:88 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53 msgid "New password confirmation" msgstr "Potwierdzenie nowego hasła" -#: rhodecode/templates/admin/users/user_edit.html:151 +#: rhodecode/templates/admin/users/user_edit.html:158 #: 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/user_edit.html:163 #: 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 +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:169 #: 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/user_edit.html:177 #: 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 +#: rhodecode/templates/admin/users/user_edit.html:200 msgid "Email addresses" msgstr "Adresy e-mail" -#: rhodecode/templates/admin/users/user_edit.html:260 +#: rhodecode/templates/admin/users/user_edit.html:213 #, 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 +#: rhodecode/templates/admin/users/user_edit.html:227 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 +#: rhodecode/templates/base/base.html:242 msgid "My account" msgstr "Moje konto" @@ -2707,7 +3077,7 @@ msgid "My permissions" msgstr "Moje uprawnienia" #: rhodecode/templates/admin/users/user_edit_my_account.html:38 -#: rhodecode/templates/journal/journal.html:49 +#: rhodecode/templates/journal/journal.html:54 msgid "My repos" msgstr "Moje repo" @@ -2715,132 +3085,107 @@ msgstr "Moje repo" 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 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:4 +#, fuzzy +msgid "Show closed pull requests" +msgstr "[zamknięty] wniosek o połączenie gałęzi" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:6 msgid "Opened by me" msgstr "Otwarty przez mnie" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15 #, 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 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:17 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:45 +#: rhodecode/templates/pullrequests/pullrequest_data.html:7 +#: rhodecode/templates/pullrequests/pullrequest_show.html:27 +#: rhodecode/templates/pullrequests/pullrequest_show.html:42 +msgid "Closed" +msgstr "Zamknięte" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:23 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 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:30 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:51 +msgid "Nothing here yet" +msgstr "Nic tu nie ma jeszcze" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:34 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 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:42 +#: rhodecode/templates/pullrequests/pullrequest_data.html:11 #, 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" +#, fuzzy +msgid "Firstname" msgstr "imię" #: rhodecode/templates/admin/users/users.html:81 -msgid "lastname" +#, fuzzy +msgid "Lastname" msgstr "nazwisko" #: rhodecode/templates/admin/users/users.html:82 -msgid "last login" +#, fuzzy +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" +#, fuzzy +msgid "Add user 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_groups.html:11 +#: rhodecode/templates/base/base.html:72 +#, fuzzy +msgid "User groups" +msgstr "grupy użytkowników" #: rhodecode/templates/admin/users_groups/users_group_add.html:12 -msgid "add new users group" +#: rhodecode/templates/admin/users_groups/users_groups.html:25 +#, fuzzy +msgid "Add new user group" msgstr "dodaj nową grupę użytkowników" #: rhodecode/templates/admin/users_groups/users_group_edit.html:5 -msgid "Edit users group" +#, fuzzy +msgid "Edit user group" msgstr "Edytuj grupę użytkowników" #: rhodecode/templates/admin/users_groups/users_group_edit.html:11 -msgid "UsersGroups" -msgstr "Grupy użytkowników" +#, fuzzy +msgid "UserGroups" +msgstr "grupy użytkowników" #: rhodecode/templates/admin/users_groups/users_group_edit.html:50 +#: rhodecode/templates/admin/users_groups/users_groups.html:35 msgid "Members" msgstr "Użytkownik" #: rhodecode/templates/admin/users_groups/users_group_edit.html:58 -msgid "Choosen group members" +#, fuzzy +msgid "Chosen group members" msgstr "Wybrane grupy użytkowników" #: rhodecode/templates/admin/users_groups/users_group_edit.html:61 @@ -2855,264 +3200,280 @@ msgstr "Dostępni użytkownicy" msgid "Add all elements" msgstr "Dodaj wszystkie elementy" -#: rhodecode/templates/admin/users_groups/users_group_edit.html:146 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:150 msgid "Group members" msgstr "Grupy użytkowników" -#: rhodecode/templates/admin/users_groups/users_group_edit.html:163 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:167 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" +#, fuzzy +msgid "User 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" +#: rhodecode/templates/admin/users_groups/users_groups.html:47 +#, fuzzy, python-format +msgid "Confirm to delete this user group: %s" msgstr "Potwierdź usunięcie grupy użytkowników: %s" -#: rhodecode/templates/base/base.html:41 +#: rhodecode/templates/base/base.html:42 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:108 +#: rhodecode/templates/data_table/_dt_elements.html:9 +#: rhodecode/templates/data_table/_dt_elements.html:11 +#: rhodecode/templates/data_table/_dt_elements.html:13 +#: rhodecode/templates/pullrequests/pullrequest_show.html:81 +#: rhodecode/templates/summary/summary.html:8 +msgid "Summary" +msgstr "Podsumowanie" + +#: rhodecode/templates/base/base.html:109 +#: rhodecode/templates/changelog/changelog.html:11 +#: rhodecode/templates/data_table/_dt_elements.html:17 +#: rhodecode/templates/data_table/_dt_elements.html:19 +#: rhodecode/templates/data_table/_dt_elements.html:21 +msgid "Changelog" +msgstr "Dziennik zmian" + +#: rhodecode/templates/base/base.html:110 +#: rhodecode/templates/data_table/_dt_elements.html:25 +#: rhodecode/templates/data_table/_dt_elements.html:27 +#: rhodecode/templates/data_table/_dt_elements.html:29 +#: rhodecode/templates/files/files.html:12 +msgid "Files" +msgstr "Pliki" + +#: rhodecode/templates/base/base.html:112 +#, fuzzy +msgid "Switch To" +msgstr "Przełącz do" + +#: rhodecode/templates/base/base.html:114 +#: rhodecode/templates/base/base.html:267 +msgid "loading..." +msgstr "wczytywanie..." #: 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/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/base/base.html:124 #: 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 -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 +#: rhodecode/templates/base/base.html:126 +#, fuzzy +msgid "Lightweight changelog" +msgstr "Użyj lekkiego pulpitu" + +#: rhodecode/templates/base/base.html:127 +#: rhodecode/templates/base/base.html:287 +#: rhodecode/templates/search/search.html:14 +#: rhodecode/templates/search/search.html:54 msgid "Search" msgstr "Szukaj" -#: rhodecode/templates/base/root.html:42 -msgid "add another comment" -msgstr "dodaj kolejny komentarz" +#: rhodecode/templates/base/base.html:133 +#, fuzzy +msgid "Lock" +msgstr "zablokowane" + +#: rhodecode/templates/base/base.html:141 +#, fuzzy +msgid "Follow" +msgstr "obserwatorzy" + +#: rhodecode/templates/base/base.html:142 +#, fuzzy +msgid "Unfollow" +msgstr "obserwatorzy" + +#: rhodecode/templates/base/base.html:145 +#: rhodecode/templates/data_table/_dt_elements.html:33 +#: rhodecode/templates/data_table/_dt_elements.html:35 +#: rhodecode/templates/data_table/_dt_elements.html:37 +#: rhodecode/templates/data_table/_dt_elements.html:74 +#: rhodecode/templates/forks/fork.html:9 +msgid "Fork" +msgstr "Gałąź" + +#: rhodecode/templates/base/base.html:147 +#, fuzzy +msgid "Create Pull Request" +msgstr "Stwórz nowe żądanie połączenia gałęzi" + +#: rhodecode/templates/base/base.html:153 +#, fuzzy +msgid "Show Pull Requests" +msgstr "Nowa prośba o połączenie gałęzi" + +#: rhodecode/templates/base/base.html:153 +#, fuzzy +msgid "Pull Requests" +msgstr "Połączone gałęzie" + +#: rhodecode/templates/base/base.html:190 +#, fuzzy +msgid "Not logged in" +msgstr "ostatnio zalogowany" + +#: rhodecode/templates/base/base.html:197 +msgid "Login to your account" +msgstr "Zaloguj się do swojego konta" + +#: rhodecode/templates/base/base.html:220 +msgid "Forgot password ?" +msgstr "Nie pamiętasz hasła?" + +#: rhodecode/templates/base/base.html:243 +msgid "Log Out" +msgstr "Wyloguj się" + +#: rhodecode/templates/base/base.html:262 +msgid "Switch repository" +msgstr "Przełącz repozytorium" + +#: rhodecode/templates/base/base.html:274 +msgid "Show recent activity" +msgstr "" + +#: rhodecode/templates/base/base.html:275 +#: rhodecode/templates/journal/journal.html:4 +msgid "Journal" +msgstr "Dziennik" + +#: rhodecode/templates/base/base.html:286 +#, fuzzy +msgid "Search in repositories" +msgstr "Szukaj we wszystkich repozytoriach" + +#: rhodecode/templates/base/perms_summary.html:8 +#, fuzzy +msgid "No permissions defined yet" +msgstr "Nie ma jeszcze ustawionych uprawnień" + +#: rhodecode/templates/base/perms_summary.html:15 +msgid "Permission" +msgstr "Uprawnienia" + +#: rhodecode/templates/base/perms_summary.html:16 +msgid "Edit Permission" +msgstr "Edycja Uprawnień" #: rhodecode/templates/base/root.html:43 -#: rhodecode/templates/journal/journal.html:83 -#: rhodecode/templates/summary/summary.html:57 -msgid "Stop following this repository" -msgstr "Zakończyć obserwację tego repozytorium" +#, fuzzy +msgid "Add another comment" +msgstr "dodaj kolejny komentarz" #: rhodecode/templates/base/root.html:44 -#: rhodecode/templates/summary/summary.html:61 +#: rhodecode/templates/data_table/_dt_elements.html:140 +msgid "Stop following this repository" +msgstr "Zakończyć obserwację tego repozytorium" + +#: rhodecode/templates/base/root.html:45 msgid "Start following this repository" msgstr "Zacznij obserwację tego repozytorium" -#: rhodecode/templates/base/root.html:45 +#: rhodecode/templates/base/root.html:46 msgid "Group" msgstr "Grupa" +#: rhodecode/templates/base/root.html:47 +msgid "members" +msgstr "użytkownik" + #: rhodecode/templates/base/root.html:48 -msgid "search truncated" -msgstr "wyszukaj obcięte" +#: rhodecode/templates/pullrequests/pullrequest.html:181 +#, fuzzy +msgid "Loading ..." +msgstr "wczytywanie..." #: rhodecode/templates/base/root.html:49 -msgid "no matching files" +#, fuzzy +msgid "Search truncated" +msgstr "wyszukaj obcięte" + +#: rhodecode/templates/base/root.html:50 +#, fuzzy +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/changelog/changelog.html:36 +msgid "Open new pull request" +msgstr "Otwórz nową prośbę o połączenie gałęzi" #: rhodecode/templates/base/root.html:52 -msgid "Show selected changes __S -> __E" -msgstr "Pokaż wybrane zmiany __S -> __E" +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:53 +#, fuzzy +msgid "Show selected changesets __S -> __E" +msgstr "Pokaż wybrane zmiany __S -> __E" + +#: rhodecode/templates/base/root.html:54 +#, fuzzy +msgid "Show selected changeset __S" +msgstr "Pokaż wybrane zmiany __S -> __E" + +#: rhodecode/templates/base/root.html:55 msgid "Selection link" msgstr "Wybór linku" +#: rhodecode/templates/base/root.html:56 +#: rhodecode/templates/changeset/diff_block.html:8 +#, fuzzy +msgid "Collapse diff" +msgstr "Pliki różnic" + +#: rhodecode/templates/base/root.html:57 +#, fuzzy +msgid "Expand diff" +msgstr "poprawka różnic" + #: 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.html:37 #: rhodecode/templates/bookmarks/bookmarks_data.html:8 -#: rhodecode/templates/branches/branches.html:53 +#: rhodecode/templates/branches/branches.html:50 #: rhodecode/templates/branches/branches_data.html:8 -#: rhodecode/templates/tags/tags.html:54 +#: rhodecode/templates/shortlog/shortlog_data.html:8 +#: rhodecode/templates/tags/tags.html:51 #: rhodecode/templates/tags/tags_data.html:8 msgid "Author" msgstr "Autor" +#: rhodecode/templates/bookmarks/bookmarks.html:38 +#: rhodecode/templates/bookmarks/bookmarks_data.html:9 +#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches_data.html:9 +#: rhodecode/templates/shortlog/shortlog_data.html:5 +#: rhodecode/templates/tags/tags.html:52 +#: rhodecode/templates/tags/tags_data.html:9 +msgid "Revision" +msgstr "Rewizja" + #: rhodecode/templates/branches/branches.html:5 #, python-format msgid "%s Branches" msgstr "%s Gałęzie" -#: rhodecode/templates/branches/branches.html:29 +#: rhodecode/templates/branches/branches.html:26 msgid "Compare branches" msgstr "porównaj gałęzie" -#: rhodecode/templates/branches/branches.html:56 +#: rhodecode/templates/branches/branches.html:53 #: 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.html:54 #: rhodecode/templates/tags/tags_data.html:10 msgid "Compare" msgstr "Porównaj" @@ -3122,7 +3483,7 @@ msgstr "Porównaj" msgid "%s Changelog" msgstr "%s Dziennik zmian" -#: rhodecode/templates/changelog/changelog.html:15 +#: rhodecode/templates/changelog/changelog.html:11 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" @@ -3130,108 +3491,76 @@ 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 +#: rhodecode/templates/changelog/changelog.html:30 msgid "Clear selection" msgstr "Wyczyść zaznaczenie" -#: rhodecode/templates/changelog/changelog.html:40 +#: rhodecode/templates/changelog/changelog.html:33 #: rhodecode/templates/forks/forks_data.html:19 -#, python-format -msgid "compare fork with %s" +#, fuzzy, python-format +msgid "Compare fork with %s" msgstr "porównaj gałęzie %s" -#: rhodecode/templates/changelog/changelog.html:40 +#: rhodecode/templates/changelog/changelog.html:33 msgid "Compare fork with parent" msgstr "porównaj gałąź 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:65 -#: 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 -msgid "Parent" -msgstr "Rewizja" - -#: rhodecode/templates/changelog/changelog.html:110 -#: rhodecode/templates/changeset/changeset.html:42 -msgid "No parents" -msgstr "Brak rewizji" - -#: rhodecode/templates/changelog/changelog.html:115 +#: rhodecode/templates/changelog/changelog.html:76 +#: rhodecode/templates/summary/summary.html:404 +#, fuzzy +msgid "Show more" +msgstr "Pokaż więcej" + +#: rhodecode/templates/changelog/changelog.html:89 +#: rhodecode/templates/changeset/changeset_range.html:86 +#, fuzzy, python-format +msgid "Bookmark %s" +msgstr "Zakładki %s" + +#: rhodecode/templates/changelog/changelog.html:95 +#: rhodecode/templates/changeset/changeset.html:111 +#: rhodecode/templates/changeset/changeset_range.html:92 +#, fuzzy, python-format +msgid "Tag %s" +msgstr "Tagi %s" + +#: rhodecode/templates/changelog/changelog.html:100 #: rhodecode/templates/changeset/changeset.html:106 -#: rhodecode/templates/changeset/changeset_range.html:79 -msgid "merge" -msgstr "połącz" - -#: rhodecode/templates/changelog/changelog.html:118 -#: rhodecode/templates/changeset/changeset.html:109 -#: 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:114 -#: rhodecode/templates/changeset/changeset_range.html:94 -msgid "tag" -msgstr "etykieta" - -#: rhodecode/templates/changelog/changelog.html:301 +#: rhodecode/templates/changeset/changeset_range.html:80 +#, fuzzy, python-format +msgid "Branch %s" +msgstr "Gałęzie %s" + +#: rhodecode/templates/changelog/changelog.html:258 msgid "There are no changes yet" msgstr "Nie ma jeszcze zmian" #: rhodecode/templates/changelog/changelog_details.html:4 -#: rhodecode/templates/changeset/changeset.html:94 -msgid "removed" +#: rhodecode/templates/changeset/changeset.html:91 +#, fuzzy +msgid "Removed" msgstr "usunięto" #: rhodecode/templates/changelog/changelog_details.html:5 -#: rhodecode/templates/changeset/changeset.html:95 -msgid "changed" +#: rhodecode/templates/changeset/changeset.html:92 +#, fuzzy +msgid "Changed" msgstr "zmiana" #: rhodecode/templates/changelog/changelog_details.html:6 -#: rhodecode/templates/changeset/changeset.html:96 -msgid "added" +#: rhodecode/templates/changeset/changeset.html:93 +#, fuzzy +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:98 -#: rhodecode/templates/changeset/changeset.html:99 -#: rhodecode/templates/changeset/changeset.html:100 -#, python-format -msgid "affected %s files" +#: rhodecode/templates/changeset/changeset.html:95 +#: rhodecode/templates/changeset/changeset.html:96 +#: rhodecode/templates/changeset/changeset.html:97 +#, fuzzy, python-format +msgid "Affected %s files" msgstr "zarażone pliki %s" #: rhodecode/templates/changeset/changeset.html:6 @@ -3239,31 +3568,40 @@ msgstr "zarażone pliki %s" msgid "%s Changeset" msgstr "%s Grupy zmian" -#: rhodecode/templates/changeset/changeset.html:14 -msgid "Changeset" -msgstr "Grupy zmian" - -#: rhodecode/templates/changeset/changeset.html:52 +#: rhodecode/templates/changeset/changeset.html:39 +msgid "No parents" +msgstr "Brak rewizji" + +#: rhodecode/templates/changeset/changeset.html:49 #, fuzzy msgid "No children" msgstr "Brak dzieci" -#: rhodecode/templates/changeset/changeset.html:70 -#: rhodecode/templates/changeset/diff_block.html:20 -msgid "raw diff" +#: rhodecode/templates/changeset/changeset.html:62 +#: rhodecode/templates/changeset/changeset_file_comment.html:20 +#: rhodecode/templates/changeset/changeset_range.html:44 +msgid "Changeset status" +msgstr "Status grupy zmian" + +#: rhodecode/templates/changeset/changeset.html:67 +#: rhodecode/templates/changeset/diff_block.html:23 +#, fuzzy +msgid "Raw diff" msgstr "raw różnic" -#: rhodecode/templates/changeset/changeset.html:71 -msgid "patch diff" +#: rhodecode/templates/changeset/changeset.html:68 +#, fuzzy +msgid "Patch diff" msgstr "poprawka różnic" -#: rhodecode/templates/changeset/changeset.html:72 -#: rhodecode/templates/changeset/diff_block.html:21 -msgid "download diff" +#: rhodecode/templates/changeset/changeset.html:69 +#: rhodecode/templates/changeset/diff_block.html:24 +#, fuzzy +msgid "Download diff" msgstr "pobierz różnice" -#: rhodecode/templates/changeset/changeset.html:76 -#: rhodecode/templates/changeset/changeset_file_comment.html:82 +#: rhodecode/templates/changeset/changeset.html:73 +#: rhodecode/templates/changeset/changeset_file_comment.html:97 #, python-format msgid "%d comment" msgid_plural "%d comments" @@ -3271,8 +3609,8 @@ msgstr[0] "%d komentarz" msgstr[1] "%d komentarzy" msgstr[2] "%d komentarzy" -#: rhodecode/templates/changeset/changeset.html:76 -#: rhodecode/templates/changeset/changeset_file_comment.html:82 +#: rhodecode/templates/changeset/changeset.html:73 +#: rhodecode/templates/changeset/changeset_file_comment.html:97 #, python-format msgid "(%d inline)" msgid_plural "(%d inline)" @@ -3280,9 +3618,14 @@ msgstr[0] "(%d linii)" msgstr[1] "(%d linii)" msgstr[2] "(%d linii)" -#: rhodecode/templates/changeset/changeset.html:122 -#: rhodecode/templates/compare/compare_diff.html:44 -#: rhodecode/templates/pullrequests/pullrequest_show.html:76 +#: rhodecode/templates/changeset/changeset.html:103 +#: rhodecode/templates/changeset/changeset_range.html:77 +msgid "merge" +msgstr "połącz" + +#: rhodecode/templates/changeset/changeset.html:119 +#: rhodecode/templates/compare/compare_diff.html:40 +#: rhodecode/templates/pullrequests/pullrequest_show.html:113 #, python-format msgid "%s file changed" msgid_plural "%s files changed" @@ -3290,9 +3633,9 @@ msgstr[0] "%s plik został zmieniony" msgstr[1] "%s pliki zostały zmienione" msgstr[2] "%s plików zostało zmienionych" -#: rhodecode/templates/changeset/changeset.html:124 -#: rhodecode/templates/compare/compare_diff.html:46 -#: rhodecode/templates/pullrequests/pullrequest_show.html:78 +#: rhodecode/templates/changeset/changeset.html:121 +#: rhodecode/templates/compare/compare_diff.html:42 +#: rhodecode/templates/pullrequests/pullrequest_show.html:115 #, python-format msgid "%s file changed with %s insertions and %s deletions" msgid_plural "%s files changed with %s insertions and %s deletions" @@ -3300,56 +3643,82 @@ msgstr[0] "%s plik został zmieniony z %s inercjami i %s usunięciami" msgstr[1] "%s plików zostało zmienionych z %s inercjami i %s usunięciami" msgstr[2] "%s plików zostało zmienionych z %s inercjami i %s usunięciami" -#: rhodecode/templates/changeset/changeset_file_comment.html:42 +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 +msgid "Showing a huge diff might take some time and resources" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 +#, fuzzy +msgid "Show full diff" +msgstr "pokaż pełną historię" + +#: rhodecode/templates/changeset/changeset_file_comment.html:30 +#, fuzzy, python-format +msgid "Status change on pull request #%s" +msgstr "wszystkie prośby połączenia gałęzi %s" + +#: rhodecode/templates/changeset/changeset_file_comment.html:32 +#, fuzzy, python-format +msgid "Comment on pull request #%s" +msgstr "[komentarz] wniosek o połączenie gałęzi %s" + +#: rhodecode/templates/changeset/changeset_file_comment.html:57 msgid "Submitting..." msgstr "Przesyłanie..." -#: rhodecode/templates/changeset/changeset_file_comment.html:45 +#: rhodecode/templates/changeset/changeset_file_comment.html:60 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 +#: rhodecode/templates/changeset/changeset_file_comment.html:61 +#: rhodecode/templates/changeset/changeset_file_comment.html:139 #, 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 +#: rhodecode/templates/changeset/changeset_file_comment.html:63 +#: rhodecode/templates/changeset/changeset_file_comment.html:141 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:143 +msgstr "" +"Użyj @username wewnątrz tego tekstu, aby wysłać powiadomienie do " +"użytkownika strony" + +#: rhodecode/templates/changeset/changeset_file_comment.html:74 +#: rhodecode/templates/changeset/changeset_file_comment.html:161 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 +#: rhodecode/templates/changeset/changeset_file_comment.html:75 +#, fuzzy +msgid "Cancel" +msgstr "zmiana" + +#: rhodecode/templates/changeset/changeset_file_comment.html:82 msgid "You need to be logged in to comment." msgstr "Musisz być zalogowany żeby komentarz." -#: rhodecode/templates/changeset/changeset_file_comment.html:67 +#: rhodecode/templates/changeset/changeset_file_comment.html:82 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:125 -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:125 -msgid "change status" +#: rhodecode/templates/changeset/changeset_file_comment.html:86 +msgid "Hide" +msgstr "Ukryj" + +#: rhodecode/templates/changeset/changeset_file_comment.html:143 +#, fuzzy +msgid "Change status" msgstr "zmień status" -#: rhodecode/templates/changeset/changeset_file_comment.html:145 +#: rhodecode/templates/changeset/changeset_file_comment.html:163 msgid "Comment and close" msgstr "Skomentuj i zamknij" @@ -3358,33 +3727,49 @@ msgstr "Skomentuj i zamknij" 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 -msgid "Show combined compare" -msgstr "Pokaż połączone porównaj" - -#: rhodecode/templates/changeset/changeset_range.html:54 +#: rhodecode/templates/changeset/changeset_range.html:52 msgid "Files affected" msgstr "pliki naruszone" -#: rhodecode/templates/changeset/diff_block.html:19 -msgid "show full diff for this file" +#: rhodecode/templates/changeset/diff_block.html:22 +#, fuzzy +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" +#: rhodecode/templates/changeset/diff_block.html:30 +#, fuzzy +msgid "Show inline comments" msgstr "pokaż online komentarz" -#: rhodecode/templates/compare/compare_cs.html:5 +#: rhodecode/templates/changeset/diff_block.html:55 +msgid "Show file at latest version in this repo" +msgstr "" + +#: rhodecode/templates/changeset/diff_block.html:56 +msgid "Show file at initial version in this repo" +msgstr "" + +#: rhodecode/templates/compare/compare_cs.html:4 msgid "No changesets" msgstr "Brak zestawienia zmian" -#: rhodecode/templates/compare/compare_diff.html:37 -#: rhodecode/templates/pullrequests/pullrequest_show.html:69 +#: rhodecode/templates/compare/compare_cs.html:32 +#, fuzzy +msgid "Ancestor" +msgstr "gałęzie" + +#: rhodecode/templates/compare/compare_diff.html:5 +#, fuzzy, python-format +msgid "%s Compare" +msgstr "%s Porównaj" + +#: rhodecode/templates/compare/compare_diff.html:9 +#, fuzzy +msgid "Compare revisions" +msgstr "poprzednia wersja" + +#: rhodecode/templates/compare/compare_diff.html:33 +#: rhodecode/templates/pullrequests/pullrequest_show.html:106 #, python-format msgid "Showing %s commit" msgid_plural "Showing %s commits" @@ -3392,120 +3777,132 @@ msgstr[0] "Pokaż %s komentarz" msgstr[1] "Pokaż %s komentarze" msgstr[2] "Pokaż %s komentarze" -#: rhodecode/templates/compare/compare_diff.html:52 -#: rhodecode/templates/pullrequests/pullrequest_show.html:84 +#: rhodecode/templates/compare/compare_diff.html:48 +#: rhodecode/templates/pullrequests/pullrequest_show.html:121 msgid "No files" msgstr "Brak plików" -#: 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:89 -#: rhodecode/templates/summary/summary.html:77 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +msgid "confirm to show potentially huge diff" +msgstr "" + +#: rhodecode/templates/data_table/_dt_elements.html:54 +#: rhodecode/templates/summary/summary.html:69 msgid "Mercurial repository" msgstr "Repozytorium mercurial" -#: rhodecode/templates/data_table/_dt_elements.html:62 -#: rhodecode/templates/journal/journal.html:91 -#: rhodecode/templates/summary/summary.html:80 +#: rhodecode/templates/data_table/_dt_elements.html:56 +#: rhodecode/templates/summary/summary.html:72 msgid "Git repository" msgstr "Repozytorium git" -#: rhodecode/templates/data_table/_dt_elements.html:69 -#: rhodecode/templates/journal/journal.html:97 -#: 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 +#: rhodecode/templates/data_table/_dt_elements.html:74 +#, fuzzy, python-format +msgid "Fork of %s" +msgstr "nazwa rozgałęzienia %s" + +#: rhodecode/templates/data_table/_dt_elements.html:88 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 +#: rhodecode/templates/data_table/_dt_elements.html:95 +#: rhodecode/templates/data_table/_dt_elements.html:97 #, 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 +#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:105 #, 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 repository: %s" +msgstr "Potwierdź usunięcie repozytorium: %s" + +#: rhodecode/templates/data_table/_dt_elements.html:131 +#, 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 -msgid "New status$" -msgstr "Nowy status$" +#: rhodecode/templates/email_templates/changeset_comment.html:9 +#: rhodecode/templates/email_templates/pull_request_comment.html:15 +msgid "New status" +msgstr "Nowy status" + +#: rhodecode/templates/email_templates/changeset_comment.html:11 +#: rhodecode/templates/email_templates/pull_request_comment.html:9 +msgid "View this comment here" +msgstr "Zobacz ten komentarz tutaj" + +#: rhodecode/templates/email_templates/changeset_comment.html:14 +#, fuzzy +msgid "Repo" +msgstr "Moje repo" + +#: rhodecode/templates/email_templates/changeset_comment.html:16 +msgid "desc" +msgstr "" #: rhodecode/templates/email_templates/main.html:8 msgid "This is a notification from RhodeCode." msgstr "To jest powiadomienie z strony" #: rhodecode/templates/email_templates/password_reset.html:4 -msgid "Hello" -msgstr "Witaj" - -#: rhodecode/templates/email_templates/password_reset.html:6 +#, fuzzy, python-format +msgid "Hello %s" +msgstr "Witaj %s" + +#: rhodecode/templates/email_templates/password_reset.html:5 msgid "We received a request to create a new password for your account." msgstr "Otrzymaliśmy prośbę o utworzenie nowego hasła do twojego konta." -#: rhodecode/templates/email_templates/password_reset.html:8 +#: rhodecode/templates/email_templates/password_reset.html:6 msgid "You can generate it by clicking following URL" msgstr "Możesz wygenerować nowe hasło klikając w link URL poniżej:" -#: rhodecode/templates/email_templates/password_reset.html:12 -msgid "If you didn't request new password please ignore this email." +#: rhodecode/templates/email_templates/password_reset.html:11 +#, fuzzy +msgid "If you did not request new password please ignore this email." msgstr "Jeśli nie chcesz wygenerować nowego hasła to zignoruj tą wiadomość." #: rhodecode/templates/email_templates/pull_request.html:4 #, python-format -msgid "User %s opened pull request for repository %s and wants you to review changes." -msgstr "Użytkownik %s zgłosił wniosek połączenia w repozytorium %s i chce żeby sprawdzić zmiany." +msgid "" +"User %s opened pull request for repository %s and wants you to review " +"changes." +msgstr "" +"Użytkownik %s zgłosił wniosek połączenia w repozytorium %s i chce żeby " +"sprawdzić zmiany." #: rhodecode/templates/email_templates/pull_request.html:5 +msgid "View this pull request here" +msgstr "Wyświetl prośby pobrania tutaj" + +#: rhodecode/templates/email_templates/pull_request.html:6 msgid "title" msgstr "tytuł" -#: rhodecode/templates/email_templates/pull_request.html:6 -#: rhodecode/templates/pullrequests/pullrequest.html:115 +#: rhodecode/templates/email_templates/pull_request.html:7 msgid "description" msgstr "opis" -#: rhodecode/templates/email_templates/pull_request.html:11 +#: rhodecode/templates/email_templates/pull_request.html:12 msgid "revisions for reviewing" msgstr "korekty dotyczące rewizji" -#: rhodecode/templates/email_templates/pull_request.html:18 -msgid "View this pull request here" -msgstr "Wyświetl prośby pobrania tutaj" - -#: rhodecode/templates/email_templates/pull_request_comment.html:4 -#, 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 -msgid "New status" -msgstr "Nowy status" - -#: rhodecode/templates/email_templates/pull_request_comment.html:14 -msgid "View this comment here" -msgstr "Zobacz ten komentarz tutaj" +#: rhodecode/templates/email_templates/pull_request_comment.html:3 +#, fuzzy, python-format +msgid "Pull request #%s for repository %s" +msgstr "Połączenie gałęzi #%s dla repozytorium %s" + +#: rhodecode/templates/email_templates/pull_request_comment.html:13 +#, fuzzy +msgid "Closing pull request with status" +msgstr "Żądanie statusu połączenia gałęzi" #: rhodecode/templates/email_templates/registration.html:4 msgid "A new user have registered in RhodeCode" @@ -3515,109 +3912,115 @@ msgstr "Nowy użytkownik został zarejestrowany na stronie" msgid "View this user here" msgstr "Zobacz tego użytkownika tutaj" -#: rhodecode/templates/errors/error_document.html:46 +#: rhodecode/templates/errors/error_document.html:55 #, 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" +#, fuzzy, python-format +msgid "%s File Diff" msgstr "%s Pliki różnic" -#: rhodecode/templates/files/file_diff.html:12 +#: rhodecode/templates/files/file_diff.html:8 msgid "File diff" msgstr "Pliki różnic" #: rhodecode/templates/files/files.html:4 -#: rhodecode/templates/files/files.html:74 -#, python-format -msgid "%s files" +#: rhodecode/templates/files/files.html:76 +#, fuzzy, 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.html:30 +#: rhodecode/templates/files/files_add.html:31 +#: rhodecode/templates/files/files_edit.html:31 +#: rhodecode/templates/shortlog/shortlog_data.html:9 +#, fuzzy +msgid "Branch" +msgstr "gałąź" #: rhodecode/templates/files/files_add.html:4 -#: rhodecode/templates/files/files_edit.html:4 -#, python-format -msgid "%s Edit file" -msgstr "Edytuj plik %s" +#, fuzzy, python-format +msgid "%s Files Add" +msgstr "Pliki %s" #: rhodecode/templates/files/files_add.html:19 -msgid "add file" +#, fuzzy +msgid "Add file" msgstr "dodaj plik" -#: rhodecode/templates/files/files_add.html:40 +#: rhodecode/templates/files/files_add.html:38 +#: 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_add.html:45 +#: rhodecode/templates/files/files_add.html:43 msgid "File Name" msgstr "Nazwa Pliku" -#: rhodecode/templates/files/files_add.html:49 -#: rhodecode/templates/files/files_add.html:58 +#: rhodecode/templates/files/files_add.html:47 +#: rhodecode/templates/files/files_add.html:56 msgid "or" msgstr "lub" -#: rhodecode/templates/files/files_add.html:49 -#: rhodecode/templates/files/files_add.html:54 +#: rhodecode/templates/files/files_add.html:47 +#: rhodecode/templates/files/files_add.html:52 msgid "Upload file" msgstr "Dodaj plik" -#: rhodecode/templates/files/files_add.html:58 +#: rhodecode/templates/files/files_add.html:56 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_add.html:61 +#: rhodecode/templates/files/files_edit.html:37 #: rhodecode/templates/files/files_ypjax.html:3 msgid "Location" msgstr "Położenie" -#: rhodecode/templates/files/files_add.html:67 +#: rhodecode/templates/files/files_add.html:65 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/files/files_add.html:75 +#: rhodecode/templates/files/files_edit.html:61 #: rhodecode/templates/shortlog/shortlog_data.html:6 -msgid "commit message" +#, fuzzy +msgid "Commit message" msgstr "komentarz" -#: rhodecode/templates/files/files_add.html:81 -#: rhodecode/templates/files/files_edit.html:67 +#: rhodecode/templates/files/files_add.html:79 +#: rhodecode/templates/files/files_edit.html:65 msgid "Commit changes" msgstr "Zatwierdź zmiany" #: rhodecode/templates/files/files_browser.html:13 -msgid "view" +#, fuzzy +msgid "View" msgstr "widok" #: rhodecode/templates/files/files_browser.html:14 -msgid "previous revision" +#, fuzzy +msgid "Previous revision" msgstr "poprzednia wersja" #: rhodecode/templates/files/files_browser.html:16 -msgid "next revision" +#, fuzzy +msgid "Next revision" msgstr "następna wersja" #: rhodecode/templates/files/files_browser.html:23 -msgid "follow current branch" +#, fuzzy +msgid "Follow current branch" msgstr "śledź mierzącą gałąź" #: rhodecode/templates/files/files_browser.html:27 -msgid "search file list" +#, fuzzy +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..." @@ -3639,34 +4042,44 @@ msgid "Last modified" msgstr "Ostatnio modyfikowany" #: rhodecode/templates/files/files_browser.html:52 -msgid "Last commiter" +msgid "Last committer" msgstr "Autor" +#: rhodecode/templates/files/files_edit.html:4 +#, fuzzy, python-format +msgid "%s Files Edit" +msgstr "Pliki %s" + #: rhodecode/templates/files/files_edit.html:19 -msgid "edit file" +#, fuzzy +msgid "Edit file" msgstr "edytuj plik" +#: rhodecode/templates/files/files_edit.html:47 +#: rhodecode/templates/files/files_source.html:23 +#, fuzzy +msgid "Show annotation" +msgstr "pokaż adnotacje" + +#: rhodecode/templates/files/files_edit.html:48 +#: rhodecode/templates/files/files_source.html:25 +#: rhodecode/templates/files/files_source.html:55 +#, fuzzy +msgid "Show as raw" +msgstr "wyświetl jako raw" + #: 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" +#, fuzzy +msgid "Download as raw" msgstr "Pobierz jako raw" -#: rhodecode/templates/files/files_edit.html:54 -msgid "source" +#: rhodecode/templates/files/files_edit.html:52 +#, fuzzy +msgid "Source" msgstr "źródło" -#: rhodecode/templates/files/files_edit.html:59 +#: rhodecode/templates/files/files_edit.html:57 msgid "Editing file" msgstr "Edycja pliku" @@ -3675,15 +4088,18 @@ msgid "History" msgstr "Historia" #: rhodecode/templates/files/files_history_box.html:9 -msgid "diff to revision" +#, fuzzy +msgid "Diff to revision" msgstr "różnice do rewizji" #: rhodecode/templates/files/files_history_box.html:10 -msgid "show at revision" +#, fuzzy +msgid "Show at revision" msgstr "wskaż zmiany" #: rhodecode/templates/files/files_history_box.html:11 -msgid "show full history" +#, fuzzy +msgid "Show full history" msgstr "pokaż pełną historię" #: rhodecode/templates/files/files_history_box.html:16 @@ -3699,15 +4115,30 @@ msgid "Load file history" msgstr "Załaduj historię pliku" #: rhodecode/templates/files/files_source.html:21 -msgid "show source" +#, fuzzy +msgid "Show source" msgstr "pokaż źródło" -#: rhodecode/templates/files/files_source.html:44 +#: rhodecode/templates/files/files_source.html:29 +#, fuzzy, python-format +msgid "Edit on branch:%s" +msgstr "Usunięta gałąź: %s" + +#: rhodecode/templates/files/files_source.html:31 +#, fuzzy +msgid "Edit on branch:?" +msgstr "Usunięta gałąź: %s" + +#: rhodecode/templates/files/files_source.html:31 +msgid "Editing files allowed only when on branch head revision" +msgstr "" + +#: rhodecode/templates/files/files_source.html:46 #, python-format msgid "Binary file (%s)" msgstr "Plik binarny (%s)" -#: rhodecode/templates/files/files_source.html:53 +#: rhodecode/templates/files/files_source.html:55 msgid "File is too big to display" msgstr "Plik jest za duży do wyświetlenia" @@ -3728,9 +4159,11 @@ msgstr "Brak plików w danej ścieżce" msgid "%s Followers" msgstr "Obserwatorzy %s" -#: rhodecode/templates/followers/followers.html:13 -msgid "followers" -msgstr "obserwatorzy" +#: rhodecode/templates/followers/followers.html:9 +#: rhodecode/templates/summary/summary.html:183 +#: rhodecode/templates/summary/summary.html:184 +msgid "Followers" +msgstr "Obserwowane" #: rhodecode/templates/followers/followers_data.html:12 msgid "Started following -" @@ -3741,32 +4174,33 @@ msgstr "Rozpoczęto obserwację -" msgid "%s Fork" msgstr "Gałęzi %s" -#: rhodecode/templates/forks/fork.html:31 +#: rhodecode/templates/forks/fork.html:28 msgid "Fork name" msgstr "Nazwa rozgałęzienia" -#: rhodecode/templates/forks/fork.html:68 +#: rhodecode/templates/forks/fork.html:65 msgid "Private" msgstr "Prywatny" -#: rhodecode/templates/forks/fork.html:77 +#: rhodecode/templates/forks/fork.html:74 msgid "Copy permissions" msgstr "Skopiuj uprawnienia" -#: rhodecode/templates/forks/fork.html:81 +#: rhodecode/templates/forks/fork.html:78 msgid "Copy permissions from forked repository" msgstr "Skopiuj zezwolenia z rozwidlenia repozytorium" -#: rhodecode/templates/forks/fork.html:86 +#: rhodecode/templates/forks/fork.html:84 msgid "Update after clone" msgstr "Aktualizuj po klonowaniu" -#: rhodecode/templates/forks/fork.html:90 +#: rhodecode/templates/forks/fork.html:88 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" +#: rhodecode/templates/forks/fork.html:93 +#, fuzzy +msgid "Fork this repository" msgstr "gałąź tego repozytorium" #: rhodecode/templates/forks/forks.html:5 @@ -3774,12 +4208,15 @@ msgstr "gałąź tego repozytorium" msgid "%s Forks" msgstr "Gałęzi %s" -#: rhodecode/templates/forks/forks.html:13 -msgid "forks" -msgstr "gałąź" +#: rhodecode/templates/forks/forks.html:9 +#: rhodecode/templates/summary/summary.html:189 +#: rhodecode/templates/summary/summary.html:190 +msgid "Forks" +msgstr "Gałęzie" #: rhodecode/templates/forks/forks_data.html:17 -msgid "forked" +#, fuzzy +msgid "Forked" msgstr "rozgałęziony" #: rhodecode/templates/forks/forks_data.html:42 @@ -3795,44 +4232,27 @@ msgid "RSS journal feed" msgstr "Dziennik kanału RSS" #: rhodecode/templates/journal/journal.html:32 -#: rhodecode/templates/pullrequests/pullrequest.html:55 msgid "Refresh" msgstr "Odśwież" #: rhodecode/templates/journal/journal.html:35 #: rhodecode/templates/journal/public_journal.html:24 -msgid "RSS feed" -msgstr "Kanał RSS" - -#: rhodecode/templates/journal/journal.html:38 -#: rhodecode/templates/journal/public_journal.html:27 msgid "ATOM feed" msgstr "Kanał ATOM" -#: rhodecode/templates/journal/journal.html:49 +#: rhodecode/templates/journal/journal.html:51 msgid "Watched" msgstr "Obserwowane" -#: rhodecode/templates/journal/journal.html:54 -msgid "ADD" -msgstr "DODAJ" - -#: rhodecode/templates/journal/journal.html:77 -msgid "following user" -msgstr "następujący użytkownik" - -#: rhodecode/templates/journal/journal.html:77 -msgid "user" -msgstr "użytkownik" - -#: rhodecode/templates/journal/journal.html:110 -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:55 msgid "No entries yet" msgstr "Brak wpisów jeszcze" +#: rhodecode/templates/journal/public_journal.html:4 +#: rhodecode/templates/journal/public_journal.html:21 +msgid "Public Journal" +msgstr "Dziennik Publiczny" + #: rhodecode/templates/journal/public_journal.html:13 msgid "ATOM public journal feed" msgstr "Publiczny dziennik kanału ATOM" @@ -3841,75 +4261,61 @@ msgstr "Publiczny dziennik kanału ATOM" 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 +#: rhodecode/templates/pullrequests/pullrequest.html:8 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 +#: rhodecode/templates/pullrequests/pullrequest.html:52 msgid "Detailed compare view" msgstr "Szczegółowe porównanie widoku" -#: rhodecode/templates/pullrequests/pullrequest.html:70 -#: rhodecode/templates/pullrequests/pullrequest_show.html:100 +#: rhodecode/templates/pullrequests/pullrequest.html:56 +#: rhodecode/templates/pullrequests/pullrequest_show.html:137 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 +#: rhodecode/templates/pullrequests/pullrequest.html:65 +#: rhodecode/templates/pullrequests/pullrequest_show.html:149 msgid "owner" msgstr "właściciel" -#: rhodecode/templates/pullrequests/pullrequest.html:91 -#: rhodecode/templates/pullrequests/pullrequest_show.html:127 +#: rhodecode/templates/pullrequests/pullrequest.html:77 msgid "Add reviewer to this pull request." msgstr "Pokarz wszystkie zmiany" -#: rhodecode/templates/pullrequests/pullrequest.html:97 +#: rhodecode/templates/pullrequests/pullrequest.html:83 msgid "Create new pull request" msgstr "Stwórz nowe żądanie połączenia gałęzi" -#: rhodecode/templates/pullrequests/pullrequest.html:106 +#: rhodecode/templates/pullrequests/pullrequest.html:92 +#: rhodecode/templates/pullrequests/pullrequest_data.html:14 #: 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 +#: rhodecode/templates/pullrequests/pullrequest.html:109 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 +#: rhodecode/templates/pullrequests/pullrequest_show.html:4 +#, fuzzy, python-format +msgid "%s Pull Request #%s" +msgstr "%s Połączonych gałęzi #%s" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:35 +msgid "Review status" +msgstr "Nowy status" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:40 msgid "Pull request status" msgstr "Żądanie statusu połączenia gałęzi" -#: rhodecode/templates/pullrequests/pullrequest_show.html:44 +#: rhodecode/templates/pullrequests/pullrequest_show.html:53 msgid "Still not reviewed by" msgstr "Nie ma jeszcze recenzenta" -#: rhodecode/templates/pullrequests/pullrequest_show.html:48 +#: rhodecode/templates/pullrequests/pullrequest_show.html:57 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" @@ -3917,72 +4323,70 @@ 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" +#: rhodecode/templates/pullrequests/pullrequest_show.html:59 +#, fuzzy +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 +#: rhodecode/templates/pullrequests/pullrequest_show.html:65 +#, fuzzy +msgid "Origin repository" +msgstr "Repozytorium git" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:89 msgid "Created on" msgstr "Utworzono" -#: rhodecode/templates/pullrequests/pullrequest_show.html:65 +#: rhodecode/templates/pullrequests/pullrequest_show.html:102 msgid "Compare view" msgstr "Wyświetl porównanie" -#: rhodecode/templates/pullrequests/pullrequest_show.html:112 +#: rhodecode/templates/pullrequests/pullrequest_show.html:149 msgid "reviewer" msgstr "recenzent" +#: rhodecode/templates/pullrequests/pullrequest_show.html:164 +#, fuzzy +msgid "Add or remove reviewer to this pull request." +msgstr "Pokarz wszystkie zmiany" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:168 +#, fuzzy +msgid "Save changes" +msgstr "Bez zmian" + #: 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" +#, fuzzy, python-format +msgid "%s Pull Requests" +msgstr "%s Moje prośby połączenia gałęzi" #: rhodecode/templates/search/search.html:6 -#, python-format -msgid "Search \"%s\" in repository: %s" -msgstr "Wyszukiwanie \"%s\" w repozytorium: %s" +#, fuzzy +msgid "Search repository" +msgstr "Szukaj 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 +#: rhodecode/templates/search/search.html:16 msgid "Search in all repositories" msgstr "Szukaj we wszystkich repozytoriach" -#: rhodecode/templates/search/search.html:48 +#: rhodecode/templates/search/search.html:50 msgid "Search term" msgstr "Szukana fraza" -#: rhodecode/templates/search/search.html:60 +#: rhodecode/templates/search/search.html:62 msgid "Search in" msgstr "Szukaj w" -#: rhodecode/templates/search/search.html:63 +#: rhodecode/templates/search/search.html:65 msgid "File contents" msgstr "Zawartość pliku" -#: rhodecode/templates/search/search.html:64 +#: rhodecode/templates/search/search.html:66 msgid "Commit messages" msgstr "Komunikaty" -#: rhodecode/templates/search/search.html:65 +#: rhodecode/templates/search/search.html:67 msgid "File names" msgstr "Nazwy plików" @@ -3992,40 +4396,25 @@ msgstr "Nazwy plików" msgid "Permission denied" msgstr "Brak uprawnień" -#: rhodecode/templates/settings/repo_settings.html:5 -#, python-format -msgid "%s Settings" -msgstr "Ustawienia %s" - -#: rhodecode/templates/settings/repo_settings.html:102 -msgid "Delete repository" -msgstr "Usuń repozytorium" - -#: rhodecode/templates/settings/repo_settings.html:109 -msgid "Remove repo" -msgstr "Usuń repo" - #: rhodecode/templates/shortlog/shortlog.html:5 -#, python-format -msgid "%s Shortlog" -msgstr "%s Lista zmian" - +#, fuzzy, python-format +msgid "%s Lightweight Changelog" +msgstr "%s Prosta lista zmian" + +#: rhodecode/templates/shortlog/shortlog.html:11 #: 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" +msgid "Lightweight Changelog" +msgstr "Użyj lekkiego pulpitu" #: rhodecode/templates/shortlog/shortlog_data.html:7 -msgid "age" +#, fuzzy +msgid "Age" msgstr "ostatnia zmiana" -#: rhodecode/templates/shortlog/shortlog_data.html:8 -msgid "author" -msgstr "autor" +#: rhodecode/templates/shortlog/shortlog_data.html:20 +#, fuzzy, python-format +msgid "Click to open associated pull request #%s" +msgstr "Kliknij żeby otworzyć prośbę o połączenie gałęzi #%s" #: rhodecode/templates/shortlog/shortlog_data.html:75 msgid "Add or upload files directly via RhodeCode" @@ -4044,156 +4433,170 @@ msgstr "Istniejące repozytorium?" 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 +#: rhodecode/templates/summary/summary.html:16 +#, fuzzy, python-format +msgid "%s ATOM feed" +msgstr "%s ATOM" + +#: rhodecode/templates/summary/summary.html:17 +#, fuzzy, python-format +msgid "%s RSS feed" +msgstr "%s RSS" + +#: rhodecode/templates/summary/summary.html:62 #, python-format msgid "Repository locked by %s" msgstr "Repozytorium zablokowane przez %s" -#: rhodecode/templates/summary/summary.html:72 +#: rhodecode/templates/summary/summary.html:64 msgid "Repository unlocked" msgstr "Repozytorium odblokowane" -#: rhodecode/templates/summary/summary.html:91 +#: rhodecode/templates/summary/summary.html:83 #, python-format msgid "Non changable ID %s" msgstr "Brak ID pełnej zmiany %s" -#: rhodecode/templates/summary/summary.html:96 -msgid "public" +#: rhodecode/templates/summary/summary.html:88 +#, fuzzy +msgid "Public" msgstr "publiczny" -#: rhodecode/templates/summary/summary.html:104 -msgid "remote clone" +#: rhodecode/templates/summary/summary.html:88 +#: rhodecode/templates/summary/summary.html:89 +msgid "Fork of" +msgstr "Gałąź z" + +#: rhodecode/templates/summary/summary.html:96 +#, fuzzy +msgid "Remote clone" msgstr "zdalne klonowanie" -#: rhodecode/templates/summary/summary.html:125 +#: rhodecode/templates/summary/summary.html:117 msgid "Contact" msgstr "Kontakt" -#: rhodecode/templates/summary/summary.html:139 +#: rhodecode/templates/summary/summary.html:131 msgid "Clone url" msgstr "Url klonowania" -#: rhodecode/templates/summary/summary.html:142 +#: rhodecode/templates/summary/summary.html:136 msgid "Show by Name" msgstr "Pokaż nazwę" -#: rhodecode/templates/summary/summary.html:143 +#: rhodecode/templates/summary/summary.html:137 msgid "Show by ID" msgstr "Pokaż ID" +#: rhodecode/templates/summary/summary.html:143 +msgid "Trending files" +msgstr "Statystyki" + #: rhodecode/templates/summary/summary.html:151 -msgid "Trending files" -msgstr "Statystyki" +#: rhodecode/templates/summary/summary.html:167 +#: rhodecode/templates/summary/summary.html:232 +msgid "enable" +msgstr "włącz" #: 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 +#: rhodecode/templates/summary/summary.html:163 msgid "There are no downloads yet" msgstr "Nie pobrano jeszcze plików" -#: rhodecode/templates/summary/summary.html:173 +#: rhodecode/templates/summary/summary.html:165 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 +#: rhodecode/templates/summary/summary.html:171 msgid "Download as zip" msgstr "Pobierz jako zip" -#: rhodecode/templates/summary/summary.html:182 +#: rhodecode/templates/summary/summary.html:174 msgid "Check this to download archive with subrepos" msgstr "Zaznacz tu żeby pobrać archiwum z subrepozytorium" -#: rhodecode/templates/summary/summary.html:182 +#: rhodecode/templates/summary/summary.html:174 msgid "with subrepos" msgstr "z subrepozytorium" -#: rhodecode/templates/summary/summary.html:195 +#: rhodecode/templates/summary/summary.html:197 +#, fuzzy +msgid "Repository Size" +msgstr "repozytoria" + +#: rhodecode/templates/summary/summary.html:204 +#: rhodecode/templates/summary/summary.html:206 +#, fuzzy +msgid "Feed" +msgstr "Kanał RSS" + +#: rhodecode/templates/summary/summary.html:224 msgid "Commit activity by day / author" msgstr "komunikaty aktywne w ciągu dnia / autor" -#: rhodecode/templates/summary/summary.html:206 +#: rhodecode/templates/summary/summary.html:235 msgid "Stats gathered: " msgstr "Statystyki zebrane: " -#: rhodecode/templates/summary/summary.html:227 -msgid "Shortlog" -msgstr "Lista zmian" - -#: rhodecode/templates/summary/summary.html:229 +#: rhodecode/templates/summary/summary.html:256 +#, fuzzy +msgid "Latest changes" +msgstr "Ostatnia aktywność" + +#: rhodecode/templates/summary/summary.html:258 msgid "Quick start" msgstr "Szybki start" -#: rhodecode/templates/summary/summary.html:243 +#: rhodecode/templates/summary/summary.html:272 #, python-format msgid "Readme file at revision '%s'" msgstr "Plik readme w rewizji '%s'" -#: rhodecode/templates/summary/summary.html:246 +#: rhodecode/templates/summary/summary.html:275 msgid "Permalink to this readme" msgstr "Link do tego readme" -#: rhodecode/templates/summary/summary.html:304 +#: rhodecode/templates/summary/summary.html:333 #, python-format msgid "Download %s as %s" msgstr "Pobierz %s jak %s" -#: rhodecode/templates/summary/summary.html:661 +#: rhodecode/templates/summary/summary.html:380 +msgid "files" +msgstr "pliki" + +#: rhodecode/templates/summary/summary.html:690 msgid "commits" msgstr "komunikaty" -#: rhodecode/templates/summary/summary.html:662 +#: rhodecode/templates/summary/summary.html:691 msgid "files added" msgstr "pliki dodane" -#: rhodecode/templates/summary/summary.html:663 +#: rhodecode/templates/summary/summary.html:692 msgid "files changed" msgstr "pliki zmienione" -#: rhodecode/templates/summary/summary.html:664 +#: rhodecode/templates/summary/summary.html:693 msgid "files removed" msgstr "pliki usunięte" -#: rhodecode/templates/summary/summary.html:667 +#: rhodecode/templates/summary/summary.html:695 msgid "commit" msgstr "komunikaty" -#: rhodecode/templates/summary/summary.html:668 +#: rhodecode/templates/summary/summary.html:696 msgid "file added" msgstr "plik dodany" -#: rhodecode/templates/summary/summary.html:669 +#: rhodecode/templates/summary/summary.html:697 msgid "file changed" msgstr "plik zmieniony" -#: rhodecode/templates/summary/summary.html:670 +#: rhodecode/templates/summary/summary.html:698 msgid "file removed" msgstr "plik usunięty" @@ -4202,32 +4605,7 @@ msgstr "plik usunięty" msgid "%s Tags" msgstr "Etykiety pliku %s" -#: rhodecode/templates/tags/tags.html:29 +#: rhodecode/templates/tags/tags.html:26 msgid "Compare tags" msgstr "Porównaj tagi" -#~ 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" - -#~ 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" diff --git a/rhodecode/i18n/pt_BR/LC_MESSAGES/rhodecode.mo b/rhodecode/i18n/pt_BR/LC_MESSAGES/rhodecode.mo index 9d334c102b305f3f326470faa25fc203408872f0..052d209b9871d5f5f9f13a983c5856d96f232bfc GIT binary patch literal 37507 zc%0>Z378yLb#7tSm`6<5959eV_E?LjTO(QPXt8FKH1cek9!ZvE*{%^#K7MVR`4A|J2sgS`3DK z?>&EZpQ>ATIrrSN-+RZ8zu+0KHRzugoMjj^)HG(vh@uTxG?^j%47|$Vi@dcRw`U`+(;R4jJTmU?# zFTgymCHQoLw_kw%@4f(Zelx)df*&Aw5y9tm7{)@L55c884}vQR9w)eh;3o(!Cir85 z%L!h1p<(0+?!FM~a_fa?|0ym1?uD4&0xEn4^T(c1Kzm(u_5FFRj} zF9iK=T!{JJN$_O^U%L?Vd)GqH<^2Sg5&YajjQiY07^j<{NpN@(=;kg$f3IEyez;rT z?_UJ^{RzQAf*&JD{~G5k27jy}SRmL(u#@2H2@=VSk1odgKd~77J#7i{?`($>v^W}3x&nt3RPdA78&glD5{r-j=`2WEi z@cg?R@cT**<9|N~ym+x!GvDUH4+DAd`=xoT|L#2ct>w{AGY>qDU6|+Jc40n`>-*Qc!2jRx!utHiGPHa7GPGN;4CTv~VZ8Or z&~E!O@b#W$!0Qi|L2vx&GOXVtTJN*VFt2~se!r~mU(^1-yA1R>YdOkaxg7XkxEyk~ zemUArEeGEFmjjxE$;D zmF3{G9}s*q!Ic+dy&k(5c>dsG^!LIQkh}8;_7E(uK>6ENfFItq0(AMa70SmepjW=M z0^>Y$CF;FoCGc6W67@P)VxF7y`^ZYr>2fW1R)Rh=3hz>Q-%6~{2UmhVkE{e8K1XmP zk4vyf@KviIKR2%e{q9@^yx+JA>vuxo2UbBo9$f|e{$&-$d4k}T1b?;)_*}Uf{8(F! zer{V0JdUr%_`26u|%=;mI|I}*C>+iMRmsevwzPTFf@x9d;|9`Irp1-yR>-&;5 zYG>D=UC$cyvuzFf-Mt2MEUf|k53B(lZ`bdyTLU>hu?G0RSKEI?>pivx^Z#cZ?|a(r z*Vm%Im##(s7p(=Jm#hVT{cAD*?Q7BR?zPaPm9@b0mbIYYv9*xvKh$=AOK?5&-&)wi zS9YVHLO1BKryK39ZnWP=kp49ecLUFdyJ06j(+xbo)(t$r-;Mb^XC37GMeDFGOV>d^ z_OFB9xndpWabz9%;*NC~{~m(l1mCm{^!mm+(20>{c+Pr^^UC$GA6@IQF5?8rr7()? zq5p1K54-;d>w)jztq1+Sz8?CRg^lTT(FVxZT7BQK0r(d;U>t7)@VsFI`0dCB;CbH$ z_!ED$0ebt38$j2WZp8NsH-diojlgI1M)bR5Bj#&u1U}V`pwqP*f#>TtqMvte1YQqs z1pWVEBk25%jgaRbYWwpp!TgsJ+|KfQ3CiywSmyP<1nc>{O<1oNZo<4eH(|Vun}FvI zf}2^cHbMXW0YRVnWE1ASr3dpW^?)9=9@UFIn9rde$m@|F$j`AJ%=cb`4#BtgVEtaw zi}oG8z+(x)DPG=Q;PJLz@X4QOy-)UHT_5Si{J+x+`uwC9d~|jn?DUF0;JLRC{T}Rt z{=Bmf{P*rY$i*iJk_s`t+NXNIU)QT2{pb5JueJRce~W$}>PPzttrzyg&pgzRdHqqp z>Y0A5*QW@+lKG+^co_r0`xOJ|f5`yke9ZvXWqbhjrUo$Htpk|HG5!8~1Mqtv9#H!- z06acQaF*bs1h)_z+zk70d^7OjSk5a{%+A>j9{VXWKB2ySA! z41*5EVaP*e80}_;(a&p#p^x88a2@mcFyfA9j)0z9NAPYDBo;D$e+2yY1VM5Ij2DkW z?+lK@kH29Q_`h=$`t7r$=;x=S;P-RKAP*yBXcvxwKi@tEJ^CqvL%a@SkmK&{n0Nnn z(0BKC%yU}HZ`b#?ZU^1pqwp`bqu)mrepBl|ZyfVpFb=vb8VCP&j)TuvkE?$@4mysF zgAXnn2i~@RzhfNybC1H;Yx!HWzx%Y^I~6{x8K3fVHce~cRtblQ@Ex)}JDH7SpW&zMUyu{^6ZizsGh$e!smF^!eFNtmpH0;k{!Q_-xfK$iwI^)GzPCe44vd zZg&CC*XsAT?gIb3a~H<@$S%c^%X!+Bw zfPUz{0{WzS1>)NWu0TBf*cITTv-VmS$)eR{pV-@h0B%{vHQ%KWw$crU#Yd~xNKh!?NB5_I|9D?yLE{8U4SwjQW?BAy-$GL8t4=$Va@f3_6}w zL4S)XSpQ8G(C1(Ud~kCGa`0dUa`lfD%=14hSf6KC(SAu4^X}F6(JJhFr3!w&p$hzN zsbZe5tAZYXsP7-DV!XeuVm{xgf^N@rFy5~_kbBcXzj+6EZgr54C^%^MI}XpV#kS z)Ayh0`}1A&dx64kg<~%8E4!f25f^m(Z5Q(UCKvgL&$*!U22bN?5A)ydAs*hT@D2~_ z|L0ooGalCSUp)BL-}7{x8km>U(7Z-N^BN7T!v`9m$6qv1|F8A^-x`|NS9sQb;QQkJ zz~{XESSNEo)~{^80Ub|2$^$j3ZB=Yx*l@hD3GSXB#*u;FUZ(<#9ZbDz()x-#kaFyB`n0G{tWfcbv-0OG)pAHe#4QQv=Z0C@f8 zEbQckv%qW1EY__u3w*;_=$$vuVt((NMLy!wv!L564yz#Z@@8#EG-1D#1_~lyAtN&W8ci~#_L+x7R zBd*u?|Iqe7()XubhkV2fuLIo=T?agmUI%`7_jRE2L)WQae4Xm0>p<7%Uk`tw`+Cf$ zcs=;z@b$2Fue%=f__OO_&mX%U@!3zW2OcXAfv)QhVf?{En%6s|`)~@qLx|gE^!pnR zL4NK(1o{2)A zx(VaI>L$E*-voSjXt{qA;^8|8K2Gp&ZUWu^_|=&I=Uxr|JojeUtJOC{uFE%LoZ8Kx z&kZ+&f8KaA^vmzx3^{$^X84hxxEb_%!4a&-iX*_I=Lqn)@(A?x%n|V2?MJYVCyqd# z|53}Iehct=*)8Cg%Lwk}b-V@h|JW_aNBqkzz&n2{)@9^Y(Eloego^R%TS4cuZv!4L zx()PSb{p_sa~sCnc^lTLejC>9hTGup-hLbO#;0xrKRkLH@cgp&^ZeVPkI%gw`G|qr zA-^}=4m>_faE#y&Z%2N1@DAv+x7>mF<mH16-vfFaBxsnHTQWNWv+nt} z(Xpr**#6?coUz<6FlW7{8G5E~PdoOE*=W{k^t``m2cda>$D)RRl~Y4{zZFy`J0JZ(AXK^n7aQT6KCX`(E7)tF~EoYIZOigm&F*)NCuTO~2{N7wWL)6s^$l zTtd-uT$BFw{F3cs5rd-TCWtV?i--b_%Q!F2Jm+%b1H+>`2h7c*>s#mi6=s&5N&{AKq*gVOwO4LpBX`j%U)5{3C? zaLlwyC8B>o^Rj%KiQ~;M`RJo1q$5VLO19~_m_dqLW*n+CNo|Tn>cE+-*^G}pZTqtx zu^NrtIy2X_eV@qb6^l*ZCyYx?-*GEu(ISkf!L(I#N){IEWOYllcEU$qnJ92(^(rDZ zpwyYvPfaoit?&#-Nwqrjp-x>>_(kN)x9eVLn>DX^8v3NLD0}`C7oCbsfgOenTNn39 zte!OWNKc#wGpQGlRx4IB)jfB%?llADBcmtu>hwc;Ym#)TC?jf3<;}3_5v`_49xP@y z$ZKHq_7nz;URF2#BSx>|T0C`r=rfx$Kd@_M9>Egn?X&&RDYMeF&AzH#~R@3gF0 zKB~Z-nbx!wS_DEZt$7uF3Rsvkia+{bhsl#zf->pQQmTwCKvxS|qRNh)tSt!YY5O zc>%p;d;+y>k$Mw?0x!msC@T7$S(D5JItrSTLLpT42)BUfS|oi}4%u2*B3m+?ODsd8 zGR2(*p3g`XZMQ_H{lDmTi3`A&H-A{1h;v1Y$)HO@=jxSS(P47BsAi{oF@( z3AUMp#`mVddy@`X2RH7DCuj7j$D>e|Kb&!3}%Vn z4}fO;+H5pvs%St$!B%A231`j8S@xvNrKSZz*6+HK^y-!!zb@+mp=x38)7R)`O?Q%7 ztY=%l#|FnvYrY~>KvGR;uV`kJap06P6}gzWN3@nIwd&afuQ~U186|Y+R9@qFC?2qiR?cyE7KUpwpZo zjDo6gCF|xo56x>yASn7yLo7$Xt@@Q6WKpsGPQaFdF!$Vrp;@(PHApZl_=4soRE{Cy z2l1KN#g0qh2bHuZL9&$*2Xf+*#Wu6u8=O>mES&Z~c5a}YZJ2YY2WqF$v z8)a76AVq{S26#C9M(&!vg;p>Xx#UriM-L5>w=_Pk7|fymp0VgT)_J0=nFpKoI$KU& zi+pRXAS$Ra3RU?zI*$zd{5N{is*|!>@&<{@%QgSRMZ(`=< z$w>@+;tSvt$Bn43zhqO(V!PKsAW`HNJERgVFjZ8XqOI8V6B6$0|+{^eRM_9&)p1g#n8kP;Mbzz*=-++Bk`HqbUA5>Cjt ziO&$lF*Gk`w+TXUf727eOVw)YS!~mI>QdWoNYo&rEmQCW-G=A5Vcy&!6c``q=^q|I zJj1q#6-QQC1bOOeRuw!g8RYp_$K1d`;hz<}<>-8N0^J%%W$P@@9_& z9mOaX5*~(iVJRWo<%gZhtHRLYvFvX;K2yW1n1ikY=CY1JUPhatKvo~>NjB*!NfME| zCk1RtWJEq4zo|E@Ze1A)n&&&L8gbb6+5fg`X&pW6)a`JV7<_ovj1q_RIO1spE{-l0 zSjo4v3p}jOmN7E0b70&MW*!j_oD8lS?U9t~%e*jCZ~y^r8fi&p8zY_xJ4p{wLT=WU z@+fjj9!V{PFr!JC9i|#MHS!)^d4|>IM^Sm~<=LgErtKE}S$NshZPzlAWQ>js4AI&Q8KVut(rqPj+frfCfGm#0)Co1EHkD93OEef2 zDiJ$X!?3X@*vr8??9)uuA;pGKMuY~Z zfsC<;r^edyQ(WpxvV_xW78|xunjhLu1cmt7SVuw~KZ(b}B z%)I*1hE}E+si|xkyKq`v(1Ye~*Boz=r#GJjWRqB2nQ+GTCTG~h0vh9X4(t#!$v9hv zap6$dax0aASlAIPq>p8qZk1q#7?Ij?&tm&z=J5uPrWczb6!A20IkQ%Ev4iv5`Oymn zob~~N$l%dK-D;%Gc}APjSFvWSf5wG20;cWk-jOB zHqE?Tl8r(`&xrlu=pisW77`vxl(9|BCXapO#kgk`(s9|6IO9Mw&D+{B zEsu_zK7E4o&7v+Kp4nB5538!!qJ zJ>wHsO$-%SV@br3iY5v>dMCyQ28;qtOMa378_|mb4ovl_rGiNUT&HI-!jc#!m&FO^ zCtNwdtxfahE|zTF)KV{jJUz}E!9tVWw6X1=iO5;?;B+K#vO7huZb^Q!UP-|YvCZDP zVWdg1$eqJh5c^;(GM$8dvDTE}#r51=qph8zvC=s;9xEbu4T3)+NDqwllEzHPoWDB`&iyr#vgZeudb{=7cl#Y*m78 zqtKj`9U^nGS<#nJ!)tou1jnR}aFsZLGd_HMv={m13>fKBa%7qL2=N81Z@Iw&8QHbN8IEX$`xZ?)VX!zJj@=AR zclp>QE}LDsi_$P-S(gVCGxZ9eTcU`=6^!KOU2Ap*)Lw(;hEJ_rLqxi zin}Mt$H+3}&9UUjlx}}XEi$;WL1K|fZnFHhOC^hi<&3K(IV4HB1WjL#0ub9k3@}|` z#!mSlyrapZOt0y~S#?%mYUT8(2$$HBu+N*izs=tz(IH-f%USt6@V0a5sFLR&xhLF@ zi%JN4rE3HTskM!$fP?Ox`0!9+NhiN=B?DHkxo6#spbd zmwgk&xD!4$>9N}M+O&-c&JXcV%TXUDtoTZKV+S^pk^q7H&XOfNT(-HOF&kFN9&^cp z#Dk4JB55u=<0RdsC$otFfe5PF$%iA&=n3zEKy3gZBWrnf^DBbvC_%^l*7 ztNp_91uaU=E3t0oqH0B5_{CbW)P6rB`iTAH=q=T$gw;-sj|0pldsC$S zbc0XNYuE=uNRC^|*!MUek@%eg(W&6m8fRcp{-%{n=!#q@4slG!K8CP&fn zO0pNpQ&ss}ByDcXb~ES5jh##oSp+>tE4jZ^ zu|&vHw#$-DMPrvO-j>6MRjio&u~bo6X4fb>EEVNq^VGqlu`8u88B2ZlZB?|qO&;)Y zP2TU@MZUdl?50)ZsINkc@5{bb$aNatf#PAF|6LpF&`4K`xMwi3Dk)O$RB}T+)?%gRy&Fna5K8R?}SPqmJ!}E_jg#-j9`ThVfKuga4n)O8$I3u z5HRGO6k%Yam>fY1B*yi4YsV2UFpftJ%-`UhV}qs2u*F?55NUHt8;`JO`T~uBm%z~7 zp15w1sT{<$b+-?`g&b#$O5)U3R3Ne|wlQ)8_F=bl#;7H`t>VIn@1lqFqXQ0PzesLf zc44B^io~iUD)Z7Fv&Mc&6qjXln>&?FL!fMAQUH-UPd%wWz~pB8f}D&IaK?#qdV$9O z9VOF~L#$>;>ipIzzXk?J(6VP`@Cn+baBgUI8GWc1pe3YQ&_V734jPlEmvxn$dA_nP zNZ!=ASB?$`$SSF-_kwJ0D9;3JiW?v&MYCsNXT)@l`5q^#bAzSaP9$c!Q%Yl5etEv@ zY)<9+VQx66IHg=~vl8Scyl!(~xMy%^Q%`^Y_&}j>_Son|u1|BnIX+?7Z7%Oxc5$w2 zMXqb5xvZ;u*~(nk>aH%Tn2U0qNxkJ%DYtyNxolPUiq*NUi>V%;0?18}*$rx}FuTp3 zW`&P9npxYIm)ttQN zS2mtKR%`lJEw`DhOwet*4S5YVEMI5hal<0l+-NRaeD?6*@IXSFWkioYY`Eq)gy&UTx<5_5Is*XCE9 zZJ6vbI&zxvmwa1_5S%+fZf46XZcRCs0=+fmTMMcfHi3 z6kD#RKrTDwBqt=4Xn$)e^yf~T=58F#<&3d`@!`RV!ErvJKh1Hu*)ukn zx`HK#nT;O7$><^XgMLd+k$1e=U899F>0jNh@`BVyo`5HZ*!*-Gnt>OQAybdRIUvIf^FH2bwjGL*$TOmG3XA8qp~5Hyp}yTTn{_!j&XkId{?J0{3AolurKX&8q>k+a#ac7q z0Y%!{bthFE?ku7+*RA-?M%&S&>YU{Y=ib4&a5+erUHwxuOpkJ=Z4%tt)#Ch|bI{Tw zS0!vtatWkYb}X%S4JVy)(=Q4kTl7x5+7>%f7SFtOP0wWEqBWt`7H(@nj?b_jPiwLn z6iNP>b2zm=_g>ejd$`^;%(_v;UNjrB;GW#^B6c1Y!IyBU;kn>C-16!lG5MmG(E~vz ziny4ET=g2Zh&mvYC3&2=2kOy6s_;!ykln0V zB$7||ju<%@lK#?;h?McIF*b|CO-LQZHc)K94$jMhyn<8Cli)<9gm-j`UOejkG0Gk_W%wG}} zm;OdQFl?}jR&A+-Jk#rPPOD#uq85=#Zp=j{r6@P&h#IVD2QC}jLVoZVX?a@+!>IWl zU-|N(MoU~zZqZrM`A3;g!z!_VHNQ+KN`zv9m#m26#FqYoH|Ykz5qgylR=v$tIyJ$5aN zJuP_`N!6A7xv$&ln7pZC&)qM0U>DPvATPRXB?XAztmsA{PbfOW2BSD_9VFDY>ZE;K z!Ao9atCgakOM*0ag6xTm6Ey2Gy?mFISd=eN}J~Cam9ij*~OG&%2kK2b_(o4Ep+hDlv(j6faGsH?@RdPEG?Ugb zc6v1ugp*trq&|vviPt!?g9ySF7U$Wsh0G{1gKUw=IS#oz4W%*7=xryB6-CMu{E$wWJj%;Y!$$i6|A+-GxM4wnsy zFi~Kkw+`dLL;M70O%Zp#gJ?Y^*A6M37mLU@4oTE;L7nP0gr>bb@c^YsCM?b`NO>Cv z5w{di;yd-J_b9ar#@w4~p+k!tN46wqC~KpVG9RLr;x;7Bti&l!bp;)7`)w=z;+GZs z;5)GM!^beP>0*vs)V|pl@IA|k>o1`j;$UH^i0YoSg zy)|`f;!GM5ceXT2`J!^>Q<367v_`(3zJS5hFa8x=dgL5n*eq!-iiYr_+*fN#1~n$L z<|(=lNeVw}jN;3YsT+|JBO{eB&p~`GQmq?m6w@`*q1dq93|hjeksTv_Jz`b5^Gr!Et7kwp!fa*)k8b_|cq-StbkyUCd;uTjk2-y|yS=et@hqExcwUJ1@i3I#^B zB{In}m?Os>>Y6B~rI4PA9w+$QWNNq%B}l*LvUP6D_h9)UK58TMQco$~Fo>$iUd;*Y zg<;>(o*%-R5{YnLy(D=%8BA*vmaBRT)g*IHX>)lSj0(tX$qB2`IfE6e=vVyV1#s~F%a@O zgV4fdTk1#m;6~%KLGbAK`jVvg2%Wx>Bq&RVx@HciCgvV6Jqed(3nS`=v$OOixo2y$ zu~_Kpj!0xR7CvPcZhK&H0_?OR&}z)Rx1`aeS8w<>-!>G(R+9sF)4bEcljEH9+`aL^ zgF3F?)H&E1WhQ9)!Mq+*=V?Zh&a~8PM*FuV#m8}(cAR1m(ojLYVV4})l??ducv(DV zD>IAMY(hObc-8X7$6>^lbPNSBu|{smkHlM>t!<(de8;>`liAIdmi$S~StC)=+&gIY zMgBuSDO=g@RIT3A<(cU|I*D{(G5;tPW6QzOvtE$O?%L$d0=eB@aqdCvi3rE>h4Z5A zhxS29)iUAv4+)B8@r8RkwGA;xk+6%Se!u0YugD>G9D;cmVQ0hU!=0Yo)YYvC;@G+O zgw0xVvWWPFe2_d(&u*JF*vF)lW6h*FWKT7HAP%S6I$FGP(^lT}BG!zySJ2wk<93`c z)07pqIJ_r&g?CJnk9-J$uf+u744ZPNm-LBSntRYC((x`(vL{LAolomH6f#XX4g9pa z{Bq~oVY&$K@L{mj(Lj#9u%S;5I58nvQ&MR~tL3IIs8%MP7hN2kheYy>j|D-w%HFLA zboQQawCBp#Ux6Y`l9YTA(J5T)bg6ZcOTTesswP_USbnOwjTuiJ_-VNYJkJTuvSn)b zB_2UtsfzCJ#l;+5NB4qpfU3o%Xm?z7Aamdw*M(V!m+aJeT^Bii<~1DQhy6y=j7MZz z*#lCHLvm#NS9pV1hd)WkI?`gL&g?#MYbyw(q^SKk+m$-wVAaZeGkER+-lq*Z`GldI zltpOSmVgJKV& zEQE<`#;H?5df_;!5gos(kQ!pMy+su5ukh~iPB9~i9@bM+A`}tTJCk$Dq>dvyCc;7y zkY%m#LbS=L zW-WD|&q{qv#%9;jhpkkH#S;=_@2?~+*~TWuBcuG1NJ1jgPPbPCozqmEw1GW4_noQqSkjH0+2X_ZdcKe^JxfP>jf@H0gL`5p zDa9THyQG;zNqh9{@7`=wmhB?;$y)o?uK2?qKa*VFo8ENDehjL6k^I{uZdfyp!1uQ7 zr*Q?2M&f99UWF_+i9y_JWO>In`2XLfQ$E9c(=1^)t#)Qtr\n" "Language-Team: pt_BR \n" @@ -22,11 +22,13 @@ msgid "All Branches" msgstr "Todos os Ramos" #: rhodecode/controllers/changeset.py:83 -msgid "show white space" +#, fuzzy +msgid "Show white space" msgstr "mostrar espaços em branco" #: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97 -msgid "ignore white space" +#, fuzzy +msgid "Ignore white space" msgstr "ignorar espaços em branco" #: rhodecode/controllers/changeset.py:163 @@ -34,20 +36,20 @@ msgstr "ignorar espaços em branco" msgid "%s line context" msgstr "contexto de %s linhas" -#: rhodecode/controllers/changeset.py:314 -#: rhodecode/controllers/pullrequests.py:417 +#: rhodecode/controllers/changeset.py:329 +#: rhodecode/controllers/pullrequests.py:438 #, fuzzy, python-format msgid "Status change -> %s" msgstr "Última alteração" -#: rhodecode/controllers/changeset.py:345 +#: rhodecode/controllers/changeset.py:360 msgid "" -"Changing status on a changeset associated witha closed pull request is " +"Changing status on a changeset associated with a closed pull request is " "not allowed" msgstr "" -#: rhodecode/controllers/compare.py:75 -#: rhodecode/controllers/pullrequests.py:121 +#: rhodecode/controllers/compare.py:74 +#: rhodecode/controllers/pullrequests.py:167 #: rhodecode/controllers/shortlog.py:100 #, fuzzy msgid "There are no changesets yet" @@ -94,129 +96,142 @@ msgid "%s %s feed" msgstr "%s - feed %s" #: rhodecode/controllers/feed.py:86 -#: rhodecode/templates/changeset/changeset.html:137 -#: rhodecode/templates/changeset/changeset.html:149 -#: 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 +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 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" +#: rhodecode/controllers/feed.py:91 +#, fuzzy, python-format +msgid "%s committed on %s" msgstr "commit" -#: rhodecode/controllers/files.py:86 -#, fuzzy -msgid "click here to add new file" +#: rhodecode/controllers/files.py:88 +#, fuzzy +msgid "Click here to add new file" msgstr "adicionar novo arquivo" -#: rhodecode/controllers/files.py:87 +#: rhodecode/controllers/files.py:89 #, python-format msgid "There are no files yet %s" msgstr "Ainda não há arquivos %s" -#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325 +#: rhodecode/controllers/files.py:267 rhodecode/controllers/files.py:335 #, python-format msgid "This repository is has been locked by %s on %s" msgstr "" -#: rhodecode/controllers/files.py:292 -#, python-format -msgid "Edited %s via RhodeCode" +#: rhodecode/controllers/files.py:279 +msgid "You can only edit files with revision being a valid branch " +msgstr "" + +#: rhodecode/controllers/files.py:293 +#, fuzzy, python-format +msgid "Edited file %s via RhodeCode" msgstr "Editado %s via RhodeCode" -#: rhodecode/controllers/files.py:297 +#: rhodecode/controllers/files.py:309 msgid "No changes" msgstr "Sem alterações" -#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372 +#: rhodecode/controllers/files.py:318 rhodecode/controllers/files.py:388 #, python-format msgid "Successfully committed to %s" msgstr "Commit realizado com sucesso para %s" -#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378 +#: rhodecode/controllers/files.py:323 rhodecode/controllers/files.py:394 msgid "Error occurred during commit" msgstr "Ocorreu um erro ao realizar commit" -#: rhodecode/controllers/files.py:344 -#, python-format -msgid "Added %s via RhodeCode" +#: rhodecode/controllers/files.py:347 +#, fuzzy +msgid "Added file via RhodeCode" msgstr "Adicionado %s via RhodeCode" -#: rhodecode/controllers/files.py:358 +#: rhodecode/controllers/files.py:364 msgid "No content" msgstr "Nenhum conteúdo" -#: rhodecode/controllers/files.py:362 +#: rhodecode/controllers/files.py:368 msgid "No filename" msgstr "Nenhum nomes de arquivo" -#: rhodecode/controllers/files.py:404 -msgid "downloads disabled" +#: rhodecode/controllers/files.py:372 +msgid "Location must be relative path and must not contain .. in path" +msgstr "" + +#: rhodecode/controllers/files.py:420 +#, fuzzy +msgid "Downloads disabled" msgstr "downloads desabilitados" -#: rhodecode/controllers/files.py:415 +#: rhodecode/controllers/files.py:431 #, python-format msgid "Unknown revision %s" msgstr "Revisão desconhecida %s" -#: rhodecode/controllers/files.py:417 +#: rhodecode/controllers/files.py:433 msgid "Empty repository" msgstr "Repositório vazio" -#: rhodecode/controllers/files.py:419 +#: rhodecode/controllers/files.py:435 msgid "Unknown archive type" msgstr "Arquivo de tipo desconhecido" -#: rhodecode/controllers/files.py:564 -#: rhodecode/templates/changeset/changeset_range.html:13 -#: rhodecode/templates/changeset/changeset_range.html:31 +#: rhodecode/controllers/files.py:617 +#: rhodecode/templates/changeset/changeset_range.html:9 msgid "Changesets" msgstr "Conjuntos de mudanças" -#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:74 -#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550 +#: rhodecode/controllers/files.py:618 rhodecode/controllers/pullrequests.py:131 +#: rhodecode/controllers/summary.py:247 rhodecode/model/scm.py:606 +#: rhodecode/templates/switch_to_list.html:3 +#: rhodecode/templates/branches/branches.html:10 msgid "Branches" msgstr "Ramos" -#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:78 -#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561 +#: rhodecode/controllers/files.py:619 rhodecode/controllers/pullrequests.py:132 +#: rhodecode/controllers/summary.py:248 rhodecode/model/scm.py:617 +#: rhodecode/templates/switch_to_list.html:15 +#: rhodecode/templates/shortlog/shortlog_data.html:10 +#: rhodecode/templates/tags/tags.html:10 msgid "Tags" msgstr "Etiquetas" -#: rhodecode/controllers/forks.py:158 -#, python-format -msgid "forked %s repository as %s" +#: rhodecode/controllers/forks.py:175 +#, fuzzy, python-format +msgid "Forked repository %s as %s" msgstr "bifurcado repositório %s como %s" -#: rhodecode/controllers/forks.py:172 +#: rhodecode/controllers/forks.py:189 #, python-format msgid "An error occurred during repository forking %s" msgstr "Ocorreu um erro ao bifurcar o repositório %s" -#: rhodecode/controllers/journal.py:218 rhodecode/controllers/journal.py:261 +#: rhodecode/controllers/journal.py:275 rhodecode/controllers/journal.py:318 #, fuzzy msgid "public journal" msgstr "Diário público" -#: rhodecode/controllers/journal.py:222 rhodecode/controllers/journal.py:265 -#: rhodecode/templates/base/base.html:232 +#: rhodecode/controllers/journal.py:279 rhodecode/controllers/journal.py:322 #: rhodecode/templates/journal/journal.html:12 msgid "journal" msgstr "diário" -#: rhodecode/controllers/login.py:143 -msgid "You have successfully registered into rhodecode" +#: rhodecode/controllers/login.py:138 +#, fuzzy +msgid "You have successfully registered into RhodeCode" msgstr "Você se registrou com sucesso no rhodecode" -#: rhodecode/controllers/login.py:164 +#: rhodecode/controllers/login.py:159 msgid "Your password reset link was sent" msgstr "Seu link de reinicialização de senha foi enviado" -#: rhodecode/controllers/login.py:184 +#: rhodecode/controllers/login.py:179 msgid "" "Your password reset was successful, new password has been sent to your " "email" @@ -224,35 +239,56 @@ msgstr "" "Sua reinicialização de senha foi bem sucedida, sua senha foi enviada ao " "seu e-mail" -#: rhodecode/controllers/pullrequests.py:76 rhodecode/model/scm.py:556 +#: rhodecode/controllers/pullrequests.py:118 +#: rhodecode/templates/changeset/changeset.html:10 +#: rhodecode/templates/email_templates/changeset_comment.html:15 +msgid "Changeset" +msgstr "Conjunto de Mudanças" + +#: rhodecode/controllers/pullrequests.py:128 +msgid "Special" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:129 +#, fuzzy +msgid "Peer branches" +msgstr "ramos" + +#: rhodecode/controllers/pullrequests.py:130 rhodecode/model/scm.py:612 +#: rhodecode/templates/switch_to_list.html:28 +#: rhodecode/templates/bookmarks/bookmarks.html:10 msgid "Bookmarks" msgstr "Marcadores" -#: rhodecode/controllers/pullrequests.py:190 +#: rhodecode/controllers/pullrequests.py:228 msgid "Pull request requires a title with min. 3 chars" msgstr "" -#: rhodecode/controllers/pullrequests.py:192 -#, fuzzy -msgid "error during creation of pull request" +#: rhodecode/controllers/pullrequests.py:230 +#, fuzzy +msgid "Error creating pull request" msgstr "ocorreu um erro ao criar o usuário %s" -#: rhodecode/controllers/pullrequests.py:224 +#: rhodecode/controllers/pullrequests.py:251 #, fuzzy msgid "Successfully opened new pull request" msgstr "usuário excluído com sucesso" -#: rhodecode/controllers/pullrequests.py:227 +#: rhodecode/controllers/pullrequests.py:254 #, fuzzy msgid "Error occurred during sending pull request" msgstr "ocorreu um erro ao criar o repositório %s" -#: rhodecode/controllers/pullrequests.py:260 +#: rhodecode/controllers/pullrequests.py:287 #, fuzzy msgid "Successfully deleted pull request" msgstr "usuário excluído com sucesso" -#: rhodecode/controllers/pullrequests.py:452 +#: rhodecode/controllers/pullrequests.py:441 +msgid "Closing with" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:478 msgid "Closing pull request on other statuses than rejected or approved forbidden" msgstr "" @@ -268,58 +304,12 @@ msgstr "Não há índice onde pesquisa. Por favor execute o indexador whoosh" msgid "An error occurred during this search operation" msgstr "Ocorreu um erro durante essa operação de busca" -#: rhodecode/controllers/settings.py:119 -#: rhodecode/controllers/admin/repos.py:272 -#, python-format -msgid "Repository %s updated successfully" -msgstr "Repositório %s atualizado com sucesso" - -#: rhodecode/controllers/settings.py:137 -#: rhodecode/controllers/admin/repos.py:290 -#, python-format -msgid "error occurred during update of repository %s" -msgstr "ocorreu um erro ao atualizar o repositório %s" - -#: rhodecode/controllers/settings.py:162 -#: rhodecode/controllers/admin/repos.py:315 -#, python-format -msgid "deleted repository %s" -msgstr "excluído o repositório %s" - -#: rhodecode/controllers/settings.py:166 -#: rhodecode/controllers/admin/repos.py:325 -#: rhodecode/controllers/admin/repos.py:331 -#, python-format -msgid "An error occurred during deletion of %s" -msgstr "Ocorreu um erro durante a exclusão de %s" - -#: rhodecode/controllers/settings.py:185 -#, fuzzy -msgid "unlocked" -msgstr "destravar" - -#: rhodecode/controllers/settings.py:188 -#, fuzzy -msgid "locked" -msgstr "destravar" - -#: rhodecode/controllers/settings.py:190 -#, fuzzy, python-format -msgid "Repository has been %s" -msgstr "bifurcado repositório %s como %s" - -#: rhodecode/controllers/settings.py:194 -#: rhodecode/controllers/admin/repos.py:423 -#, fuzzy -msgid "An error occurred during unlocking" -msgstr "Ocorreu um erro durante essa operação" - -#: rhodecode/controllers/summary.py:140 +#: rhodecode/controllers/summary.py:141 msgid "No data loaded yet" msgstr "Ainda não há dados carregados" -#: rhodecode/controllers/summary.py:144 -#: rhodecode/templates/summary/summary.html:157 +#: rhodecode/controllers/summary.py:147 +#: rhodecode/templates/summary/summary.html:149 msgid "Statistics are disabled for this repository" msgstr "As estatísticas estão desabillitadas para este repositório" @@ -330,7 +320,7 @@ msgstr "Configurações de LDAP atualizadas com sucesso" #: rhodecode/controllers/admin/defaults.py:110 #, fuzzy -msgid "error occurred during update of defaults" +msgid "Error occurred during update of defaults" msgstr "ocorreu um erro ao atualizar o usuário %s" #: rhodecode/controllers/admin/ldap_settings.py:50 @@ -378,7 +368,7 @@ msgid "START_TLS on LDAP connection" msgstr "START_TLS na conexão LDAP" #: rhodecode/controllers/admin/ldap_settings.py:126 -msgid "Ldap settings updated successfully" +msgid "LDAP settings updated successfully" msgstr "Configurações de LDAP atualizadas com sucesso" #: rhodecode/controllers/admin/ldap_settings.py:130 @@ -386,556 +376,659 @@ msgid "Unable to activate ldap. The \"py msgstr "Não foi possível ativar LDAP. A biblioteca \"python-ldap\" está faltando." #: rhodecode/controllers/admin/ldap_settings.py:147 -msgid "error occurred during update of ldap settings" +#, fuzzy +msgid "Error occurred during update of ldap settings" 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" +msgid "None" +msgstr "Nenhum" #: rhodecode/controllers/admin/permissions.py:61 #: rhodecode/controllers/admin/permissions.py:65 -msgid "Write" -msgstr "Gravar" +msgid "Read" +msgstr "Ler" #: rhodecode/controllers/admin/permissions.py:62 #: rhodecode/controllers/admin/permissions.py:66 +msgid "Write" +msgstr "Gravar" + +#: rhodecode/controllers/admin/permissions.py:63 +#: rhodecode/controllers/admin/permissions.py:67 #: 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/repo_add.html:10 +#: rhodecode/templates/admin/repos/repo_add.html:14 #: 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/repos_groups/repos_groups_add.html:9 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:9 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:13 #: 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/user_edit.html:133 #: rhodecode/templates/admin/users/users.html:9 +#: rhodecode/templates/admin/users/users.html:85 #: 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 +#: rhodecode/templates/base/base.html:292 +#: rhodecode/templates/base/base.html:293 +#: rhodecode/templates/base/base.html:299 +#: rhodecode/templates/base/base.html:300 msgid "Admin" msgstr "Administrador" -#: rhodecode/controllers/admin/permissions.py:69 -msgid "disabled" -msgstr "desabilitado" - -#: rhodecode/controllers/admin/permissions.py:71 -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 +#: rhodecode/controllers/admin/permissions.py:70 +#: rhodecode/controllers/admin/permissions.py:76 +#: rhodecode/controllers/admin/permissions.py:79 msgid "Disabled" msgstr "Desabilitado" -#: rhodecode/controllers/admin/permissions.py:76 -#: rhodecode/controllers/admin/permissions.py:79 +#: rhodecode/controllers/admin/permissions.py:72 +#, fuzzy +msgid "Allowed with manual account activation" +msgstr "permitido com ativação manual de conta" + +#: rhodecode/controllers/admin/permissions.py:74 +#, fuzzy +msgid "Allowed with automatic account activation" +msgstr "permitido com ativação automática de conta" + +#: rhodecode/controllers/admin/permissions.py:77 +#: rhodecode/controllers/admin/permissions.py:80 msgid "Enabled" msgstr "Habilitado" -#: rhodecode/controllers/admin/permissions.py:122 +#: rhodecode/controllers/admin/permissions.py:128 msgid "Default permissions updated successfully" msgstr "Permissões padrões atualizadas com sucesso" -#: rhodecode/controllers/admin/permissions.py:136 -msgid "error occurred during update of permissions" +#: rhodecode/controllers/admin/permissions.py:142 +#, fuzzy +msgid "Error occurred during update of permissions" msgstr "ocorreu um erro ao atualizar as permissões" -#: rhodecode/controllers/admin/repos.py:121 +#: rhodecode/controllers/admin/repos.py:127 msgid "--REMOVE FORK--" msgstr "--REMOVER BIFURCAÇÂO--" -#: rhodecode/controllers/admin/repos.py:190 -#, python-format -msgid "created repository %s from %s" +#: rhodecode/controllers/admin/repos.py:168 +#, fuzzy, python-format +msgid "Created repository %s from %s" msgstr "repositório %s criado a partir de %s" -#: rhodecode/controllers/admin/repos.py:194 +#: rhodecode/controllers/admin/repos.py:174 +#, fuzzy, python-format +msgid "Created repository %s" +msgstr "repositório %s criado" + +#: rhodecode/controllers/admin/repos.py:197 +#, fuzzy, python-format +msgid "Error creating repository %s" +msgstr "repositório %s criado" + +#: rhodecode/controllers/admin/repos.py:266 #, python-format -msgid "created repository %s" -msgstr "repositório %s criado" - -#: rhodecode/controllers/admin/repos.py:225 +msgid "Repository %s updated successfully" +msgstr "Repositório %s atualizado com sucesso" + +#: rhodecode/controllers/admin/repos.py:284 +#, fuzzy, python-format +msgid "Error occurred during update of repository %s" +msgstr "ocorreu um erro ao atualizar o repositório %s" + +#: rhodecode/controllers/admin/repos.py:311 +#: rhodecode/controllers/api/api.py:877 #, 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:320 +msgid "Detached %s forks" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:314 +#: rhodecode/controllers/api/api.py:879 +#, fuzzy, python-format +msgid "Deleted %s forks" +msgstr "excluído o repositório %s" + +#: rhodecode/controllers/admin/repos.py:319 +#, fuzzy, python-format +msgid "Deleted repository %s" +msgstr "excluído o repositório %s" + +#: rhodecode/controllers/admin/repos.py:322 #, 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:349 +#: rhodecode/controllers/admin/repos.py:327 +#, python-format +msgid "An error occurred during deletion of %s" +msgstr "Ocorreu um erro durante a exclusão de %s" + +#: rhodecode/controllers/admin/repos.py:365 +#, fuzzy +msgid "Repository permissions updated" +msgstr "Criação de repositório" + +#: rhodecode/controllers/admin/repos.py:384 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:368 -msgid "An error occurred during deletion of repository users groups" +#: rhodecode/controllers/admin/repos.py:403 +#, fuzzy +msgid "An error occurred during deletion of repository user groups" msgstr "Ocorreu um erro ao excluir grupo de usuário de repositório" -#: rhodecode/controllers/admin/repos.py:386 +#: rhodecode/controllers/admin/repos.py:421 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:403 +#: rhodecode/controllers/admin/repos.py:438 msgid "An error occurred during cache invalidation" msgstr "Ocorreu um erro ao invalidar o cache" -#: rhodecode/controllers/admin/repos.py:443 +#: rhodecode/controllers/admin/repos.py:458 +#: rhodecode/controllers/admin/repos.py:485 +#, fuzzy +msgid "An error occurred during unlocking" +msgstr "Ocorreu um erro durante essa operação" + +#: rhodecode/controllers/admin/repos.py:476 +#, fuzzy +msgid "Unlocked" +msgstr "destravar" + +#: rhodecode/controllers/admin/repos.py:479 +#, fuzzy +msgid "Locked" +msgstr "destravar" + +#: rhodecode/controllers/admin/repos.py:481 +#, fuzzy, python-format +msgid "Repository has been %s" +msgstr "bifurcado repositório %s como %s" + +#: rhodecode/controllers/admin/repos.py:505 msgid "Updated repository visibility in public journal" msgstr "Atualizada a visibilidade do repositório no diário público" -#: rhodecode/controllers/admin/repos.py:447 +#: rhodecode/controllers/admin/repos.py:509 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:452 rhodecode/model/validators.py:300 +#: rhodecode/controllers/admin/repos.py:514 rhodecode/model/validators.py:302 msgid "Token mismatch" msgstr "Descompasso de Token" -#: rhodecode/controllers/admin/repos.py:465 +#: rhodecode/controllers/admin/repos.py:527 msgid "Pulled from remote location" msgstr "Realizado pull de localização remota" -#: rhodecode/controllers/admin/repos.py:467 +#: rhodecode/controllers/admin/repos.py:529 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:483 +#: rhodecode/controllers/admin/repos.py:545 msgid "Nothing" msgstr "Nada" -#: rhodecode/controllers/admin/repos.py:485 +#: rhodecode/controllers/admin/repos.py:547 #, 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:489 +#: rhodecode/controllers/admin/repos.py:551 msgid "An error occurred during this operation" msgstr "Ocorreu um erro durante essa operação" -#: rhodecode/controllers/admin/repos_groups.py:120 -#, python-format -msgid "created repos group %s" +#: rhodecode/controllers/admin/repos.py:590 +#, fuzzy +msgid "An error occurred during creation of field" +msgstr "ocorreu um erro ao criar o usuário %s" + +#: rhodecode/controllers/admin/repos.py:604 +#, fuzzy +msgid "An error occurred during removal of field" +msgstr "Ocorreu um erro durante essa operação" + +#: rhodecode/controllers/admin/repos_groups.py:145 +#, fuzzy, python-format +msgid "Created repository group %s" msgstr "criado grupo de repositórios %s" -#: rhodecode/controllers/admin/repos_groups.py:133 -#, python-format -msgid "error occurred during creation of repos group %s" +#: rhodecode/controllers/admin/repos_groups.py:157 +#, fuzzy, python-format +msgid "Error occurred during creation of repository group %s" msgstr "ccorreu um erro ao criar grupo de repositório %s" -#: rhodecode/controllers/admin/repos_groups.py:167 -#, python-format -msgid "updated repos group %s" +#: rhodecode/controllers/admin/repos_groups.py:214 +#: rhodecode/controllers/admin/repos_groups.py:286 +msgid "Cannot revoke permission for yourself as admin" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:220 +#, fuzzy, python-format +msgid "Updated repository group %s" msgstr "atualizado grupo de repositórios %s" -#: rhodecode/controllers/admin/repos_groups.py:180 -#, python-format -msgid "error occurred during update of repos group %s" +#: rhodecode/controllers/admin/repos_groups.py:235 +#, fuzzy, python-format +msgid "Error occurred during update of repository group %s" msgstr "ocorreu um erro ao atualizar grupo de repositórios %s" -#: rhodecode/controllers/admin/repos_groups.py:198 +#: rhodecode/controllers/admin/repos_groups.py:253 #, 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:206 -#, python-format -msgid "removed repos group %s" +#: rhodecode/controllers/admin/repos_groups.py:260 +#, fuzzy, python-format +msgid "This group contains %s subgroups 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:266 +#, fuzzy, python-format +msgid "Removed repository group %s" msgstr "removido grupo de repositórios %s" -#: 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:217 -#: rhodecode/controllers/admin/repos_groups.py:222 -#, python-format -msgid "error occurred during deletion of repos group %s" +#: rhodecode/controllers/admin/repos_groups.py:271 +#, fuzzy, 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:243 +#: rhodecode/controllers/admin/repos_groups.py:297 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:264 -msgid "An error occurred during deletion of group users groups" +#: rhodecode/controllers/admin/repos_groups.py:318 +#, fuzzy +msgid "An error occurred during deletion of group user groups" msgstr "Ocorreu um erro ao excluir o grupo do grupo de usuários" -#: rhodecode/controllers/admin/settings.py:123 -#, python-format -msgid "Repositories successfully rescanned added: %s,removed: %s" +#: rhodecode/controllers/admin/settings.py:126 +#, fuzzy, 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:131 +#: rhodecode/controllers/admin/settings.py:135 msgid "Whoosh reindex task scheduled" msgstr "Tarefa de reindexação do whoosh agendada" -#: rhodecode/controllers/admin/settings.py:162 +#: rhodecode/controllers/admin/settings.py:166 msgid "Updated application settings" msgstr "Configurações da aplicação atualizadas" -#: rhodecode/controllers/admin/settings.py:166 -#: rhodecode/controllers/admin/settings.py:299 -msgid "error occurred during updating application settings" +#: rhodecode/controllers/admin/settings.py:170 +#: rhodecode/controllers/admin/settings.py:301 +#, fuzzy +msgid "Error occurred during updating application settings" msgstr "ocorreu um erro ao atualizar as configurações da aplicação" -#: rhodecode/controllers/admin/settings.py:207 +#: rhodecode/controllers/admin/settings.py:216 #, fuzzy msgid "Updated visualisation settings" msgstr "Configurações da aplicação atualizadas" -#: rhodecode/controllers/admin/settings.py:212 -#, fuzzy -msgid "error occurred during updating visualisation settings" +#: rhodecode/controllers/admin/settings.py:221 +#, 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:295 +#: rhodecode/controllers/admin/settings.py:297 #, fuzzy msgid "Updated VCS settings" msgstr "Atualizadas as configurações do mercurial" -#: rhodecode/controllers/admin/settings.py:309 +#: rhodecode/controllers/admin/settings.py:311 msgid "Added new hook" msgstr "Adicionado novo gancho" -#: rhodecode/controllers/admin/settings.py:321 +#: rhodecode/controllers/admin/settings.py:323 msgid "Updated hooks" msgstr "Atualizados os ganchos" -#: rhodecode/controllers/admin/settings.py:325 -msgid "error occurred during hook creation" +#: rhodecode/controllers/admin/settings.py:327 +#, fuzzy +msgid "Error occurred during hook creation" msgstr "ocorreu um erro ao criar gancho" -#: rhodecode/controllers/admin/settings.py:344 +#: rhodecode/controllers/admin/settings.py:346 msgid "Email task created" msgstr "Tarefa de e-mail criada" -#: rhodecode/controllers/admin/settings.py:399 +#: rhodecode/controllers/admin/settings.py:410 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:430 +#: rhodecode/controllers/admin/settings.py:452 msgid "Your account was updated successfully" msgstr "Sua conta foi atualizada com sucesso" -#: rhodecode/controllers/admin/settings.py:445 -#: rhodecode/controllers/admin/users.py:196 -#, python-format -msgid "error occurred during update of user %s" +#: rhodecode/controllers/admin/settings.py:467 +#: rhodecode/controllers/admin/users.py:198 +#, fuzzy, python-format +msgid "Error occurred during update of user %s" msgstr "ocorreu um erro ao atualizar o usuário %s" #: rhodecode/controllers/admin/users.py:130 -#, python-format -msgid "created user %s" +#, fuzzy, python-format +msgid "Created user %s" msgstr "usuário %s criado" #: rhodecode/controllers/admin/users.py:142 -#, python-format -msgid "error occurred during creation of user %s" +#, fuzzy, python-format +msgid "Error occurred during creation of user %s" msgstr "ocorreu um erro ao criar o usuário %s" #: rhodecode/controllers/admin/users.py:176 msgid "User updated successfully" msgstr "Usuário atualizado com sucesso" -#: rhodecode/controllers/admin/users.py:212 -msgid "successfully deleted user" +#: rhodecode/controllers/admin/users.py:214 +#, fuzzy +msgid "Successfully deleted user" msgstr "usuário excluído com sucesso" -#: rhodecode/controllers/admin/users.py:217 +#: rhodecode/controllers/admin/users.py:219 msgid "An error occurred during deletion of user" msgstr "Ocorreu um erro ao excluir o usuário" -#: rhodecode/controllers/admin/users.py:231 +#: rhodecode/controllers/admin/users.py:233 msgid "You can't edit this user" msgstr "Você não pode editar esse usuário" -#: rhodecode/controllers/admin/users.py:272 +#: rhodecode/controllers/admin/users.py:276 msgid "Granted 'repository create' permission to user" msgstr "Concedida permissão de 'criar repositório' ao usuário" -#: rhodecode/controllers/admin/users.py:277 +#: rhodecode/controllers/admin/users.py:281 msgid "Revoked 'repository create' permission to user" msgstr "Revogada permissão de 'criar repositório' ao usuário" -#: rhodecode/controllers/admin/users.py:283 +#: rhodecode/controllers/admin/users.py:287 #, fuzzy msgid "Granted 'repository fork' permission to user" msgstr "Concedida permissão de 'criar repositório' ao usuário" -#: rhodecode/controllers/admin/users.py:288 +#: rhodecode/controllers/admin/users.py:292 #, fuzzy msgid "Revoked 'repository fork' permission to user" msgstr "Revogada permissão de 'criar repositório' ao usuário" -#: rhodecode/controllers/admin/users.py:294 -#: rhodecode/controllers/admin/users_groups.py:279 +#: rhodecode/controllers/admin/users.py:298 +#: rhodecode/controllers/admin/users_groups.py:281 #, fuzzy msgid "An error occurred during permissions saving" msgstr "Ocorreu um erro durante essa operação" -#: rhodecode/controllers/admin/users.py:309 +#: rhodecode/controllers/admin/users.py:312 #, python-format msgid "Added email %s to user" msgstr "" -#: rhodecode/controllers/admin/users.py:315 +#: rhodecode/controllers/admin/users.py:318 #, fuzzy msgid "An error occurred during email saving" msgstr "Ocorreu um erro durante essa operação" -#: rhodecode/controllers/admin/users.py:325 +#: rhodecode/controllers/admin/users.py:328 #, fuzzy msgid "Removed email from user" msgstr "removido grupo de repositórios %s" +#: rhodecode/controllers/admin/users.py:341 +#, python-format +msgid "Added ip %s to user" +msgstr "" + +#: rhodecode/controllers/admin/users.py:347 +#, fuzzy +msgid "An error occurred during ip saving" +msgstr "Ocorreu um erro durante essa operação" + +#: rhodecode/controllers/admin/users.py:359 +#, fuzzy +msgid "Removed ip from user" +msgstr "removido grupo de repositórios %s" + #: rhodecode/controllers/admin/users_groups.py:86 -#, python-format -msgid "created users group %s" +#, fuzzy, python-format +msgid "Created user group %s" msgstr "criado grupo de usuários %s" #: rhodecode/controllers/admin/users_groups.py:97 -#, python-format -msgid "error occurred during creation of users group %s" +#, fuzzy, python-format +msgid "Error occurred during creation of user group %s" msgstr "ocorreu um erro ao criar o grupo de usuários %s" -#: rhodecode/controllers/admin/users_groups.py:164 -#, python-format -msgid "updated users group %s" +#: rhodecode/controllers/admin/users_groups.py:166 +#, fuzzy, python-format +msgid "Updated user group %s" msgstr "grupo de usuários %s atualizado" -#: rhodecode/controllers/admin/users_groups.py:186 -#, python-format -msgid "error occurred during update of users group %s" +#: rhodecode/controllers/admin/users_groups.py:188 +#, fuzzy, python-format +msgid "Error occurred during update of user group %s" msgstr "ocorreu um erro ao atualizar o grupo de usuários %s" -#: rhodecode/controllers/admin/users_groups.py:203 -msgid "successfully deleted users group" +#: rhodecode/controllers/admin/users_groups.py:205 +#, fuzzy +msgid "Successfully deleted user group" msgstr "grupo de usuários excluído com sucesso" -#: rhodecode/controllers/admin/users_groups.py:208 -msgid "An error occurred during deletion of users group" +#: rhodecode/controllers/admin/users_groups.py:210 +#, fuzzy +msgid "An error occurred during deletion of user group" msgstr "Ocorreu um erro ao excluir o grupo de usuários" -#: rhodecode/controllers/admin/users_groups.py:257 -#, fuzzy -msgid "Granted 'repository create' permission to users group" +#: rhodecode/controllers/admin/users_groups.py:259 +#, fuzzy +msgid "Granted 'repository create' permission to user group" msgstr "Concedida permissão de 'criar repositório' ao usuário" -#: rhodecode/controllers/admin/users_groups.py:262 -#, fuzzy -msgid "Revoked 'repository create' permission to users group" +#: rhodecode/controllers/admin/users_groups.py:264 +#, fuzzy +msgid "Revoked 'repository create' permission to user group" msgstr "Revogada permissão de 'criar repositório' ao usuário" -#: rhodecode/controllers/admin/users_groups.py:268 -#, fuzzy -msgid "Granted 'repository fork' permission to users group" +#: rhodecode/controllers/admin/users_groups.py:270 +#, fuzzy +msgid "Granted 'repository fork' permission to user group" msgstr "Concedida permissão de 'criar repositório' ao usuário" -#: rhodecode/controllers/admin/users_groups.py:273 -#, fuzzy -msgid "Revoked 'repository fork' permission to users group" +#: rhodecode/controllers/admin/users_groups.py:275 +#, fuzzy +msgid "Revoked 'repository fork' permission to user group" msgstr "Revogada permissão de 'criar repositório' ao usuário" -#: rhodecode/lib/auth.py:499 +#: rhodecode/lib/auth.py:530 +#, fuzzy, python-format +msgid "IP %s not allowed" +msgstr "seguidores" + +#: rhodecode/lib/auth.py:579 msgid "You need to be a registered user to perform this action" msgstr "Você precisa ser um usuário registrado para realizar essa ação" -#: rhodecode/lib/auth.py:540 +#: rhodecode/lib/auth.py:620 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:74 -msgid "binary file" +#: rhodecode/lib/diffs.py:66 +#, fuzzy +msgid "Binary file" msgstr "arquivo binário" -#: rhodecode/lib/diffs.py:90 +#: rhodecode/lib/diffs.py:82 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:100 +#: rhodecode/lib/diffs.py:92 msgid "No changes detected" msgstr "Nenhuma alteração detectada" -#: rhodecode/lib/helpers.py:374 +#: rhodecode/lib/helpers.py:394 #, python-format msgid "%a, %d %b %Y %H:%M:%S" msgstr "" -#: rhodecode/lib/helpers.py:486 +#: rhodecode/lib/helpers.py:506 msgid "True" msgstr "Verdadeiro" -#: rhodecode/lib/helpers.py:490 +#: rhodecode/lib/helpers.py:509 msgid "False" msgstr "Falso" -#: rhodecode/lib/helpers.py:530 +#: rhodecode/lib/helpers.py:547 #, fuzzy, python-format msgid "Deleted branch: %s" msgstr "excluído o repositório %s" -#: rhodecode/lib/helpers.py:533 +#: rhodecode/lib/helpers.py:550 #, fuzzy, python-format msgid "Created tag: %s" msgstr "usuário %s criado" -#: rhodecode/lib/helpers.py:546 +#: rhodecode/lib/helpers.py:563 msgid "Changeset not found" msgstr "Conjunto de alterações não encontrado" -#: rhodecode/lib/helpers.py:589 +#: rhodecode/lib/helpers.py:615 #, python-format msgid "Show all combined changesets %s->%s" msgstr "Ver todos os conjuntos de mudanças combinados %s->%s" -#: rhodecode/lib/helpers.py:595 +#: rhodecode/lib/helpers.py:621 msgid "compare view" msgstr "comparar exibir" -#: rhodecode/lib/helpers.py:615 +#: rhodecode/lib/helpers.py:641 msgid "and" msgstr "e" -#: rhodecode/lib/helpers.py:616 +#: rhodecode/lib/helpers.py:642 #, python-format msgid "%s more" msgstr "%s mais" -#: rhodecode/lib/helpers.py:617 rhodecode/templates/changelog/changelog.html:51 +#: rhodecode/lib/helpers.py:643 rhodecode/templates/changelog/changelog.html:44 msgid "revisions" msgstr "revisões" -#: rhodecode/lib/helpers.py:641 +#: rhodecode/lib/helpers.py:667 #, fuzzy, python-format msgid "fork name %s" msgstr "nome da bifurcação" -#: rhodecode/lib/helpers.py:658 -#: rhodecode/templates/pullrequests/pullrequest_show.html:4 -#: rhodecode/templates/pullrequests/pullrequest_show.html:12 +#: rhodecode/lib/helpers.py:684 +#: rhodecode/templates/pullrequests/pullrequest_show.html:8 #, python-format msgid "Pull request #%s" msgstr "" -#: rhodecode/lib/helpers.py:664 +#: rhodecode/lib/helpers.py:690 msgid "[deleted] repository" msgstr "repositório [excluído]" -#: rhodecode/lib/helpers.py:666 rhodecode/lib/helpers.py:676 +#: rhodecode/lib/helpers.py:692 rhodecode/lib/helpers.py:702 msgid "[created] repository" msgstr "repositório [criado]" -#: rhodecode/lib/helpers.py:668 +#: rhodecode/lib/helpers.py:694 msgid "[created] repository as fork" msgstr "repositório [criado] como uma bifurcação" -#: rhodecode/lib/helpers.py:670 rhodecode/lib/helpers.py:678 +#: rhodecode/lib/helpers.py:696 rhodecode/lib/helpers.py:704 msgid "[forked] repository" msgstr "repositório [bifurcado]" -#: rhodecode/lib/helpers.py:672 rhodecode/lib/helpers.py:680 +#: rhodecode/lib/helpers.py:698 rhodecode/lib/helpers.py:706 msgid "[updated] repository" msgstr "repositório [atualizado]" -#: rhodecode/lib/helpers.py:674 +#: rhodecode/lib/helpers.py:700 msgid "[delete] repository" msgstr "[excluir] repositório" -#: rhodecode/lib/helpers.py:682 +#: rhodecode/lib/helpers.py:708 #, fuzzy msgid "[created] user" msgstr "usuário %s criado" -#: rhodecode/lib/helpers.py:684 +#: rhodecode/lib/helpers.py:710 #, fuzzy msgid "[updated] user" msgstr "grupo de usuários %s atualizado" -#: rhodecode/lib/helpers.py:686 -#, fuzzy -msgid "[created] users group" +#: rhodecode/lib/helpers.py:712 +#, fuzzy +msgid "[created] user group" msgstr "criado grupo de usuários %s" -#: rhodecode/lib/helpers.py:688 -#, fuzzy -msgid "[updated] users group" +#: rhodecode/lib/helpers.py:714 +#, fuzzy +msgid "[updated] user group" msgstr "grupo de usuários %s atualizado" -#: rhodecode/lib/helpers.py:690 +#: rhodecode/lib/helpers.py:716 #, fuzzy msgid "[commented] on revision in repository" msgstr "repositório [criado]" -#: rhodecode/lib/helpers.py:692 +#: rhodecode/lib/helpers.py:718 #, fuzzy msgid "[commented] on pull request for" msgstr "repositório [criado]" -#: rhodecode/lib/helpers.py:694 +#: rhodecode/lib/helpers.py:720 #, fuzzy msgid "[closed] pull request for" msgstr "repositório [criado]" -#: rhodecode/lib/helpers.py:696 +#: rhodecode/lib/helpers.py:722 msgid "[pushed] into" msgstr "[realizado push] para" -#: rhodecode/lib/helpers.py:698 +#: rhodecode/lib/helpers.py:724 #, fuzzy msgid "[committed via RhodeCode] into repository" msgstr "[realizado commit via RhodeCode] para" -#: rhodecode/lib/helpers.py:700 +#: rhodecode/lib/helpers.py:726 #, fuzzy msgid "[pulled from remote] into repository" msgstr "[realizado pull remoto] para" -#: rhodecode/lib/helpers.py:702 +#: rhodecode/lib/helpers.py:728 msgid "[pulled] from" msgstr "[realizado pull] a partir de" -#: rhodecode/lib/helpers.py:704 +#: rhodecode/lib/helpers.py:730 msgid "[started following] repository" msgstr "[passou a seguir] o repositório" -#: rhodecode/lib/helpers.py:706 +#: rhodecode/lib/helpers.py:732 msgid "[stopped following] repository" msgstr "[parou de seguir] o repositório" -#: rhodecode/lib/helpers.py:883 +#: rhodecode/lib/helpers.py:910 #, python-format msgid " and %s more" msgstr " e mais %s" -#: rhodecode/lib/helpers.py:887 +#: rhodecode/lib/helpers.py:914 msgid "No Files" msgstr "Nenhum Arquivo" -#: rhodecode/lib/helpers.py:1163 +#: rhodecode/lib/helpers.py:1198 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -946,180 +1039,245 @@ msgstr "" "renomeado a partir do sistema de arquivos. Por favor execute a aplicação " "outra vez para varrer novamente por repositórios" -#: rhodecode/lib/utils2.py:403 +#: rhodecode/lib/unionrepo.py:193 +#, fuzzy +msgid "cannot create new union repository" +msgstr "repositório [criado]" + +#: rhodecode/lib/utils2.py:411 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d ano" msgstr[1] "%d anos" -#: rhodecode/lib/utils2.py:404 +#: rhodecode/lib/utils2.py:412 #, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "%d mês" msgstr[1] "%d meses" -#: rhodecode/lib/utils2.py:405 +#: rhodecode/lib/utils2.py:413 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d dia" msgstr[1] "%d dias" -#: rhodecode/lib/utils2.py:406 +#: rhodecode/lib/utils2.py:414 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d hora" msgstr[1] "%d horas" -#: rhodecode/lib/utils2.py:407 +#: rhodecode/lib/utils2.py:415 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minuto" msgstr[1] "%d minutos" -#: rhodecode/lib/utils2.py:408 +#: rhodecode/lib/utils2.py:416 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d segundo" msgstr[1] "%d segundos" -#: rhodecode/lib/utils2.py:424 +#: rhodecode/lib/utils2.py:432 #, fuzzy, python-format msgid "in %s" msgstr "na linha %s" -#: rhodecode/lib/utils2.py:426 +#: rhodecode/lib/utils2.py:434 #, python-format msgid "%s ago" msgstr "%s atrás" -#: rhodecode/lib/utils2.py:428 +#: rhodecode/lib/utils2.py:436 #, fuzzy, python-format msgid "in %s and %s" msgstr "%s e %s atrás" -#: rhodecode/lib/utils2.py:431 +#: rhodecode/lib/utils2.py:439 #, python-format msgid "%s and %s ago" msgstr "%s e %s atrás" -#: rhodecode/lib/utils2.py:434 +#: rhodecode/lib/utils2.py:442 msgid "just now" msgstr "agora há pouco" -#: 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:1183 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1183 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1289 rhodecode/model/db.py:1388 #, fuzzy msgid "Repository no access" msgstr "repositórios" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1184 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1184 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1290 rhodecode/model/db.py:1389 #, 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:1185 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1185 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1291 rhodecode/model/db.py:1390 #, fuzzy msgid "Repository write access" msgstr "repositórios" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1186 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1186 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1292 rhodecode/model/db.py:1391 #, fuzzy msgid "Repository admin access" msgstr "repositórios" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1188 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1188 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1294 #, 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:1189 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1189 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1295 #, 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:1190 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1190 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1296 #, 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:1191 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1191 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1297 #, 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:1193 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1193 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1299 rhodecode/model/db.py:1398 #, fuzzy msgid "RhodeCode Administrator" msgstr "Administração de usuários" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1194 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1194 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1300 rhodecode/model/db.py:1399 #, 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:1195 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1195 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1301 rhodecode/model/db.py:1400 #, 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:1196 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1196 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1302 rhodecode/model/db.py:1401 #, 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:1197 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1197 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303 rhodecode/model/db.py:1402 #, 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:1198 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1198 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304 rhodecode/model/db.py:1403 #, fuzzy msgid "Register disabled" msgstr "desabilitado" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1199 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1199 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305 rhodecode/model/db.py:1404 msgid "Register new user with RhodeCode with manual activation" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1202 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1202 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308 rhodecode/model/db.py:1407 msgid "Register new user with RhodeCode with auto activation" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1643 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1643 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1749 rhodecode/model/db.py:1838 msgid "Not Reviewed" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1644 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1644 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1750 rhodecode/model/db.py:1839 #, fuzzy msgid "Approved" msgstr "removidos" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1645 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1645 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1751 rhodecode/model/db.py:1840 msgid "Rejected" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1646 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1646 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1752 rhodecode/model/db.py:1841 msgid "Under Review" msgstr "" -#: rhodecode/model/comment.py:110 +#: rhodecode/model/comment.py:75 #, python-format msgid "on line %s" msgstr "na linha %s" -#: rhodecode/model/comment.py:173 +#: rhodecode/model/comment.py:219 msgid "[Mention]" msgstr "[Menção]" +#: rhodecode/model/db.py:1252 +msgid "top level" +msgstr "" + +#: rhodecode/model/db.py:1393 +#, fuzzy +msgid "Repository group no access" +msgstr "grupos de repositórios" + +#: rhodecode/model/db.py:1394 +#, fuzzy +msgid "Repository group read access" +msgstr "grupos de repositórios" + +#: rhodecode/model/db.py:1395 +#, fuzzy +msgid "Repository group write access" +msgstr "grupos de repositórios" + +#: rhodecode/model/db.py:1396 +#, fuzzy +msgid "Repository group admin access" +msgstr "grupos de repositórios" + #: rhodecode/model/forms.py:43 msgid "Please enter a login" msgstr "Por favor entre um login" @@ -1138,64 +1296,64 @@ msgstr "Por favor entre com uma senha" msgid "Enter %(min)i characters or more" msgstr "Entre com %(min)i caracteres ou mais" -#: rhodecode/model/notification.py:220 -#, fuzzy, python-format -msgid "commented on commit at %(when)s" -msgstr "comentado no commit" - -#: rhodecode/model/notification.py:221 -#, fuzzy, python-format -msgid "sent message at %(when)s" -msgstr "mensagem enviada" - -#: rhodecode/model/notification.py:222 -#, fuzzy, python-format -msgid "mentioned you at %(when)s" -msgstr "mencionou você" - -#: rhodecode/model/notification.py:223 -#, fuzzy, python-format -msgid "registered in RhodeCode at %(when)s" -msgstr "registrado no RhodeCode" - #: rhodecode/model/notification.py:224 #, fuzzy, python-format -msgid "opened new pull request at %(when)s" +msgid "%(user)s commented on changeset at %(when)s" msgstr "comentado no commit" #: rhodecode/model/notification.py:225 #, fuzzy, python-format -msgid "commented on pull request at %(when)s" +msgid "%(user)s sent message at %(when)s" +msgstr "mensagem enviada" + +#: rhodecode/model/notification.py:226 +#, fuzzy, python-format +msgid "%(user)s mentioned you at %(when)s" +msgstr "mencionou você" + +#: rhodecode/model/notification.py:227 +#, fuzzy, python-format +msgid "%(user)s registered in RhodeCode at %(when)s" +msgstr "registrado no RhodeCode" + +#: rhodecode/model/notification.py:228 +#, fuzzy, python-format +msgid "%(user)s opened new pull request at %(when)s" msgstr "comentado no commit" -#: rhodecode/model/pull_request.py:90 +#: rhodecode/model/notification.py:229 +#, fuzzy, python-format +msgid "%(user)s commented on pull request at %(when)s" +msgstr "comentado no commit" + +#: rhodecode/model/pull_request.py:104 #, python-format -msgid "%(user)s wants you to review pull request #%(pr_id)s" +msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s" msgstr "" -#: rhodecode/model/scm.py:542 +#: rhodecode/model/scm.py:598 #, fuzzy msgid "latest tip" msgstr "último login" #: rhodecode/model/user.py:232 -msgid "new user registration" +#, fuzzy +msgid "New user registration" msgstr "registro de novo usuário" #: rhodecode/model/user.py:257 rhodecode/model/user.py:281 -#: rhodecode/model/user.py:303 msgid "You can't Edit this user since it's crucial for entire application" msgstr "" "Você não pode Editar esse usuário, pois ele é crucial para toda a " "aplicação" -#: rhodecode/model/user.py:327 +#: rhodecode/model/user.py:303 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:333 +#: rhodecode/model/user.py:309 #, python-format msgid "" "user \"%s\" still owns %s repositories and cannot be removed. Switch " @@ -1204,21 +1362,36 @@ 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:36 rhodecode/model/validators.py:37 +#: rhodecode/model/user.py:334 +#, fuzzy +msgid "Password reset link" +msgstr "link de reinicialização de senha" + +#: rhodecode/model/user.py:366 +#, fuzzy +msgid "Your new password" +msgstr "Nova senha" + +#: rhodecode/model/user.py:367 +#, python-format +msgid "Your new RhodeCode password:%s" +msgstr "" + +#: rhodecode/model/validators.py:38 rhodecode/model/validators.py:39 msgid "Value cannot be an empty list" msgstr "" -#: rhodecode/model/validators.py:83 +#: rhodecode/model/validators.py:85 #, fuzzy, python-format msgid "Username \"%(username)s\" already exists" msgstr "Esse nome de usuário já existe" -#: rhodecode/model/validators.py:85 +#: rhodecode/model/validators.py:87 #, python-format msgid "Username \"%(username)s\" is forbidden" msgstr "" -#: rhodecode/model/validators.py:87 +#: rhodecode/model/validators.py:89 msgid "" "Username may only contain alphanumeric characters underscores, periods or" " dashes and must begin with alphanumeric character" @@ -1226,122 +1399,134 @@ 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:115 +#: rhodecode/model/validators.py:117 #, 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:134 -#, fuzzy -msgid "Invalid users group name" +#: rhodecode/model/validators.py:136 +#, fuzzy +msgid "Invalid user group name" msgstr "nome de usuário inválido" -#: 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:137 +#, fuzzy, python-format +msgid "User group \"%(usergroup)s\" already exists" +msgstr "Esse grupo de usuários já existe" + +#: rhodecode/model/validators.py:139 +#, fuzzy msgid "" -"users group name may only contain alphanumeric characters underscores, " +"user group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" msgstr "" "Nome de grupo de repositório pode conter somente caracteres " "alfanuméricos, sublinha, pontos e hífens e deve iniciar com caractere " "alfanumérico" -#: rhodecode/model/validators.py:175 +#: rhodecode/model/validators.py:177 msgid "Cannot assign this group as parent" msgstr "Não é possível associar esse grupo como progenitor" -#: rhodecode/model/validators.py:176 +#: rhodecode/model/validators.py:178 #, fuzzy, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "Esse nome de usuário já existe" -#: rhodecode/model/validators.py:178 +#: rhodecode/model/validators.py:180 #, 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:236 +#: rhodecode/model/validators.py:238 #, fuzzy msgid "Invalid characters (non-ascii) in password" msgstr "Caracteres inválidos na senha" -#: rhodecode/model/validators.py:251 +#: rhodecode/model/validators.py:253 msgid "Passwords do not match" msgstr "Senhas não conferem" -#: rhodecode/model/validators.py:268 +#: rhodecode/model/validators.py:270 msgid "invalid password" msgstr "senha inválida" -#: rhodecode/model/validators.py:269 +#: rhodecode/model/validators.py:271 msgid "invalid user name" msgstr "nome de usuário inválido" -#: rhodecode/model/validators.py:270 +#: rhodecode/model/validators.py:272 msgid "Your account is disabled" msgstr "Sua conta está desabilitada" -#: rhodecode/model/validators.py:314 +#: rhodecode/model/validators.py:316 #, fuzzy, python-format msgid "Repository name %(repo)s is disallowed" msgstr "Esse nome de repositório não é permitido" -#: rhodecode/model/validators.py:316 +#: rhodecode/model/validators.py:318 #, fuzzy, python-format msgid "Repository named %(repo)s already exists" msgstr "Já existe um repositório com esse nome" -#: rhodecode/model/validators.py:317 +#: rhodecode/model/validators.py:319 #, 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:319 +#: rhodecode/model/validators.py:321 #, fuzzy, python-format -msgid "Repositories group with name \"%(repo)s\" already exists" +msgid "Repository group with name \"%(repo)s\" already exists" msgstr "Já existe um repositório com esse nome" -#: rhodecode/model/validators.py:432 +#: rhodecode/model/validators.py:438 msgid "invalid clone url" msgstr "URL de clonagem inválida" -#: rhodecode/model/validators.py:433 +#: rhodecode/model/validators.py:439 #, 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:458 +#: rhodecode/model/validators.py:464 #, 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:473 +#: rhodecode/model/validators.py:479 #, 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" +#: rhodecode/model/validators.py:481 +#, fuzzy +msgid "no permission to create repository in root location" +msgstr "Você não tem permissão para ver esta página" + +#: rhodecode/model/validators.py:518 +#, fuzzy +msgid "You don't have permissions to create a group in this location" +msgstr "Você não tem permissão para ver esta página" + +#: rhodecode/model/validators.py:557 +#, fuzzy +msgid "This username or user 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:591 +#: rhodecode/model/validators.py:650 msgid "This is not a valid path" msgstr "Esse não é um caminho válido" -#: rhodecode/model/validators.py:606 +#: rhodecode/model/validators.py:665 msgid "This e-mail address is already taken" msgstr "Esse endereço de e-mail já está tomado" -#: rhodecode/model/validators.py:626 +#: rhodecode/model/validators.py:685 #, 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:663 +#: rhodecode/model/validators.py:722 msgid "" "The LDAP Login attribute of the CN must be specified - this is the name " "of the attribute that is equivalent to \"username\"" @@ -1349,12 +1534,25 @@ 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:682 +#: rhodecode/model/validators.py:735 #, python-format msgid "Revisions %(revs)s are already part of pull request or have set status" msgstr "" -#: rhodecode/templates/index.html:3 +#: rhodecode/model/validators.py:767 +msgid "Please enter a valid IPv4 or IpV6 address" +msgstr "" + +#: rhodecode/model/validators.py:768 +#, python-format +msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" +msgstr "" + +#: rhodecode/model/validators.py:800 +msgid "Key name can only consist of letters, underscore, dash or numbers" +msgstr "" + +#: rhodecode/templates/index.html:5 msgid "Dashboard" msgstr "Painel de Controle" @@ -1363,205 +1561,229 @@ msgstr "Painel de Controle" #: 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/bookmarks/bookmarks.html:9 #: rhodecode/templates/branches/branches.html:9 #: rhodecode/templates/journal/journal.html:9 -#: rhodecode/templates/journal/journal.html:48 -#: rhodecode/templates/tags/tags.html:10 +#: rhodecode/templates/journal/journal.html:46 +#: rhodecode/templates/journal/journal.html:47 +#: rhodecode/templates/tags/tags.html:9 msgid "quick filter..." msgstr "filtro rápido..." #: rhodecode/templates/index_base.html:6 #: rhodecode/templates/admin/repos/repos.html:9 -#: rhodecode/templates/base/base.html:233 msgid "repositories" msgstr "repositórios" #: rhodecode/templates/index_base.html:13 -#: rhodecode/templates/index_base.html:15 +#: rhodecode/templates/index_base.html:18 +#: rhodecode/templates/admin/repos/repo_add.html:5 #: rhodecode/templates/admin/repos/repos.html:21 -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 +msgid "Add repository" +msgstr "Adicionar repositório" + +#: rhodecode/templates/index_base.html:15 +#: rhodecode/templates/index_base.html:20 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:31 +#, fuzzy +msgid "Add group" +msgstr "editar grupo de repositórios" + +#: rhodecode/templates/index_base.html:27 +#, fuzzy +msgid "Edit group" +msgstr "editar grupo de repositórios" + +#: rhodecode/templates/index_base.html:27 +msgid "You have admin right to this group, and can edit it" +msgstr "" + +#: rhodecode/templates/index_base.html:40 +#: rhodecode/templates/index_base.html:140 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:33 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:38 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:43 #: rhodecode/templates/admin/users_groups/users_group_add.html:32 #: rhodecode/templates/admin/users_groups/users_group_edit.html:33 +#: rhodecode/templates/admin/users_groups/users_groups.html:34 msgid "Group name" msgstr "Nome do grupo" -#: 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/index_base.html:41 +#: rhodecode/templates/index_base.html:83 +#: rhodecode/templates/index_base.html:142 +#: rhodecode/templates/index_base.html:180 +#: rhodecode/templates/index_base.html:270 #: 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 +#: rhodecode/templates/admin/repos/repos.html:73 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:42 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:47 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:44 +#: rhodecode/templates/forks/fork.html:56 +#: rhodecode/templates/pullrequests/pullrequest.html:101 +#: rhodecode/templates/summary/summary.html:106 msgid "Description" msgstr "Descrição" -#: rhodecode/templates/index_base.html:40 -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47 -msgid "Repositories group" +#: rhodecode/templates/index_base.html:51 +#: 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_show.html:57 +#: rhodecode/templates/forks/fork.html:47 +msgid "Repository group" msgstr "Grupo de repositórios" -#: rhodecode/templates/index_base.html:71 -#: rhodecode/templates/index_base.html:174 -#: rhodecode/templates/index_base.html:264 +#: rhodecode/templates/index_base.html:82 +#: rhodecode/templates/index_base.html:178 +#: rhodecode/templates/index_base.html:268 #: 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/admin/repos/repos.html:71 +#: rhodecode/templates/admin/users/user_edit_my_account.html:172 +#: rhodecode/templates/base/perms_summary.html:14 +#: rhodecode/templates/bookmarks/bookmarks.html:34 #: rhodecode/templates/bookmarks/bookmarks_data.html:6 -#: rhodecode/templates/branches/branches.html:50 +#: rhodecode/templates/branches/branches.html:47 #: rhodecode/templates/branches/branches_data.html:6 #: rhodecode/templates/files/files_browser.html:47 -#: rhodecode/templates/journal/journal.html:70 -#: rhodecode/templates/journal/journal.html:196 -#: 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/journal/journal.html:193 +#: rhodecode/templates/journal/journal.html:296 +#: rhodecode/templates/summary/summary.html:55 +#: rhodecode/templates/summary/summary.html:124 +#: rhodecode/templates/tags/tags.html:48 #: rhodecode/templates/tags/tags_data.html:6 msgid "Name" msgstr "Nome" -#: rhodecode/templates/index_base.html:73 +#: rhodecode/templates/index_base.html:84 msgid "Last change" msgstr "Última alteração" -#: 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:198 +#: rhodecode/templates/index_base.html:85 +#: rhodecode/templates/index_base.html:183 +#: rhodecode/templates/index_base.html:273 +#: rhodecode/templates/admin/repos/repos.html:74 +#: rhodecode/templates/admin/users/user_edit_my_account.html:174 +#: rhodecode/templates/journal/journal.html:195 +#: rhodecode/templates/journal/journal.html:298 msgid "Tip" msgstr "Ponta" -#: rhodecode/templates/index_base.html:75 -#: rhodecode/templates/index_base.html:181 -#: rhodecode/templates/index_base.html:269 +#: rhodecode/templates/index_base.html:86 +#: rhodecode/templates/index_base.html:185 +#: rhodecode/templates/index_base.html:275 #: rhodecode/templates/admin/repos/repo_edit.html:121 -#: rhodecode/templates/admin/repos/repos.html:73 +#: rhodecode/templates/admin/repos/repos.html:76 msgid "Owner" msgstr "Dono" -#: 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 +#: rhodecode/templates/index_base.html:87 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/index_base.html:171 +#: rhodecode/templates/index_base.html:209 +#: rhodecode/templates/index_base.html:296 +#: rhodecode/templates/admin/repos/repos.html:97 +#: rhodecode/templates/admin/users/user_edit_my_account.html:196 #: rhodecode/templates/admin/users/users.html:107 -#: rhodecode/templates/bookmarks/bookmarks.html:60 -#: rhodecode/templates/branches/branches.html:76 -#: rhodecode/templates/journal/journal.html:221 -#: rhodecode/templates/tags/tags.html:77 +#: rhodecode/templates/bookmarks/bookmarks.html:58 +#: rhodecode/templates/branches/branches.html:73 +#: rhodecode/templates/journal/journal.html:217 +#: rhodecode/templates/journal/journal.html:320 +#: rhodecode/templates/tags/tags.html:74 msgid "Click to sort ascending" msgstr "Clique para ordenar em ordem crescente" -#: 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/index_base.html:172 +#: rhodecode/templates/index_base.html:210 +#: rhodecode/templates/index_base.html:297 +#: rhodecode/templates/admin/repos/repos.html:98 +#: rhodecode/templates/admin/users/user_edit_my_account.html:197 #: rhodecode/templates/admin/users/users.html:108 -#: rhodecode/templates/bookmarks/bookmarks.html:61 -#: rhodecode/templates/branches/branches.html:77 -#: rhodecode/templates/journal/journal.html:222 -#: rhodecode/templates/tags/tags.html:78 +#: rhodecode/templates/bookmarks/bookmarks.html:59 +#: rhodecode/templates/branches/branches.html:74 +#: rhodecode/templates/journal/journal.html:218 +#: rhodecode/templates/journal/journal.html:321 +#: rhodecode/templates/tags/tags.html:75 msgid "Click to sort descending" msgstr "Clique para ordenar em ordem descrescente" -#: rhodecode/templates/index_base.html:177 -#: rhodecode/templates/index_base.html:267 +#: rhodecode/templates/index_base.html:181 +#: rhodecode/templates/index_base.html:271 msgid "Last Change" msgstr "Última Alteração" -#: 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/index_base.html:211 +#: rhodecode/templates/admin/repos/repos.html:99 +#: rhodecode/templates/admin/users/user_edit_my_account.html:198 #: rhodecode/templates/admin/users/users.html:109 -#: rhodecode/templates/bookmarks/bookmarks.html:62 -#: rhodecode/templates/branches/branches.html:78 -#: rhodecode/templates/journal/journal.html:223 -#: rhodecode/templates/tags/tags.html:79 +#: rhodecode/templates/bookmarks/bookmarks.html:60 +#: rhodecode/templates/branches/branches.html:75 +#: rhodecode/templates/journal/journal.html:219 +#: rhodecode/templates/journal/journal.html:322 +#: rhodecode/templates/tags/tags.html:76 msgid "No records found." msgstr "Nenhum registro encontrado." -#: 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/index_base.html:212 +#: rhodecode/templates/index_base.html:299 +#: rhodecode/templates/admin/repos/repos.html:100 +#: rhodecode/templates/admin/users/user_edit_my_account.html:199 #: rhodecode/templates/admin/users/users.html:110 -#: rhodecode/templates/bookmarks/bookmarks.html:63 -#: rhodecode/templates/branches/branches.html:79 -#: rhodecode/templates/journal/journal.html:224 -#: rhodecode/templates/tags/tags.html:80 +#: rhodecode/templates/bookmarks/bookmarks.html:61 +#: rhodecode/templates/branches/branches.html:76 +#: rhodecode/templates/journal/journal.html:220 +#: rhodecode/templates/journal/journal.html:323 +#: rhodecode/templates/tags/tags.html:77 msgid "Data error." msgstr "Erro de dados." -#: 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/index_base.html:213 +#: rhodecode/templates/index_base.html:300 +#: rhodecode/templates/admin/repos/repos.html:101 +#: rhodecode/templates/admin/users/user_edit_my_account.html:58 +#: rhodecode/templates/admin/users/user_edit_my_account.html:200 #: rhodecode/templates/admin/users/users.html:111 -#: rhodecode/templates/bookmarks/bookmarks.html:64 -#: rhodecode/templates/branches/branches.html:80 -#: rhodecode/templates/journal/journal.html:62 -#: rhodecode/templates/journal/journal.html:225 -#: rhodecode/templates/tags/tags.html:81 +#: rhodecode/templates/bookmarks/bookmarks.html:62 +#: rhodecode/templates/branches/branches.html:77 +#: rhodecode/templates/journal/journal.html:221 +#: rhodecode/templates/journal/journal.html:324 +#: rhodecode/templates/tags/tags.html:78 msgid "Loading..." msgstr "Carregando..." -#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54 -msgid "Sign In" +#: rhodecode/templates/index_base.html:298 +#, fuzzy +msgid "No repositories found." +msgstr "grupos de repositórios" + +#: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:227 +msgid "Log In" msgstr "Entrar" #: rhodecode/templates/login.html:21 -msgid "Sign In to" -msgstr "Entrar em" +#, python-format +msgid "Log In to %s" +msgstr "" #: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20 #: rhodecode/templates/admin/admin_log.html:5 #: rhodecode/templates/admin/users/user_add.html:32 -#: rhodecode/templates/admin/users/user_edit.html:50 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26 -#: rhodecode/templates/base/base.html:83 -#: rhodecode/templates/summary/summary.html:131 +#: rhodecode/templates/admin/users/user_edit.html:57 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:31 +#: rhodecode/templates/admin/users/users.html:77 +#: rhodecode/templates/base/base.html:203 +#: rhodecode/templates/summary/summary.html:123 msgid "Username" msgstr "Nome de usuário" #: 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 +#: rhodecode/templates/base/base.html:212 msgid "Password" msgstr "Senha" @@ -1569,17 +1791,22 @@ msgstr "Senha" msgid "Remember me" msgstr "Lembre-se de mim" +#: rhodecode/templates/login.html:54 +msgid "Sign In" +msgstr "Entrar" + #: rhodecode/templates/login.html:60 msgid "Forgot your password ?" msgstr "Esqueceu sua senha ?" -#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103 +#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:223 msgid "Don't have an account ?" msgstr "Não possui uma conta ?" #: rhodecode/templates/password_reset.html:5 -msgid "Reset your password" -msgstr "Reinicializar sua senha" +#, fuzzy +msgid "Password Reset" +msgstr "link de reinicialização de senha" #: rhodecode/templates/password_reset.html:11 msgid "Reset your password to" @@ -1613,23 +1840,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:90 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53 +#: rhodecode/templates/admin/users/user_edit.html:97 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62 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:99 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62 +#: rhodecode/templates/admin/users/user_edit.html:106 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71 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:108 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71 -#: rhodecode/templates/summary/summary.html:133 +#: rhodecode/templates/admin/users/user_edit.html:115 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80 +#: rhodecode/templates/summary/summary.html:125 msgid "Email" msgstr "E-mail" @@ -1641,44 +1868,31 @@ msgstr "Sua conta será ativada logo após o registro ser concluído" msgid "Your account must wait for activation by administrator" msgstr "Sua conta precisa esperar ativação por um administrador" -#: rhodecode/templates/repo_switcher_list.html:11 +#: rhodecode/templates/repo_switcher_list.html:10 #: 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 +#: rhodecode/templates/data_table/_dt_elements.html:61 +#: rhodecode/templates/summary/summary.html:77 msgid "Private repository" msgstr "Repositório privado" -#: rhodecode/templates/repo_switcher_list.html:16 +#: rhodecode/templates/repo_switcher_list.html:12 +#: rhodecode/templates/data_table/_dt_elements.html:63 +#: rhodecode/templates/summary/summary.html:79 msgid "Public repository" msgstr "Repositório público" -#: rhodecode/templates/switch_to_list.html:3 -#: rhodecode/templates/branches/branches.html:14 -msgid "branches" -msgstr "ramos" - #: rhodecode/templates/switch_to_list.html:10 #: rhodecode/templates/branches/branches_data.html:57 msgid "There are no branches yet" msgstr "Ainda não há ramos" -#: rhodecode/templates/switch_to_list.html:15 -#: rhodecode/templates/shortlog/shortlog_data.html:10 -#: rhodecode/templates/tags/tags.html:15 -msgid "tags" -msgstr "etiquetas" - #: rhodecode/templates/switch_to_list.html:22 #: rhodecode/templates/tags/tags_data.html:38 msgid "There are no tags yet" msgstr "Ainda não há etiquetas" -#: rhodecode/templates/switch_to_list.html:28 -#: rhodecode/templates/bookmarks/bookmarks.html:15 -msgid "bookmarks" -msgstr "marcadores" - #: rhodecode/templates/switch_to_list.html:35 #: rhodecode/templates/bookmarks/bookmarks_data.html:32 msgid "There are no bookmarks yet" @@ -1686,6 +1900,7 @@ msgstr "Ainda não há marcadores" #: rhodecode/templates/admin/admin.html:5 #: rhodecode/templates/admin/admin.html:13 +#: rhodecode/templates/base/base.html:68 msgid "Admin journal" msgstr "Diário do administrador" @@ -1709,11 +1924,13 @@ msgstr[0] "" msgstr[1] "" #: 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 +#: rhodecode/templates/admin/repos/repos.html:77 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 +#: rhodecode/templates/admin/users/user_edit_my_account.html:176 +#: rhodecode/templates/admin/users/users.html:87 +#: rhodecode/templates/admin/users_groups/users_groups.html:37 +#: rhodecode/templates/journal/journal.html:197 +#: rhodecode/templates/journal/journal.html:300 msgid "Action" msgstr "Ação" @@ -1723,11 +1940,11 @@ msgid "Repository" msgstr "Repositório" #: rhodecode/templates/admin/admin_log.html:8 -#: rhodecode/templates/bookmarks/bookmarks.html:37 +#: rhodecode/templates/bookmarks/bookmarks.html:35 #: rhodecode/templates/bookmarks/bookmarks_data.html:7 -#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches.html:48 #: rhodecode/templates/branches/branches_data.html:7 -#: rhodecode/templates/tags/tags.html:52 +#: rhodecode/templates/tags/tags.html:49 #: rhodecode/templates/tags/tags_data.html:7 msgid "Date" msgstr "Data" @@ -1747,6 +1964,7 @@ msgid "Repositories defaults" msgstr "grupos de repositórios" #: rhodecode/templates/admin/defaults/defaults.html:11 +#: rhodecode/templates/base/base.html:75 #, fuzzy msgid "Defaults" msgstr "excluir" @@ -1760,8 +1978,7 @@ 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 +#: rhodecode/templates/forks/fork.html:69 msgid "" "Private repositories are only visible to people explicitly added as " "collaborators." @@ -1791,7 +2008,7 @@ 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 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72 #, fuzzy msgid "Enable locking" msgstr "habilitar" @@ -1803,14 +2020,18 @@ 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/permissions/permissions.html:92 +#: rhodecode/templates/admin/repos/repo_edit.html:148 +#: rhodecode/templates/admin/repos/repo_edit.html:173 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:80 #: 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/user_add.html:94 +#: rhodecode/templates/admin/users/user_edit.html:140 +#: rhodecode/templates/admin/users/user_edit.html:185 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:88 +#: rhodecode/templates/admin/users_groups/users_group_add.html:49 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:90 #: rhodecode/templates/admin/users_groups/users_group_edit.html:135 -#: rhodecode/templates/settings/repo_settings.html:94 msgid "Save" msgstr "Salvar" @@ -1819,8 +2040,11 @@ msgid "LDAP administration" msgstr "Administração de LDAP" #: rhodecode/templates/admin/ldap/ldap.html:11 -msgid "Ldap" -msgstr "LDAP" +#: rhodecode/templates/admin/users/users.html:86 +#: rhodecode/templates/base/base.html:74 +#, fuzzy +msgid "LDAP" +msgstr "ldap" #: rhodecode/templates/admin/ldap/ldap.html:28 msgid "Connection settings" @@ -1901,8 +2125,7 @@ msgid "Comments" msgstr "commits" #: rhodecode/templates/admin/notifications/notifications.html:31 -#: rhodecode/templates/base/base.html:267 -#: rhodecode/templates/base/base.html:269 +#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 msgid "Pull requests" msgstr "" @@ -1920,6 +2143,7 @@ msgid "Show notification" msgstr "Mostrar notificação" #: rhodecode/templates/admin/notifications/show_notification.html:9 +#: rhodecode/templates/base/base.html:241 msgid "Notifications" msgstr "Notificações" @@ -1928,11 +2152,12 @@ msgid "Permissions administration" 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:143 +#: rhodecode/templates/admin/repos/repo_edit.html:158 +#: rhodecode/templates/admin/repos/repo_edit.html:165 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64 +#: rhodecode/templates/admin/users/user_edit.html:150 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100 -#: rhodecode/templates/settings/repo_settings.html:86 +#: rhodecode/templates/base/base.html:73 msgid "Permissions" msgstr "Permissões" @@ -1945,8 +2170,9 @@ msgid "Anonymous access" msgstr "Acesso anônimo" #: rhodecode/templates/admin/permissions/permissions.html:49 +#, fuzzy msgid "" -"All default permissions on each repository will be reset to choosen " +"All default permissions on each repository will be reset to chosen " "permission, note that all custom default permission on repositories will " "be lost" msgstr "" @@ -1956,24 +2182,16 @@ msgstr "" #: rhodecode/templates/admin/permissions/permissions.html:50 #: rhodecode/templates/admin/permissions/permissions.html:63 -msgid "overwrite existing settings" +#, fuzzy +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" +"All default permissions on each repository group will be reset to chosen " +"permission, note that all custom default permission on repository groups " +"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 " @@ -1992,40 +2210,100 @@ msgstr "Criação de repositório" msgid "Repository forking" msgstr "Criação de repositório" -#: rhodecode/templates/admin/permissions/permissions.html:92 -#: rhodecode/templates/admin/repos/repo_edit.html:264 -msgid "set" -msgstr "ajustar" - -#: rhodecode/templates/admin/repos/repo_add.html:5 -#: rhodecode/templates/admin/repos/repo_add_create_repository.html:5 -msgid "Add repository" -msgstr "Adicionar repositório" - -#: 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 +#: rhodecode/templates/admin/permissions/permissions.html:93 +#: rhodecode/templates/admin/permissions/permissions.html:154 +#: rhodecode/templates/admin/repos/repo_edit.html:149 +#: rhodecode/templates/admin/repos/repo_edit.html:174 +#: rhodecode/templates/admin/repos/repo_edit.html:388 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81 +#: rhodecode/templates/admin/settings/settings.html:115 +#: rhodecode/templates/admin/settings/settings.html:187 +#: rhodecode/templates/admin/settings/settings.html:278 +#: rhodecode/templates/admin/users/user_edit.html:141 +#: rhodecode/templates/admin/users/user_edit.html:186 +#: rhodecode/templates/admin/users/user_edit.html:235 +#: rhodecode/templates/admin/users/user_edit.html:283 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:89 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:136 +#: rhodecode/templates/files/files_add.html:80 +#: rhodecode/templates/files/files_edit.html:66 +#: rhodecode/templates/pullrequests/pullrequest.html:110 +msgid "Reset" +msgstr "Limpar" + +#: rhodecode/templates/admin/permissions/permissions.html:103 +#, fuzzy +msgid "Default User Permissions" +msgstr "Permissões padrão" + +#: rhodecode/templates/admin/permissions/permissions.html:113 +#: rhodecode/templates/admin/users/user_edit.html:244 +#, fuzzy +msgid "Allowed IP addresses" +msgstr "Endereço de e-mail" + +#: rhodecode/templates/admin/permissions/permissions.html:127 +#: rhodecode/templates/admin/repos/repo_edit.html:347 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70 +#: rhodecode/templates/admin/users/user_edit.html:212 +#: rhodecode/templates/admin/users/user_edit.html:257 +#: rhodecode/templates/admin/users_groups/users_groups.html:46 +#: rhodecode/templates/data_table/_dt_elements.html:122 +#: rhodecode/templates/data_table/_dt_elements.html:130 +msgid "delete" +msgstr "excluir" + +#: rhodecode/templates/admin/permissions/permissions.html:128 +#: rhodecode/templates/admin/users/user_edit.html:258 +#, fuzzy, python-format +msgid "Confirm to delete this ip: %s" +msgstr "Confirma excluir este usuário: %s" + +#: rhodecode/templates/admin/permissions/permissions.html:134 +#: rhodecode/templates/admin/users/user_edit.html:264 +msgid "All IP addresses are allowed" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:145 +#: rhodecode/templates/admin/users/user_edit.html:275 +#, fuzzy +msgid "New ip address" +msgstr "Endereço de e-mail" + +#: rhodecode/templates/admin/permissions/permissions.html:153 +#: rhodecode/templates/admin/repos/repo_add_base.html:73 +#: rhodecode/templates/admin/repos/repo_edit.html:387 +#: rhodecode/templates/admin/users/user_edit.html:234 +#: rhodecode/templates/admin/users/user_edit.html:282 +#, fuzzy +msgid "Add" +msgstr "adicionar" + +#: rhodecode/templates/admin/repos/repo_add.html:12 +#: rhodecode/templates/admin/repos/repo_add.html:16 +#: rhodecode/templates/base/base.html:69 rhodecode/templates/base/base.html:103 +#: rhodecode/templates/base/base.html:263 msgid "Repositories" msgstr "Repositórios" -#: rhodecode/templates/admin/repos/repo_add.html:13 -msgid "add new" +#: rhodecode/templates/admin/repos/repo_add.html:19 +#, fuzzy +msgid "Add new" msgstr "adicionar novo" #: rhodecode/templates/admin/repos/repo_add_base.html:20 -#: rhodecode/templates/summary/summary.html:104 -#: rhodecode/templates/summary/summary.html:105 +#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:97 msgid "Clone from" msgstr "Clonar de" #: 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 "URL opcional http[s] da qual o repositório deve ser clonado." #: rhodecode/templates/admin/repos/repo_add_base.html:33 -#: rhodecode/templates/forks/fork.html:54 +#: rhodecode/templates/forks/fork.html:51 #, fuzzy msgid "Optionaly select a group to put this repository into." msgstr "Opcionalmente selecione um grupo no qual colocar esse repositório." @@ -2036,60 +2314,42 @@ msgstr "Tipo de repositório a criar." #: 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 +#: rhodecode/templates/forks/fork.html:38 #, fuzzy msgid "Landing revision" msgstr "próxima revisão" #: 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 +#: rhodecode/templates/forks/fork.html:42 msgid "Default revision for files page, downloads, whoosh and readme" msgstr "" #: 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 +#: rhodecode/templates/forks/fork.html:60 msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "" "Seja sucinto e objetivo. Use um arquivo README para descrições mais " "longas." -#: rhodecode/templates/admin/repos/repo_add_base.html:73 -msgid "add" -msgstr "adicionar" - -#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9 -msgid "add new repository" -msgstr "adicionar novo repositório" - -#: rhodecode/templates/admin/repos/repo_edit.html:5 +#: rhodecode/templates/admin/repos/repo_edit.html:8 msgid "Edit repository" 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: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 "editar" +#: rhodecode/templates/admin/repos/repo_edit.html:12 +#: rhodecode/templates/admin/settings/hooks.html:9 +#: rhodecode/templates/admin/settings/settings.html:11 +#: rhodecode/templates/base/base.html:76 rhodecode/templates/base/base.html:121 +#: rhodecode/templates/summary/summary.html:212 +msgid "Settings" +msgstr "Configurações" #: rhodecode/templates/admin/repos/repo_edit.html:40 -#: rhodecode/templates/settings/repo_settings.html:39 msgid "Clone uri" msgstr "URI de clonagem" #: 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 "Opcionalmente selecione um grupo no qual colocar esse repositório." @@ -2097,114 +2357,99 @@ msgstr "Opcionalmente selecione um grupo no qual colocar esse repositório." msgid "Change owner of this repository." 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: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:95 -msgid "Reset" -msgstr "Limpar" - -#: rhodecode/templates/admin/repos/repo_edit.html:152 -msgid "Administration" -msgstr "Administração" - -#: rhodecode/templates/admin/repos/repo_edit.html:155 +#: rhodecode/templates/admin/repos/repo_edit.html:184 +#, fuzzy +msgid "Advanced settings" +msgstr "Salvar configurações" + +#: rhodecode/templates/admin/repos/repo_edit.html:187 msgid "Statistics" msgstr "Estatísticas" -#: rhodecode/templates/admin/repos/repo_edit.html:159 +#: rhodecode/templates/admin/repos/repo_edit.html:191 msgid "Reset current statistics" msgstr "Reinicializar estatísticas atuais" -#: rhodecode/templates/admin/repos/repo_edit.html:159 +#: rhodecode/templates/admin/repos/repo_edit.html:191 msgid "Confirm to remove current statistics" msgstr "Confirma remover atuais estatísticas" -#: rhodecode/templates/admin/repos/repo_edit.html:162 +#: rhodecode/templates/admin/repos/repo_edit.html:194 msgid "Fetched to rev" msgstr "Trazida à rev" -#: rhodecode/templates/admin/repos/repo_edit.html:163 +#: rhodecode/templates/admin/repos/repo_edit.html:195 msgid "Stats gathered" msgstr "Estatísticas coletadas" -#: rhodecode/templates/admin/repos/repo_edit.html:171 +#: rhodecode/templates/admin/repos/repo_edit.html:203 msgid "Remote" msgstr "Remoto" -#: rhodecode/templates/admin/repos/repo_edit.html:175 +#: rhodecode/templates/admin/repos/repo_edit.html:207 msgid "Pull changes from remote location" msgstr "Realizar pull de alterações a partir de localização remota" -#: rhodecode/templates/admin/repos/repo_edit.html:175 +#: rhodecode/templates/admin/repos/repo_edit.html:207 msgid "Confirm to pull changes from remote side" msgstr "Confirma realizar pull de alterações a partir de lado remoto" -#: rhodecode/templates/admin/repos/repo_edit.html:186 +#: rhodecode/templates/admin/repos/repo_edit.html:218 msgid "Cache" msgstr "Cache" -#: rhodecode/templates/admin/repos/repo_edit.html:190 +#: rhodecode/templates/admin/repos/repo_edit.html:222 msgid "Invalidate repository cache" msgstr "Invalidar cache do repositório" -#: rhodecode/templates/admin/repos/repo_edit.html:190 +#: rhodecode/templates/admin/repos/repo_edit.html:222 msgid "Confirm to invalidate repository cache" msgstr "Confirma invalidar cache do repositório" -#: rhodecode/templates/admin/repos/repo_edit.html:193 +#: rhodecode/templates/admin/repos/repo_edit.html:225 msgid "" "Manually invalidate cache for this repository. On first access repository" " will be cached again" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:198 +#: rhodecode/templates/admin/repos/repo_edit.html:230 msgid "List of cached values" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:201 +#: rhodecode/templates/admin/repos/repo_edit.html:233 msgid "Prefix" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:202 +#: rhodecode/templates/admin/repos/repo_edit.html:234 #, fuzzy msgid "Key" msgstr "Chave de API" -#: rhodecode/templates/admin/repos/repo_edit.html:203 +#: rhodecode/templates/admin/repos/repo_edit.html:235 #: rhodecode/templates/admin/users/user_add.html:86 -#: rhodecode/templates/admin/users/user_edit.html:117 +#: rhodecode/templates/admin/users/user_edit.html:124 +#: rhodecode/templates/admin/users/users.html:84 #: rhodecode/templates/admin/users_groups/users_group_add.html:41 #: rhodecode/templates/admin/users_groups/users_group_edit.html:42 +#: rhodecode/templates/admin/users_groups/users_groups.html:36 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 +#: rhodecode/templates/admin/repos/repo_edit.html:250 +#: rhodecode/templates/base/base.html:280 +#: rhodecode/templates/base/base.html:281 msgid "Public journal" msgstr "Diário público" -#: rhodecode/templates/admin/repos/repo_edit.html:224 +#: rhodecode/templates/admin/repos/repo_edit.html:256 msgid "Remove from public journal" msgstr "Remover do diário público" -#: rhodecode/templates/admin/repos/repo_edit.html:226 +#: rhodecode/templates/admin/repos/repo_edit.html:258 msgid "Add to public journal" msgstr "Adicionar ao diário público" -#: rhodecode/templates/admin/repos/repo_edit.html:231 +#: rhodecode/templates/admin/repos/repo_edit.html:263 msgid "" "All actions made on this repository will be accessible to everyone in " "public journal" @@ -2212,76 +2457,125 @@ 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:238 +#: rhodecode/templates/admin/repos/repo_edit.html:270 #, fuzzy msgid "Locking" msgstr "destravar" -#: rhodecode/templates/admin/repos/repo_edit.html:243 +#: rhodecode/templates/admin/repos/repo_edit.html:275 msgid "Unlock locked repo" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:243 +#: rhodecode/templates/admin/repos/repo_edit.html:275 #, fuzzy msgid "Confirm to unlock repository" msgstr "Confirma excluir este repositório" -#: rhodecode/templates/admin/repos/repo_edit.html:246 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "lock repo" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:246 +#: rhodecode/templates/admin/repos/repo_edit.html:278 #, fuzzy msgid "Confirm to lock repository" msgstr "Confirma excluir este repositório" -#: rhodecode/templates/admin/repos/repo_edit.html:247 +#: rhodecode/templates/admin/repos/repo_edit.html:279 #, fuzzy msgid "Repository is not locked" msgstr "repositórios" -#: rhodecode/templates/admin/repos/repo_edit.html:252 +#: rhodecode/templates/admin/repos/repo_edit.html:284 msgid "Force locking on repository. Works only when anonymous access is disabled" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:259 +#: rhodecode/templates/admin/repos/repo_edit.html:291 #, fuzzy msgid "Set as fork of" msgstr "Marcar como bifurcação" -#: rhodecode/templates/admin/repos/repo_edit.html:268 +#: rhodecode/templates/admin/repos/repo_edit.html:296 +msgid "set" +msgstr "ajustar" + +#: rhodecode/templates/admin/repos/repo_edit.html:300 #, 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:274 -#: rhodecode/templates/changeset/changeset_file_comment.html:26 +#: rhodecode/templates/admin/repos/repo_edit.html:306 +#: rhodecode/templates/changeset/changeset_file_comment.html:41 msgid "Delete" msgstr "Excluir" -#: rhodecode/templates/admin/repos/repo_edit.html:278 -#: rhodecode/templates/settings/repo_settings.html:115 +#: rhodecode/templates/admin/repos/repo_edit.html:315 msgid "Remove this repository" msgstr "Remover deste repositório" -#: rhodecode/templates/admin/repos/repo_edit.html:278 -#: rhodecode/templates/settings/repo_settings.html:115 +#: rhodecode/templates/admin/repos/repo_edit.html:315 msgid "Confirm to delete this repository" msgstr "Confirma excluir este repositório" -#: rhodecode/templates/admin/repos/repo_edit.html:282 -#: rhodecode/templates/settings/repo_settings.html:119 +#: rhodecode/templates/admin/repos/repo_edit.html:317 +#, fuzzy, python-format +msgid "this repository has %s fork" +msgid_plural "this repository has %s forks" +msgstr[0] "repositório [criado] como uma bifurcação" +msgstr[1] "" + +#: rhodecode/templates/admin/repos/repo_edit.html:318 +#, fuzzy +msgid "Detach forks" +msgstr "Marcar como bifurcação" + +#: rhodecode/templates/admin/repos/repo_edit.html:319 +#, fuzzy +msgid "Delete forks" +msgstr "excluir" + +#: rhodecode/templates/admin/repos/repo_edit.html:322 #, fuzzy msgid "" "This repository will be renamed in a special way in order to be " -"unaccesible for RhodeCode and VCS systems. If you need fully delete it " -"from file system please do it manually" +"unaccesible for RhodeCode and VCS systems. If you need to fully delete it" +" from file system please do it manually" msgstr "" "Este repositório será renomeado de uma maneira especial, de forma a ser " "inacessível ao RhodeCode e sistemas de controle de versão.\n" " Se você precisa exclui-lo completamente do " "sistema de arquivos, por favor faça-o manualmente" +#: rhodecode/templates/admin/repos/repo_edit.html:336 +msgid "Extra fields" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:348 +#, fuzzy, python-format +msgid "Confirm to delete this field: %s" +msgstr "Confirma excluir este usuário: %s" + +#: rhodecode/templates/admin/repos/repo_edit.html:362 +#, fuzzy +msgid "New field key" +msgstr "adicionar novo arquivo" + +#: rhodecode/templates/admin/repos/repo_edit.html:370 +msgid "New field label" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:373 +msgid "Enter short label" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:379 +#, fuzzy +msgid "New field description" +msgstr "Descrição" + +#: rhodecode/templates/admin/repos/repo_edit.html:382 +msgid "Enter description of a field" +msgstr "" + #: rhodecode/templates/admin/repos/repo_edit_perms.html:3 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3 msgid "none" @@ -2299,8 +2593,6 @@ 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:229 msgid "admin" msgstr "administrador" @@ -2310,79 +2602,60 @@ msgid "member" msgstr "membro" #: rhodecode/templates/admin/repos/repo_edit_perms.html:16 -#: rhodecode/templates/data_table/_dt_elements.html:67 -#: rhodecode/templates/journal/journal.html:95 -#: rhodecode/templates/summary/summary.html:85 msgid "private repository" msgstr "repositório privado" #: 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 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:20 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:35 #, fuzzy msgid "default" msgstr "excluir" #: 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 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:25 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:55 msgid "revoke" msgstr "revogar" #: rhodecode/templates/admin/repos/repo_edit_perms.html:83 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:67 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:80 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:87 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:100 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:103 -msgid "Failed to remove users group" +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:116 +#, fuzzy +msgid "Failed to remove user group" msgstr "Falha ao remover grupo de usuários" #: rhodecode/templates/admin/repos/repos.html:5 msgid "Repositories administration" msgstr "Administração de repositórios" -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:86 msgid "apply to children" msgstr "" -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 msgid "" -"Set or revoke permission to all children of that group, including " -"repositories and other groups" +"Set or revoke permission to all children of that group, including non-" +"private repositories and other groups" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 +#, python-format +msgid "%s Group Dashboard" 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" @@ -2391,80 +2664,86 @@ msgid "with" msgstr "com" #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5 -msgid "Add repos group" -msgstr "Adicionar grupo de repositórios" - -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10 -msgid "Repos groups" +#, fuzzy +msgid "Add repository group" msgstr "Grupo de repositórios" -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12 -msgid "add new repos group" +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:16 +#: rhodecode/templates/base/base.html:70 rhodecode/templates/base/base.html:82 +#, fuzzy +msgid "Repository groups" +msgstr "Grupo de repositórios" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:13 +#, fuzzy +msgid "Add new repository group" msgstr "adicionar novo grupo de repositórios" -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:51 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:56 msgid "Group parent" msgstr "Progenitor do grupo" -#: 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 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:59 msgid "save" msgstr "salvar" #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5 -msgid "Edit repos group" -msgstr "Editar grupo de repositórios" - -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12 -msgid "edit repos group" +#, fuzzy +msgid "Edit repository group" +msgstr "editar grupo de repositórios" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:13 +#, fuzzy, python-format +msgid "Edit repository group %s" msgstr "editar grupo de repositórios" -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:27 +#, fuzzy +msgid "Add child group" +msgstr "Adicionar novo grupo de usuários" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:76 msgid "" "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 -msgid "Repositories groups administration" +#, fuzzy +msgid "Repository groups administration" msgstr "Administração de grupos de repositórios" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22 -msgid "ADD NEW GROUP" -msgstr "ADICIONAR NOVO GRUPO" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:45 msgid "Number of toplevel repositories" msgstr "Número de repositórios de nível superior" -#: 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 "ação" - -#: 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 "excluir" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:64 +#, fuzzy +msgid "Edit" +msgstr "editar" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:65 +#: rhodecode/templates/base/perms_summary.html:29 +#: rhodecode/templates/base/perms_summary.html:48 +#: rhodecode/templates/base/perms_summary.html:50 +#: rhodecode/templates/data_table/_dt_elements.html:116 +#: rhodecode/templates/data_table/_dt_elements.html:117 +msgid "edit" +msgstr "editar" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70 #, 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" +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:78 +#, fuzzy +msgid "There are no repository groups yet" msgstr "Ainda não há grupos de repositórios" #: rhodecode/templates/admin/settings/hooks.html:5 @@ -2472,12 +2751,6 @@ msgstr "Ainda não há grupos de repositórios" msgid "Settings administration" msgstr "Administração de configurações" -#: rhodecode/templates/admin/settings/hooks.html:9 -#: rhodecode/templates/admin/settings/settings.html:9 -#: rhodecode/templates/settings/repo_settings.html:13 -msgid "Settings" -msgstr "Configurações" - #: rhodecode/templates/admin/settings/hooks.html:24 msgid "Built in hooks - read only" msgstr "Ganchos pré-definidos - somente leitura" @@ -2494,15 +2767,16 @@ msgstr "remover" msgid "Failed to remove hook" msgstr "Falha ao remover gancho" -#: rhodecode/templates/admin/settings/settings.html:24 +#: rhodecode/templates/admin/settings/settings.html:26 msgid "Remap and rescan repositories" msgstr "Remapear e varrer novamente repositórios" -#: rhodecode/templates/admin/settings/settings.html:32 -msgid "rescan option" +#: rhodecode/templates/admin/settings/settings.html:34 +#, fuzzy +msgid "Rescan option" msgstr "opção de varredura" -#: rhodecode/templates/admin/settings/settings.html:38 +#: rhodecode/templates/admin/settings/settings.html:40 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 " @@ -2512,163 +2786,172 @@ msgstr "" "restos no banco de dados, marque esta opção para varrer dados obsoletos " "no banco e removê-los." -#: rhodecode/templates/admin/settings/settings.html:39 -msgid "destroy old data" +#: rhodecode/templates/admin/settings/settings.html:41 +#, fuzzy +msgid "Destroy old data" msgstr "destruir dados antigos" -#: rhodecode/templates/admin/settings/settings.html:41 +#: rhodecode/templates/admin/settings/settings.html:43 msgid "" "Rescan repositories location for new repositories. Also deletes obsolete " "if `destroy` flag is checked " msgstr "" -#: rhodecode/templates/admin/settings/settings.html:46 +#: rhodecode/templates/admin/settings/settings.html:48 msgid "Rescan repositories" msgstr "Varrer repositórios" -#: rhodecode/templates/admin/settings/settings.html:52 +#: rhodecode/templates/admin/settings/settings.html:54 msgid "Whoosh indexing" msgstr "Indexação do Whoosh" -#: rhodecode/templates/admin/settings/settings.html:60 -msgid "index build option" +#: rhodecode/templates/admin/settings/settings.html:62 +#, fuzzy +msgid "Index build option" msgstr "opção de construção de índice" -#: rhodecode/templates/admin/settings/settings.html:65 -msgid "build from scratch" +#: rhodecode/templates/admin/settings/settings.html:67 +#, fuzzy +msgid "Build from scratch" msgstr "construir do início" -#: rhodecode/templates/admin/settings/settings.html:71 +#: rhodecode/templates/admin/settings/settings.html:73 msgid "Reindex" msgstr "Reindexar" -#: rhodecode/templates/admin/settings/settings.html:77 +#: rhodecode/templates/admin/settings/settings.html:79 msgid "Global application settings" msgstr "Configurações globais da aplicação" -#: rhodecode/templates/admin/settings/settings.html:86 -msgid "Application name" -msgstr "Nome da aplicação" - -#: rhodecode/templates/admin/settings/settings.html:95 -msgid "Realm text" -msgstr "Texto de esfera" - -#: rhodecode/templates/admin/settings/settings.html:104 -msgid "GA code" -msgstr "Código GA" - -#: rhodecode/templates/admin/settings/settings.html:112 -#: rhodecode/templates/admin/settings/settings.html:178 -#: rhodecode/templates/admin/settings/settings.html:268 +#: rhodecode/templates/admin/settings/settings.html:88 +msgid "Site branding" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:97 +msgid "HTTP authentication realm" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:106 +msgid "Google Analytics code" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:114 +#: rhodecode/templates/admin/settings/settings.html:186 +#: rhodecode/templates/admin/settings/settings.html:277 msgid "Save settings" msgstr "Salvar configurações" -#: rhodecode/templates/admin/settings/settings.html:119 +#: rhodecode/templates/admin/settings/settings.html:121 #, fuzzy msgid "Visualisation settings" msgstr "Configurações globais da aplicação" -#: rhodecode/templates/admin/settings/settings.html:127 +#: rhodecode/templates/admin/settings/settings.html:129 #, fuzzy msgid "General" msgstr "habilitar" -#: rhodecode/templates/admin/settings/settings.html:132 +#: rhodecode/templates/admin/settings/settings.html:134 msgid "Use lightweight dashboard" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:139 +#: rhodecode/templates/admin/settings/settings.html:140 +#, fuzzy +msgid "Use repository extra fields" +msgstr "repositórios" + +#: rhodecode/templates/admin/settings/settings.html:147 #, fuzzy msgid "Icons" msgstr "Opções" -#: rhodecode/templates/admin/settings/settings.html:144 +#: rhodecode/templates/admin/settings/settings.html:152 msgid "Show public repo icon on repositories" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:148 +#: rhodecode/templates/admin/settings/settings.html:156 #, fuzzy msgid "Show private repo icon on repositories" msgstr "repositório privado" -#: rhodecode/templates/admin/settings/settings.html:155 +#: rhodecode/templates/admin/settings/settings.html:163 #, fuzzy msgid "Meta-Tagging" msgstr "configurações" -#: rhodecode/templates/admin/settings/settings.html:160 +#: rhodecode/templates/admin/settings/settings.html:168 msgid "Stylify recognised metatags:" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:187 +#: rhodecode/templates/admin/settings/settings.html:195 #, fuzzy msgid "VCS settings" msgstr "configurações" -#: rhodecode/templates/admin/settings/settings.html:196 +#: rhodecode/templates/admin/settings/settings.html:204 msgid "Web" msgstr "Web" -#: rhodecode/templates/admin/settings/settings.html:201 -#, fuzzy -msgid "require ssl for vcs operations" +#: rhodecode/templates/admin/settings/settings.html:209 +#, fuzzy +msgid "Require SSL for vcs operations" msgstr "exigir ssl para realizar push" -#: rhodecode/templates/admin/settings/settings.html:203 +#: rhodecode/templates/admin/settings/settings.html:211 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 +#: rhodecode/templates/admin/settings/settings.html:217 msgid "Hooks" msgstr "Ganchos" -#: 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:218 -msgid "Show repository size after push" -msgstr "Mostrar tamanho do repositório após o push" - #: rhodecode/templates/admin/settings/settings.html:222 +msgid "Update repository after push (hg update)" +msgstr "Atualizar repositório após realizar push (hg update)" + +#: rhodecode/templates/admin/settings/settings.html:226 +msgid "Show repository size after push" +msgstr "Mostrar tamanho do repositório após o push" + +#: rhodecode/templates/admin/settings/settings.html:230 msgid "Log user push commands" msgstr "Armazenar registro de comandos de push dos usuários" -#: rhodecode/templates/admin/settings/settings.html:226 +#: rhodecode/templates/admin/settings/settings.html:234 msgid "Log user pull commands" msgstr "Armazenar registro de comandos de pull dos usuários" -#: rhodecode/templates/admin/settings/settings.html:230 -msgid "advanced setup" +#: rhodecode/templates/admin/settings/settings.html:238 +#, fuzzy +msgid "Advanced setup" msgstr "confirguações avançadas" -#: rhodecode/templates/admin/settings/settings.html:235 +#: rhodecode/templates/admin/settings/settings.html:243 #, fuzzy msgid "Mercurial Extensions" msgstr "Repositório Mercurial" -#: rhodecode/templates/admin/settings/settings.html:240 -msgid "largefiles extensions" +#: rhodecode/templates/admin/settings/settings.html:248 +msgid "Enable largefiles extension" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:244 -msgid "hgsubversion extensions" +#: rhodecode/templates/admin/settings/settings.html:252 +msgid "Enable hgsubversion extension" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:246 +#: rhodecode/templates/admin/settings/settings.html:254 msgid "" -"Requires hgsubversion library installed. Allows clonning from svn remote " +"Requires hgsubversion library installed. Allows cloning from svn remote " "locations" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:256 +#: rhodecode/templates/admin/settings/settings.html:264 msgid "Repositories location" msgstr "Localização dos repositórios" -#: rhodecode/templates/admin/settings/settings.html:261 +#: rhodecode/templates/admin/settings/settings.html:269 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 " @@ -2678,36 +2961,38 @@ 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:262 -#: rhodecode/templates/base/base.html:221 -msgid "unlock" +#: rhodecode/templates/admin/settings/settings.html:270 +#: rhodecode/templates/base/base.html:131 +#, fuzzy +msgid "Unlock" msgstr "destravar" -#: rhodecode/templates/admin/settings/settings.html:263 +#: rhodecode/templates/admin/settings/settings.html:272 msgid "" "Location where repositories are stored. After changing this value a " "restart, and rescan is required" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:283 +#: rhodecode/templates/admin/settings/settings.html:292 msgid "Test Email" msgstr "Testar E-mail" -#: rhodecode/templates/admin/settings/settings.html:291 +#: rhodecode/templates/admin/settings/settings.html:300 msgid "Email to" msgstr "E-mail para" -#: rhodecode/templates/admin/settings/settings.html:299 +#: rhodecode/templates/admin/settings/settings.html:308 msgid "Send" msgstr "Enviar" -#: rhodecode/templates/admin/settings/settings.html:305 +#: rhodecode/templates/admin/settings/settings.html:314 msgid "System Info and Packages" msgstr "Informações de Sistema e Pacotes" -#: rhodecode/templates/admin/settings/settings.html:308 -msgid "show" -msgstr "mostrar" +#: rhodecode/templates/admin/settings/settings.html:317 +#: rhodecode/templates/changelog/changelog.html:42 +msgid "Show" +msgstr "Mostrar" #: rhodecode/templates/admin/users/user_add.html:5 msgid "Add user" @@ -2715,11 +3000,14 @@ msgstr "Adicionar usuário" #: rhodecode/templates/admin/users/user_add.html:10 #: rhodecode/templates/admin/users/user_edit.html:11 +#: rhodecode/templates/base/base.html:71 msgid "Users" msgstr "Usuários" #: rhodecode/templates/admin/users/user_add.html:12 -msgid "add new user" +#: rhodecode/templates/admin/users/users.html:23 +#, fuzzy +msgid "Add new user" msgstr "adicionar novo usuário" #: rhodecode/templates/admin/users/user_add.html:50 @@ -2730,6 +3018,12 @@ msgstr "Confirmação de senha" msgid "Edit user" msgstr "Editar usuário" +#: rhodecode/templates/admin/users/user_edit.html:13 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:13 +#, fuzzy, python-format +msgid "Edit %s" +msgstr "editar" + #: rhodecode/templates/admin/users/user_edit.html:34 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:10 msgid "Change your avatar at" @@ -2745,27 +3039,32 @@ msgstr "Usando" msgid "API key" msgstr "Chave de API" -#: rhodecode/templates/admin/users/user_edit.html:63 +#: rhodecode/templates/admin/users/user_edit.html:50 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:25 +msgid "Current IP" +msgstr "" + +#: rhodecode/templates/admin/users/user_edit.html:70 msgid "LDAP DN" msgstr "DN LDAP" -#: rhodecode/templates/admin/users/user_edit.html:72 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35 +#: rhodecode/templates/admin/users/user_edit.html:79 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 msgid "New password" msgstr "Nova senha" -#: rhodecode/templates/admin/users/user_edit.html:81 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 +#: rhodecode/templates/admin/users/user_edit.html:88 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53 msgid "New password confirmation" msgstr "Confirmação de nova senha" -#: rhodecode/templates/admin/users/user_edit.html:151 +#: rhodecode/templates/admin/users/user_edit.html:158 #: 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:156 +#: rhodecode/templates/admin/users/user_edit.html:163 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113 #, python-format msgid "" @@ -2773,59 +3072,34 @@ msgid "" "options does not have any action" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:162 +#: rhodecode/templates/admin/users/user_edit.html:169 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119 msgid "Create repositories" msgstr "Criar repositórios" -#: rhodecode/templates/admin/users/user_edit.html:170 +#: rhodecode/templates/admin/users/user_edit.html:177 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127 #, fuzzy msgid "Fork repositories" msgstr "repositórios" -#: 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: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 "Permissão" - -#: 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:247 +#: rhodecode/templates/admin/users/user_edit.html:200 #, fuzzy msgid "Email addresses" msgstr "Endereço de e-mail" -#: rhodecode/templates/admin/users/user_edit.html:260 +#: rhodecode/templates/admin/users/user_edit.html:213 #, fuzzy, python-format msgid "Confirm to delete this email: %s" msgstr "Confirma excluir este usuário: %s" -#: rhodecode/templates/admin/users/user_edit.html:274 +#: rhodecode/templates/admin/users/user_edit.html:227 #, fuzzy msgid "New email address" msgstr "Endereço de e-mail" -#: rhodecode/templates/admin/users/user_edit.html:281 -#, fuzzy -msgid "Add" -msgstr "adicionar" - #: rhodecode/templates/admin/users/user_edit_my_account.html:5 -#: rhodecode/templates/base/base.html:124 +#: rhodecode/templates/base/base.html:242 msgid "My account" msgstr "Minha conta" @@ -2838,7 +3112,7 @@ msgid "My permissions" msgstr "Minhas permissões" #: rhodecode/templates/admin/users/user_edit_my_account.html:38 -#: rhodecode/templates/journal/journal.html:49 +#: rhodecode/templates/journal/journal.html:54 msgid "My repos" msgstr "Meus repositórios" @@ -2847,135 +3121,109 @@ msgstr "Meus repositórios" msgid "My pull requests" msgstr "comentado no commit" -#: rhodecode/templates/admin/users/user_edit_my_account.html:45 -#, fuzzy -msgid "Add repo" -msgstr "adicionar novo" - #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:2 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:4 +#, fuzzy +msgid "Show closed pull requests" +msgstr "repositório [criado]" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:6 msgid "Opened by me" msgstr "" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15 #, python-format msgid "Pull request #%s opened on %s" msgstr "" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:17 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:45 +#: rhodecode/templates/pullrequests/pullrequest_data.html:7 +#: rhodecode/templates/pullrequests/pullrequest_show.html:27 +#: rhodecode/templates/pullrequests/pullrequest_show.html:42 +msgid "Closed" +msgstr "" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:23 #, fuzzy msgid "Confirm to delete this pull request" msgstr "Confirma excluir este repositório" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:26 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:30 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:51 +#, fuzzy +msgid "Nothing here yet" +msgstr "Ainda não há notificações aqui" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:34 msgid "I participate in" msgstr "" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:33 -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:30 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:42 +#: rhodecode/templates/pullrequests/pullrequest_data.html:11 #, python-format msgid "Pull request #%s opened by %s on %s" 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: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_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_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_page_repos.html:44 -msgid "create one now" -msgstr "criar um agora" - #: rhodecode/templates/admin/users/users.html:5 msgid "Users administration" msgstr "Administração de usuários" #: rhodecode/templates/admin/users/users.html:9 -#: rhodecode/templates/base/base.html:235 msgid "users" msgstr "usuários" -#: rhodecode/templates/admin/users/users.html:23 -msgid "ADD NEW USER" -msgstr "ADICIONAR NOVO USUÁRIO" - -#: rhodecode/templates/admin/users/users.html:77 -msgid "username" -msgstr "nome de usuário" - #: rhodecode/templates/admin/users/users.html:80 #, fuzzy -msgid "firstname" +msgid "Firstname" msgstr "Primeiro Nome" #: rhodecode/templates/admin/users/users.html:81 -msgid "lastname" +#, fuzzy +msgid "Lastname" msgstr "sobrenome" #: rhodecode/templates/admin/users/users.html:82 -msgid "last login" +#, fuzzy +msgid "Last login" msgstr "último login" -#: rhodecode/templates/admin/users/users.html:84 -#: rhodecode/templates/admin/users_groups/users_groups.html:34 -msgid "active" -msgstr "ativo" - -#: 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" +#, fuzzy +msgid "Add user group" msgstr "Adicionar grupo de usuários" #: rhodecode/templates/admin/users_groups/users_group_add.html:10 -#: rhodecode/templates/admin/users_groups/users_groups.html:9 -msgid "Users groups" -msgstr "Grupos de usuários" +#: rhodecode/templates/admin/users_groups/users_groups.html:11 +#: rhodecode/templates/base/base.html:72 +#, fuzzy +msgid "User groups" +msgstr "grupos de usuários" #: rhodecode/templates/admin/users_groups/users_group_add.html:12 -msgid "add new users group" +#: rhodecode/templates/admin/users_groups/users_groups.html:25 +#, fuzzy +msgid "Add new user group" msgstr "Adicionar novo grupo de usuários" #: rhodecode/templates/admin/users_groups/users_group_edit.html:5 -msgid "Edit users group" +#, fuzzy +msgid "Edit user group" msgstr "Editar grupo de usuários" #: rhodecode/templates/admin/users_groups/users_group_edit.html:11 -msgid "UsersGroups" -msgstr "Grupos de Usuários" +#, fuzzy +msgid "UserGroups" +msgstr "grupos de usuários" #: rhodecode/templates/admin/users_groups/users_group_edit.html:50 +#: rhodecode/templates/admin/users_groups/users_groups.html:35 msgid "Members" msgstr "Membros" #: rhodecode/templates/admin/users_groups/users_group_edit.html:58 -msgid "Choosen group members" +#, fuzzy +msgid "Chosen group members" msgstr "Membros escolhidos do grupo" #: rhodecode/templates/admin/users_groups/users_group_edit.html:61 @@ -2990,270 +3238,283 @@ msgstr "Membros disponíveis" msgid "Add all elements" msgstr "Adicionar todos os elementos" -#: rhodecode/templates/admin/users_groups/users_group_edit.html:146 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:150 msgid "Group members" msgstr "Membros do grupo" -#: rhodecode/templates/admin/users_groups/users_group_edit.html:163 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:167 #, 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" +#, fuzzy +msgid "User groups administration" msgstr "Administração de grupos de usuários" -#: rhodecode/templates/admin/users_groups/users_groups.html:23 -msgid "ADD NEW USER GROUP" -msgstr "ADICIONAR NOVO GRUPO DE USUÁRIOS" - -#: rhodecode/templates/admin/users_groups/users_groups.html:32 -msgid "group name" -msgstr "nome do grupo" - -#: rhodecode/templates/admin/users_groups/users_groups.html:33 -#: rhodecode/templates/base/root.html:46 -msgid "members" -msgstr "membros" - -#: rhodecode/templates/admin/users_groups/users_groups.html:45 -#, python-format -msgid "Confirm to delete this users group: %s" +#: rhodecode/templates/admin/users_groups/users_groups.html:47 +#, fuzzy, python-format +msgid "Confirm to delete this user group: %s" msgstr "Confirme para excluir este grupo de usuários: %s" -#: rhodecode/templates/base/base.html:41 +#: rhodecode/templates/base/base.html:42 msgid "Submit a bug" msgstr "Encaminhe um bug" -#: rhodecode/templates/base/base.html:77 -msgid "Login to your account" -msgstr "Entrar com sua conta" - -#: rhodecode/templates/base/base.html:100 -msgid "Forgot password ?" -msgstr "Esqueceu a senha ?" - -#: rhodecode/templates/base/base.html:107 -msgid "Log In" -msgstr "Entrar" +#: rhodecode/templates/base/base.html:108 +#: rhodecode/templates/data_table/_dt_elements.html:9 +#: rhodecode/templates/data_table/_dt_elements.html:11 +#: rhodecode/templates/data_table/_dt_elements.html:13 +#: rhodecode/templates/pullrequests/pullrequest_show.html:81 +#: rhodecode/templates/summary/summary.html:8 +msgid "Summary" +msgstr "Sumário" + +#: rhodecode/templates/base/base.html:109 +#: rhodecode/templates/changelog/changelog.html:11 +#: rhodecode/templates/data_table/_dt_elements.html:17 +#: rhodecode/templates/data_table/_dt_elements.html:19 +#: rhodecode/templates/data_table/_dt_elements.html:21 +msgid "Changelog" +msgstr "Registro de alterações" + +#: rhodecode/templates/base/base.html:110 +#: rhodecode/templates/data_table/_dt_elements.html:25 +#: rhodecode/templates/data_table/_dt_elements.html:27 +#: rhodecode/templates/data_table/_dt_elements.html:29 +#: rhodecode/templates/files/files.html:12 +msgid "Files" +msgstr "Arquivos" + +#: rhodecode/templates/base/base.html:112 +#, fuzzy +msgid "Switch To" +msgstr "Trocar para" + +#: rhodecode/templates/base/base.html:114 +#: rhodecode/templates/base/base.html:267 +msgid "loading..." +msgstr "carregando..." #: rhodecode/templates/base/base.html:118 -msgid "Inbox" -msgstr "Caixa de Entrada" - -#: 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/public_journal.html:4 -msgid "Journal" -msgstr "Diário" - -#: rhodecode/templates/base/base.html:125 -msgid "Log Out" -msgstr "Sair" - -#: rhodecode/templates/base/base.html:144 -msgid "Switch repository" -msgstr "Trocar repositório" - -#: rhodecode/templates/base/base.html:146 -msgid "Products" -msgstr "Produtos" - -#: rhodecode/templates/base/base.html:152 -#: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47 -msgid "loading..." -msgstr "carregando..." - -#: 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 "Sumário" - -#: 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 "Registro de alterações" - -#: rhodecode/templates/base/base.html:175 -#: rhodecode/templates/base/base.html:177 -#: rhodecode/templates/base/base.html:179 -msgid "Switch to" -msgstr "Trocar para" - -#: 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 "Arquivos" - -#: rhodecode/templates/base/base.html:195 -#: rhodecode/templates/base/base.html:199 msgid "Options" msgstr "Opções" -#: rhodecode/templates/base/base.html:204 -#: rhodecode/templates/base/base.html:206 -#, 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:212 rhodecode/templates/base/root.html:50 -#: rhodecode/templates/changelog/changelog.html:43 -msgid "Open new pull request" -msgstr "" - -#: rhodecode/templates/base/base.html:215 +#: rhodecode/templates/base/base.html:124 #: 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: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:236 -msgid "users groups" -msgstr "grupos de usuários" - -#: rhodecode/templates/base/base.html:237 -msgid "permissions" -msgstr "permissões" - -#: 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:259 -#: rhodecode/templates/base/base.html:261 -msgid "Forks" -msgstr "Bifurcações" - -#: rhodecode/templates/base/base.html:340 -#: rhodecode/templates/base/base.html:342 -#: rhodecode/templates/base/base.html:344 -#: rhodecode/templates/search/search.html:52 +#: rhodecode/templates/base/base.html:126 +msgid "Lightweight changelog" +msgstr "" + +#: rhodecode/templates/base/base.html:127 +#: rhodecode/templates/base/base.html:287 +#: rhodecode/templates/search/search.html:14 +#: rhodecode/templates/search/search.html:54 msgid "Search" msgstr "Pesquisar" -#: rhodecode/templates/base/root.html:42 -msgid "add another comment" -msgstr "adicionar outro comentário" +#: rhodecode/templates/base/base.html:133 +#, fuzzy +msgid "Lock" +msgstr "destravar" + +#: rhodecode/templates/base/base.html:141 +#, fuzzy +msgid "Follow" +msgstr "seguidores" + +#: rhodecode/templates/base/base.html:142 +#, fuzzy +msgid "Unfollow" +msgstr "seguidores" + +#: rhodecode/templates/base/base.html:145 +#: rhodecode/templates/data_table/_dt_elements.html:33 +#: rhodecode/templates/data_table/_dt_elements.html:35 +#: rhodecode/templates/data_table/_dt_elements.html:37 +#: rhodecode/templates/data_table/_dt_elements.html:74 +#: rhodecode/templates/forks/fork.html:9 +msgid "Fork" +msgstr "Bifurcação" + +#: rhodecode/templates/base/base.html:147 +#, fuzzy +msgid "Create Pull Request" +msgstr "Criar novo arquivo" + +#: rhodecode/templates/base/base.html:153 +#, fuzzy +msgid "Show Pull Requests" +msgstr "comentado no commit" + +#: rhodecode/templates/base/base.html:153 +#, fuzzy +msgid "Pull Requests" +msgstr "comentado no commit" + +#: rhodecode/templates/base/base.html:190 +#, fuzzy +msgid "Not logged in" +msgstr "último login" + +#: rhodecode/templates/base/base.html:197 +msgid "Login to your account" +msgstr "Entrar com sua conta" + +#: rhodecode/templates/base/base.html:220 +msgid "Forgot password ?" +msgstr "Esqueceu a senha ?" + +#: rhodecode/templates/base/base.html:243 +msgid "Log Out" +msgstr "Sair" + +#: rhodecode/templates/base/base.html:262 +msgid "Switch repository" +msgstr "Trocar repositório" + +#: rhodecode/templates/base/base.html:274 +msgid "Show recent activity" +msgstr "" + +#: rhodecode/templates/base/base.html:275 +#: rhodecode/templates/journal/journal.html:4 +msgid "Journal" +msgstr "Diário" + +#: rhodecode/templates/base/base.html:286 +#, fuzzy +msgid "Search in repositories" +msgstr "em todos os repositórios" + +#: rhodecode/templates/base/perms_summary.html:8 +#, fuzzy +msgid "No permissions defined yet" +msgstr "Copiar permissões" + +#: rhodecode/templates/base/perms_summary.html:15 +msgid "Permission" +msgstr "Permissão" + +#: rhodecode/templates/base/perms_summary.html:16 +#, fuzzy +msgid "Edit Permission" +msgstr "Permissão de repositório" #: rhodecode/templates/base/root.html:43 -#: rhodecode/templates/journal/journal.html:83 -#: rhodecode/templates/summary/summary.html:57 -msgid "Stop following this repository" -msgstr "Parar de seguir este repositório" +#, fuzzy +msgid "Add another comment" +msgstr "adicionar outro comentário" #: rhodecode/templates/base/root.html:44 -#: rhodecode/templates/summary/summary.html:61 +#: rhodecode/templates/data_table/_dt_elements.html:140 +msgid "Stop following this repository" +msgstr "Parar de seguir este repositório" + +#: rhodecode/templates/base/root.html:45 msgid "Start following this repository" msgstr "Passar a seguir este repositório" -#: rhodecode/templates/base/root.html:45 +#: rhodecode/templates/base/root.html:46 msgid "Group" msgstr "Grupo" +#: rhodecode/templates/base/root.html:47 +msgid "members" +msgstr "membros" + #: rhodecode/templates/base/root.html:48 -msgid "search truncated" -msgstr "pesquisa truncada" +#: rhodecode/templates/pullrequests/pullrequest.html:181 +#, fuzzy +msgid "Loading ..." +msgstr "carregando..." #: rhodecode/templates/base/root.html:49 -msgid "no matching files" +#, fuzzy +msgid "Search truncated" +msgstr "pesquisa truncada" + +#: rhodecode/templates/base/root.html:50 +#, fuzzy +msgid "No matching files" msgstr "nenhum arquivo corresponde" #: rhodecode/templates/base/root.html:51 -msgid "Open new pull request for selected changesets" +#: rhodecode/templates/changelog/changelog.html:36 +msgid "Open new pull request" msgstr "" #: rhodecode/templates/base/root.html:52 -msgid "Show selected changes __S -> __E" -msgstr "Mostrar alterações selecionadas __S -> __E" +msgid "Open new pull request for selected changesets" +msgstr "" #: rhodecode/templates/base/root.html:53 +#, fuzzy +msgid "Show selected changesets __S -> __E" +msgstr "Mostrar alterações selecionadas __S -> __E" + +#: rhodecode/templates/base/root.html:54 +#, fuzzy +msgid "Show selected changeset __S" +msgstr "Mostrar alterações selecionadas __S -> __E" + +#: rhodecode/templates/base/root.html:55 msgid "Selection link" msgstr "Link da seleção" +#: rhodecode/templates/base/root.html:56 +#: rhodecode/templates/changeset/diff_block.html:8 +#, fuzzy +msgid "Collapse diff" +msgstr "Diff do arquivo" + +#: rhodecode/templates/base/root.html:57 +#, fuzzy +msgid "Expand diff" +msgstr "diff bruto" + #: rhodecode/templates/bookmarks/bookmarks.html:5 #, fuzzy, python-format msgid "%s Bookmarks" msgstr "marcadores" -#: rhodecode/templates/bookmarks/bookmarks.html:39 +#: rhodecode/templates/bookmarks/bookmarks.html:37 #: rhodecode/templates/bookmarks/bookmarks_data.html:8 -#: rhodecode/templates/branches/branches.html:53 +#: rhodecode/templates/branches/branches.html:50 #: rhodecode/templates/branches/branches_data.html:8 -#: rhodecode/templates/tags/tags.html:54 +#: rhodecode/templates/shortlog/shortlog_data.html:8 +#: rhodecode/templates/tags/tags.html:51 #: rhodecode/templates/tags/tags_data.html:8 msgid "Author" msgstr "Autor" +#: rhodecode/templates/bookmarks/bookmarks.html:38 +#: rhodecode/templates/bookmarks/bookmarks_data.html:9 +#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches_data.html:9 +#: rhodecode/templates/shortlog/shortlog_data.html:5 +#: rhodecode/templates/tags/tags.html:52 +#: rhodecode/templates/tags/tags_data.html:9 +msgid "Revision" +msgstr "Revisão" + #: rhodecode/templates/branches/branches.html:5 #, fuzzy, python-format msgid "%s Branches" msgstr "ramos" -#: rhodecode/templates/branches/branches.html:29 +#: rhodecode/templates/branches/branches.html:26 #, fuzzy msgid "Compare branches" msgstr "ramos" -#: rhodecode/templates/branches/branches.html:56 +#: rhodecode/templates/branches/branches.html:53 #: 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.html:54 #: rhodecode/templates/tags/tags_data.html:10 #, fuzzy msgid "Compare" @@ -3264,118 +3525,85 @@ msgstr "comparar exibir" msgid "%s Changelog" msgstr "Registro de alterações" -#: rhodecode/templates/changelog/changelog.html:15 +#: rhodecode/templates/changelog/changelog.html:11 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" msgstr[0] "mostrando %d de %d revisão" msgstr[1] "mostrando %d de %d revisões" -#: rhodecode/templates/changelog/changelog.html:37 +#: rhodecode/templates/changelog/changelog.html:30 #, fuzzy msgid "Clear selection" msgstr "Configurações de busca" -#: rhodecode/templates/changelog/changelog.html:40 +#: rhodecode/templates/changelog/changelog.html:33 #: rhodecode/templates/forks/forks_data.html:19 -#, python-format -msgid "compare fork with %s" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:40 +#, fuzzy, python-format +msgid "Compare fork with %s" +msgstr "comparar exibir" + +#: rhodecode/templates/changelog/changelog.html:33 #, fuzzy msgid "Compare fork with parent" msgstr "comparar exibir" -#: rhodecode/templates/changelog/changelog.html:49 -msgid "Show" -msgstr "Mostrar" - -#: rhodecode/templates/changelog/changelog.html:74 -#: rhodecode/templates/summary/summary.html:375 -msgid "show more" +#: rhodecode/templates/changelog/changelog.html:76 +#: rhodecode/templates/summary/summary.html:404 +#, fuzzy +msgid "Show more" msgstr "mostrar mais" -#: 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:91 -#: rhodecode/templates/changeset/changeset.html:65 -#: 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:94 -#: rhodecode/templates/shortlog/shortlog_data.html:20 -msgid "Click to open associated pull request" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:104 -msgid "Parent" -msgstr "Progenitor" - -#: rhodecode/templates/changelog/changelog.html:110 -#: rhodecode/templates/changeset/changeset.html:42 -msgid "No parents" -msgstr "Sem progenitores" - -#: rhodecode/templates/changelog/changelog.html:115 +#: rhodecode/templates/changelog/changelog.html:89 +#: rhodecode/templates/changeset/changeset_range.html:86 +#, fuzzy, python-format +msgid "Bookmark %s" +msgstr "marcadores" + +#: rhodecode/templates/changelog/changelog.html:95 +#: rhodecode/templates/changeset/changeset.html:111 +#: rhodecode/templates/changeset/changeset_range.html:92 +#, fuzzy, python-format +msgid "Tag %s" +msgstr "etiquetas" + +#: rhodecode/templates/changelog/changelog.html:100 #: rhodecode/templates/changeset/changeset.html:106 -#: rhodecode/templates/changeset/changeset_range.html:79 -msgid "merge" -msgstr "mesclar" - -#: rhodecode/templates/changelog/changelog.html:118 -#: rhodecode/templates/changeset/changeset.html:109 -#: 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 "ramo" - -#: rhodecode/templates/changelog/changelog.html:124 -#: rhodecode/templates/changeset/changeset_range.html:88 -msgid "bookmark" -msgstr "marcador" - -#: rhodecode/templates/changelog/changelog.html:130 -#: rhodecode/templates/changeset/changeset.html:114 -#: rhodecode/templates/changeset/changeset_range.html:94 -msgid "tag" -msgstr "etiqueta" - -#: rhodecode/templates/changelog/changelog.html:301 +#: rhodecode/templates/changeset/changeset_range.html:80 +#, fuzzy, python-format +msgid "Branch %s" +msgstr "ramos" + +#: rhodecode/templates/changelog/changelog.html:258 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:94 -msgid "removed" +#: rhodecode/templates/changeset/changeset.html:91 +#, fuzzy +msgid "Removed" msgstr "removidos" #: rhodecode/templates/changelog/changelog_details.html:5 -#: rhodecode/templates/changeset/changeset.html:95 -msgid "changed" +#: rhodecode/templates/changeset/changeset.html:92 +#, fuzzy +msgid "Changed" msgstr "alterados" #: rhodecode/templates/changelog/changelog_details.html:6 -#: rhodecode/templates/changeset/changeset.html:96 -msgid "added" +#: rhodecode/templates/changeset/changeset.html:93 +#, fuzzy +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:98 -#: rhodecode/templates/changeset/changeset.html:99 -#: rhodecode/templates/changeset/changeset.html:100 -#, python-format -msgid "affected %s files" +#: rhodecode/templates/changeset/changeset.html:95 +#: rhodecode/templates/changeset/changeset.html:96 +#: rhodecode/templates/changeset/changeset.html:97 +#, fuzzy, python-format +msgid "Affected %s files" msgstr "%s arquivos afetados" #: rhodecode/templates/changeset/changeset.html:6 @@ -3383,116 +3611,153 @@ msgstr "%s arquivos afetados" msgid "%s Changeset" msgstr "Conjunto de Mudanças" -#: rhodecode/templates/changeset/changeset.html:14 -msgid "Changeset" -msgstr "Conjunto de Mudanças" - -#: rhodecode/templates/changeset/changeset.html:52 +#: rhodecode/templates/changeset/changeset.html:39 +msgid "No parents" +msgstr "Sem progenitores" + +#: rhodecode/templates/changeset/changeset.html:49 msgid "No children" msgstr "" -#: rhodecode/templates/changeset/changeset.html:70 -#: rhodecode/templates/changeset/diff_block.html:20 -msgid "raw diff" -msgstr "diff bruto" - -#: rhodecode/templates/changeset/changeset.html:71 -#, fuzzy -msgid "patch diff" +#: rhodecode/templates/changeset/changeset.html:62 +#: rhodecode/templates/changeset/changeset_file_comment.html:20 +#: rhodecode/templates/changeset/changeset_range.html:44 +#, fuzzy +msgid "Changeset status" +msgstr "Conjuntos de mudanças" + +#: rhodecode/templates/changeset/changeset.html:67 +#: rhodecode/templates/changeset/diff_block.html:23 +#, fuzzy +msgid "Raw diff" msgstr "diff bruto" -#: rhodecode/templates/changeset/changeset.html:72 -#: rhodecode/templates/changeset/diff_block.html:21 -msgid "download diff" +#: rhodecode/templates/changeset/changeset.html:68 +#, fuzzy +msgid "Patch diff" +msgstr "diff bruto" + +#: rhodecode/templates/changeset/changeset.html:69 +#: rhodecode/templates/changeset/diff_block.html:24 +#, fuzzy +msgid "Download diff" msgstr "descarregar diff" -#: rhodecode/templates/changeset/changeset.html:76 -#: rhodecode/templates/changeset/changeset_file_comment.html:82 +#: rhodecode/templates/changeset/changeset.html:73 +#: rhodecode/templates/changeset/changeset_file_comment.html:97 #, python-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d comentário" msgstr[1] "%d comentários" -#: rhodecode/templates/changeset/changeset.html:76 -#: rhodecode/templates/changeset/changeset_file_comment.html:82 +#: rhodecode/templates/changeset/changeset.html:73 +#: rhodecode/templates/changeset/changeset_file_comment.html:97 #, python-format msgid "(%d inline)" msgid_plural "(%d inline)" msgstr[0] "(%d em linha)" msgstr[1] "(%d em linha)" -#: rhodecode/templates/changeset/changeset.html:122 -#: rhodecode/templates/compare/compare_diff.html:44 -#: rhodecode/templates/pullrequests/pullrequest_show.html:76 +#: rhodecode/templates/changeset/changeset.html:103 +#: rhodecode/templates/changeset/changeset_range.html:77 +msgid "merge" +msgstr "mesclar" + +#: rhodecode/templates/changeset/changeset.html:119 +#: rhodecode/templates/compare/compare_diff.html:40 +#: rhodecode/templates/pullrequests/pullrequest_show.html:113 #, fuzzy, python-format msgid "%s file changed" msgid_plural "%s files changed" msgstr[0] "arquivo alterado" msgstr[1] "" -#: rhodecode/templates/changeset/changeset.html:124 -#: rhodecode/templates/compare/compare_diff.html:46 -#: rhodecode/templates/pullrequests/pullrequest_show.html:78 +#: rhodecode/templates/changeset/changeset.html:121 +#: rhodecode/templates/compare/compare_diff.html:42 +#: rhodecode/templates/pullrequests/pullrequest_show.html:115 #, 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 +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 +msgid "Showing a huge diff might take some time and resources" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 +#, fuzzy +msgid "Show full diff" +msgstr "Carregando lista de arquivos..." + +#: rhodecode/templates/changeset/changeset_file_comment.html:30 +#, fuzzy, python-format +msgid "Status change on pull request #%s" +msgstr "Criar novo arquivo" + +#: rhodecode/templates/changeset/changeset_file_comment.html:32 +#, fuzzy, python-format +msgid "Comment on pull request #%s" +msgstr "repositório [criado]" + +#: rhodecode/templates/changeset/changeset_file_comment.html:57 msgid "Submitting..." msgstr "Enviando..." -#: rhodecode/templates/changeset/changeset_file_comment.html:45 +#: rhodecode/templates/changeset/changeset_file_comment.html:60 msgid "Commenting on line {1}." msgstr "Comentando a linha {1}." -#: rhodecode/templates/changeset/changeset_file_comment.html:46 -#: rhodecode/templates/changeset/changeset_file_comment.html:121 +#: rhodecode/templates/changeset/changeset_file_comment.html:61 +#: rhodecode/templates/changeset/changeset_file_comment.html:139 #, python-format msgid "Comments parsed using %s syntax with %s support." msgstr "Comentários interpretados usando a sintaxe %s com suporte a %s." -#: rhodecode/templates/changeset/changeset_file_comment.html:48 -#: rhodecode/templates/changeset/changeset_file_comment.html:123 +#: rhodecode/templates/changeset/changeset_file_comment.html:63 +#: rhodecode/templates/changeset/changeset_file_comment.html:141 msgid "Use @username inside this text to send notification to this RhodeCode user" msgstr "" "Use @nomedeusuário dentro desse texto para enviar notificação a este " "usuário do RhodeCode" -#: rhodecode/templates/changeset/changeset_file_comment.html:59 -#: rhodecode/templates/changeset/changeset_file_comment.html:143 +#: rhodecode/templates/changeset/changeset_file_comment.html:74 +#: rhodecode/templates/changeset/changeset_file_comment.html:161 msgid "Comment" msgstr "Comentário" -#: rhodecode/templates/changeset/changeset_file_comment.html:60 -#: rhodecode/templates/changeset/changeset_file_comment.html:71 -msgid "Hide" -msgstr "Ocultar" - -#: rhodecode/templates/changeset/changeset_file_comment.html:67 +#: rhodecode/templates/changeset/changeset_file_comment.html:75 +#, fuzzy +msgid "Cancel" +msgstr "alterados" + +#: rhodecode/templates/changeset/changeset_file_comment.html:82 msgid "You need to be logged in to comment." msgstr "Você precisa estar logado para comentar." -#: rhodecode/templates/changeset/changeset_file_comment.html:67 +#: rhodecode/templates/changeset/changeset_file_comment.html:82 msgid "Login now" msgstr "Entrar agora" -#: rhodecode/templates/changeset/changeset_file_comment.html:118 -msgid "Leave a comment" -msgstr "Deixar um comentário" - -#: rhodecode/templates/changeset/changeset_file_comment.html:125 -msgid "Check this to change current status of code-review for this changeset" -msgstr "" - -#: rhodecode/templates/changeset/changeset_file_comment.html:125 -#, fuzzy -msgid "change status" +#: rhodecode/templates/changeset/changeset_file_comment.html:86 +msgid "Hide" +msgstr "Ocultar" + +#: rhodecode/templates/changeset/changeset_file_comment.html:143 +#, fuzzy +msgid "Change status" msgstr "Conjuntos de mudanças" -#: rhodecode/templates/changeset/changeset_file_comment.html:145 +#: rhodecode/templates/changeset/changeset_file_comment.html:163 msgid "Comment and close" msgstr "" @@ -3501,122 +3766,147 @@ msgstr "" msgid "%s Changesets" msgstr "Conjuntos de mudanças" -#: rhodecode/templates/changeset/changeset_range.html:29 -#: rhodecode/templates/compare/compare_diff.html:29 -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/changeset/changeset_range.html:52 msgid "Files affected" msgstr "Arquivos afetados" -#: rhodecode/templates/changeset/diff_block.html:19 -msgid "show full diff for this file" +#: rhodecode/templates/changeset/diff_block.html:22 +msgid "Show full diff for this file" msgstr "" -#: rhodecode/templates/changeset/diff_block.html:27 -msgid "show inline comments" +#: rhodecode/templates/changeset/diff_block.html:30 +#, fuzzy +msgid "Show inline comments" msgstr "mostrar comentários em linha" -#: rhodecode/templates/compare/compare_cs.html:5 +#: rhodecode/templates/changeset/diff_block.html:55 +msgid "Show file at latest version in this repo" +msgstr "" + +#: rhodecode/templates/changeset/diff_block.html:56 +msgid "Show file at initial version in this repo" +msgstr "" + +#: rhodecode/templates/compare/compare_cs.html:4 #, fuzzy msgid "No changesets" msgstr "Nenhum conjunto de alterações ainda." -#: rhodecode/templates/compare/compare_diff.html:37 -#: rhodecode/templates/pullrequests/pullrequest_show.html:69 +#: rhodecode/templates/compare/compare_cs.html:32 +#, fuzzy +msgid "Ancestor" +msgstr "ramos" + +#: rhodecode/templates/compare/compare_diff.html:5 +#, fuzzy, python-format +msgid "%s Compare" +msgstr "comparar exibir" + +#: rhodecode/templates/compare/compare_diff.html:9 +#, fuzzy +msgid "Compare revisions" +msgstr "revisão anterior" + +#: rhodecode/templates/compare/compare_diff.html:33 +#: rhodecode/templates/pullrequests/pullrequest_show.html:106 #, 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 +#: rhodecode/templates/compare/compare_diff.html:48 +#: rhodecode/templates/pullrequests/pullrequest_show.html:121 #, fuzzy msgid "No files" msgstr "arquivos" -#: 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 "Bifurcação" - -#: rhodecode/templates/data_table/_dt_elements.html:60 -#: rhodecode/templates/journal/journal.html:89 -#: rhodecode/templates/summary/summary.html:77 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +msgid "confirm to show potentially huge diff" +msgstr "" + +#: rhodecode/templates/data_table/_dt_elements.html:54 +#: rhodecode/templates/summary/summary.html:69 msgid "Mercurial repository" msgstr "Repositório Mercurial" -#: rhodecode/templates/data_table/_dt_elements.html:62 -#: rhodecode/templates/journal/journal.html:91 -#: rhodecode/templates/summary/summary.html:80 +#: rhodecode/templates/data_table/_dt_elements.html:56 +#: rhodecode/templates/summary/summary.html:72 msgid "Git repository" msgstr "Repositório Git" -#: rhodecode/templates/data_table/_dt_elements.html:69 -#: rhodecode/templates/journal/journal.html:97 -#: 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:96 -#: rhodecode/templates/summary/summary.html:97 -msgid "Fork of" -msgstr "Bifurcação de" - -#: rhodecode/templates/data_table/_dt_elements.html:94 +#: rhodecode/templates/data_table/_dt_elements.html:74 +#, fuzzy, python-format +msgid "Fork of %s" +msgstr "nome da bifurcação" + +#: rhodecode/templates/data_table/_dt_elements.html:88 msgid "No changesets yet" msgstr "Nenhum conjunto de alterações ainda." -#: rhodecode/templates/data_table/_dt_elements.html:101 -#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:95 +#: rhodecode/templates/data_table/_dt_elements.html:97 #, 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 +#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:105 #, 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 repository: %s" +msgstr "Confirma excluir esse repositório: %s" + +#: rhodecode/templates/data_table/_dt_elements.html:131 +#, 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$" +#: rhodecode/templates/email_templates/changeset_comment.html:9 +#: rhodecode/templates/email_templates/pull_request_comment.html:15 +#, fuzzy +msgid "New status" msgstr "Conjuntos de mudanças" +#: rhodecode/templates/email_templates/changeset_comment.html:11 +#: rhodecode/templates/email_templates/pull_request_comment.html:9 +msgid "View this comment here" +msgstr "" + +#: rhodecode/templates/email_templates/changeset_comment.html:14 +#, fuzzy +msgid "Repo" +msgstr "Meus repositórios" + +#: rhodecode/templates/email_templates/changeset_comment.html:16 +msgid "desc" +msgstr "" + #: rhodecode/templates/email_templates/main.html:8 #, 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" +#, python-format +msgid "Hello %s" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:5 +msgid "We received a request to create a new password for your account." 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." +#: rhodecode/templates/email_templates/password_reset.html:11 +msgid "If you did not request new password please ignore this email." msgstr "" #: rhodecode/templates/email_templates/pull_request.html:4 @@ -3628,37 +3918,32 @@ msgstr "" #: rhodecode/templates/email_templates/pull_request.html:5 #, fuzzy +msgid "View this pull request here" +msgstr "Confirma excluir este repositório" + +#: rhodecode/templates/email_templates/pull_request.html:6 +#, fuzzy msgid "title" msgstr "escrever" -#: rhodecode/templates/email_templates/pull_request.html:6 -#: rhodecode/templates/pullrequests/pullrequest.html:115 +#: rhodecode/templates/email_templates/pull_request.html:7 #, fuzzy msgid "description" msgstr "Descrição" -#: rhodecode/templates/email_templates/pull_request.html:11 +#: rhodecode/templates/email_templates/pull_request.html:12 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 +#: rhodecode/templates/email_templates/pull_request_comment.html:3 #, fuzzy, python-format -msgid "User %s commented on pull request #%s for repository %s" +msgid "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/pull_request_comment.html:13 +#, fuzzy +msgid "Closing pull request with status" +msgstr "repositório [criado]" #: rhodecode/templates/email_templates/registration.html:4 #, fuzzy @@ -3669,109 +3954,115 @@ msgstr "Você se registrou com sucesso no rhodecode" msgid "View this user here" msgstr "" -#: rhodecode/templates/errors/error_document.html:46 +#: rhodecode/templates/errors/error_document.html:55 #, python-format msgid "You will be redirected to %s in %s seconds" msgstr "Você será redirecionado para %s em %s segundos" #: rhodecode/templates/files/file_diff.html:4 #, fuzzy, python-format -msgid "%s File diff" +msgid "%s File Diff" msgstr "Diff do arquivo" -#: rhodecode/templates/files/file_diff.html:12 +#: rhodecode/templates/files/file_diff.html:8 msgid "File diff" msgstr "Diff do arquivo" #: rhodecode/templates/files/files.html:4 -#: rhodecode/templates/files/files.html:74 +#: rhodecode/templates/files/files.html:76 #, fuzzy, python-format -msgid "%s files" +msgid "%s Files" msgstr "arquivos" -#: rhodecode/templates/files/files.html:12 -#: rhodecode/templates/summary/summary.html:351 -msgid "files" -msgstr "arquivos" +#: rhodecode/templates/files/files.html:30 +#: rhodecode/templates/files/files_add.html:31 +#: rhodecode/templates/files/files_edit.html:31 +#: rhodecode/templates/shortlog/shortlog_data.html:9 +#, fuzzy +msgid "Branch" +msgstr "ramo" #: rhodecode/templates/files/files_add.html:4 -#: rhodecode/templates/files/files_edit.html:4 #, fuzzy, python-format -msgid "%s Edit file" -msgstr "editar arquivo" +msgid "%s Files Add" +msgstr "arquivos" #: rhodecode/templates/files/files_add.html:19 -msgid "add file" +#, fuzzy +msgid "Add file" msgstr "adicionar arquivo" -#: rhodecode/templates/files/files_add.html:40 +#: rhodecode/templates/files/files_add.html:38 +#: rhodecode/templates/files/files_browser.html:31 +#: rhodecode/templates/shortlog/shortlog_data.html:78 msgid "Add new file" msgstr "Adicionar novo arquivo" -#: rhodecode/templates/files/files_add.html:45 +#: rhodecode/templates/files/files_add.html:43 msgid "File Name" msgstr "Nome de Arquivo" -#: rhodecode/templates/files/files_add.html:49 -#: rhodecode/templates/files/files_add.html:58 +#: rhodecode/templates/files/files_add.html:47 +#: rhodecode/templates/files/files_add.html:56 msgid "or" msgstr "ou" -#: rhodecode/templates/files/files_add.html:49 -#: rhodecode/templates/files/files_add.html:54 +#: rhodecode/templates/files/files_add.html:47 +#: rhodecode/templates/files/files_add.html:52 msgid "Upload file" msgstr "Enviar arquivo" -#: rhodecode/templates/files/files_add.html:58 +#: rhodecode/templates/files/files_add.html:56 msgid "Create new file" msgstr "Criar novo arquivo" -#: rhodecode/templates/files/files_add.html:63 -#: rhodecode/templates/files/files_edit.html:39 +#: rhodecode/templates/files/files_add.html:61 +#: rhodecode/templates/files/files_edit.html:37 #: rhodecode/templates/files/files_ypjax.html:3 msgid "Location" msgstr "Local" -#: rhodecode/templates/files/files_add.html:67 +#: rhodecode/templates/files/files_add.html:65 msgid "use / to separate directories" msgstr "use / para separar diretórios" -#: rhodecode/templates/files/files_add.html:77 -#: rhodecode/templates/files/files_edit.html:63 +#: rhodecode/templates/files/files_add.html:75 +#: rhodecode/templates/files/files_edit.html:61 #: rhodecode/templates/shortlog/shortlog_data.html:6 -msgid "commit message" +#, fuzzy +msgid "Commit message" msgstr "mensagem de commit" -#: rhodecode/templates/files/files_add.html:81 -#: rhodecode/templates/files/files_edit.html:67 +#: rhodecode/templates/files/files_add.html:79 +#: rhodecode/templates/files/files_edit.html:65 msgid "Commit changes" msgstr "Realizar commit das alterações" #: rhodecode/templates/files/files_browser.html:13 -msgid "view" +#, fuzzy +msgid "View" msgstr "ver" #: rhodecode/templates/files/files_browser.html:14 -msgid "previous revision" +#, fuzzy +msgid "Previous revision" msgstr "revisão anterior" #: rhodecode/templates/files/files_browser.html:16 -msgid "next revision" +#, fuzzy +msgid "Next revision" msgstr "próxima revisão" #: rhodecode/templates/files/files_browser.html:23 -msgid "follow current branch" +#, fuzzy +msgid "Follow current branch" msgstr "seguir ramo atual" #: rhodecode/templates/files/files_browser.html:27 -msgid "search file list" +#, fuzzy +msgid "Search file list" msgstr "pesquisar lista de arquivos" -#: rhodecode/templates/files/files_browser.html:31 -#: rhodecode/templates/shortlog/shortlog_data.html:78 -msgid "add new file" -msgstr "adicionar novo arquivo" - #: rhodecode/templates/files/files_browser.html:35 msgid "Loading file list..." msgstr "Carregando lista de arquivos..." @@ -3793,34 +4084,44 @@ msgid "Last modified" msgstr "Última alteração" #: rhodecode/templates/files/files_browser.html:52 -msgid "Last commiter" +msgid "Last committer" msgstr "Último commiter" +#: rhodecode/templates/files/files_edit.html:4 +#, fuzzy, python-format +msgid "%s Files Edit" +msgstr "arquivos" + #: rhodecode/templates/files/files_edit.html:19 -msgid "edit file" +#, fuzzy +msgid "Edit file" msgstr "editar arquivo" +#: rhodecode/templates/files/files_edit.html:47 +#: rhodecode/templates/files/files_source.html:23 +#, fuzzy +msgid "Show annotation" +msgstr "mostrar anotação" + +#: rhodecode/templates/files/files_edit.html:48 +#: rhodecode/templates/files/files_source.html:25 +#: rhodecode/templates/files/files_source.html:55 +#, fuzzy +msgid "Show as raw" +msgstr "mostrar como bruto" + #: rhodecode/templates/files/files_edit.html:49 -#: 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: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:26 -msgid "download as raw" +#, fuzzy +msgid "Download as raw" msgstr "descarregar como bruto" -#: rhodecode/templates/files/files_edit.html:54 -msgid "source" +#: rhodecode/templates/files/files_edit.html:52 +#, fuzzy +msgid "Source" msgstr "fonte" -#: rhodecode/templates/files/files_edit.html:59 +#: rhodecode/templates/files/files_edit.html:57 msgid "Editing file" msgstr "Editando arquivo" @@ -3830,17 +4131,17 @@ msgstr "Histórico" #: rhodecode/templates/files/files_history_box.html:9 #, fuzzy -msgid "diff to revision" +msgid "Diff to revision" msgstr "próxima revisão" #: rhodecode/templates/files/files_history_box.html:10 #, fuzzy -msgid "show at revision" +msgid "Show at revision" msgstr "próxima revisão" #: rhodecode/templates/files/files_history_box.html:11 #, fuzzy -msgid "show full history" +msgid "Show full history" msgstr "Carregando lista de arquivos..." #: rhodecode/templates/files/files_history_box.html:16 @@ -3856,15 +4157,30 @@ msgid "Load file history" msgstr "Carregando lista de arquivos..." #: rhodecode/templates/files/files_source.html:21 -msgid "show source" +#, fuzzy +msgid "Show source" msgstr "mostrar fonte" -#: rhodecode/templates/files/files_source.html:44 +#: rhodecode/templates/files/files_source.html:29 +#, fuzzy, python-format +msgid "Edit on branch:%s" +msgstr "excluído o repositório %s" + +#: rhodecode/templates/files/files_source.html:31 +#, fuzzy +msgid "Edit on branch:?" +msgstr "excluído o repositório %s" + +#: rhodecode/templates/files/files_source.html:31 +msgid "Editing files allowed only when on branch head revision" +msgstr "" + +#: rhodecode/templates/files/files_source.html:46 #, python-format msgid "Binary file (%s)" msgstr "Arquivo binário (%s)" -#: rhodecode/templates/files/files_source.html:53 +#: rhodecode/templates/files/files_source.html:55 msgid "File is too big to display" msgstr "Arquivo é grande demais para exibir" @@ -3885,9 +4201,11 @@ msgstr "Nenhum arquivo no caminho especi msgid "%s Followers" msgstr "seguidores" -#: rhodecode/templates/followers/followers.html:13 -msgid "followers" -msgstr "seguidores" +#: rhodecode/templates/followers/followers.html:9 +#: rhodecode/templates/summary/summary.html:183 +#: rhodecode/templates/summary/summary.html:184 +msgid "Followers" +msgstr "Seguidores" #: rhodecode/templates/followers/followers_data.html:12 #, fuzzy @@ -3899,32 +4217,33 @@ msgstr "Passou a seguir" msgid "%s Fork" msgstr "bifurcação" -#: rhodecode/templates/forks/fork.html:31 +#: rhodecode/templates/forks/fork.html:28 msgid "Fork name" msgstr "Nome da bifurcação" -#: rhodecode/templates/forks/fork.html:68 +#: rhodecode/templates/forks/fork.html:65 msgid "Private" msgstr "Privado" -#: rhodecode/templates/forks/fork.html:77 +#: rhodecode/templates/forks/fork.html:74 msgid "Copy permissions" msgstr "Copiar permissões" -#: rhodecode/templates/forks/fork.html:81 +#: rhodecode/templates/forks/fork.html:78 msgid "Copy permissions from forked repository" msgstr "" -#: rhodecode/templates/forks/fork.html:86 +#: rhodecode/templates/forks/fork.html:84 msgid "Update after clone" msgstr "Atualizar após clonar" -#: rhodecode/templates/forks/fork.html:90 +#: rhodecode/templates/forks/fork.html:88 msgid "Checkout source after making a clone" msgstr "" -#: rhodecode/templates/forks/fork.html:94 -msgid "fork this repository" +#: rhodecode/templates/forks/fork.html:93 +#, fuzzy +msgid "Fork this repository" msgstr "bifurcar este repositório" #: rhodecode/templates/forks/forks.html:5 @@ -3932,12 +4251,15 @@ msgstr "bifurcar este repositório" msgid "%s Forks" msgstr "bifurcações" -#: rhodecode/templates/forks/forks.html:13 -msgid "forks" -msgstr "bifurcações" +#: rhodecode/templates/forks/forks.html:9 +#: rhodecode/templates/summary/summary.html:189 +#: rhodecode/templates/summary/summary.html:190 +msgid "Forks" +msgstr "Bifurcações" #: rhodecode/templates/forks/forks_data.html:17 -msgid "forked" +#, fuzzy +msgid "Forked" msgstr "bifurcado" #: rhodecode/templates/forks/forks_data.html:42 @@ -3955,45 +4277,27 @@ msgid "RSS journal feed" msgstr "diário público de %s - feed %s" #: rhodecode/templates/journal/journal.html:32 -#: rhodecode/templates/pullrequests/pullrequest.html:55 msgid "Refresh" msgstr "Atualizar" #: rhodecode/templates/journal/journal.html:35 #: rhodecode/templates/journal/public_journal.html:24 -#, fuzzy -msgid "RSS feed" -msgstr "%s - feed %s" - -#: rhodecode/templates/journal/journal.html:38 -#: rhodecode/templates/journal/public_journal.html:27 msgid "ATOM feed" msgstr "" -#: rhodecode/templates/journal/journal.html:49 +#: rhodecode/templates/journal/journal.html:51 msgid "Watched" msgstr "Seguindo" -#: rhodecode/templates/journal/journal.html:54 -msgid "ADD" -msgstr "ADICIONAR" - -#: rhodecode/templates/journal/journal.html:77 -msgid "following user" -msgstr "seguindo usuário" - -#: rhodecode/templates/journal/journal.html:77 -msgid "user" -msgstr "usuário" - -#: rhodecode/templates/journal/journal.html:110 -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:55 msgid "No entries yet" msgstr "Ainda não há entradas" +#: rhodecode/templates/journal/public_journal.html:4 +#: rhodecode/templates/journal/public_journal.html:21 +msgid "Public Journal" +msgstr "Diário Público" + #: rhodecode/templates/journal/public_journal.html:13 #, fuzzy msgid "ATOM public journal feed" @@ -4004,158 +4308,140 @@ msgstr "diário público de %s - feed %s" msgid "RSS public journal feed" msgstr "diário público de %s - feed %s" -#: rhodecode/templates/journal/public_journal.html:21 -msgid "Public Journal" -msgstr "Diário Público" - #: rhodecode/templates/pullrequests/pullrequest.html:4 -#: rhodecode/templates/pullrequests/pullrequest.html:12 +#: rhodecode/templates/pullrequests/pullrequest.html:8 msgid "New pull request" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:54 -msgid "refresh overview" -msgstr "" - -#: rhodecode/templates/pullrequests/pullrequest.html:66 +#: rhodecode/templates/pullrequests/pullrequest.html:52 #, fuzzy msgid "Detailed compare view" msgstr "comparar exibir" -#: rhodecode/templates/pullrequests/pullrequest.html:70 -#: rhodecode/templates/pullrequests/pullrequest_show.html:100 +#: rhodecode/templates/pullrequests/pullrequest.html:56 +#: rhodecode/templates/pullrequests/pullrequest_show.html:137 msgid "Pull request reviewers" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:79 -#: rhodecode/templates/pullrequests/pullrequest_show.html:112 +#: rhodecode/templates/pullrequests/pullrequest.html:65 +#: rhodecode/templates/pullrequests/pullrequest_show.html:149 #, fuzzy msgid "owner" msgstr "Dono" -#: rhodecode/templates/pullrequests/pullrequest.html:91 -#: rhodecode/templates/pullrequests/pullrequest_show.html:127 +#: rhodecode/templates/pullrequests/pullrequest.html:77 msgid "Add reviewer to this pull request." msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:97 +#: rhodecode/templates/pullrequests/pullrequest.html:83 #, fuzzy msgid "Create new pull request" msgstr "Criar novo arquivo" -#: rhodecode/templates/pullrequests/pullrequest.html:106 +#: rhodecode/templates/pullrequests/pullrequest.html:92 +#: rhodecode/templates/pullrequests/pullrequest_data.html:14 #: rhodecode/templates/pullrequests/pullrequest_show.html:25 -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:33 #, fuzzy msgid "Title" msgstr "escrever" -#: rhodecode/templates/pullrequests/pullrequest.html:123 +#: rhodecode/templates/pullrequests/pullrequest.html:109 msgid "Send pull request" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:23 -#, python-format -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" +#: rhodecode/templates/pullrequests/pullrequest_show.html:4 +#, fuzzy, python-format +msgid "%s Pull Request #%s" +msgstr "comentado no commit" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:35 +#, fuzzy +msgid "Review status" msgstr "Conjuntos de mudanças" -#: rhodecode/templates/pullrequests/pullrequest_show.html:36 +#: rhodecode/templates/pullrequests/pullrequest_show.html:40 msgid "Pull request status" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:44 +#: rhodecode/templates/pullrequests/pullrequest_show.html:53 msgid "Still not reviewed by" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:48 +#: rhodecode/templates/pullrequests/pullrequest_show.html:57 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" msgstr[0] "" msgstr[1] "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:50 -msgid "pull request was reviewed by all reviewers" +#: rhodecode/templates/pullrequests/pullrequest_show.html:59 +msgid "Pull request was reviewed by all reviewers" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:58 +#: rhodecode/templates/pullrequests/pullrequest_show.html:65 +#, fuzzy +msgid "Origin repository" +msgstr "Repositório Git" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:89 #, fuzzy msgid "Created on" msgstr "criar um agora" -#: rhodecode/templates/pullrequests/pullrequest_show.html:65 +#: rhodecode/templates/pullrequests/pullrequest_show.html:102 #, fuzzy msgid "Compare view" msgstr "comparar exibir" -#: rhodecode/templates/pullrequests/pullrequest_show.html:112 +#: rhodecode/templates/pullrequests/pullrequest_show.html:149 #, fuzzy msgid "reviewer" msgstr "" +#: rhodecode/templates/pullrequests/pullrequest_show.html:164 +#, fuzzy +msgid "Add or remove reviewer to this pull request." +msgstr "Confirma excluir este repositório" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:168 +#, fuzzy +msgid "Save changes" +msgstr "Sem alterações" + #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4 -#, fuzzy -msgid "all pull requests" -msgstr "Criar novo arquivo" - -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:12 -msgid "All pull requests" -msgstr "" - -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:27 -msgid "Closed" -msgstr "" +#, fuzzy, python-format +msgid "%s Pull Requests" +msgstr "comentado no commit" #: rhodecode/templates/search/search.html:6 -#, fuzzy, python-format -msgid "Search \"%s\" in repository: %s" +#, fuzzy +msgid "Search repository" msgstr "no repositório" #: rhodecode/templates/search/search.html:8 -#, fuzzy, python-format -msgid "Search \"%s\" in all repositories" -msgstr "em todos os repositórios" - -#: rhodecode/templates/search/search.html:12 -#: rhodecode/templates/search/search.html:32 -#, fuzzy, python-format -msgid "Search in repository: %s" -msgstr "no repositório" - -#: rhodecode/templates/search/search.html:14 -#: rhodecode/templates/search/search.html:34 +#: rhodecode/templates/search/search.html:16 #, fuzzy msgid "Search in all repositories" msgstr "em todos os repositórios" -#: rhodecode/templates/search/search.html:48 +#: rhodecode/templates/search/search.html:50 msgid "Search term" msgstr "Termo de pesquisa" -#: rhodecode/templates/search/search.html:60 +#: rhodecode/templates/search/search.html:62 msgid "Search in" msgstr "Pesquisando em" -#: rhodecode/templates/search/search.html:63 +#: rhodecode/templates/search/search.html:65 msgid "File contents" msgstr "Conteúdo dos arquivos" -#: rhodecode/templates/search/search.html:64 +#: rhodecode/templates/search/search.html:66 #, fuzzy msgid "Commit messages" msgstr "mensagem de commit" -#: rhodecode/templates/search/search.html:65 +#: rhodecode/templates/search/search.html:67 msgid "File names" msgstr "Nomes dos arquivos" @@ -4165,42 +4451,25 @@ msgstr "Nomes dos arquivos" msgid "Permission denied" msgstr "Permissão negada" -#: rhodecode/templates/settings/repo_settings.html:5 -#, fuzzy, python-format -msgid "%s Settings" -msgstr "configurações" - -#: rhodecode/templates/settings/repo_settings.html:102 -#, fuzzy -msgid "Delete repository" -msgstr "[excluir] repositório" - -#: rhodecode/templates/settings/repo_settings.html:109 -#, fuzzy -msgid "Remove repo" -msgstr "remover" - #: rhodecode/templates/shortlog/shortlog.html:5 #, fuzzy, python-format -msgid "%s Shortlog" -msgstr "log resumido" - +msgid "%s Lightweight Changelog" +msgstr "arquivo alterado" + +#: rhodecode/templates/shortlog/shortlog.html:11 #: 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" +msgid "Lightweight Changelog" +msgstr "" #: rhodecode/templates/shortlog/shortlog_data.html:7 -msgid "age" +#, fuzzy +msgid "Age" msgstr "idade" -#: rhodecode/templates/shortlog/shortlog_data.html:8 -msgid "author" -msgstr "autor" +#: rhodecode/templates/shortlog/shortlog_data.html:20 +#, fuzzy, python-format +msgid "Click to open associated pull request #%s" +msgstr "repositório [criado]" #: rhodecode/templates/shortlog/shortlog_data.html:75 msgid "Add or upload files directly via RhodeCode" @@ -4219,158 +4488,172 @@ msgstr "Repositório existente?" msgid "%s Summary" msgstr "sumário" -#: rhodecode/templates/summary/summary.html:12 -msgid "summary" -msgstr "sumário" - -#: rhodecode/templates/summary/summary.html:20 +#: rhodecode/templates/summary/summary.html:16 #, fuzzy, python-format -msgid "repo %s ATOM feed" -msgstr "Assinar o feed atom de %s" - -#: rhodecode/templates/summary/summary.html:21 +msgid "%s ATOM feed" +msgstr "%s - feed %s" + +#: rhodecode/templates/summary/summary.html:17 #, fuzzy, python-format -msgid "repo %s RSS feed" -msgstr "Assinar o feed rss de %s" - -#: rhodecode/templates/summary/summary.html:49 -#: rhodecode/templates/summary/summary.html:52 -msgid "ATOM" -msgstr "ATOM" - -#: rhodecode/templates/summary/summary.html:70 +msgid "%s RSS feed" +msgstr "%s - feed %s" + +#: rhodecode/templates/summary/summary.html:62 #, fuzzy, python-format msgid "Repository locked by %s" msgstr "repositórios" -#: rhodecode/templates/summary/summary.html:72 +#: rhodecode/templates/summary/summary.html:64 #, fuzzy msgid "Repository unlocked" msgstr "repositórios" -#: rhodecode/templates/summary/summary.html:91 +#: rhodecode/templates/summary/summary.html:83 #, python-format msgid "Non changable ID %s" msgstr "ID não alterável %s" -#: rhodecode/templates/summary/summary.html:96 -msgid "public" +#: rhodecode/templates/summary/summary.html:88 +#, fuzzy +msgid "Public" msgstr "público" -#: rhodecode/templates/summary/summary.html:104 -msgid "remote clone" +#: rhodecode/templates/summary/summary.html:88 +#: rhodecode/templates/summary/summary.html:89 +msgid "Fork of" +msgstr "Bifurcação de" + +#: rhodecode/templates/summary/summary.html:96 +#, fuzzy +msgid "Remote clone" msgstr "clone remoto" -#: rhodecode/templates/summary/summary.html:125 +#: rhodecode/templates/summary/summary.html:117 msgid "Contact" msgstr "Contato" -#: rhodecode/templates/summary/summary.html:139 +#: rhodecode/templates/summary/summary.html:131 msgid "Clone url" msgstr "URL de clonagem" -#: rhodecode/templates/summary/summary.html:142 +#: rhodecode/templates/summary/summary.html:136 msgid "Show by Name" msgstr "Mostrar por Nome" -#: rhodecode/templates/summary/summary.html:143 +#: rhodecode/templates/summary/summary.html:137 msgid "Show by ID" msgstr "Mostrar por ID" -#: rhodecode/templates/summary/summary.html:151 +#: rhodecode/templates/summary/summary.html:143 msgid "Trending files" msgstr "Tendências em arquivos" -#: rhodecode/templates/summary/summary.html:159 -#: rhodecode/templates/summary/summary.html:175 -#: rhodecode/templates/summary/summary.html:203 +#: rhodecode/templates/summary/summary.html:151 +#: rhodecode/templates/summary/summary.html:167 +#: rhodecode/templates/summary/summary.html:232 msgid "enable" msgstr "habilitar" -#: rhodecode/templates/summary/summary.html:167 +#: rhodecode/templates/summary/summary.html:159 msgid "Download" msgstr "Download" -#: rhodecode/templates/summary/summary.html:171 +#: rhodecode/templates/summary/summary.html:163 msgid "There are no downloads yet" msgstr "Ainda não há downloads" -#: rhodecode/templates/summary/summary.html:173 +#: rhodecode/templates/summary/summary.html:165 msgid "Downloads are disabled for this repository" msgstr "Downloads estão desabilitados para este repositório" -#: rhodecode/templates/summary/summary.html:179 +#: rhodecode/templates/summary/summary.html:171 #, fuzzy msgid "Download as zip" msgstr "descarregar como bruto" -#: rhodecode/templates/summary/summary.html:182 +#: rhodecode/templates/summary/summary.html:174 msgid "Check this to download archive with subrepos" msgstr "Marque isto para descarregar arquivo com subrepositórios" -#: rhodecode/templates/summary/summary.html:182 +#: rhodecode/templates/summary/summary.html:174 msgid "with subrepos" msgstr "com subrepositórios" -#: rhodecode/templates/summary/summary.html:195 +#: rhodecode/templates/summary/summary.html:197 +#, fuzzy +msgid "Repository Size" +msgstr "repositórios" + +#: rhodecode/templates/summary/summary.html:204 +#: rhodecode/templates/summary/summary.html:206 +#, fuzzy +msgid "Feed" +msgstr "%s - feed %s" + +#: rhodecode/templates/summary/summary.html:224 msgid "Commit activity by day / author" msgstr "Atividade de commit por dia / autor" -#: rhodecode/templates/summary/summary.html:206 +#: rhodecode/templates/summary/summary.html:235 msgid "Stats gathered: " msgstr "Estatísticas coletadas:" -#: rhodecode/templates/summary/summary.html:227 -msgid "Shortlog" -msgstr "Log resumido" - -#: rhodecode/templates/summary/summary.html:229 +#: rhodecode/templates/summary/summary.html:256 +#, fuzzy +msgid "Latest changes" +msgstr "Última alteração" + +#: rhodecode/templates/summary/summary.html:258 msgid "Quick start" msgstr "Início rápido" -#: rhodecode/templates/summary/summary.html:243 +#: rhodecode/templates/summary/summary.html:272 #, python-format msgid "Readme file at revision '%s'" msgstr "" -#: rhodecode/templates/summary/summary.html:246 +#: rhodecode/templates/summary/summary.html:275 msgid "Permalink to this readme" msgstr "" -#: rhodecode/templates/summary/summary.html:304 +#: rhodecode/templates/summary/summary.html:333 #, python-format msgid "Download %s as %s" msgstr "Descarregar %s como %s" -#: rhodecode/templates/summary/summary.html:661 +#: rhodecode/templates/summary/summary.html:380 +msgid "files" +msgstr "arquivos" + +#: rhodecode/templates/summary/summary.html:690 msgid "commits" msgstr "commits" -#: rhodecode/templates/summary/summary.html:662 +#: rhodecode/templates/summary/summary.html:691 msgid "files added" msgstr "arquivos adicionados" -#: rhodecode/templates/summary/summary.html:663 +#: rhodecode/templates/summary/summary.html:692 msgid "files changed" msgstr "arquivos alterados" -#: rhodecode/templates/summary/summary.html:664 +#: rhodecode/templates/summary/summary.html:693 msgid "files removed" msgstr "arquivos removidos" -#: rhodecode/templates/summary/summary.html:667 +#: rhodecode/templates/summary/summary.html:695 msgid "commit" msgstr "commit" -#: rhodecode/templates/summary/summary.html:668 +#: rhodecode/templates/summary/summary.html:696 msgid "file added" msgstr "arquivo adicionado" -#: rhodecode/templates/summary/summary.html:669 +#: rhodecode/templates/summary/summary.html:697 msgid "file changed" msgstr "arquivo alterado" -#: rhodecode/templates/summary/summary.html:670 +#: rhodecode/templates/summary/summary.html:698 msgid "file removed" msgstr "arquivo removido" @@ -4379,36 +4662,8 @@ msgstr "arquivo removido" msgid "%s Tags" msgstr "%s atrás" -#: rhodecode/templates/tags/tags.html:29 +#: rhodecode/templates/tags/tags.html:26 #, fuzzy msgid "Compare tags" msgstr "comparar exibir" -#~ 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 "" -#~ "repositório %s não está mapeado ao " -#~ "bd. Talvez ele tenha sido criado " -#~ "ou renomeado a partir do sistema " -#~ "de arquivos. Por favor execute a " -#~ "aplicação outra vez para varrer " -#~ "novamente por repositórios" - -#~ 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 "" -#~ "repositório %s não está mapeado ao " -#~ "bd. Talvez ele tenha sido movido " -#~ "ou renomeado a partir do sistema " -#~ "de arquivos. Por favor execute a " -#~ "aplicação outra vez para varrer " -#~ "novamente por repositórios" - diff --git a/rhodecode/i18n/rhodecode.pot b/rhodecode/i18n/rhodecode.pot --- a/rhodecode/i18n/rhodecode.pot +++ b/rhodecode/i18n/rhodecode.pot @@ -1,14 +1,14 @@ # Translations template for RhodeCode. -# Copyright (C) 2012 ORGANIZATION +# Copyright (C) 2013 ORGANIZATION # This file is distributed under the same license as the RhodeCode project. -# FIRST AUTHOR , 2012. +# FIRST AUTHOR , 2013. # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: RhodeCode 1.5.1b\n" +"Project-Id-Version: RhodeCode 1.6.0b\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2012-12-14 04:19+0100\n" +"POT-Creation-Date: 2013-04-05 10:19-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -22,11 +22,11 @@ msgid "All Branches" msgstr "" #: rhodecode/controllers/changeset.py:83 -msgid "show white space" +msgid "Show white space" msgstr "" #: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97 -msgid "ignore white space" +msgid "Ignore white space" msgstr "" #: rhodecode/controllers/changeset.py:163 @@ -34,18 +34,18 @@ msgstr "" msgid "%s line context" msgstr "" -#: rhodecode/controllers/changeset.py:314 rhodecode/controllers/pullrequests.py:417 +#: rhodecode/controllers/changeset.py:329 rhodecode/controllers/pullrequests.py:438 #, python-format msgid "Status change -> %s" msgstr "" -#: rhodecode/controllers/changeset.py:345 +#: rhodecode/controllers/changeset.py:360 msgid "" -"Changing status on a changeset associated witha closed pull request is not " +"Changing status on a changeset associated with a closed pull request is not " "allowed" msgstr "" -#: rhodecode/controllers/compare.py:75 rhodecode/controllers/pullrequests.py:121 +#: rhodecode/controllers/compare.py:74 rhodecode/controllers/pullrequests.py:167 #: rhodecode/controllers/shortlog.py:100 msgid "There are no changesets yet" msgstr "" @@ -87,154 +87,185 @@ msgid "%s %s feed" msgstr "" #: rhodecode/controllers/feed.py:86 -#: rhodecode/templates/changeset/changeset.html:137 -#: rhodecode/templates/changeset/changeset.html:149 -#: 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 +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 msgid "Changeset was too big and was cut off..." msgstr "" -#: rhodecode/controllers/feed.py:92 -msgid "commited on" -msgstr "" - -#: rhodecode/controllers/files.py:86 -msgid "click here to add new file" -msgstr "" - -#: rhodecode/controllers/files.py:87 +#: rhodecode/controllers/feed.py:91 +#, python-format +msgid "%s committed on %s" +msgstr "" + +#: rhodecode/controllers/files.py:88 +msgid "Click here to add new file" +msgstr "" + +#: rhodecode/controllers/files.py:89 #, python-format msgid "There are no files yet %s" msgstr "" -#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325 +#: rhodecode/controllers/files.py:267 rhodecode/controllers/files.py:335 #, python-format msgid "This repository is has been locked by %s on %s" msgstr "" -#: rhodecode/controllers/files.py:292 +#: rhodecode/controllers/files.py:279 +msgid "You can only edit files with revision being a valid branch " +msgstr "" + +#: rhodecode/controllers/files.py:293 #, python-format -msgid "Edited %s via RhodeCode" -msgstr "" - -#: rhodecode/controllers/files.py:297 +msgid "Edited file %s via RhodeCode" +msgstr "" + +#: rhodecode/controllers/files.py:309 msgid "No changes" msgstr "" -#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372 +#: rhodecode/controllers/files.py:318 rhodecode/controllers/files.py:388 #, python-format msgid "Successfully committed to %s" msgstr "" -#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378 +#: rhodecode/controllers/files.py:323 rhodecode/controllers/files.py:394 msgid "Error occurred during commit" msgstr "" -#: rhodecode/controllers/files.py:344 -#, python-format -msgid "Added %s via RhodeCode" -msgstr "" - -#: rhodecode/controllers/files.py:358 +#: rhodecode/controllers/files.py:347 +msgid "Added file via RhodeCode" +msgstr "" + +#: rhodecode/controllers/files.py:364 msgid "No content" msgstr "" -#: rhodecode/controllers/files.py:362 +#: rhodecode/controllers/files.py:368 msgid "No filename" msgstr "" -#: rhodecode/controllers/files.py:404 -msgid "downloads disabled" -msgstr "" - -#: rhodecode/controllers/files.py:415 +#: rhodecode/controllers/files.py:372 +msgid "Location must be relative path and must not contain .. in path" +msgstr "" + +#: rhodecode/controllers/files.py:420 +msgid "Downloads disabled" +msgstr "" + +#: rhodecode/controllers/files.py:431 #, python-format msgid "Unknown revision %s" msgstr "" -#: rhodecode/controllers/files.py:417 +#: rhodecode/controllers/files.py:433 msgid "Empty repository" msgstr "" -#: rhodecode/controllers/files.py:419 +#: rhodecode/controllers/files.py:435 msgid "Unknown archive type" msgstr "" -#: rhodecode/controllers/files.py:564 -#: rhodecode/templates/changeset/changeset_range.html:13 -#: rhodecode/templates/changeset/changeset_range.html:31 +#: rhodecode/controllers/files.py:617 +#: rhodecode/templates/changeset/changeset_range.html:9 msgid "Changesets" msgstr "" -#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:74 -#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550 +#: rhodecode/controllers/files.py:618 rhodecode/controllers/pullrequests.py:131 +#: rhodecode/controllers/summary.py:247 rhodecode/model/scm.py:606 +#: rhodecode/templates/switch_to_list.html:3 +#: rhodecode/templates/branches/branches.html:10 msgid "Branches" msgstr "" -#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:78 -#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561 +#: rhodecode/controllers/files.py:619 rhodecode/controllers/pullrequests.py:132 +#: rhodecode/controllers/summary.py:248 rhodecode/model/scm.py:617 +#: rhodecode/templates/switch_to_list.html:15 +#: rhodecode/templates/shortlog/shortlog_data.html:10 +#: rhodecode/templates/tags/tags.html:10 msgid "Tags" msgstr "" -#: rhodecode/controllers/forks.py:158 +#: rhodecode/controllers/forks.py:175 #, python-format -msgid "forked %s repository as %s" -msgstr "" - -#: rhodecode/controllers/forks.py:172 +msgid "Forked repository %s as %s" +msgstr "" + +#: rhodecode/controllers/forks.py:189 #, python-format msgid "An error occurred during repository forking %s" msgstr "" -#: rhodecode/controllers/journal.py:218 rhodecode/controllers/journal.py:261 +#: rhodecode/controllers/journal.py:275 rhodecode/controllers/journal.py:318 msgid "public journal" msgstr "" -#: rhodecode/controllers/journal.py:222 rhodecode/controllers/journal.py:265 -#: rhodecode/templates/base/base.html:232 +#: rhodecode/controllers/journal.py:279 rhodecode/controllers/journal.py:322 #: rhodecode/templates/journal/journal.html:12 msgid "journal" msgstr "" -#: rhodecode/controllers/login.py:143 -msgid "You have successfully registered into rhodecode" -msgstr "" - -#: rhodecode/controllers/login.py:164 +#: rhodecode/controllers/login.py:138 +msgid "You have successfully registered into RhodeCode" +msgstr "" + +#: rhodecode/controllers/login.py:159 msgid "Your password reset link was sent" msgstr "" -#: rhodecode/controllers/login.py:184 +#: rhodecode/controllers/login.py:179 msgid "Your password reset was successful, new password has been sent to your email" msgstr "" -#: rhodecode/controllers/pullrequests.py:76 rhodecode/model/scm.py:556 +#: rhodecode/controllers/pullrequests.py:118 +#: rhodecode/templates/changeset/changeset.html:10 +#: rhodecode/templates/email_templates/changeset_comment.html:15 +msgid "Changeset" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:128 +msgid "Special" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:129 +msgid "Peer branches" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:130 rhodecode/model/scm.py:612 +#: rhodecode/templates/switch_to_list.html:28 +#: rhodecode/templates/bookmarks/bookmarks.html:10 msgid "Bookmarks" msgstr "" -#: rhodecode/controllers/pullrequests.py:190 +#: rhodecode/controllers/pullrequests.py:228 msgid "Pull request requires a title with min. 3 chars" msgstr "" -#: rhodecode/controllers/pullrequests.py:192 -msgid "error during creation of pull request" -msgstr "" - -#: rhodecode/controllers/pullrequests.py:224 +#: rhodecode/controllers/pullrequests.py:230 +msgid "Error creating pull request" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:251 msgid "Successfully opened new pull request" msgstr "" -#: rhodecode/controllers/pullrequests.py:227 +#: rhodecode/controllers/pullrequests.py:254 msgid "Error occurred during sending pull request" msgstr "" -#: rhodecode/controllers/pullrequests.py:260 +#: rhodecode/controllers/pullrequests.py:287 msgid "Successfully deleted pull request" msgstr "" -#: rhodecode/controllers/pullrequests.py:452 +#: rhodecode/controllers/pullrequests.py:441 +msgid "Closing with" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:478 msgid "Closing pull request on other statuses than rejected or approved forbidden" msgstr "" @@ -250,50 +281,12 @@ msgstr "" msgid "An error occurred during this search operation" msgstr "" -#: rhodecode/controllers/settings.py:119 rhodecode/controllers/admin/repos.py:272 -#, python-format -msgid "Repository %s updated successfully" -msgstr "" - -#: rhodecode/controllers/settings.py:137 rhodecode/controllers/admin/repos.py:290 -#, python-format -msgid "error occurred during update of repository %s" -msgstr "" - -#: rhodecode/controllers/settings.py:162 rhodecode/controllers/admin/repos.py:315 -#, python-format -msgid "deleted repository %s" -msgstr "" - -#: rhodecode/controllers/settings.py:166 rhodecode/controllers/admin/repos.py:325 -#: rhodecode/controllers/admin/repos.py:331 -#, python-format -msgid "An error occurred during deletion of %s" -msgstr "" - -#: rhodecode/controllers/settings.py:185 -msgid "unlocked" -msgstr "" - -#: rhodecode/controllers/settings.py:188 -msgid "locked" -msgstr "" - -#: rhodecode/controllers/settings.py:190 -#, python-format -msgid "Repository has been %s" -msgstr "" - -#: rhodecode/controllers/settings.py:194 rhodecode/controllers/admin/repos.py:423 -msgid "An error occurred during unlocking" -msgstr "" - -#: rhodecode/controllers/summary.py:140 +#: rhodecode/controllers/summary.py:141 msgid "No data loaded yet" msgstr "" -#: rhodecode/controllers/summary.py:144 -#: rhodecode/templates/summary/summary.html:157 +#: rhodecode/controllers/summary.py:147 +#: rhodecode/templates/summary/summary.html:149 msgid "Statistics are disabled for this repository" msgstr "" @@ -302,7 +295,7 @@ msgid "Default settings updated successf msgstr "" #: rhodecode/controllers/admin/defaults.py:110 -msgid "error occurred during update of defaults" +msgid "Error occurred during update of defaults" msgstr "" #: rhodecode/controllers/admin/ldap_settings.py:50 @@ -350,7 +343,7 @@ msgid "START_TLS on LDAP connection" msgstr "" #: rhodecode/controllers/admin/ldap_settings.py:126 -msgid "Ldap settings updated successfully" +msgid "LDAP settings updated successfully" msgstr "" #: rhodecode/controllers/admin/ldap_settings.py:130 @@ -358,696 +351,837 @@ msgid "Unable to activate ldap. The \"py msgstr "" #: rhodecode/controllers/admin/ldap_settings.py:147 -msgid "error occurred during update of ldap settings" -msgstr "" - -#: rhodecode/controllers/admin/permissions.py:59 -#: rhodecode/controllers/admin/permissions.py:63 -msgid "None" +msgid "Error occurred during update of ldap settings" msgstr "" #: rhodecode/controllers/admin/permissions.py:60 #: rhodecode/controllers/admin/permissions.py:64 -msgid "Read" +msgid "None" msgstr "" #: rhodecode/controllers/admin/permissions.py:61 #: rhodecode/controllers/admin/permissions.py:65 -msgid "Write" +msgid "Read" msgstr "" #: rhodecode/controllers/admin/permissions.py:62 #: rhodecode/controllers/admin/permissions.py:66 +msgid "Write" +msgstr "" + +#: rhodecode/controllers/admin/permissions.py:63 +#: rhodecode/controllers/admin/permissions.py:67 #: 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/repo_add.html:10 +#: rhodecode/templates/admin/repos/repo_add.html:14 #: 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/repos_groups/repos_groups_add.html:9 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:9 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:13 #: 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/user_edit.html:133 #: rhodecode/templates/admin/users/users.html:9 +#: rhodecode/templates/admin/users/users.html:85 #: 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 +#: rhodecode/templates/base/base.html:292 rhodecode/templates/base/base.html:293 +#: rhodecode/templates/base/base.html:299 rhodecode/templates/base/base.html:300 msgid "Admin" msgstr "" -#: rhodecode/controllers/admin/permissions.py:69 -msgid "disabled" -msgstr "" - -#: rhodecode/controllers/admin/permissions.py:71 -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:70 #: rhodecode/controllers/admin/permissions.py:76 #: rhodecode/controllers/admin/permissions.py:79 +msgid "Disabled" +msgstr "" + +#: rhodecode/controllers/admin/permissions.py:72 +msgid "Allowed with manual account activation" +msgstr "" + +#: rhodecode/controllers/admin/permissions.py:74 +msgid "Allowed with automatic account activation" +msgstr "" + +#: rhodecode/controllers/admin/permissions.py:77 +#: rhodecode/controllers/admin/permissions.py:80 msgid "Enabled" msgstr "" -#: rhodecode/controllers/admin/permissions.py:122 +#: rhodecode/controllers/admin/permissions.py:128 msgid "Default permissions updated successfully" msgstr "" -#: rhodecode/controllers/admin/permissions.py:136 -msgid "error occurred during update of permissions" -msgstr "" - -#: rhodecode/controllers/admin/repos.py:121 +#: rhodecode/controllers/admin/permissions.py:142 +msgid "Error occurred during update of permissions" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:127 msgid "--REMOVE FORK--" msgstr "" -#: rhodecode/controllers/admin/repos.py:190 +#: rhodecode/controllers/admin/repos.py:168 +#, python-format +msgid "Created repository %s from %s" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:174 #, python-format -msgid "created repository %s from %s" -msgstr "" - -#: rhodecode/controllers/admin/repos.py:194 +msgid "Created repository %s" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:197 +#, python-format +msgid "Error creating repository %s" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:266 #, python-format -msgid "created repository %s" -msgstr "" - -#: rhodecode/controllers/admin/repos.py:225 +msgid "Repository %s updated successfully" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:284 +#, python-format +msgid "Error occurred during update of repository %s" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:311 rhodecode/controllers/api/api.py:877 #, python-format -msgid "error occurred during creation of repository %s" -msgstr "" - -#: rhodecode/controllers/admin/repos.py:320 +msgid "Detached %s forks" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:314 rhodecode/controllers/api/api.py:879 +#, python-format +msgid "Deleted %s forks" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:319 +#, python-format +msgid "Deleted repository %s" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:322 #, python-format msgid "Cannot delete %s it still contains attached forks" msgstr "" -#: rhodecode/controllers/admin/repos.py:349 +#: rhodecode/controllers/admin/repos.py:327 +#, python-format +msgid "An error occurred during deletion of %s" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:365 +msgid "Repository permissions updated" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:384 msgid "An error occurred during deletion of repository user" msgstr "" -#: rhodecode/controllers/admin/repos.py:368 -msgid "An error occurred during deletion of repository users groups" -msgstr "" - -#: rhodecode/controllers/admin/repos.py:386 -msgid "An error occurred during deletion of repository stats" -msgstr "" - #: rhodecode/controllers/admin/repos.py:403 +msgid "An error occurred during deletion of repository user groups" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:421 +msgid "An error occurred during deletion of repository stats" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:438 msgid "An error occurred during cache invalidation" msgstr "" -#: rhodecode/controllers/admin/repos.py:443 +#: rhodecode/controllers/admin/repos.py:458 +#: rhodecode/controllers/admin/repos.py:485 +msgid "An error occurred during unlocking" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:476 +msgid "Unlocked" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:479 +msgid "Locked" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:481 +#, python-format +msgid "Repository has been %s" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:505 msgid "Updated repository visibility in public journal" msgstr "" -#: rhodecode/controllers/admin/repos.py:447 +#: rhodecode/controllers/admin/repos.py:509 msgid "An error occurred during setting this repository in public journal" msgstr "" -#: rhodecode/controllers/admin/repos.py:452 rhodecode/model/validators.py:300 +#: rhodecode/controllers/admin/repos.py:514 rhodecode/model/validators.py:302 msgid "Token mismatch" msgstr "" -#: rhodecode/controllers/admin/repos.py:465 +#: rhodecode/controllers/admin/repos.py:527 msgid "Pulled from remote location" msgstr "" -#: rhodecode/controllers/admin/repos.py:467 +#: rhodecode/controllers/admin/repos.py:529 msgid "An error occurred during pull from remote location" msgstr "" -#: rhodecode/controllers/admin/repos.py:483 +#: rhodecode/controllers/admin/repos.py:545 msgid "Nothing" msgstr "" -#: rhodecode/controllers/admin/repos.py:485 +#: rhodecode/controllers/admin/repos.py:547 #, python-format msgid "Marked repo %s as fork of %s" msgstr "" -#: rhodecode/controllers/admin/repos.py:489 +#: rhodecode/controllers/admin/repos.py:551 msgid "An error occurred during this operation" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:120 +#: rhodecode/controllers/admin/repos.py:590 +msgid "An error occurred during creation of field" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:604 +msgid "An error occurred during removal of field" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:145 #, python-format -msgid "created repos group %s" -msgstr "" - -#: rhodecode/controllers/admin/repos_groups.py:133 +msgid "Created repository group %s" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:157 #, python-format -msgid "error occurred during creation of repos group %s" -msgstr "" - -#: rhodecode/controllers/admin/repos_groups.py:167 +msgid "Error occurred during creation of repository group %s" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:214 +#: rhodecode/controllers/admin/repos_groups.py:286 +msgid "Cannot revoke permission for yourself as admin" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:220 #, python-format -msgid "updated repos group %s" -msgstr "" - -#: rhodecode/controllers/admin/repos_groups.py:180 +msgid "Updated repository group %s" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:235 #, python-format -msgid "error occurred during update of repos group %s" -msgstr "" - -#: rhodecode/controllers/admin/repos_groups.py:198 +msgid "Error occurred during update of repository group %s" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:253 #, python-format msgid "This group contains %s repositores and cannot be deleted" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:206 +#: rhodecode/controllers/admin/repos_groups.py:260 +#, python-format +msgid "This group contains %s subgroups and cannot be deleted" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:266 #, python-format -msgid "removed repos group %s" -msgstr "" - -#: rhodecode/controllers/admin/repos_groups.py:212 -msgid "Cannot delete this group it still contains subgroups" -msgstr "" - -#: rhodecode/controllers/admin/repos_groups.py:217 -#: rhodecode/controllers/admin/repos_groups.py:222 +msgid "Removed repository group %s" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:271 #, python-format -msgid "error occurred during deletion of repos group %s" -msgstr "" - -#: rhodecode/controllers/admin/repos_groups.py:243 +msgid "Error occurred during deletion of repos group %s" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:297 msgid "An error occurred during deletion of group user" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:264 -msgid "An error occurred during deletion of group users groups" -msgstr "" - -#: rhodecode/controllers/admin/settings.py:123 +#: rhodecode/controllers/admin/repos_groups.py:318 +msgid "An error occurred during deletion of group user groups" +msgstr "" + +#: rhodecode/controllers/admin/settings.py:126 #, python-format -msgid "Repositories successfully rescanned added: %s,removed: %s" -msgstr "" - -#: rhodecode/controllers/admin/settings.py:131 +msgid "Repositories successfully rescanned added: %s ; removed: %s" +msgstr "" + +#: rhodecode/controllers/admin/settings.py:135 msgid "Whoosh reindex task scheduled" msgstr "" -#: rhodecode/controllers/admin/settings.py:162 -msgid "Updated application settings" -msgstr "" - #: 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:207 +msgid "Updated application settings" +msgstr "" + +#: rhodecode/controllers/admin/settings.py:170 +#: rhodecode/controllers/admin/settings.py:301 +msgid "Error occurred during updating application settings" +msgstr "" + +#: rhodecode/controllers/admin/settings.py:216 msgid "Updated visualisation settings" msgstr "" -#: rhodecode/controllers/admin/settings.py:212 -msgid "error occurred during updating visualisation settings" -msgstr "" - -#: rhodecode/controllers/admin/settings.py:295 +#: rhodecode/controllers/admin/settings.py:221 +msgid "Error occurred during updating visualisation settings" +msgstr "" + +#: rhodecode/controllers/admin/settings.py:297 msgid "Updated VCS settings" msgstr "" -#: rhodecode/controllers/admin/settings.py:309 +#: rhodecode/controllers/admin/settings.py:311 msgid "Added new hook" msgstr "" -#: rhodecode/controllers/admin/settings.py:321 +#: rhodecode/controllers/admin/settings.py:323 msgid "Updated hooks" msgstr "" -#: rhodecode/controllers/admin/settings.py:325 -msgid "error occurred during hook creation" -msgstr "" - -#: rhodecode/controllers/admin/settings.py:344 +#: rhodecode/controllers/admin/settings.py:327 +msgid "Error occurred during hook creation" +msgstr "" + +#: rhodecode/controllers/admin/settings.py:346 msgid "Email task created" msgstr "" -#: rhodecode/controllers/admin/settings.py:399 +#: rhodecode/controllers/admin/settings.py:410 msgid "You can't edit this user since it's crucial for entire application" msgstr "" -#: rhodecode/controllers/admin/settings.py:430 +#: rhodecode/controllers/admin/settings.py:452 msgid "Your account was updated successfully" msgstr "" -#: rhodecode/controllers/admin/settings.py:445 -#: rhodecode/controllers/admin/users.py:196 +#: rhodecode/controllers/admin/settings.py:467 +#: rhodecode/controllers/admin/users.py:198 #, python-format -msgid "error occurred during update of user %s" +msgid "Error occurred during update of user %s" msgstr "" #: rhodecode/controllers/admin/users.py:130 #, python-format -msgid "created user %s" +msgid "Created user %s" msgstr "" #: rhodecode/controllers/admin/users.py:142 #, python-format -msgid "error occurred during creation of user %s" +msgid "Error occurred during creation of user %s" msgstr "" #: rhodecode/controllers/admin/users.py:176 msgid "User updated successfully" msgstr "" -#: rhodecode/controllers/admin/users.py:212 -msgid "successfully deleted user" -msgstr "" - -#: rhodecode/controllers/admin/users.py:217 +#: rhodecode/controllers/admin/users.py:214 +msgid "Successfully deleted user" +msgstr "" + +#: rhodecode/controllers/admin/users.py:219 msgid "An error occurred during deletion of user" msgstr "" -#: rhodecode/controllers/admin/users.py:231 +#: rhodecode/controllers/admin/users.py:233 msgid "You can't edit this user" msgstr "" -#: rhodecode/controllers/admin/users.py:272 +#: rhodecode/controllers/admin/users.py:276 msgid "Granted 'repository create' permission to user" msgstr "" -#: rhodecode/controllers/admin/users.py:277 +#: rhodecode/controllers/admin/users.py:281 msgid "Revoked 'repository create' permission to user" msgstr "" -#: rhodecode/controllers/admin/users.py:283 +#: rhodecode/controllers/admin/users.py:287 msgid "Granted 'repository fork' permission to user" msgstr "" -#: rhodecode/controllers/admin/users.py:288 +#: rhodecode/controllers/admin/users.py:292 msgid "Revoked 'repository fork' permission to user" msgstr "" -#: rhodecode/controllers/admin/users.py:294 -#: rhodecode/controllers/admin/users_groups.py:279 +#: rhodecode/controllers/admin/users.py:298 +#: rhodecode/controllers/admin/users_groups.py:281 msgid "An error occurred during permissions saving" msgstr "" -#: rhodecode/controllers/admin/users.py:309 +#: rhodecode/controllers/admin/users.py:312 #, python-format msgid "Added email %s to user" msgstr "" -#: rhodecode/controllers/admin/users.py:315 +#: rhodecode/controllers/admin/users.py:318 msgid "An error occurred during email saving" msgstr "" -#: rhodecode/controllers/admin/users.py:325 +#: rhodecode/controllers/admin/users.py:328 msgid "Removed email from user" msgstr "" +#: rhodecode/controllers/admin/users.py:341 +#, python-format +msgid "Added ip %s to user" +msgstr "" + +#: rhodecode/controllers/admin/users.py:347 +msgid "An error occurred during ip saving" +msgstr "" + +#: rhodecode/controllers/admin/users.py:359 +msgid "Removed ip from user" +msgstr "" + #: rhodecode/controllers/admin/users_groups.py:86 #, python-format -msgid "created users group %s" +msgid "Created user group %s" msgstr "" #: 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:164 +msgid "Error occurred during creation of user group %s" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:166 #, python-format -msgid "updated users group %s" -msgstr "" - -#: rhodecode/controllers/admin/users_groups.py:186 +msgid "Updated user group %s" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:188 #, python-format -msgid "error occurred during update of users group %s" -msgstr "" - -#: rhodecode/controllers/admin/users_groups.py:203 -msgid "successfully deleted users group" -msgstr "" - -#: rhodecode/controllers/admin/users_groups.py:208 -msgid "An error occurred during deletion of users group" -msgstr "" - -#: rhodecode/controllers/admin/users_groups.py:257 -msgid "Granted 'repository create' permission to users group" -msgstr "" - -#: rhodecode/controllers/admin/users_groups.py:262 -msgid "Revoked 'repository create' permission to users group" -msgstr "" - -#: rhodecode/controllers/admin/users_groups.py:268 -msgid "Granted 'repository fork' permission to users group" -msgstr "" - -#: rhodecode/controllers/admin/users_groups.py:273 -msgid "Revoked 'repository fork' permission to users group" -msgstr "" - -#: rhodecode/lib/auth.py:499 +msgid "Error occurred during update of user group %s" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:205 +msgid "Successfully deleted user group" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:210 +msgid "An error occurred during deletion of user group" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:259 +msgid "Granted 'repository create' permission to user group" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:264 +msgid "Revoked 'repository create' permission to user group" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:270 +msgid "Granted 'repository fork' permission to user group" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:275 +msgid "Revoked 'repository fork' permission to user group" +msgstr "" + +#: rhodecode/lib/auth.py:530 +#, python-format +msgid "IP %s not allowed" +msgstr "" + +#: rhodecode/lib/auth.py:579 msgid "You need to be a registered user to perform this action" msgstr "" -#: rhodecode/lib/auth.py:540 +#: rhodecode/lib/auth.py:620 msgid "You need to be a signed in to view this page" msgstr "" -#: rhodecode/lib/diffs.py:74 -msgid "binary file" -msgstr "" - -#: rhodecode/lib/diffs.py:90 +#: rhodecode/lib/diffs.py:66 +msgid "Binary file" +msgstr "" + +#: rhodecode/lib/diffs.py:82 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "" -#: rhodecode/lib/diffs.py:100 +#: rhodecode/lib/diffs.py:92 msgid "No changes detected" msgstr "" -#: rhodecode/lib/helpers.py:374 +#: rhodecode/lib/helpers.py:394 #, python-format msgid "%a, %d %b %Y %H:%M:%S" msgstr "" -#: rhodecode/lib/helpers.py:486 +#: rhodecode/lib/helpers.py:506 msgid "True" msgstr "" -#: rhodecode/lib/helpers.py:490 +#: rhodecode/lib/helpers.py:509 msgid "False" msgstr "" -#: rhodecode/lib/helpers.py:530 +#: rhodecode/lib/helpers.py:547 #, python-format msgid "Deleted branch: %s" msgstr "" -#: rhodecode/lib/helpers.py:533 +#: rhodecode/lib/helpers.py:550 #, python-format msgid "Created tag: %s" msgstr "" -#: rhodecode/lib/helpers.py:546 +#: rhodecode/lib/helpers.py:563 msgid "Changeset not found" msgstr "" -#: rhodecode/lib/helpers.py:589 -#, python-format -msgid "Show all combined changesets %s->%s" -msgstr "" - -#: rhodecode/lib/helpers.py:595 -msgid "compare view" -msgstr "" - #: rhodecode/lib/helpers.py:615 -msgid "and" -msgstr "" - -#: rhodecode/lib/helpers.py:616 #, python-format -msgid "%s more" -msgstr "" - -#: rhodecode/lib/helpers.py:617 rhodecode/templates/changelog/changelog.html:51 -msgid "revisions" +msgid "Show all combined changesets %s->%s" +msgstr "" + +#: rhodecode/lib/helpers.py:621 +msgid "compare view" msgstr "" #: rhodecode/lib/helpers.py:641 +msgid "and" +msgstr "" + +#: rhodecode/lib/helpers.py:642 +#, python-format +msgid "%s more" +msgstr "" + +#: rhodecode/lib/helpers.py:643 rhodecode/templates/changelog/changelog.html:44 +msgid "revisions" +msgstr "" + +#: rhodecode/lib/helpers.py:667 #, python-format msgid "fork name %s" msgstr "" -#: rhodecode/lib/helpers.py:658 -#: 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:664 -msgid "[deleted] repository" -msgstr "" - -#: rhodecode/lib/helpers.py:666 rhodecode/lib/helpers.py:676 -msgid "[created] repository" -msgstr "" - -#: rhodecode/lib/helpers.py:668 -msgid "[created] repository as fork" -msgstr "" - -#: rhodecode/lib/helpers.py:670 rhodecode/lib/helpers.py:678 -msgid "[forked] repository" -msgstr "" - -#: rhodecode/lib/helpers.py:672 rhodecode/lib/helpers.py:680 -msgid "[updated] repository" -msgstr "" - -#: rhodecode/lib/helpers.py:674 -msgid "[delete] repository" -msgstr "" - -#: rhodecode/lib/helpers.py:682 -msgid "[created] user" -msgstr "" - #: rhodecode/lib/helpers.py:684 -msgid "[updated] user" -msgstr "" - -#: rhodecode/lib/helpers.py:686 -msgid "[created] users group" -msgstr "" - -#: rhodecode/lib/helpers.py:688 -msgid "[updated] users group" +#: rhodecode/templates/pullrequests/pullrequest_show.html:8 +#, python-format +msgid "Pull request #%s" msgstr "" #: rhodecode/lib/helpers.py:690 -msgid "[commented] on revision in repository" -msgstr "" - -#: rhodecode/lib/helpers.py:692 -msgid "[commented] on pull request for" +msgid "[deleted] repository" +msgstr "" + +#: rhodecode/lib/helpers.py:692 rhodecode/lib/helpers.py:702 +msgid "[created] repository" msgstr "" #: rhodecode/lib/helpers.py:694 -msgid "[closed] pull request for" -msgstr "" - -#: rhodecode/lib/helpers.py:696 -msgid "[pushed] into" -msgstr "" - -#: rhodecode/lib/helpers.py:698 -msgid "[committed via RhodeCode] into repository" +msgid "[created] repository as fork" +msgstr "" + +#: rhodecode/lib/helpers.py:696 rhodecode/lib/helpers.py:704 +msgid "[forked] repository" +msgstr "" + +#: rhodecode/lib/helpers.py:698 rhodecode/lib/helpers.py:706 +msgid "[updated] repository" msgstr "" #: rhodecode/lib/helpers.py:700 +msgid "[delete] repository" +msgstr "" + +#: rhodecode/lib/helpers.py:708 +msgid "[created] user" +msgstr "" + +#: rhodecode/lib/helpers.py:710 +msgid "[updated] user" +msgstr "" + +#: rhodecode/lib/helpers.py:712 +msgid "[created] user group" +msgstr "" + +#: rhodecode/lib/helpers.py:714 +msgid "[updated] user group" +msgstr "" + +#: rhodecode/lib/helpers.py:716 +msgid "[commented] on revision in repository" +msgstr "" + +#: rhodecode/lib/helpers.py:718 +msgid "[commented] on pull request for" +msgstr "" + +#: rhodecode/lib/helpers.py:720 +msgid "[closed] pull request for" +msgstr "" + +#: rhodecode/lib/helpers.py:722 +msgid "[pushed] into" +msgstr "" + +#: rhodecode/lib/helpers.py:724 +msgid "[committed via RhodeCode] into repository" +msgstr "" + +#: rhodecode/lib/helpers.py:726 msgid "[pulled from remote] into repository" msgstr "" -#: rhodecode/lib/helpers.py:702 +#: rhodecode/lib/helpers.py:728 msgid "[pulled] from" msgstr "" -#: rhodecode/lib/helpers.py:704 +#: rhodecode/lib/helpers.py:730 msgid "[started following] repository" msgstr "" -#: rhodecode/lib/helpers.py:706 +#: rhodecode/lib/helpers.py:732 msgid "[stopped following] repository" msgstr "" -#: rhodecode/lib/helpers.py:883 +#: rhodecode/lib/helpers.py:910 #, python-format msgid " and %s more" msgstr "" -#: rhodecode/lib/helpers.py:887 +#: rhodecode/lib/helpers.py:914 msgid "No Files" msgstr "" -#: rhodecode/lib/helpers.py:1163 +#: rhodecode/lib/helpers.py:1198 #, 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/lib/utils2.py:403 +#: rhodecode/lib/unionrepo.py:193 +msgid "cannot create new union repository" +msgstr "" + +#: rhodecode/lib/utils2.py:411 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:404 +#: rhodecode/lib/utils2.py:412 #, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:405 +#: rhodecode/lib/utils2.py:413 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:406 +#: rhodecode/lib/utils2.py:414 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:407 +#: rhodecode/lib/utils2.py:415 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:408 +#: rhodecode/lib/utils2.py:416 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "" msgstr[1] "" -#: rhodecode/lib/utils2.py:424 +#: rhodecode/lib/utils2.py:432 #, python-format msgid "in %s" msgstr "" -#: rhodecode/lib/utils2.py:426 -#, python-format -msgid "%s ago" -msgstr "" - -#: 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:434 +#, python-format +msgid "%s ago" +msgstr "" + +#: rhodecode/lib/utils2.py:436 +#, python-format +msgid "in %s and %s" +msgstr "" + +#: rhodecode/lib/utils2.py:439 +#, python-format +msgid "%s and %s ago" +msgstr "" + +#: rhodecode/lib/utils2.py:442 msgid "just now" msgstr "" -#: 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:1183 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1183 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1289 rhodecode/model/db.py:1388 msgid "Repository no access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1184 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1184 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1290 rhodecode/model/db.py:1389 msgid "Repository read access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1185 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1185 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1291 rhodecode/model/db.py:1390 msgid "Repository write access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1186 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1186 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1292 rhodecode/model/db.py:1391 msgid "Repository admin access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1188 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1188 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1294 msgid "Repositories Group no access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1189 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1189 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1295 msgid "Repositories Group read access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1190 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1190 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1296 msgid "Repositories Group write access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1191 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1191 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1297 msgid "Repositories Group admin access" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1193 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1193 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1299 rhodecode/model/db.py:1398 msgid "RhodeCode Administrator" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1194 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1194 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1300 rhodecode/model/db.py:1399 msgid "Repository creation disabled" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1195 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1195 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1301 rhodecode/model/db.py:1400 msgid "Repository creation enabled" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1196 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1196 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1302 rhodecode/model/db.py:1401 msgid "Repository forking disabled" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1197 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1197 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303 rhodecode/model/db.py:1402 msgid "Repository forking enabled" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1198 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1198 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304 rhodecode/model/db.py:1403 msgid "Register disabled" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1199 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1199 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305 rhodecode/model/db.py:1404 msgid "Register new user with RhodeCode with manual activation" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1202 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1202 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308 rhodecode/model/db.py:1407 msgid "Register new user with RhodeCode with auto activation" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1643 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1643 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1749 rhodecode/model/db.py:1838 msgid "Not Reviewed" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1644 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1644 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1750 rhodecode/model/db.py:1839 msgid "Approved" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1645 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1645 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1751 rhodecode/model/db.py:1840 msgid "Rejected" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1646 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1646 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1752 rhodecode/model/db.py:1841 msgid "Under Review" msgstr "" -#: rhodecode/model/comment.py:110 +#: rhodecode/model/comment.py:75 #, python-format msgid "on line %s" msgstr "" -#: rhodecode/model/comment.py:173 +#: rhodecode/model/comment.py:219 msgid "[Mention]" msgstr "" +#: rhodecode/model/db.py:1252 +msgid "top level" +msgstr "" + +#: rhodecode/model/db.py:1393 +msgid "Repository group no access" +msgstr "" + +#: rhodecode/model/db.py:1394 +msgid "Repository group read access" +msgstr "" + +#: rhodecode/model/db.py:1395 +msgid "Repository group write access" +msgstr "" + +#: rhodecode/model/db.py:1396 +msgid "Repository group admin access" +msgstr "" + #: rhodecode/model/forms.py:43 msgid "Please enter a login" msgstr "" @@ -1066,204 +1200,237 @@ msgstr "" msgid "Enter %(min)i characters or more" msgstr "" -#: rhodecode/model/notification.py:220 -#, python-format -msgid "commented on commit at %(when)s" -msgstr "" - -#: rhodecode/model/notification.py:221 -#, python-format -msgid "sent message at %(when)s" -msgstr "" - -#: rhodecode/model/notification.py:222 -#, python-format -msgid "mentioned you at %(when)s" -msgstr "" - -#: rhodecode/model/notification.py:223 -#, python-format -msgid "registered in RhodeCode at %(when)s" -msgstr "" - #: rhodecode/model/notification.py:224 #, python-format -msgid "opened new pull request at %(when)s" +msgid "%(user)s commented on changeset at %(when)s" msgstr "" #: rhodecode/model/notification.py:225 #, python-format -msgid "commented on pull request at %(when)s" -msgstr "" - -#: rhodecode/model/pull_request.py:90 +msgid "%(user)s sent message at %(when)s" +msgstr "" + +#: rhodecode/model/notification.py:226 +#, python-format +msgid "%(user)s mentioned you at %(when)s" +msgstr "" + +#: rhodecode/model/notification.py:227 +#, python-format +msgid "%(user)s registered in RhodeCode at %(when)s" +msgstr "" + +#: rhodecode/model/notification.py:228 #, python-format -msgid "%(user)s wants you to review pull request #%(pr_id)s" -msgstr "" - -#: rhodecode/model/scm.py:542 +msgid "%(user)s opened new pull request at %(when)s" +msgstr "" + +#: rhodecode/model/notification.py:229 +#, python-format +msgid "%(user)s commented on pull request at %(when)s" +msgstr "" + +#: rhodecode/model/pull_request.py:104 +#, python-format +msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s" +msgstr "" + +#: rhodecode/model/scm.py:598 msgid "latest tip" msgstr "" #: rhodecode/model/user.py:232 -msgid "new user registration" +msgid "New user registration" msgstr "" #: rhodecode/model/user.py:257 rhodecode/model/user.py:281 +msgid "You can't Edit this user since it's crucial for entire application" +msgstr "" + #: rhodecode/model/user.py:303 -msgid "You can't Edit this user since it's crucial for entire application" -msgstr "" - -#: rhodecode/model/user.py:327 msgid "You can't remove this user since it's crucial for entire application" msgstr "" -#: rhodecode/model/user.py:333 +#: rhodecode/model/user.py:309 #, 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:36 rhodecode/model/validators.py:37 +#: rhodecode/model/user.py:334 +msgid "Password reset link" +msgstr "" + +#: rhodecode/model/user.py:366 +msgid "Your new password" +msgstr "" + +#: rhodecode/model/user.py:367 +#, python-format +msgid "Your new RhodeCode password:%s" +msgstr "" + +#: rhodecode/model/validators.py:38 rhodecode/model/validators.py:39 msgid "Value cannot be an empty list" msgstr "" -#: rhodecode/model/validators.py:83 -#, python-format -msgid "Username \"%(username)s\" already exists" -msgstr "" - #: rhodecode/model/validators.py:85 #, python-format -msgid "Username \"%(username)s\" is forbidden" +msgid "Username \"%(username)s\" already exists" msgstr "" #: rhodecode/model/validators.py:87 +#, python-format +msgid "Username \"%(username)s\" is forbidden" +msgstr "" + +#: rhodecode/model/validators.py:89 msgid "" "Username may only contain alphanumeric characters underscores, periods or " "dashes and must begin with alphanumeric character" msgstr "" -#: rhodecode/model/validators.py:115 +#: rhodecode/model/validators.py:117 #, python-format msgid "Username %(username)s is not valid" 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" +#: rhodecode/model/validators.py:136 +msgid "Invalid user group name" msgstr "" #: rhodecode/model/validators.py:137 +#, python-format +msgid "User group \"%(usergroup)s\" already exists" +msgstr "" + +#: rhodecode/model/validators.py:139 msgid "" -"users group name may only contain alphanumeric characters underscores, " -"periods or dashes and must begin with alphanumeric character" -msgstr "" - -#: rhodecode/model/validators.py:175 +"user group name may only contain alphanumeric characters underscores, periods" +" or dashes and must begin with alphanumeric character" +msgstr "" + +#: rhodecode/model/validators.py:177 msgid "Cannot assign this group as parent" msgstr "" -#: rhodecode/model/validators.py:176 -#, python-format -msgid "Group \"%(group_name)s\" already exists" -msgstr "" - #: rhodecode/model/validators.py:178 #, python-format +msgid "Group \"%(group_name)s\" already exists" +msgstr "" + +#: rhodecode/model/validators.py:180 +#, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "" -#: rhodecode/model/validators.py:236 +#: rhodecode/model/validators.py:238 msgid "Invalid characters (non-ascii) in password" msgstr "" -#: rhodecode/model/validators.py:251 +#: rhodecode/model/validators.py:253 msgid "Passwords do not match" msgstr "" -#: rhodecode/model/validators.py:268 -msgid "invalid password" -msgstr "" - -#: rhodecode/model/validators.py:269 -msgid "invalid user name" -msgstr "" - #: rhodecode/model/validators.py:270 +msgid "invalid password" +msgstr "" + +#: rhodecode/model/validators.py:271 +msgid "invalid user name" +msgstr "" + +#: rhodecode/model/validators.py:272 msgid "Your account is disabled" msgstr "" -#: rhodecode/model/validators.py:314 -#, python-format -msgid "Repository name %(repo)s is disallowed" -msgstr "" - #: rhodecode/model/validators.py:316 #, python-format +msgid "Repository name %(repo)s is disallowed" +msgstr "" + +#: rhodecode/model/validators.py:318 +#, 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:319 #, python-format -msgid "Repositories group with name \"%(repo)s\" already exists" -msgstr "" - -#: rhodecode/model/validators.py:432 +msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" +msgstr "" + +#: rhodecode/model/validators.py:321 +#, python-format +msgid "Repository group with name \"%(repo)s\" already exists" +msgstr "" + +#: rhodecode/model/validators.py:438 msgid "invalid clone url" msgstr "" -#: rhodecode/model/validators.py:433 +#: rhodecode/model/validators.py:439 msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url" msgstr "" -#: rhodecode/model/validators.py:458 +#: rhodecode/model/validators.py:464 msgid "Fork have to be the same type as parent" msgstr "" -#: rhodecode/model/validators.py:473 +#: rhodecode/model/validators.py:479 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:591 +#: rhodecode/model/validators.py:481 +msgid "no permission to create repository in root location" +msgstr "" + +#: rhodecode/model/validators.py:518 +msgid "You don't have permissions to create a group in this location" +msgstr "" + +#: rhodecode/model/validators.py:557 +msgid "This username or user group name is not valid" +msgstr "" + +#: rhodecode/model/validators.py:650 msgid "This is not a valid path" msgstr "" -#: rhodecode/model/validators.py:606 +#: rhodecode/model/validators.py:665 msgid "This e-mail address is already taken" msgstr "" -#: rhodecode/model/validators.py:626 +#: rhodecode/model/validators.py:685 #, python-format msgid "e-mail \"%(email)s\" does not exist." msgstr "" -#: rhodecode/model/validators.py:663 +#: rhodecode/model/validators.py:722 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:682 +#: rhodecode/model/validators.py:735 #, python-format msgid "Revisions %(revs)s are already part of pull request or have set status" msgstr "" -#: rhodecode/templates/index.html:3 +#: rhodecode/model/validators.py:767 +msgid "Please enter a valid IPv4 or IpV6 address" +msgstr "" + +#: rhodecode/model/validators.py:768 +#, python-format +msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" +msgstr "" + +#: rhodecode/model/validators.py:800 +msgid "Key name can only consist of letters, underscore, dash or numbers" +msgstr "" + +#: rhodecode/templates/index.html:5 msgid "Dashboard" msgstr "" @@ -1272,191 +1439,211 @@ msgstr "" #: 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/bookmarks/bookmarks.html:9 #: rhodecode/templates/branches/branches.html:9 #: rhodecode/templates/journal/journal.html:9 -#: rhodecode/templates/journal/journal.html:48 -#: rhodecode/templates/tags/tags.html:10 +#: rhodecode/templates/journal/journal.html:46 +#: rhodecode/templates/journal/journal.html:47 rhodecode/templates/tags/tags.html:9 msgid "quick filter..." msgstr "" #: rhodecode/templates/index_base.html:6 #: rhodecode/templates/admin/repos/repos.html:9 -#: rhodecode/templates/base/base.html:233 msgid "repositories" msgstr "" -#: rhodecode/templates/index_base.html:13 rhodecode/templates/index_base.html:15 +#: rhodecode/templates/index_base.html:13 rhodecode/templates/index_base.html:18 +#: rhodecode/templates/admin/repos/repo_add.html:5 #: rhodecode/templates/admin/repos/repos.html:21 -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 +msgid "Add repository" +msgstr "" + +#: rhodecode/templates/index_base.html:15 rhodecode/templates/index_base.html:20 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:31 +msgid "Add group" +msgstr "" + +#: rhodecode/templates/index_base.html:27 +msgid "Edit group" +msgstr "" + +#: rhodecode/templates/index_base.html:27 +msgid "You have admin right to this group, and can edit it" +msgstr "" + +#: rhodecode/templates/index_base.html:40 rhodecode/templates/index_base.html:140 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:33 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:38 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:43 #: rhodecode/templates/admin/users_groups/users_group_add.html:32 #: rhodecode/templates/admin/users_groups/users_group_edit.html:33 +#: rhodecode/templates/admin/users_groups/users_groups.html:34 msgid "Group name" msgstr "" -#: 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/index_base.html:41 rhodecode/templates/index_base.html:83 +#: rhodecode/templates/index_base.html:142 rhodecode/templates/index_base.html:180 +#: rhodecode/templates/index_base.html:270 #: 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 +#: rhodecode/templates/admin/repos/repos.html:73 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:42 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:47 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:44 +#: rhodecode/templates/forks/fork.html:56 +#: rhodecode/templates/pullrequests/pullrequest.html:101 +#: rhodecode/templates/summary/summary.html:106 msgid "Description" msgstr "" -#: rhodecode/templates/index_base.html:40 -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47 -msgid "Repositories group" -msgstr "" - -#: rhodecode/templates/index_base.html:71 rhodecode/templates/index_base.html:174 -#: rhodecode/templates/index_base.html:264 +#: rhodecode/templates/index_base.html:51 +#: 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_show.html:57 +#: rhodecode/templates/forks/fork.html:47 +msgid "Repository group" +msgstr "" + +#: rhodecode/templates/index_base.html:82 rhodecode/templates/index_base.html:178 +#: rhodecode/templates/index_base.html:268 #: 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/admin/repos/repos.html:71 +#: rhodecode/templates/admin/users/user_edit_my_account.html:172 +#: rhodecode/templates/base/perms_summary.html:14 +#: rhodecode/templates/bookmarks/bookmarks.html:34 #: rhodecode/templates/bookmarks/bookmarks_data.html:6 -#: rhodecode/templates/branches/branches.html:50 +#: rhodecode/templates/branches/branches.html:47 #: rhodecode/templates/branches/branches_data.html:6 #: rhodecode/templates/files/files_browser.html:47 -#: rhodecode/templates/journal/journal.html:70 -#: rhodecode/templates/journal/journal.html:196 -#: 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 +#: rhodecode/templates/journal/journal.html:193 +#: rhodecode/templates/journal/journal.html:296 +#: rhodecode/templates/summary/summary.html:55 +#: rhodecode/templates/summary/summary.html:124 +#: rhodecode/templates/tags/tags.html:48 rhodecode/templates/tags/tags_data.html:6 msgid "Name" msgstr "" -#: rhodecode/templates/index_base.html:73 +#: rhodecode/templates/index_base.html:84 msgid "Last change" msgstr "" -#: 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:198 +#: rhodecode/templates/index_base.html:85 rhodecode/templates/index_base.html:183 +#: rhodecode/templates/index_base.html:273 +#: rhodecode/templates/admin/repos/repos.html:74 +#: rhodecode/templates/admin/users/user_edit_my_account.html:174 +#: rhodecode/templates/journal/journal.html:195 +#: rhodecode/templates/journal/journal.html:298 msgid "Tip" msgstr "" -#: rhodecode/templates/index_base.html:75 rhodecode/templates/index_base.html:181 -#: rhodecode/templates/index_base.html:269 +#: rhodecode/templates/index_base.html:86 rhodecode/templates/index_base.html:185 +#: rhodecode/templates/index_base.html:275 #: rhodecode/templates/admin/repos/repo_edit.html:121 -#: rhodecode/templates/admin/repos/repos.html:73 +#: rhodecode/templates/admin/repos/repos.html:76 msgid "Owner" 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 +#: rhodecode/templates/index_base.html:87 msgid "Atom" msgstr "" -#: 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/index_base.html:171 rhodecode/templates/index_base.html:209 +#: rhodecode/templates/index_base.html:296 +#: rhodecode/templates/admin/repos/repos.html:97 +#: rhodecode/templates/admin/users/user_edit_my_account.html:196 #: rhodecode/templates/admin/users/users.html:107 -#: rhodecode/templates/bookmarks/bookmarks.html:60 -#: rhodecode/templates/branches/branches.html:76 -#: rhodecode/templates/journal/journal.html:221 -#: rhodecode/templates/tags/tags.html:77 +#: rhodecode/templates/bookmarks/bookmarks.html:58 +#: rhodecode/templates/branches/branches.html:73 +#: rhodecode/templates/journal/journal.html:217 +#: rhodecode/templates/journal/journal.html:320 +#: rhodecode/templates/tags/tags.html:74 msgid "Click to sort ascending" msgstr "" -#: 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/index_base.html:172 rhodecode/templates/index_base.html:210 +#: rhodecode/templates/index_base.html:297 +#: rhodecode/templates/admin/repos/repos.html:98 +#: rhodecode/templates/admin/users/user_edit_my_account.html:197 #: rhodecode/templates/admin/users/users.html:108 -#: rhodecode/templates/bookmarks/bookmarks.html:61 -#: rhodecode/templates/branches/branches.html:77 -#: rhodecode/templates/journal/journal.html:222 -#: rhodecode/templates/tags/tags.html:78 +#: rhodecode/templates/bookmarks/bookmarks.html:59 +#: rhodecode/templates/branches/branches.html:74 +#: rhodecode/templates/journal/journal.html:218 +#: rhodecode/templates/journal/journal.html:321 +#: rhodecode/templates/tags/tags.html:75 msgid "Click to sort descending" msgstr "" -#: rhodecode/templates/index_base.html:177 rhodecode/templates/index_base.html:267 +#: rhodecode/templates/index_base.html:181 rhodecode/templates/index_base.html:271 msgid "Last Change" msgstr "" -#: 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/index_base.html:211 +#: rhodecode/templates/admin/repos/repos.html:99 +#: rhodecode/templates/admin/users/user_edit_my_account.html:198 #: rhodecode/templates/admin/users/users.html:109 -#: rhodecode/templates/bookmarks/bookmarks.html:62 -#: rhodecode/templates/branches/branches.html:78 -#: rhodecode/templates/journal/journal.html:223 -#: rhodecode/templates/tags/tags.html:79 +#: rhodecode/templates/bookmarks/bookmarks.html:60 +#: rhodecode/templates/branches/branches.html:75 +#: rhodecode/templates/journal/journal.html:219 +#: rhodecode/templates/journal/journal.html:322 +#: rhodecode/templates/tags/tags.html:76 msgid "No records found." msgstr "" -#: 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/index_base.html:212 rhodecode/templates/index_base.html:299 +#: rhodecode/templates/admin/repos/repos.html:100 +#: rhodecode/templates/admin/users/user_edit_my_account.html:199 #: rhodecode/templates/admin/users/users.html:110 -#: rhodecode/templates/bookmarks/bookmarks.html:63 -#: rhodecode/templates/branches/branches.html:79 -#: rhodecode/templates/journal/journal.html:224 -#: rhodecode/templates/tags/tags.html:80 +#: rhodecode/templates/bookmarks/bookmarks.html:61 +#: rhodecode/templates/branches/branches.html:76 +#: rhodecode/templates/journal/journal.html:220 +#: rhodecode/templates/journal/journal.html:323 +#: rhodecode/templates/tags/tags.html:77 msgid "Data error." msgstr "" -#: 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/index_base.html:213 rhodecode/templates/index_base.html:300 +#: rhodecode/templates/admin/repos/repos.html:101 +#: rhodecode/templates/admin/users/user_edit_my_account.html:58 +#: rhodecode/templates/admin/users/user_edit_my_account.html:200 #: rhodecode/templates/admin/users/users.html:111 -#: rhodecode/templates/bookmarks/bookmarks.html:64 -#: rhodecode/templates/branches/branches.html:80 -#: rhodecode/templates/journal/journal.html:62 -#: rhodecode/templates/journal/journal.html:225 -#: rhodecode/templates/tags/tags.html:81 +#: rhodecode/templates/bookmarks/bookmarks.html:62 +#: rhodecode/templates/branches/branches.html:77 +#: rhodecode/templates/journal/journal.html:221 +#: rhodecode/templates/journal/journal.html:324 +#: rhodecode/templates/tags/tags.html:78 msgid "Loading..." msgstr "" -#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54 -msgid "Sign In" +#: rhodecode/templates/index_base.html:298 +msgid "No repositories found." +msgstr "" + +#: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:227 +msgid "Log In" msgstr "" #: rhodecode/templates/login.html:21 -msgid "Sign In to" +#, python-format +msgid "Log In to %s" msgstr "" #: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20 #: rhodecode/templates/admin/admin_log.html:5 #: rhodecode/templates/admin/users/user_add.html:32 -#: rhodecode/templates/admin/users/user_edit.html:50 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26 -#: rhodecode/templates/base/base.html:83 -#: rhodecode/templates/summary/summary.html:131 +#: rhodecode/templates/admin/users/user_edit.html:57 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:31 +#: rhodecode/templates/admin/users/users.html:77 +#: rhodecode/templates/base/base.html:203 +#: rhodecode/templates/summary/summary.html:123 msgid "Username" msgstr "" #: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29 #: rhodecode/templates/admin/ldap/ldap.html:46 #: rhodecode/templates/admin/users/user_add.html:41 -#: rhodecode/templates/base/base.html:92 +#: rhodecode/templates/base/base.html:212 msgid "Password" msgstr "" @@ -1464,16 +1651,20 @@ msgstr "" msgid "Remember me" msgstr "" +#: rhodecode/templates/login.html:54 +msgid "Sign In" +msgstr "" + #: rhodecode/templates/login.html:60 msgid "Forgot your password ?" msgstr "" -#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103 +#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:223 msgid "Don't have an account ?" msgstr "" #: rhodecode/templates/password_reset.html:5 -msgid "Reset your password" +msgid "Password Reset" msgstr "" #: rhodecode/templates/password_reset.html:11 @@ -1506,23 +1697,23 @@ msgstr "" #: 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 +#: rhodecode/templates/admin/users/user_edit.html:97 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62 msgid "First Name" msgstr "" #: 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 +#: rhodecode/templates/admin/users/user_edit.html:106 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71 msgid "Last Name" msgstr "" #: 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 +#: rhodecode/templates/admin/users/user_edit.html:115 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80 +#: rhodecode/templates/summary/summary.html:125 msgid "Email" msgstr "" @@ -1534,50 +1725,38 @@ msgstr "" msgid "Your account must wait for activation by administrator" msgstr "" -#: rhodecode/templates/repo_switcher_list.html:11 +#: rhodecode/templates/repo_switcher_list.html:10 #: 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 +#: rhodecode/templates/data_table/_dt_elements.html:61 +#: rhodecode/templates/summary/summary.html:77 msgid "Private repository" msgstr "" -#: rhodecode/templates/repo_switcher_list.html:16 +#: rhodecode/templates/repo_switcher_list.html:12 +#: rhodecode/templates/data_table/_dt_elements.html:63 +#: rhodecode/templates/summary/summary.html:79 msgid "Public repository" msgstr "" -#: rhodecode/templates/switch_to_list.html:3 -#: rhodecode/templates/branches/branches.html:14 -msgid "branches" -msgstr "" - #: rhodecode/templates/switch_to_list.html:10 #: rhodecode/templates/branches/branches_data.html:57 msgid "There are no branches yet" msgstr "" -#: rhodecode/templates/switch_to_list.html:15 -#: rhodecode/templates/shortlog/shortlog_data.html:10 -#: rhodecode/templates/tags/tags.html:15 -msgid "tags" -msgstr "" - #: rhodecode/templates/switch_to_list.html:22 #: rhodecode/templates/tags/tags_data.html:38 msgid "There are no tags yet" msgstr "" -#: rhodecode/templates/switch_to_list.html:28 -#: rhodecode/templates/bookmarks/bookmarks.html:15 -msgid "bookmarks" -msgstr "" - #: rhodecode/templates/switch_to_list.html:35 #: rhodecode/templates/bookmarks/bookmarks_data.html:32 msgid "There are no bookmarks yet" msgstr "" #: rhodecode/templates/admin/admin.html:5 rhodecode/templates/admin/admin.html:13 +#: rhodecode/templates/base/base.html:68 msgid "Admin journal" msgstr "" @@ -1599,11 +1778,13 @@ msgstr[0] "" msgstr[1] "" #: 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 +#: rhodecode/templates/admin/repos/repos.html:77 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 +#: rhodecode/templates/admin/users/user_edit_my_account.html:176 +#: rhodecode/templates/admin/users/users.html:87 +#: rhodecode/templates/admin/users_groups/users_groups.html:37 +#: rhodecode/templates/journal/journal.html:197 +#: rhodecode/templates/journal/journal.html:300 msgid "Action" msgstr "" @@ -1613,11 +1794,11 @@ msgid "Repository" msgstr "" #: rhodecode/templates/admin/admin_log.html:8 -#: rhodecode/templates/bookmarks/bookmarks.html:37 +#: rhodecode/templates/bookmarks/bookmarks.html:35 #: rhodecode/templates/bookmarks/bookmarks_data.html:7 -#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches.html:48 #: rhodecode/templates/branches/branches_data.html:7 -#: rhodecode/templates/tags/tags.html:52 rhodecode/templates/tags/tags_data.html:7 +#: rhodecode/templates/tags/tags.html:49 rhodecode/templates/tags/tags_data.html:7 msgid "Date" msgstr "" @@ -1635,6 +1816,7 @@ msgid "Repositories defaults" msgstr "" #: rhodecode/templates/admin/defaults/defaults.html:11 +#: rhodecode/templates/base/base.html:75 msgid "Defaults" msgstr "" @@ -1647,8 +1829,7 @@ 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 +#: rhodecode/templates/forks/fork.html:69 msgid "" "Private repositories are only visible to people explicitly added as " "collaborators." @@ -1676,7 +1857,7 @@ 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 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72 msgid "Enable locking" msgstr "" @@ -1687,14 +1868,18 @@ 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/permissions/permissions.html:92 +#: rhodecode/templates/admin/repos/repo_edit.html:148 +#: rhodecode/templates/admin/repos/repo_edit.html:173 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:80 #: 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/user_add.html:94 +#: rhodecode/templates/admin/users/user_edit.html:140 +#: rhodecode/templates/admin/users/user_edit.html:185 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:88 +#: rhodecode/templates/admin/users_groups/users_group_add.html:49 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:90 #: rhodecode/templates/admin/users_groups/users_group_edit.html:135 -#: rhodecode/templates/settings/repo_settings.html:94 msgid "Save" msgstr "" @@ -1703,7 +1888,9 @@ msgid "LDAP administration" msgstr "" #: rhodecode/templates/admin/ldap/ldap.html:11 -msgid "Ldap" +#: rhodecode/templates/admin/users/users.html:86 +#: rhodecode/templates/base/base.html:74 +msgid "LDAP" msgstr "" #: rhodecode/templates/admin/ldap/ldap.html:28 @@ -1784,7 +1971,7 @@ msgid "Comments" msgstr "" #: rhodecode/templates/admin/notifications/notifications.html:31 -#: rhodecode/templates/base/base.html:267 rhodecode/templates/base/base.html:269 +#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 msgid "Pull requests" msgstr "" @@ -1802,6 +1989,7 @@ msgid "Show notification" msgstr "" #: rhodecode/templates/admin/notifications/show_notification.html:9 +#: rhodecode/templates/base/base.html:241 msgid "Notifications" msgstr "" @@ -1810,11 +1998,12 @@ msgid "Permissions administration" 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:143 +#: rhodecode/templates/admin/repos/repo_edit.html:158 +#: rhodecode/templates/admin/repos/repo_edit.html:165 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64 +#: rhodecode/templates/admin/users/user_edit.html:150 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100 -#: rhodecode/templates/settings/repo_settings.html:86 +#: rhodecode/templates/base/base.html:73 msgid "Permissions" msgstr "" @@ -1828,30 +2017,21 @@ msgstr "" #: rhodecode/templates/admin/permissions/permissions.html:49 msgid "" -"All default permissions on each repository will be reset to choosen " +"All default permissions on each repository will be reset to chosen " "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" +msgid "Overwrite existing settings" 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" +"All default permissions on each repository group will be reset to chosen " +"permission, note that all custom default permission on repository groups will" +" be lost" msgstr "" #: rhodecode/templates/admin/permissions/permissions.html:69 @@ -1866,40 +2046,95 @@ msgstr "" msgid "Repository forking" msgstr "" -#: rhodecode/templates/admin/permissions/permissions.html:92 -#: rhodecode/templates/admin/repos/repo_edit.html:264 -msgid "set" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_add.html:5 -#: rhodecode/templates/admin/repos/repo_add_create_repository.html:5 -msgid "Add repository" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_add.html:11 -#: rhodecode/templates/admin/repos/repo_edit.html:11 -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10 +#: rhodecode/templates/admin/permissions/permissions.html:93 +#: rhodecode/templates/admin/permissions/permissions.html:154 +#: rhodecode/templates/admin/repos/repo_edit.html:149 +#: rhodecode/templates/admin/repos/repo_edit.html:174 +#: rhodecode/templates/admin/repos/repo_edit.html:388 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81 +#: rhodecode/templates/admin/settings/settings.html:115 +#: rhodecode/templates/admin/settings/settings.html:187 +#: rhodecode/templates/admin/settings/settings.html:278 +#: rhodecode/templates/admin/users/user_edit.html:141 +#: rhodecode/templates/admin/users/user_edit.html:186 +#: rhodecode/templates/admin/users/user_edit.html:235 +#: rhodecode/templates/admin/users/user_edit.html:283 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:89 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:136 +#: rhodecode/templates/files/files_add.html:80 +#: rhodecode/templates/files/files_edit.html:66 +#: rhodecode/templates/pullrequests/pullrequest.html:110 +msgid "Reset" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:103 +msgid "Default User Permissions" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:113 +#: rhodecode/templates/admin/users/user_edit.html:244 +msgid "Allowed IP addresses" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:127 +#: rhodecode/templates/admin/repos/repo_edit.html:347 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70 +#: rhodecode/templates/admin/users/user_edit.html:212 +#: rhodecode/templates/admin/users/user_edit.html:257 +#: rhodecode/templates/admin/users_groups/users_groups.html:46 +#: rhodecode/templates/data_table/_dt_elements.html:122 +#: rhodecode/templates/data_table/_dt_elements.html:130 +msgid "delete" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:128 +#: rhodecode/templates/admin/users/user_edit.html:258 +#, python-format +msgid "Confirm to delete this ip: %s" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:134 +#: rhodecode/templates/admin/users/user_edit.html:264 +msgid "All IP addresses are allowed" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:145 +#: rhodecode/templates/admin/users/user_edit.html:275 +msgid "New ip address" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:153 +#: rhodecode/templates/admin/repos/repo_add_base.html:73 +#: rhodecode/templates/admin/repos/repo_edit.html:387 +#: rhodecode/templates/admin/users/user_edit.html:234 +#: rhodecode/templates/admin/users/user_edit.html:282 +msgid "Add" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_add.html:12 +#: rhodecode/templates/admin/repos/repo_add.html:16 +#: rhodecode/templates/base/base.html:69 rhodecode/templates/base/base.html:103 +#: rhodecode/templates/base/base.html:263 msgid "Repositories" msgstr "" -#: rhodecode/templates/admin/repos/repo_add.html:13 -msgid "add new" +#: rhodecode/templates/admin/repos/repo_add.html:19 +msgid "Add new" msgstr "" #: rhodecode/templates/admin/repos/repo_add_base.html:20 -#: rhodecode/templates/summary/summary.html:104 -#: rhodecode/templates/summary/summary.html:105 +#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:97 msgid "Clone from" msgstr "" #: 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 "" #: rhodecode/templates/admin/repos/repo_add_base.html:33 -#: rhodecode/templates/forks/fork.html:54 +#: rhodecode/templates/forks/fork.html:51 msgid "Optionaly select a group to put this repository into." msgstr "" @@ -1909,57 +2144,39 @@ msgstr "" #: 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 +#: rhodecode/templates/forks/fork.html:38 msgid "Landing revision" msgstr "" #: 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 +#: rhodecode/templates/forks/fork.html:42 msgid "Default revision for files page, downloads, whoosh and readme" msgstr "" #: 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 +#: rhodecode/templates/forks/fork.html:60 msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "" -#: rhodecode/templates/admin/repos/repo_add_base.html:73 -msgid "add" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9 -msgid "add new repository" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:5 +#: rhodecode/templates/admin/repos/repo_edit.html:8 msgid "Edit repository" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:13 -#: rhodecode/templates/admin/users/user_edit.html:13 -#: rhodecode/templates/admin/users/user_edit.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" +#: rhodecode/templates/admin/repos/repo_edit.html:12 +#: rhodecode/templates/admin/settings/hooks.html:9 +#: rhodecode/templates/admin/settings/settings.html:11 +#: rhodecode/templates/base/base.html:76 rhodecode/templates/base/base.html:121 +#: rhodecode/templates/summary/summary.html:212 +msgid "Settings" msgstr "" #: rhodecode/templates/admin/repos/repo_edit.html:40 -#: rhodecode/templates/settings/repo_settings.html:39 msgid "Clone uri" msgstr "" #: 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 "" @@ -1967,174 +2184,203 @@ msgstr "" msgid "Change owner of this repository." 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: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:95 -msgid "Reset" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:152 -msgid "Administration" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:155 +#: rhodecode/templates/admin/repos/repo_edit.html:184 +msgid "Advanced settings" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:187 msgid "Statistics" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:159 +#: rhodecode/templates/admin/repos/repo_edit.html:191 msgid "Reset current statistics" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:159 +#: rhodecode/templates/admin/repos/repo_edit.html:191 msgid "Confirm to remove current statistics" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:162 +#: rhodecode/templates/admin/repos/repo_edit.html:194 msgid "Fetched to rev" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:163 +#: rhodecode/templates/admin/repos/repo_edit.html:195 msgid "Stats gathered" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:171 -msgid "Remote" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:175 -msgid "Pull changes from remote location" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:175 -msgid "Confirm to pull changes from remote side" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:186 -msgid "Cache" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:190 -msgid "Invalidate repository cache" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:190 -msgid "Confirm to invalidate repository cache" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html: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 "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" +msgid "Remote" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:207 +msgid "Pull changes from remote location" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:207 +msgid "Confirm to pull changes from remote side" 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 "Cache" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:222 +msgid "Invalidate repository cache" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:222 +msgid "Confirm to invalidate repository cache" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:225 +msgid "" +"Manually invalidate cache for this repository. On first access repository " +"will be cached again" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:230 +msgid "List of cached values" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:233 +msgid "Prefix" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:234 +msgid "Key" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:235 +#: rhodecode/templates/admin/users/user_add.html:86 +#: rhodecode/templates/admin/users/user_edit.html:124 +#: rhodecode/templates/admin/users/users.html:84 +#: rhodecode/templates/admin/users_groups/users_group_add.html:41 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:42 +#: rhodecode/templates/admin/users_groups/users_groups.html:36 +msgid "Active" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:250 +#: rhodecode/templates/base/base.html:280 rhodecode/templates/base/base.html:281 msgid "Public journal" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:224 +#: rhodecode/templates/admin/repos/repo_edit.html:256 msgid "Remove from public journal" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:226 +#: rhodecode/templates/admin/repos/repo_edit.html:258 msgid "Add to public journal" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:231 +#: rhodecode/templates/admin/repos/repo_edit.html:263 msgid "" "All actions made on this repository will be accessible to everyone in public " "journal" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:238 +#: rhodecode/templates/admin/repos/repo_edit.html:270 msgid "Locking" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:243 +#: rhodecode/templates/admin/repos/repo_edit.html:275 msgid "Unlock locked repo" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:243 +#: rhodecode/templates/admin/repos/repo_edit.html:275 msgid "Confirm to unlock repository" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:246 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "lock repo" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:246 -msgid "Confirm to lock repository" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:247 -msgid "Repository is not locked" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:252 -msgid "Force locking on repository. Works only when anonymous access is disabled" -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 -#: rhodecode/templates/settings/repo_settings.html:115 +msgid "Confirm to lock repository" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:279 +msgid "Repository is not locked" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:284 +msgid "Force locking on repository. Works only when anonymous access is disabled" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:291 +msgid "Set as fork of" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:296 +msgid "set" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:300 +msgid "Manually set this repository as a fork of another from the list" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:306 +#: rhodecode/templates/changeset/changeset_file_comment.html:41 +msgid "Delete" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:315 msgid "Remove this repository" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:278 -#: rhodecode/templates/settings/repo_settings.html:115 +#: rhodecode/templates/admin/repos/repo_edit.html:315 msgid "Confirm to delete this repository" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:282 -#: rhodecode/templates/settings/repo_settings.html:119 +#: rhodecode/templates/admin/repos/repo_edit.html:317 +#, python-format +msgid "this repository has %s fork" +msgid_plural "this repository has %s forks" +msgstr[0] "" +msgstr[1] "" + +#: rhodecode/templates/admin/repos/repo_edit.html:318 +msgid "Detach forks" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:319 +msgid "Delete forks" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:322 msgid "" "This repository will be renamed in a special way in order to be unaccesible " -"for RhodeCode and VCS systems. If you need fully delete it from file system " -"please do it manually" +"for RhodeCode and VCS systems. If you need to fully delete it from file " +"system please do it manually" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:336 +msgid "Extra fields" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:348 +#, python-format +msgid "Confirm to delete this field: %s" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:362 +msgid "New field key" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:370 +msgid "New field label" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:373 +msgid "Enter short label" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:379 +msgid "New field description" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:382 +msgid "Enter description of a field" msgstr "" #: rhodecode/templates/admin/repos/repo_edit_perms.html:3 @@ -2154,8 +2400,6 @@ 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:229 msgid "admin" msgstr "" @@ -2165,75 +2409,58 @@ msgid "member" msgstr "" #: rhodecode/templates/admin/repos/repo_edit_perms.html:16 -#: rhodecode/templates/data_table/_dt_elements.html:67 -#: rhodecode/templates/journal/journal.html:95 -#: rhodecode/templates/summary/summary.html:85 msgid "private repository" msgstr "" #: 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 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:20 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:35 msgid "default" msgstr "" #: 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 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:25 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:55 msgid "revoke" msgstr "" #: rhodecode/templates/admin/repos/repo_edit_perms.html:83 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:67 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:80 msgid "Add another member" msgstr "" #: rhodecode/templates/admin/repos/repo_edit_perms.html:97 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:100 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:103 -msgid "Failed to remove users group" +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:116 +msgid "Failed to remove user group" msgstr "" #: rhodecode/templates/admin/repos/repos.html:5 msgid "Repositories administration" msgstr "" -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:86 msgid "apply to children" msgstr "" -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 msgid "" -"Set or revoke permission to all children of that group, including " -"repositories and other groups" +"Set or revoke permission to all children of that group, including non-private" +" repositories and other groups" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 +#, python-format +msgid "%s Group Dashboard" 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 "" @@ -2242,80 +2469,78 @@ msgid "with" msgstr "" #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5 -msgid "Add repos group" -msgstr "" - -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10 -msgid "Repos groups" -msgstr "" - -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12 -msgid "add new repos group" -msgstr "" - -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50 +msgid "Add repository group" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:16 +#: rhodecode/templates/base/base.html:70 rhodecode/templates/base/base.html:82 +msgid "Repository groups" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:13 +msgid "Add new repository group" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:51 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:56 msgid "Group parent" msgstr "" -#: 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 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:59 msgid "save" msgstr "" #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5 -msgid "Edit repos group" -msgstr "" - -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12 -msgid "edit repos group" -msgstr "" - -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70 +msgid "Edit repository group" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:13 +#, python-format +msgid "Edit repository group %s" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:27 +msgid "Add child group" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:76 msgid "" "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 -msgid "Repositories groups administration" -msgstr "" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22 -msgid "ADD NEW GROUP" -msgstr "" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35 +msgid "Repository groups administration" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:45 msgid "Number of toplevel repositories" msgstr "" -#: 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 "" - -#: 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 "" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:64 +msgid "Edit" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:65 +#: rhodecode/templates/base/perms_summary.html:29 +#: rhodecode/templates/base/perms_summary.html:48 +#: rhodecode/templates/base/perms_summary.html:50 +#: rhodecode/templates/data_table/_dt_elements.html:116 +#: rhodecode/templates/data_table/_dt_elements.html:117 +msgid "edit" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70 #, 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" +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:78 +msgid "There are no repository groups yet" msgstr "" #: rhodecode/templates/admin/settings/hooks.html:5 @@ -2323,12 +2548,6 @@ msgstr "" msgid "Settings administration" msgstr "" -#: rhodecode/templates/admin/settings/hooks.html:9 -#: rhodecode/templates/admin/settings/settings.html:9 -#: rhodecode/templates/settings/repo_settings.html:13 -msgid "Settings" -msgstr "" - #: rhodecode/templates/admin/settings/hooks.html:24 msgid "Built in hooks - read only" msgstr "" @@ -2345,205 +2564,210 @@ msgstr "" msgid "Failed to remove hook" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:24 +#: rhodecode/templates/admin/settings/settings.html:26 msgid "Remap and rescan repositories" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:32 -msgid "rescan option" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:38 +#: rhodecode/templates/admin/settings/settings.html:34 +msgid "Rescan option" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:40 msgid "" "In case a repository was deleted from filesystem and there are leftovers in " "the database check this option to scan obsolete data in database and remove " "it." msgstr "" -#: rhodecode/templates/admin/settings/settings.html:39 -msgid "destroy old data" -msgstr "" - #: rhodecode/templates/admin/settings/settings.html:41 +msgid "Destroy old data" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:43 msgid "" "Rescan repositories location for new repositories. Also deletes obsolete if " "`destroy` flag is checked " msgstr "" -#: rhodecode/templates/admin/settings/settings.html:46 +#: rhodecode/templates/admin/settings/settings.html:48 msgid "Rescan repositories" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:52 +#: rhodecode/templates/admin/settings/settings.html:54 msgid "Whoosh indexing" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:60 -msgid "index build option" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:65 -msgid "build from scratch" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:71 +#: rhodecode/templates/admin/settings/settings.html:62 +msgid "Index build option" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:67 +msgid "Build from scratch" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:73 msgid "Reindex" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:77 +#: rhodecode/templates/admin/settings/settings.html:79 msgid "Global application settings" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:86 -msgid "Application name" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:95 -msgid "Realm text" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:104 -msgid "GA code" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:112 -#: rhodecode/templates/admin/settings/settings.html:178 -#: rhodecode/templates/admin/settings/settings.html:268 +#: rhodecode/templates/admin/settings/settings.html:88 +msgid "Site branding" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:97 +msgid "HTTP authentication realm" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:106 +msgid "Google Analytics code" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:114 +#: rhodecode/templates/admin/settings/settings.html:186 +#: rhodecode/templates/admin/settings/settings.html:277 msgid "Save settings" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:119 +#: rhodecode/templates/admin/settings/settings.html:121 msgid "Visualisation settings" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:127 +#: rhodecode/templates/admin/settings/settings.html:129 msgid "General" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:132 +#: rhodecode/templates/admin/settings/settings.html:134 msgid "Use lightweight dashboard" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:139 +#: rhodecode/templates/admin/settings/settings.html:140 +msgid "Use repository extra fields" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:147 msgid "Icons" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:144 +#: rhodecode/templates/admin/settings/settings.html:152 msgid "Show public repo icon on repositories" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:148 +#: rhodecode/templates/admin/settings/settings.html:156 msgid "Show private repo icon on repositories" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:155 +#: rhodecode/templates/admin/settings/settings.html:163 msgid "Meta-Tagging" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:160 +#: rhodecode/templates/admin/settings/settings.html:168 msgid "Stylify recognised metatags:" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:187 +#: rhodecode/templates/admin/settings/settings.html:195 msgid "VCS settings" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:196 +#: rhodecode/templates/admin/settings/settings.html:204 msgid "Web" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:201 -msgid "require ssl for vcs operations" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:203 +#: rhodecode/templates/admin/settings/settings.html:209 +msgid "Require SSL for vcs operations" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:211 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 +#: rhodecode/templates/admin/settings/settings.html:217 msgid "Hooks" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:214 -msgid "Update repository after push (hg update)" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:218 -msgid "Show repository size after push" -msgstr "" - #: rhodecode/templates/admin/settings/settings.html:222 -msgid "Log user push commands" +msgid "Update repository after push (hg update)" msgstr "" #: rhodecode/templates/admin/settings/settings.html:226 -msgid "Log user pull commands" +msgid "Show repository size after push" msgstr "" #: rhodecode/templates/admin/settings/settings.html:230 -msgid "advanced setup" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:235 +msgid "Log user push commands" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:234 +msgid "Log user pull commands" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:238 +msgid "Advanced setup" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:243 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 +#: rhodecode/templates/admin/settings/settings.html:248 +msgid "Enable largefiles extension" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:252 +msgid "Enable hgsubversion extension" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:254 msgid "" -"Requires hgsubversion library installed. Allows clonning from svn remote " +"Requires hgsubversion library installed. Allows cloning from svn remote " "locations" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:256 +#: rhodecode/templates/admin/settings/settings.html:264 msgid "Repositories location" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:261 +#: rhodecode/templates/admin/settings/settings.html:269 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:262 -#: rhodecode/templates/base/base.html:221 -msgid "unlock" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:263 +#: rhodecode/templates/admin/settings/settings.html:270 +#: rhodecode/templates/base/base.html:131 +msgid "Unlock" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:272 msgid "" "Location where repositories are stored. After changing this value a restart, " "and rescan is required" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:283 +#: rhodecode/templates/admin/settings/settings.html:292 msgid "Test Email" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:291 +#: rhodecode/templates/admin/settings/settings.html:300 msgid "Email to" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:299 -msgid "Send" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:305 -msgid "System Info and Packages" -msgstr "" - #: rhodecode/templates/admin/settings/settings.html:308 -msgid "show" +msgid "Send" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:314 +msgid "System Info and Packages" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:317 +#: rhodecode/templates/changelog/changelog.html:42 +msgid "Show" msgstr "" #: rhodecode/templates/admin/users/user_add.html:5 @@ -2552,11 +2776,13 @@ msgstr "" #: rhodecode/templates/admin/users/user_add.html:10 #: rhodecode/templates/admin/users/user_edit.html:11 +#: rhodecode/templates/base/base.html:71 msgid "Users" msgstr "" #: rhodecode/templates/admin/users/user_add.html:12 -msgid "add new user" +#: rhodecode/templates/admin/users/users.html:23 +msgid "Add new user" msgstr "" #: rhodecode/templates/admin/users/user_add.html:50 @@ -2567,6 +2793,12 @@ msgstr "" msgid "Edit user" msgstr "" +#: rhodecode/templates/admin/users/user_edit.html:13 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:13 +#, python-format +msgid "Edit %s" +msgstr "" + #: rhodecode/templates/admin/users/user_edit.html:34 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:10 msgid "Change your avatar at" @@ -2582,26 +2814,31 @@ msgstr "" msgid "API key" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:63 +#: rhodecode/templates/admin/users/user_edit.html:50 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:25 +msgid "Current IP" +msgstr "" + +#: rhodecode/templates/admin/users/user_edit.html:70 msgid "LDAP DN" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:72 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35 +#: rhodecode/templates/admin/users/user_edit.html:79 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 msgid "New password" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:81 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 +#: rhodecode/templates/admin/users/user_edit.html:88 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53 msgid "New password confirmation" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:151 +#: rhodecode/templates/admin/users/user_edit.html:158 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108 msgid "Inherit default permissions" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:156 +#: rhodecode/templates/admin/users/user_edit.html:163 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113 #, python-format msgid "" @@ -2609,53 +2846,31 @@ msgid "" "options does not have any action" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:162 +#: rhodecode/templates/admin/users/user_edit.html:169 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119 msgid "Create repositories" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:170 +#: rhodecode/templates/admin/users/user_edit.html:177 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127 msgid "Fork repositories" 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 -msgid "Nothing here yet" -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:217 -#: rhodecode/templates/admin/users_groups/users_group_edit.html:185 -msgid "Permission" -msgstr "" - -#: 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:247 +#: rhodecode/templates/admin/users/user_edit.html:200 msgid "Email addresses" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:260 +#: rhodecode/templates/admin/users/user_edit.html:213 #, python-format msgid "Confirm to delete this email: %s" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:274 +#: rhodecode/templates/admin/users/user_edit.html:227 msgid "New email address" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:281 -msgid "Add" -msgstr "" - #: rhodecode/templates/admin/users/user_edit_my_account.html:5 -#: rhodecode/templates/base/base.html:124 +#: rhodecode/templates/base/base.html:242 msgid "My account" msgstr "" @@ -2668,7 +2883,7 @@ msgid "My permissions" msgstr "" #: rhodecode/templates/admin/users/user_edit_my_account.html:38 -#: rhodecode/templates/journal/journal.html:49 +#: rhodecode/templates/journal/journal.html:54 msgid "My repos" msgstr "" @@ -2676,131 +2891,97 @@ msgstr "" msgid "My pull requests" msgstr "" -#: rhodecode/templates/admin/users/user_edit_my_account.html:45 -msgid "Add repo" -msgstr "" - #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:2 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:4 +msgid "Show closed pull requests" +msgstr "" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:6 msgid "Opened by me" msgstr "" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10 -#, python-format -msgid "Pull request #%s opened on %s" -msgstr "" - #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15 +#, python-format +msgid "Pull request #%s opened on %s" +msgstr "" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:17 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:45 +#: rhodecode/templates/pullrequests/pullrequest_data.html:7 +#: rhodecode/templates/pullrequests/pullrequest_show.html:27 +#: rhodecode/templates/pullrequests/pullrequest_show.html:42 +msgid "Closed" +msgstr "" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:23 msgid "Confirm to delete this pull request" msgstr "" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:26 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:30 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:51 +msgid "Nothing here yet" +msgstr "" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:34 msgid "I participate in" msgstr "" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:33 -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:30 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:42 +#: rhodecode/templates/pullrequests/pullrequest_data.html:11 #, python-format msgid "Pull request #%s opened by %s on %s" 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: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_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_page_repos.html:42 -msgid "No repositories yet" -msgstr "" - -#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40 -#: rhodecode/templates/journal/journal_page_repos.html:44 -msgid "create one now" -msgstr "" - #: rhodecode/templates/admin/users/users.html:5 msgid "Users administration" msgstr "" #: rhodecode/templates/admin/users/users.html:9 -#: rhodecode/templates/base/base.html:235 msgid "users" msgstr "" -#: rhodecode/templates/admin/users/users.html:23 -msgid "ADD NEW USER" -msgstr "" - -#: rhodecode/templates/admin/users/users.html:77 -msgid "username" -msgstr "" - #: rhodecode/templates/admin/users/users.html:80 -msgid "firstname" +msgid "Firstname" msgstr "" #: rhodecode/templates/admin/users/users.html:81 -msgid "lastname" +msgid "Lastname" msgstr "" #: rhodecode/templates/admin/users/users.html:82 -msgid "last login" -msgstr "" - -#: rhodecode/templates/admin/users/users.html:84 -#: rhodecode/templates/admin/users_groups/users_groups.html:34 -msgid "active" -msgstr "" - -#: rhodecode/templates/admin/users/users.html:86 -#: rhodecode/templates/base/base.html:238 -msgid "ldap" +msgid "Last login" msgstr "" #: rhodecode/templates/admin/users_groups/users_group_add.html:5 -msgid "Add users group" +msgid "Add user group" msgstr "" #: rhodecode/templates/admin/users_groups/users_group_add.html:10 -#: rhodecode/templates/admin/users_groups/users_groups.html:9 -msgid "Users groups" +#: rhodecode/templates/admin/users_groups/users_groups.html:11 +#: rhodecode/templates/base/base.html:72 +msgid "User groups" msgstr "" #: rhodecode/templates/admin/users_groups/users_group_add.html:12 -msgid "add new users group" +#: rhodecode/templates/admin/users_groups/users_groups.html:25 +msgid "Add new user group" msgstr "" #: rhodecode/templates/admin/users_groups/users_group_edit.html:5 -msgid "Edit users group" +msgid "Edit user group" msgstr "" #: rhodecode/templates/admin/users_groups/users_group_edit.html:11 -msgid "UsersGroups" +msgid "UserGroups" msgstr "" #: rhodecode/templates/admin/users_groups/users_group_edit.html:50 +#: rhodecode/templates/admin/users_groups/users_groups.html:35 msgid "Members" msgstr "" #: rhodecode/templates/admin/users_groups/users_group_edit.html:58 -msgid "Choosen group members" +msgid "Chosen group members" msgstr "" #: rhodecode/templates/admin/users_groups/users_group_edit.html:61 @@ -2815,249 +2996,256 @@ msgstr "" msgid "Add all elements" msgstr "" -#: rhodecode/templates/admin/users_groups/users_group_edit.html:146 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:150 msgid "Group members" msgstr "" -#: rhodecode/templates/admin/users_groups/users_group_edit.html:163 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:167 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 "" - -#: rhodecode/templates/admin/users_groups/users_groups.html:23 -msgid "ADD NEW USER GROUP" -msgstr "" - -#: rhodecode/templates/admin/users_groups/users_groups.html:32 -msgid "group name" -msgstr "" - -#: rhodecode/templates/admin/users_groups/users_groups.html:33 -#: rhodecode/templates/base/root.html:46 -msgid "members" -msgstr "" - -#: rhodecode/templates/admin/users_groups/users_groups.html:45 +msgid "User groups administration" +msgstr "" + +#: rhodecode/templates/admin/users_groups/users_groups.html:47 #, python-format -msgid "Confirm to delete this users group: %s" -msgstr "" - -#: rhodecode/templates/base/base.html:41 +msgid "Confirm to delete this user group: %s" +msgstr "" + +#: rhodecode/templates/base/base.html:42 msgid "Submit a bug" msgstr "" -#: rhodecode/templates/base/base.html:77 -msgid "Login to your account" -msgstr "" - -#: rhodecode/templates/base/base.html:100 -msgid "Forgot password ?" -msgstr "" - -#: rhodecode/templates/base/base.html:107 -msgid "Log In" +#: rhodecode/templates/base/base.html:108 +#: rhodecode/templates/data_table/_dt_elements.html:9 +#: rhodecode/templates/data_table/_dt_elements.html:11 +#: rhodecode/templates/data_table/_dt_elements.html:13 +#: rhodecode/templates/pullrequests/pullrequest_show.html:81 +#: rhodecode/templates/summary/summary.html:8 +msgid "Summary" +msgstr "" + +#: rhodecode/templates/base/base.html:109 +#: rhodecode/templates/changelog/changelog.html:11 +#: rhodecode/templates/data_table/_dt_elements.html:17 +#: rhodecode/templates/data_table/_dt_elements.html:19 +#: rhodecode/templates/data_table/_dt_elements.html:21 +msgid "Changelog" +msgstr "" + +#: rhodecode/templates/base/base.html:110 +#: rhodecode/templates/data_table/_dt_elements.html:25 +#: rhodecode/templates/data_table/_dt_elements.html:27 +#: rhodecode/templates/data_table/_dt_elements.html:29 +#: rhodecode/templates/files/files.html:12 +msgid "Files" +msgstr "" + +#: rhodecode/templates/base/base.html:112 +msgid "Switch To" +msgstr "" + +#: rhodecode/templates/base/base.html:114 rhodecode/templates/base/base.html:267 +msgid "loading..." msgstr "" #: rhodecode/templates/base/base.html:118 -msgid "Inbox" -msgstr "" - -#: 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/public_journal.html:4 -msgid "Journal" -msgstr "" - -#: rhodecode/templates/base/base.html:125 -msgid "Log Out" -msgstr "" - -#: rhodecode/templates/base/base.html:144 -msgid "Switch repository" -msgstr "" - -#: rhodecode/templates/base/base.html:146 -msgid "Products" -msgstr "" - -#: rhodecode/templates/base/base.html:152 rhodecode/templates/base/base.html:182 -#: rhodecode/templates/base/root.html:47 -msgid "loading..." -msgstr "" - -#: 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 "" - -#: 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 "" - -#: rhodecode/templates/base/base.html:175 rhodecode/templates/base/base.html:177 -#: rhodecode/templates/base/base.html:179 -msgid "Switch to" -msgstr "" - -#: 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 +msgid "Options" +msgstr "" + +#: rhodecode/templates/base/base.html:124 +#: rhodecode/templates/forks/forks_data.html:21 +msgid "Compare fork" +msgstr "" + +#: rhodecode/templates/base/base.html:126 +msgid "Lightweight changelog" +msgstr "" + +#: rhodecode/templates/base/base.html:127 rhodecode/templates/base/base.html:287 +#: rhodecode/templates/search/search.html:14 +#: rhodecode/templates/search/search.html:54 +msgid "Search" +msgstr "" + +#: rhodecode/templates/base/base.html:133 +msgid "Lock" +msgstr "" + +#: rhodecode/templates/base/base.html:141 +msgid "Follow" +msgstr "" + +#: rhodecode/templates/base/base.html:142 +msgid "Unfollow" +msgstr "" + +#: rhodecode/templates/base/base.html:145 #: rhodecode/templates/data_table/_dt_elements.html:33 #: rhodecode/templates/data_table/_dt_elements.html:35 -msgid "Files" -msgstr "" - -#: rhodecode/templates/base/base.html:195 rhodecode/templates/base/base.html:199 -msgid "Options" -msgstr "" - -#: rhodecode/templates/base/base.html:204 rhodecode/templates/base/base.html:206 -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:212 rhodecode/templates/base/root.html:50 -#: rhodecode/templates/changelog/changelog.html:43 -msgid "Open new pull request" -msgstr "" - -#: 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:223 -msgid "lock" -msgstr "" - -#: rhodecode/templates/base/base.html:234 -msgid "repositories groups" -msgstr "" - -#: rhodecode/templates/base/base.html:236 -msgid "users groups" -msgstr "" - -#: rhodecode/templates/base/base.html:237 -msgid "permissions" -msgstr "" - -#: 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:259 rhodecode/templates/base/base.html:261 -msgid "Forks" -msgstr "" - -#: 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 "" - -#: rhodecode/templates/base/root.html:42 -msgid "add another comment" +#: rhodecode/templates/data_table/_dt_elements.html:37 +#: rhodecode/templates/data_table/_dt_elements.html:74 +#: rhodecode/templates/forks/fork.html:9 +msgid "Fork" +msgstr "" + +#: rhodecode/templates/base/base.html:147 +msgid "Create Pull Request" +msgstr "" + +#: rhodecode/templates/base/base.html:153 +msgid "Show Pull Requests" +msgstr "" + +#: rhodecode/templates/base/base.html:153 +msgid "Pull Requests" +msgstr "" + +#: rhodecode/templates/base/base.html:190 +msgid "Not logged in" +msgstr "" + +#: rhodecode/templates/base/base.html:197 +msgid "Login to your account" +msgstr "" + +#: rhodecode/templates/base/base.html:220 +msgid "Forgot password ?" +msgstr "" + +#: rhodecode/templates/base/base.html:243 +msgid "Log Out" +msgstr "" + +#: rhodecode/templates/base/base.html:262 +msgid "Switch repository" +msgstr "" + +#: rhodecode/templates/base/base.html:274 +msgid "Show recent activity" +msgstr "" + +#: rhodecode/templates/base/base.html:275 +#: rhodecode/templates/journal/journal.html:4 +msgid "Journal" +msgstr "" + +#: rhodecode/templates/base/base.html:286 +msgid "Search in repositories" +msgstr "" + +#: rhodecode/templates/base/perms_summary.html:8 +msgid "No permissions defined yet" +msgstr "" + +#: rhodecode/templates/base/perms_summary.html:15 +msgid "Permission" +msgstr "" + +#: rhodecode/templates/base/perms_summary.html:16 +msgid "Edit Permission" msgstr "" #: rhodecode/templates/base/root.html:43 -#: rhodecode/templates/journal/journal.html:83 -#: rhodecode/templates/summary/summary.html:57 -msgid "Stop following this repository" +msgid "Add another comment" msgstr "" #: rhodecode/templates/base/root.html:44 -#: rhodecode/templates/summary/summary.html:61 -msgid "Start following this repository" +#: rhodecode/templates/data_table/_dt_elements.html:140 +msgid "Stop following this repository" msgstr "" #: rhodecode/templates/base/root.html:45 +msgid "Start following this repository" +msgstr "" + +#: rhodecode/templates/base/root.html:46 msgid "Group" msgstr "" +#: rhodecode/templates/base/root.html:47 +msgid "members" +msgstr "" + #: rhodecode/templates/base/root.html:48 -msgid "search truncated" +#: rhodecode/templates/pullrequests/pullrequest.html:181 +msgid "Loading ..." msgstr "" #: rhodecode/templates/base/root.html:49 -msgid "no matching files" +msgid "Search truncated" +msgstr "" + +#: rhodecode/templates/base/root.html:50 +msgid "No matching files" msgstr "" #: rhodecode/templates/base/root.html:51 -msgid "Open new pull request for selected changesets" +#: rhodecode/templates/changelog/changelog.html:36 +msgid "Open new pull request" msgstr "" #: rhodecode/templates/base/root.html:52 -msgid "Show selected changes __S -> __E" +msgid "Open new pull request for selected changesets" msgstr "" #: rhodecode/templates/base/root.html:53 +msgid "Show selected changesets __S -> __E" +msgstr "" + +#: rhodecode/templates/base/root.html:54 +msgid "Show selected changeset __S" +msgstr "" + +#: rhodecode/templates/base/root.html:55 msgid "Selection link" msgstr "" +#: rhodecode/templates/base/root.html:56 +#: rhodecode/templates/changeset/diff_block.html:8 +msgid "Collapse diff" +msgstr "" + +#: rhodecode/templates/base/root.html:57 +msgid "Expand diff" +msgstr "" + #: rhodecode/templates/bookmarks/bookmarks.html:5 #, python-format msgid "%s Bookmarks" msgstr "" -#: rhodecode/templates/bookmarks/bookmarks.html:39 +#: rhodecode/templates/bookmarks/bookmarks.html:37 #: rhodecode/templates/bookmarks/bookmarks_data.html:8 -#: rhodecode/templates/branches/branches.html:53 +#: rhodecode/templates/branches/branches.html:50 #: rhodecode/templates/branches/branches_data.html:8 -#: rhodecode/templates/tags/tags.html:54 rhodecode/templates/tags/tags_data.html:8 +#: rhodecode/templates/shortlog/shortlog_data.html:8 +#: rhodecode/templates/tags/tags.html:51 rhodecode/templates/tags/tags_data.html:8 msgid "Author" msgstr "" +#: rhodecode/templates/bookmarks/bookmarks.html:38 +#: rhodecode/templates/bookmarks/bookmarks_data.html:9 +#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches_data.html:9 +#: rhodecode/templates/shortlog/shortlog_data.html:5 +#: rhodecode/templates/tags/tags.html:52 rhodecode/templates/tags/tags_data.html:9 +msgid "Revision" +msgstr "" + #: rhodecode/templates/branches/branches.html:5 #, python-format msgid "%s Branches" msgstr "" -#: rhodecode/templates/branches/branches.html:29 +#: rhodecode/templates/branches/branches.html:26 msgid "Compare branches" msgstr "" -#: rhodecode/templates/branches/branches.html:56 +#: rhodecode/templates/branches/branches.html:53 #: 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 +#: rhodecode/templates/tags/tags.html:54 rhodecode/templates/tags/tags_data.html:10 msgid "Compare" msgstr "" @@ -3066,115 +3254,79 @@ msgstr "" msgid "%s Changelog" msgstr "" -#: rhodecode/templates/changelog/changelog.html:15 +#: rhodecode/templates/changelog/changelog.html:11 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" msgstr[0] "" msgstr[1] "" -#: rhodecode/templates/changelog/changelog.html:37 +#: rhodecode/templates/changelog/changelog.html:30 msgid "Clear selection" msgstr "" -#: rhodecode/templates/changelog/changelog.html:40 +#: rhodecode/templates/changelog/changelog.html:33 #: rhodecode/templates/forks/forks_data.html:19 #, python-format -msgid "compare fork with %s" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:40 +msgid "Compare fork with %s" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:33 msgid "Compare fork with parent" msgstr "" -#: rhodecode/templates/changelog/changelog.html:49 -msgid "Show" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:74 -#: rhodecode/templates/summary/summary.html:375 -msgid "show more" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:78 -msgid "Affected number of files, click to show more details" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:91 -#: rhodecode/templates/changeset/changeset.html:65 -#: rhodecode/templates/changeset/changeset_file_comment.html:20 -#: rhodecode/templates/changeset/changeset_range.html:46 -msgid "Changeset status" -msgstr "" - -#: 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:104 -msgid "Parent" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:110 -#: rhodecode/templates/changeset/changeset.html:42 -msgid "No parents" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:115 +#: rhodecode/templates/changelog/changelog.html:76 +#: rhodecode/templates/summary/summary.html:404 +msgid "Show more" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:89 +#: rhodecode/templates/changeset/changeset_range.html:86 +#, python-format +msgid "Bookmark %s" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:95 +#: rhodecode/templates/changeset/changeset.html:111 +#: rhodecode/templates/changeset/changeset_range.html:92 +#, python-format +msgid "Tag %s" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:100 #: rhodecode/templates/changeset/changeset.html:106 -#: rhodecode/templates/changeset/changeset_range.html:79 -msgid "merge" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:118 -#: rhodecode/templates/changeset/changeset.html:109 -#: 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 "" - -#: rhodecode/templates/changelog/changelog.html:124 -#: rhodecode/templates/changeset/changeset_range.html:88 -msgid "bookmark" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:130 -#: rhodecode/templates/changeset/changeset.html:114 -#: rhodecode/templates/changeset/changeset_range.html:94 -msgid "tag" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:301 +#: rhodecode/templates/changeset/changeset_range.html:80 +#, python-format +msgid "Branch %s" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:258 msgid "There are no changes yet" msgstr "" #: rhodecode/templates/changelog/changelog_details.html:4 -#: rhodecode/templates/changeset/changeset.html:94 -msgid "removed" +#: rhodecode/templates/changeset/changeset.html:91 +msgid "Removed" msgstr "" #: rhodecode/templates/changelog/changelog_details.html:5 -#: rhodecode/templates/changeset/changeset.html:95 -msgid "changed" +#: rhodecode/templates/changeset/changeset.html:92 +msgid "Changed" msgstr "" #: rhodecode/templates/changelog/changelog_details.html:6 -#: rhodecode/templates/changeset/changeset.html:96 -msgid "added" +#: rhodecode/templates/changeset/changeset.html:93 +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:98 -#: rhodecode/templates/changeset/changeset.html:99 -#: rhodecode/templates/changeset/changeset.html:100 +#: rhodecode/templates/changeset/changeset.html:95 +#: rhodecode/templates/changeset/changeset.html:96 +#: rhodecode/templates/changeset/changeset.html:97 #, python-format -msgid "affected %s files" +msgid "Affected %s files" msgstr "" #: rhodecode/templates/changeset/changeset.html:6 @@ -3182,112 +3334,144 @@ msgstr "" msgid "%s Changeset" msgstr "" -#: rhodecode/templates/changeset/changeset.html:14 -msgid "Changeset" -msgstr "" - -#: rhodecode/templates/changeset/changeset.html:52 +#: rhodecode/templates/changeset/changeset.html:39 +msgid "No parents" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:49 msgid "No children" msgstr "" -#: rhodecode/templates/changeset/changeset.html:70 -#: rhodecode/templates/changeset/diff_block.html:20 -msgid "raw diff" -msgstr "" - -#: rhodecode/templates/changeset/changeset.html:71 -msgid "patch diff" -msgstr "" - -#: rhodecode/templates/changeset/changeset.html:72 -#: rhodecode/templates/changeset/diff_block.html:21 -msgid "download diff" -msgstr "" - -#: rhodecode/templates/changeset/changeset.html:76 -#: rhodecode/templates/changeset/changeset_file_comment.html:82 +#: rhodecode/templates/changeset/changeset.html:62 +#: rhodecode/templates/changeset/changeset_file_comment.html:20 +#: rhodecode/templates/changeset/changeset_range.html:44 +msgid "Changeset status" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:67 +#: rhodecode/templates/changeset/diff_block.html:23 +msgid "Raw diff" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:68 +msgid "Patch diff" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:69 +#: rhodecode/templates/changeset/diff_block.html:24 +msgid "Download diff" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:73 +#: rhodecode/templates/changeset/changeset_file_comment.html:97 #, python-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "" msgstr[1] "" -#: rhodecode/templates/changeset/changeset.html:76 -#: rhodecode/templates/changeset/changeset_file_comment.html:82 +#: rhodecode/templates/changeset/changeset.html:73 +#: rhodecode/templates/changeset/changeset_file_comment.html:97 #, python-format msgid "(%d inline)" msgid_plural "(%d inline)" msgstr[0] "" msgstr[1] "" -#: rhodecode/templates/changeset/changeset.html:122 -#: rhodecode/templates/compare/compare_diff.html:44 -#: rhodecode/templates/pullrequests/pullrequest_show.html:76 +#: rhodecode/templates/changeset/changeset.html:103 +#: rhodecode/templates/changeset/changeset_range.html:77 +msgid "merge" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:119 +#: rhodecode/templates/compare/compare_diff.html:40 +#: rhodecode/templates/pullrequests/pullrequest_show.html:113 #, python-format msgid "%s file changed" msgid_plural "%s files changed" msgstr[0] "" msgstr[1] "" -#: rhodecode/templates/changeset/changeset.html:124 -#: rhodecode/templates/compare/compare_diff.html:46 -#: rhodecode/templates/pullrequests/pullrequest_show.html:78 +#: rhodecode/templates/changeset/changeset.html:121 +#: rhodecode/templates/compare/compare_diff.html:42 +#: rhodecode/templates/pullrequests/pullrequest_show.html:115 #, 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..." -msgstr "" - -#: rhodecode/templates/changeset/changeset_file_comment.html:45 -msgid "Commenting on line {1}." -msgstr "" - -#: rhodecode/templates/changeset/changeset_file_comment.html:46 -#: rhodecode/templates/changeset/changeset_file_comment.html:121 +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 +msgid "Showing a huge diff might take some time and resources" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 +msgid "Show full diff" +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:30 #, python-format -msgid "Comments parsed using %s syntax with %s support." -msgstr "" - -#: 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/templates/changeset/changeset_file_comment.html:59 -#: rhodecode/templates/changeset/changeset_file_comment.html:143 -msgid "Comment" +msgid "Status change on pull request #%s" +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:32 +#, python-format +msgid "Comment on pull request #%s" +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:57 +msgid "Submitting..." msgstr "" #: rhodecode/templates/changeset/changeset_file_comment.html:60 -#: rhodecode/templates/changeset/changeset_file_comment.html:71 -msgid "Hide" -msgstr "" - -#: rhodecode/templates/changeset/changeset_file_comment.html:67 +msgid "Commenting on line {1}." +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:61 +#: rhodecode/templates/changeset/changeset_file_comment.html:139 +#, python-format +msgid "Comments parsed using %s syntax with %s support." +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:63 +#: rhodecode/templates/changeset/changeset_file_comment.html:141 +msgid "Use @username inside this text to send notification to this RhodeCode user" +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:74 +#: rhodecode/templates/changeset/changeset_file_comment.html:161 +msgid "Comment" +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:75 +msgid "Cancel" +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:82 msgid "You need to be logged in to comment." msgstr "" -#: rhodecode/templates/changeset/changeset_file_comment.html:67 +#: rhodecode/templates/changeset/changeset_file_comment.html:82 msgid "Login now" msgstr "" -#: rhodecode/templates/changeset/changeset_file_comment.html:118 -msgid "Leave a comment" -msgstr "" - -#: rhodecode/templates/changeset/changeset_file_comment.html:125 -msgid "Check this to change current status of code-review for this changeset" -msgstr "" - -#: rhodecode/templates/changeset/changeset_file_comment.html:125 -msgid "change status" -msgstr "" - -#: rhodecode/templates/changeset/changeset_file_comment.html:145 +#: rhodecode/templates/changeset/changeset_file_comment.html:86 +msgid "Hide" +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:143 +msgid "Change status" +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:163 msgid "Comment and close" msgstr "" @@ -3296,97 +3480,118 @@ msgstr "" msgid "%s Changesets" msgstr "" -#: 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/changeset/changeset_range.html:52 msgid "Files affected" msgstr "" -#: rhodecode/templates/changeset/diff_block.html:19 -msgid "show full diff for this file" -msgstr "" - -#: rhodecode/templates/changeset/diff_block.html:27 -msgid "show inline comments" -msgstr "" - -#: rhodecode/templates/compare/compare_cs.html:5 +#: rhodecode/templates/changeset/diff_block.html:22 +msgid "Show full diff for this file" +msgstr "" + +#: rhodecode/templates/changeset/diff_block.html:30 +msgid "Show inline comments" +msgstr "" + +#: rhodecode/templates/changeset/diff_block.html:55 +msgid "Show file at latest version in this repo" +msgstr "" + +#: rhodecode/templates/changeset/diff_block.html:56 +msgid "Show file at initial version in this repo" +msgstr "" + +#: rhodecode/templates/compare/compare_cs.html:4 msgid "No changesets" msgstr "" -#: rhodecode/templates/compare/compare_diff.html:37 -#: rhodecode/templates/pullrequests/pullrequest_show.html:69 +#: rhodecode/templates/compare/compare_cs.html:32 +msgid "Ancestor" +msgstr "" + +#: rhodecode/templates/compare/compare_diff.html:5 +#, python-format +msgid "%s Compare" +msgstr "" + +#: rhodecode/templates/compare/compare_diff.html:9 +msgid "Compare revisions" +msgstr "" + +#: rhodecode/templates/compare/compare_diff.html:33 +#: rhodecode/templates/pullrequests/pullrequest_show.html:106 #, 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 +#: rhodecode/templates/compare/compare_diff.html:48 +#: rhodecode/templates/pullrequests/pullrequest_show.html:121 msgid "No files" msgstr "" -#: 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 "" - -#: rhodecode/templates/data_table/_dt_elements.html:60 -#: rhodecode/templates/journal/journal.html:89 -#: rhodecode/templates/summary/summary.html:77 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +msgid "confirm to show potentially huge diff" +msgstr "" + +#: rhodecode/templates/data_table/_dt_elements.html:54 +#: rhodecode/templates/summary/summary.html:69 msgid "Mercurial repository" msgstr "" -#: rhodecode/templates/data_table/_dt_elements.html:62 -#: rhodecode/templates/journal/journal.html:91 -#: rhodecode/templates/summary/summary.html:80 +#: rhodecode/templates/data_table/_dt_elements.html:56 +#: rhodecode/templates/summary/summary.html:72 msgid "Git repository" msgstr "" -#: rhodecode/templates/data_table/_dt_elements.html:69 -#: rhodecode/templates/journal/journal.html:97 -#: rhodecode/templates/summary/summary.html:87 -msgid "public repository" -msgstr "" - -#: rhodecode/templates/data_table/_dt_elements.html:80 -#: rhodecode/templates/summary/summary.html:96 -#: rhodecode/templates/summary/summary.html:97 -msgid "Fork of" -msgstr "" - -#: rhodecode/templates/data_table/_dt_elements.html:94 +#: rhodecode/templates/data_table/_dt_elements.html:74 +#, python-format +msgid "Fork of %s" +msgstr "" + +#: rhodecode/templates/data_table/_dt_elements.html:88 msgid "No changesets yet" msgstr "" -#: rhodecode/templates/data_table/_dt_elements.html:101 -#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:95 +#: rhodecode/templates/data_table/_dt_elements.html:97 #, 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 +#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:105 #, python-format msgid "Subscribe to %s atom feed" msgstr "" #: rhodecode/templates/data_table/_dt_elements.html:122 #, python-format +msgid "Confirm to delete this repository: %s" +msgstr "" + +#: rhodecode/templates/data_table/_dt_elements.html:131 +#, python-format msgid "Confirm to delete this user: %s" msgstr "" -#: rhodecode/templates/email_templates/changeset_comment.html:10 -msgid "New status$" +#: rhodecode/templates/email_templates/changeset_comment.html:9 +#: rhodecode/templates/email_templates/pull_request_comment.html:15 +msgid "New status" +msgstr "" + +#: rhodecode/templates/email_templates/changeset_comment.html:11 +#: rhodecode/templates/email_templates/pull_request_comment.html:9 +msgid "View this comment here" +msgstr "" + +#: rhodecode/templates/email_templates/changeset_comment.html:14 +msgid "Repo" +msgstr "" + +#: rhodecode/templates/email_templates/changeset_comment.html:16 +msgid "desc" msgstr "" #: rhodecode/templates/email_templates/main.html:8 @@ -3394,19 +3599,20 @@ msgid "This is a notification from Rhode msgstr "" #: rhodecode/templates/email_templates/password_reset.html:4 -msgid "Hello" +#, python-format +msgid "Hello %s" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:5 +msgid "We received a request to create a new password for your account." 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." +#: rhodecode/templates/email_templates/password_reset.html:11 +msgid "If you did not request new password please ignore this email." msgstr "" #: rhodecode/templates/email_templates/pull_request.html:4 @@ -3415,33 +3621,28 @@ msgid "User %s opened pull request for r msgstr "" #: rhodecode/templates/email_templates/pull_request.html:5 -msgid "title" +msgid "View this pull request here" msgstr "" #: rhodecode/templates/email_templates/pull_request.html:6 -#: rhodecode/templates/pullrequests/pullrequest.html:115 +msgid "title" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request.html:7 msgid "description" msgstr "" -#: rhodecode/templates/email_templates/pull_request.html:11 +#: rhodecode/templates/email_templates/pull_request.html:12 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 +#: rhodecode/templates/email_templates/pull_request_comment.html:3 #, 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" +msgid "Pull request #%s for repository %s" +msgstr "" + +#: rhodecode/templates/email_templates/pull_request_comment.html:13 +msgid "Closing pull request with status" msgstr "" #: rhodecode/templates/email_templates/registration.html:4 @@ -3452,106 +3653,104 @@ msgstr "" msgid "View this user here" msgstr "" -#: rhodecode/templates/errors/error_document.html:46 +#: rhodecode/templates/errors/error_document.html:55 #, python-format msgid "You will be redirected to %s in %s seconds" msgstr "" #: rhodecode/templates/files/file_diff.html:4 #, python-format -msgid "%s File diff" -msgstr "" - -#: rhodecode/templates/files/file_diff.html:12 +msgid "%s File Diff" +msgstr "" + +#: rhodecode/templates/files/file_diff.html:8 msgid "File diff" msgstr "" -#: rhodecode/templates/files/files.html:4 rhodecode/templates/files/files.html:74 +#: rhodecode/templates/files/files.html:4 rhodecode/templates/files/files.html:76 #, python-format -msgid "%s files" -msgstr "" - -#: rhodecode/templates/files/files.html:12 -#: rhodecode/templates/summary/summary.html:351 -msgid "files" +msgid "%s Files" +msgstr "" + +#: rhodecode/templates/files/files.html:30 +#: rhodecode/templates/files/files_add.html:31 +#: rhodecode/templates/files/files_edit.html:31 +#: rhodecode/templates/shortlog/shortlog_data.html:9 +msgid "Branch" msgstr "" #: rhodecode/templates/files/files_add.html:4 -#: rhodecode/templates/files/files_edit.html:4 #, python-format -msgid "%s Edit file" +msgid "%s Files Add" msgstr "" #: rhodecode/templates/files/files_add.html:19 -msgid "add file" -msgstr "" - -#: rhodecode/templates/files/files_add.html:40 +msgid "Add file" +msgstr "" + +#: rhodecode/templates/files/files_add.html:38 +#: rhodecode/templates/files/files_browser.html:31 +#: rhodecode/templates/shortlog/shortlog_data.html:78 msgid "Add new file" msgstr "" -#: rhodecode/templates/files/files_add.html:45 +#: rhodecode/templates/files/files_add.html:43 msgid "File Name" msgstr "" -#: rhodecode/templates/files/files_add.html:49 -#: rhodecode/templates/files/files_add.html:58 +#: rhodecode/templates/files/files_add.html:47 +#: rhodecode/templates/files/files_add.html:56 msgid "or" msgstr "" -#: rhodecode/templates/files/files_add.html:49 -#: rhodecode/templates/files/files_add.html:54 +#: rhodecode/templates/files/files_add.html:47 +#: rhodecode/templates/files/files_add.html:52 msgid "Upload file" msgstr "" -#: rhodecode/templates/files/files_add.html:58 +#: rhodecode/templates/files/files_add.html:56 msgid "Create new file" msgstr "" -#: rhodecode/templates/files/files_add.html:63 -#: rhodecode/templates/files/files_edit.html:39 +#: rhodecode/templates/files/files_add.html:61 +#: rhodecode/templates/files/files_edit.html:37 #: rhodecode/templates/files/files_ypjax.html:3 msgid "Location" msgstr "" -#: rhodecode/templates/files/files_add.html:67 +#: rhodecode/templates/files/files_add.html:65 msgid "use / to separate directories" msgstr "" -#: rhodecode/templates/files/files_add.html:77 -#: rhodecode/templates/files/files_edit.html:63 +#: rhodecode/templates/files/files_add.html:75 +#: rhodecode/templates/files/files_edit.html:61 #: rhodecode/templates/shortlog/shortlog_data.html:6 -msgid "commit message" -msgstr "" - -#: rhodecode/templates/files/files_add.html:81 -#: rhodecode/templates/files/files_edit.html:67 +msgid "Commit message" +msgstr "" + +#: rhodecode/templates/files/files_add.html:79 +#: rhodecode/templates/files/files_edit.html:65 msgid "Commit changes" msgstr "" #: rhodecode/templates/files/files_browser.html:13 -msgid "view" +msgid "View" msgstr "" #: rhodecode/templates/files/files_browser.html:14 -msgid "previous revision" +msgid "Previous revision" msgstr "" #: rhodecode/templates/files/files_browser.html:16 -msgid "next revision" +msgid "Next revision" msgstr "" #: rhodecode/templates/files/files_browser.html:23 -msgid "follow current branch" +msgid "Follow current branch" msgstr "" #: rhodecode/templates/files/files_browser.html:27 -msgid "search file list" -msgstr "" - -#: rhodecode/templates/files/files_browser.html:31 -#: rhodecode/templates/shortlog/shortlog_data.html:78 -msgid "add new file" +msgid "Search file list" msgstr "" #: rhodecode/templates/files/files_browser.html:35 @@ -3575,34 +3774,39 @@ msgid "Last modified" msgstr "" #: rhodecode/templates/files/files_browser.html:52 -msgid "Last commiter" +msgid "Last committer" +msgstr "" + +#: rhodecode/templates/files/files_edit.html:4 +#, python-format +msgid "%s Files Edit" msgstr "" #: rhodecode/templates/files/files_edit.html:19 -msgid "edit file" +msgid "Edit file" +msgstr "" + +#: rhodecode/templates/files/files_edit.html:47 +#: rhodecode/templates/files/files_source.html:23 +msgid "Show annotation" +msgstr "" + +#: rhodecode/templates/files/files_edit.html:48 +#: rhodecode/templates/files/files_source.html:25 +#: rhodecode/templates/files/files_source.html:55 +msgid "Show as raw" msgstr "" #: rhodecode/templates/files/files_edit.html:49 -#: rhodecode/templates/files/files_source.html:23 -msgid "show annotation" -msgstr "" - -#: 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 "" - -#: rhodecode/templates/files/files_edit.html:51 #: rhodecode/templates/files/files_source.html:26 -msgid "download as raw" -msgstr "" - -#: rhodecode/templates/files/files_edit.html:54 -msgid "source" -msgstr "" - -#: rhodecode/templates/files/files_edit.html:59 +msgid "Download as raw" +msgstr "" + +#: rhodecode/templates/files/files_edit.html:52 +msgid "Source" +msgstr "" + +#: rhodecode/templates/files/files_edit.html:57 msgid "Editing file" msgstr "" @@ -3611,15 +3815,15 @@ msgid "History" msgstr "" #: rhodecode/templates/files/files_history_box.html:9 -msgid "diff to revision" +msgid "Diff to revision" msgstr "" #: rhodecode/templates/files/files_history_box.html:10 -msgid "show at revision" +msgid "Show at revision" msgstr "" #: rhodecode/templates/files/files_history_box.html:11 -msgid "show full history" +msgid "Show full history" msgstr "" #: rhodecode/templates/files/files_history_box.html:16 @@ -3634,15 +3838,28 @@ msgid "Load file history" msgstr "" #: rhodecode/templates/files/files_source.html:21 -msgid "show source" -msgstr "" - -#: rhodecode/templates/files/files_source.html:44 +msgid "Show source" +msgstr "" + +#: rhodecode/templates/files/files_source.html:29 +#, python-format +msgid "Edit on branch:%s" +msgstr "" + +#: rhodecode/templates/files/files_source.html:31 +msgid "Edit on branch:?" +msgstr "" + +#: rhodecode/templates/files/files_source.html:31 +msgid "Editing files allowed only when on branch head revision" +msgstr "" + +#: rhodecode/templates/files/files_source.html:46 #, python-format msgid "Binary file (%s)" msgstr "" -#: rhodecode/templates/files/files_source.html:53 +#: rhodecode/templates/files/files_source.html:55 msgid "File is too big to display" msgstr "" @@ -3663,8 +3880,10 @@ msgstr "" msgid "%s Followers" msgstr "" -#: rhodecode/templates/followers/followers.html:13 -msgid "followers" +#: rhodecode/templates/followers/followers.html:9 +#: rhodecode/templates/summary/summary.html:183 +#: rhodecode/templates/summary/summary.html:184 +msgid "Followers" msgstr "" #: rhodecode/templates/followers/followers_data.html:12 @@ -3676,32 +3895,32 @@ msgstr "" msgid "%s Fork" msgstr "" -#: rhodecode/templates/forks/fork.html:31 +#: rhodecode/templates/forks/fork.html:28 msgid "Fork name" msgstr "" -#: rhodecode/templates/forks/fork.html:68 +#: rhodecode/templates/forks/fork.html:65 msgid "Private" msgstr "" -#: rhodecode/templates/forks/fork.html:77 +#: rhodecode/templates/forks/fork.html:74 msgid "Copy permissions" msgstr "" -#: rhodecode/templates/forks/fork.html:81 +#: rhodecode/templates/forks/fork.html:78 msgid "Copy permissions from forked repository" msgstr "" -#: rhodecode/templates/forks/fork.html:86 +#: rhodecode/templates/forks/fork.html:84 msgid "Update after clone" msgstr "" -#: rhodecode/templates/forks/fork.html:90 +#: rhodecode/templates/forks/fork.html:88 msgid "Checkout source after making a clone" msgstr "" -#: rhodecode/templates/forks/fork.html:94 -msgid "fork this repository" +#: rhodecode/templates/forks/fork.html:93 +msgid "Fork this repository" msgstr "" #: rhodecode/templates/forks/forks.html:5 @@ -3709,12 +3928,14 @@ msgstr "" msgid "%s Forks" msgstr "" -#: rhodecode/templates/forks/forks.html:13 -msgid "forks" +#: rhodecode/templates/forks/forks.html:9 +#: rhodecode/templates/summary/summary.html:189 +#: rhodecode/templates/summary/summary.html:190 +msgid "Forks" msgstr "" #: rhodecode/templates/forks/forks_data.html:17 -msgid "forked" +msgid "Forked" msgstr "" #: rhodecode/templates/forks/forks_data.html:42 @@ -3730,44 +3951,27 @@ msgid "RSS journal feed" msgstr "" #: rhodecode/templates/journal/journal.html:32 -#: rhodecode/templates/pullrequests/pullrequest.html:55 msgid "Refresh" msgstr "" #: rhodecode/templates/journal/journal.html:35 #: rhodecode/templates/journal/public_journal.html:24 -msgid "RSS feed" -msgstr "" - -#: rhodecode/templates/journal/journal.html:38 -#: rhodecode/templates/journal/public_journal.html:27 msgid "ATOM feed" msgstr "" -#: rhodecode/templates/journal/journal.html:49 +#: rhodecode/templates/journal/journal.html:51 msgid "Watched" msgstr "" -#: rhodecode/templates/journal/journal.html:54 -msgid "ADD" -msgstr "" - -#: rhodecode/templates/journal/journal.html:77 -msgid "following user" -msgstr "" - -#: rhodecode/templates/journal/journal.html:77 -msgid "user" -msgstr "" - -#: rhodecode/templates/journal/journal.html:110 -msgid "You are not following any users or repositories" -msgstr "" - #: rhodecode/templates/journal/journal_data.html:55 msgid "No entries yet" msgstr "" +#: rhodecode/templates/journal/public_journal.html:4 +#: rhodecode/templates/journal/public_journal.html:21 +msgid "Public Journal" +msgstr "" + #: rhodecode/templates/journal/public_journal.html:13 msgid "ATOM public journal feed" msgstr "" @@ -3776,147 +3980,126 @@ msgstr "" msgid "RSS public journal feed" msgstr "" -#: rhodecode/templates/journal/public_journal.html:21 -msgid "Public Journal" -msgstr "" - #: rhodecode/templates/pullrequests/pullrequest.html:4 -#: rhodecode/templates/pullrequests/pullrequest.html:12 +#: rhodecode/templates/pullrequests/pullrequest.html:8 msgid "New pull request" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:54 -msgid "refresh overview" -msgstr "" - -#: rhodecode/templates/pullrequests/pullrequest.html:66 +#: rhodecode/templates/pullrequests/pullrequest.html:52 msgid "Detailed compare view" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:70 -#: rhodecode/templates/pullrequests/pullrequest_show.html:100 +#: rhodecode/templates/pullrequests/pullrequest.html:56 +#: rhodecode/templates/pullrequests/pullrequest_show.html:137 msgid "Pull request reviewers" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:79 -#: rhodecode/templates/pullrequests/pullrequest_show.html:112 +#: rhodecode/templates/pullrequests/pullrequest.html:65 +#: rhodecode/templates/pullrequests/pullrequest_show.html:149 msgid "owner" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:91 -#: rhodecode/templates/pullrequests/pullrequest_show.html:127 +#: rhodecode/templates/pullrequests/pullrequest.html:77 msgid "Add reviewer to this pull request." msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:97 +#: rhodecode/templates/pullrequests/pullrequest.html:83 msgid "Create new pull request" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:106 +#: rhodecode/templates/pullrequests/pullrequest.html:92 +#: rhodecode/templates/pullrequests/pullrequest_data.html:14 #: rhodecode/templates/pullrequests/pullrequest_show.html:25 -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:33 msgid "Title" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:123 +#: rhodecode/templates/pullrequests/pullrequest.html:109 msgid "Send pull request" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:23 -#, python-format -msgid "Closed %s" -msgstr "" - -#: rhodecode/templates/pullrequests/pullrequest_show.html:23 +#: rhodecode/templates/pullrequests/pullrequest_show.html:4 #, python-format -msgid "with status %s" -msgstr "" - -#: rhodecode/templates/pullrequests/pullrequest_show.html:31 -msgid "Status" -msgstr "" - -#: rhodecode/templates/pullrequests/pullrequest_show.html:36 +msgid "%s Pull Request #%s" +msgstr "" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:35 +msgid "Review status" +msgstr "" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:40 msgid "Pull request status" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:44 +#: rhodecode/templates/pullrequests/pullrequest_show.html:53 msgid "Still not reviewed by" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:48 +#: rhodecode/templates/pullrequests/pullrequest_show.html:57 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" msgstr[0] "" msgstr[1] "" -#: 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" +#: rhodecode/templates/pullrequests/pullrequest_show.html:59 +msgid "Pull request was reviewed by all reviewers" msgstr "" #: rhodecode/templates/pullrequests/pullrequest_show.html:65 +msgid "Origin repository" +msgstr "" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:89 +msgid "Created on" +msgstr "" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:102 msgid "Compare view" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:112 +#: rhodecode/templates/pullrequests/pullrequest_show.html:149 msgid "reviewer" msgstr "" +#: rhodecode/templates/pullrequests/pullrequest_show.html:164 +msgid "Add or remove reviewer to this pull request." +msgstr "" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:168 +msgid "Save changes" +msgstr "" + #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4 -msgid "all pull requests" -msgstr "" - -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:12 -msgid "All pull requests" -msgstr "" - -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:27 -msgid "Closed" +#, python-format +msgid "%s Pull Requests" msgstr "" #: rhodecode/templates/search/search.html:6 -#, python-format -msgid "Search \"%s\" in repository: %s" +msgid "Search repository" msgstr "" #: rhodecode/templates/search/search.html:8 -#, python-format -msgid "Search \"%s\" in all repositories" -msgstr "" - -#: rhodecode/templates/search/search.html:12 -#: rhodecode/templates/search/search.html:32 -#, python-format -msgid "Search in repository: %s" -msgstr "" - -#: rhodecode/templates/search/search.html:14 -#: rhodecode/templates/search/search.html:34 +#: rhodecode/templates/search/search.html:16 msgid "Search in all repositories" msgstr "" -#: rhodecode/templates/search/search.html:48 +#: rhodecode/templates/search/search.html:50 msgid "Search term" msgstr "" -#: rhodecode/templates/search/search.html:60 +#: rhodecode/templates/search/search.html:62 msgid "Search in" msgstr "" -#: rhodecode/templates/search/search.html:63 -msgid "File contents" -msgstr "" - -#: rhodecode/templates/search/search.html:64 -msgid "Commit messages" -msgstr "" - #: rhodecode/templates/search/search.html:65 +msgid "File contents" +msgstr "" + +#: rhodecode/templates/search/search.html:66 +msgid "Commit messages" +msgstr "" + +#: rhodecode/templates/search/search.html:67 msgid "File names" msgstr "" @@ -3926,39 +4109,23 @@ msgstr "" msgid "Permission denied" msgstr "" -#: rhodecode/templates/settings/repo_settings.html:5 -#, python-format -msgid "%s Settings" -msgstr "" - -#: rhodecode/templates/settings/repo_settings.html:102 -msgid "Delete repository" -msgstr "" - -#: rhodecode/templates/settings/repo_settings.html:109 -msgid "Remove repo" -msgstr "" - #: rhodecode/templates/shortlog/shortlog.html:5 #, python-format -msgid "%s Shortlog" -msgstr "" - +msgid "%s Lightweight Changelog" +msgstr "" + +#: rhodecode/templates/shortlog/shortlog.html:11 #: rhodecode/templates/shortlog/shortlog.html:15 -#: rhodecode/templates/shortlog/shortlog.html:19 -msgid "shortlog" -msgstr "" - -#: rhodecode/templates/shortlog/shortlog_data.html:5 -msgid "revision" +msgid "Lightweight Changelog" msgstr "" #: rhodecode/templates/shortlog/shortlog_data.html:7 -msgid "age" -msgstr "" - -#: rhodecode/templates/shortlog/shortlog_data.html:8 -msgid "author" +msgid "Age" +msgstr "" + +#: rhodecode/templates/shortlog/shortlog_data.html:20 +#, python-format +msgid "Click to open associated pull request #%s" msgstr "" #: rhodecode/templates/shortlog/shortlog_data.html:75 @@ -3978,156 +4145,165 @@ msgstr "" msgid "%s Summary" msgstr "" -#: rhodecode/templates/summary/summary.html:12 -msgid "summary" -msgstr "" - -#: rhodecode/templates/summary/summary.html:20 +#: rhodecode/templates/summary/summary.html:16 #, python-format -msgid "repo %s ATOM feed" -msgstr "" - -#: rhodecode/templates/summary/summary.html:21 +msgid "%s ATOM feed" +msgstr "" + +#: rhodecode/templates/summary/summary.html:17 #, python-format -msgid "repo %s RSS feed" -msgstr "" - -#: rhodecode/templates/summary/summary.html:49 -#: rhodecode/templates/summary/summary.html:52 -msgid "ATOM" -msgstr "" - -#: rhodecode/templates/summary/summary.html:70 +msgid "%s RSS feed" +msgstr "" + +#: rhodecode/templates/summary/summary.html:62 #, python-format msgid "Repository locked by %s" msgstr "" -#: rhodecode/templates/summary/summary.html:72 +#: rhodecode/templates/summary/summary.html:64 msgid "Repository unlocked" msgstr "" -#: rhodecode/templates/summary/summary.html:91 +#: rhodecode/templates/summary/summary.html:83 #, python-format msgid "Non changable ID %s" msgstr "" +#: rhodecode/templates/summary/summary.html:88 +msgid "Public" +msgstr "" + +#: rhodecode/templates/summary/summary.html:88 +#: rhodecode/templates/summary/summary.html:89 +msgid "Fork of" +msgstr "" + #: rhodecode/templates/summary/summary.html:96 -msgid "public" -msgstr "" - -#: rhodecode/templates/summary/summary.html:104 -msgid "remote clone" -msgstr "" - -#: rhodecode/templates/summary/summary.html:125 +msgid "Remote clone" +msgstr "" + +#: rhodecode/templates/summary/summary.html:117 msgid "Contact" msgstr "" -#: rhodecode/templates/summary/summary.html:139 +#: rhodecode/templates/summary/summary.html:131 msgid "Clone url" msgstr "" -#: rhodecode/templates/summary/summary.html:142 +#: rhodecode/templates/summary/summary.html:136 msgid "Show by Name" msgstr "" +#: rhodecode/templates/summary/summary.html:137 +msgid "Show by ID" +msgstr "" + #: rhodecode/templates/summary/summary.html:143 -msgid "Show by ID" +msgid "Trending files" msgstr "" #: rhodecode/templates/summary/summary.html:151 -msgid "Trending files" +#: rhodecode/templates/summary/summary.html:167 +#: rhodecode/templates/summary/summary.html:232 +msgid "enable" msgstr "" #: 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:167 msgid "Download" msgstr "" +#: rhodecode/templates/summary/summary.html:163 +msgid "There are no downloads yet" +msgstr "" + +#: rhodecode/templates/summary/summary.html:165 +msgid "Downloads are disabled for this repository" +msgstr "" + #: rhodecode/templates/summary/summary.html:171 -msgid "There are no downloads yet" -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 +#: rhodecode/templates/summary/summary.html:174 msgid "Check this to download archive with subrepos" msgstr "" -#: rhodecode/templates/summary/summary.html:182 +#: rhodecode/templates/summary/summary.html:174 msgid "with subrepos" msgstr "" -#: rhodecode/templates/summary/summary.html:195 +#: rhodecode/templates/summary/summary.html:197 +msgid "Repository Size" +msgstr "" + +#: rhodecode/templates/summary/summary.html:204 +#: rhodecode/templates/summary/summary.html:206 +msgid "Feed" +msgstr "" + +#: rhodecode/templates/summary/summary.html:224 msgid "Commit activity by day / author" msgstr "" -#: rhodecode/templates/summary/summary.html:206 +#: rhodecode/templates/summary/summary.html:235 msgid "Stats gathered: " msgstr "" -#: rhodecode/templates/summary/summary.html:227 -msgid "Shortlog" -msgstr "" - -#: rhodecode/templates/summary/summary.html:229 +#: rhodecode/templates/summary/summary.html:256 +msgid "Latest changes" +msgstr "" + +#: rhodecode/templates/summary/summary.html:258 msgid "Quick start" msgstr "" -#: rhodecode/templates/summary/summary.html:243 +#: rhodecode/templates/summary/summary.html:272 #, python-format msgid "Readme file at revision '%s'" msgstr "" -#: rhodecode/templates/summary/summary.html:246 +#: rhodecode/templates/summary/summary.html:275 msgid "Permalink to this readme" msgstr "" -#: rhodecode/templates/summary/summary.html:304 +#: rhodecode/templates/summary/summary.html:333 #, python-format msgid "Download %s as %s" msgstr "" -#: rhodecode/templates/summary/summary.html:661 +#: rhodecode/templates/summary/summary.html:380 +msgid "files" +msgstr "" + +#: rhodecode/templates/summary/summary.html:690 msgid "commits" msgstr "" -#: rhodecode/templates/summary/summary.html:662 +#: rhodecode/templates/summary/summary.html:691 msgid "files added" msgstr "" -#: rhodecode/templates/summary/summary.html:663 +#: rhodecode/templates/summary/summary.html:692 msgid "files changed" msgstr "" -#: rhodecode/templates/summary/summary.html:664 +#: rhodecode/templates/summary/summary.html:693 msgid "files removed" msgstr "" -#: rhodecode/templates/summary/summary.html:667 +#: rhodecode/templates/summary/summary.html:695 msgid "commit" msgstr "" -#: rhodecode/templates/summary/summary.html:668 +#: rhodecode/templates/summary/summary.html:696 msgid "file added" msgstr "" -#: rhodecode/templates/summary/summary.html:669 +#: rhodecode/templates/summary/summary.html:697 msgid "file changed" msgstr "" -#: rhodecode/templates/summary/summary.html:670 +#: rhodecode/templates/summary/summary.html:698 msgid "file removed" msgstr "" @@ -4136,7 +4312,7 @@ msgstr "" msgid "%s Tags" msgstr "" -#: rhodecode/templates/tags/tags.html:29 +#: rhodecode/templates/tags/tags.html:26 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 11819a8a859aebc396c5278c4afa840673301490..e743048156b8cfced009def1ace879e8b079bc75 GIT binary patch literal 40619 zc$~F;34B#|mH&0=-)X0gRi{?Rs@K|dC1EWTD3m|~1PFvAKwE_NCGRGAYp(y?dB3LJO7LR@ZzuQw!4DCfL-4N% zt|E9F!7_q8bOXT;5Nsj%VS-1c{)+VbD#2R_{!r!}A^4XB|6R)Od;su$1mDZ+OZfqU z?;$vi;9n4Y^a0GXQ0j{a{vU#?Wn9SvST{uQg9Pgd>I4rEtRUD=@O=b7^&rMiCfG%A zCc!%hzWN~Ae@^gTf`1@*6T!R3q5lH}Zzed2;QI+aG7kG)D(&UtfKO0hHNkfg+%gVy zs2c}5?H-5yogzpmX&1(UuK!H%E?$2e=>EP;>^mb9^v}vfzuZjVRh)@^Kaq)bDl##z zKNII#L$H|OK7zCr?PrpPo?~> zN#K|FPQtpMB$&tNOz=K}Pfr5hogzp_qxBKIo6l;3k5fRZ3VN)c3clMn74&>j;FqTYukTLEP$?>5%6W(!Xyy@cP_ztoM)8G4Bti1J7Sf$9{e%^`DplJvU(n>JQ8Se+yCQ_`7=q#+$AoVQ*J7;0tZh{{r_`KAAc^3Bd$}H#=a~9

fS>+j z4(Rl*Y{<{;+0d`|X9JHV0@q}te;^xpZ<7Aovq6V0X+NC}x?Yg_&u0rgv$2kujr0AF zY|!o2x#06V2+|fconR@!C+7msFU*C!{{39g_nT7xqq*RNVS)cW7xHuaJm8lx59^L6 zxR&{lAdyNtIS+UZ%>$qRdLHI`Uk>oPL*Td^te2f5dLsw;uF3&DN~9dg!G52S`c~UXuAgp9}iEEbTwe1wOx&d2X4H`EQ?(b?=>z{mh&X{O8OE z{qpAn{}uDGUfF!ukLY}?(>WjKadx~PcACE4?zP_>$ z{PwklSpT00783mDg`nqzJkV*Lz`{JN{ljO2k1d-GsdPZRtY(>D+PS0WGies~e+ zIero7HE$8*ce#|S76I?gi!fi~BH-J#2nIMZkAR+JC+Xbo}o{us2f{ zi=Vg{{c0A2o^^|X-;Tvt@9bji|KeicH?SCVdu1{3{^?@i@s1^!?;}fa&i5<<9`gx) zoM5TcZ(V|Yomhf%yCLw^B{-*_5+qZm{dNiT&iH)HUzm^e*X3j0XYw)6p?sXfWhuX$ z5B%c!pwl~+0?!XD1wY)s6!Xnp3P0wFrSK2xmVytSlm3HCvEH|qf)9Tx<36zr_0tHJ zF&`}hKVDdd`L8Sky}z*x^SrhUbp0=a#M0Wk3SdVT6~K``K5Fb3Y~hE)|R4 zUkpC{mtxTOPsP~Johz{3{VSm7rmes^E?sCOH8&?4TXIB89udTqoza{+>D_~dO zu@ZRSv{LjX!5V_M6C{gRgXb#st8^tc;+$S`{d)AMy{x~{c)Vn^~W*q(Bt64KRyn;$2|c)p6~?d zI8|Wo6WC9&z{j6}epvei?DNx4U>^fdfS%uf0_UE10`&jm6OhmMuLit(HTY)QYV><* zHRv2$jdR$&8hY{AYMj^CSA(BlUk$qbel_+#|I;KJJpR)t_kJ3D{FP5*pWpm6_W!$2 zLyvrX4e3ti_chq(^)*=k3sU~h8i~KwV1GYb1Nz>)7WCKGVn2_pMSa0qiTBsS?+UI3 z9sAZo4ll07JYQUk`G2w&b}m7XTxIP;Pa=LUd=lreSIRvE$>eLldJ=p+^(n+HB?Kok zU7mvee)TEnk6S(1=X4MJz_lLC*X)6uo$x>&zw5!cKY2jcX(iz6l>|xEY8y+SPrg(F zdcIPEa~&zc_?t^1_v1@Jx5rCyZh=zp$<9*H=b*IrNcjt;!0+3oINv`Ayu}MVJ}hvW z7volXF<+$@blc+=HN>r(%k^!u3?{QGOK__<#2 z#k&mD-(#TPg9g@_WMIBo0v8#;XO)5RYYgneCvby|ub2KU(*J;zj~c-H1q1r&hLm41 zfai~;JYs;4e=m5vyA1GsWjLR|DZ@HA#|L8j8 zZI-XYyj!Jx7r|PB`(^xxD{)Srs)QU*twg_Nm7wQ}O0j#D;G=bw&_|mqaW1rxNG;d4XT6gkJi7CHUcHKjP<)_+eMF{gS8fLtl8M+~CK&d!&3&%4ek9C>Gz&ytVel7sK ze-r>7zYTzH?+k+9ZVjUT{XyXSaVcj=`=p@cn}gu@N2T8?fop@9-;na=AlBU)M1J&m z5O(!dnfF~G?Bli&=szih`rMGj3nAd=k@m_E&fyt?6mn^8GX7QR_wOO>TU(EHv({t2 z{Poa#Ppk)iwF398$G8`y-z9-xkovE$hn@JI)W1J0bO{5Gj4<$eNa`1cVHcK#fmbk$ zak~T_5%|2oD+0e1#yNgd%Ks|x_hHcaFCwr{dIWs`SOoa5kHGI~jG*6%2&yFa@ACvOcDCqN*D9-60qma9wNc%6MpvNC& zzIVrjelek+lrv(OcTx=cad8azHc9&#>3=Z>`!^uvug9P_z8wSoN2LA_Qhrx8${(tR z9{5-_@XD%&oXoC9ztU=~Q!VY=q`XJqv1-u$oRm$0zZUqXYS8=E4WP$;8&E%K1L*PS z2JB~%)cXi7=k=ui@1%ZM;BTb<9UFnaz7cxj-i`2ga-+taGX*ZJ!M;{V`}!J@XKCLm^Rx@xBmMT*z)w3a z^AFWv-QURg_iTcm|Eo=y=h00Vw`3FguiS)wWt(6>s-#>k{kI6*A@%z=VgE-qLGCZg z{6E+z z5kKx3#5XO^!2kYxslWL%fVX`H{qK` z{eLI*H*ZD14{ils`c~-W$y;&mbGM@3d?^=5xp=GC?X6crU`0Jmf->;a zUGAl~!@rrl9sSk_^a`xp4*edM{`+N~GXgJ4{pYuXj^B{-FSo;PYxS_FdOiGwnf2gT zPd(_dsUGvR)&u{8Qh!P6zfzC+zEux;#-;ub^`QIB4e&?b+aPk$fc6I)fX~AMS4n%d zv~Q8}4r$*d^?g!*y#aW9u>tFTyFu)*^#5Z6=y+!%_H$1o@PAaws~a&sDzLE;^BioH zd$vZ5|6C*N^vjL#H{R2PexGPUzlWrpD{!^cua|P2!2M0Y|6CL7Sbr1N{f8#l`5!gG z5B^OP;-lM}f#>9Aj9=1>{w2-Or!lENE$~`1^zb*EL7zu=V7>VQiv&Kk1MO8ikUxp; z0KX3k{KXE$=^x#RJk|J}uoKVjl>3&Qa^JF3?pvh%BPqvsg8u&|Zk&`i zwuoMBk#{03pxaTY@0EU+r2K^z%=>Z+^!|wS|7{E8V%kixk_gE{=+YngS3OXNd z#XJ{UB`@0wJM>yB*7=(@z)uRiuMKu*yp(6PfetxsIG-hLz{8OCSR3T=={D@^cpJ{= zVjI?bxefUIK*s;4l;7VDe#>mfeA5IjXqWdj?HFIyj&U0W?rO)n&q@FDQvdmO$lv#* z{fF)1&$Yu}`E@(;j}LXg?riD6`0E|WqkXkQGt zT_}M+s(=YD9xqW{R@Yg!UzH}mwrgvhU#Zq712|7ll z{xZRN1pl!Uf$vzvwF|pA-0fslT}k z=lThOMO~mzV;A;!p$mAw+66!D7hU4d96*2l0PrY20J=q_+%B-^0Qm8%2Vj@qdl2J4 zbWrYH4}yN#2XP-!auEF2a8T~Q4&t2qq<&D~Hw3tpuKPm8eX}@p?c6CtdO@Ti@1V8-Wr2LnC zw_D;kfwKiJmG-q#HU!25)=T@|Zh6Phjr`y9-Oyh>-Jt8GZs7S3GVZ%FZbZtzl(Kdh z<@X#GKUd0kA4dBWfinfpJq$j}JB)M8m->~5!KZ6ve7VfGLCV`@T&MK!lKw{pJ}dPv zO85)u?5dQ1BjbO682owD5#%2~enj$|N3d?k5qXa$M50EO9`YNWh@ppL0o6hi`hBGy z#)T;8@dXH3n!;;@d6lpcDfI-Bh%o8yqx1I#80Y(4zcVunbMu$2%+=>FD_oqJsb%W{ zV}l-}o$D2zYFg1K_YnqRgNNva6+y2tkN#=dOO`BKrDYf7>6J!}mR-CoA1tMQts{O8 zc>Io|3L<3%p;cv6l@RB16{E^T zQU#)5EaVS*ymFjgU)U&(`fK!RpT~)~*XuYUDMEsncF_ttv`~x|4;$-aMkJc0x=@RI z3#yjM#6O5QMwQ3sXC9%Rj%voRf<%mpB+>YroWigECB=>lc?G)1>!l-%&>lQtg9$i)=u3;KsUl+B3-bw zG#2Jl_Qt}#K)GJ(A&h81wa4%CdT>Bv^|i!850()H-dex%a4;4UO1+i-j!j0Qp6FX# z#WCuwFZISfanKP@H5JD0MN(enqZ8o6degqlZA$3FMpZCs=>A~on^4@buQF1#T=hnT zCtV$7n9441gCEq;AZ_bSFjM^^WN1n&-b(jafHqqR@&p4lRl!(9m{-dVg~GvVX8dTd zivExZC?S)mv?&ds4zL;7)pQ^pW_4(Wh&DI7C|8@y`Z8y!HrE&MFqzma+?Nr#UrSm% zTkht@eEuj?gGDu>XA+G_jRXV!8f_lS0sRfIBKOdVmW$MZfk}ghNJvSGNf*UPhB6;f z;#8JLwh^SFX=BkS&*oKU7O_T<_6b%R4vyhwy@p)^!(YZLc$Ds#$Hu6PwZ1_n*eK;0 zl*Q768v>-fh;viUH_Ph4lj)vnPt-#oswGXkm~vJnF3Y7Q4Zi(LnX)p{*j`5+%VI3z zs9>8G4F>fRU%9fH%ErZ_gk9Mda0ijr8bYuZJ5~DZ@@Oq zBN?gW$%&-{%m%?ypEBD{OQC;?WYF#z35JPneJoC2L=v_jeab%Zv23Xcd8^HhnCOj5v}ipiqQ6F*g;B6KM)Y1ME~ zT1PoMnd`d%<-B7E*cApA?GGDk#@eZU{v652s zGgz;V(Lred?qF}#DL`*~jL#TzCFiM+)#uIEPWE`CU9t5`ZMWS3!)ZNAp&FCjSe1`~ zhuVRhtjpF#d|uZaTum~otV96%h5S!nsS6)ijg+MVkW~(RNQ9y(b;J^4F7|r=#pXCDgl5*YfoP_D|wQ5L@<}S3o}_Wbj~$w4B`h?4>zc zjwe!467+<<^egItEzRQJhL&TLd17R}oSR8gN4~LFtr&?Z^IAs8*4Q1{1GY^M+~*Jp z-8fsBM#kwI2%|`a(hzJOtCCAw)P2J>7%S#70bY?`wfh`WhhbkxsoESvj3mcp%1&|( zp`;?|q}1m4B5d@DBEi7DQ3NZb{5%LM^hc>4sM|kOxEWFF*(M^QZ}NrgG8}HN%&dr! zDqFdk%Kx+75iQqCN~*vnG|J8aTvje6|6&!X_{Ld?SU$dTIf&3?W9TeEAiaWp5$k}o zTwWf3tvJD5GOTjc6REVqORFkKKSHE>o%jWm@3bT*yTJNwTTo@DS$q)1E1t+o?G>>q zSSB+|YBE_4#B3;am!%iOc~qikhbSDvA}Z!k4~9(jj|h(?C5JNyxa5{IL6dtjEHnM99@-6RYBWbnxh;Cu2ssj%3iwQ+j)o zT+hy%hj_v8TWdus*iRt8)}Yf)AE7DxI7VXx-i2Ey@28~a`4nIU(&TpdVy%-90>Z$ zU-Hn(ls`koFnK*PyYO+rc>Jz>kZtQ05DK2sN`k?1B5XFrcQuOJOF0j+fV2y%;d`AHU1^JZ zow10O&Pdmt)$ z9BpB7ae;Cc*)Nsd(p>&3Z6Rxig)|@2WMPm-^B*O|^otGY!XODi9#2O@eId5Z6jSAu zvboF)kS{}_iN}>n@kqYU%E&pgajc(MUm40?_>HnCNky2|lsa)Tf}RqdurwK%i1ytjKsRDkW+j^ZLo zF)TKWkP42KhEt>rDzb%wzCbifU!hK-FgH6VKNn#;+hNw9Zk-v)qN!^5pW+u?k(Gs- z&(z1^Q5hXgl*vMoXTVFal$0;|G~`UNDh|ZJb8PxJQ=lNJ92$Y&Mc8XmDMfv#QIR;! zEolu^_r~52cPV0+++c%YeWi@wA|xFVXxZ>8YuUk?4I>Iz-sN*&{15ES-YtO}C8 zB@3%95n`0WuTmz8c5P)!^$L+2uCZJa3iu*X4zr~aKP4??{m`q(Rb@37HvAq=-V(n> z;UTIPP8dk?L(j?rKT^zT58t3f$YtnRo){a$o26%~$XxBv&Md*cvY?Xn4oAm{xG0%Y zj@tT|FU)%u;k2zCSrVr%F=udYm&t1k8Sg z&!s`hW?`C|B;nkF85bQ+jH*B;XKC)r+(J!B%Tfxz43|&5 zR0U|{)QAtoWm_9M3(TP$SAw;drp9qxAxW;KK^<-h{jd`8HAa++R?Z^%lQdNnUQ4o$ zb5*WVa=6b=Xb049xJ>+0*#>s84X@SH2$Y6v5GbjVx)-w=S#XuuPo*486B-sQ^p3hed11H z1A)%DoeZ#4DPxty42Jwhwc&SrL(7)tE}`>YqAlYL+^BFnZLN|tB=HQd^ANZPnB(&=hERN`i!Z zFidX9s3~i-0$i(DK2L%BmPLxL{$u3F?7N_X)J$_~h00BXt1~2{KW3jatztUaaztsj zk~XJP%F-t*4|7z1>)C;;T6ATBOJ#G(a-&D@i>xe5E>lBW9^*8*vh7-7QIY$?m@Cp< zBo`W)Ul<+@Lr zQj=V$wl1~RKo!>&x>t7y5P~%&)zf;=lF-8>N=#rjB5_`LGvg@48Il9pZjB1lh;WSlg zr?T48%%pbdtf(OUS7I1SfjFw=sSBrE+!LS%TFF_jVm6D=R?0=5I;3>-Ci|r%51buG z^HxoIo~n`i1NTBoJ{3}Lma%XSax-N*5gk=$bDwfgEX`-NQrP28m66TW?W7 z2~MN1ujamvlqW-ud*MQLxBZrrOzFChnPf_;*6gGL2s-PP!y|T0FDhE12+mQR54l*$ zA7|-#WvZDdsuoen3~O|hG^MUGPsp@RnJ{$*2QM7U7@;T&j8;^fU0D2N@sc7otSTws z2>6Ru%q=d=&DDyCHtJ6@Lx%)|0M19*za%tsaFR5ojMd5HRMBtcMyi`Sq>Dz~Wbs9; z49(J4F|W%@4e^dCM&blGd`$BE49K%wtJFxqBP;oEBV0+vfLHx-d*ek$)Dc5+(ZX3$ zB`GSqsDi?1{-d@{A$N%{;PTiB{mj{PL}J{rJ37N6)Px+qp6)9R23*-?bx^8X(!+a$UKCKNOLw^uwDWdBFiMC>Y$UJ)y|-dp&}D~LZlmBf6U7>!a)Zn+ie83YaEmo0e#z!f12vQ{W! zCC9f>>cK)0A*B_Cj8dYpR>Ynf9W*QMG%t+MuCCIo9+_NcDW>GlH@|t~z7f6LqY|&) zl;R9sRm7}UoOQiCtTXmU?^WQJB0 zD^ZUa^paS)6rz$JqY@`4OAO?hh`~5(%noX5OE?m-8j?fMo{&s%Dz10&2FoO;wVL0rD>sle5a)jc^rTEQ|K(OFMZEXM*t`@f5IJP)`_tsF3- z8(5ntiMX$X`22o*Ikw!Ac@N_~RGB^@bMhokhDXVMsovrH)jXE1Dpi3zx6=ej4o8DQ z<))}R8zWrJF+t2gpzJ4xWIqH?Te4&-c|qiw3lF4gj@4i# zr(A9Jjqm6tWSOX%8Q0wsOp6*zlcQF-kGhI})E$Xs2eb5o*Zs zSQVwa15=iroE)_%-xP7mB^Fi>;)tanX`(QgQOBtU#aEJGcFpR1V_n6%R7|KmuH+g+ z-Bo7k^4yEtRsJ#gY9$MJ8=20e3-90Zt$3aQIw97u-w!%p3mLd2FU1=|Vmwh07^n#2 zG+y8*+cnCvyQyc5l0#9s!Q#~9QzYr~JAHY{Ar$*U^e;+IP%*h~0d}B}FDeep6*MxD z#o-ur;WRM+NqL*gr=YyTENunu=99s-q5Hia^@e~v^H5E+A{fZzn!CsYA^rx2;M2VEB9c93iHG`DKS7D3{Rie(C7dSI#R+`g2xg+N)fv5s!kbl4B*6xAOV5PIy;gtf6r+QV zjGEkjHLvmI+Z;>v%Cif3S!ryHLNo(jH)~n>z@+1?{Bxel&wj@SLwO%w`wi0yPLCv$ zQKM3}j(y38A{#vX(2#`_?+oblEKQY#>C%SXD`X?~5034u-KB}_#_HyaINnd%ot%9v zQBs1G>{8{avF{|+HJHaABD7;wmdG`gq>TwAZO+;PH9UEU{pwdpI z*2Ydox!EgNMl=`KtyK4ENi9Ma%1|$a)FshMrn5R*`G`qn?;X{yqf2SSHzcS_%Xh0h z>gkBK%21B5k26jldp27quqJcf*I2KktqY?pnxI5m<**IBODTs9u_^o*D#FXfIKi=s z<96+F;wO&I%hlTo4zi=H+e%q?E6ruQh${-0*uB+x8vLpYMo%4vtu0Cn_};hJL1hCgfWup=S(XH4QvzQuD#?A1w@ z;Wrs$_Ki5s-Tk3L^7*V9jlfjp(!vOCf{rfZEaM28P@wdc2|+0EY-=nilNojS4x)8&wW*-j&JuKcd)tZRg$Yg zDTWOmACzY@x6HikaivCF!}x(qTCM5sWq(lwYwQ(r!?cB+*=se9MKx&%ETNr|A)5)M zyO;9tjswxOJyfHO-8i=@upN_#L=8$WsI0ZNI-hwo7+9mNRu9^}YepFwYQdp!V=(Zh z?Y5BnoDa&-3xS*KQ?oVd;?CU@&oS4$S*4XdaWpDfUkxwMJzhLNcO_mfyX!)uu3^%k zh)!$pMZ#+KUAV;EwAGQ+Xx=?Pg;454$1$3P*~X|;`@@$mB)gijNZ>10GVl?tYjR0` zSQ!u3yWrB~Gx3PZ#02>|-KTtiJ0YUUy?_SVY5c56bG$9m#62fJKyed00d`JIISW}D zYZeU|a}5b4z8=(EAE>GVbSerFP446Ez7bdFh_g4F^D^tDAp4<8JK(Q;lB)SqA9mR_ zcCOc|P-;%OLzZJ`-=e9tIES$g?{+q5k{XMWd+$#^0kWUnYw{JQ^=^;65Ym4Ec7v_2 zMF=?(A@yyN78-p+n&P9bR~LUtMAWks&_Z)1&g@U0EoqD-e~I_V9oPrJmsMJX6R(^f zk66hvuO3t%66qO^m(_3B8qw6HsK%Ki^*TZ0Z<)r!AtvVI%|Vp|OGWFuGKg*P4H%KZ z9l!ZT1#oikS-K=@6y+lLFj$OoFyg+q&SE0Rl*6aK=5c@Nq%J44f^d*86EpL?nJba! zoZ(Q=6SJmdO}T|{G{Vu${7AXan>jaD9?2{Y&d_u7v-6hB$X6PG3LBIY8|Mis_bIMunvPiUNQ_nzojO=S>vEiwjLBU?75eZQw zbW4Fh7WViv=abQn%+LcNRgBDZSrcx_&&$tEZhT_agj?p}flVgIp)*uiGd|=e z-+U%+xsB+oShOtj;bcEXvCIf(<_1cGEC@67hf93XTNa4dNEEA?q0d!O{)DXQSyOM( z5`$gw?&gfh(3R)3jK{}kRE_8Vk$~j?JV5;L@kH9znwTUwgiQ0N94xic09j;!)_xp*S6C+(z9~ruOdidN8`axskoxNN$*h8&}o<8&X zUb{GQs3GHtSEByIWMrY&te_;H0L0 z4_(G5jfs;%*UgSr>YwPn%*BpgTPTJGPEk#KUthfW z`FMM~y)1t>Z#LAMFSYPz^ZM|a0YVjo(lawP8Zg{>Hr{lZXlgdJr1@0d>}?p?eM-aG z@n`Y!Grs?nIk?|ZVb;H3)}MD&n^!u__RCs)Pb*PcBV=hM%{+0$+;L2cUmhS})}I~O zc6Q|W)!{=uQWbCNFn4t^Uc7Of#7OPI#9*V1+wh@_@wQV|cP0%J{n|035X?V#z*D;`SgwEOQKI=r0 zHb30Glkmna?TvH&!R@lpjqgDlGDr#`(K9%*zlXUq-h9<;Y{19o=J_M>+A~l$n&>(Rp~#r)i}RuW zmc-y8v*{9~==Ez&8IjkoHEW`(g;QCRSnRE5>Sp_MiQWMX3`K(0N=nS^YY;{p*sk`` zFJD8%_aBSDxYyz_^UyJBGJCec?3neJh6eW0Dj>ax?%Vv>+-y9T=&c(*PWIxYsP7b+ zumysNfgVHGk0~>9(cIRqrI;a%KtC;MhvMDO#hY)?aVM+nU&A{t#cS)5W!fj{F7xD> zL~Tpr#PjhcGA8Gs@#9BNvEa5HHP7s{`-5chLxV#DpLNV~l8oCKI$(Q>EcG7;Qs&MZ zBel(>9?1M8u3sl(Wp+GI$K>3**|u}|+OyQ8nLRDc1@${e4mOw_ZKMdz#{PJJ2dz4M ztWFdK%@^PKtTw!rm}-E|efasE!-uYr0cJ8fl&N~zhhD6nS{u#&_ITTFvuS^_cH}^7 zvKH$m8lRJ2W_O=?xHhG5`2wvpvj3dMT(<2x%>nKfYxwMo=Ak2m2ndd@PNdwQjEm<2 zU|zjsP2GKV^TaJM+paDGhOQ5iypUnWmdA$25p#$M!qO^Am z^`DGiB+Ec5UKNCStithlU9T4J?M&R*7Vo+-e6n8(B41K~ALA^Lt3jueG-@&h+#AT^mR6*?{3$Q#sJ#gSueK9#tAwF zZKV0ko`b22*xDRuB}D>(v|RtnJUTB5F#jCXwB zRr6ZA7Tq8t{&pLkwXTz#4e`@k2ECFL3yaZ%^IQ(+5NdSi4GBD z=xVcg8uG<;yzLBW@R7qO;)e${_?KcRz^mHGKo^r57_tJ`aWqce)V@A!Q zqWARhK!c0t&AM*(E!mVP9~++M>(`EIz+C`ycE4hCZIdq)Z{9<{q{C=CA!<~iHhj8{ z=Xbgtu&!kK_9brY61t(_U{jRgJ4#P5!=L*hwG#tP5P`aM6>HAYx-V{dF{2g`#H3jh7|uzY8~oel!r%7U3arX zlOA<{{0uDzHDI1RpSXC+&DXRk++kj;9phz>w1d z56?1O$?-~4Xy*0v=AKqd-BG>zXNT+NwSHDkZdFcvLgt-Cw)-qeS^V4yr%MZ;JKo&N zar0hUVX%vRv)%^sQJ4}a5A`=Vs$e@)G_yHaKXROn=y21eBx{`?FpnsYrlUm$(8|MS z`lO)z6ZbsU^zp-|$Q+X*rqGnRYJo56=u>~zJYQ>>kiky!Q^xq5nGd(EX{f&mhxL=% z?i6G2liI^904{y42GE|9W865>7)u`wZ0CQY-v*1qJ=aB4C%bkkzT+gFkc0&+kaTby zKK7sCDc_~<$6Of$ejiy=RJ%4|45_IG6OpmI{#u=1QEojw1{Um}yHh!31J51dsc z>@Cr<%{+8bRUje4Or|=I{0*hO6sBVP0mgzK+Uoe zayGJy1v-*Gr?4b({H$i~I7VhoRGZ>x1cMxFx!P2Bu4N~IZN@njj$LnMq5mI#Yn+q@ zLT&3=BrE8^bl^=J80oG}oUTI(khGdJ^QVbz96m6>L9FW|;*nYo^E7Np5-iI0n7b&x zI_Yj`JIj6o8ZepV^R)G`wmv|Hr@>k#-n^4yp0rF#h!0)eNk|XB@B#@+{DtFC?#Y}= zUjy%i)Sl!K2HHSgA}Zzur=<93wvsm6Pt&|E{X4SlEGZYZ4OjX(YVI8n?MZ7nGqQFc zYc6&?p$6@5gyYT6n&%g%+iVFry8_An=`KM?LxGLN(NpPKY|XwaH7Y<= zaxHu}Y}qH3y+m|3>Z4&!K`NzY1y*)hlB%v{C>}w^LbB76LnU>Gv@QKI+q+0GIqSim z2_3%p2K$d$V(I+Fen{`t#QEc@AU=gs+B|_0Aq~F>D{Ixm$5jS+|1pPCvENSUwluQK zK%`TGz+B;l9Cm#XBw!r$Zes@j)Bw(o6!aL+3-g!f%E-w*f|Ew|a@wH@T&BcFG03bnU zoexCeg;?>3L^bF~N245aCGvK-8SlF?bhUnD&keQ=mh33Np6R6*-F1?FC(??NqF>_v z1EshAP44jXy()%iZXLc>OFnlUZB#(=Oxm9##s?Gfea@LWK7*7_n(J~QO~G+*kuF*7 zNJ2XJhVySJ<>Aire7z>AgwgF|H8GWsHIAID z_Ae05a%P^$aoFb#xD+_*1i_wX0dH)n`IIhU~+cIbJLKT)SO0{Glwb>@5nll z;kn*!;jCyP!JO+>jAh)hTPtIdl64c~<_P>;nF2>j!jbcXd{`p0|CqB);xCCKoDIDL zd}lJcfm}>FGe?!}>)BPV+>c!=oRA(z=Qpc5--$RP7rUS1+gI0ptJ9}U!OQagkqnS;`J6P~(wvtg zU0Dt~TFF35`TxTwrI^|Bs8u1=@j)g>&~|$<(w6qaQDH0!&oOIKpPn)M+GRexzftk~ zpZk%h6{5ma3vhoPDoa`)h?>`G%`-bCb=iB$q0Jo)dZw<4qHy*>6-g)Gg*$H#Si(Cm z@fER^nNCwh;-Wz#NREOpEbuf-0uxpOPVdXC>*lQKXk6pRE}Pd#9T5jo!127wOIh(M z2+CiB%EjcBb3ds)P5%`KOTBnduLvAv_OwLts6phjOSo*g9_ie^Q5kLxDSGl@8sn`e z9Hs%ezTGW}>%DkwCD*0=VW)M|`O?lr?_Tk0RN@I~2xKM*NB*J{$zDWEbV!IHASSq7 zm((}~ng3f~X_8SUSK3bM;kuZ^w(eGQ$8qz(S$X_Gfw7_iG^@F%l>#}A5)veda_rO+!NVvJAIIH&0#&iv9I|!PkgQ4Jb9ix2getR z!7 z@Q~jiIURX)!bP{+c&cXHGPxL`HB$%B!(rf4~#Unvw%Bq@X>{0b*J+l;V4Lg_XfFm zaA;R#hKH`p+eVoKd%?b}cbPV#6gfD*3Upl#G25vKCb=#5XNIn6++P>s&cu4YqxQ+3 zN^k3HR!+n}qI zZFq@DB4&tK+U=`tx24JT;s9~epYzF{I3HcT@H0jHnwhI4oH}>XdJzpiR^F-fNI^PH z4=^KJxSoS%$1dfAu~@L}7(TO`lqnlGkO*eYdc0yug4uICe(VZ$R2Qnp1W(d`7(-#) ziRb09guIQkCgXcLC`I*pP+V!uWRI4iZ}MH8GaC$Eb!LODTUp1|AiDCQTh|#W>0{t3 zcOt9F?KInWtkG8Eq2C(aCAh0W#x-dx`D)z}Oxh8cwmRhhXS&t)6S0mCXX?FFF zSE4qWVx)10X21Edu4WL&S-|;(>#cnOhYX_iZcKduC-20Z?wsQTIJRG~WKb&BGa&1g z%LP2+ca&*woyk`)7i1~xD(Yti}hiG0$4!Z zPB$GS6~PzWbT(06NUptH*VC!*D6L}wK*m8`d=bIa*DM80RuR# A`Tzg` diff --git a/rhodecode/i18n/zh_CN/LC_MESSAGES/rhodecode.po b/rhodecode/i18n/zh_CN/LC_MESSAGES/rhodecode.po --- a/rhodecode/i18n/zh_CN/LC_MESSAGES/rhodecode.po +++ b/rhodecode/i18n/zh_CN/LC_MESSAGES/rhodecode.po @@ -8,27 +8,28 @@ msgid "" msgstr "" "Project-Id-Version: RhodeCode 1.4.4\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2012-12-14 12:53+0800\n" +"POT-Creation-Date: 2013-04-05 10:17-0700\n" "PO-Revision-Date: 2012-12-14 12:57+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.4\n" #: rhodecode/controllers/changelog.py:95 msgid "All Branches" msgstr "所有分支" #: rhodecode/controllers/changeset.py:83 -msgid "show white space" +#, fuzzy +msgid "Show white space" msgstr "显示空白字符" #: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97 -msgid "ignore white space" +#, fuzzy +msgid "Ignore white space" msgstr "忽略空白字符" #: rhodecode/controllers/changeset.py:163 @@ -36,20 +37,21 @@ msgstr "忽略空白字符" msgid "%s line context" msgstr "%s行上下文" -#: rhodecode/controllers/changeset.py:314 -#: rhodecode/controllers/pullrequests.py:417 +#: rhodecode/controllers/changeset.py:329 +#: rhodecode/controllers/pullrequests.py:438 #, python-format msgid "Status change -> %s" msgstr "状态修改为%s" -#: rhodecode/controllers/changeset.py:345 +#: rhodecode/controllers/changeset.py:360 +#, fuzzy msgid "" -"Changing status on a changeset associated witha closed pull request is not " -"allowed" +"Changing status on a changeset associated with a closed pull request is " +"not allowed" msgstr "不允许修改已关闭拉取请求的修订集状态" -#: rhodecode/controllers/compare.py:75 -#: rhodecode/controllers/pullrequests.py:121 +#: rhodecode/controllers/compare.py:74 +#: rhodecode/controllers/pullrequests.py:167 #: rhodecode/controllers/shortlog.py:100 msgid "There are no changesets yet" msgstr "还没有修订集" @@ -59,8 +61,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 @@ -92,157 +93,194 @@ msgid "%s %s feed" msgstr "%s %s订阅" #: rhodecode/controllers/feed.py:86 -#: rhodecode/templates/changeset/changeset.html:137 -#: rhodecode/templates/changeset/changeset.html:149 -#: 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 +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 msgid "Changeset was too big and was cut off..." msgstr "修订集太大已被截断......" -#: rhodecode/controllers/feed.py:92 -msgid "commited on" +#: rhodecode/controllers/feed.py:91 +#, fuzzy, python-format +msgid "%s committed on %s" msgstr "提交于" -#: rhodecode/controllers/files.py:86 -msgid "click here to add new file" +#: rhodecode/controllers/files.py:88 +#, fuzzy +msgid "Click here to add new file" msgstr "点击此处添加新文件" -#: rhodecode/controllers/files.py:87 +#: rhodecode/controllers/files.py:89 #, python-format msgid "There are no files yet %s" msgstr "还没有文件%s" -#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325 +#: rhodecode/controllers/files.py:267 rhodecode/controllers/files.py:335 #, python-format msgid "This repository is has been locked by %s on %s" msgstr "版本库由%s于%s锁定" -#: rhodecode/controllers/files.py:292 -#, python-format -msgid "Edited %s via RhodeCode" +#: rhodecode/controllers/files.py:279 +msgid "You can only edit files with revision being a valid branch " +msgstr "" + +#: rhodecode/controllers/files.py:293 +#, fuzzy, python-format +msgid "Edited file %s via RhodeCode" msgstr "通过RhodeCode修改了%s" -#: rhodecode/controllers/files.py:297 +#: rhodecode/controllers/files.py:309 msgid "No changes" msgstr "无变更" -#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372 +#: rhodecode/controllers/files.py:318 rhodecode/controllers/files.py:388 #, python-format msgid "Successfully committed to %s" msgstr "成功提交到%s" -#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378 +#: rhodecode/controllers/files.py:323 rhodecode/controllers/files.py:394 msgid "Error occurred during commit" msgstr "提交时发生错误" -#: rhodecode/controllers/files.py:344 -#, python-format -msgid "Added %s via RhodeCode" +#: rhodecode/controllers/files.py:347 +#, fuzzy +msgid "Added file via RhodeCode" msgstr "通过RhodeCode添加了%s" -#: rhodecode/controllers/files.py:358 +#: rhodecode/controllers/files.py:364 msgid "No content" msgstr "无内容" -#: rhodecode/controllers/files.py:362 +#: rhodecode/controllers/files.py:368 msgid "No filename" msgstr "无文件名" -#: rhodecode/controllers/files.py:404 -msgid "downloads disabled" +#: rhodecode/controllers/files.py:372 +msgid "Location must be relative path and must not contain .. in path" +msgstr "" + +#: rhodecode/controllers/files.py:420 +#, fuzzy +msgid "Downloads disabled" msgstr "禁止下载" -#: rhodecode/controllers/files.py:415 +#: rhodecode/controllers/files.py:431 #, python-format msgid "Unknown revision %s" msgstr "未知版本%s" -#: rhodecode/controllers/files.py:417 +#: rhodecode/controllers/files.py:433 msgid "Empty repository" msgstr "空版本库" -#: rhodecode/controllers/files.py:419 +#: rhodecode/controllers/files.py:435 msgid "Unknown archive type" msgstr "未知包类型" -#: rhodecode/controllers/files.py:564 -#: rhodecode/templates/changeset/changeset_range.html:13 -#: rhodecode/templates/changeset/changeset_range.html:31 +#: rhodecode/controllers/files.py:617 +#: rhodecode/templates/changeset/changeset_range.html:9 msgid "Changesets" msgstr "修订集" -#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:74 -#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550 +#: rhodecode/controllers/files.py:618 rhodecode/controllers/pullrequests.py:131 +#: rhodecode/controllers/summary.py:247 rhodecode/model/scm.py:606 +#: rhodecode/templates/switch_to_list.html:3 +#: rhodecode/templates/branches/branches.html:10 msgid "Branches" msgstr "分支" -#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:78 -#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561 +#: rhodecode/controllers/files.py:619 rhodecode/controllers/pullrequests.py:132 +#: rhodecode/controllers/summary.py:248 rhodecode/model/scm.py:617 +#: rhodecode/templates/switch_to_list.html:15 +#: rhodecode/templates/shortlog/shortlog_data.html:10 +#: rhodecode/templates/tags/tags.html:10 msgid "Tags" msgstr "标签" -#: rhodecode/controllers/forks.py:158 -#, python-format -msgid "forked %s repository as %s" +#: rhodecode/controllers/forks.py:175 +#, fuzzy, python-format +msgid "Forked repository %s as %s" msgstr "版本库%s被复刻到%s" -#: rhodecode/controllers/forks.py:172 +#: rhodecode/controllers/forks.py:189 #, python-format msgid "An error occurred during repository forking %s" msgstr "在复刻版本库%s的时候发生错误" -#: rhodecode/controllers/journal.py:218 rhodecode/controllers/journal.py:261 +#: rhodecode/controllers/journal.py:275 rhodecode/controllers/journal.py:318 msgid "public journal" msgstr "公共日志" -#: rhodecode/controllers/journal.py:222 rhodecode/controllers/journal.py:265 -#: rhodecode/templates/base/base.html:232 +#: rhodecode/controllers/journal.py:279 rhodecode/controllers/journal.py:322 #: rhodecode/templates/journal/journal.html:12 msgid "journal" msgstr "日志" -#: rhodecode/controllers/login.py:143 -msgid "You have successfully registered into rhodecode" +#: rhodecode/controllers/login.py:138 +#, fuzzy +msgid "You have successfully registered into RhodeCode" msgstr "成功注册到RhodeCode" -#: rhodecode/controllers/login.py:164 +#: rhodecode/controllers/login.py:159 msgid "Your password reset link was sent" msgstr "密码重置链接已经发送" -#: rhodecode/controllers/login.py:184 +#: rhodecode/controllers/login.py:179 msgid "" -"Your password reset was successful, new password has been sent to your email" +"Your password reset was successful, new password has been sent to your " +"email" msgstr "密码已经成功重置,新密码已经发送到你的邮箱" -#: rhodecode/controllers/pullrequests.py:76 rhodecode/model/scm.py:556 +#: rhodecode/controllers/pullrequests.py:118 +#: rhodecode/templates/changeset/changeset.html:10 +#: rhodecode/templates/email_templates/changeset_comment.html:15 +msgid "Changeset" +msgstr "修订集" + +#: rhodecode/controllers/pullrequests.py:128 +msgid "Special" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:129 +#, fuzzy +msgid "Peer branches" +msgstr "分支" + +#: rhodecode/controllers/pullrequests.py:130 rhodecode/model/scm.py:612 +#: rhodecode/templates/switch_to_list.html:28 +#: rhodecode/templates/bookmarks/bookmarks.html:10 msgid "Bookmarks" msgstr "书签" -#: rhodecode/controllers/pullrequests.py:190 +#: rhodecode/controllers/pullrequests.py:228 msgid "Pull request requires a title with min. 3 chars" msgstr "拉取请求的标题至少3个字符" -#: rhodecode/controllers/pullrequests.py:192 -msgid "error during creation of pull request" +#: rhodecode/controllers/pullrequests.py:230 +#, fuzzy +msgid "Error creating pull request" msgstr "提交拉取请求时发生错误" -#: rhodecode/controllers/pullrequests.py:224 +#: rhodecode/controllers/pullrequests.py:251 msgid "Successfully opened new pull request" msgstr "成功提交拉取请求" -#: rhodecode/controllers/pullrequests.py:227 +#: rhodecode/controllers/pullrequests.py:254 msgid "Error occurred during sending pull request" msgstr "提交拉取请求时发生错误" -#: rhodecode/controllers/pullrequests.py:260 +#: rhodecode/controllers/pullrequests.py:287 msgid "Successfully deleted pull request" msgstr "成功删除拉取请求" -#: rhodecode/controllers/pullrequests.py:452 -msgid "" -"Closing pull request on other statuses than rejected or approved forbidden" +#: rhodecode/controllers/pullrequests.py:441 +msgid "Closing with" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:478 +msgid "Closing pull request on other statuses than rejected or approved forbidden" msgstr "只能以批准或者驳回的状态关闭拉取请求" #: rhodecode/controllers/search.py:134 @@ -257,55 +295,12 @@ msgstr "没有索引用于搜索。请运行whoosh索引器" msgid "An error occurred during this search operation" msgstr "在搜索操作中发生异常" -#: rhodecode/controllers/settings.py:119 -#: rhodecode/controllers/admin/repos.py:272 -#, python-format -msgid "Repository %s updated successfully" -msgstr "版本库%s成功更新" - -#: rhodecode/controllers/settings.py:137 -#: rhodecode/controllers/admin/repos.py:290 -#, python-format -msgid "error occurred during update of repository %s" -msgstr "在更新版本库%s的时候发生错误" - -#: rhodecode/controllers/settings.py:162 -#: rhodecode/controllers/admin/repos.py:315 -#, python-format -msgid "deleted repository %s" -msgstr "已经删除版本库%s" - -#: rhodecode/controllers/settings.py:166 -#: rhodecode/controllers/admin/repos.py:325 -#: rhodecode/controllers/admin/repos.py:331 -#, python-format -msgid "An error occurred during deletion of %s" -msgstr "在删除%s的时候发生错误" - -#: rhodecode/controllers/settings.py:185 -msgid "unlocked" -msgstr "未锁" - -#: rhodecode/controllers/settings.py:188 -msgid "locked" -msgstr "已锁" - -#: rhodecode/controllers/settings.py:190 -#, python-format -msgid "Repository has been %s" -msgstr "版本库已被%s" - -#: rhodecode/controllers/settings.py:194 -#: rhodecode/controllers/admin/repos.py:423 -msgid "An error occurred during unlocking" -msgstr "解锁时发生错误" - -#: rhodecode/controllers/summary.py:140 +#: rhodecode/controllers/summary.py:141 msgid "No data loaded yet" msgstr "数据未加载" -#: rhodecode/controllers/summary.py:144 -#: rhodecode/templates/summary/summary.html:157 +#: rhodecode/controllers/summary.py:147 +#: rhodecode/templates/summary/summary.html:149 msgid "Statistics are disabled for this repository" msgstr "该版本库统计功能已经禁用" @@ -314,7 +309,8 @@ msgid "Default settings updated successf msgstr "默认设置已经成功更新" #: rhodecode/controllers/admin/defaults.py:110 -msgid "error occurred during update of defaults" +#, fuzzy +msgid "Error occurred during update of defaults" msgstr "更新默认设置时发生错误" #: rhodecode/controllers/admin/ldap_settings.py:50 @@ -362,7 +358,7 @@ msgid "START_TLS on LDAP connection" msgstr "LDAP连接上的START_TLS" #: rhodecode/controllers/admin/ldap_settings.py:126 -msgid "Ldap settings updated successfully" +msgid "LDAP settings updated successfully" msgstr "LDAP设置已经成功更新" #: rhodecode/controllers/admin/ldap_settings.py:130 @@ -370,696 +366,867 @@ msgid "Unable to activate ldap. The \"py msgstr "无法启用LDAP。缺失“python-ldap”库。" #: rhodecode/controllers/admin/ldap_settings.py:147 -msgid "error occurred during update of ldap settings" +#, fuzzy +msgid "Error occurred during update of ldap settings" 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 "读" +msgid "None" +msgstr "无" #: rhodecode/controllers/admin/permissions.py:61 #: rhodecode/controllers/admin/permissions.py:65 -msgid "Write" -msgstr "写" +msgid "Read" +msgstr "读" #: rhodecode/controllers/admin/permissions.py:62 #: rhodecode/controllers/admin/permissions.py:66 +msgid "Write" +msgstr "写" + +#: rhodecode/controllers/admin/permissions.py:63 +#: rhodecode/controllers/admin/permissions.py:67 #: 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/repo_add.html:10 +#: rhodecode/templates/admin/repos/repo_add.html:14 #: 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/repos_groups/repos_groups_add.html:9 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:9 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:13 #: 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/user_edit.html:133 #: rhodecode/templates/admin/users/users.html:9 +#: rhodecode/templates/admin/users/users.html:85 #: 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 +#: rhodecode/templates/base/base.html:292 +#: rhodecode/templates/base/base.html:293 +#: rhodecode/templates/base/base.html:299 +#: rhodecode/templates/base/base.html:300 msgid "Admin" msgstr "管理" -#: rhodecode/controllers/admin/permissions.py:69 -msgid "disabled" -msgstr "禁用" - -#: rhodecode/controllers/admin/permissions.py:71 -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 +#: rhodecode/controllers/admin/permissions.py:70 +#: rhodecode/controllers/admin/permissions.py:76 +#: rhodecode/controllers/admin/permissions.py:79 msgid "Disabled" msgstr "停用" -#: rhodecode/controllers/admin/permissions.py:76 -#: rhodecode/controllers/admin/permissions.py:79 +#: rhodecode/controllers/admin/permissions.py:72 +#, fuzzy +msgid "Allowed with manual account activation" +msgstr "允许手工启用帐号" + +#: rhodecode/controllers/admin/permissions.py:74 +#, fuzzy +msgid "Allowed with automatic account activation" +msgstr "允许自动启用帐号" + +#: rhodecode/controllers/admin/permissions.py:77 +#: rhodecode/controllers/admin/permissions.py:80 msgid "Enabled" msgstr "启用" -#: rhodecode/controllers/admin/permissions.py:122 +#: rhodecode/controllers/admin/permissions.py:128 msgid "Default permissions updated successfully" msgstr "成功更新默认权限" -#: rhodecode/controllers/admin/permissions.py:136 -msgid "error occurred during update of permissions" +#: rhodecode/controllers/admin/permissions.py:142 +#, fuzzy +msgid "Error occurred during update of permissions" msgstr "更新权限时发生错误" -#: rhodecode/controllers/admin/repos.py:121 +#: rhodecode/controllers/admin/repos.py:127 msgid "--REMOVE FORK--" msgstr "-- 移除复刻 --" -#: rhodecode/controllers/admin/repos.py:190 -#, python-format -msgid "created repository %s from %s" +#: rhodecode/controllers/admin/repos.py:168 +#, fuzzy, python-format +msgid "Created repository %s from %s" msgstr "新版本库%s基于%s建立。" -#: rhodecode/controllers/admin/repos.py:194 +#: rhodecode/controllers/admin/repos.py:174 +#, fuzzy, python-format +msgid "Created repository %s" +msgstr "建立版本库%s" + +#: rhodecode/controllers/admin/repos.py:197 +#, fuzzy, python-format +msgid "Error creating repository %s" +msgstr "建立版本库%s" + +#: rhodecode/controllers/admin/repos.py:266 #, python-format -msgid "created repository %s" -msgstr "建立版本库%s" - -#: rhodecode/controllers/admin/repos.py:225 +msgid "Repository %s updated successfully" +msgstr "版本库%s成功更新" + +#: rhodecode/controllers/admin/repos.py:284 +#, fuzzy, python-format +msgid "Error occurred during update of repository %s" +msgstr "在更新版本库%s的时候发生错误" + +#: rhodecode/controllers/admin/repos.py:311 +#: rhodecode/controllers/api/api.py:877 #, python-format -msgid "error occurred during creation of repository %s" -msgstr "创建版本库时发生错误%s" - -#: rhodecode/controllers/admin/repos.py:320 +msgid "Detached %s forks" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:314 +#: rhodecode/controllers/api/api.py:879 +#, fuzzy, python-format +msgid "Deleted %s forks" +msgstr "已经删除版本库%s" + +#: rhodecode/controllers/admin/repos.py:319 +#, fuzzy, python-format +msgid "Deleted repository %s" +msgstr "已经删除版本库%s" + +#: rhodecode/controllers/admin/repos.py:322 #, python-format msgid "Cannot delete %s it still contains attached forks" msgstr "无法删除%s因为它还有其他分复刻本库" -#: rhodecode/controllers/admin/repos.py:349 +#: rhodecode/controllers/admin/repos.py:327 +#, python-format +msgid "An error occurred during deletion of %s" +msgstr "在删除%s的时候发生错误" + +#: rhodecode/controllers/admin/repos.py:365 +#, fuzzy +msgid "Repository permissions updated" +msgstr "禁用创建版本库" + +#: rhodecode/controllers/admin/repos.py:384 msgid "An error occurred during deletion of repository user" msgstr "删除版本库用户时发生错误" -#: rhodecode/controllers/admin/repos.py:368 -msgid "An error occurred during deletion of repository users groups" +#: rhodecode/controllers/admin/repos.py:403 +#, fuzzy +msgid "An error occurred during deletion of repository user groups" msgstr "删除版本库用户组时发生错误" -#: rhodecode/controllers/admin/repos.py:386 +#: rhodecode/controllers/admin/repos.py:421 msgid "An error occurred during deletion of repository stats" msgstr "删除版本库统计时发生错误" -#: rhodecode/controllers/admin/repos.py:403 +#: rhodecode/controllers/admin/repos.py:438 msgid "An error occurred during cache invalidation" msgstr "清除缓存时发生错误" -#: rhodecode/controllers/admin/repos.py:443 +#: rhodecode/controllers/admin/repos.py:458 +#: rhodecode/controllers/admin/repos.py:485 +msgid "An error occurred during unlocking" +msgstr "解锁时发生错误" + +#: rhodecode/controllers/admin/repos.py:476 +#, fuzzy +msgid "Unlocked" +msgstr "未锁" + +#: rhodecode/controllers/admin/repos.py:479 +#, fuzzy +msgid "Locked" +msgstr "已锁" + +#: rhodecode/controllers/admin/repos.py:481 +#, python-format +msgid "Repository has been %s" +msgstr "版本库已被%s" + +#: rhodecode/controllers/admin/repos.py:505 msgid "Updated repository visibility in public journal" msgstr "成功更新在公共日志中的可见性" -#: rhodecode/controllers/admin/repos.py:447 +#: rhodecode/controllers/admin/repos.py:509 msgid "An error occurred during setting this repository in public journal" msgstr "设置版本库到公共日志时发生错误" -#: rhodecode/controllers/admin/repos.py:452 rhodecode/model/validators.py:300 +#: rhodecode/controllers/admin/repos.py:514 rhodecode/model/validators.py:302 msgid "Token mismatch" msgstr "令牌不匹配" -#: rhodecode/controllers/admin/repos.py:465 +#: rhodecode/controllers/admin/repos.py:527 msgid "Pulled from remote location" msgstr "成功拉取自远程路径" -#: rhodecode/controllers/admin/repos.py:467 +#: rhodecode/controllers/admin/repos.py:529 msgid "An error occurred during pull from remote location" msgstr "从远程路径拉取时发生错误" -#: rhodecode/controllers/admin/repos.py:483 +#: rhodecode/controllers/admin/repos.py:545 msgid "Nothing" msgstr "无" -#: rhodecode/controllers/admin/repos.py:485 +#: rhodecode/controllers/admin/repos.py:547 #, python-format msgid "Marked repo %s as fork of %s" msgstr "成功将版本库%s标记为复刻自%s" -#: rhodecode/controllers/admin/repos.py:489 +#: rhodecode/controllers/admin/repos.py:551 msgid "An error occurred during this operation" msgstr "在搜索操作中发生错误" -#: rhodecode/controllers/admin/repos_groups.py:120 -#, python-format -msgid "created repos group %s" +#: rhodecode/controllers/admin/repos.py:590 +#, fuzzy +msgid "An error occurred during creation of field" +msgstr "创建用户%s时发生错误" + +#: rhodecode/controllers/admin/repos.py:604 +#, fuzzy +msgid "An error occurred during removal of field" +msgstr "保存电子邮件时发生错误" + +#: rhodecode/controllers/admin/repos_groups.py:145 +#, fuzzy, python-format +msgid "Created repository group %s" msgstr "建立版本库组%s" -#: rhodecode/controllers/admin/repos_groups.py:133 -#, python-format -msgid "error occurred during creation of repos group %s" +#: rhodecode/controllers/admin/repos_groups.py:157 +#, fuzzy, python-format +msgid "Error occurred during creation of repository group %s" msgstr "创建版本库组时发生错误%s" -#: rhodecode/controllers/admin/repos_groups.py:167 -#, python-format -msgid "updated repos group %s" +#: rhodecode/controllers/admin/repos_groups.py:214 +#: rhodecode/controllers/admin/repos_groups.py:286 +msgid "Cannot revoke permission for yourself as admin" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:220 +#, fuzzy, python-format +msgid "Updated repository group %s" msgstr "更新版本库组%s" -#: rhodecode/controllers/admin/repos_groups.py:180 -#, python-format -msgid "error occurred during update of repos group %s" +#: rhodecode/controllers/admin/repos_groups.py:235 +#, fuzzy, python-format +msgid "Error occurred during update of repository group %s" msgstr "更新版本库组时发生错误%s" -#: rhodecode/controllers/admin/repos_groups.py:198 +#: rhodecode/controllers/admin/repos_groups.py:253 #, python-format msgid "This group contains %s repositores and cannot be deleted" msgstr "这个组内有%s个版本库因而无法删除" -#: rhodecode/controllers/admin/repos_groups.py:206 -#, python-format -msgid "removed repos group %s" +#: rhodecode/controllers/admin/repos_groups.py:260 +#, fuzzy, python-format +msgid "This group contains %s subgroups and cannot be deleted" +msgstr "这个组内有%s个版本库因而无法删除" + +#: rhodecode/controllers/admin/repos_groups.py:266 +#, fuzzy, python-format +msgid "Removed repository group %s" 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:217 -#: rhodecode/controllers/admin/repos_groups.py:222 -#, python-format -msgid "error occurred during deletion of repos group %s" +#: rhodecode/controllers/admin/repos_groups.py:271 +#, fuzzy, python-format +msgid "Error occurred during deletion of repos group %s" msgstr "删除版本库组时发生错误%s" -#: rhodecode/controllers/admin/repos_groups.py:243 +#: rhodecode/controllers/admin/repos_groups.py:297 msgid "An error occurred during deletion of group user" msgstr "删除组用户时发生错误" -#: rhodecode/controllers/admin/repos_groups.py:264 -msgid "An error occurred during deletion of group users groups" +#: rhodecode/controllers/admin/repos_groups.py:318 +#, fuzzy +msgid "An error occurred during deletion of group user groups" msgstr "删除版本库组的用户组时发生错误" -#: rhodecode/controllers/admin/settings.py:123 -#, python-format -msgid "Repositories successfully rescanned added: %s,removed: %s" +#: rhodecode/controllers/admin/settings.py:126 +#, fuzzy, python-format +msgid "Repositories successfully rescanned added: %s ; removed: %s" msgstr "重新扫描版本库成功,增加%s, 移除%s" -#: rhodecode/controllers/admin/settings.py:131 +#: rhodecode/controllers/admin/settings.py:135 msgid "Whoosh reindex task scheduled" msgstr "Whoosh重新索引任务调度" -#: rhodecode/controllers/admin/settings.py:162 -msgid "Updated application settings" -msgstr "更新应用设置" - #: rhodecode/controllers/admin/settings.py:166 -#: rhodecode/controllers/admin/settings.py:299 -msgid "error occurred during updating application settings" +msgid "Updated application settings" +msgstr "更新应用设置" + +#: rhodecode/controllers/admin/settings.py:170 +#: rhodecode/controllers/admin/settings.py:301 +#, fuzzy +msgid "Error occurred during updating application settings" msgstr "更新设置时发生错误" -#: rhodecode/controllers/admin/settings.py:207 +#: rhodecode/controllers/admin/settings.py:216 msgid "Updated visualisation settings" msgstr "成功更新可视化设置" -#: rhodecode/controllers/admin/settings.py:212 -msgid "error occurred during updating visualisation settings" +#: rhodecode/controllers/admin/settings.py:221 +#, fuzzy +msgid "Error occurred during updating visualisation settings" msgstr "更新可视化设置时发生错误" -#: rhodecode/controllers/admin/settings.py:295 +#: rhodecode/controllers/admin/settings.py:297 msgid "Updated VCS settings" msgstr "成功更新版本控制系统设置" -#: rhodecode/controllers/admin/settings.py:309 +#: rhodecode/controllers/admin/settings.py:311 msgid "Added new hook" msgstr "新建钩子" -#: rhodecode/controllers/admin/settings.py:321 +#: rhodecode/controllers/admin/settings.py:323 msgid "Updated hooks" msgstr "更新钩子" -#: rhodecode/controllers/admin/settings.py:325 -msgid "error occurred during hook creation" +#: rhodecode/controllers/admin/settings.py:327 +#, fuzzy +msgid "Error occurred during hook creation" msgstr "创建钩子时发生错误" -#: rhodecode/controllers/admin/settings.py:344 +#: rhodecode/controllers/admin/settings.py:346 msgid "Email task created" msgstr "已创建电子邮件任务" -#: rhodecode/controllers/admin/settings.py:399 +#: rhodecode/controllers/admin/settings.py:410 msgid "You can't edit this user since it's crucial for entire application" msgstr "由于是系统帐号,无法编辑该用户" -#: rhodecode/controllers/admin/settings.py:430 +#: rhodecode/controllers/admin/settings.py:452 msgid "Your account was updated successfully" msgstr "你的帐号已经更新完成" -#: rhodecode/controllers/admin/settings.py:445 -#: rhodecode/controllers/admin/users.py:196 -#, python-format -msgid "error occurred during update of user %s" +#: rhodecode/controllers/admin/settings.py:467 +#: rhodecode/controllers/admin/users.py:198 +#, fuzzy, python-format +msgid "Error occurred during update of user %s" msgstr "更新用户%s时发生错误" #: rhodecode/controllers/admin/users.py:130 -#, python-format -msgid "created user %s" +#, fuzzy, python-format +msgid "Created user %s" msgstr "创建用户%s" #: rhodecode/controllers/admin/users.py:142 -#, python-format -msgid "error occurred during creation of user %s" +#, fuzzy, python-format +msgid "Error occurred during creation of user %s" msgstr "创建用户%s时发生错误" #: rhodecode/controllers/admin/users.py:176 msgid "User updated successfully" msgstr "用户更新成功" -#: rhodecode/controllers/admin/users.py:212 -msgid "successfully deleted user" +#: rhodecode/controllers/admin/users.py:214 +#, fuzzy +msgid "Successfully deleted user" msgstr "用户删除成功" -#: rhodecode/controllers/admin/users.py:217 +#: rhodecode/controllers/admin/users.py:219 msgid "An error occurred during deletion of user" msgstr "删除用户时发生错误" -#: rhodecode/controllers/admin/users.py:231 +#: rhodecode/controllers/admin/users.py:233 msgid "You can't edit this user" msgstr "无法编辑该用户" -#: rhodecode/controllers/admin/users.py:272 +#: rhodecode/controllers/admin/users.py:276 msgid "Granted 'repository create' permission to user" msgstr "已授予用户“创建版本库”的权限" -#: rhodecode/controllers/admin/users.py:277 +#: rhodecode/controllers/admin/users.py:281 msgid "Revoked 'repository create' permission to user" msgstr "已撤销用户“创建版本库”的权限" -#: rhodecode/controllers/admin/users.py:283 +#: rhodecode/controllers/admin/users.py:287 msgid "Granted 'repository fork' permission to user" msgstr "成功授予了用户“复刻版本库”权限" -#: rhodecode/controllers/admin/users.py:288 +#: rhodecode/controllers/admin/users.py:292 msgid "Revoked 'repository fork' permission to user" msgstr "成功撤销用户“复刻版本库”权限" -#: rhodecode/controllers/admin/users.py:294 -#: rhodecode/controllers/admin/users_groups.py:279 +#: rhodecode/controllers/admin/users.py:298 +#: rhodecode/controllers/admin/users_groups.py:281 msgid "An error occurred during permissions saving" msgstr "保存权限时发生错误" -#: rhodecode/controllers/admin/users.py:309 +#: rhodecode/controllers/admin/users.py:312 #, python-format msgid "Added email %s to user" msgstr "已为用户添加电子邮件 %s" -#: rhodecode/controllers/admin/users.py:315 +#: rhodecode/controllers/admin/users.py:318 msgid "An error occurred during email saving" msgstr "保存电子邮件时发生错误" -#: rhodecode/controllers/admin/users.py:325 +#: rhodecode/controllers/admin/users.py:328 msgid "Removed email from user" msgstr "成功删除用户电子邮件" +#: rhodecode/controllers/admin/users.py:341 +#, fuzzy, python-format +msgid "Added ip %s to user" +msgstr "已为用户添加电子邮件 %s" + +#: rhodecode/controllers/admin/users.py:347 +#, fuzzy +msgid "An error occurred during ip saving" +msgstr "保存电子邮件时发生错误" + +#: rhodecode/controllers/admin/users.py:359 +#, fuzzy +msgid "Removed ip from user" +msgstr "成功删除用户电子邮件" + #: rhodecode/controllers/admin/users_groups.py:86 -#, python-format -msgid "created users group %s" +#, fuzzy, python-format +msgid "Created user group %s" msgstr "建立用户组%s" #: rhodecode/controllers/admin/users_groups.py:97 -#, python-format -msgid "error occurred during creation of users group %s" +#, fuzzy, python-format +msgid "Error occurred during creation of user group %s" msgstr "创建用户组%s时发生错误" -#: rhodecode/controllers/admin/users_groups.py:164 -#, python-format -msgid "updated users group %s" +#: rhodecode/controllers/admin/users_groups.py:166 +#, fuzzy, python-format +msgid "Updated user group %s" msgstr "更新用户组%s" -#: rhodecode/controllers/admin/users_groups.py:186 -#, python-format -msgid "error occurred during update of users group %s" +#: rhodecode/controllers/admin/users_groups.py:188 +#, fuzzy, python-format +msgid "Error occurred during update of user group %s" msgstr "更新用户组%s时发生错误" -#: rhodecode/controllers/admin/users_groups.py:203 -msgid "successfully deleted users group" +#: rhodecode/controllers/admin/users_groups.py:205 +#, fuzzy +msgid "Successfully deleted user group" msgstr "删除用户组成功" -#: rhodecode/controllers/admin/users_groups.py:208 -msgid "An error occurred during deletion of users group" +#: rhodecode/controllers/admin/users_groups.py:210 +#, fuzzy +msgid "An error occurred during deletion of user group" msgstr "删除用户组时发生错误" -#: rhodecode/controllers/admin/users_groups.py:257 -msgid "Granted 'repository create' permission to users group" +#: rhodecode/controllers/admin/users_groups.py:259 +#, fuzzy +msgid "Granted 'repository create' permission to user group" msgstr "已授予用户组“创建版本库”的权限" -#: rhodecode/controllers/admin/users_groups.py:262 -msgid "Revoked 'repository create' permission to users group" +#: rhodecode/controllers/admin/users_groups.py:264 +#, fuzzy +msgid "Revoked 'repository create' permission to user group" msgstr "已撤销用户组“创建版本库”的权限" -#: rhodecode/controllers/admin/users_groups.py:268 -msgid "Granted 'repository fork' permission to users group" +#: rhodecode/controllers/admin/users_groups.py:270 +#, fuzzy +msgid "Granted 'repository fork' permission to user group" msgstr "已授予用户组“复刻版本库”的权限" -#: rhodecode/controllers/admin/users_groups.py:273 -msgid "Revoked 'repository fork' permission to users group" +#: rhodecode/controllers/admin/users_groups.py:275 +#, fuzzy +msgid "Revoked 'repository fork' permission to user group" msgstr "已撤销用户组“复刻版本库”的权限" -#: rhodecode/lib/auth.py:499 +#: rhodecode/lib/auth.py:530 +#, fuzzy, python-format +msgid "IP %s not allowed" +msgstr "%s个关注者" + +#: rhodecode/lib/auth.py:579 msgid "You need to be a registered user to perform this action" msgstr "必须是注册用户才能进行此操作" -#: rhodecode/lib/auth.py:540 +#: rhodecode/lib/auth.py:620 msgid "You need to be a signed in to view this page" msgstr "必须登录才能访问该页面" -#: rhodecode/lib/diffs.py:74 -msgid "binary file" +#: rhodecode/lib/diffs.py:66 +#, fuzzy +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" +#: rhodecode/lib/diffs.py:82 +msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "修订集因过大而被截断,可查看原始修订集作为替代" -#: rhodecode/lib/diffs.py:100 +#: rhodecode/lib/diffs.py:92 msgid "No changes detected" msgstr "未发现差异" -#: rhodecode/lib/helpers.py:374 +#: rhodecode/lib/helpers.py:394 #, python-format msgid "%a, %d %b %Y %H:%M:%S" msgstr "%Y/%m/%d %H:%M:%S" -#: rhodecode/lib/helpers.py:486 +#: rhodecode/lib/helpers.py:506 msgid "True" msgstr "是" -#: rhodecode/lib/helpers.py:490 +#: rhodecode/lib/helpers.py:509 msgid "False" msgstr "否" -#: rhodecode/lib/helpers.py:530 +#: rhodecode/lib/helpers.py:547 #, python-format msgid "Deleted branch: %s" msgstr "已经删除分支%s" -#: rhodecode/lib/helpers.py:533 +#: rhodecode/lib/helpers.py:550 #, python-format msgid "Created tag: %s" msgstr "创建标签%s" -#: rhodecode/lib/helpers.py:546 +#: rhodecode/lib/helpers.py:563 msgid "Changeset not found" msgstr "未找到修订集" -#: rhodecode/lib/helpers.py:589 +#: rhodecode/lib/helpers.py:615 #, python-format msgid "Show all combined changesets %s->%s" msgstr "显示合并的修订集%s->%s" -#: rhodecode/lib/helpers.py:595 +#: rhodecode/lib/helpers.py:621 msgid "compare view" msgstr "比较显示" -#: rhodecode/lib/helpers.py:615 +#: rhodecode/lib/helpers.py:641 msgid "and" msgstr "还有" -#: rhodecode/lib/helpers.py:616 +#: rhodecode/lib/helpers.py:642 #, python-format msgid "%s more" msgstr "%s个" -#: rhodecode/lib/helpers.py:617 -#: rhodecode/templates/changelog/changelog.html:51 +#: rhodecode/lib/helpers.py:643 rhodecode/templates/changelog/changelog.html:44 msgid "revisions" msgstr "修订" -#: rhodecode/lib/helpers.py:641 +#: rhodecode/lib/helpers.py:667 #, python-format msgid "fork name %s" msgstr "复刻名称%s" -#: rhodecode/lib/helpers.py:658 -#: rhodecode/templates/pullrequests/pullrequest_show.html:4 -#: rhodecode/templates/pullrequests/pullrequest_show.html:12 +#: rhodecode/lib/helpers.py:684 +#: rhodecode/templates/pullrequests/pullrequest_show.html:8 #, python-format msgid "Pull request #%s" msgstr "拉取请求#%s" -#: rhodecode/lib/helpers.py:664 +#: rhodecode/lib/helpers.py:690 msgid "[deleted] repository" msgstr "[删除]版本库" -#: rhodecode/lib/helpers.py:666 rhodecode/lib/helpers.py:676 +#: rhodecode/lib/helpers.py:692 rhodecode/lib/helpers.py:702 msgid "[created] repository" msgstr "[创建]版本库" -#: rhodecode/lib/helpers.py:668 +#: rhodecode/lib/helpers.py:694 msgid "[created] repository as fork" msgstr "[创建]复刻版本库" -#: rhodecode/lib/helpers.py:670 rhodecode/lib/helpers.py:678 +#: rhodecode/lib/helpers.py:696 rhodecode/lib/helpers.py:704 msgid "[forked] repository" msgstr "[复刻]版本库" -#: rhodecode/lib/helpers.py:672 rhodecode/lib/helpers.py:680 +#: rhodecode/lib/helpers.py:698 rhodecode/lib/helpers.py:706 msgid "[updated] repository" msgstr "[更新]版本库" -#: rhodecode/lib/helpers.py:674 +#: rhodecode/lib/helpers.py:700 msgid "[delete] repository" msgstr "[删除]版本库" -#: rhodecode/lib/helpers.py:682 +#: rhodecode/lib/helpers.py:708 msgid "[created] user" msgstr "[创建]用户" -#: rhodecode/lib/helpers.py:684 +#: rhodecode/lib/helpers.py:710 msgid "[updated] user" msgstr "[更新]用户" -#: rhodecode/lib/helpers.py:686 -msgid "[created] users group" +#: rhodecode/lib/helpers.py:712 +#, fuzzy +msgid "[created] user group" msgstr "[创建]用户组" -#: rhodecode/lib/helpers.py:688 -msgid "[updated] users group" +#: rhodecode/lib/helpers.py:714 +#, fuzzy +msgid "[updated] user group" msgstr "[更新]用户组" -#: rhodecode/lib/helpers.py:690 +#: rhodecode/lib/helpers.py:716 msgid "[commented] on revision in repository" msgstr "[评论]了版本库中的修订" -#: rhodecode/lib/helpers.py:692 +#: rhodecode/lib/helpers.py:718 msgid "[commented] on pull request for" msgstr "[评论]拉取请求" -#: rhodecode/lib/helpers.py:694 +#: rhodecode/lib/helpers.py:720 msgid "[closed] pull request for" msgstr "[关闭] 拉取请求" -#: rhodecode/lib/helpers.py:696 +#: rhodecode/lib/helpers.py:722 msgid "[pushed] into" msgstr "[推送]到" -#: rhodecode/lib/helpers.py:698 +#: rhodecode/lib/helpers.py:724 msgid "[committed via RhodeCode] into repository" msgstr "[通过RhodeCode提交]到版本库" -#: rhodecode/lib/helpers.py:700 +#: rhodecode/lib/helpers.py:726 msgid "[pulled from remote] into repository" msgstr "[远程拉取]到版本库" -#: rhodecode/lib/helpers.py:702 +#: rhodecode/lib/helpers.py:728 msgid "[pulled] from" msgstr "[拉取]自" -#: rhodecode/lib/helpers.py:704 +#: rhodecode/lib/helpers.py:730 msgid "[started following] repository" msgstr "[开始关注]版本库" -#: rhodecode/lib/helpers.py:706 +#: rhodecode/lib/helpers.py:732 msgid "[stopped following] repository" msgstr "[停止关注]版本库" -#: rhodecode/lib/helpers.py:883 +#: rhodecode/lib/helpers.py:910 #, python-format msgid " and %s more" msgstr "还有%s个" -#: rhodecode/lib/helpers.py:887 +#: rhodecode/lib/helpers.py:914 msgid "No Files" msgstr "没有文件" -#: rhodecode/lib/helpers.py:1163 +#: rhodecode/lib/helpers.py:1198 #, python-format msgid "" -"%s repository is not mapped to db perhaps it was created or renamed from the " -"filesystem please run the application again in order to rescan repositories" -msgstr "" -"版本库%s没有映射到数据库,可能是从文件系统创建或者重命名,请重启RhodeCode以重" -"新扫描版本库" - -#: rhodecode/lib/utils2.py:403 +"%s repository is not mapped to db perhaps it was created or renamed from " +"the filesystem please run the application again in order to rescan " +"repositories" +msgstr "版本库%s没有映射到数据库,可能是从文件系统创建或者重命名,请重启RhodeCode以重新扫描版本库" + +#: rhodecode/lib/unionrepo.py:193 +#, fuzzy +msgid "cannot create new union repository" +msgstr "[创建]版本库" + +#: rhodecode/lib/utils2.py:411 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d年" -#: rhodecode/lib/utils2.py:404 +#: rhodecode/lib/utils2.py:412 #, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "%d月" -#: rhodecode/lib/utils2.py:405 +#: rhodecode/lib/utils2.py:413 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d天" -#: rhodecode/lib/utils2.py:406 +#: rhodecode/lib/utils2.py:414 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d时" -#: rhodecode/lib/utils2.py:407 +#: rhodecode/lib/utils2.py:415 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d分" -#: rhodecode/lib/utils2.py:408 +#: rhodecode/lib/utils2.py:416 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d秒" -#: rhodecode/lib/utils2.py:424 +#: rhodecode/lib/utils2.py:432 #, python-format msgid "in %s" msgstr "%s" -#: rhodecode/lib/utils2.py:426 +#: rhodecode/lib/utils2.py:434 #, python-format msgid "%s ago" msgstr "%s前" -#: rhodecode/lib/utils2.py:428 +#: rhodecode/lib/utils2.py:436 #, python-format msgid "in %s and %s" msgstr "%s零%s" -#: rhodecode/lib/utils2.py:431 +#: rhodecode/lib/utils2.py:439 #, python-format msgid "%s and %s ago" msgstr "%s零%s前" -#: rhodecode/lib/utils2.py:434 +#: rhodecode/lib/utils2.py:442 msgid "just now" msgstr "刚才" -#: 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:1183 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1183 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1289 rhodecode/model/db.py:1388 msgid "Repository no access" msgstr "无版本库访问权限" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1184 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1184 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1290 rhodecode/model/db.py:1389 msgid "Repository read access" msgstr "版本库读取权限" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1185 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1185 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1291 rhodecode/model/db.py:1390 msgid "Repository write access" msgstr "版本库写入权限" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1186 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1186 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1292 rhodecode/model/db.py:1391 msgid "Repository admin access" msgstr "版本库管理权限" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1188 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1188 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1294 msgid "Repositories Group no access" msgstr "无版本库组访问权限" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1189 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1189 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1295 msgid "Repositories Group read access" msgstr "版本库组读取权限" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1190 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1190 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1296 msgid "Repositories Group write access" msgstr "版本库组写入" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1191 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1191 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1297 msgid "Repositories Group admin access" msgstr "版本库组管理权限" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1193 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1193 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1299 rhodecode/model/db.py:1398 msgid "RhodeCode Administrator" msgstr "RhodeCode 管理员" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1194 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1194 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1300 rhodecode/model/db.py:1399 msgid "Repository creation disabled" msgstr "禁用创建版本库" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1195 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1195 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1301 rhodecode/model/db.py:1400 msgid "Repository creation enabled" msgstr "允许创建版本库" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1196 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1196 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1302 rhodecode/model/db.py:1401 msgid "Repository forking disabled" msgstr "禁用复刻版本库" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1197 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1197 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303 rhodecode/model/db.py:1402 msgid "Repository forking enabled" msgstr "允许复刻版本库" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1198 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1198 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304 rhodecode/model/db.py:1403 msgid "Register disabled" msgstr "禁用注册" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1199 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1199 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305 rhodecode/model/db.py:1404 msgid "Register new user with RhodeCode with manual activation" msgstr "用手动激活注册新用户" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1202 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1202 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308 rhodecode/model/db.py:1407 msgid "Register new user with RhodeCode with auto activation" msgstr "用自动激活注册新用户" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1643 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1643 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1749 rhodecode/model/db.py:1838 msgid "Not Reviewed" msgstr "未检视" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1644 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1644 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1750 rhodecode/model/db.py:1839 msgid "Approved" msgstr "已批准" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1645 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1645 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1751 rhodecode/model/db.py:1840 msgid "Rejected" msgstr "驳回" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1646 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1646 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1752 rhodecode/model/db.py:1841 msgid "Under Review" msgstr "检视中" -#: rhodecode/model/comment.py:110 +#: rhodecode/model/comment.py:75 #, python-format msgid "on line %s" msgstr "在%s行" -#: rhodecode/model/comment.py:173 +#: rhodecode/model/comment.py:219 msgid "[Mention]" msgstr "[提及]" +#: rhodecode/model/db.py:1252 +msgid "top level" +msgstr "" + +#: rhodecode/model/db.py:1393 +#, fuzzy +msgid "Repository group no access" +msgstr "无版本库组访问权限" + +#: rhodecode/model/db.py:1394 +#, fuzzy +msgid "Repository group read access" +msgstr "版本库组读取权限" + +#: rhodecode/model/db.py:1395 +#, fuzzy +msgid "Repository group write access" +msgstr "版本库组写入" + +#: rhodecode/model/db.py:1396 +#, fuzzy +msgid "Repository group admin access" +msgstr "版本库组管理权限" + #: rhodecode/model/forms.py:43 msgid "Please enter a login" msgstr "请登录" @@ -1078,207 +1245,245 @@ msgstr "请输入密码" msgid "Enter %(min)i characters or more" msgstr "输入少于%(min)i个字符" -#: rhodecode/model/notification.py:220 -#, python-format -msgid "commented on commit at %(when)s" +#: rhodecode/model/notification.py:224 +#, fuzzy, python-format +msgid "%(user)s commented on changeset at %(when)s" msgstr "在%(when)s评论了提交" -#: rhodecode/model/notification.py:221 -#, python-format -msgid "sent message at %(when)s" -msgstr "在%(when)s发送信息" - -#: rhodecode/model/notification.py:222 -#, python-format -msgid "mentioned you at %(when)s" -msgstr "在%(when)s提到了你" - -#: rhodecode/model/notification.py:223 -#, python-format -msgid "registered in RhodeCode at %(when)s" -msgstr "在%(when)s注册到RhodeCode" - -#: rhodecode/model/notification.py:224 -#, python-format -msgid "opened new pull request at %(when)s" -msgstr "在%(when)s创建新的拉取请求" - #: rhodecode/model/notification.py:225 -#, python-format -msgid "commented on pull request at %(when)s" +#, fuzzy, python-format +msgid "%(user)s sent message at %(when)s" +msgstr "在%(when)s发送信息" + +#: rhodecode/model/notification.py:226 +#, fuzzy, python-format +msgid "%(user)s mentioned you at %(when)s" +msgstr "在%(when)s提到了你" + +#: rhodecode/model/notification.py:227 +#, fuzzy, python-format +msgid "%(user)s registered in RhodeCode at %(when)s" +msgstr "在%(when)s注册到RhodeCode" + +#: rhodecode/model/notification.py:228 +#, fuzzy, python-format +msgid "%(user)s opened new pull request at %(when)s" +msgstr "在%(when)s创建新的拉取请求" + +#: rhodecode/model/notification.py:229 +#, fuzzy, python-format +msgid "%(user)s 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" +#: rhodecode/model/pull_request.py:104 +#, fuzzy, python-format +msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s" msgstr "%(user)s想要你检视拉取请求#%(pr_id)s" -#: rhodecode/model/scm.py:542 +#: rhodecode/model/scm.py:598 msgid "latest tip" msgstr "最新tip版本" #: rhodecode/model/user.py:232 -msgid "new user registration" +#, fuzzy +msgid "New user registration" msgstr "[RhodeCode]新用户注册" #: rhodecode/model/user.py:257 rhodecode/model/user.py:281 -#: rhodecode/model/user.py:303 msgid "You can't Edit this user since it's crucial for entire application" msgstr "由于是系统帐号,无法编辑该用户" -#: rhodecode/model/user.py:327 +#: rhodecode/model/user.py:303 msgid "You can't remove this user since it's crucial for entire application" msgstr "由于是系统帐号,无法删除该用户" -#: rhodecode/model/user.py:333 +#: rhodecode/model/user.py:309 #, python-format msgid "" -"user \"%s\" still owns %s repositories and cannot be removed. Switch owners " -"or remove those repositories. %s" +"user \"%s\" still owns %s repositories and cannot be removed. Switch " +"owners or remove those repositories. %s" +msgstr "由于用户 \"%s\" 拥有版本库%s因而无法删除,请修改版本库所有者或删除版本库。%s" + +#: rhodecode/model/user.py:334 +#, fuzzy +msgid "Password reset link" +msgstr "密码重置链接" + +#: rhodecode/model/user.py:366 +#, fuzzy +msgid "Your new password" +msgstr "新密码" + +#: rhodecode/model/user.py:367 +#, python-format +msgid "Your new RhodeCode password:%s" msgstr "" -"由于用户 \"%s\" 拥有版本库%s因而无法删除,请修改版本库所有者或删除版本库。%s" - -#: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37 + +#: rhodecode/model/validators.py:38 rhodecode/model/validators.py:39 msgid "Value cannot be an empty list" msgstr "值不能为空" -#: rhodecode/model/validators.py:83 +#: rhodecode/model/validators.py:85 #, python-format msgid "Username \"%(username)s\" already exists" msgstr "用户名称%(username)s已经存在" -#: rhodecode/model/validators.py:85 +#: rhodecode/model/validators.py:87 #, python-format msgid "Username \"%(username)s\" is forbidden" msgstr "不允许用户名 \"%(username)s\"" -#: rhodecode/model/validators.py:87 +#: rhodecode/model/validators.py:89 msgid "" -"Username may only contain alphanumeric characters underscores, periods or " -"dashes and must begin with alphanumeric character" -msgstr "" -"只能使用字母、数字、下划线、小数点或减号作为用户名,且必须由数字或字母开头" - -#: rhodecode/model/validators.py:115 +"Username may only contain alphanumeric characters underscores, periods or" +" dashes and must begin with alphanumeric character" +msgstr "只能使用字母、数字、下划线、小数点或减号作为用户名,且必须由数字或字母开头" + +#: rhodecode/model/validators.py:117 #, python-format msgid "Username %(username)s is not valid" msgstr "用户名称 %(username)s 无效" -#: rhodecode/model/validators.py:134 -msgid "Invalid users group name" +#: rhodecode/model/validators.py:136 +#, fuzzy +msgid "Invalid user group name" msgstr "无效的用户组名" -#: rhodecode/model/validators.py:135 -#, python-format -msgid "Users group \"%(usersgroup)s\" already exists" -msgstr "用户组 \"%(usersgroup)s\" 已经存在" - #: rhodecode/model/validators.py:137 +#, fuzzy, python-format +msgid "User group \"%(usergroup)s\" already exists" +msgstr "用户组 \"%(usersgroup)s\" 已经存在" + +#: rhodecode/model/validators.py:139 +#, fuzzy msgid "" -"users group name may only contain alphanumeric characters underscores, " +"user group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" -msgstr "" -"只能使用字母、数字、下划线、小数点或减号作为用户组名,且必须由数字或字母开头" - -#: rhodecode/model/validators.py:175 +msgstr "只能使用字母、数字、下划线、小数点或减号作为用户组名,且必须由数字或字母开头" + +#: rhodecode/model/validators.py:177 msgid "Cannot assign this group as parent" msgstr "不能将这个组作为parent" -#: rhodecode/model/validators.py:176 +#: rhodecode/model/validators.py:178 #, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "组 \"%(group_name)s\" 已经存在" -#: rhodecode/model/validators.py:178 +#: rhodecode/model/validators.py:180 #, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "已经存在名为 \"%(group_name)s\" 的版本库" -#: rhodecode/model/validators.py:236 +#: rhodecode/model/validators.py:238 msgid "Invalid characters (non-ascii) in password" msgstr "密码含有无效(非ASCII)字符" -#: rhodecode/model/validators.py:251 +#: rhodecode/model/validators.py:253 msgid "Passwords do not match" msgstr "密码不符" -#: rhodecode/model/validators.py:268 +#: rhodecode/model/validators.py:270 msgid "invalid password" msgstr "无效密码" -#: rhodecode/model/validators.py:269 +#: rhodecode/model/validators.py:271 msgid "invalid user name" msgstr "无效用户名" -#: rhodecode/model/validators.py:270 +#: rhodecode/model/validators.py:272 msgid "Your account is disabled" msgstr "该帐号已被禁用" -#: rhodecode/model/validators.py:314 +#: rhodecode/model/validators.py:316 #, python-format msgid "Repository name %(repo)s is disallowed" msgstr "版本库名称不能为%(repo)s" -#: rhodecode/model/validators.py:316 +#: rhodecode/model/validators.py:318 #, python-format msgid "Repository named %(repo)s already exists" msgstr "已经存在版本库%(repo)s" -#: rhodecode/model/validators.py:317 -#, python-format -msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" -msgstr "版本库组 \"%(group)s\" 中已经存在版本库 \"%(repo)s\"" - #: rhodecode/model/validators.py:319 #, python-format -msgid "Repositories group with name \"%(repo)s\" already exists" +msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" +msgstr "版本库组 \"%(group)s\" 中已经存在版本库 \"%(repo)s\"" + +#: rhodecode/model/validators.py:321 +#, fuzzy, python-format +msgid "Repository group with name \"%(repo)s\" already exists" msgstr "已经存在名为 \"%(repo)s\" 的版本库组" -#: rhodecode/model/validators.py:432 +#: rhodecode/model/validators.py:438 msgid "invalid clone url" msgstr "无效的克隆地址" -#: rhodecode/model/validators.py:433 +#: rhodecode/model/validators.py:439 msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url" msgstr "无效的克隆地址,提供一个有效的克隆 http(s)或svn+http(s)地址" -#: rhodecode/model/validators.py:458 +#: rhodecode/model/validators.py:464 msgid "Fork have to be the same type as parent" msgstr "复刻版本库必须和父版本库类型相同" -#: rhodecode/model/validators.py:473 +#: rhodecode/model/validators.py:479 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" +#: rhodecode/model/validators.py:481 +#, fuzzy +msgid "no permission to create repository in root location" +msgstr "没有在该版本库组中创建版本库的权限" + +#: rhodecode/model/validators.py:518 +#, fuzzy +msgid "You don't have permissions to create a group in this location" +msgstr "没有在该版本库组中创建版本库的权限" + +#: rhodecode/model/validators.py:557 +#, fuzzy +msgid "This username or user group name is not valid" msgstr "用户或用户组名称无效" -#: rhodecode/model/validators.py:591 +#: rhodecode/model/validators.py:650 msgid "This is not a valid path" msgstr "不是一个合法的路径" -#: rhodecode/model/validators.py:606 +#: rhodecode/model/validators.py:665 msgid "This e-mail address is already taken" msgstr "该邮件地址已被使用" -#: rhodecode/model/validators.py:626 +#: rhodecode/model/validators.py:685 #, python-format msgid "e-mail \"%(email)s\" does not exist." msgstr "邮件地址\"%(email)s\"不存在" -#: rhodecode/model/validators.py:663 +#: rhodecode/model/validators.py:722 msgid "" -"The LDAP Login attribute of the CN must be specified - this is the name of " -"the attribute that is equivalent to \"username\"" +"The LDAP Login attribute of the CN must be specified - this is the name " +"of the attribute that is equivalent to \"username\"" msgstr "LDAP 登陆属性的 CN 必须指定 - 这个名字作为用户名" -#: rhodecode/model/validators.py:682 +#: rhodecode/model/validators.py:735 #, python-format msgid "Revisions %(revs)s are already part of pull request or have set status" msgstr "修订%(revs)s已经包含在拉取请求中或者或者已经设置状态" -#: rhodecode/templates/index.html:3 +#: rhodecode/model/validators.py:767 +msgid "Please enter a valid IPv4 or IpV6 address" +msgstr "" + +#: rhodecode/model/validators.py:768 +#, python-format +msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" +msgstr "" + +#: rhodecode/model/validators.py:800 +msgid "Key name can only consist of letters, underscore, dash or numbers" +msgstr "" + +#: rhodecode/templates/index.html:5 msgid "Dashboard" msgstr "控制面板" @@ -1287,205 +1492,229 @@ msgstr "控制面板" #: 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/bookmarks/bookmarks.html:9 #: rhodecode/templates/branches/branches.html:9 #: rhodecode/templates/journal/journal.html:9 -#: rhodecode/templates/journal/journal.html:48 -#: rhodecode/templates/tags/tags.html:10 +#: rhodecode/templates/journal/journal.html:46 +#: rhodecode/templates/journal/journal.html:47 +#: rhodecode/templates/tags/tags.html:9 msgid "quick filter..." msgstr "快速过滤..." #: rhodecode/templates/index_base.html:6 #: rhodecode/templates/admin/repos/repos.html:9 -#: rhodecode/templates/base/base.html:233 msgid "repositories" msgstr "版本库" #: rhodecode/templates/index_base.html:13 -#: rhodecode/templates/index_base.html:15 +#: rhodecode/templates/index_base.html:18 +#: rhodecode/templates/admin/repos/repo_add.html:5 #: rhodecode/templates/admin/repos/repos.html:21 -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 +msgid "Add repository" +msgstr "添加版本库" + +#: rhodecode/templates/index_base.html:15 +#: rhodecode/templates/index_base.html:20 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:31 +#, fuzzy +msgid "Add group" +msgstr "编辑版本库组" + +#: rhodecode/templates/index_base.html:27 +#, fuzzy +msgid "Edit group" +msgstr "编辑版本库组" + +#: rhodecode/templates/index_base.html:27 +msgid "You have admin right to this group, and can edit it" +msgstr "" + +#: rhodecode/templates/index_base.html:40 +#: rhodecode/templates/index_base.html:140 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:33 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:38 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:43 #: rhodecode/templates/admin/users_groups/users_group_add.html:32 #: rhodecode/templates/admin/users_groups/users_group_edit.html:33 +#: rhodecode/templates/admin/users_groups/users_groups.html:34 msgid "Group name" msgstr "组名" -#: 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/index_base.html:41 +#: rhodecode/templates/index_base.html:83 +#: rhodecode/templates/index_base.html:142 +#: rhodecode/templates/index_base.html:180 +#: rhodecode/templates/index_base.html:270 #: 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 +#: rhodecode/templates/admin/repos/repos.html:73 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:42 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:47 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:44 +#: rhodecode/templates/forks/fork.html:56 +#: rhodecode/templates/pullrequests/pullrequest.html:101 +#: rhodecode/templates/summary/summary.html:106 msgid "Description" msgstr "描述" -#: rhodecode/templates/index_base.html:40 -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47 -msgid "Repositories group" +#: rhodecode/templates/index_base.html:51 +#: 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_show.html:57 +#: rhodecode/templates/forks/fork.html:47 +msgid "Repository group" msgstr "版本库组" -#: rhodecode/templates/index_base.html:71 -#: rhodecode/templates/index_base.html:174 -#: rhodecode/templates/index_base.html:264 +#: rhodecode/templates/index_base.html:82 +#: rhodecode/templates/index_base.html:178 +#: rhodecode/templates/index_base.html:268 #: 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/admin/repos/repos.html:71 +#: rhodecode/templates/admin/users/user_edit_my_account.html:172 +#: rhodecode/templates/base/perms_summary.html:14 +#: rhodecode/templates/bookmarks/bookmarks.html:34 #: rhodecode/templates/bookmarks/bookmarks_data.html:6 -#: rhodecode/templates/branches/branches.html:50 +#: rhodecode/templates/branches/branches.html:47 #: rhodecode/templates/branches/branches_data.html:6 #: rhodecode/templates/files/files_browser.html:47 -#: rhodecode/templates/journal/journal.html:70 -#: rhodecode/templates/journal/journal.html:196 -#: 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/journal/journal.html:193 +#: rhodecode/templates/journal/journal.html:296 +#: rhodecode/templates/summary/summary.html:55 +#: rhodecode/templates/summary/summary.html:124 +#: rhodecode/templates/tags/tags.html:48 #: rhodecode/templates/tags/tags_data.html:6 msgid "Name" msgstr "名称" -#: rhodecode/templates/index_base.html:73 +#: rhodecode/templates/index_base.html:84 msgid "Last change" msgstr "最后修改" -#: 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:198 +#: rhodecode/templates/index_base.html:85 +#: rhodecode/templates/index_base.html:183 +#: rhodecode/templates/index_base.html:273 +#: rhodecode/templates/admin/repos/repos.html:74 +#: rhodecode/templates/admin/users/user_edit_my_account.html:174 +#: rhodecode/templates/journal/journal.html:195 +#: rhodecode/templates/journal/journal.html:298 msgid "Tip" msgstr "Tip" -#: rhodecode/templates/index_base.html:75 -#: rhodecode/templates/index_base.html:181 -#: rhodecode/templates/index_base.html:269 +#: rhodecode/templates/index_base.html:86 +#: rhodecode/templates/index_base.html:185 +#: rhodecode/templates/index_base.html:275 #: rhodecode/templates/admin/repos/repo_edit.html:121 -#: rhodecode/templates/admin/repos/repos.html:73 +#: rhodecode/templates/admin/repos/repos.html:76 msgid "Owner" msgstr "所有者" -#: 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 +#: rhodecode/templates/index_base.html:87 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/index_base.html:171 +#: rhodecode/templates/index_base.html:209 +#: rhodecode/templates/index_base.html:296 +#: rhodecode/templates/admin/repos/repos.html:97 +#: rhodecode/templates/admin/users/user_edit_my_account.html:196 #: rhodecode/templates/admin/users/users.html:107 -#: rhodecode/templates/bookmarks/bookmarks.html:60 -#: rhodecode/templates/branches/branches.html:76 -#: rhodecode/templates/journal/journal.html:221 -#: rhodecode/templates/tags/tags.html:77 +#: rhodecode/templates/bookmarks/bookmarks.html:58 +#: rhodecode/templates/branches/branches.html:73 +#: rhodecode/templates/journal/journal.html:217 +#: rhodecode/templates/journal/journal.html:320 +#: rhodecode/templates/tags/tags.html:74 msgid "Click to sort ascending" msgstr "点击以升序排列" -#: 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/index_base.html:172 +#: rhodecode/templates/index_base.html:210 +#: rhodecode/templates/index_base.html:297 +#: rhodecode/templates/admin/repos/repos.html:98 +#: rhodecode/templates/admin/users/user_edit_my_account.html:197 #: rhodecode/templates/admin/users/users.html:108 -#: rhodecode/templates/bookmarks/bookmarks.html:61 -#: rhodecode/templates/branches/branches.html:77 -#: rhodecode/templates/journal/journal.html:222 -#: rhodecode/templates/tags/tags.html:78 +#: rhodecode/templates/bookmarks/bookmarks.html:59 +#: rhodecode/templates/branches/branches.html:74 +#: rhodecode/templates/journal/journal.html:218 +#: rhodecode/templates/journal/journal.html:321 +#: rhodecode/templates/tags/tags.html:75 msgid "Click to sort descending" msgstr "点击以降序排列" -#: rhodecode/templates/index_base.html:177 -#: rhodecode/templates/index_base.html:267 +#: rhodecode/templates/index_base.html:181 +#: rhodecode/templates/index_base.html:271 msgid "Last Change" msgstr "最后修改" -#: 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/index_base.html:211 +#: rhodecode/templates/admin/repos/repos.html:99 +#: rhodecode/templates/admin/users/user_edit_my_account.html:198 #: rhodecode/templates/admin/users/users.html:109 -#: rhodecode/templates/bookmarks/bookmarks.html:62 -#: rhodecode/templates/branches/branches.html:78 -#: rhodecode/templates/journal/journal.html:223 -#: rhodecode/templates/tags/tags.html:79 +#: rhodecode/templates/bookmarks/bookmarks.html:60 +#: rhodecode/templates/branches/branches.html:75 +#: rhodecode/templates/journal/journal.html:219 +#: rhodecode/templates/journal/journal.html:322 +#: rhodecode/templates/tags/tags.html:76 msgid "No records found." msgstr "没有找到记录" -#: 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/index_base.html:212 +#: rhodecode/templates/index_base.html:299 +#: rhodecode/templates/admin/repos/repos.html:100 +#: rhodecode/templates/admin/users/user_edit_my_account.html:199 #: rhodecode/templates/admin/users/users.html:110 -#: rhodecode/templates/bookmarks/bookmarks.html:63 -#: rhodecode/templates/branches/branches.html:79 -#: rhodecode/templates/journal/journal.html:224 -#: rhodecode/templates/tags/tags.html:80 +#: rhodecode/templates/bookmarks/bookmarks.html:61 +#: rhodecode/templates/branches/branches.html:76 +#: rhodecode/templates/journal/journal.html:220 +#: rhodecode/templates/journal/journal.html:323 +#: rhodecode/templates/tags/tags.html:77 msgid "Data error." msgstr "数据错误" -#: 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/index_base.html:213 +#: rhodecode/templates/index_base.html:300 +#: rhodecode/templates/admin/repos/repos.html:101 +#: rhodecode/templates/admin/users/user_edit_my_account.html:58 +#: rhodecode/templates/admin/users/user_edit_my_account.html:200 #: rhodecode/templates/admin/users/users.html:111 -#: rhodecode/templates/bookmarks/bookmarks.html:64 -#: rhodecode/templates/branches/branches.html:80 -#: rhodecode/templates/journal/journal.html:62 -#: rhodecode/templates/journal/journal.html:225 -#: rhodecode/templates/tags/tags.html:81 +#: rhodecode/templates/bookmarks/bookmarks.html:62 +#: rhodecode/templates/branches/branches.html:77 +#: rhodecode/templates/journal/journal.html:221 +#: rhodecode/templates/journal/journal.html:324 +#: rhodecode/templates/tags/tags.html:78 msgid "Loading..." msgstr "载入中..." -#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54 -msgid "Sign In" +#: rhodecode/templates/index_base.html:298 +#, fuzzy +msgid "No repositories found." +msgstr "版本库组" + +#: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:227 +msgid "Log In" msgstr "登录" #: rhodecode/templates/login.html:21 -msgid "Sign In to" -msgstr "登录到" +#, python-format +msgid "Log In to %s" +msgstr "" #: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20 #: rhodecode/templates/admin/admin_log.html:5 #: rhodecode/templates/admin/users/user_add.html:32 -#: rhodecode/templates/admin/users/user_edit.html:50 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26 -#: rhodecode/templates/base/base.html:83 -#: rhodecode/templates/summary/summary.html:131 +#: rhodecode/templates/admin/users/user_edit.html:57 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:31 +#: rhodecode/templates/admin/users/users.html:77 +#: rhodecode/templates/base/base.html:203 +#: rhodecode/templates/summary/summary.html:123 msgid "Username" msgstr "帐号" #: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29 #: rhodecode/templates/admin/ldap/ldap.html:46 #: rhodecode/templates/admin/users/user_add.html:41 -#: rhodecode/templates/base/base.html:92 +#: rhodecode/templates/base/base.html:212 msgid "Password" msgstr "密码" @@ -1493,17 +1722,22 @@ msgstr "密码" msgid "Remember me" msgstr "记住密码" +#: rhodecode/templates/login.html:54 +msgid "Sign In" +msgstr "登录" + #: rhodecode/templates/login.html:60 msgid "Forgot your password ?" msgstr "忘记了密码?" -#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103 +#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:223 msgid "Don't have an account ?" msgstr "还没有帐号?" #: rhodecode/templates/password_reset.html:5 -msgid "Reset your password" -msgstr "重置密码" +#, fuzzy +msgid "Password Reset" +msgstr "密码重置链接" #: rhodecode/templates/password_reset.html:11 msgid "Reset your password to" @@ -1535,23 +1769,23 @@ msgstr "确认密码" #: 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 +#: rhodecode/templates/admin/users/user_edit.html:97 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62 msgid "First Name" msgstr "名" #: 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 +#: rhodecode/templates/admin/users/user_edit.html:106 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71 msgid "Last Name" msgstr "姓" #: 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 +#: rhodecode/templates/admin/users/user_edit.html:115 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80 +#: rhodecode/templates/summary/summary.html:125 msgid "Email" msgstr "电子邮件" @@ -1563,44 +1797,31 @@ msgstr "注册后,帐号将启用" msgid "Your account must wait for activation by administrator" msgstr "管理员审核后,你注册的帐号将被启用" -#: rhodecode/templates/repo_switcher_list.html:11 +#: rhodecode/templates/repo_switcher_list.html:10 #: 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 +#: rhodecode/templates/data_table/_dt_elements.html:61 +#: rhodecode/templates/summary/summary.html:77 msgid "Private repository" msgstr "私有版本库" -#: rhodecode/templates/repo_switcher_list.html:16 +#: rhodecode/templates/repo_switcher_list.html:12 +#: rhodecode/templates/data_table/_dt_elements.html:63 +#: rhodecode/templates/summary/summary.html:79 msgid "Public repository" msgstr "公共版本库" -#: rhodecode/templates/switch_to_list.html:3 -#: rhodecode/templates/branches/branches.html:14 -msgid "branches" -msgstr "分支" - #: rhodecode/templates/switch_to_list.html:10 #: rhodecode/templates/branches/branches_data.html:57 msgid "There are no branches yet" msgstr "没有任何分支" -#: rhodecode/templates/switch_to_list.html:15 -#: rhodecode/templates/shortlog/shortlog_data.html:10 -#: rhodecode/templates/tags/tags.html:15 -msgid "tags" -msgstr "标签" - #: rhodecode/templates/switch_to_list.html:22 #: rhodecode/templates/tags/tags_data.html:38 msgid "There are no tags yet" msgstr "没有任何标签" -#: rhodecode/templates/switch_to_list.html:28 -#: rhodecode/templates/bookmarks/bookmarks.html:15 -msgid "bookmarks" -msgstr "书签" - #: rhodecode/templates/switch_to_list.html:35 #: rhodecode/templates/bookmarks/bookmarks_data.html:32 msgid "There are no bookmarks yet" @@ -1608,6 +1829,7 @@ msgstr "无书签" #: rhodecode/templates/admin/admin.html:5 #: rhodecode/templates/admin/admin.html:13 +#: rhodecode/templates/base/base.html:68 msgid "Admin journal" msgstr "系统日志" @@ -1628,11 +1850,13 @@ msgid_plural "%s entries" msgstr[0] "%s条" #: 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 +#: rhodecode/templates/admin/repos/repos.html:77 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 +#: rhodecode/templates/admin/users/user_edit_my_account.html:176 +#: rhodecode/templates/admin/users/users.html:87 +#: rhodecode/templates/admin/users_groups/users_groups.html:37 +#: rhodecode/templates/journal/journal.html:197 +#: rhodecode/templates/journal/journal.html:300 msgid "Action" msgstr "操作" @@ -1642,11 +1866,11 @@ msgid "Repository" msgstr "版本库" #: rhodecode/templates/admin/admin_log.html:8 -#: rhodecode/templates/bookmarks/bookmarks.html:37 +#: rhodecode/templates/bookmarks/bookmarks.html:35 #: rhodecode/templates/bookmarks/bookmarks_data.html:7 -#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches.html:48 #: rhodecode/templates/branches/branches_data.html:7 -#: rhodecode/templates/tags/tags.html:52 +#: rhodecode/templates/tags/tags.html:49 #: rhodecode/templates/tags/tags_data.html:7 msgid "Date" msgstr "日期" @@ -1665,6 +1889,7 @@ msgid "Repositories defaults" msgstr "版本库默认设置" #: rhodecode/templates/admin/defaults/defaults.html:11 +#: rhodecode/templates/base/base.html:75 msgid "Defaults" msgstr "默认设置" @@ -1677,8 +1902,7 @@ 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 +#: rhodecode/templates/forks/fork.html:69 msgid "" "Private repositories are only visible to people explicitly added as " "collaborators." @@ -1706,7 +1930,7 @@ 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 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72 msgid "Enable locking" msgstr "启用锁定" @@ -1717,14 +1941,18 @@ 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/permissions/permissions.html:92 +#: rhodecode/templates/admin/repos/repo_edit.html:148 +#: rhodecode/templates/admin/repos/repo_edit.html:173 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:80 #: 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/user_add.html:94 +#: rhodecode/templates/admin/users/user_edit.html:140 +#: rhodecode/templates/admin/users/user_edit.html:185 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:88 +#: rhodecode/templates/admin/users_groups/users_group_add.html:49 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:90 #: rhodecode/templates/admin/users_groups/users_group_edit.html:135 -#: rhodecode/templates/settings/repo_settings.html:94 msgid "Save" msgstr "保存" @@ -1733,7 +1961,10 @@ msgid "LDAP administration" msgstr "LDAP管理员" #: rhodecode/templates/admin/ldap/ldap.html:11 -msgid "Ldap" +#: rhodecode/templates/admin/users/users.html:86 +#: rhodecode/templates/base/base.html:74 +#, fuzzy +msgid "LDAP" msgstr "LDAP" #: rhodecode/templates/admin/ldap/ldap.html:28 @@ -1814,8 +2045,7 @@ msgid "Comments" msgstr "评论" #: rhodecode/templates/admin/notifications/notifications.html:31 -#: rhodecode/templates/base/base.html:267 -#: rhodecode/templates/base/base.html:269 +#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 msgid "Pull requests" msgstr "拉取请求" @@ -1833,6 +2063,7 @@ msgid "Show notification" msgstr "显示通知" #: rhodecode/templates/admin/notifications/show_notification.html:9 +#: rhodecode/templates/base/base.html:241 msgid "Notifications" msgstr "通知" @@ -1841,11 +2072,12 @@ msgid "Permissions administration" 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:143 +#: rhodecode/templates/admin/repos/repo_edit.html:158 +#: rhodecode/templates/admin/repos/repo_edit.html:165 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64 +#: rhodecode/templates/admin/users/user_edit.html:150 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100 -#: rhodecode/templates/settings/repo_settings.html:86 +#: rhodecode/templates/base/base.html:73 msgid "Permissions" msgstr "权限" @@ -1858,34 +2090,26 @@ msgid "Anonymous access" msgstr "匿名访问" #: rhodecode/templates/admin/permissions/permissions.html:49 +#, fuzzy 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 "" -"所有版本库的默认权限将被重置到选择的权限,所有版本库的自定义权限将被丢弃" +"All default permissions on each repository will be reset to chosen " +"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" +#, fuzzy +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 " +"All default permissions on each repository group will be reset to chosen " +"permission, note that all custom default permission on repository groups " "will be lost" -msgstr "" -"所有版本库组的默认权限将被重置到选择的权限,所有版本库组的自定义权限将被丢弃" +msgstr "所有版本库组的默认权限将被重置到选择的权限,所有版本库组的自定义权限将被丢弃" #: rhodecode/templates/admin/permissions/permissions.html:69 msgid "Registration" @@ -1899,40 +2123,99 @@ msgstr "建立版本库" msgid "Repository forking" msgstr "版本库复刻" -#: rhodecode/templates/admin/permissions/permissions.html:92 -#: rhodecode/templates/admin/repos/repo_edit.html:264 -msgid "set" -msgstr "设置" - -#: rhodecode/templates/admin/repos/repo_add.html:5 -#: rhodecode/templates/admin/repos/repo_add_create_repository.html:5 -msgid "Add repository" -msgstr "添加版本库" - -#: rhodecode/templates/admin/repos/repo_add.html:11 -#: rhodecode/templates/admin/repos/repo_edit.html:11 -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10 +#: rhodecode/templates/admin/permissions/permissions.html:93 +#: rhodecode/templates/admin/permissions/permissions.html:154 +#: rhodecode/templates/admin/repos/repo_edit.html:149 +#: rhodecode/templates/admin/repos/repo_edit.html:174 +#: rhodecode/templates/admin/repos/repo_edit.html:388 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81 +#: rhodecode/templates/admin/settings/settings.html:115 +#: rhodecode/templates/admin/settings/settings.html:187 +#: rhodecode/templates/admin/settings/settings.html:278 +#: rhodecode/templates/admin/users/user_edit.html:141 +#: rhodecode/templates/admin/users/user_edit.html:186 +#: rhodecode/templates/admin/users/user_edit.html:235 +#: rhodecode/templates/admin/users/user_edit.html:283 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:89 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:136 +#: rhodecode/templates/files/files_add.html:80 +#: rhodecode/templates/files/files_edit.html:66 +#: rhodecode/templates/pullrequests/pullrequest.html:110 +msgid "Reset" +msgstr "重置" + +#: rhodecode/templates/admin/permissions/permissions.html:103 +#, fuzzy +msgid "Default User Permissions" +msgstr "默认权限" + +#: rhodecode/templates/admin/permissions/permissions.html:113 +#: rhodecode/templates/admin/users/user_edit.html:244 +#, fuzzy +msgid "Allowed IP addresses" +msgstr "邮件地址" + +#: rhodecode/templates/admin/permissions/permissions.html:127 +#: rhodecode/templates/admin/repos/repo_edit.html:347 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70 +#: rhodecode/templates/admin/users/user_edit.html:212 +#: rhodecode/templates/admin/users/user_edit.html:257 +#: rhodecode/templates/admin/users_groups/users_groups.html:46 +#: rhodecode/templates/data_table/_dt_elements.html:122 +#: rhodecode/templates/data_table/_dt_elements.html:130 +msgid "delete" +msgstr "删除" + +#: rhodecode/templates/admin/permissions/permissions.html:128 +#: rhodecode/templates/admin/users/user_edit.html:258 +#, fuzzy, python-format +msgid "Confirm to delete this ip: %s" +msgstr "确认删除邮箱:%s" + +#: rhodecode/templates/admin/permissions/permissions.html:134 +#: rhodecode/templates/admin/users/user_edit.html:264 +msgid "All IP addresses are allowed" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:145 +#: rhodecode/templates/admin/users/user_edit.html:275 +#, fuzzy +msgid "New ip address" +msgstr "增加邮箱" + +#: rhodecode/templates/admin/permissions/permissions.html:153 +#: rhodecode/templates/admin/repos/repo_add_base.html:73 +#: rhodecode/templates/admin/repos/repo_edit.html:387 +#: rhodecode/templates/admin/users/user_edit.html:234 +#: rhodecode/templates/admin/users/user_edit.html:282 +msgid "Add" +msgstr "增加" + +#: rhodecode/templates/admin/repos/repo_add.html:12 +#: rhodecode/templates/admin/repos/repo_add.html:16 +#: rhodecode/templates/base/base.html:69 rhodecode/templates/base/base.html:103 +#: rhodecode/templates/base/base.html:263 msgid "Repositories" msgstr "版本库" -#: rhodecode/templates/admin/repos/repo_add.html:13 -msgid "add new" +#: rhodecode/templates/admin/repos/repo_add.html:19 +#, fuzzy +msgid "Add new" msgstr "新建" #: rhodecode/templates/admin/repos/repo_add_base.html:20 -#: rhodecode/templates/summary/summary.html:104 -#: rhodecode/templates/summary/summary.html:105 +#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:97 msgid "Clone from" msgstr "克隆自" #: 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 "可选的,指定版本库应该从哪个http[s]地址克隆。" #: rhodecode/templates/admin/repos/repo_add_base.html:33 -#: rhodecode/templates/forks/fork.html:54 +#: rhodecode/templates/forks/fork.html:51 msgid "Optionaly select a group to put this repository into." msgstr "可选的,选择一个组将版本库放到其中" @@ -1942,58 +2225,39 @@ msgstr "要创建的版本库类型" #: 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 +#: rhodecode/templates/forks/fork.html:38 msgid "Landing revision" msgstr "默认修订" #: 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 +#: rhodecode/templates/forks/fork.html:42 msgid "Default revision for files page, downloads, whoosh and 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." +#: rhodecode/templates/forks/fork.html:60 +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" -msgstr "新建" - -#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9 -msgid "add new repository" -msgstr "新建版本库" - -#: rhodecode/templates/admin/repos/repo_edit.html:5 +#: rhodecode/templates/admin/repos/repo_edit.html:8 msgid "Edit repository" msgstr "编辑版本库" -#: rhodecode/templates/admin/repos/repo_edit.html:13 -#: rhodecode/templates/admin/users/user_edit.html:13 -#: rhodecode/templates/admin/users/user_edit.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 "编辑" +#: rhodecode/templates/admin/repos/repo_edit.html:12 +#: rhodecode/templates/admin/settings/hooks.html:9 +#: rhodecode/templates/admin/settings/settings.html:11 +#: rhodecode/templates/base/base.html:76 rhodecode/templates/base/base.html:121 +#: rhodecode/templates/summary/summary.html:212 +msgid "Settings" +msgstr "设置" #: rhodecode/templates/admin/repos/repo_edit.html:40 -#: rhodecode/templates/settings/repo_settings.html:39 msgid "Clone uri" msgstr "克隆地址" #: 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 "可选的,选择一个组将版本库放到其中" @@ -2001,179 +2265,210 @@ msgstr "可选的,选择一个组将版本库放到其中" msgid "Change owner of this repository." 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: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:95 -msgid "Reset" -msgstr "重置" - -#: rhodecode/templates/admin/repos/repo_edit.html:152 -msgid "Administration" -msgstr "管理" - -#: rhodecode/templates/admin/repos/repo_edit.html:155 +#: rhodecode/templates/admin/repos/repo_edit.html:184 +#, fuzzy +msgid "Advanced settings" +msgstr "保存设置" + +#: rhodecode/templates/admin/repos/repo_edit.html:187 msgid "Statistics" msgstr "统计" -#: rhodecode/templates/admin/repos/repo_edit.html:159 +#: rhodecode/templates/admin/repos/repo_edit.html:191 msgid "Reset current statistics" msgstr "重置统计" -#: rhodecode/templates/admin/repos/repo_edit.html:159 +#: rhodecode/templates/admin/repos/repo_edit.html:191 msgid "Confirm to remove current statistics" msgstr "确认移除当前统计" -#: rhodecode/templates/admin/repos/repo_edit.html:162 +#: rhodecode/templates/admin/repos/repo_edit.html:194 msgid "Fetched to rev" msgstr "获取到修订" -#: rhodecode/templates/admin/repos/repo_edit.html:163 +#: rhodecode/templates/admin/repos/repo_edit.html:195 msgid "Stats gathered" msgstr "已收集的统计" -#: rhodecode/templates/admin/repos/repo_edit.html:171 -msgid "Remote" -msgstr "远程" - -#: rhodecode/templates/admin/repos/repo_edit.html:175 -msgid "Pull changes from remote location" -msgstr "从远程路径拉取修订集" - -#: rhodecode/templates/admin/repos/repo_edit.html:175 -msgid "Confirm to pull changes from remote side" -msgstr "确认从远程拉取修订集" - -#: rhodecode/templates/admin/repos/repo_edit.html:186 -msgid "Cache" -msgstr "缓存" - -#: rhodecode/templates/admin/repos/repo_edit.html:190 -msgid "Invalidate repository cache" -msgstr "清除版本库缓存" - -#: rhodecode/templates/admin/repos/repo_edit.html:190 -msgid "Confirm to invalidate repository cache" -msgstr "确认清除版本库缓存" - -#: rhodecode/templates/admin/repos/repo_edit.html: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 "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 "启用" +msgid "Remote" +msgstr "远程" + +#: rhodecode/templates/admin/repos/repo_edit.html:207 +msgid "Pull changes from remote location" +msgstr "从远程路径拉取修订集" + +#: rhodecode/templates/admin/repos/repo_edit.html:207 +msgid "Confirm to pull changes from remote side" +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 "Cache" +msgstr "缓存" + +#: rhodecode/templates/admin/repos/repo_edit.html:222 +msgid "Invalidate repository cache" +msgstr "清除版本库缓存" + +#: rhodecode/templates/admin/repos/repo_edit.html:222 +msgid "Confirm to invalidate repository cache" +msgstr "确认清除版本库缓存" + +#: rhodecode/templates/admin/repos/repo_edit.html:225 +msgid "" +"Manually invalidate cache for this repository. On first access repository" +" will be cached again" +msgstr "手动清除版本库缓存。之后第一次访问的时候将重建缓存" + +#: rhodecode/templates/admin/repos/repo_edit.html:230 +msgid "List of cached values" +msgstr "缓存值列表" + +#: rhodecode/templates/admin/repos/repo_edit.html:233 +msgid "Prefix" +msgstr "前缀" + +#: rhodecode/templates/admin/repos/repo_edit.html:234 +msgid "Key" +msgstr "键" + +#: rhodecode/templates/admin/repos/repo_edit.html:235 +#: rhodecode/templates/admin/users/user_add.html:86 +#: rhodecode/templates/admin/users/user_edit.html:124 +#: rhodecode/templates/admin/users/users.html:84 +#: rhodecode/templates/admin/users_groups/users_group_add.html:41 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:42 +#: rhodecode/templates/admin/users_groups/users_groups.html:36 +msgid "Active" +msgstr "启用" + +#: rhodecode/templates/admin/repos/repo_edit.html:250 +#: rhodecode/templates/base/base.html:280 +#: rhodecode/templates/base/base.html:281 msgid "Public journal" msgstr "公共日志" -#: rhodecode/templates/admin/repos/repo_edit.html:224 +#: rhodecode/templates/admin/repos/repo_edit.html:256 msgid "Remove from public journal" msgstr "从公共日志删除" -#: rhodecode/templates/admin/repos/repo_edit.html:226 +#: rhodecode/templates/admin/repos/repo_edit.html:258 msgid "Add to public journal" msgstr "添加到公共日志" -#: rhodecode/templates/admin/repos/repo_edit.html:231 +#: rhodecode/templates/admin/repos/repo_edit.html:263 msgid "" -"All actions made on this repository will be accessible to everyone in public " -"journal" +"All actions made on this repository will be accessible to everyone in " +"public journal" msgstr "任何人都可以在公共日志上看到这个版本库上的所有动作" -#: rhodecode/templates/admin/repos/repo_edit.html:238 +#: rhodecode/templates/admin/repos/repo_edit.html:270 msgid "Locking" msgstr "锁定" -#: rhodecode/templates/admin/repos/repo_edit.html:243 +#: rhodecode/templates/admin/repos/repo_edit.html:275 msgid "Unlock locked repo" msgstr "解锁版本库" -#: rhodecode/templates/admin/repos/repo_edit.html:243 +#: rhodecode/templates/admin/repos/repo_edit.html:275 msgid "Confirm to unlock repository" msgstr "确认解锁版本库" -#: rhodecode/templates/admin/repos/repo_edit.html:246 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "lock repo" msgstr "锁定版本库" -#: rhodecode/templates/admin/repos/repo_edit.html:246 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "Confirm to lock repository" msgstr "确认锁定版本库" -#: rhodecode/templates/admin/repos/repo_edit.html:247 +#: rhodecode/templates/admin/repos/repo_edit.html:279 msgid "Repository is not locked" msgstr "版本库未锁定" -#: rhodecode/templates/admin/repos/repo_edit.html:252 -msgid "" -"Force locking on repository. Works only when anonymous access is disabled" +#: rhodecode/templates/admin/repos/repo_edit.html:284 +msgid "Force locking on repository. Works only when anonymous access is disabled" msgstr "强制锁定版本库。只有在禁止匿名访问时候才有效" -#: rhodecode/templates/admin/repos/repo_edit.html:259 +#: rhodecode/templates/admin/repos/repo_edit.html:291 msgid "Set as fork of" msgstr "设置复刻自" -#: rhodecode/templates/admin/repos/repo_edit.html:268 +#: rhodecode/templates/admin/repos/repo_edit.html:296 +msgid "set" +msgstr "设置" + +#: rhodecode/templates/admin/repos/repo_edit.html:300 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 +#: rhodecode/templates/admin/repos/repo_edit.html:306 +#: rhodecode/templates/changeset/changeset_file_comment.html:41 msgid "Delete" msgstr "删除" -#: rhodecode/templates/admin/repos/repo_edit.html:278 -#: rhodecode/templates/settings/repo_settings.html:115 +#: rhodecode/templates/admin/repos/repo_edit.html:315 msgid "Remove this repository" msgstr "删除版本库" -#: rhodecode/templates/admin/repos/repo_edit.html:278 -#: rhodecode/templates/settings/repo_settings.html:115 +#: rhodecode/templates/admin/repos/repo_edit.html:315 msgid "Confirm to delete this repository" msgstr "确认删除版本库" -#: rhodecode/templates/admin/repos/repo_edit.html:282 -#: rhodecode/templates/settings/repo_settings.html:119 +#: rhodecode/templates/admin/repos/repo_edit.html:317 +#, fuzzy, python-format +msgid "this repository has %s fork" +msgid_plural "this repository has %s forks" +msgstr[0] "[创建]复刻版本库" + +#: rhodecode/templates/admin/repos/repo_edit.html:318 +#, fuzzy +msgid "Detach forks" +msgstr "设置复刻自" + +#: rhodecode/templates/admin/repos/repo_edit.html:319 +#, fuzzy +msgid "Delete forks" +msgstr "删除" + +#: rhodecode/templates/admin/repos/repo_edit.html:322 +#, fuzzy msgid "" -"This repository will be renamed in a special way in order to be unaccesible " -"for RhodeCode and VCS systems. If you need fully delete it from file system " -"please do it manually" +"This repository will be renamed in a special way in order to be " +"unaccesible for RhodeCode and VCS systems. If you need to fully delete it" +" from file system please do it manually" +msgstr "这个版本库将以特殊的方式重命名这样RhodeCode和版本控制系统将不能访问它。如果需要从文件系统完全删除,请要手动操作" + +#: rhodecode/templates/admin/repos/repo_edit.html:336 +msgid "Extra fields" msgstr "" -"这个版本库将以特殊的方式重命名这样RhodeCode和版本控制系统将不能访问它。如果需" -"要从文件系统完全删除,请要手动操作" + +#: rhodecode/templates/admin/repos/repo_edit.html:348 +#, fuzzy, python-format +msgid "Confirm to delete this field: %s" +msgstr "确认删除邮箱:%s" + +#: rhodecode/templates/admin/repos/repo_edit.html:362 +#, fuzzy +msgid "New field key" +msgstr "新建文件" + +#: rhodecode/templates/admin/repos/repo_edit.html:370 +msgid "New field label" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:373 +msgid "Enter short label" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:379 +#, fuzzy +msgid "New field description" +msgstr "描述" + +#: rhodecode/templates/admin/repos/repo_edit.html:382 +msgid "Enter description of a field" +msgstr "" #: rhodecode/templates/admin/repos/repo_edit_perms.html:3 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3 @@ -2192,8 +2487,6 @@ 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:229 msgid "admin" msgstr "管理" @@ -2203,79 +2496,60 @@ msgid "member" msgstr "成员" #: rhodecode/templates/admin/repos/repo_edit_perms.html:16 -#: rhodecode/templates/data_table/_dt_elements.html:67 -#: rhodecode/templates/journal/journal.html:95 -#: rhodecode/templates/summary/summary.html:85 msgid "private repository" msgstr "私有版本库" #: 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 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:20 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:35 msgid "default" msgstr "默认" #: 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 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:25 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:55 msgid "revoke" msgstr "移除" #: rhodecode/templates/admin/repos/repo_edit_perms.html:83 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:67 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:80 msgid "Add another member" msgstr "添加成员" #: rhodecode/templates/admin/repos/repo_edit_perms.html:97 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:100 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:103 -msgid "Failed to remove users group" +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:116 +#, fuzzy +msgid "Failed to remove user group" msgstr "删除用户组失败" #: rhodecode/templates/admin/repos/repos.html:5 msgid "Repositories administration" msgstr "版本库管理员" -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:86 msgid "apply to children" msgstr "应用到成员" -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 +#, fuzzy msgid "" -"Set or revoke permission to all children of that group, including " -"repositories and other groups" +"Set or revoke permission to all children of that group, including non-" +"private repositories and other groups" msgstr "设置或者撤销该组所有成员的权限,包括版本库和其他组" +#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 +#, fuzzy, python-format +msgid "%s Group Dashboard" +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 "首页" @@ -2284,79 +2558,85 @@ msgid "with" msgstr "有" #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5 -msgid "Add repos group" -msgstr "添加版本库组" - -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10 -msgid "Repos groups" +#, fuzzy +msgid "Add repository group" msgstr "版本库组" -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12 -msgid "add new repos group" +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:16 +#: rhodecode/templates/base/base.html:70 rhodecode/templates/base/base.html:82 +#, fuzzy +msgid "Repository groups" +msgstr "版本库组" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:13 +#, fuzzy +msgid "Add new repository group" msgstr "添加新版本库组" -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:51 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:56 msgid "Group parent" msgstr "上级组" -#: 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 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:59 msgid "save" msgstr "保存" #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5 -msgid "Edit repos group" +#, fuzzy +msgid "Edit repository group" msgstr "编辑版本库组" -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12 -msgid "edit repos group" +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:13 +#, fuzzy, python-format +msgid "Edit repository group %s" msgstr "编辑版本库组" -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:27 +#, fuzzy +msgid "Add child group" +msgstr "添加新用户组" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:76 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 -msgid "Repositories groups administration" +#, fuzzy +msgid "Repository groups administration" msgstr "版本库管理员" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22 -msgid "ADD NEW GROUP" -msgstr "添加组" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:45 msgid "Number of toplevel repositories" msgstr "顶层版本库数量" -#: 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 "操作" - -#: 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 "删除" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:64 +#, fuzzy +msgid "Edit" +msgstr "编辑" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:65 +#: rhodecode/templates/base/perms_summary.html:29 +#: rhodecode/templates/base/perms_summary.html:48 +#: rhodecode/templates/base/perms_summary.html:50 +#: rhodecode/templates/data_table/_dt_elements.html:116 +#: rhodecode/templates/data_table/_dt_elements.html:117 +msgid "edit" +msgstr "编辑" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70 #, 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] "确认删除这个版本库组:%s包含%s个版本库" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63 -msgid "There are no repositories groups yet" +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:78 +#, fuzzy +msgid "There are no repository groups yet" msgstr "没有版本库组" #: rhodecode/templates/admin/settings/hooks.html:5 @@ -2364,12 +2644,6 @@ msgstr "没有版本库组" msgid "Settings administration" msgstr "系统设置" -#: rhodecode/templates/admin/settings/hooks.html:9 -#: rhodecode/templates/admin/settings/settings.html:9 -#: rhodecode/templates/settings/repo_settings.html:13 -msgid "Settings" -msgstr "设置" - #: rhodecode/templates/admin/settings/hooks.html:24 msgid "Built in hooks - read only" msgstr "内建钩子 - 只读" @@ -2386,209 +2660,221 @@ msgstr "删除" msgid "Failed to remove hook" msgstr "移除钩子失败" -#: rhodecode/templates/admin/settings/settings.html:24 +#: rhodecode/templates/admin/settings/settings.html:26 msgid "Remap and rescan repositories" msgstr "重新扫描并映射版本库" -#: rhodecode/templates/admin/settings/settings.html:32 -msgid "rescan option" +#: rhodecode/templates/admin/settings/settings.html:34 +#, fuzzy +msgid "Rescan option" msgstr "重新扫描选项" -#: rhodecode/templates/admin/settings/settings.html:38 +#: rhodecode/templates/admin/settings/settings.html:40 msgid "" -"In case a repository was deleted from filesystem and there are leftovers in " -"the database check this option to scan obsolete data in database and remove " -"it." -msgstr "" -"如果版本库已经从文件系统删除,但数据库仍然有遗留信息,请勾选该项进行清理" - -#: rhodecode/templates/admin/settings/settings.html:39 -msgid "destroy old data" -msgstr "清理旧数据" +"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:41 +#, fuzzy +msgid "Destroy old data" +msgstr "清理旧数据" + +#: rhodecode/templates/admin/settings/settings.html:43 msgid "" -"Rescan repositories location for new repositories. Also deletes obsolete if " -"`destroy` flag is checked " -msgstr "" -"重新扫描版本库路径以发现新版本库。 同时删除过时的,如果设置有 `destroy` 标志" - -#: rhodecode/templates/admin/settings/settings.html:46 +"Rescan repositories location for new repositories. Also deletes obsolete " +"if `destroy` flag is checked " +msgstr "重新扫描版本库路径以发现新版本库。 同时删除过时的,如果设置有 `destroy` 标志" + +#: rhodecode/templates/admin/settings/settings.html:48 msgid "Rescan repositories" msgstr "重新扫描版本库" -#: rhodecode/templates/admin/settings/settings.html:52 +#: rhodecode/templates/admin/settings/settings.html:54 msgid "Whoosh indexing" msgstr "Whoosh索引" -#: rhodecode/templates/admin/settings/settings.html:60 -msgid "index build option" +#: rhodecode/templates/admin/settings/settings.html:62 +#, fuzzy +msgid "Index build option" msgstr "构建索引选项" -#: rhodecode/templates/admin/settings/settings.html:65 -msgid "build from scratch" +#: rhodecode/templates/admin/settings/settings.html:67 +#, fuzzy +msgid "Build from scratch" msgstr "重新建立" -#: rhodecode/templates/admin/settings/settings.html:71 +#: rhodecode/templates/admin/settings/settings.html:73 msgid "Reindex" msgstr "重新索引" -#: rhodecode/templates/admin/settings/settings.html:77 +#: rhodecode/templates/admin/settings/settings.html:79 msgid "Global application settings" msgstr "全局设置" -#: rhodecode/templates/admin/settings/settings.html:86 -msgid "Application name" -msgstr "应用名称" - -#: rhodecode/templates/admin/settings/settings.html:95 -msgid "Realm text" -msgstr "Realm text" - -#: rhodecode/templates/admin/settings/settings.html:104 -msgid "GA code" -msgstr "GA code" - -#: rhodecode/templates/admin/settings/settings.html:112 -#: rhodecode/templates/admin/settings/settings.html:178 -#: rhodecode/templates/admin/settings/settings.html:268 +#: rhodecode/templates/admin/settings/settings.html:88 +msgid "Site branding" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:97 +msgid "HTTP authentication realm" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:106 +msgid "Google Analytics code" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:114 +#: rhodecode/templates/admin/settings/settings.html:186 +#: rhodecode/templates/admin/settings/settings.html:277 msgid "Save settings" msgstr "保存设置" -#: rhodecode/templates/admin/settings/settings.html:119 +#: rhodecode/templates/admin/settings/settings.html:121 msgid "Visualisation settings" msgstr "可视化设置" -#: rhodecode/templates/admin/settings/settings.html:127 +#: rhodecode/templates/admin/settings/settings.html:129 msgid "General" msgstr "通用" -#: rhodecode/templates/admin/settings/settings.html:132 +#: rhodecode/templates/admin/settings/settings.html:134 msgid "Use lightweight dashboard" msgstr "使用轻量的控制面板" -#: rhodecode/templates/admin/settings/settings.html:139 +#: rhodecode/templates/admin/settings/settings.html:140 +#, fuzzy +msgid "Use repository extra fields" +msgstr "版本库" + +#: rhodecode/templates/admin/settings/settings.html:147 msgid "Icons" msgstr "图标" -#: rhodecode/templates/admin/settings/settings.html:144 +#: rhodecode/templates/admin/settings/settings.html:152 msgid "Show public repo icon on repositories" msgstr "显示公共版本库图标" -#: rhodecode/templates/admin/settings/settings.html:148 +#: rhodecode/templates/admin/settings/settings.html:156 msgid "Show private repo icon on repositories" msgstr "显示私有版本库图标" -#: rhodecode/templates/admin/settings/settings.html:155 +#: rhodecode/templates/admin/settings/settings.html:163 msgid "Meta-Tagging" msgstr "元标记" -#: rhodecode/templates/admin/settings/settings.html:160 +#: rhodecode/templates/admin/settings/settings.html:168 msgid "Stylify recognised metatags:" msgstr "样式化识别的元标记" -#: rhodecode/templates/admin/settings/settings.html:187 +#: rhodecode/templates/admin/settings/settings.html:195 msgid "VCS settings" msgstr "版本控制系统设置" -#: rhodecode/templates/admin/settings/settings.html:196 +#: rhodecode/templates/admin/settings/settings.html:204 msgid "Web" msgstr "网络" -#: rhodecode/templates/admin/settings/settings.html:201 -msgid "require ssl for vcs operations" +#: rhodecode/templates/admin/settings/settings.html:209 +#, fuzzy +msgid "Require SSL for vcs operations" msgstr "要求使用SSL进行版本控制系统操作" -#: rhodecode/templates/admin/settings/settings.html:203 +#: rhodecode/templates/admin/settings/settings.html:211 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:209 +"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:217 msgid "Hooks" msgstr "钩子" -#: rhodecode/templates/admin/settings/settings.html:214 +#: rhodecode/templates/admin/settings/settings.html:222 msgid "Update repository after push (hg update)" msgstr "推送后更新版本库(hg update)" -#: rhodecode/templates/admin/settings/settings.html:218 +#: rhodecode/templates/admin/settings/settings.html:226 msgid "Show repository size after push" msgstr "推送后显示版本库大小" -#: rhodecode/templates/admin/settings/settings.html:222 +#: rhodecode/templates/admin/settings/settings.html:230 msgid "Log user push commands" msgstr "记录用户推送命令" -#: rhodecode/templates/admin/settings/settings.html:226 +#: rhodecode/templates/admin/settings/settings.html:234 msgid "Log user pull commands" msgstr "记录用户拉取命令" -#: rhodecode/templates/admin/settings/settings.html:230 -msgid "advanced setup" +#: rhodecode/templates/admin/settings/settings.html:238 +#, fuzzy +msgid "Advanced setup" msgstr "高级设置" -#: rhodecode/templates/admin/settings/settings.html:235 +#: rhodecode/templates/admin/settings/settings.html:243 msgid "Mercurial Extensions" msgstr "Mercurial扩展" -#: rhodecode/templates/admin/settings/settings.html:240 -msgid "largefiles extensions" +#: rhodecode/templates/admin/settings/settings.html:248 +#, fuzzy +msgid "Enable largefiles extension" msgstr "大文件扩展" -#: rhodecode/templates/admin/settings/settings.html:244 -msgid "hgsubversion extensions" +#: rhodecode/templates/admin/settings/settings.html:252 +#, fuzzy +msgid "Enable hgsubversion extension" msgstr "hgsubversion扩展" -#: rhodecode/templates/admin/settings/settings.html:246 +#: rhodecode/templates/admin/settings/settings.html:254 +#, fuzzy msgid "" -"Requires hgsubversion library installed. Allows clonning from svn remote " +"Requires hgsubversion library installed. Allows cloning from svn remote " "locations" msgstr " 允许从远程svn地址克隆。需要安装hgsubversion库" -#: rhodecode/templates/admin/settings/settings.html:256 +#: rhodecode/templates/admin/settings/settings.html:264 msgid "Repositories location" msgstr "版本库路径" -#: rhodecode/templates/admin/settings/settings.html:261 +#: rhodecode/templates/admin/settings/settings.html:269 msgid "" "This a crucial application setting. If you are really sure you need to " -"change this, you must restart application in order to make this setting take " -"effect. Click this label to unlock." +"change this, you must restart application in order to make this setting " +"take effect. Click this label to unlock." msgstr "这是一个关键设置。如果确认修改该项设置,请重启服务以便设置生效。" -#: rhodecode/templates/admin/settings/settings.html:262 -#: rhodecode/templates/base/base.html:221 -msgid "unlock" +#: rhodecode/templates/admin/settings/settings.html:270 +#: rhodecode/templates/base/base.html:131 +#, fuzzy +msgid "Unlock" msgstr "解锁" -#: rhodecode/templates/admin/settings/settings.html:263 +#: rhodecode/templates/admin/settings/settings.html:272 msgid "" -"Location where repositories are stored. After changing this value a restart, " -"and rescan is required" +"Location where repositories are stored. After changing this value a " +"restart, and rescan is required" msgstr "版本库存储路径。 修改后需要重启和重新扫描" -#: rhodecode/templates/admin/settings/settings.html:283 +#: rhodecode/templates/admin/settings/settings.html:292 msgid "Test Email" msgstr "测试邮件" -#: rhodecode/templates/admin/settings/settings.html:291 +#: rhodecode/templates/admin/settings/settings.html:300 msgid "Email to" msgstr "发送到" -#: rhodecode/templates/admin/settings/settings.html:299 +#: rhodecode/templates/admin/settings/settings.html:308 msgid "Send" msgstr "发送" -#: rhodecode/templates/admin/settings/settings.html:305 +#: rhodecode/templates/admin/settings/settings.html:314 msgid "System Info and Packages" msgstr "系统和软件包信息" -#: rhodecode/templates/admin/settings/settings.html:308 -msgid "show" +#: rhodecode/templates/admin/settings/settings.html:317 +#: rhodecode/templates/changelog/changelog.html:42 +msgid "Show" msgstr "显示" #: rhodecode/templates/admin/users/user_add.html:5 @@ -2597,11 +2883,14 @@ msgstr "添加用户" #: rhodecode/templates/admin/users/user_add.html:10 #: rhodecode/templates/admin/users/user_edit.html:11 +#: rhodecode/templates/base/base.html:71 msgid "Users" msgstr "用户" #: rhodecode/templates/admin/users/user_add.html:12 -msgid "add new user" +#: rhodecode/templates/admin/users/users.html:23 +#, fuzzy +msgid "Add new user" msgstr "添加新用户" #: rhodecode/templates/admin/users/user_add.html:50 @@ -2612,6 +2901,12 @@ msgstr "确认密码" msgid "Edit user" msgstr "编辑用户" +#: rhodecode/templates/admin/users/user_edit.html:13 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:13 +#, fuzzy, python-format +msgid "Edit %s" +msgstr "编辑" + #: rhodecode/templates/admin/users/user_edit.html:34 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:10 msgid "Change your avatar at" @@ -2627,26 +2922,31 @@ msgstr "使用中" msgid "API key" msgstr "API密钥" -#: rhodecode/templates/admin/users/user_edit.html:63 +#: rhodecode/templates/admin/users/user_edit.html:50 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:25 +msgid "Current IP" +msgstr "" + +#: rhodecode/templates/admin/users/user_edit.html:70 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 +#: rhodecode/templates/admin/users/user_edit.html:79 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 msgid "New password" msgstr "新密码" -#: rhodecode/templates/admin/users/user_edit.html:81 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 +#: rhodecode/templates/admin/users/user_edit.html:88 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53 msgid "New password confirmation" msgstr "确认新密码" -#: rhodecode/templates/admin/users/user_edit.html:151 +#: rhodecode/templates/admin/users/user_edit.html:158 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108 msgid "Inherit default permissions" msgstr "继承默认权限" -#: rhodecode/templates/admin/users/user_edit.html:156 +#: rhodecode/templates/admin/users/user_edit.html:163 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113 #, python-format msgid "" @@ -2654,53 +2954,31 @@ msgid "" "options does not have any action" msgstr "勾选以从%s继承权限设置。 勾选后下面的选项将不起作用" -#: rhodecode/templates/admin/users/user_edit.html:162 +#: rhodecode/templates/admin/users/user_edit.html:169 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119 msgid "Create repositories" msgstr "创建版本库" -#: rhodecode/templates/admin/users/user_edit.html:170 +#: rhodecode/templates/admin/users/user_edit.html:177 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127 msgid "Fork repositories" 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 -msgid "Nothing here yet" -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:217 -#: rhodecode/templates/admin/users_groups/users_group_edit.html:185 -msgid "Permission" -msgstr "权限" - -#: 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:247 +#: rhodecode/templates/admin/users/user_edit.html:200 msgid "Email addresses" msgstr "邮件地址" -#: rhodecode/templates/admin/users/user_edit.html:260 +#: rhodecode/templates/admin/users/user_edit.html:213 #, python-format msgid "Confirm to delete this email: %s" msgstr "确认删除邮箱:%s" -#: rhodecode/templates/admin/users/user_edit.html:274 +#: rhodecode/templates/admin/users/user_edit.html:227 msgid "New email address" msgstr "增加邮箱" -#: rhodecode/templates/admin/users/user_edit.html:281 -msgid "Add" -msgstr "增加" - #: rhodecode/templates/admin/users/user_edit_my_account.html:5 -#: rhodecode/templates/base/base.html:124 +#: rhodecode/templates/base/base.html:242 msgid "My account" msgstr "我的账户" @@ -2713,7 +2991,7 @@ msgid "My permissions" msgstr "我的权限" #: rhodecode/templates/admin/users/user_edit_my_account.html:38 -#: rhodecode/templates/journal/journal.html:49 +#: rhodecode/templates/journal/journal.html:54 msgid "My repos" msgstr "我的版本库" @@ -2721,132 +2999,107 @@ msgstr "我的版本库" msgid "My pull requests" msgstr "我的拉取请求" -#: rhodecode/templates/admin/users/user_edit_my_account.html:45 -msgid "Add repo" -msgstr "新建版本库" - #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:2 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:4 +#, fuzzy +msgid "Show closed pull requests" +msgstr "[关闭] 拉取请求" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:6 msgid "Opened by me" msgstr "我创建的" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15 #, python-format msgid "Pull request #%s opened on %s" msgstr "拉取请求#%s创建于%s" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:17 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:45 +#: rhodecode/templates/pullrequests/pullrequest_data.html:7 +#: rhodecode/templates/pullrequests/pullrequest_show.html:27 +#: rhodecode/templates/pullrequests/pullrequest_show.html:42 +msgid "Closed" +msgstr "已关闭" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:23 msgid "Confirm to delete this pull request" msgstr "确认删除拉取请求" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:26 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:30 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:51 +msgid "Nothing here yet" +msgstr "无条目" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:34 msgid "I participate in" msgstr "我参与的" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:33 -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:30 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:42 +#: rhodecode/templates/pullrequests/pullrequest_data.html:11 #, python-format msgid "Pull request #%s opened by %s on %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: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_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_page_repos.html:42 -msgid "No repositories yet" -msgstr "没有任何版本库" - -#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40 -#: rhodecode/templates/journal/journal_page_repos.html:44 -msgid "create one now" -msgstr "创建一个" - #: rhodecode/templates/admin/users/users.html:5 msgid "Users administration" msgstr "用户管理员" #: rhodecode/templates/admin/users/users.html:9 -#: rhodecode/templates/base/base.html:235 msgid "users" msgstr "用户" -#: rhodecode/templates/admin/users/users.html:23 -msgid "ADD NEW USER" -msgstr "添加用户" - -#: rhodecode/templates/admin/users/users.html:77 -msgid "username" -msgstr "用户名" - #: rhodecode/templates/admin/users/users.html:80 -msgid "firstname" +#, fuzzy +msgid "Firstname" msgstr "名" #: rhodecode/templates/admin/users/users.html:81 -msgid "lastname" +#, fuzzy +msgid "Lastname" msgstr "姓" #: rhodecode/templates/admin/users/users.html:82 -msgid "last login" +#, fuzzy +msgid "Last login" msgstr "最后登录" -#: rhodecode/templates/admin/users/users.html:84 -#: rhodecode/templates/admin/users_groups/users_groups.html:34 -msgid "active" -msgstr "启用" - -#: rhodecode/templates/admin/users/users.html:86 -#: rhodecode/templates/base/base.html:238 -msgid "ldap" -msgstr "LDAP" - #: rhodecode/templates/admin/users_groups/users_group_add.html:5 -msgid "Add users group" +#, fuzzy +msgid "Add user group" msgstr "添加用户组" #: rhodecode/templates/admin/users_groups/users_group_add.html:10 -#: rhodecode/templates/admin/users_groups/users_groups.html:9 -msgid "Users groups" +#: rhodecode/templates/admin/users_groups/users_groups.html:11 +#: rhodecode/templates/base/base.html:72 +#, fuzzy +msgid "User groups" msgstr "用户组" #: rhodecode/templates/admin/users_groups/users_group_add.html:12 -msgid "add new users group" +#: rhodecode/templates/admin/users_groups/users_groups.html:25 +#, fuzzy +msgid "Add new user group" msgstr "添加新用户组" #: rhodecode/templates/admin/users_groups/users_group_edit.html:5 -msgid "Edit users group" +#, fuzzy +msgid "Edit user group" msgstr "编辑用户组" #: rhodecode/templates/admin/users_groups/users_group_edit.html:11 -msgid "UsersGroups" +#, fuzzy +msgid "UserGroups" msgstr "用户组" #: rhodecode/templates/admin/users_groups/users_group_edit.html:50 +#: rhodecode/templates/admin/users_groups/users_groups.html:35 msgid "Members" msgstr "成员" #: rhodecode/templates/admin/users_groups/users_group_edit.html:58 -msgid "Choosen group members" +#, fuzzy +msgid "Chosen group members" msgstr "选择组成员" #: rhodecode/templates/admin/users_groups/users_group_edit.html:61 @@ -2861,264 +3114,280 @@ msgstr "启用成员" msgid "Add all elements" msgstr "添加全部项目" -#: rhodecode/templates/admin/users_groups/users_group_edit.html:146 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:150 msgid "Group members" msgstr "拥护者成员" -#: rhodecode/templates/admin/users_groups/users_group_edit.html:163 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:167 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" +#, fuzzy +msgid "User groups administration" msgstr "用户组管理" -#: rhodecode/templates/admin/users_groups/users_groups.html:23 -msgid "ADD NEW USER GROUP" -msgstr "添加新用户组" - -#: rhodecode/templates/admin/users_groups/users_groups.html:32 -msgid "group name" -msgstr "组名" - -#: rhodecode/templates/admin/users_groups/users_groups.html:33 -#: rhodecode/templates/base/root.html:46 -msgid "members" -msgstr "成员" - -#: rhodecode/templates/admin/users_groups/users_groups.html:45 -#, python-format -msgid "Confirm to delete this users group: %s" +#: rhodecode/templates/admin/users_groups/users_groups.html:47 +#, fuzzy, python-format +msgid "Confirm to delete this user group: %s" msgstr "确认删除该组:%s" -#: rhodecode/templates/base/base.html:41 +#: rhodecode/templates/base/base.html:42 msgid "Submit a bug" msgstr "提交bug" -#: rhodecode/templates/base/base.html:77 -msgid "Login to your account" -msgstr "登录" - -#: rhodecode/templates/base/base.html:100 -msgid "Forgot password ?" -msgstr "忘记密码?" - -#: rhodecode/templates/base/base.html:107 -msgid "Log In" -msgstr "登录" +#: rhodecode/templates/base/base.html:108 +#: rhodecode/templates/data_table/_dt_elements.html:9 +#: rhodecode/templates/data_table/_dt_elements.html:11 +#: rhodecode/templates/data_table/_dt_elements.html:13 +#: rhodecode/templates/pullrequests/pullrequest_show.html:81 +#: rhodecode/templates/summary/summary.html:8 +msgid "Summary" +msgstr "概况" + +#: rhodecode/templates/base/base.html:109 +#: rhodecode/templates/changelog/changelog.html:11 +#: rhodecode/templates/data_table/_dt_elements.html:17 +#: rhodecode/templates/data_table/_dt_elements.html:19 +#: rhodecode/templates/data_table/_dt_elements.html:21 +msgid "Changelog" +msgstr "修订记录" + +#: rhodecode/templates/base/base.html:110 +#: rhodecode/templates/data_table/_dt_elements.html:25 +#: rhodecode/templates/data_table/_dt_elements.html:27 +#: rhodecode/templates/data_table/_dt_elements.html:29 +#: rhodecode/templates/files/files.html:12 +msgid "Files" +msgstr "浏览" + +#: rhodecode/templates/base/base.html:112 +#, fuzzy +msgid "Switch To" +msgstr "切换到" + +#: rhodecode/templates/base/base.html:114 +#: rhodecode/templates/base/base.html:267 +msgid "loading..." +msgstr "载入中..." #: rhodecode/templates/base/base.html:118 -msgid "Inbox" -msgstr "收件箱" - -#: 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/public_journal.html:4 -msgid "Journal" -msgstr "日志" - -#: rhodecode/templates/base/base.html:125 -msgid "Log Out" -msgstr "退出" - -#: rhodecode/templates/base/base.html:144 -msgid "Switch repository" -msgstr "切换版本库" - -#: rhodecode/templates/base/base.html:146 -msgid "Products" -msgstr "产品" - -#: rhodecode/templates/base/base.html:152 -#: rhodecode/templates/base/base.html:182 -#: rhodecode/templates/base/root.html:47 -msgid "loading..." -msgstr "载入中..." - -#: 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 "概况" - -#: 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 "修订记录" - -#: rhodecode/templates/base/base.html:175 -#: rhodecode/templates/base/base.html:177 -#: rhodecode/templates/base/base.html:179 -msgid "Switch to" -msgstr "切换到" - -#: 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 "浏览" - -#: rhodecode/templates/base/base.html:195 -#: rhodecode/templates/base/base.html:199 msgid "Options" msgstr "选项" -#: rhodecode/templates/base/base.html:204 -#: rhodecode/templates/base/base.html:206 -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:212 -#: rhodecode/templates/base/root.html:50 -#: rhodecode/templates/changelog/changelog.html:43 -msgid "Open new pull request" -msgstr "新建拉取请求" - -#: rhodecode/templates/base/base.html:215 +#: rhodecode/templates/base/base.html:124 #: 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:223 -msgid "lock" -msgstr "锁定" - -#: rhodecode/templates/base/base.html:234 -msgid "repositories groups" -msgstr "版本库组" - -#: rhodecode/templates/base/base.html:236 -msgid "users groups" -msgstr "用户组" - -#: rhodecode/templates/base/base.html:237 -msgid "permissions" -msgstr "权限" - -#: 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:259 -#: rhodecode/templates/base/base.html:261 -msgid "Forks" -msgstr "复刻" - -#: rhodecode/templates/base/base.html:340 -#: rhodecode/templates/base/base.html:342 -#: rhodecode/templates/base/base.html:344 -#: rhodecode/templates/search/search.html:52 +#: rhodecode/templates/base/base.html:126 +#, fuzzy +msgid "Lightweight changelog" +msgstr "使用轻量的控制面板" + +#: rhodecode/templates/base/base.html:127 +#: rhodecode/templates/base/base.html:287 +#: rhodecode/templates/search/search.html:14 +#: rhodecode/templates/search/search.html:54 msgid "Search" msgstr "搜索" -#: rhodecode/templates/base/root.html:42 -msgid "add another comment" -msgstr "添加新的评论" +#: rhodecode/templates/base/base.html:133 +#, fuzzy +msgid "Lock" +msgstr "锁定" + +#: rhodecode/templates/base/base.html:141 +#, fuzzy +msgid "Follow" +msgstr "关注者" + +#: rhodecode/templates/base/base.html:142 +#, fuzzy +msgid "Unfollow" +msgstr "关注者" + +#: rhodecode/templates/base/base.html:145 +#: rhodecode/templates/data_table/_dt_elements.html:33 +#: rhodecode/templates/data_table/_dt_elements.html:35 +#: rhodecode/templates/data_table/_dt_elements.html:37 +#: rhodecode/templates/data_table/_dt_elements.html:74 +#: rhodecode/templates/forks/fork.html:9 +msgid "Fork" +msgstr "复刻" + +#: rhodecode/templates/base/base.html:147 +#, fuzzy +msgid "Create Pull Request" +msgstr "创建新的拉取请求" + +#: rhodecode/templates/base/base.html:153 +#, fuzzy +msgid "Show Pull Requests" +msgstr "新建拉取请求" + +#: rhodecode/templates/base/base.html:153 +#, fuzzy +msgid "Pull Requests" +msgstr "拉取请求" + +#: rhodecode/templates/base/base.html:190 +#, fuzzy +msgid "Not logged in" +msgstr "最后登录" + +#: rhodecode/templates/base/base.html:197 +msgid "Login to your account" +msgstr "登录" + +#: rhodecode/templates/base/base.html:220 +msgid "Forgot password ?" +msgstr "忘记密码?" + +#: rhodecode/templates/base/base.html:243 +msgid "Log Out" +msgstr "退出" + +#: rhodecode/templates/base/base.html:262 +msgid "Switch repository" +msgstr "切换版本库" + +#: rhodecode/templates/base/base.html:274 +msgid "Show recent activity" +msgstr "" + +#: rhodecode/templates/base/base.html:275 +#: rhodecode/templates/journal/journal.html:4 +msgid "Journal" +msgstr "日志" + +#: rhodecode/templates/base/base.html:286 +#, fuzzy +msgid "Search in repositories" +msgstr "在所有的版本库中搜索" + +#: rhodecode/templates/base/perms_summary.html:8 +#, fuzzy +msgid "No permissions defined yet" +msgstr "还未设置权限" + +#: rhodecode/templates/base/perms_summary.html:15 +msgid "Permission" +msgstr "权限" + +#: rhodecode/templates/base/perms_summary.html:16 +msgid "Edit Permission" +msgstr "编辑权限" #: rhodecode/templates/base/root.html:43 -#: rhodecode/templates/journal/journal.html:83 -#: rhodecode/templates/summary/summary.html:57 -msgid "Stop following this repository" -msgstr "停止关注该版本库" +#, fuzzy +msgid "Add another comment" +msgstr "添加新的评论" #: rhodecode/templates/base/root.html:44 -#: rhodecode/templates/summary/summary.html:61 +#: rhodecode/templates/data_table/_dt_elements.html:140 +msgid "Stop following this repository" +msgstr "停止关注该版本库" + +#: rhodecode/templates/base/root.html:45 msgid "Start following this repository" msgstr "开始关注该版本库" -#: rhodecode/templates/base/root.html:45 +#: rhodecode/templates/base/root.html:46 msgid "Group" msgstr "组" +#: rhodecode/templates/base/root.html:47 +msgid "members" +msgstr "成员" + #: rhodecode/templates/base/root.html:48 -msgid "search truncated" -msgstr "搜索被截断" +#: rhodecode/templates/pullrequests/pullrequest.html:181 +#, fuzzy +msgid "Loading ..." +msgstr "载入中..." #: rhodecode/templates/base/root.html:49 -msgid "no matching files" +#, fuzzy +msgid "Search truncated" +msgstr "搜索被截断" + +#: rhodecode/templates/base/root.html:50 +#, fuzzy +msgid "No matching files" msgstr "没有符合的文件" #: rhodecode/templates/base/root.html:51 -msgid "Open new pull request for selected changesets" -msgstr "为选择的变更集创建新的拉取请求" +#: rhodecode/templates/changelog/changelog.html:36 +msgid "Open new pull request" +msgstr "新建拉取请求" #: rhodecode/templates/base/root.html:52 -msgid "Show selected changes __S -> __E" -msgstr "显示选定的修订集:__S -> __E" +msgid "Open new pull request for selected changesets" +msgstr "为选择的变更集创建新的拉取请求" #: rhodecode/templates/base/root.html:53 +#, fuzzy +msgid "Show selected changesets __S -> __E" +msgstr "显示选定的修订集:__S -> __E" + +#: rhodecode/templates/base/root.html:54 +#, fuzzy +msgid "Show selected changeset __S" +msgstr "显示选定的修订集:__S -> __E" + +#: rhodecode/templates/base/root.html:55 msgid "Selection link" msgstr "选择链接" +#: rhodecode/templates/base/root.html:56 +#: rhodecode/templates/changeset/diff_block.html:8 +#, fuzzy +msgid "Collapse diff" +msgstr "文件差异" + +#: rhodecode/templates/base/root.html:57 +#, fuzzy +msgid "Expand diff" +msgstr "原始diff" + #: rhodecode/templates/bookmarks/bookmarks.html:5 #, python-format msgid "%s Bookmarks" msgstr "%s书签" -#: rhodecode/templates/bookmarks/bookmarks.html:39 +#: rhodecode/templates/bookmarks/bookmarks.html:37 #: rhodecode/templates/bookmarks/bookmarks_data.html:8 -#: rhodecode/templates/branches/branches.html:53 +#: rhodecode/templates/branches/branches.html:50 #: rhodecode/templates/branches/branches_data.html:8 -#: rhodecode/templates/tags/tags.html:54 +#: rhodecode/templates/shortlog/shortlog_data.html:8 +#: rhodecode/templates/tags/tags.html:51 #: rhodecode/templates/tags/tags_data.html:8 msgid "Author" msgstr "作者" +#: rhodecode/templates/bookmarks/bookmarks.html:38 +#: rhodecode/templates/bookmarks/bookmarks_data.html:9 +#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches_data.html:9 +#: rhodecode/templates/shortlog/shortlog_data.html:5 +#: rhodecode/templates/tags/tags.html:52 +#: rhodecode/templates/tags/tags_data.html:9 +msgid "Revision" +msgstr "修订" + #: rhodecode/templates/branches/branches.html:5 #, python-format msgid "%s Branches" msgstr "%s分支" -#: rhodecode/templates/branches/branches.html:29 +#: rhodecode/templates/branches/branches.html:26 msgid "Compare branches" msgstr "比较分支" -#: rhodecode/templates/branches/branches.html:56 +#: rhodecode/templates/branches/branches.html:53 #: 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.html:54 #: rhodecode/templates/tags/tags_data.html:10 msgid "Compare" msgstr "比较显示" @@ -3128,114 +3397,82 @@ msgstr "比较显示" msgid "%s Changelog" msgstr "%s修订记录" -#: rhodecode/templates/changelog/changelog.html:15 +#: rhodecode/templates/changelog/changelog.html:11 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" msgstr[0] "显示%d/%d个版本" -#: rhodecode/templates/changelog/changelog.html:37 +#: rhodecode/templates/changelog/changelog.html:30 msgid "Clear selection" msgstr "清除选择" -#: rhodecode/templates/changelog/changelog.html:40 +#: rhodecode/templates/changelog/changelog.html:33 #: rhodecode/templates/forks/forks_data.html:19 -#, python-format -msgid "compare fork with %s" +#, fuzzy, python-format +msgid "Compare fork with %s" msgstr "比较复刻和%s" -#: rhodecode/templates/changelog/changelog.html:40 +#: rhodecode/templates/changelog/changelog.html:33 msgid "Compare fork with parent" msgstr "比较复刻和源版本库" -#: rhodecode/templates/changelog/changelog.html:49 -msgid "Show" -msgstr "显示" - -#: rhodecode/templates/changelog/changelog.html:74 -#: rhodecode/templates/summary/summary.html:375 -msgid "show more" +#: rhodecode/templates/changelog/changelog.html:76 +#: rhodecode/templates/summary/summary.html:404 +#, fuzzy +msgid "Show more" msgstr "显示更多" -#: rhodecode/templates/changelog/changelog.html:78 -msgid "Affected number of files, click to show more details" -msgstr "影响的文件数,点击显示详细信息" - -#: rhodecode/templates/changelog/changelog.html:91 -#: rhodecode/templates/changeset/changeset.html:65 -#: rhodecode/templates/changeset/changeset_file_comment.html:20 -#: rhodecode/templates/changeset/changeset_range.html:46 -msgid "Changeset status" -msgstr "修订集状态" - -#: 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:104 -msgid "Parent" -msgstr "父版本" - -#: rhodecode/templates/changelog/changelog.html:110 -#: rhodecode/templates/changeset/changeset.html:42 -msgid "No parents" -msgstr "无父版本" - -#: rhodecode/templates/changelog/changelog.html:115 +#: rhodecode/templates/changelog/changelog.html:89 +#: rhodecode/templates/changeset/changeset_range.html:86 +#, fuzzy, python-format +msgid "Bookmark %s" +msgstr "书签" + +#: rhodecode/templates/changelog/changelog.html:95 +#: rhodecode/templates/changeset/changeset.html:111 +#: rhodecode/templates/changeset/changeset_range.html:92 +#, fuzzy, python-format +msgid "Tag %s" +msgstr "标签" + +#: rhodecode/templates/changelog/changelog.html:100 #: rhodecode/templates/changeset/changeset.html:106 -#: rhodecode/templates/changeset/changeset_range.html:79 -msgid "merge" -msgstr "合并" - -#: rhodecode/templates/changelog/changelog.html:118 -#: rhodecode/templates/changeset/changeset.html:109 -#: 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" +#: rhodecode/templates/changeset/changeset_range.html:80 +#, fuzzy, python-format +msgid "Branch %s" msgstr "分支" -#: rhodecode/templates/changelog/changelog.html:124 -#: rhodecode/templates/changeset/changeset_range.html:88 -msgid "bookmark" -msgstr "书签" - -#: rhodecode/templates/changelog/changelog.html:130 -#: rhodecode/templates/changeset/changeset.html:114 -#: rhodecode/templates/changeset/changeset_range.html:94 -msgid "tag" -msgstr "标签" - -#: rhodecode/templates/changelog/changelog.html:301 +#: rhodecode/templates/changelog/changelog.html:258 msgid "There are no changes yet" msgstr "没有任何变更" #: rhodecode/templates/changelog/changelog_details.html:4 -#: rhodecode/templates/changeset/changeset.html:94 -msgid "removed" +#: rhodecode/templates/changeset/changeset.html:91 +#, fuzzy +msgid "Removed" msgstr "移除" #: rhodecode/templates/changelog/changelog_details.html:5 -#: rhodecode/templates/changeset/changeset.html:95 -msgid "changed" +#: rhodecode/templates/changeset/changeset.html:92 +#, fuzzy +msgid "Changed" msgstr "修改" #: rhodecode/templates/changelog/changelog_details.html:6 -#: rhodecode/templates/changeset/changeset.html:96 -msgid "added" +#: rhodecode/templates/changeset/changeset.html:93 +#, fuzzy +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:98 -#: rhodecode/templates/changeset/changeset.html:99 -#: rhodecode/templates/changeset/changeset.html:100 -#, python-format -msgid "affected %s files" +#: rhodecode/templates/changeset/changeset.html:95 +#: rhodecode/templates/changeset/changeset.html:96 +#: rhodecode/templates/changeset/changeset.html:97 +#, fuzzy, python-format +msgid "Affected %s files" msgstr "影响%s文件" #: rhodecode/templates/changeset/changeset.html:6 @@ -3243,109 +3480,146 @@ msgstr "影响%s文件" msgid "%s Changeset" msgstr "%s修订集" -#: rhodecode/templates/changeset/changeset.html:14 -msgid "Changeset" -msgstr "修订集" - -#: rhodecode/templates/changeset/changeset.html:52 +#: rhodecode/templates/changeset/changeset.html:39 +msgid "No parents" +msgstr "无父版本" + +#: rhodecode/templates/changeset/changeset.html:49 msgid "No children" msgstr "无子对象" -#: rhodecode/templates/changeset/changeset.html:70 -#: rhodecode/templates/changeset/diff_block.html:20 -msgid "raw diff" -msgstr "原始diff" - -#: rhodecode/templates/changeset/changeset.html:71 -msgid "patch diff" +#: rhodecode/templates/changeset/changeset.html:62 +#: rhodecode/templates/changeset/changeset_file_comment.html:20 +#: rhodecode/templates/changeset/changeset_range.html:44 +msgid "Changeset status" +msgstr "修订集状态" + +#: rhodecode/templates/changeset/changeset.html:67 +#: rhodecode/templates/changeset/diff_block.html:23 +#, fuzzy +msgid "Raw diff" msgstr "原始diff" -#: rhodecode/templates/changeset/changeset.html:72 -#: rhodecode/templates/changeset/diff_block.html:21 -msgid "download diff" +#: rhodecode/templates/changeset/changeset.html:68 +#, fuzzy +msgid "Patch diff" +msgstr "原始diff" + +#: rhodecode/templates/changeset/changeset.html:69 +#: rhodecode/templates/changeset/diff_block.html:24 +#, fuzzy +msgid "Download diff" msgstr "下载diff" -#: rhodecode/templates/changeset/changeset.html:76 -#: rhodecode/templates/changeset/changeset_file_comment.html:82 +#: rhodecode/templates/changeset/changeset.html:73 +#: rhodecode/templates/changeset/changeset_file_comment.html:97 #, python-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d条评论" -#: rhodecode/templates/changeset/changeset.html:76 -#: rhodecode/templates/changeset/changeset_file_comment.html:82 +#: rhodecode/templates/changeset/changeset.html:73 +#: rhodecode/templates/changeset/changeset_file_comment.html:97 #, python-format msgid "(%d inline)" msgid_plural "(%d inline)" msgstr[0] "(%d内嵌)" -#: rhodecode/templates/changeset/changeset.html:122 -#: rhodecode/templates/compare/compare_diff.html:44 -#: rhodecode/templates/pullrequests/pullrequest_show.html:76 +#: rhodecode/templates/changeset/changeset.html:103 +#: rhodecode/templates/changeset/changeset_range.html:77 +msgid "merge" +msgstr "合并" + +#: rhodecode/templates/changeset/changeset.html:119 +#: rhodecode/templates/compare/compare_diff.html:40 +#: rhodecode/templates/pullrequests/pullrequest_show.html:113 #, python-format msgid "%s file changed" msgid_plural "%s files changed" msgstr[0] "修改%s个文件" -#: rhodecode/templates/changeset/changeset.html:124 -#: rhodecode/templates/compare/compare_diff.html:46 -#: rhodecode/templates/pullrequests/pullrequest_show.html:78 +#: rhodecode/templates/changeset/changeset.html:121 +#: rhodecode/templates/compare/compare_diff.html:42 +#: rhodecode/templates/pullrequests/pullrequest_show.html:115 #, 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 +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 +msgid "Showing a huge diff might take some time and resources" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 +#, fuzzy +msgid "Show full diff" +msgstr "显示全部历史记录" + +#: rhodecode/templates/changeset/changeset_file_comment.html:30 +#, fuzzy, python-format +msgid "Status change on pull request #%s" +msgstr "所有拉取请求 %s" + +#: rhodecode/templates/changeset/changeset_file_comment.html:32 +#, fuzzy, python-format +msgid "Comment on pull request #%s" +msgstr "[评论]拉取请求 %s" + +#: rhodecode/templates/changeset/changeset_file_comment.html:57 msgid "Submitting..." msgstr "提交中……" -#: rhodecode/templates/changeset/changeset_file_comment.html:45 +#: rhodecode/templates/changeset/changeset_file_comment.html:60 msgid "Commenting on line {1}." msgstr "在{1}行上评论" -#: rhodecode/templates/changeset/changeset_file_comment.html:46 -#: rhodecode/templates/changeset/changeset_file_comment.html:121 +#: rhodecode/templates/changeset/changeset_file_comment.html:61 +#: rhodecode/templates/changeset/changeset_file_comment.html:139 #, python-format msgid "Comments parsed using %s syntax with %s support." 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" +#: rhodecode/templates/changeset/changeset_file_comment.html:63 +#: rhodecode/templates/changeset/changeset_file_comment.html:141 +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:143 +#: rhodecode/templates/changeset/changeset_file_comment.html:74 +#: rhodecode/templates/changeset/changeset_file_comment.html:161 msgid "Comment" msgstr "评论" -#: rhodecode/templates/changeset/changeset_file_comment.html:60 -#: rhodecode/templates/changeset/changeset_file_comment.html:71 -msgid "Hide" -msgstr "隐藏" - -#: rhodecode/templates/changeset/changeset_file_comment.html:67 +#: rhodecode/templates/changeset/changeset_file_comment.html:75 +#, fuzzy +msgid "Cancel" +msgstr "修改" + +#: rhodecode/templates/changeset/changeset_file_comment.html:82 msgid "You need to be logged in to comment." msgstr "必须登录才能评论" -#: rhodecode/templates/changeset/changeset_file_comment.html:67 +#: rhodecode/templates/changeset/changeset_file_comment.html:82 msgid "Login now" msgstr "现在登陆" -#: rhodecode/templates/changeset/changeset_file_comment.html:118 -msgid "Leave a comment" -msgstr "发表评论" - -#: rhodecode/templates/changeset/changeset_file_comment.html:125 -msgid "Check this to change current status of code-review for this changeset" -msgstr "勾选以改变这个修订集的代码审查状态" - -#: rhodecode/templates/changeset/changeset_file_comment.html:125 -msgid "change status" +#: rhodecode/templates/changeset/changeset_file_comment.html:86 +msgid "Hide" +msgstr "隐藏" + +#: rhodecode/templates/changeset/changeset_file_comment.html:143 +#, fuzzy +msgid "Change status" msgstr "改变状态" -#: rhodecode/templates/changeset/changeset_file_comment.html:145 +#: rhodecode/templates/changeset/changeset_file_comment.html:163 msgid "Comment and close" msgstr "评论并关闭" @@ -3354,116 +3628,144 @@ msgstr "评论并关闭" msgid "%s Changesets" 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/changeset/changeset_range.html:52 msgid "Files affected" msgstr "影响文件" -#: rhodecode/templates/changeset/diff_block.html:19 -msgid "show full diff for this file" +#: rhodecode/templates/changeset/diff_block.html:22 +#, fuzzy +msgid "Show full diff for this file" msgstr "显示文件的完整差异" -#: rhodecode/templates/changeset/diff_block.html:27 -msgid "show inline comments" +#: rhodecode/templates/changeset/diff_block.html:30 +#, fuzzy +msgid "Show inline comments" msgstr "显示内嵌评论" -#: rhodecode/templates/compare/compare_cs.html:5 +#: rhodecode/templates/changeset/diff_block.html:55 +msgid "Show file at latest version in this repo" +msgstr "" + +#: rhodecode/templates/changeset/diff_block.html:56 +msgid "Show file at initial version in this repo" +msgstr "" + +#: rhodecode/templates/compare/compare_cs.html:4 msgid "No changesets" msgstr "无修订" -#: rhodecode/templates/compare/compare_diff.html:37 -#: rhodecode/templates/pullrequests/pullrequest_show.html:69 +#: rhodecode/templates/compare/compare_cs.html:32 +#, fuzzy +msgid "Ancestor" +msgstr "分支" + +#: rhodecode/templates/compare/compare_diff.html:5 +#, fuzzy, python-format +msgid "%s Compare" +msgstr "比较显示" + +#: rhodecode/templates/compare/compare_diff.html:9 +#, fuzzy +msgid "Compare revisions" +msgstr "上一个修订" + +#: rhodecode/templates/compare/compare_diff.html:33 +#: rhodecode/templates/pullrequests/pullrequest_show.html:106 #, 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 +#: rhodecode/templates/compare/compare_diff.html:48 +#: rhodecode/templates/pullrequests/pullrequest_show.html:121 msgid "No files" msgstr "无文件" -#: 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 "复刻" - -#: rhodecode/templates/data_table/_dt_elements.html:60 -#: rhodecode/templates/journal/journal.html:89 -#: rhodecode/templates/summary/summary.html:77 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +msgid "confirm to show potentially huge diff" +msgstr "" + +#: rhodecode/templates/data_table/_dt_elements.html:54 +#: rhodecode/templates/summary/summary.html:69 msgid "Mercurial repository" msgstr "Mercurial版本库" -#: rhodecode/templates/data_table/_dt_elements.html:62 -#: rhodecode/templates/journal/journal.html:91 -#: rhodecode/templates/summary/summary.html:80 +#: rhodecode/templates/data_table/_dt_elements.html:56 +#: rhodecode/templates/summary/summary.html:72 msgid "Git repository" msgstr "Git版本库" -#: rhodecode/templates/data_table/_dt_elements.html:69 -#: rhodecode/templates/journal/journal.html:97 -#: rhodecode/templates/summary/summary.html:87 -msgid "public repository" -msgstr "公共版本库" - -#: rhodecode/templates/data_table/_dt_elements.html:80 -#: rhodecode/templates/summary/summary.html:96 -#: rhodecode/templates/summary/summary.html:97 -msgid "Fork of" -msgstr "复刻自" - -#: rhodecode/templates/data_table/_dt_elements.html:94 +#: rhodecode/templates/data_table/_dt_elements.html:74 +#, fuzzy, python-format +msgid "Fork of %s" +msgstr "复刻名称%s" + +#: rhodecode/templates/data_table/_dt_elements.html:88 msgid "No changesets yet" msgstr "无修订" -#: rhodecode/templates/data_table/_dt_elements.html:101 -#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:95 +#: rhodecode/templates/data_table/_dt_elements.html:97 #, 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 +#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:105 #, 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 repository: %s" +msgstr "确认删除版本库:%s" + +#: rhodecode/templates/data_table/_dt_elements.html:131 +#, python-format msgid "Confirm to delete this user: %s" msgstr "确认删除用户:%s" -#: rhodecode/templates/email_templates/changeset_comment.html:10 -msgid "New status$" -msgstr "新状态$" +#: rhodecode/templates/email_templates/changeset_comment.html:9 +#: rhodecode/templates/email_templates/pull_request_comment.html:15 +msgid "New status" +msgstr "新状态" + +#: rhodecode/templates/email_templates/changeset_comment.html:11 +#: rhodecode/templates/email_templates/pull_request_comment.html:9 +msgid "View this comment here" +msgstr "查看评论" + +#: rhodecode/templates/email_templates/changeset_comment.html:14 +#, fuzzy +msgid "Repo" +msgstr "我的版本库" + +#: rhodecode/templates/email_templates/changeset_comment.html:16 +msgid "desc" +msgstr "" #: rhodecode/templates/email_templates/main.html:8 msgid "This is a notification from RhodeCode." msgstr "这是一个RhodeCode通知。" #: rhodecode/templates/email_templates/password_reset.html:4 -msgid "Hello" +#, fuzzy, python-format +msgid "Hello %s" msgstr "你好" -#: rhodecode/templates/email_templates/password_reset.html:6 +#: rhodecode/templates/email_templates/password_reset.html:5 msgid "We received a request to create a new password for your account." msgstr "我们收到重置你用户密码的请求。" -#: rhodecode/templates/email_templates/password_reset.html:8 +#: rhodecode/templates/email_templates/password_reset.html:6 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." +#: rhodecode/templates/email_templates/password_reset.html:11 +#, fuzzy +msgid "If you did not request new password please ignore this email." msgstr "如果你没有要求重置密码,请忽略这封邮件。" #: rhodecode/templates/email_templates/pull_request.html:4 @@ -3474,34 +3776,30 @@ msgid "" msgstr "用户%s在版本库%s中创建了一个拉取请求需要你检视" #: rhodecode/templates/email_templates/pull_request.html:5 -msgid "title" -msgstr "标题" +msgid "View this pull request here" +msgstr "查看拉取请求" #: rhodecode/templates/email_templates/pull_request.html:6 -#: rhodecode/templates/pullrequests/pullrequest.html:115 +msgid "title" +msgstr "标题" + +#: rhodecode/templates/email_templates/pull_request.html:7 msgid "description" msgstr "描述" -#: rhodecode/templates/email_templates/pull_request.html:11 +#: rhodecode/templates/email_templates/pull_request.html:12 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" +#: rhodecode/templates/email_templates/pull_request_comment.html:3 +#, fuzzy, python-format +msgid "Pull request #%s for repository %s" msgstr "用户%s评论了版本库%s的拉取请求%s" -#: 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/pull_request_comment.html:13 +#, fuzzy +msgid "Closing pull request with status" +msgstr "拉取请求状态" #: rhodecode/templates/email_templates/registration.html:4 msgid "A new user have registered in RhodeCode" @@ -3511,109 +3809,115 @@ msgstr "新用户注册RhodeCode" msgid "View this user here" msgstr "查看用户" -#: rhodecode/templates/errors/error_document.html:46 +#: rhodecode/templates/errors/error_document.html:55 #, python-format msgid "You will be redirected to %s in %s seconds" msgstr "重定向到%s,于%s秒后" #: rhodecode/templates/files/file_diff.html:4 -#, python-format -msgid "%s File diff" +#, fuzzy, python-format +msgid "%s File Diff" msgstr "%s文件差异" -#: rhodecode/templates/files/file_diff.html:12 +#: rhodecode/templates/files/file_diff.html:8 msgid "File diff" msgstr "文件差异" #: rhodecode/templates/files/files.html:4 -#: rhodecode/templates/files/files.html:74 -#, python-format -msgid "%s files" +#: rhodecode/templates/files/files.html:76 +#, fuzzy, python-format +msgid "%s Files" msgstr "%s文件" -#: rhodecode/templates/files/files.html:12 -#: rhodecode/templates/summary/summary.html:351 -msgid "files" -msgstr "文件" +#: rhodecode/templates/files/files.html:30 +#: rhodecode/templates/files/files_add.html:31 +#: rhodecode/templates/files/files_edit.html:31 +#: rhodecode/templates/shortlog/shortlog_data.html:9 +#, fuzzy +msgid "Branch" +msgstr "分支" #: rhodecode/templates/files/files_add.html:4 -#: rhodecode/templates/files/files_edit.html:4 -#, python-format -msgid "%s Edit file" -msgstr "%s编辑文件" +#, fuzzy, python-format +msgid "%s Files Add" +msgstr "%s文件" #: rhodecode/templates/files/files_add.html:19 -msgid "add file" +#, fuzzy +msgid "Add file" msgstr "新建文件" -#: rhodecode/templates/files/files_add.html:40 +#: rhodecode/templates/files/files_add.html:38 +#: rhodecode/templates/files/files_browser.html:31 +#: rhodecode/templates/shortlog/shortlog_data.html:78 msgid "Add new file" msgstr "新建文件" -#: rhodecode/templates/files/files_add.html:45 +#: rhodecode/templates/files/files_add.html:43 msgid "File Name" msgstr "文件名" -#: rhodecode/templates/files/files_add.html:49 -#: rhodecode/templates/files/files_add.html:58 +#: rhodecode/templates/files/files_add.html:47 +#: rhodecode/templates/files/files_add.html:56 msgid "or" msgstr "或者" -#: rhodecode/templates/files/files_add.html:49 -#: rhodecode/templates/files/files_add.html:54 +#: rhodecode/templates/files/files_add.html:47 +#: rhodecode/templates/files/files_add.html:52 msgid "Upload file" msgstr "上传文件" -#: rhodecode/templates/files/files_add.html:58 +#: rhodecode/templates/files/files_add.html:56 msgid "Create new file" msgstr "创建新文件" -#: rhodecode/templates/files/files_add.html:63 -#: rhodecode/templates/files/files_edit.html:39 +#: rhodecode/templates/files/files_add.html:61 +#: rhodecode/templates/files/files_edit.html:37 #: rhodecode/templates/files/files_ypjax.html:3 msgid "Location" msgstr "位置" -#: rhodecode/templates/files/files_add.html:67 +#: rhodecode/templates/files/files_add.html:65 msgid "use / to separate directories" msgstr "使用 / 目录分隔符" -#: rhodecode/templates/files/files_add.html:77 -#: rhodecode/templates/files/files_edit.html:63 +#: rhodecode/templates/files/files_add.html:75 +#: rhodecode/templates/files/files_edit.html:61 #: rhodecode/templates/shortlog/shortlog_data.html:6 -msgid "commit message" +#, fuzzy +msgid "Commit message" msgstr "提交信息" -#: rhodecode/templates/files/files_add.html:81 -#: rhodecode/templates/files/files_edit.html:67 +#: rhodecode/templates/files/files_add.html:79 +#: rhodecode/templates/files/files_edit.html:65 msgid "Commit changes" msgstr "提交修改" #: rhodecode/templates/files/files_browser.html:13 -msgid "view" +#, fuzzy +msgid "View" msgstr "显示" #: rhodecode/templates/files/files_browser.html:14 -msgid "previous revision" +#, fuzzy +msgid "Previous revision" msgstr "上一个修订" #: rhodecode/templates/files/files_browser.html:16 -msgid "next revision" +#, fuzzy +msgid "Next revision" msgstr "下一个修订" #: rhodecode/templates/files/files_browser.html:23 -msgid "follow current branch" +#, fuzzy +msgid "Follow current branch" msgstr "沿着当前分支" #: rhodecode/templates/files/files_browser.html:27 -msgid "search file list" +#, fuzzy +msgid "Search file list" msgstr "搜索文件列表" -#: rhodecode/templates/files/files_browser.html:31 -#: rhodecode/templates/shortlog/shortlog_data.html:78 -msgid "add new file" -msgstr "新建文件" - #: rhodecode/templates/files/files_browser.html:35 msgid "Loading file list..." msgstr "加载文件列表..." @@ -3635,34 +3939,44 @@ msgid "Last modified" msgstr "最后修改于" #: rhodecode/templates/files/files_browser.html:52 -msgid "Last commiter" +msgid "Last committer" msgstr "最后提交者" +#: rhodecode/templates/files/files_edit.html:4 +#, fuzzy, python-format +msgid "%s Files Edit" +msgstr "%s文件" + #: rhodecode/templates/files/files_edit.html:19 -msgid "edit file" +#, fuzzy +msgid "Edit file" msgstr "编辑文件" +#: rhodecode/templates/files/files_edit.html:47 +#: rhodecode/templates/files/files_source.html:23 +#, fuzzy +msgid "Show annotation" +msgstr "显示注释" + +#: rhodecode/templates/files/files_edit.html:48 +#: rhodecode/templates/files/files_source.html:25 +#: rhodecode/templates/files/files_source.html:55 +#, fuzzy +msgid "Show as raw" +msgstr "显示原始文件" + #: rhodecode/templates/files/files_edit.html:49 -#: rhodecode/templates/files/files_source.html:23 -msgid "show annotation" -msgstr "显示注释" - -#: 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 "显示原始文件" - -#: rhodecode/templates/files/files_edit.html:51 #: rhodecode/templates/files/files_source.html:26 -msgid "download as raw" +#, fuzzy +msgid "Download as raw" msgstr "下载原始文件" -#: rhodecode/templates/files/files_edit.html:54 -msgid "source" +#: rhodecode/templates/files/files_edit.html:52 +#, fuzzy +msgid "Source" msgstr "显示源文件" -#: rhodecode/templates/files/files_edit.html:59 +#: rhodecode/templates/files/files_edit.html:57 msgid "Editing file" msgstr "编辑文件" @@ -3671,15 +3985,18 @@ msgid "History" msgstr "历史" #: rhodecode/templates/files/files_history_box.html:9 -msgid "diff to revision" +#, fuzzy +msgid "Diff to revision" msgstr "比较差异" #: rhodecode/templates/files/files_history_box.html:10 -msgid "show at revision" +#, fuzzy +msgid "Show at revision" msgstr "显示修订" #: rhodecode/templates/files/files_history_box.html:11 -msgid "show full history" +#, fuzzy +msgid "Show full history" msgstr "显示全部历史记录" #: rhodecode/templates/files/files_history_box.html:16 @@ -3693,15 +4010,30 @@ msgid "Load file history" msgstr "加载文件历史记录..." #: rhodecode/templates/files/files_source.html:21 -msgid "show source" +#, fuzzy +msgid "Show source" msgstr "显示代码" -#: rhodecode/templates/files/files_source.html:44 +#: rhodecode/templates/files/files_source.html:29 +#, fuzzy, python-format +msgid "Edit on branch:%s" +msgstr "已经删除分支%s" + +#: rhodecode/templates/files/files_source.html:31 +#, fuzzy +msgid "Edit on branch:?" +msgstr "已经删除分支%s" + +#: rhodecode/templates/files/files_source.html:31 +msgid "Editing files allowed only when on branch head revision" +msgstr "" + +#: rhodecode/templates/files/files_source.html:46 #, python-format msgid "Binary file (%s)" msgstr "二进制文件(%s)" -#: rhodecode/templates/files/files_source.html:53 +#: rhodecode/templates/files/files_source.html:55 msgid "File is too big to display" msgstr "文件过大,不能显示" @@ -3722,8 +4054,10 @@ msgstr "指定的路径中没有文件" msgid "%s Followers" msgstr "%s个关注者" -#: rhodecode/templates/followers/followers.html:13 -msgid "followers" +#: rhodecode/templates/followers/followers.html:9 +#: rhodecode/templates/summary/summary.html:183 +#: rhodecode/templates/summary/summary.html:184 +msgid "Followers" msgstr "关注者" #: rhodecode/templates/followers/followers_data.html:12 @@ -3735,32 +4069,33 @@ msgstr "开始关注 - " msgid "%s Fork" msgstr "%s的复刻" -#: rhodecode/templates/forks/fork.html:31 +#: rhodecode/templates/forks/fork.html:28 msgid "Fork name" msgstr "复刻名称" -#: rhodecode/templates/forks/fork.html:68 +#: rhodecode/templates/forks/fork.html:65 msgid "Private" msgstr "私有" -#: rhodecode/templates/forks/fork.html:77 +#: rhodecode/templates/forks/fork.html:74 msgid "Copy permissions" msgstr "拷贝权限" -#: rhodecode/templates/forks/fork.html:81 +#: rhodecode/templates/forks/fork.html:78 msgid "Copy permissions from forked repository" msgstr "从被复刻版本库拷贝权限" -#: rhodecode/templates/forks/fork.html:86 +#: rhodecode/templates/forks/fork.html:84 msgid "Update after clone" msgstr "克隆后更新" -#: rhodecode/templates/forks/fork.html:90 +#: rhodecode/templates/forks/fork.html:88 msgid "Checkout source after making a clone" msgstr "完成克隆后检出源代码" -#: rhodecode/templates/forks/fork.html:94 -msgid "fork this repository" +#: rhodecode/templates/forks/fork.html:93 +#, fuzzy +msgid "Fork this repository" msgstr "复刻该版本库" #: rhodecode/templates/forks/forks.html:5 @@ -3768,12 +4103,15 @@ msgstr "复刻该版本库" msgid "%s Forks" msgstr "%s个复刻" -#: rhodecode/templates/forks/forks.html:13 -msgid "forks" +#: rhodecode/templates/forks/forks.html:9 +#: rhodecode/templates/summary/summary.html:189 +#: rhodecode/templates/summary/summary.html:190 +msgid "Forks" msgstr "复刻" #: rhodecode/templates/forks/forks_data.html:17 -msgid "forked" +#, fuzzy +msgid "Forked" msgstr "已有复刻" #: rhodecode/templates/forks/forks_data.html:42 @@ -3789,44 +4127,27 @@ msgid "RSS journal feed" msgstr "订阅日志RSS" #: rhodecode/templates/journal/journal.html:32 -#: rhodecode/templates/pullrequests/pullrequest.html:55 msgid "Refresh" msgstr "刷新" #: rhodecode/templates/journal/journal.html:35 #: rhodecode/templates/journal/public_journal.html:24 -msgid "RSS feed" -msgstr "订阅RSS" - -#: rhodecode/templates/journal/journal.html:38 -#: rhodecode/templates/journal/public_journal.html:27 msgid "ATOM feed" msgstr "订阅ATOM" -#: rhodecode/templates/journal/journal.html:49 +#: rhodecode/templates/journal/journal.html:51 msgid "Watched" msgstr "关注的" -#: rhodecode/templates/journal/journal.html:54 -msgid "ADD" -msgstr "新建版本库" - -#: rhodecode/templates/journal/journal.html:77 -msgid "following user" -msgstr "关注用户" - -#: rhodecode/templates/journal/journal.html:77 -msgid "user" -msgstr "用户" - -#: rhodecode/templates/journal/journal.html:110 -msgid "You are not following any users or repositories" -msgstr "未关注任何用户或版本库" - #: rhodecode/templates/journal/journal_data.html:55 msgid "No entries yet" msgstr "没有条目" +#: rhodecode/templates/journal/public_journal.html:4 +#: rhodecode/templates/journal/public_journal.html:21 +msgid "Public Journal" +msgstr "公共日志" + #: rhodecode/templates/journal/public_journal.html:13 msgid "ATOM public journal feed" msgstr "订阅公共日志ATOM" @@ -3835,146 +4156,131 @@ msgstr "订阅公共日志ATOM" msgid "RSS public journal feed" msgstr "订阅公共日志RSS" -#: rhodecode/templates/journal/public_journal.html:21 -msgid "Public Journal" -msgstr "公共日志" - #: rhodecode/templates/pullrequests/pullrequest.html:4 -#: rhodecode/templates/pullrequests/pullrequest.html:12 +#: rhodecode/templates/pullrequests/pullrequest.html:8 msgid "New pull request" msgstr "新建拉取请求" -#: rhodecode/templates/pullrequests/pullrequest.html:54 -msgid "refresh overview" -msgstr "刷新概览" - -#: rhodecode/templates/pullrequests/pullrequest.html:66 +#: rhodecode/templates/pullrequests/pullrequest.html:52 msgid "Detailed compare view" msgstr "详细比较显示" -#: rhodecode/templates/pullrequests/pullrequest.html:70 -#: rhodecode/templates/pullrequests/pullrequest_show.html:100 +#: rhodecode/templates/pullrequests/pullrequest.html:56 +#: rhodecode/templates/pullrequests/pullrequest_show.html:137 msgid "Pull request reviewers" msgstr "拉取请求检视人员" -#: rhodecode/templates/pullrequests/pullrequest.html:79 -#: rhodecode/templates/pullrequests/pullrequest_show.html:112 +#: rhodecode/templates/pullrequests/pullrequest.html:65 +#: rhodecode/templates/pullrequests/pullrequest_show.html:149 msgid "owner" msgstr "所有者" -#: rhodecode/templates/pullrequests/pullrequest.html:91 -#: rhodecode/templates/pullrequests/pullrequest_show.html:127 +#: rhodecode/templates/pullrequests/pullrequest.html:77 msgid "Add reviewer to this pull request." msgstr "为这个拉取请求增加检视人员" -#: rhodecode/templates/pullrequests/pullrequest.html:97 +#: rhodecode/templates/pullrequests/pullrequest.html:83 msgid "Create new pull request" msgstr "创建新的拉取请求" -#: rhodecode/templates/pullrequests/pullrequest.html:106 +#: rhodecode/templates/pullrequests/pullrequest.html:92 +#: rhodecode/templates/pullrequests/pullrequest_data.html:14 #: rhodecode/templates/pullrequests/pullrequest_show.html:25 -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:33 msgid "Title" msgstr "标题" -#: rhodecode/templates/pullrequests/pullrequest.html:123 +#: rhodecode/templates/pullrequests/pullrequest.html:109 msgid "Send pull request" msgstr "发送拉取请求" -#: rhodecode/templates/pullrequests/pullrequest_show.html:23 -#, python-format -msgid "Closed %s" -msgstr "于%s前关闭" - -#: rhodecode/templates/pullrequests/pullrequest_show.html:23 -#, python-format -msgid "with status %s" -msgstr "状态%s" - -#: rhodecode/templates/pullrequests/pullrequest_show.html:31 -msgid "Status" -msgstr "状态" - -#: rhodecode/templates/pullrequests/pullrequest_show.html:36 +#: rhodecode/templates/pullrequests/pullrequest_show.html:4 +#, fuzzy, python-format +msgid "%s Pull Request #%s" +msgstr "拉取请求#%s" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:35 +#, fuzzy +msgid "Review status" +msgstr "新状态" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:40 msgid "Pull request status" msgstr "拉取请求状态" -#: rhodecode/templates/pullrequests/pullrequest_show.html:44 +#: rhodecode/templates/pullrequests/pullrequest_show.html:53 msgid "Still not reviewed by" msgstr "还未检视的检视人员" -#: rhodecode/templates/pullrequests/pullrequest_show.html:48 +#: rhodecode/templates/pullrequests/pullrequest_show.html:57 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" msgstr[0] "%d个检视者" -#: rhodecode/templates/pullrequests/pullrequest_show.html:50 -msgid "pull request was reviewed by all reviewers" +#: rhodecode/templates/pullrequests/pullrequest_show.html:59 +#, fuzzy +msgid "Pull request was reviewed by all reviewers" msgstr "拉取请求已经由所有检视人员检视" -#: rhodecode/templates/pullrequests/pullrequest_show.html:58 +#: rhodecode/templates/pullrequests/pullrequest_show.html:65 +#, fuzzy +msgid "Origin repository" +msgstr "Git版本库" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:89 msgid "Created on" msgstr "创建于" -#: rhodecode/templates/pullrequests/pullrequest_show.html:65 +#: rhodecode/templates/pullrequests/pullrequest_show.html:102 msgid "Compare view" msgstr "比较显示" -#: rhodecode/templates/pullrequests/pullrequest_show.html:112 +#: rhodecode/templates/pullrequests/pullrequest_show.html:149 msgid "reviewer" msgstr "检视者" +#: rhodecode/templates/pullrequests/pullrequest_show.html:164 +#, fuzzy +msgid "Add or remove reviewer to this pull request." +msgstr "为这个拉取请求增加检视人员" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:168 +#, fuzzy +msgid "Save changes" +msgstr "无变更" + #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4 -msgid "all pull requests" -msgstr "所有拉取请求" - -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:12 -msgid "All pull requests" -msgstr "所有拉取请求" - -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:27 -msgid "Closed" -msgstr "已关闭" +#, fuzzy, python-format +msgid "%s Pull Requests" +msgstr "我的拉取请求" #: rhodecode/templates/search/search.html:6 -#, python-format -msgid "Search \"%s\" in repository: %s" -msgstr "搜索 \"%s\" 于版本库 %s 中" +#, fuzzy +msgid "Search repository" +msgstr "在版本库%s中搜索" #: rhodecode/templates/search/search.html:8 -#, python-format -msgid "Search \"%s\" in all repositories" -msgstr "在所有的版本库中搜索 \"%s\"" - -#: rhodecode/templates/search/search.html:12 -#: rhodecode/templates/search/search.html:32 -#, python-format -msgid "Search in repository: %s" -msgstr "在版本库%s中搜索" - -#: rhodecode/templates/search/search.html:14 -#: rhodecode/templates/search/search.html:34 +#: rhodecode/templates/search/search.html:16 msgid "Search in all repositories" msgstr "在所有的版本库中搜索" -#: rhodecode/templates/search/search.html:48 +#: rhodecode/templates/search/search.html:50 msgid "Search term" msgstr "搜索短语" -#: rhodecode/templates/search/search.html:60 +#: rhodecode/templates/search/search.html:62 msgid "Search in" msgstr "搜索范围" -#: rhodecode/templates/search/search.html:63 +#: rhodecode/templates/search/search.html:65 msgid "File contents" msgstr "文件内容" -#: rhodecode/templates/search/search.html:64 +#: rhodecode/templates/search/search.html:66 msgid "Commit messages" msgstr "提交信息" -#: rhodecode/templates/search/search.html:65 +#: rhodecode/templates/search/search.html:67 msgid "File names" msgstr "文件名" @@ -3984,40 +4290,26 @@ msgstr "文件名" msgid "Permission denied" msgstr "权限不足" -#: rhodecode/templates/settings/repo_settings.html:5 -#, python-format -msgid "%s Settings" -msgstr "%s设置" - -#: rhodecode/templates/settings/repo_settings.html:102 -msgid "Delete repository" -msgstr "删除版本库" - -#: rhodecode/templates/settings/repo_settings.html:109 -msgid "Remove repo" -msgstr "删除版本库" - #: rhodecode/templates/shortlog/shortlog.html:5 -#, python-format -msgid "%s Shortlog" -msgstr "%s简短日志" - +#, fuzzy, python-format +msgid "%s Lightweight Changelog" +msgstr "使用轻量的控制面板" + +#: rhodecode/templates/shortlog/shortlog.html:11 #: 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 "修订" +#, fuzzy +msgid "Lightweight Changelog" +msgstr "使用轻量的控制面板" #: rhodecode/templates/shortlog/shortlog_data.html:7 -msgid "age" +#, fuzzy +msgid "Age" msgstr "时间" -#: rhodecode/templates/shortlog/shortlog_data.html:8 -msgid "author" -msgstr "作者" +#: rhodecode/templates/shortlog/shortlog_data.html:20 +#, python-format +msgid "Click to open associated pull request #%s" +msgstr "点击建立相关的拉取请求 #%s" #: rhodecode/templates/shortlog/shortlog_data.html:75 msgid "Add or upload files directly via RhodeCode" @@ -4036,156 +4328,170 @@ msgstr "已有版本库?" msgid "%s Summary" msgstr "%s概要" -#: rhodecode/templates/summary/summary.html:12 -msgid "summary" -msgstr "概要" - -#: rhodecode/templates/summary/summary.html:20 -#, python-format -msgid "repo %s ATOM feed" -msgstr "订阅ATOM %s" - -#: rhodecode/templates/summary/summary.html:21 -#, python-format -msgid "repo %s RSS feed" -msgstr "订阅RSS %s" - -#: rhodecode/templates/summary/summary.html:49 -#: rhodecode/templates/summary/summary.html:52 -msgid "ATOM" -msgstr "ATOM" - -#: rhodecode/templates/summary/summary.html:70 +#: rhodecode/templates/summary/summary.html:16 +#, fuzzy, python-format +msgid "%s ATOM feed" +msgstr "%s %s订阅" + +#: rhodecode/templates/summary/summary.html:17 +#, fuzzy, python-format +msgid "%s RSS feed" +msgstr "%s %s订阅" + +#: rhodecode/templates/summary/summary.html:62 #, python-format msgid "Repository locked by %s" msgstr "版本库由%s锁定" -#: rhodecode/templates/summary/summary.html:72 +#: rhodecode/templates/summary/summary.html:64 msgid "Repository unlocked" msgstr "版本库未锁定" -#: rhodecode/templates/summary/summary.html:91 +#: rhodecode/templates/summary/summary.html:83 #, python-format msgid "Non changable ID %s" msgstr "不可变ID %s" -#: rhodecode/templates/summary/summary.html:96 -msgid "public" +#: rhodecode/templates/summary/summary.html:88 +#, fuzzy +msgid "Public" msgstr "公共" -#: rhodecode/templates/summary/summary.html:104 -msgid "remote clone" +#: rhodecode/templates/summary/summary.html:88 +#: rhodecode/templates/summary/summary.html:89 +msgid "Fork of" +msgstr "复刻自" + +#: rhodecode/templates/summary/summary.html:96 +#, fuzzy +msgid "Remote clone" msgstr "远程克隆" -#: rhodecode/templates/summary/summary.html:125 +#: rhodecode/templates/summary/summary.html:117 msgid "Contact" msgstr "联系方式" -#: rhodecode/templates/summary/summary.html:139 +#: rhodecode/templates/summary/summary.html:131 msgid "Clone url" msgstr "克隆地址" -#: rhodecode/templates/summary/summary.html:142 +#: rhodecode/templates/summary/summary.html:136 msgid "Show by Name" msgstr "以名字显示" -#: rhodecode/templates/summary/summary.html:143 +#: rhodecode/templates/summary/summary.html:137 msgid "Show by ID" msgstr "按ID显示" +#: rhodecode/templates/summary/summary.html:143 +msgid "Trending files" +msgstr "文件趋势图" + #: rhodecode/templates/summary/summary.html:151 -msgid "Trending files" -msgstr "文件趋势图" +#: rhodecode/templates/summary/summary.html:167 +#: rhodecode/templates/summary/summary.html:232 +msgid "enable" +msgstr "启用" #: 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:167 msgid "Download" msgstr "下载" -#: rhodecode/templates/summary/summary.html:171 +#: rhodecode/templates/summary/summary.html:163 msgid "There are no downloads yet" msgstr "无下载" -#: rhodecode/templates/summary/summary.html:173 +#: rhodecode/templates/summary/summary.html:165 msgid "Downloads are disabled for this repository" msgstr "这个版本库的下载已经禁用" -#: rhodecode/templates/summary/summary.html:179 +#: rhodecode/templates/summary/summary.html:171 msgid "Download as zip" msgstr "zip打包下载" -#: rhodecode/templates/summary/summary.html:182 +#: rhodecode/templates/summary/summary.html:174 msgid "Check this to download archive with subrepos" msgstr "勾选以下载包含子版本库的压缩包" -#: rhodecode/templates/summary/summary.html:182 +#: rhodecode/templates/summary/summary.html:174 msgid "with subrepos" msgstr "包括子版本库" -#: rhodecode/templates/summary/summary.html:195 +#: rhodecode/templates/summary/summary.html:197 +#, fuzzy +msgid "Repository Size" +msgstr "版本库" + +#: rhodecode/templates/summary/summary.html:204 +#: rhodecode/templates/summary/summary.html:206 +#, fuzzy +msgid "Feed" +msgstr "订阅RSS" + +#: rhodecode/templates/summary/summary.html:224 msgid "Commit activity by day / author" msgstr "按日期或作者的提交活动" -#: rhodecode/templates/summary/summary.html:206 +#: rhodecode/templates/summary/summary.html:235 msgid "Stats gathered: " msgstr "已收集的统计:" -#: rhodecode/templates/summary/summary.html:227 -msgid "Shortlog" -msgstr "简短日志" - -#: rhodecode/templates/summary/summary.html:229 +#: rhodecode/templates/summary/summary.html:256 +#, fuzzy +msgid "Latest changes" +msgstr "最后修改" + +#: rhodecode/templates/summary/summary.html:258 msgid "Quick start" msgstr "快速入门" -#: rhodecode/templates/summary/summary.html:243 +#: rhodecode/templates/summary/summary.html:272 #, python-format msgid "Readme file at revision '%s'" msgstr "修订'%s'中的README" -#: rhodecode/templates/summary/summary.html:246 +#: rhodecode/templates/summary/summary.html:275 msgid "Permalink to this readme" msgstr "这个README的永久链接" -#: rhodecode/templates/summary/summary.html:304 +#: rhodecode/templates/summary/summary.html:333 #, python-format msgid "Download %s as %s" msgstr "下载%s为%s包" -#: rhodecode/templates/summary/summary.html:661 +#: rhodecode/templates/summary/summary.html:380 +msgid "files" +msgstr "文件" + +#: rhodecode/templates/summary/summary.html:690 msgid "commits" msgstr "提交" -#: rhodecode/templates/summary/summary.html:662 +#: rhodecode/templates/summary/summary.html:691 msgid "files added" msgstr "文件已添加" -#: rhodecode/templates/summary/summary.html:663 +#: rhodecode/templates/summary/summary.html:692 msgid "files changed" msgstr "文件已更改" -#: rhodecode/templates/summary/summary.html:664 +#: rhodecode/templates/summary/summary.html:693 msgid "files removed" msgstr "文件已删除" -#: rhodecode/templates/summary/summary.html:667 +#: rhodecode/templates/summary/summary.html:695 msgid "commit" msgstr "提交" -#: rhodecode/templates/summary/summary.html:668 +#: rhodecode/templates/summary/summary.html:696 msgid "file added" msgstr "文件已添加" -#: rhodecode/templates/summary/summary.html:669 +#: rhodecode/templates/summary/summary.html:697 msgid "file changed" msgstr "文件已更改" -#: rhodecode/templates/summary/summary.html:670 +#: rhodecode/templates/summary/summary.html:698 msgid "file removed" msgstr "文件已删除" @@ -4194,6 +4500,7 @@ msgstr "文件已删除" msgid "%s Tags" msgstr "%s标签" -#: rhodecode/templates/tags/tags.html:29 +#: rhodecode/templates/tags/tags.html:26 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 0aea77c1d8a699363ed664d5d5e4c56dca7fc3e6..ede0f7d1501ae1f60b62b8126b7d6c8c3d821862 GIT binary patch literal 36494 zc%1Ef34B!Lx%cU{-dcKXtF^7RYEQKY5i*1w!x~6{Ca<%$#A)OhP~) zKp<>kQP~vPWD|w3h$3tE+S={jR{Q+k0(4@Ao|K|2Z>fk|1c8uM7Ns z(703C<(Wds0pk{8xgn3;ZoXM*WYsVclzQ*R(qsKZ5Tkc+c&?fBNmfdjY{~ z2tG>iBaF}O!0)*9|I+PP|JB=p|Mv)9MewJ$gHEp#tS0!rPifkAg0l%eO7MRO_ThPZ zYFaOX=Lz;Bm?Ais;79M!v_S;R2o5K>gkT=;_YU++6Qr)%jlF>Hs9u=QAUJ?vTQBtg zG(ivJ(+lTuQ*W#{vp4EndSm?Y-k{5?1mDeg^ag!?PVhR$SL(0J16@CohyJ$`d>_Gn zd7%67JkYCz;KvA-=Yc+fJgj38>`(BKJgoouJgoDZJka}J@5DSe-wA%XL&~EGmJ%!_ z*qiBgC-~?L!74rnf_({ooQOcA)h71A{zHAhFPr;dzV<#C_fj9s`z?Xr?*slw5xkqv ztq=I~uD;m+_`aCuK7s`VBLqJ|a93aO!DsrS|2O+$o$nJQ*42JT@D4tweBeDgANcw6 z!AETZcjbewC-QMVXQe)o4}AYSAM?N413a(u0Ph<;p#N%PzUO4zzxTuXKj{bleO>BrAfnzvuqVNf6C76n`JYvQelHaOkJk%uuFOPCuR96q z1P2f#5@}WaA$N=WqyKg(A0bGhsC}(J_VMffpwG<%Fs@_(C1IEQaZ`yU2? zUU>t-r$Yoz8i@VY3q4}0zK9Y!u*d(`SC$mXZIk`^{CW;Z4lOZWf0`>XEN?% zgMp7e82jxr80!opcoV^qgTWWmq<;2b%x6kDG#L0q2V=g6rGCj^oOA17@Z*-j;EPuY zKEeD(a17IH2+sS9LxAtkhhY9|hC(hsI28JI2EiickD-`<*HHA^Hx&GJcqr&~YAEF4 zt3#oGel!$#Tr~`M-Y^X9w+_R&0mDGAQNwVKWy3(H83N}BY#oO4dU6=(ag5+7K2L&P zf^Q51{T{pvc-7y9bF&4mx(o8N>n`AN^e)VMn&5*hCj>_mEGPsXkwVO~un_AmFT}b} z6ym)06k=cPQvP%y=>Kvd==1M|Snt(B;FT=IdHzPmT{|4}-8vlm?=>9r3>gmk6b%PG zrwj+3>W1U|?BT#~xr}>kIQI9{aLj*7=J~da|KV`p^XuWj<9EZcud7C2{r8Ok9c~x_ zxw~@&`rSux1oPPl*u~u=U?;yb0^_e8iT!?fB2LOCzEGzCRLr=C>n(?Jj ze0db;{IgNeLw_6veW#CxJs&k1c!o!V-pfWqPi-9y`hI>i?I~M2mm9aRVZ;r*jI>ut% zKa2&Q*N-C`%;!1|`l^Otl;DPO*!R1Ov9C`SgC2Rspp&N<`x;RUIU83DIVdZ}`9Dw$ z`~n061m_jw{4Nv&kKai7>JpM+=F1Y`(_8{RSy>|brv&G^uSE2D3Haxg64;slDFL3n z$3wrBj0eBfkB1-8JRakBjt4%UCpd)1kH^0LZ35s86EOeH6R^Kt6R`eZX)m0B`Nm4W znhCILp$WpD6EOdQ2{^wO3EoQZ8xzD|oq%(G-$cxR<3z~u9TRarVtx@MBsI3BJemyu!-PVg0zG-v=sV$Q7Q2KN-6Z-PfM|0>D`#mdpG#-;k&^P zo9_nRhY8-rbRzfy!8h-QU-kSw#PbBddk^S$!zB1$_e{ck(MjN+)dY_aJT(dU)|Y`k zRvGYKC~#>R^!kc2;Q6I8&?i-f^ZU;-@bi1ip$BdeSWu30A6E`~1nD@1Ot9}{l;=+dpKY9seQhT=pWx>vLtaK#VEvK`l&4ofj%QbZP75o5*TxFi z)u$^YE~x#ssjHXsY3r(tH6KnuZEt?CrC%4O|FK#ZmR}8_Elrtr>h}X z$!hHXgHy22o>Nf1OUmU_K)0GHpnI#pjZ?7RQvyFL<9<8^bokvA(CLp;z}MPT=#T5C zg5PhNiu3>ERN&*0_UftNml*24(boAim;S$+20nX3*1z#S^uP5!?DO{fP~V?m^Sg*A z?!$T~?}r`v!u`T`_e1XcOb5M+rUU=7>Ea(u$3D#In0M}U&}I2_@aMYepu^{;BaiU1 z%;TGZeMe>hkLDTZw|oZhUpoW)+#+y?z(ev9@2|>y@0tnxubYYXK{HW* z_e{v=^qJt(IWw`3Wiv7Fdg-@$Cg{0;CiKTMGm%GlX(sXrw>*G6!kGskhZPSZUU~RI z=$AbY!v25zLHJ8OWgMMEx_22c0+{!#}_>f1q-h^ElXQH21 zV8p~a3rzT1n*<&+f%n&?{Cg90{ZK8&-7c`87Uwgv7VTy&_$)54xfXb?t_A*&)Pnxo zr2c@+(_RZa&eS4qdqvtmR0sI6I?;!9*q=x0$J9X%CrEip9rV}CI_UXO9pqu`xxp6|Bm&epWhFC6ZeBYkNS~EXqSFB2GDO*0Oxv7 z0QkiN$Rj))fE|1?0J(cPAm=9KHv;g}KKc;kefUE-kJ^VYZrwwWpR*4^?{qwbbGW5m z@(lG@->wHen(M)z8|p>g>*0qyBmGVZ{F3zhwv>NbFY+P%-<0v!1_7@NqW_13INv@& z@crN*&SgnHKU0vn}AU+rqx~Tabr#3+I2@!v4QzL4SYO0v`WI=D8{Y z_@0RP&k^8tqm=tZK&N2>%LV!b&WnitkHFvD96=u8RT*D62kjH)U_a#oADV;q<#Ryi zN9SO^C+EPQK0XI|gzKZgzcMQNE{gN7i{c#SN5wCRVqY7iygLf|x68N_QOMt!DAxOG z6zBP>jQf?0dzTHqe7}wIEjIAFQ{WgI^qp#hPBk{>i_5r0Ht4+8#{7G2$oqL4=kXOA z^!}dA|05gc_6r;P`K_$;rVY8fA%=cqWAINV$6y!N#9${s6BBug0gpGOd`%p3{((65 zT^NTxygM%XI*xu3X>W{Ue5;f<#Gz+)N&U;x{}qAXizAQlS{!s3(tvqO1x{^1y|)2+ zv!MZW-qHX)^mGIC-Pamm&wthcx_!J6=R2Sg_>XVI`Oj$t-z<{y6OCBs=|<4=`9|ou zQ;neKcN#&TA2vcSe|RqNE}M&S)pJ2_V=nyZhopVwT;RQaF3#bpxuD03b3unMOZ&H^ zJ~ReKkzX4 zHTW>f3m--vq3vPJ_umg=ytV-44=xb+T)7Z@uwKgB7h?Z=7lKa?N&S}>LZ5zfA@=cKGXHxP zf!;SRLVwR9;CJ^T(5G$@=8rAHxFu5Fun6a}V-e;*wn+G65#;O3i@=XRk@n;w(Bl`2 zkVp8hMaUyWo1xE7H3N^U7enuTd@<&qw;1(pQhsVN==HpmUtSD-`vZcc%C%dTK+f8h zAdk?#1oTTUK_1}~OR>-KOC=Ar6nTUVOM&m$7VL9;3(8YkfdBn1@b_l7z~9@@0{R?n z0eWtj0Iv%If8PRsx5qM+^Ou1RW0pbQ?^%ZZ&tC?4`QkF<5q`7`^Y&XVa9+|dd>GO`tR_1;$O>ycKRZXOGl>z7_iR zrB;#WR^(|0tbl$9u0Z^-dIjpgz5?{VW+nWkI|V+t5_;)mrzXlp-))YN+Rj@xE5k4k1Z7O=vmPj9l~x)IZR_HOi>;XFIrrO^n- zY}FjI^r+boFdOwqJQ$?kbK<5Q({JzDI})80@a5Tsy80Ol#DXSIVf58|(xNqb&-?YB z6AOEm751#ss0Oo`QTK1^ZZm$hrs?CKV=b#bWJK##{e-9$kLbmQ?XR(nsA`w(7tQRVhm1&s<{`rQYV?R1^&1hIEk-n@MWUt=qed%A1H(p$e%3~cy znISzAG!5I-qw%n6p$UTlufc26-i<(*kfSMlW)#O`dyQ}w5vD|MB61)c41~?RoZtER zl_h19rYsJGcg1o2#4W?G)^XUdL z0nveZ$VLV2*-w~+%uo%TE?3d+;*p?b_=L2+K-Bccf=zluz|brGmd_kV|5ev4`J@QO z;C;pXL{K-=c~lo_iNtG&9{NL8JQ_BFs+Rede-J^zMm!i}<_QI86fZz?n}*l#p1V#7h_eDAXvTPQuivuG zuxoH%W=mSvPomDp=Z)Jj;<>J?@FJb(w=)X_Ej#vh(ECdvM*Q6gCt5oiC8o2y-gq=h z=jw|`1K~Q|OBgYY8;oGUXMmG0*4Ghk-Kr%%xx9Wj0Pxf0^mh@*jv2AbT*Wo&9WBL! zscCw^bW3 zgTA-wnW1g16|Lv0x8fM${usl~s-YX%zt|LNs6_<0#2!>X+ccsiiI>qm9wxHXgOFCZ zDP+ZMQB+zH2_pR=yIK<`^07^$epKH;r)jVngTA-5u|-uS+E_MM#pT-AK-gfiuodpz z)6UZzi_R3vTKBP0BTS-6KjHxrbfN@nVO!59`jFMI!oenO91Ab~4YN%(=-lf>yF%*7 zm_|q$lZ}!tiZ4xNxnm?=tRTErI7ZfzHWiEUY(8~fwlji^ja6^D)eJSW(-XDLU@fm; zD6=q*{eW6Fz@|RVZ+dwKiAHiubW7%KIF^E}~UK6NO zu7+|H;xXdH+P*AeWIt!gyf?FLi>dd|wIkWrfjf9cyS4_ovG{j5uVG*#s(Lh95gJP3)p=d%B zOcmZpO~7XLPTR1;y<)oGAj%VS8wd#W(NvH1GCx#A#$jBh25z!XW>Oe;W|xwDgjc{{$AOnp%&_a7P>iY~ zBqi>Z!^*x*DlV#UerI%jaThJhGbgGRK@ z#HPBokzLNOY076A5tX3Ko=2~SE1>v06I^h7h>(-rXecM~-oXqm*O}}g%h$yh%90|p zGndG9sUa-FwDXHmg$NvG&EB&&nbN!f3w)GBk%+>2Qbp0|VCbYZ;%0XpNh{ZN>g~&N zG<$4@_-tsj{jBWCO)=^GyN?W%61+$w%Qe_ToybL;I%P(348ujbLaZ4}32f|3b`1KA zNLG7Ys<&IOT&i!E@UiEm$0#rVa{Faxog0hFvDn&p5<4)cD03Bccd1qKKHdnDJsfYw zlwv~uNgJ>7I;6%`-a(a=@1uSNvR+TtK|&MfSkPbolA}?p%rq6FWX#K{gX^bDBaOFM z)nv>Lbd1!p<2&ABzePOgPJ*LPV`b`6Qbs2STUXATs9Kt-j{K+yIXI10)JIBIYLtJO zTV1dIsD0s=RjVN3!?uj9(}Y|_Iw5G)P*~&6A!Rsg0ujyd))Tbqh*(7wgfuCc_Huq^ z0_~XXQ7^X@S6Z`|+i7-EDk@)xzd#Q^#eG190t8s=WLqJKZ zQ6xc%1SUyEryi{oRgL}t`yUa*Yigxoa#^Uik(1LfBn{{!?p#Sb*0ij7O=bOpW^K%3 z-OtetC-F#1j2fQMn{|^#kF$HqDLkvjwv={~^bVjYBw&cvRVK{=@O8f+Y7e48NB|BkGuA|WUDl*K34HolZb|k+IS5qY?7X~WYDuN0__mzXq%zgwHI=*6 zW=??_gX1!ARC%XsA+6lfVQcA!lNxU_RlO5%W`C0S$6$)Hb!N;pAP^+4JGybR3h_zUXvW zXV0)7V4V%VAPbe7WhcEGr(dnD$e4O+iBETguE3cQ`u$8CanUwWXCR7 z6c8ZyrOfGt#gG+%YkWoO0M&weY$BCt=!fBOeK3E{b7?rG)D-|ok=o+p}O|PDI zFKVo%E&2)85%bYlo=ur8wcE^XsN`AWF(}Rktbciwpq zxcJDblpX8BLNRK$PF-cE7$;|S36`lsI5sD<6AVynsB|K+BJ&dYKpZ66N+m0Qj0r|Q zcxV1%B)dC+E_Im^%6>Qu>9q2Cwv(B)vtdM_R-a8Sb}VW&&DLv!MjiWFD*T|`^D<=n z)ZgxMt7r%{xtX17a%0jMONAudoFBH{vo{HWo#$Mav#xGZ0h>x!7*fbC z6nj)=B*p=|R#jb8Sv{+IQWa}86)?DhfvPEEt1C-Nv?|(``jZW}5qt>XpjCc#>Y$Ur zhcdsT@vv7VDyv|aRf3&dmq4s*CY$d8WG;_Bja7r(2#UW!t{rFUV71A@nz+D`ByW?r zY_bwqJ6uo2aPEx@)$kpQa%85>G`7wl%S70*TEIIck{>Vocl%K?>8wKub>ve`o!T35A z3w5es0hfDU$1$K!d>g+*+Vq-uofMcOIp(Gk zXEtg~gtEjeoGaolt2(ztZQE&ZSvMy|;FD0e3Ym4SitK%k|F2ac`BWONwbbcU7~Xn= z$hk#brpfANLwMLSZ9wzpn(-)W?-)asxJ>7N;fjd{BjxtbQa^o$lH3 zN~$@XM#`7GW9C>w{5Dq5Jm5C9a@dSDvc^y>+q)(Zv-2{`u^%IevZ%URrzHyV2M*AC z^NICD?`WQy$FUt=75Q*GO@Ne8%(9ff$MewI4V+_&n}|1p#5MfE9WG8iGL>9E=gg%d zKh-XCP^`%jGjkGOhQ-6=qKkl8VZNSHSrLxRBE(##%9;{qAVU}rlFSFeT^Z!n@{%eH zTasLs_%)}+@zA?8WNw?fHmRGuuGP%7u3B|_uPfJ3Wgs1^V`hhL|HSz8)bykxcN# z29k^Dx`eyPFhx&yUIJW`@oGGoZt7DDi9J<9qq=iUPJSs_!$^;_XcxSEVBnZf97)Id14Q`EVd37i>gxzjvjO zKM<2>hFtRMKt!u1k0Q)&8u9?u(YUEqbB=2Y?jf_`lBsUZ_=42bZ;Ld={Nz$_&23r# zJmc?qc)0o;f>e>uN#)^NTBQ%Doi~n@4;AXeByE{5SzplNIXTcn?ro%2TZ~B z7%VitYLO~;9x!9S_1=ExN-a-1`ntcnaT@Uzf>Ux$suBxG zr#t4{81zBdm&=$=>Lq*d$^qx8g03XBFY_hD6kHrSDS$3{uxL(Lh7Xpyes?Y!(1Yo^ z4c?~6MlwJ2+wdtn|IV{-kizC{ zcbxArr%_O1YWLIWar|0GhaNQ`@uY{mte#acobk4%R8GqDR_9>yM<2-DDk5fNtHy+T z3hgJKdpKizk$b}fvjiYYdU@SmcE(ik{`l50n)5lmYYH=GiinALYJ?<$Azejw!;f0x>nl(bF}!qCv{Z#7FhWOGepu!aNcq zb{WSXXu^tgk66~+;5mTf+wuq%x3Vi`bJq+H=3J8JG$?6nGy>2g*~FL1^<~A%islaE zv|zUiB)3=Qn|&A-pHLE7I_gfXsc|evS)J%eRAEoqOr*PPxWPLP$GYvI8Z+4S&6U%P zg}24YRzjKKCp7@UH zft*U%`tIsFb;P%Kxpk2)3E6IzMW+Yw1?LPlom}E>+6?7JsxVPBP44^@C8!rV7iks- z$*IJLz$7~w%VraNSh=2(Z;1eGhUyziUoqM$=C}9*mVok#GoiKy%4mEWuCZKd zrgCmHQQ>+lfn zh#R#aZksvYRc?>+cjOt6^L04cKa&42yFJclt+alZR8Nyefg?>(tFG#KMs?i@thJo1 zh{Lh2U*b$K#o0(952e|hfa4UWE!mBpKHX9uL+d?Vp9#KYtF3W5Ory^Zc=+YVeJp()iJviMQjpdiwbpc=g z*m#|tUu_lYC1pjWlg1Pk7gv^4RrRQtT%A8o^3(bJb!nkKprHT2{DMLG1%vhe1%>?w z=NAkuD4>q{PChoCC#jbaVFis? z{~=@Q)JHPJ*rTX>xGqjAJ-^yCLWTM~|E%h1`iM!B#smW%D_S?IM@29mHG=u$$zIrn zdN`tr_Q?Ljb^IJz(4(xhtRzc?{OVJ^MoCf%c08$srq#YalZ=G9IhVAC~RM z_|}@y{1OVxnFkB?VKsqRj|t*(5c!%4^|2}nEb!dr8Pel#^eN<@_1FO|x#>t^_x99tyOY~iCYCKtJ-1V;66^N8*0TS? z*|y}0^@&G!y`5K!GUv(_$!*UjPCauu&lWKx-FiH+?AeY@tCO4erVp->+6!mT6Q=3r zWpC&8B8IAOC{u@brPePOKwFW?uRLD7@_6ye>SIJKsu`4}65gO9z{i^ar><;lm|wZyXhiPNXl z1A%-!@mPEMaI=;;|4d@troV}oipk|0(uY>2cArWgY|}2BKb(B*#pDv+ddJQ~iKXk3 zo6bmW>bd5QH7!n;O=mLZjCcM2^^Ics@T%k!&s}++nBLQxe(G%Mv7_>fb7lC|(fm~E z#QJ~W7m6K=w_iB52fTTi?-RlDsr{!rw(jX@-kNA$opsRAmN>mTd1!a0))CsveU9i} zAoaxI#L703s?>?2=>sb?I*{bry@|u*Vjdv1BjxmgLy5zWYw5-9sS~@Bn_f(uS$Em* z4@t+Qo^fr#_4Y8`dN6%piE{nqY7 zPDe>3N0-D4$7G(4Cr&30t?yWR;=<|Yq4l-Y3kT9?+Fj?b%2_}AoxUe@FQoyH-AFvy z+}*3f)YGS!K{7~?5u(uKZM-Rj)e^$|!@MUHTMW6m{HKHx&Ruy)c;zJ_lnoO$vFB)V z<7TPIh_}=x7PoeOLYUmt%1VMfxWg}MKjAa8wGNpAb@``rrLi!SwmF=@<8~%K7s>6-=Dpl0L8{(Y`#j`^;!5!NtqeiKnW7 zV4wR?@WQ#}$y4j)rJzeiEjy6du|v$(pY>&6>fD~xi53BZQfkHXQvJ4G1||=^kXUz2 z>)5xcW9MQA;9cN_lc$qU@Axac3{31>lH9&6>q?L@I=3ARk~)5xl-q@qhY~9e5?B86 z%$f^lmnXNhr;oQLH*M`$(vsS^HL>jgiZqrwq@P)xSbeTz@ktoFj-AWMzet{3mRi3& z(~TxfuUJKgjG90F{a>nOS90SD=J*|Z(@*byt$7KdAu{yB@pQ{Gi9?$c%a*?73qZ*< z{k=Z`MCOd8luKa$9OtOZbHBv?N7eu2w&ujSHR7kDz@e7%UU|Np_CNh`ANxJa_KH?o zv6*~6j+e*Ih0}Yww5>hR(Y)Acqv6Z; zio^F0^}zzWdrsJoh7Yl~}ctaQ(|Z^`m93y!7jS6x*krq|zQ; zOh?DcO&ABDqqU6`ClV864kLkM$(&1E%0S?cd-tz4U?8iRG&_5+72?>8SIFD2J=>toy zyt&JHbC+m2mN>LUfJCy%_1h9hRtreAwv6U}$$d+b#}{h}GNJ39a4r8<59g8xwx*8mx$<=GB2VX%E6*}NXUbWrQ|tfI59TDeRAHl&ba#{slujLSo9ON*2kx$dKbBb6e&O_9*a)P_ z5<6Zdq+Hx{|L<4y;a`Sx1;8_HO2U2$Zp;3|)6oB(SOHA4SsS!l~tdt8dzfdoqOL zY=X)~im&-k_^d6pZ3h|B?TPKHRc7}1MqGHYz9F8=NSo_bTcY(W@dN9zxAl^ZgdnwJ zFME-Pwj>WeCTpS=9_8gfV`IZeb`gGj*0py(U_%=?*m1{HmAb$FXLz%gO<%gh9ZAkz z)@!xw&6Y~yCDt7zyNpWmR+H^*$&DxJ$7{`t6Q?$&UU-~;99c(|9jCV^S8Ph{d@i|a z3$4a?5hou@oL|w2xIUe^T-+oRjLcl~y7a!Y&K1_;jwg4&qt|FOD>#(z%v5qDD?lsT*dbNM7wgEk z-kC9SDL^Vob-f5mm-!A&f^D@~GOFp_&p2PMxEg>Wt(Z8{nmV*HaV{$=&KKyp)8uG@ zi_MhWwp2!6;(3`nA* zO*e1L5Xd;-9Xu_=Jv5${L5pPGMyMMcyd;ob+xdkN)l>6*VuFV7_){}`lq3&~Bug)Y1pZ(zB z{4*WR6f3SxoVC^Nwr<#xtZji#Lao@H)ogos4T1NyLni~R_y-)?V%`p diff --git a/rhodecode/i18n/zh_TW/LC_MESSAGES/rhodecode.po b/rhodecode/i18n/zh_TW/LC_MESSAGES/rhodecode.po --- a/rhodecode/i18n/zh_TW/LC_MESSAGES/rhodecode.po +++ b/rhodecode/i18n/zh_TW/LC_MESSAGES/rhodecode.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: RhodeCode 1.2.0\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2012-12-14 04:19+0100\n" +"POT-Creation-Date: 2013-04-05 10:17-0700\n" "PO-Revision-Date: 2012-05-09 22:23+0800\n" "Last-Translator: Nansen \n" "Language-Team: zh_TW \n" @@ -23,11 +23,11 @@ msgid "All Branches" msgstr "分支" #: rhodecode/controllers/changeset.py:83 -msgid "show white space" +msgid "Show white space" msgstr "" #: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97 -msgid "ignore white space" +msgid "Ignore white space" msgstr "" #: rhodecode/controllers/changeset.py:163 @@ -35,20 +35,20 @@ msgstr "" msgid "%s line context" msgstr "文件內容" -#: rhodecode/controllers/changeset.py:314 -#: rhodecode/controllers/pullrequests.py:417 +#: rhodecode/controllers/changeset.py:329 +#: rhodecode/controllers/pullrequests.py:438 #, fuzzy, python-format msgid "Status change -> %s" msgstr "最後修改" -#: rhodecode/controllers/changeset.py:345 +#: rhodecode/controllers/changeset.py:360 msgid "" -"Changing status on a changeset associated witha closed pull request is " +"Changing status on a changeset associated with a closed pull request is " "not allowed" msgstr "" -#: rhodecode/controllers/compare.py:75 -#: rhodecode/controllers/pullrequests.py:121 +#: rhodecode/controllers/compare.py:74 +#: rhodecode/controllers/pullrequests.py:167 #: rhodecode/controllers/shortlog.py:100 #, fuzzy msgid "There are no changesets yet" @@ -91,164 +91,198 @@ msgid "%s %s feed" msgstr "" #: rhodecode/controllers/feed.py:86 -#: rhodecode/templates/changeset/changeset.html:137 -#: rhodecode/templates/changeset/changeset.html:149 -#: 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 +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 msgid "Changeset was too big and was cut off..." msgstr "" -#: rhodecode/controllers/feed.py:92 -#, fuzzy -msgid "commited on" +#: rhodecode/controllers/feed.py:91 +#, fuzzy, python-format +msgid "%s committed on %s" msgstr "遞交" -#: rhodecode/controllers/files.py:86 -#, fuzzy -msgid "click here to add new file" +#: rhodecode/controllers/files.py:88 +#, fuzzy +msgid "Click here to add new file" msgstr "新增使用者" -#: rhodecode/controllers/files.py:87 +#: rhodecode/controllers/files.py:89 #, fuzzy, python-format msgid "There are no files yet %s" msgstr "尚未有任何檔案" -#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325 +#: rhodecode/controllers/files.py:267 rhodecode/controllers/files.py:335 #, python-format msgid "This repository is has been locked by %s on %s" msgstr "" -#: rhodecode/controllers/files.py:292 -#, python-format -msgid "Edited %s via RhodeCode" +#: rhodecode/controllers/files.py:279 +msgid "You can only edit files with revision being a valid branch " +msgstr "" + +#: rhodecode/controllers/files.py:293 +#, fuzzy, python-format +msgid "Edited file %s via RhodeCode" msgstr "使用 RhodeCode 編輯 %s" -#: rhodecode/controllers/files.py:297 +#: rhodecode/controllers/files.py:309 msgid "No changes" msgstr "沒有修改" -#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372 +#: rhodecode/controllers/files.py:318 rhodecode/controllers/files.py:388 #, python-format msgid "Successfully committed to %s" msgstr "成功遞交至 %s" -#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378 +#: rhodecode/controllers/files.py:323 rhodecode/controllers/files.py:394 msgid "Error occurred during commit" msgstr "" -#: rhodecode/controllers/files.py:344 -#, fuzzy, python-format -msgid "Added %s via RhodeCode" +#: rhodecode/controllers/files.py:347 +#, fuzzy +msgid "Added file via RhodeCode" msgstr "使用 RhodeCode 編輯 %s" -#: rhodecode/controllers/files.py:358 +#: rhodecode/controllers/files.py:364 #, fuzzy msgid "No content" msgstr "文件內容" -#: rhodecode/controllers/files.py:362 +#: rhodecode/controllers/files.py:368 #, fuzzy msgid "No filename" msgstr "檔案名稱" -#: rhodecode/controllers/files.py:404 -msgid "downloads disabled" +#: rhodecode/controllers/files.py:372 +msgid "Location must be relative path and must not contain .. in path" +msgstr "" + +#: rhodecode/controllers/files.py:420 +#, fuzzy +msgid "Downloads disabled" msgstr "下載已關閉" -#: rhodecode/controllers/files.py:415 +#: rhodecode/controllers/files.py:431 #, python-format msgid "Unknown revision %s" msgstr "未知修訂 %s" -#: rhodecode/controllers/files.py:417 +#: rhodecode/controllers/files.py:433 msgid "Empty repository" msgstr "空的版本庫" -#: rhodecode/controllers/files.py:419 +#: rhodecode/controllers/files.py:435 msgid "Unknown archive type" msgstr "未知的存檔類型" -#: rhodecode/controllers/files.py:564 -#: rhodecode/templates/changeset/changeset_range.html:13 -#: rhodecode/templates/changeset/changeset_range.html:31 +#: rhodecode/controllers/files.py:617 +#: rhodecode/templates/changeset/changeset_range.html:9 msgid "Changesets" msgstr "變更" -#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:74 -#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550 +#: rhodecode/controllers/files.py:618 rhodecode/controllers/pullrequests.py:131 +#: rhodecode/controllers/summary.py:247 rhodecode/model/scm.py:606 +#: rhodecode/templates/switch_to_list.html:3 +#: rhodecode/templates/branches/branches.html:10 msgid "Branches" msgstr "分支" -#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:78 -#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561 +#: rhodecode/controllers/files.py:619 rhodecode/controllers/pullrequests.py:132 +#: rhodecode/controllers/summary.py:248 rhodecode/model/scm.py:617 +#: rhodecode/templates/switch_to_list.html:15 +#: rhodecode/templates/shortlog/shortlog_data.html:10 +#: rhodecode/templates/tags/tags.html:10 msgid "Tags" msgstr "標籤" -#: rhodecode/controllers/forks.py:158 -#, python-format -msgid "forked %s repository as %s" +#: rhodecode/controllers/forks.py:175 +#, fuzzy, python-format +msgid "Forked repository %s as %s" msgstr "forked %s 版本庫為 %s" -#: rhodecode/controllers/forks.py:172 +#: rhodecode/controllers/forks.py:189 #, python-format msgid "An error occurred during repository forking %s" msgstr "" -#: rhodecode/controllers/journal.py:218 rhodecode/controllers/journal.py:261 +#: rhodecode/controllers/journal.py:275 rhodecode/controllers/journal.py:318 #, fuzzy msgid "public journal" msgstr "公開日誌" -#: rhodecode/controllers/journal.py:222 rhodecode/controllers/journal.py:265 -#: rhodecode/templates/base/base.html:232 +#: rhodecode/controllers/journal.py:279 rhodecode/controllers/journal.py:322 #: rhodecode/templates/journal/journal.html:12 msgid "journal" msgstr "日誌" -#: rhodecode/controllers/login.py:143 -msgid "You have successfully registered into rhodecode" +#: rhodecode/controllers/login.py:138 +#, fuzzy +msgid "You have successfully registered into RhodeCode" msgstr "您已經成功註冊rhodecode" -#: rhodecode/controllers/login.py:164 +#: rhodecode/controllers/login.py:159 msgid "Your password reset link was sent" msgstr "您的密碼重設連結已寄出" -#: rhodecode/controllers/login.py:184 +#: rhodecode/controllers/login.py:179 msgid "" "Your password reset was successful, new password has been sent to your " "email" msgstr "您的密碼重設動作已完成,新的密碼已寄至您的信箱" -#: rhodecode/controllers/pullrequests.py:76 rhodecode/model/scm.py:556 +#: rhodecode/controllers/pullrequests.py:118 +#: rhodecode/templates/changeset/changeset.html:10 +#: rhodecode/templates/email_templates/changeset_comment.html:15 +msgid "Changeset" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:128 +msgid "Special" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:129 +#, fuzzy +msgid "Peer branches" +msgstr "分支" + +#: rhodecode/controllers/pullrequests.py:130 rhodecode/model/scm.py:612 +#: rhodecode/templates/switch_to_list.html:28 +#: rhodecode/templates/bookmarks/bookmarks.html:10 msgid "Bookmarks" msgstr "" -#: rhodecode/controllers/pullrequests.py:190 +#: rhodecode/controllers/pullrequests.py:228 msgid "Pull request requires a title with min. 3 chars" msgstr "" -#: rhodecode/controllers/pullrequests.py:192 -#, fuzzy -msgid "error during creation of pull request" +#: rhodecode/controllers/pullrequests.py:230 +#, fuzzy +msgid "Error creating pull request" msgstr "建立使用者 %s" -#: rhodecode/controllers/pullrequests.py:224 +#: rhodecode/controllers/pullrequests.py:251 #, fuzzy msgid "Successfully opened new pull request" msgstr "成功刪除使用者" -#: rhodecode/controllers/pullrequests.py:227 +#: rhodecode/controllers/pullrequests.py:254 msgid "Error occurred during sending pull request" msgstr "" -#: rhodecode/controllers/pullrequests.py:260 +#: rhodecode/controllers/pullrequests.py:287 #, fuzzy msgid "Successfully deleted pull request" msgstr "成功刪除使用者" -#: rhodecode/controllers/pullrequests.py:452 +#: rhodecode/controllers/pullrequests.py:441 +msgid "Closing with" +msgstr "" + +#: rhodecode/controllers/pullrequests.py:478 msgid "Closing pull request on other statuses than rejected or approved forbidden" msgstr "" @@ -264,57 +298,12 @@ msgstr "沒有任何索引可以搜尋。請執行 whoosh 建立索引" msgid "An error occurred during this search operation" msgstr "" -#: rhodecode/controllers/settings.py:119 -#: rhodecode/controllers/admin/repos.py:272 -#, python-format -msgid "Repository %s updated successfully" -msgstr "版本庫 %s 更新完成" - -#: rhodecode/controllers/settings.py:137 -#: rhodecode/controllers/admin/repos.py:290 -#, python-format -msgid "error occurred during update of repository %s" -msgstr "" - -#: rhodecode/controllers/settings.py:162 -#: rhodecode/controllers/admin/repos.py:315 -#, python-format -msgid "deleted repository %s" -msgstr "刪除版本庫 %s" - -#: rhodecode/controllers/settings.py:166 -#: rhodecode/controllers/admin/repos.py:325 -#: rhodecode/controllers/admin/repos.py:331 -#, python-format -msgid "An error occurred during deletion of %s" -msgstr "" - -#: rhodecode/controllers/settings.py:185 -#, fuzzy -msgid "unlocked" -msgstr "解鎖" - -#: rhodecode/controllers/settings.py:188 -#, fuzzy -msgid "locked" -msgstr "解鎖" - -#: rhodecode/controllers/settings.py:190 -#, fuzzy, python-format -msgid "Repository has been %s" -msgstr "forked %s 版本庫為 %s" - -#: rhodecode/controllers/settings.py:194 -#: rhodecode/controllers/admin/repos.py:423 -msgid "An error occurred during unlocking" -msgstr "" - -#: rhodecode/controllers/summary.py:140 +#: rhodecode/controllers/summary.py:141 msgid "No data loaded yet" msgstr "" -#: rhodecode/controllers/summary.py:144 -#: rhodecode/templates/summary/summary.html:157 +#: rhodecode/controllers/summary.py:147 +#: rhodecode/templates/summary/summary.html:149 msgid "Statistics are disabled for this repository" msgstr "這個版本庫的統計功能已停用" @@ -324,7 +313,7 @@ msgid "Default settings updated successf msgstr "LDAP設定更新完成" #: rhodecode/controllers/admin/defaults.py:110 -msgid "error occurred during update of defaults" +msgid "Error occurred during update of defaults" msgstr "" #: rhodecode/controllers/admin/ldap_settings.py:50 @@ -372,7 +361,7 @@ msgid "START_TLS on LDAP connection" msgstr "" #: rhodecode/controllers/admin/ldap_settings.py:126 -msgid "Ldap settings updated successfully" +msgid "LDAP settings updated successfully" msgstr "LDAP設定更新完成" #: rhodecode/controllers/admin/ldap_settings.py:130 @@ -380,545 +369,645 @@ msgid "Unable to activate ldap. The \"py msgstr "無法啟用LDAP。找不到python-ldap函式庫" #: rhodecode/controllers/admin/ldap_settings.py:147 -msgid "error occurred during update of ldap settings" -msgstr "" - -#: rhodecode/controllers/admin/permissions.py:59 -#: rhodecode/controllers/admin/permissions.py:63 -msgid "None" -msgstr "無" +msgid "Error occurred during update of ldap settings" +msgstr "" #: rhodecode/controllers/admin/permissions.py:60 #: rhodecode/controllers/admin/permissions.py:64 -msgid "Read" -msgstr "讀" +msgid "None" +msgstr "無" #: rhodecode/controllers/admin/permissions.py:61 #: rhodecode/controllers/admin/permissions.py:65 -msgid "Write" -msgstr "寫" +msgid "Read" +msgstr "讀" #: rhodecode/controllers/admin/permissions.py:62 #: rhodecode/controllers/admin/permissions.py:66 +msgid "Write" +msgstr "寫" + +#: rhodecode/controllers/admin/permissions.py:63 +#: rhodecode/controllers/admin/permissions.py:67 #: 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/repo_add.html:10 +#: rhodecode/templates/admin/repos/repo_add.html:14 #: 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/repos_groups/repos_groups_add.html:9 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:9 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:13 #: 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/user_edit.html:133 #: rhodecode/templates/admin/users/users.html:9 +#: rhodecode/templates/admin/users/users.html:85 #: 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 +#: rhodecode/templates/base/base.html:292 +#: rhodecode/templates/base/base.html:293 +#: rhodecode/templates/base/base.html:299 +#: rhodecode/templates/base/base.html:300 msgid "Admin" msgstr "管理" -#: rhodecode/controllers/admin/permissions.py:69 -msgid "disabled" -msgstr "停用" - -#: rhodecode/controllers/admin/permissions.py:71 -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 +#: rhodecode/controllers/admin/permissions.py:70 +#: rhodecode/controllers/admin/permissions.py:76 +#: rhodecode/controllers/admin/permissions.py:79 msgid "Disabled" msgstr "停用" -#: rhodecode/controllers/admin/permissions.py:76 -#: rhodecode/controllers/admin/permissions.py:79 +#: rhodecode/controllers/admin/permissions.py:72 +#, fuzzy +msgid "Allowed with manual account activation" +msgstr "允許手動啟用帳號" + +#: rhodecode/controllers/admin/permissions.py:74 +#, fuzzy +msgid "Allowed with automatic account activation" +msgstr "允許自動啟用帳號" + +#: rhodecode/controllers/admin/permissions.py:77 +#: rhodecode/controllers/admin/permissions.py:80 msgid "Enabled" msgstr "啟用" -#: rhodecode/controllers/admin/permissions.py:122 +#: rhodecode/controllers/admin/permissions.py:128 msgid "Default permissions updated successfully" msgstr "預設權限更新完成" -#: rhodecode/controllers/admin/permissions.py:136 -msgid "error occurred during update of permissions" -msgstr "" - -#: rhodecode/controllers/admin/repos.py:121 +#: rhodecode/controllers/admin/permissions.py:142 +msgid "Error occurred during update of permissions" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:127 msgid "--REMOVE FORK--" msgstr "" -#: rhodecode/controllers/admin/repos.py:190 -#, python-format -msgid "created repository %s from %s" +#: rhodecode/controllers/admin/repos.py:168 +#, fuzzy, python-format +msgid "Created repository %s from %s" msgstr "建立版本庫 %s 到 %s" -#: rhodecode/controllers/admin/repos.py:194 +#: rhodecode/controllers/admin/repos.py:174 +#, fuzzy, python-format +msgid "Created repository %s" +msgstr "建立版本庫 %s" + +#: rhodecode/controllers/admin/repos.py:197 +#, fuzzy, python-format +msgid "Error creating repository %s" +msgstr "建立版本庫 %s" + +#: rhodecode/controllers/admin/repos.py:266 #, python-format -msgid "created repository %s" +msgid "Repository %s updated successfully" +msgstr "版本庫 %s 更新完成" + +#: rhodecode/controllers/admin/repos.py:284 +#, fuzzy, python-format +msgid "Error occurred during update of repository %s" msgstr "建立版本庫 %s" -#: rhodecode/controllers/admin/repos.py:225 +#: rhodecode/controllers/admin/repos.py:311 +#: rhodecode/controllers/api/api.py:877 #, python-format -msgid "error occurred during creation of repository %s" -msgstr "" - -#: rhodecode/controllers/admin/repos.py:320 +msgid "Detached %s forks" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:314 +#: rhodecode/controllers/api/api.py:879 +#, fuzzy, python-format +msgid "Deleted %s forks" +msgstr "刪除版本庫 %s" + +#: rhodecode/controllers/admin/repos.py:319 +#, fuzzy, python-format +msgid "Deleted repository %s" +msgstr "刪除版本庫 %s" + +#: rhodecode/controllers/admin/repos.py:322 #, python-format msgid "Cannot delete %s it still contains attached forks" msgstr "" -#: rhodecode/controllers/admin/repos.py:349 +#: rhodecode/controllers/admin/repos.py:327 +#, python-format +msgid "An error occurred during deletion of %s" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:365 +#, fuzzy +msgid "Repository permissions updated" +msgstr "版本庫建立" + +#: rhodecode/controllers/admin/repos.py:384 msgid "An error occurred during deletion of repository user" msgstr "" -#: rhodecode/controllers/admin/repos.py:368 -msgid "An error occurred during deletion of repository users groups" -msgstr "" - -#: rhodecode/controllers/admin/repos.py:386 -msgid "An error occurred during deletion of repository stats" -msgstr "" - #: rhodecode/controllers/admin/repos.py:403 +msgid "An error occurred during deletion of repository user groups" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:421 +msgid "An error occurred during deletion of repository stats" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:438 msgid "An error occurred during cache invalidation" msgstr "" -#: rhodecode/controllers/admin/repos.py:443 +#: rhodecode/controllers/admin/repos.py:458 +#: rhodecode/controllers/admin/repos.py:485 +msgid "An error occurred during unlocking" +msgstr "" + +#: rhodecode/controllers/admin/repos.py:476 +#, fuzzy +msgid "Unlocked" +msgstr "解鎖" + +#: rhodecode/controllers/admin/repos.py:479 +#, fuzzy +msgid "Locked" +msgstr "解鎖" + +#: rhodecode/controllers/admin/repos.py:481 +#, fuzzy, python-format +msgid "Repository has been %s" +msgstr "forked %s 版本庫為 %s" + +#: rhodecode/controllers/admin/repos.py:505 msgid "Updated repository visibility in public journal" msgstr "" -#: rhodecode/controllers/admin/repos.py:447 +#: rhodecode/controllers/admin/repos.py:509 msgid "An error occurred during setting this repository in public journal" msgstr "" -#: rhodecode/controllers/admin/repos.py:452 rhodecode/model/validators.py:300 +#: rhodecode/controllers/admin/repos.py:514 rhodecode/model/validators.py:302 msgid "Token mismatch" msgstr "" -#: rhodecode/controllers/admin/repos.py:465 +#: rhodecode/controllers/admin/repos.py:527 msgid "Pulled from remote location" msgstr "" -#: rhodecode/controllers/admin/repos.py:467 +#: rhodecode/controllers/admin/repos.py:529 msgid "An error occurred during pull from remote location" msgstr "" -#: rhodecode/controllers/admin/repos.py:483 +#: rhodecode/controllers/admin/repos.py:545 msgid "Nothing" msgstr "" -#: rhodecode/controllers/admin/repos.py:485 +#: rhodecode/controllers/admin/repos.py:547 #, fuzzy, python-format msgid "Marked repo %s as fork of %s" msgstr "建立版本庫 %s 到 %s" -#: rhodecode/controllers/admin/repos.py:489 +#: rhodecode/controllers/admin/repos.py:551 msgid "An error occurred during this operation" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:120 -#, python-format -msgid "created repos group %s" +#: rhodecode/controllers/admin/repos.py:590 +#, fuzzy +msgid "An error occurred during creation of field" +msgstr "建立使用者 %s" + +#: rhodecode/controllers/admin/repos.py:604 +msgid "An error occurred during removal of field" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:145 +#, fuzzy, python-format +msgid "Created repository group %s" msgstr "建立版本庫群組 %s" -#: rhodecode/controllers/admin/repos_groups.py:133 +#: rhodecode/controllers/admin/repos_groups.py:157 +#, fuzzy, python-format +msgid "Error occurred during creation of repository group %s" +msgstr "建立使用者 %s" + +#: rhodecode/controllers/admin/repos_groups.py:214 +#: rhodecode/controllers/admin/repos_groups.py:286 +msgid "Cannot revoke permission for yourself as admin" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:220 +#, fuzzy, python-format +msgid "Updated repository group %s" +msgstr "更新版本庫群組 %s" + +#: rhodecode/controllers/admin/repos_groups.py:235 #, python-format -msgid "error occurred during creation of repos group %s" -msgstr "" - -#: rhodecode/controllers/admin/repos_groups.py:167 -#, python-format -msgid "updated repos group %s" -msgstr "更新版本庫群組 %s" - -#: 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:198 +msgid "Error occurred during update of repository group %s" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:253 #, python-format msgid "This group contains %s repositores and cannot be deleted" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:206 -#, python-format -msgid "removed repos group %s" -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:217 -#: rhodecode/controllers/admin/repos_groups.py:222 +#: rhodecode/controllers/admin/repos_groups.py:260 #, python-format -msgid "error occurred during deletion of repos group %s" -msgstr "" - -#: rhodecode/controllers/admin/repos_groups.py:243 +msgid "This group contains %s subgroups and cannot be deleted" +msgstr "" + +#: rhodecode/controllers/admin/repos_groups.py:266 +#, fuzzy, python-format +msgid "Removed repository group %s" +msgstr "移除版本庫群組 %s" + +#: rhodecode/controllers/admin/repos_groups.py:271 +#, fuzzy, python-format +msgid "Error occurred during deletion of repos group %s" +msgstr "建立使用者 %s" + +#: rhodecode/controllers/admin/repos_groups.py:297 msgid "An error occurred during deletion of group user" msgstr "" -#: rhodecode/controllers/admin/repos_groups.py:264 -msgid "An error occurred during deletion of group users groups" -msgstr "" - -#: rhodecode/controllers/admin/settings.py:123 +#: rhodecode/controllers/admin/repos_groups.py:318 +#, fuzzy +msgid "An error occurred during deletion of group user groups" +msgstr "建立使用者 %s" + +#: rhodecode/controllers/admin/settings.py:126 #, python-format -msgid "Repositories successfully rescanned added: %s,removed: %s" -msgstr "" - -#: rhodecode/controllers/admin/settings.py:131 +msgid "Repositories successfully rescanned added: %s ; removed: %s" +msgstr "" + +#: rhodecode/controllers/admin/settings.py:135 msgid "Whoosh reindex task scheduled" msgstr "Whoosh 重新索引工作排程" -#: rhodecode/controllers/admin/settings.py:162 +#: rhodecode/controllers/admin/settings.py:166 msgid "Updated application settings" msgstr "更新應用設定" -#: 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:207 +#: rhodecode/controllers/admin/settings.py:170 +#: rhodecode/controllers/admin/settings.py:301 +#, fuzzy +msgid "Error occurred during updating application settings" +msgstr "更新應用設定" + +#: rhodecode/controllers/admin/settings.py:216 #, fuzzy msgid "Updated visualisation settings" msgstr "更新應用設定" -#: rhodecode/controllers/admin/settings.py:212 -msgid "error occurred during updating visualisation settings" -msgstr "" - -#: rhodecode/controllers/admin/settings.py:295 +#: rhodecode/controllers/admin/settings.py:221 +#, fuzzy +msgid "Error occurred during updating visualisation settings" +msgstr "更新應用設定" + +#: rhodecode/controllers/admin/settings.py:297 #, fuzzy msgid "Updated VCS settings" msgstr "更新 mercurial 設定" -#: rhodecode/controllers/admin/settings.py:309 +#: rhodecode/controllers/admin/settings.py:311 msgid "Added new hook" msgstr "新增hook" -#: rhodecode/controllers/admin/settings.py:321 +#: rhodecode/controllers/admin/settings.py:323 msgid "Updated hooks" msgstr "更新hook" -#: rhodecode/controllers/admin/settings.py:325 -msgid "error occurred during hook creation" -msgstr "" - -#: rhodecode/controllers/admin/settings.py:344 +#: rhodecode/controllers/admin/settings.py:327 +msgid "Error occurred during hook creation" +msgstr "" + +#: rhodecode/controllers/admin/settings.py:346 msgid "Email task created" msgstr "" -#: rhodecode/controllers/admin/settings.py:399 +#: rhodecode/controllers/admin/settings.py:410 msgid "You can't edit this user since it's crucial for entire application" msgstr "" -#: rhodecode/controllers/admin/settings.py:430 +#: rhodecode/controllers/admin/settings.py:452 msgid "Your account was updated successfully" msgstr "您的帳號已更新完成" -#: rhodecode/controllers/admin/settings.py:445 -#: rhodecode/controllers/admin/users.py:196 +#: rhodecode/controllers/admin/settings.py:467 +#: rhodecode/controllers/admin/users.py:198 #, python-format -msgid "error occurred during update of user %s" +msgid "Error occurred during update of user %s" msgstr "" #: rhodecode/controllers/admin/users.py:130 -#, python-format -msgid "created user %s" +#, fuzzy, python-format +msgid "Created user %s" msgstr "建立使用者 %s" #: rhodecode/controllers/admin/users.py:142 -#, python-format -msgid "error occurred during creation of user %s" -msgstr "" +#, fuzzy, python-format +msgid "Error occurred during creation of user %s" +msgstr "建立使用者 %s" #: rhodecode/controllers/admin/users.py:176 msgid "User updated successfully" msgstr "使用者更新完成" -#: rhodecode/controllers/admin/users.py:212 -msgid "successfully deleted user" +#: rhodecode/controllers/admin/users.py:214 +#, fuzzy +msgid "Successfully deleted user" msgstr "成功刪除使用者" -#: rhodecode/controllers/admin/users.py:217 +#: rhodecode/controllers/admin/users.py:219 msgid "An error occurred during deletion of user" msgstr "" -#: rhodecode/controllers/admin/users.py:231 +#: rhodecode/controllers/admin/users.py:233 msgid "You can't edit this user" msgstr "您無法編輯這位使用者" -#: rhodecode/controllers/admin/users.py:272 +#: rhodecode/controllers/admin/users.py:276 msgid "Granted 'repository create' permission to user" msgstr "" -#: rhodecode/controllers/admin/users.py:277 +#: rhodecode/controllers/admin/users.py:281 msgid "Revoked 'repository create' permission to user" msgstr "" -#: rhodecode/controllers/admin/users.py:283 +#: rhodecode/controllers/admin/users.py:287 #, fuzzy msgid "Granted 'repository fork' permission to user" msgstr "版本庫權限" -#: rhodecode/controllers/admin/users.py:288 +#: rhodecode/controllers/admin/users.py:292 #, fuzzy msgid "Revoked 'repository fork' permission to user" msgstr "版本庫權限" -#: rhodecode/controllers/admin/users.py:294 -#: rhodecode/controllers/admin/users_groups.py:279 +#: rhodecode/controllers/admin/users.py:298 +#: rhodecode/controllers/admin/users_groups.py:281 msgid "An error occurred during permissions saving" msgstr "" -#: rhodecode/controllers/admin/users.py:309 +#: rhodecode/controllers/admin/users.py:312 #, python-format msgid "Added email %s to user" msgstr "" -#: rhodecode/controllers/admin/users.py:315 +#: rhodecode/controllers/admin/users.py:318 msgid "An error occurred during email saving" msgstr "" -#: rhodecode/controllers/admin/users.py:325 +#: rhodecode/controllers/admin/users.py:328 #, fuzzy msgid "Removed email from user" msgstr "移除版本庫群組 %s" -#: rhodecode/controllers/admin/users_groups.py:86 +#: rhodecode/controllers/admin/users.py:341 #, python-format -msgid "created users group %s" +msgid "Added ip %s to user" +msgstr "" + +#: rhodecode/controllers/admin/users.py:347 +msgid "An error occurred during ip saving" +msgstr "" + +#: rhodecode/controllers/admin/users.py:359 +#, fuzzy +msgid "Removed ip from user" +msgstr "移除版本庫群組 %s" + +#: rhodecode/controllers/admin/users_groups.py:86 +#, fuzzy, python-format +msgid "Created user group %s" msgstr "建立使用者群組 %s" #: 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:164 -#, python-format -msgid "updated users group %s" +#, fuzzy, python-format +msgid "Error occurred during creation of user group %s" +msgstr "建立使用者 %s" + +#: rhodecode/controllers/admin/users_groups.py:166 +#, fuzzy, python-format +msgid "Updated user group %s" msgstr "更新使用者群組 %s" -#: rhodecode/controllers/admin/users_groups.py:186 +#: rhodecode/controllers/admin/users_groups.py:188 #, python-format -msgid "error occurred during update of users group %s" -msgstr "" - -#: rhodecode/controllers/admin/users_groups.py:203 -msgid "successfully deleted users group" +msgid "Error occurred during update of user group %s" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:205 +#, fuzzy +msgid "Successfully deleted user group" msgstr "成功移除使用者群組" -#: rhodecode/controllers/admin/users_groups.py:208 -msgid "An error occurred during deletion of users group" -msgstr "" - -#: rhodecode/controllers/admin/users_groups.py:257 -msgid "Granted 'repository create' permission to users group" -msgstr "" - -#: rhodecode/controllers/admin/users_groups.py:262 -msgid "Revoked 'repository create' permission to users group" -msgstr "" - -#: rhodecode/controllers/admin/users_groups.py:268 -msgid "Granted 'repository fork' permission to users group" -msgstr "" - -#: rhodecode/controllers/admin/users_groups.py:273 -msgid "Revoked 'repository fork' permission to users group" -msgstr "" - -#: rhodecode/lib/auth.py:499 +#: rhodecode/controllers/admin/users_groups.py:210 +msgid "An error occurred during deletion of user group" +msgstr "" + +#: rhodecode/controllers/admin/users_groups.py:259 +#, fuzzy +msgid "Granted 'repository create' permission to user group" +msgstr "版本庫權限" + +#: rhodecode/controllers/admin/users_groups.py:264 +#, fuzzy +msgid "Revoked 'repository create' permission to user group" +msgstr "版本庫權限" + +#: rhodecode/controllers/admin/users_groups.py:270 +#, fuzzy +msgid "Granted 'repository fork' permission to user group" +msgstr "版本庫權限" + +#: rhodecode/controllers/admin/users_groups.py:275 +#, fuzzy +msgid "Revoked 'repository fork' permission to user group" +msgstr "版本庫權限" + +#: rhodecode/lib/auth.py:530 +#, fuzzy, python-format +msgid "IP %s not allowed" +msgstr "追蹤者" + +#: rhodecode/lib/auth.py:579 msgid "You need to be a registered user to perform this action" msgstr "您必須是註冊使用者才能執行這個動作" -#: rhodecode/lib/auth.py:540 +#: rhodecode/lib/auth.py:620 msgid "You need to be a signed in to view this page" msgstr "您必須登入後才能瀏覽這個頁面" -#: rhodecode/lib/diffs.py:74 -msgid "binary file" +#: rhodecode/lib/diffs.py:66 +#, fuzzy +msgid "Binary file" msgstr "二進位檔" -#: rhodecode/lib/diffs.py:90 +#: rhodecode/lib/diffs.py:82 msgid "Changeset was too big and was cut off, use diff menu to display this diff" msgstr "" -#: rhodecode/lib/diffs.py:100 +#: rhodecode/lib/diffs.py:92 msgid "No changes detected" msgstr "尚未有任何變更" -#: rhodecode/lib/helpers.py:374 +#: rhodecode/lib/helpers.py:394 #, python-format msgid "%a, %d %b %Y %H:%M:%S" msgstr "" -#: rhodecode/lib/helpers.py:486 +#: rhodecode/lib/helpers.py:506 msgid "True" msgstr "真" -#: rhodecode/lib/helpers.py:490 +#: rhodecode/lib/helpers.py:509 msgid "False" msgstr "假" -#: rhodecode/lib/helpers.py:530 +#: rhodecode/lib/helpers.py:547 #, fuzzy, python-format msgid "Deleted branch: %s" msgstr "刪除版本庫 %s" -#: rhodecode/lib/helpers.py:533 +#: rhodecode/lib/helpers.py:550 #, fuzzy, python-format msgid "Created tag: %s" msgstr "建立使用者 %s" -#: rhodecode/lib/helpers.py:546 +#: rhodecode/lib/helpers.py:563 #, fuzzy msgid "Changeset not found" msgstr "修改" -#: rhodecode/lib/helpers.py:589 +#: rhodecode/lib/helpers.py:615 #, python-format msgid "Show all combined changesets %s->%s" msgstr "" -#: rhodecode/lib/helpers.py:595 +#: rhodecode/lib/helpers.py:621 msgid "compare view" msgstr "" -#: rhodecode/lib/helpers.py:615 +#: rhodecode/lib/helpers.py:641 msgid "and" msgstr "和" -#: rhodecode/lib/helpers.py:616 +#: rhodecode/lib/helpers.py:642 #, python-format msgid "%s more" msgstr "" -#: rhodecode/lib/helpers.py:617 rhodecode/templates/changelog/changelog.html:51 +#: rhodecode/lib/helpers.py:643 rhodecode/templates/changelog/changelog.html:44 msgid "revisions" msgstr "修訂" -#: rhodecode/lib/helpers.py:641 +#: rhodecode/lib/helpers.py:667 #, fuzzy, python-format msgid "fork name %s" msgstr "fork 名稱" -#: rhodecode/lib/helpers.py:658 -#: rhodecode/templates/pullrequests/pullrequest_show.html:4 -#: rhodecode/templates/pullrequests/pullrequest_show.html:12 +#: rhodecode/lib/helpers.py:684 +#: rhodecode/templates/pullrequests/pullrequest_show.html:8 #, python-format msgid "Pull request #%s" msgstr "" -#: rhodecode/lib/helpers.py:664 +#: rhodecode/lib/helpers.py:690 msgid "[deleted] repository" msgstr "" -#: rhodecode/lib/helpers.py:666 rhodecode/lib/helpers.py:676 +#: rhodecode/lib/helpers.py:692 rhodecode/lib/helpers.py:702 msgid "[created] repository" msgstr "" -#: rhodecode/lib/helpers.py:668 +#: rhodecode/lib/helpers.py:694 #, fuzzy msgid "[created] repository as fork" msgstr "建立版本庫 %s" -#: rhodecode/lib/helpers.py:670 rhodecode/lib/helpers.py:678 +#: rhodecode/lib/helpers.py:696 rhodecode/lib/helpers.py:704 msgid "[forked] repository" msgstr "" -#: rhodecode/lib/helpers.py:672 rhodecode/lib/helpers.py:680 +#: rhodecode/lib/helpers.py:698 rhodecode/lib/helpers.py:706 msgid "[updated] repository" msgstr "" -#: rhodecode/lib/helpers.py:674 +#: rhodecode/lib/helpers.py:700 msgid "[delete] repository" msgstr "" -#: rhodecode/lib/helpers.py:682 +#: rhodecode/lib/helpers.py:708 #, fuzzy msgid "[created] user" msgstr "建立使用者 %s" -#: rhodecode/lib/helpers.py:684 +#: rhodecode/lib/helpers.py:710 #, fuzzy msgid "[updated] user" msgstr "更新使用者群組 %s" -#: rhodecode/lib/helpers.py:686 -#, fuzzy -msgid "[created] users group" +#: rhodecode/lib/helpers.py:712 +#, fuzzy +msgid "[created] user group" msgstr "建立使用者群組 %s" -#: rhodecode/lib/helpers.py:688 -#, fuzzy -msgid "[updated] users group" +#: rhodecode/lib/helpers.py:714 +#, fuzzy +msgid "[updated] user group" msgstr "更新使用者群組 %s" -#: rhodecode/lib/helpers.py:690 +#: rhodecode/lib/helpers.py:716 msgid "[commented] on revision in repository" msgstr "" -#: rhodecode/lib/helpers.py:692 +#: rhodecode/lib/helpers.py:718 #, fuzzy msgid "[commented] on pull request for" msgstr "建立使用者 %s" -#: rhodecode/lib/helpers.py:694 +#: rhodecode/lib/helpers.py:720 msgid "[closed] pull request for" msgstr "" -#: rhodecode/lib/helpers.py:696 +#: rhodecode/lib/helpers.py:722 msgid "[pushed] into" msgstr "" -#: rhodecode/lib/helpers.py:698 +#: rhodecode/lib/helpers.py:724 msgid "[committed via RhodeCode] into repository" msgstr "" -#: rhodecode/lib/helpers.py:700 +#: rhodecode/lib/helpers.py:726 msgid "[pulled from remote] into repository" msgstr "" -#: rhodecode/lib/helpers.py:702 +#: rhodecode/lib/helpers.py:728 msgid "[pulled] from" msgstr "" -#: rhodecode/lib/helpers.py:704 +#: rhodecode/lib/helpers.py:730 msgid "[started following] repository" msgstr "" -#: rhodecode/lib/helpers.py:706 +#: rhodecode/lib/helpers.py:732 msgid "[stopped following] repository" msgstr "" -#: rhodecode/lib/helpers.py:883 +#: rhodecode/lib/helpers.py:910 #, python-format msgid " and %s more" msgstr "" -#: rhodecode/lib/helpers.py:887 +#: rhodecode/lib/helpers.py:914 msgid "No Files" msgstr "沒有檔案" -#: rhodecode/lib/helpers.py:1163 +#: rhodecode/lib/helpers.py:1198 #, python-format msgid "" "%s repository is not mapped to db perhaps it was created or renamed from " @@ -926,175 +1015,239 @@ msgid "" "repositories" msgstr "" -#: rhodecode/lib/utils2.py:403 +#: rhodecode/lib/unionrepo.py:193 +#, fuzzy +msgid "cannot create new union repository" +msgstr "建立版本庫 %s" + +#: rhodecode/lib/utils2.py:411 #, fuzzy, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "年" -#: rhodecode/lib/utils2.py:404 +#: rhodecode/lib/utils2.py:412 #, fuzzy, python-format msgid "%d month" msgid_plural "%d months" msgstr[0] "月" -#: rhodecode/lib/utils2.py:405 +#: rhodecode/lib/utils2.py:413 #, fuzzy, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "日" -#: rhodecode/lib/utils2.py:406 +#: rhodecode/lib/utils2.py:414 #, fuzzy, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "時" -#: rhodecode/lib/utils2.py:407 +#: rhodecode/lib/utils2.py:415 #, fuzzy, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "分" -#: rhodecode/lib/utils2.py:408 +#: rhodecode/lib/utils2.py:416 #, fuzzy, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "秒" -#: rhodecode/lib/utils2.py:424 +#: rhodecode/lib/utils2.py:432 #, python-format msgid "in %s" msgstr "" -#: rhodecode/lib/utils2.py:426 -#, fuzzy, python-format -msgid "%s ago" -msgstr "之前" - -#: 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:434 +#, fuzzy, python-format +msgid "%s ago" +msgstr "之前" + +#: rhodecode/lib/utils2.py:436 +#, fuzzy, python-format +msgid "in %s and %s" +msgstr "下載 %s 為 %s" + +#: rhodecode/lib/utils2.py:439 +#, python-format +msgid "%s and %s ago" +msgstr "" + +#: rhodecode/lib/utils2.py:442 msgid "just now" msgstr "現在" -#: 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:1183 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1183 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1289 rhodecode/model/db.py:1388 #, fuzzy msgid "Repository no access" msgstr "個版本庫" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1184 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1184 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1290 rhodecode/model/db.py:1389 #, fuzzy msgid "Repository read access" msgstr "這個版本庫已經存在" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1185 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1185 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1291 rhodecode/model/db.py:1390 #, fuzzy msgid "Repository write access" msgstr "個版本庫" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1186 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1186 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1292 rhodecode/model/db.py:1391 #, fuzzy msgid "Repository admin access" msgstr "個版本庫" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1188 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1188 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1294 #, fuzzy msgid "Repositories Group no access" msgstr "版本庫群組" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1189 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1189 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1295 #, fuzzy msgid "Repositories Group read access" msgstr "版本庫群組" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1190 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1190 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1296 #, fuzzy msgid "Repositories Group write access" msgstr "版本庫群組" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1191 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1191 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1297 #, fuzzy msgid "Repositories Group admin access" msgstr "版本庫群組" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1193 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1193 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1299 rhodecode/model/db.py:1398 #, fuzzy msgid "RhodeCode Administrator" msgstr "使用者管理員" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1194 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1194 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1300 rhodecode/model/db.py:1399 #, fuzzy msgid "Repository creation disabled" msgstr "版本庫建立" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1195 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1195 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1301 rhodecode/model/db.py:1400 #, fuzzy msgid "Repository creation enabled" msgstr "版本庫建立" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1196 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1196 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1302 rhodecode/model/db.py:1401 #, fuzzy msgid "Repository forking disabled" msgstr "版本庫建立" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1197 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1197 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303 rhodecode/model/db.py:1402 #, fuzzy msgid "Repository forking enabled" msgstr "版本庫建立" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1198 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1198 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304 rhodecode/model/db.py:1403 #, fuzzy msgid "Register disabled" msgstr "停用" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1199 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1199 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305 rhodecode/model/db.py:1404 msgid "Register new user with RhodeCode with manual activation" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1202 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1202 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308 rhodecode/model/db.py:1407 msgid "Register new user with RhodeCode with auto activation" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1643 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1643 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1749 rhodecode/model/db.py:1838 msgid "Not Reviewed" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1644 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1644 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1750 rhodecode/model/db.py:1839 #, fuzzy msgid "Approved" msgstr "移除" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1645 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1645 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1751 rhodecode/model/db.py:1840 msgid "Rejected" msgstr "" -#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1646 +#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 +#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1646 +#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1752 rhodecode/model/db.py:1841 msgid "Under Review" msgstr "" -#: rhodecode/model/comment.py:110 +#: rhodecode/model/comment.py:75 #, python-format msgid "on line %s" msgstr "" -#: rhodecode/model/comment.py:173 +#: rhodecode/model/comment.py:219 msgid "[Mention]" msgstr "" +#: rhodecode/model/db.py:1252 +msgid "top level" +msgstr "" + +#: rhodecode/model/db.py:1393 +#, fuzzy +msgid "Repository group no access" +msgstr "版本庫群組" + +#: rhodecode/model/db.py:1394 +#, fuzzy +msgid "Repository group read access" +msgstr "版本庫群組" + +#: rhodecode/model/db.py:1395 +#, fuzzy +msgid "Repository group write access" +msgstr "版本庫群組" + +#: rhodecode/model/db.py:1396 +#, fuzzy +msgid "Repository group admin access" +msgstr "版本庫群組" + #: rhodecode/model/forms.py:43 msgid "Please enter a login" msgstr "請登入" @@ -1113,210 +1266,249 @@ msgstr "請輸入密碼" msgid "Enter %(min)i characters or more" msgstr "" -#: rhodecode/model/notification.py:220 -#, python-format -msgid "commented on commit at %(when)s" -msgstr "" - -#: rhodecode/model/notification.py:221 -#, fuzzy, python-format -msgid "sent message at %(when)s" -msgstr "遞交資訊" - -#: rhodecode/model/notification.py:222 -#, python-format -msgid "mentioned you at %(when)s" -msgstr "" - -#: rhodecode/model/notification.py:223 -#, fuzzy, python-format -msgid "registered in RhodeCode at %(when)s" -msgstr "您已經成功註冊rhodecode" - #: rhodecode/model/notification.py:224 #, fuzzy, python-format -msgid "opened new pull request at %(when)s" +msgid "%(user)s commented on changeset at %(when)s" msgstr "建立使用者 %s" #: rhodecode/model/notification.py:225 #, fuzzy, python-format -msgid "commented on pull request at %(when)s" -msgstr "建立使用者 %s" - -#: rhodecode/model/pull_request.py:90 +msgid "%(user)s sent message at %(when)s" +msgstr "遞交資訊" + +#: rhodecode/model/notification.py:226 #, python-format -msgid "%(user)s wants you to review pull request #%(pr_id)s" -msgstr "" - -#: rhodecode/model/scm.py:542 +msgid "%(user)s mentioned you at %(when)s" +msgstr "" + +#: rhodecode/model/notification.py:227 +#, fuzzy, python-format +msgid "%(user)s registered in RhodeCode at %(when)s" +msgstr "您已經成功註冊rhodecode" + +#: rhodecode/model/notification.py:228 +#, fuzzy, python-format +msgid "%(user)s opened new pull request at %(when)s" +msgstr "建立使用者 %s" + +#: rhodecode/model/notification.py:229 +#, fuzzy, python-format +msgid "%(user)s commented on pull request at %(when)s" +msgstr "建立使用者 %s" + +#: rhodecode/model/pull_request.py:104 +#, python-format +msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s" +msgstr "" + +#: rhodecode/model/scm.py:598 #, fuzzy msgid "latest tip" msgstr "最後登入" #: rhodecode/model/user.py:232 #, fuzzy -msgid "new user registration" +msgid "New user registration" msgstr "[RhodeCode] 新使用者註冊" #: rhodecode/model/user.py:257 rhodecode/model/user.py:281 -#: rhodecode/model/user.py:303 msgid "You can't Edit this user since it's crucial for entire application" msgstr "您無法編輯這個使用者,因為他是系統帳號" -#: rhodecode/model/user.py:327 +#: rhodecode/model/user.py:303 msgid "You can't remove this user since it's crucial for entire application" msgstr "您無法移除這個使用者,因為他是系統帳號" -#: rhodecode/model/user.py:333 +#: rhodecode/model/user.py:309 #, 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:36 rhodecode/model/validators.py:37 +#: rhodecode/model/user.py:334 +#, fuzzy +msgid "Password reset link" +msgstr "您的密碼重設連結已寄出" + +#: rhodecode/model/user.py:366 +#, fuzzy +msgid "Your new password" +msgstr "新密碼" + +#: rhodecode/model/user.py:367 +#, python-format +msgid "Your new RhodeCode password:%s" +msgstr "" + +#: rhodecode/model/validators.py:38 rhodecode/model/validators.py:39 msgid "Value cannot be an empty list" msgstr "" -#: rhodecode/model/validators.py:83 +#: rhodecode/model/validators.py:85 #, fuzzy, python-format msgid "Username \"%(username)s\" already exists" msgstr "使用者名稱已存在" -#: rhodecode/model/validators.py:85 +#: rhodecode/model/validators.py:87 #, python-format msgid "Username \"%(username)s\" is forbidden" msgstr "" -#: rhodecode/model/validators.py:87 +#: rhodecode/model/validators.py:89 msgid "" "Username may only contain alphanumeric characters underscores, periods or" " dashes and must begin with alphanumeric character" msgstr "使用者名稱只能使用字母數字、底線、小數點或破折號,且必須使用數字或字母開頭" -#: rhodecode/model/validators.py:115 +#: rhodecode/model/validators.py:117 #, fuzzy, python-format msgid "Username %(username)s is not valid" msgstr "使用者名稱或群組名稱無效" -#: rhodecode/model/validators.py:134 -#, fuzzy -msgid "Invalid users group name" +#: rhodecode/model/validators.py:136 +#, fuzzy +msgid "Invalid user group name" msgstr "無效的使用者名稱" -#: rhodecode/model/validators.py:135 -#, fuzzy, python-format -msgid "Users group \"%(usersgroup)s\" already exists" -msgstr "這個使用者群組已存在" - #: rhodecode/model/validators.py:137 +#, fuzzy, python-format +msgid "User group \"%(usergroup)s\" already exists" +msgstr "這個使用者群組已存在" + +#: rhodecode/model/validators.py:139 +#, fuzzy msgid "" -"users group name may only contain alphanumeric characters underscores, " +"user group name may only contain alphanumeric characters underscores, " "periods or dashes and must begin with alphanumeric character" msgstr "群組名稱只能使用字母數字、底線、小數點或破折號,且必須使用數字或字母開頭" -#: rhodecode/model/validators.py:175 +#: rhodecode/model/validators.py:177 msgid "Cannot assign this group as parent" msgstr "" -#: rhodecode/model/validators.py:176 +#: rhodecode/model/validators.py:178 #, fuzzy, python-format msgid "Group \"%(group_name)s\" already exists" msgstr "使用者名稱已存在" -#: rhodecode/model/validators.py:178 +#: rhodecode/model/validators.py:180 #, fuzzy, python-format msgid "Repository with name \"%(group_name)s\" already exists" msgstr "這個版本庫已經存在" -#: rhodecode/model/validators.py:236 +#: rhodecode/model/validators.py:238 #, fuzzy msgid "Invalid characters (non-ascii) in password" msgstr "無效的字元在密碼中" -#: rhodecode/model/validators.py:251 +#: rhodecode/model/validators.py:253 msgid "Passwords do not match" msgstr "密碼不相符" -#: rhodecode/model/validators.py:268 +#: rhodecode/model/validators.py:270 msgid "invalid password" msgstr "無效的密碼" -#: rhodecode/model/validators.py:269 +#: rhodecode/model/validators.py:271 msgid "invalid user name" msgstr "無效的使用者名稱" -#: rhodecode/model/validators.py:270 +#: rhodecode/model/validators.py:272 msgid "Your account is disabled" msgstr "您的帳號已被停用" -#: rhodecode/model/validators.py:314 +#: rhodecode/model/validators.py:316 #, fuzzy, python-format msgid "Repository name %(repo)s is disallowed" msgstr "不允許的版本庫名稱" -#: rhodecode/model/validators.py:316 +#: rhodecode/model/validators.py:318 #, fuzzy, python-format msgid "Repository named %(repo)s already exists" msgstr "這個版本庫已經存在" -#: rhodecode/model/validators.py:317 -#, fuzzy, python-format -msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" -msgstr "這個版本庫已存在於群組 \"%s\"" - #: rhodecode/model/validators.py:319 #, fuzzy, python-format -msgid "Repositories group with name \"%(repo)s\" already exists" +msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\"" +msgstr "這個版本庫已存在於群組 \"%s\"" + +#: rhodecode/model/validators.py:321 +#, fuzzy, python-format +msgid "Repository group with name \"%(repo)s\" already exists" msgstr "這個版本庫已經存在" -#: rhodecode/model/validators.py:432 +#: rhodecode/model/validators.py:438 msgid "invalid clone url" msgstr "無效的複製URL" -#: rhodecode/model/validators.py:433 +#: rhodecode/model/validators.py:439 msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url" msgstr "" -#: rhodecode/model/validators.py:458 +#: rhodecode/model/validators.py:464 #, fuzzy msgid "Fork have to be the same type as parent" msgstr "Fork 必須使用相同的版本庫類型" -#: rhodecode/model/validators.py:473 +#: rhodecode/model/validators.py:479 #, 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" +#: rhodecode/model/validators.py:481 +#, fuzzy +msgid "no permission to create repository in root location" +msgstr "您沒有權限瀏覽這個頁面" + +#: rhodecode/model/validators.py:518 +#, fuzzy +msgid "You don't have permissions to create a group in this location" +msgstr "您沒有權限瀏覽這個頁面" + +#: rhodecode/model/validators.py:557 +#, fuzzy +msgid "This username or user group name is not valid" msgstr "使用者名稱或群組名稱無效" -#: rhodecode/model/validators.py:591 +#: rhodecode/model/validators.py:650 msgid "This is not a valid path" msgstr "不是一個有效的路徑" -#: rhodecode/model/validators.py:606 +#: rhodecode/model/validators.py:665 msgid "This e-mail address is already taken" msgstr "這個郵件位址已經使用了" -#: rhodecode/model/validators.py:626 +#: rhodecode/model/validators.py:685 #, fuzzy, python-format msgid "e-mail \"%(email)s\" does not exist." msgstr "這個郵件位址不存在" -#: rhodecode/model/validators.py:663 +#: rhodecode/model/validators.py:722 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:682 +#: rhodecode/model/validators.py:735 #, python-format msgid "Revisions %(revs)s are already part of pull request or have set status" msgstr "" -#: rhodecode/templates/index.html:3 +#: rhodecode/model/validators.py:767 +msgid "Please enter a valid IPv4 or IpV6 address" +msgstr "" + +#: rhodecode/model/validators.py:768 +#, python-format +msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)" +msgstr "" + +#: rhodecode/model/validators.py:800 +msgid "Key name can only consist of letters, underscore, dash or numbers" +msgstr "" + +#: rhodecode/templates/index.html:5 msgid "Dashboard" msgstr "儀表板" @@ -1325,207 +1517,232 @@ msgstr "儀表板" #: 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/bookmarks/bookmarks.html:9 #: rhodecode/templates/branches/branches.html:9 #: rhodecode/templates/journal/journal.html:9 -#: rhodecode/templates/journal/journal.html:48 -#: rhodecode/templates/tags/tags.html:10 +#: rhodecode/templates/journal/journal.html:46 +#: rhodecode/templates/journal/journal.html:47 +#: rhodecode/templates/tags/tags.html:9 msgid "quick filter..." msgstr "快速過濾..." #: rhodecode/templates/index_base.html:6 #: rhodecode/templates/admin/repos/repos.html:9 -#: rhodecode/templates/base/base.html:233 msgid "repositories" msgstr "個版本庫" #: rhodecode/templates/index_base.html:13 -#: rhodecode/templates/index_base.html:15 +#: rhodecode/templates/index_base.html:18 +#: rhodecode/templates/admin/repos/repo_add.html:5 #: rhodecode/templates/admin/repos/repos.html:21 -msgid "ADD REPOSITORY" +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 +#: rhodecode/templates/index_base.html:15 +#: rhodecode/templates/index_base.html:20 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:31 +#, fuzzy +msgid "Add group" +msgstr "編輯版本庫群組" + +#: rhodecode/templates/index_base.html:27 +#, fuzzy +msgid "Edit group" +msgstr "編輯版本庫群組" + +#: rhodecode/templates/index_base.html:27 +msgid "You have admin right to this group, and can edit it" +msgstr "" + +#: rhodecode/templates/index_base.html:40 +#: rhodecode/templates/index_base.html:140 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:33 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:38 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:43 #: rhodecode/templates/admin/users_groups/users_group_add.html:32 #: rhodecode/templates/admin/users_groups/users_group_edit.html:33 +#: rhodecode/templates/admin/users_groups/users_groups.html:34 msgid "Group name" msgstr "群組名稱" -#: 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/index_base.html:41 +#: rhodecode/templates/index_base.html:83 +#: rhodecode/templates/index_base.html:142 +#: rhodecode/templates/index_base.html:180 +#: rhodecode/templates/index_base.html:270 #: 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 +#: rhodecode/templates/admin/repos/repos.html:73 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:42 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:47 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:44 +#: rhodecode/templates/forks/fork.html:56 +#: rhodecode/templates/pullrequests/pullrequest.html:101 +#: rhodecode/templates/summary/summary.html:106 msgid "Description" msgstr "描述" -#: rhodecode/templates/index_base.html:40 -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47 -msgid "Repositories group" +#: rhodecode/templates/index_base.html:51 +#: 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_show.html:57 +#: rhodecode/templates/forks/fork.html:47 +msgid "Repository group" msgstr "版本庫群組" -#: rhodecode/templates/index_base.html:71 -#: rhodecode/templates/index_base.html:174 -#: rhodecode/templates/index_base.html:264 +#: rhodecode/templates/index_base.html:82 +#: rhodecode/templates/index_base.html:178 +#: rhodecode/templates/index_base.html:268 #: 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/admin/repos/repos.html:71 +#: rhodecode/templates/admin/users/user_edit_my_account.html:172 +#: rhodecode/templates/base/perms_summary.html:14 +#: rhodecode/templates/bookmarks/bookmarks.html:34 #: rhodecode/templates/bookmarks/bookmarks_data.html:6 -#: rhodecode/templates/branches/branches.html:50 +#: rhodecode/templates/branches/branches.html:47 #: rhodecode/templates/branches/branches_data.html:6 #: rhodecode/templates/files/files_browser.html:47 -#: rhodecode/templates/journal/journal.html:70 -#: rhodecode/templates/journal/journal.html:196 -#: 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/journal/journal.html:193 +#: rhodecode/templates/journal/journal.html:296 +#: rhodecode/templates/summary/summary.html:55 +#: rhodecode/templates/summary/summary.html:124 +#: rhodecode/templates/tags/tags.html:48 #: rhodecode/templates/tags/tags_data.html:6 msgid "Name" msgstr "名稱" -#: rhodecode/templates/index_base.html:73 +#: rhodecode/templates/index_base.html:84 msgid "Last change" msgstr "最後修改" -#: 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:198 +#: rhodecode/templates/index_base.html:85 +#: rhodecode/templates/index_base.html:183 +#: rhodecode/templates/index_base.html:273 +#: rhodecode/templates/admin/repos/repos.html:74 +#: rhodecode/templates/admin/users/user_edit_my_account.html:174 +#: rhodecode/templates/journal/journal.html:195 +#: rhodecode/templates/journal/journal.html:298 msgid "Tip" msgstr "" -#: rhodecode/templates/index_base.html:75 -#: rhodecode/templates/index_base.html:181 -#: rhodecode/templates/index_base.html:269 +#: rhodecode/templates/index_base.html:86 +#: rhodecode/templates/index_base.html:185 +#: rhodecode/templates/index_base.html:275 #: rhodecode/templates/admin/repos/repo_edit.html:121 -#: rhodecode/templates/admin/repos/repos.html:73 +#: rhodecode/templates/admin/repos/repos.html:76 msgid "Owner" 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 +#: rhodecode/templates/index_base.html:87 msgid "Atom" msgstr "" -#: 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/index_base.html:171 +#: rhodecode/templates/index_base.html:209 +#: rhodecode/templates/index_base.html:296 +#: rhodecode/templates/admin/repos/repos.html:97 +#: rhodecode/templates/admin/users/user_edit_my_account.html:196 #: rhodecode/templates/admin/users/users.html:107 -#: rhodecode/templates/bookmarks/bookmarks.html:60 -#: rhodecode/templates/branches/branches.html:76 -#: rhodecode/templates/journal/journal.html:221 -#: rhodecode/templates/tags/tags.html:77 +#: rhodecode/templates/bookmarks/bookmarks.html:58 +#: rhodecode/templates/branches/branches.html:73 +#: rhodecode/templates/journal/journal.html:217 +#: rhodecode/templates/journal/journal.html:320 +#: rhodecode/templates/tags/tags.html:74 msgid "Click to sort ascending" msgstr "" -#: 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/index_base.html:172 +#: rhodecode/templates/index_base.html:210 +#: rhodecode/templates/index_base.html:297 +#: rhodecode/templates/admin/repos/repos.html:98 +#: rhodecode/templates/admin/users/user_edit_my_account.html:197 #: rhodecode/templates/admin/users/users.html:108 -#: rhodecode/templates/bookmarks/bookmarks.html:61 -#: rhodecode/templates/branches/branches.html:77 -#: rhodecode/templates/journal/journal.html:222 -#: rhodecode/templates/tags/tags.html:78 +#: rhodecode/templates/bookmarks/bookmarks.html:59 +#: rhodecode/templates/branches/branches.html:74 +#: rhodecode/templates/journal/journal.html:218 +#: rhodecode/templates/journal/journal.html:321 +#: rhodecode/templates/tags/tags.html:75 msgid "Click to sort descending" msgstr "" -#: rhodecode/templates/index_base.html:177 -#: rhodecode/templates/index_base.html:267 +#: rhodecode/templates/index_base.html:181 +#: rhodecode/templates/index_base.html:271 #, fuzzy msgid "Last Change" msgstr "最後修改" -#: 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/index_base.html:211 +#: rhodecode/templates/admin/repos/repos.html:99 +#: rhodecode/templates/admin/users/user_edit_my_account.html:198 #: rhodecode/templates/admin/users/users.html:109 -#: rhodecode/templates/bookmarks/bookmarks.html:62 -#: rhodecode/templates/branches/branches.html:78 -#: rhodecode/templates/journal/journal.html:223 -#: rhodecode/templates/tags/tags.html:79 +#: rhodecode/templates/bookmarks/bookmarks.html:60 +#: rhodecode/templates/branches/branches.html:75 +#: rhodecode/templates/journal/journal.html:219 +#: rhodecode/templates/journal/journal.html:322 +#: rhodecode/templates/tags/tags.html:76 msgid "No records found." msgstr "" -#: 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/index_base.html:212 +#: rhodecode/templates/index_base.html:299 +#: rhodecode/templates/admin/repos/repos.html:100 +#: rhodecode/templates/admin/users/user_edit_my_account.html:199 #: rhodecode/templates/admin/users/users.html:110 -#: rhodecode/templates/bookmarks/bookmarks.html:63 -#: rhodecode/templates/branches/branches.html:79 -#: rhodecode/templates/journal/journal.html:224 -#: rhodecode/templates/tags/tags.html:80 +#: rhodecode/templates/bookmarks/bookmarks.html:61 +#: rhodecode/templates/branches/branches.html:76 +#: rhodecode/templates/journal/journal.html:220 +#: rhodecode/templates/journal/journal.html:323 +#: rhodecode/templates/tags/tags.html:77 msgid "Data error." msgstr "" -#: 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/index_base.html:213 +#: rhodecode/templates/index_base.html:300 +#: rhodecode/templates/admin/repos/repos.html:101 +#: rhodecode/templates/admin/users/user_edit_my_account.html:58 +#: rhodecode/templates/admin/users/user_edit_my_account.html:200 #: rhodecode/templates/admin/users/users.html:111 -#: rhodecode/templates/bookmarks/bookmarks.html:64 -#: rhodecode/templates/branches/branches.html:80 -#: rhodecode/templates/journal/journal.html:62 -#: rhodecode/templates/journal/journal.html:225 -#: rhodecode/templates/tags/tags.html:81 +#: rhodecode/templates/bookmarks/bookmarks.html:62 +#: rhodecode/templates/branches/branches.html:77 +#: rhodecode/templates/journal/journal.html:221 +#: rhodecode/templates/journal/journal.html:324 +#: rhodecode/templates/tags/tags.html:78 #, fuzzy msgid "Loading..." msgstr "載入中..." -#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54 -msgid "Sign In" +#: rhodecode/templates/index_base.html:298 +#, fuzzy +msgid "No repositories found." +msgstr "版本庫群組" + +#: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:227 +#, fuzzy +msgid "Log In" msgstr "登入" #: rhodecode/templates/login.html:21 -msgid "Sign In to" -msgstr "登入" +#, python-format +msgid "Log In to %s" +msgstr "" #: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20 #: rhodecode/templates/admin/admin_log.html:5 #: rhodecode/templates/admin/users/user_add.html:32 -#: rhodecode/templates/admin/users/user_edit.html:50 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26 -#: rhodecode/templates/base/base.html:83 -#: rhodecode/templates/summary/summary.html:131 +#: rhodecode/templates/admin/users/user_edit.html:57 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:31 +#: rhodecode/templates/admin/users/users.html:77 +#: rhodecode/templates/base/base.html:203 +#: rhodecode/templates/summary/summary.html:123 msgid "Username" msgstr "帳號" #: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29 #: rhodecode/templates/admin/ldap/ldap.html:46 #: rhodecode/templates/admin/users/user_add.html:41 -#: rhodecode/templates/base/base.html:92 +#: rhodecode/templates/base/base.html:212 msgid "Password" msgstr "密碼" @@ -1534,17 +1751,22 @@ msgstr "密碼" msgid "Remember me" msgstr "成員" +#: rhodecode/templates/login.html:54 +msgid "Sign In" +msgstr "登入" + #: rhodecode/templates/login.html:60 msgid "Forgot your password ?" msgstr "忘記您的密碼?" -#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103 +#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:223 msgid "Don't have an account ?" msgstr "沒有帳號?" #: rhodecode/templates/password_reset.html:5 -msgid "Reset your password" -msgstr "重設您的密碼" +#, fuzzy +msgid "Password Reset" +msgstr "您的密碼重設連結已寄出" #: rhodecode/templates/password_reset.html:11 msgid "Reset your password to" @@ -1576,23 +1798,23 @@ msgstr "確認密碼" #: 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 +#: rhodecode/templates/admin/users/user_edit.html:97 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62 msgid "First Name" msgstr "名" #: 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 +#: rhodecode/templates/admin/users/user_edit.html:106 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71 msgid "Last Name" msgstr "姓" #: 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 +#: rhodecode/templates/admin/users/user_edit.html:115 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80 +#: rhodecode/templates/summary/summary.html:125 msgid "Email" msgstr "電子郵件" @@ -1604,44 +1826,31 @@ msgstr "您的帳號註冊後將會啟用" msgid "Your account must wait for activation by administrator" msgstr "您的帳號註冊後將等待管理員啟用" -#: rhodecode/templates/repo_switcher_list.html:11 +#: rhodecode/templates/repo_switcher_list.html:10 #: 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 +#: rhodecode/templates/data_table/_dt_elements.html:61 +#: rhodecode/templates/summary/summary.html:77 msgid "Private repository" msgstr "私有的版本庫" -#: rhodecode/templates/repo_switcher_list.html:16 +#: rhodecode/templates/repo_switcher_list.html:12 +#: rhodecode/templates/data_table/_dt_elements.html:63 +#: rhodecode/templates/summary/summary.html:79 msgid "Public repository" msgstr "公開的版本庫" -#: rhodecode/templates/switch_to_list.html:3 -#: rhodecode/templates/branches/branches.html:14 -msgid "branches" -msgstr "分支" - #: rhodecode/templates/switch_to_list.html:10 #: rhodecode/templates/branches/branches_data.html:57 msgid "There are no branches yet" msgstr "沒有任何分支" -#: rhodecode/templates/switch_to_list.html:15 -#: rhodecode/templates/shortlog/shortlog_data.html:10 -#: rhodecode/templates/tags/tags.html:15 -msgid "tags" -msgstr "標籤" - #: rhodecode/templates/switch_to_list.html:22 #: rhodecode/templates/tags/tags_data.html:38 msgid "There are no tags yet" msgstr "沒有任何標籤" -#: rhodecode/templates/switch_to_list.html:28 -#: rhodecode/templates/bookmarks/bookmarks.html:15 -msgid "bookmarks" -msgstr "" - #: rhodecode/templates/switch_to_list.html:35 #: rhodecode/templates/bookmarks/bookmarks_data.html:32 #, fuzzy @@ -1650,6 +1859,7 @@ msgstr "尚未有任何 fork" #: rhodecode/templates/admin/admin.html:5 #: rhodecode/templates/admin/admin.html:13 +#: rhodecode/templates/base/base.html:68 msgid "Admin journal" msgstr "管理員日誌" @@ -1672,11 +1882,13 @@ msgid_plural "%s entries" msgstr[0] "" #: 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 +#: rhodecode/templates/admin/repos/repos.html:77 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46 +#: rhodecode/templates/admin/users/user_edit_my_account.html:176 +#: rhodecode/templates/admin/users/users.html:87 +#: rhodecode/templates/admin/users_groups/users_groups.html:37 +#: rhodecode/templates/journal/journal.html:197 +#: rhodecode/templates/journal/journal.html:300 msgid "Action" msgstr "動作" @@ -1686,11 +1898,11 @@ msgid "Repository" msgstr "版本庫" #: rhodecode/templates/admin/admin_log.html:8 -#: rhodecode/templates/bookmarks/bookmarks.html:37 +#: rhodecode/templates/bookmarks/bookmarks.html:35 #: rhodecode/templates/bookmarks/bookmarks_data.html:7 -#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches.html:48 #: rhodecode/templates/branches/branches_data.html:7 -#: rhodecode/templates/tags/tags.html:52 +#: rhodecode/templates/tags/tags.html:49 #: rhodecode/templates/tags/tags_data.html:7 msgid "Date" msgstr "時間" @@ -1710,6 +1922,7 @@ msgid "Repositories defaults" msgstr "版本庫群組" #: rhodecode/templates/admin/defaults/defaults.html:11 +#: rhodecode/templates/base/base.html:75 #, fuzzy msgid "Defaults" msgstr "刪除" @@ -1723,8 +1936,7 @@ 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 +#: rhodecode/templates/forks/fork.html:69 msgid "" "Private repositories are only visible to people explicitly added as " "collaborators." @@ -1752,7 +1964,7 @@ 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 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72 #, fuzzy msgid "Enable locking" msgstr "啟用" @@ -1764,14 +1976,18 @@ 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/permissions/permissions.html:92 +#: rhodecode/templates/admin/repos/repo_edit.html:148 +#: rhodecode/templates/admin/repos/repo_edit.html:173 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:80 #: 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/user_add.html:94 +#: rhodecode/templates/admin/users/user_edit.html:140 +#: rhodecode/templates/admin/users/user_edit.html:185 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:88 +#: rhodecode/templates/admin/users_groups/users_group_add.html:49 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:90 #: rhodecode/templates/admin/users_groups/users_group_edit.html:135 -#: rhodecode/templates/settings/repo_settings.html:94 msgid "Save" msgstr "儲存" @@ -1780,7 +1996,9 @@ msgid "LDAP administration" msgstr "LDAP管理者" #: rhodecode/templates/admin/ldap/ldap.html:11 -msgid "Ldap" +#: rhodecode/templates/admin/users/users.html:86 +#: rhodecode/templates/base/base.html:74 +msgid "LDAP" msgstr "" #: rhodecode/templates/admin/ldap/ldap.html:28 @@ -1862,8 +2080,7 @@ msgid "Comments" msgstr "遞交" #: rhodecode/templates/admin/notifications/notifications.html:31 -#: rhodecode/templates/base/base.html:267 -#: rhodecode/templates/base/base.html:269 +#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8 msgid "Pull requests" msgstr "" @@ -1882,6 +2099,7 @@ msgid "Show notification" msgstr "險是註釋" #: rhodecode/templates/admin/notifications/show_notification.html:9 +#: rhodecode/templates/base/base.html:241 #, fuzzy msgid "Notifications" msgstr "位置" @@ -1891,11 +2109,12 @@ msgid "Permissions administration" 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:143 +#: rhodecode/templates/admin/repos/repo_edit.html:158 +#: rhodecode/templates/admin/repos/repo_edit.html:165 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64 +#: rhodecode/templates/admin/users/user_edit.html:150 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100 -#: rhodecode/templates/settings/repo_settings.html:86 +#: rhodecode/templates/base/base.html:73 msgid "Permissions" msgstr "權限" @@ -1909,30 +2128,22 @@ msgstr "訪客權限" #: rhodecode/templates/admin/permissions/permissions.html:49 msgid "" -"All default permissions on each repository will be reset to choosen " +"All default permissions on each repository will be reset to chosen " "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" +#, fuzzy +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" +"All default permissions on each repository group will be reset to chosen " +"permission, note that all custom default permission on repository groups " +"will be lost" msgstr "" #: rhodecode/templates/admin/permissions/permissions.html:69 @@ -1948,40 +2159,100 @@ msgstr "版本庫建立" msgid "Repository forking" msgstr "版本庫建立" -#: rhodecode/templates/admin/permissions/permissions.html:92 -#: rhodecode/templates/admin/repos/repo_edit.html:264 -msgid "set" -msgstr "設定" - -#: rhodecode/templates/admin/repos/repo_add.html:5 -#: rhodecode/templates/admin/repos/repo_add_create_repository.html:5 -msgid "Add repository" -msgstr "新增版本庫" - -#: rhodecode/templates/admin/repos/repo_add.html:11 -#: rhodecode/templates/admin/repos/repo_edit.html:11 -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10 +#: rhodecode/templates/admin/permissions/permissions.html:93 +#: rhodecode/templates/admin/permissions/permissions.html:154 +#: rhodecode/templates/admin/repos/repo_edit.html:149 +#: rhodecode/templates/admin/repos/repo_edit.html:174 +#: rhodecode/templates/admin/repos/repo_edit.html:388 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81 +#: rhodecode/templates/admin/settings/settings.html:115 +#: rhodecode/templates/admin/settings/settings.html:187 +#: rhodecode/templates/admin/settings/settings.html:278 +#: rhodecode/templates/admin/users/user_edit.html:141 +#: rhodecode/templates/admin/users/user_edit.html:186 +#: rhodecode/templates/admin/users/user_edit.html:235 +#: rhodecode/templates/admin/users/user_edit.html:283 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:89 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:136 +#: rhodecode/templates/files/files_add.html:80 +#: rhodecode/templates/files/files_edit.html:66 +#: rhodecode/templates/pullrequests/pullrequest.html:110 +msgid "Reset" +msgstr "重設" + +#: rhodecode/templates/admin/permissions/permissions.html:103 +#, fuzzy +msgid "Default User Permissions" +msgstr "預設權限" + +#: rhodecode/templates/admin/permissions/permissions.html:113 +#: rhodecode/templates/admin/users/user_edit.html:244 +#, fuzzy +msgid "Allowed IP addresses" +msgstr "郵件位址" + +#: rhodecode/templates/admin/permissions/permissions.html:127 +#: rhodecode/templates/admin/repos/repo_edit.html:347 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70 +#: rhodecode/templates/admin/users/user_edit.html:212 +#: rhodecode/templates/admin/users/user_edit.html:257 +#: rhodecode/templates/admin/users_groups/users_groups.html:46 +#: rhodecode/templates/data_table/_dt_elements.html:122 +#: rhodecode/templates/data_table/_dt_elements.html:130 +msgid "delete" +msgstr "刪除" + +#: rhodecode/templates/admin/permissions/permissions.html:128 +#: rhodecode/templates/admin/users/user_edit.html:258 +#, fuzzy, python-format +msgid "Confirm to delete this ip: %s" +msgstr "確認刪除這個使用者" + +#: rhodecode/templates/admin/permissions/permissions.html:134 +#: rhodecode/templates/admin/users/user_edit.html:264 +msgid "All IP addresses are allowed" +msgstr "" + +#: rhodecode/templates/admin/permissions/permissions.html:145 +#: rhodecode/templates/admin/users/user_edit.html:275 +#, fuzzy +msgid "New ip address" +msgstr "郵件位址" + +#: rhodecode/templates/admin/permissions/permissions.html:153 +#: rhodecode/templates/admin/repos/repo_add_base.html:73 +#: rhodecode/templates/admin/repos/repo_edit.html:387 +#: rhodecode/templates/admin/users/user_edit.html:234 +#: rhodecode/templates/admin/users/user_edit.html:282 +#, fuzzy +msgid "Add" +msgstr "新增" + +#: rhodecode/templates/admin/repos/repo_add.html:12 +#: rhodecode/templates/admin/repos/repo_add.html:16 +#: rhodecode/templates/base/base.html:69 rhodecode/templates/base/base.html:103 +#: rhodecode/templates/base/base.html:263 msgid "Repositories" msgstr "版本庫" -#: rhodecode/templates/admin/repos/repo_add.html:13 -msgid "add new" +#: rhodecode/templates/admin/repos/repo_add.html:19 +#, fuzzy +msgid "Add new" msgstr "新增" #: rhodecode/templates/admin/repos/repo_add_base.html:20 -#: rhodecode/templates/summary/summary.html:104 -#: rhodecode/templates/summary/summary.html:105 +#: rhodecode/templates/summary/summary.html:96 +#: rhodecode/templates/summary/summary.html:97 msgid "Clone from" msgstr "複製由" #: 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 "" #: rhodecode/templates/admin/repos/repo_add_base.html:33 -#: rhodecode/templates/forks/fork.html:54 +#: rhodecode/templates/forks/fork.html:51 msgid "Optionaly select a group to put this repository into." msgstr "" @@ -1992,58 +2263,40 @@ msgstr "版本庫建立" #: 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 +#: rhodecode/templates/forks/fork.html:38 #, fuzzy msgid "Landing revision" msgstr "下一個修訂" #: 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 +#: rhodecode/templates/forks/fork.html:42 msgid "Default revision for files page, downloads, whoosh and readme" msgstr "" #: 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 +#: rhodecode/templates/forks/fork.html:60 msgid "Keep it short and to the point. Use a README file for longer descriptions." msgstr "" -#: rhodecode/templates/admin/repos/repo_add_base.html:73 -msgid "add" -msgstr "新增" - -#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9 -msgid "add new repository" -msgstr "新增版本庫" - -#: rhodecode/templates/admin/repos/repo_edit.html:5 +#: rhodecode/templates/admin/repos/repo_edit.html:8 msgid "Edit repository" msgstr "編輯版本庫" -#: rhodecode/templates/admin/repos/repo_edit.html:13 -#: rhodecode/templates/admin/users/user_edit.html:13 -#: rhodecode/templates/admin/users/user_edit.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 "編輯" +#: rhodecode/templates/admin/repos/repo_edit.html:12 +#: rhodecode/templates/admin/settings/hooks.html:9 +#: rhodecode/templates/admin/settings/settings.html:11 +#: rhodecode/templates/base/base.html:76 rhodecode/templates/base/base.html:121 +#: rhodecode/templates/summary/summary.html:212 +msgid "Settings" +msgstr "設定" #: rhodecode/templates/admin/repos/repo_edit.html:40 -#: rhodecode/templates/settings/repo_settings.html:39 msgid "Clone uri" msgstr "複製URL" #: 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 "" @@ -2052,179 +2305,211 @@ msgstr "" msgid "Change owner of this repository." 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: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:95 -msgid "Reset" -msgstr "重設" - -#: rhodecode/templates/admin/repos/repo_edit.html:152 -msgid "Administration" -msgstr "管理者" - -#: rhodecode/templates/admin/repos/repo_edit.html:155 +#: rhodecode/templates/admin/repos/repo_edit.html:184 +#, fuzzy +msgid "Advanced settings" +msgstr "儲存設定" + +#: rhodecode/templates/admin/repos/repo_edit.html:187 msgid "Statistics" msgstr "統計" -#: rhodecode/templates/admin/repos/repo_edit.html:159 +#: rhodecode/templates/admin/repos/repo_edit.html:191 msgid "Reset current statistics" msgstr "重設目前的統計" -#: rhodecode/templates/admin/repos/repo_edit.html:159 +#: rhodecode/templates/admin/repos/repo_edit.html:191 msgid "Confirm to remove current statistics" msgstr "確認移除目前的統計" -#: rhodecode/templates/admin/repos/repo_edit.html:162 +#: rhodecode/templates/admin/repos/repo_edit.html:194 msgid "Fetched to rev" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:163 +#: rhodecode/templates/admin/repos/repo_edit.html:195 msgid "Stats gathered" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:171 -msgid "Remote" -msgstr "遠端" - -#: rhodecode/templates/admin/repos/repo_edit.html:175 -msgid "Pull changes from remote location" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:175 -msgid "Confirm to pull changes from remote side" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:186 -msgid "Cache" -msgstr "快取" - -#: rhodecode/templates/admin/repos/repo_edit.html:190 -msgid "Invalidate repository cache" -msgstr "" - -#: rhodecode/templates/admin/repos/repo_edit.html:190 -msgid "Confirm to invalidate repository cache" -msgstr "確認廢止版本庫快取" - -#: rhodecode/templates/admin/repos/repo_edit.html: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 "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 "啟用" +msgid "Remote" +msgstr "遠端" + +#: rhodecode/templates/admin/repos/repo_edit.html:207 +msgid "Pull changes from remote location" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:207 +msgid "Confirm to pull changes from remote side" +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 "Cache" +msgstr "快取" + +#: rhodecode/templates/admin/repos/repo_edit.html:222 +msgid "Invalidate repository cache" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:222 +msgid "Confirm to invalidate repository cache" +msgstr "確認廢止版本庫快取" + +#: rhodecode/templates/admin/repos/repo_edit.html:225 +msgid "" +"Manually invalidate cache for this repository. On first access repository" +" will be cached again" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:230 +msgid "List of cached values" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:233 +msgid "Prefix" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:234 +msgid "Key" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:235 +#: rhodecode/templates/admin/users/user_add.html:86 +#: rhodecode/templates/admin/users/user_edit.html:124 +#: rhodecode/templates/admin/users/users.html:84 +#: rhodecode/templates/admin/users_groups/users_group_add.html:41 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:42 +#: rhodecode/templates/admin/users_groups/users_groups.html:36 +msgid "Active" +msgstr "啟用" + +#: rhodecode/templates/admin/repos/repo_edit.html:250 +#: rhodecode/templates/base/base.html:280 +#: rhodecode/templates/base/base.html:281 msgid "Public journal" msgstr "公開日誌" -#: rhodecode/templates/admin/repos/repo_edit.html:224 +#: rhodecode/templates/admin/repos/repo_edit.html:256 msgid "Remove from public journal" msgstr "從公開日誌移除" -#: rhodecode/templates/admin/repos/repo_edit.html:226 +#: rhodecode/templates/admin/repos/repo_edit.html:258 msgid "Add to public journal" msgstr "新增至公開日誌" -#: rhodecode/templates/admin/repos/repo_edit.html:231 +#: rhodecode/templates/admin/repos/repo_edit.html:263 msgid "" "All actions made on this repository will be accessible to everyone in " "public journal" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:238 +#: rhodecode/templates/admin/repos/repo_edit.html:270 #, fuzzy msgid "Locking" msgstr "解鎖" -#: rhodecode/templates/admin/repos/repo_edit.html:243 +#: rhodecode/templates/admin/repos/repo_edit.html:275 msgid "Unlock locked repo" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:243 +#: rhodecode/templates/admin/repos/repo_edit.html:275 #, fuzzy msgid "Confirm to unlock repository" msgstr "確認移除這個版本庫" -#: rhodecode/templates/admin/repos/repo_edit.html:246 +#: rhodecode/templates/admin/repos/repo_edit.html:278 msgid "lock repo" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:246 +#: rhodecode/templates/admin/repos/repo_edit.html:278 #, fuzzy msgid "Confirm to lock repository" msgstr "確認移除這個版本庫" -#: rhodecode/templates/admin/repos/repo_edit.html:247 +#: rhodecode/templates/admin/repos/repo_edit.html:279 #, fuzzy msgid "Repository is not locked" msgstr "個版本庫" -#: rhodecode/templates/admin/repos/repo_edit.html:252 +#: rhodecode/templates/admin/repos/repo_edit.html:284 msgid "Force locking on repository. Works only when anonymous access is disabled" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:259 +#: rhodecode/templates/admin/repos/repo_edit.html:291 msgid "Set as fork of" msgstr "" -#: rhodecode/templates/admin/repos/repo_edit.html:268 +#: rhodecode/templates/admin/repos/repo_edit.html:296 +msgid "set" +msgstr "設定" + +#: rhodecode/templates/admin/repos/repo_edit.html:300 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 +#: rhodecode/templates/admin/repos/repo_edit.html:306 +#: rhodecode/templates/changeset/changeset_file_comment.html:41 msgid "Delete" msgstr "移除" -#: rhodecode/templates/admin/repos/repo_edit.html:278 -#: rhodecode/templates/settings/repo_settings.html:115 +#: rhodecode/templates/admin/repos/repo_edit.html:315 msgid "Remove this repository" msgstr "移除版本庫" -#: rhodecode/templates/admin/repos/repo_edit.html:278 -#: rhodecode/templates/settings/repo_settings.html:115 +#: rhodecode/templates/admin/repos/repo_edit.html:315 msgid "Confirm to delete this repository" msgstr "確認移除這個版本庫" -#: rhodecode/templates/admin/repos/repo_edit.html:282 -#: rhodecode/templates/settings/repo_settings.html:119 +#: rhodecode/templates/admin/repos/repo_edit.html:317 +#, fuzzy, python-format +msgid "this repository has %s fork" +msgid_plural "this repository has %s forks" +msgstr[0] "建立版本庫 %s" + +#: rhodecode/templates/admin/repos/repo_edit.html:318 +msgid "Detach forks" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:319 +#, fuzzy +msgid "Delete forks" +msgstr "刪除" + +#: rhodecode/templates/admin/repos/repo_edit.html:322 msgid "" "This repository will be renamed in a special way in order to be " -"unaccesible for RhodeCode and VCS systems. If you need fully delete it " -"from file system please do it manually" +"unaccesible for RhodeCode and VCS systems. If you need to fully delete it" +" from file system please do it manually" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:336 +msgid "Extra fields" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:348 +#, fuzzy, python-format +msgid "Confirm to delete this field: %s" +msgstr "確認刪除這個使用者" + +#: rhodecode/templates/admin/repos/repo_edit.html:362 +#, fuzzy +msgid "New field key" +msgstr "新增使用者" + +#: rhodecode/templates/admin/repos/repo_edit.html:370 +msgid "New field label" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:373 +msgid "Enter short label" +msgstr "" + +#: rhodecode/templates/admin/repos/repo_edit.html:379 +#, fuzzy +msgid "New field description" +msgstr "描述" + +#: rhodecode/templates/admin/repos/repo_edit.html:382 +msgid "Enter description of a field" msgstr "" #: rhodecode/templates/admin/repos/repo_edit_perms.html:3 @@ -2244,8 +2529,6 @@ 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:229 msgid "admin" msgstr "管理員" @@ -2255,79 +2538,60 @@ msgid "member" msgstr "成員" #: rhodecode/templates/admin/repos/repo_edit_perms.html:16 -#: rhodecode/templates/data_table/_dt_elements.html:67 -#: rhodecode/templates/journal/journal.html:95 -#: rhodecode/templates/summary/summary.html:85 msgid "private repository" msgstr "私有版本庫" #: 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 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:20 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:35 #, fuzzy msgid "default" msgstr "刪除" #: 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 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:25 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:55 msgid "revoke" msgstr "" #: rhodecode/templates/admin/repos/repo_edit_perms.html:83 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:67 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:80 msgid "Add another member" msgstr "新增另ㄧ位成員" #: rhodecode/templates/admin/repos/repo_edit_perms.html:97 -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:100 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:103 -msgid "Failed to remove users group" +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:116 +#, fuzzy +msgid "Failed to remove user group" msgstr "移除使用者群組失敗" #: rhodecode/templates/admin/repos/repos.html:5 msgid "Repositories administration" msgstr "版本庫管理員" -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:86 msgid "apply to children" msgstr "" -#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74 +#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87 msgid "" -"Set or revoke permission to all children of that group, including " -"repositories and other groups" +"Set or revoke permission to all children of that group, including non-" +"private repositories and other groups" +msgstr "" + +#: rhodecode/templates/admin/repos_groups/repos_groups.html:4 +#, python-format +msgid "%s Group Dashboard" 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 "首頁" @@ -2336,80 +2600,86 @@ msgid "with" msgstr "" #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5 -msgid "Add repos group" -msgstr "新增版本庫群組" - -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10 -msgid "Repos groups" +#, fuzzy +msgid "Add repository group" msgstr "版本庫群組" -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12 -msgid "add new repos group" +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:11 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:16 +#: rhodecode/templates/base/base.html:70 rhodecode/templates/base/base.html:82 +#, fuzzy +msgid "Repository groups" +msgstr "版本庫群組" + +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:13 +#, fuzzy +msgid "Add new repository group" msgstr "新增版本庫群組" -#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50 -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:51 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:56 msgid "Group parent" msgstr "父群組" -#: 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 +#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:59 msgid "save" msgstr "儲存" #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5 -msgid "Edit repos group" +#, fuzzy +msgid "Edit repository group" +msgstr "編輯版本庫群組" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:13 +#, fuzzy, python-format +msgid "Edit repository group %s" msgstr "編輯版本庫群組" -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12 -msgid "edit repos group" -msgstr "編輯版本庫群組" - -#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70 +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:27 +#, fuzzy +msgid "Add child group" +msgstr "新增使用者群組" + +#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:76 msgid "" "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 -msgid "Repositories groups administration" +#, fuzzy +msgid "Repository groups administration" msgstr "版本庫群組管理員" -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22 -msgid "ADD NEW GROUP" -msgstr "新增群組" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:45 #, fuzzy msgid "Number of toplevel repositories" msgstr "版本庫數量" -#: 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 "動作" - -#: 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 "刪除" - -#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55 +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:64 +#, fuzzy +msgid "Edit" +msgstr "編輯" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:65 +#: rhodecode/templates/base/perms_summary.html:29 +#: rhodecode/templates/base/perms_summary.html:48 +#: rhodecode/templates/base/perms_summary.html:50 +#: rhodecode/templates/data_table/_dt_elements.html:116 +#: rhodecode/templates/data_table/_dt_elements.html:117 +msgid "edit" +msgstr "編輯" + +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70 #, 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" +#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:78 +#, fuzzy +msgid "There are no repository groups yet" msgstr "沒有任何版本庫群組" #: rhodecode/templates/admin/settings/hooks.html:5 @@ -2417,12 +2687,6 @@ msgstr "沒有任何版本庫群組" msgid "Settings administration" msgstr "設定管理員" -#: rhodecode/templates/admin/settings/hooks.html:9 -#: rhodecode/templates/admin/settings/settings.html:9 -#: rhodecode/templates/settings/repo_settings.html:13 -msgid "Settings" -msgstr "設定" - #: rhodecode/templates/admin/settings/hooks.html:24 msgid "Built in hooks - read only" msgstr "內建hook - 唯讀" @@ -2439,216 +2703,227 @@ msgstr "移除" msgid "Failed to remove hook" msgstr "移除hook失敗" -#: rhodecode/templates/admin/settings/settings.html:24 +#: rhodecode/templates/admin/settings/settings.html:26 msgid "Remap and rescan repositories" msgstr "重新對映與掃描版本庫" -#: rhodecode/templates/admin/settings/settings.html:32 -msgid "rescan option" +#: rhodecode/templates/admin/settings/settings.html:34 +#, fuzzy +msgid "Rescan option" msgstr "重新掃描選項" -#: rhodecode/templates/admin/settings/settings.html:38 +#: rhodecode/templates/admin/settings/settings.html:40 msgid "" "In case a repository was deleted from filesystem and there are leftovers " "in the database check this option to scan obsolete data in database and " "remove it." msgstr "如果版本庫已從檔案系統中刪除,但是資料還留在資料庫,請勾選這個項目清理資料庫中舊的資料" -#: rhodecode/templates/admin/settings/settings.html:39 -msgid "destroy old data" +#: rhodecode/templates/admin/settings/settings.html:41 +#, fuzzy +msgid "Destroy old data" msgstr "移除舊資料" -#: rhodecode/templates/admin/settings/settings.html:41 +#: rhodecode/templates/admin/settings/settings.html:43 msgid "" "Rescan repositories location for new repositories. Also deletes obsolete " "if `destroy` flag is checked " msgstr "" -#: rhodecode/templates/admin/settings/settings.html:46 +#: rhodecode/templates/admin/settings/settings.html:48 msgid "Rescan repositories" msgstr "重新掃描版本庫" -#: rhodecode/templates/admin/settings/settings.html:52 +#: rhodecode/templates/admin/settings/settings.html:54 msgid "Whoosh indexing" msgstr "Whoosh 索引" -#: rhodecode/templates/admin/settings/settings.html:60 -msgid "index build option" +#: rhodecode/templates/admin/settings/settings.html:62 +#, fuzzy +msgid "Index build option" msgstr "索引選項" -#: rhodecode/templates/admin/settings/settings.html:65 -msgid "build from scratch" +#: rhodecode/templates/admin/settings/settings.html:67 +#, fuzzy +msgid "Build from scratch" msgstr "重頭建立索引" -#: rhodecode/templates/admin/settings/settings.html:71 +#: rhodecode/templates/admin/settings/settings.html:73 msgid "Reindex" msgstr "重新索引" -#: rhodecode/templates/admin/settings/settings.html:77 +#: rhodecode/templates/admin/settings/settings.html:79 msgid "Global application settings" msgstr "全域設定" -#: rhodecode/templates/admin/settings/settings.html:86 -msgid "Application name" -msgstr "應用名稱" - -#: rhodecode/templates/admin/settings/settings.html:95 -msgid "Realm text" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:104 -msgid "GA code" -msgstr "" - -#: rhodecode/templates/admin/settings/settings.html:112 -#: rhodecode/templates/admin/settings/settings.html:178 -#: rhodecode/templates/admin/settings/settings.html:268 +#: rhodecode/templates/admin/settings/settings.html:88 +msgid "Site branding" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:97 +msgid "HTTP authentication realm" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:106 +msgid "Google Analytics code" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:114 +#: rhodecode/templates/admin/settings/settings.html:186 +#: rhodecode/templates/admin/settings/settings.html:277 msgid "Save settings" msgstr "儲存設定" -#: rhodecode/templates/admin/settings/settings.html:119 +#: rhodecode/templates/admin/settings/settings.html:121 #, fuzzy msgid "Visualisation settings" msgstr "全域設定" -#: rhodecode/templates/admin/settings/settings.html:127 +#: rhodecode/templates/admin/settings/settings.html:129 #, fuzzy msgid "General" msgstr "啟用" -#: rhodecode/templates/admin/settings/settings.html:132 +#: rhodecode/templates/admin/settings/settings.html:134 msgid "Use lightweight dashboard" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:139 +#: rhodecode/templates/admin/settings/settings.html:140 +#, fuzzy +msgid "Use repository extra fields" +msgstr "個版本庫" + +#: rhodecode/templates/admin/settings/settings.html:147 #, fuzzy msgid "Icons" msgstr "選項" -#: rhodecode/templates/admin/settings/settings.html:144 +#: rhodecode/templates/admin/settings/settings.html:152 msgid "Show public repo icon on repositories" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:148 +#: rhodecode/templates/admin/settings/settings.html:156 #, fuzzy msgid "Show private repo icon on repositories" msgstr "私有版本庫" -#: rhodecode/templates/admin/settings/settings.html:155 +#: rhodecode/templates/admin/settings/settings.html:163 #, fuzzy msgid "Meta-Tagging" msgstr "設定" -#: rhodecode/templates/admin/settings/settings.html:160 +#: rhodecode/templates/admin/settings/settings.html:168 msgid "Stylify recognised metatags:" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:187 +#: rhodecode/templates/admin/settings/settings.html:195 #, fuzzy msgid "VCS settings" msgstr "設定" -#: rhodecode/templates/admin/settings/settings.html:196 +#: rhodecode/templates/admin/settings/settings.html:204 msgid "Web" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:201 -#, fuzzy -msgid "require ssl for vcs operations" -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/templates/admin/settings/settings.html:209 +#, fuzzy +msgid "Require SSL for vcs operations" +msgstr "推送時要求使用SSL" + +#: rhodecode/templates/admin/settings/settings.html:211 +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:217 msgid "Hooks" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:214 -msgid "Update repository after push (hg update)" -msgstr "push後更新版本庫 (hg update)" - -#: rhodecode/templates/admin/settings/settings.html:218 -msgid "Show repository size after push" -msgstr "push 後顯示版本庫大小" - #: rhodecode/templates/admin/settings/settings.html:222 +msgid "Update repository after push (hg update)" +msgstr "push後更新版本庫 (hg update)" + +#: rhodecode/templates/admin/settings/settings.html:226 +msgid "Show repository size after push" +msgstr "push 後顯示版本庫大小" + +#: rhodecode/templates/admin/settings/settings.html:230 msgid "Log user push commands" msgstr "紀錄使用者推送命令" -#: rhodecode/templates/admin/settings/settings.html:226 +#: rhodecode/templates/admin/settings/settings.html:234 msgid "Log user pull commands" msgstr "紀錄使用者抓取命令" -#: rhodecode/templates/admin/settings/settings.html:230 -msgid "advanced setup" +#: rhodecode/templates/admin/settings/settings.html:238 +#, fuzzy +msgid "Advanced setup" msgstr "進階設定" -#: rhodecode/templates/admin/settings/settings.html:235 +#: rhodecode/templates/admin/settings/settings.html:243 #, fuzzy msgid "Mercurial Extensions" msgstr "Mercurial 版本庫" -#: 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 +#: rhodecode/templates/admin/settings/settings.html:248 +msgid "Enable largefiles extension" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:252 +msgid "Enable hgsubversion extension" +msgstr "" + +#: rhodecode/templates/admin/settings/settings.html:254 msgid "" -"Requires hgsubversion library installed. Allows clonning from svn remote " +"Requires hgsubversion library installed. Allows cloning from svn remote " "locations" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:256 +#: rhodecode/templates/admin/settings/settings.html:264 msgid "Repositories location" msgstr "版本庫路徑" -#: rhodecode/templates/admin/settings/settings.html:261 +#: rhodecode/templates/admin/settings/settings.html:269 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:262 -#: rhodecode/templates/base/base.html:221 -msgid "unlock" +#: rhodecode/templates/admin/settings/settings.html:270 +#: rhodecode/templates/base/base.html:131 +#, fuzzy +msgid "Unlock" msgstr "解鎖" -#: rhodecode/templates/admin/settings/settings.html:263 +#: rhodecode/templates/admin/settings/settings.html:272 msgid "" "Location where repositories are stored. After changing this value a " "restart, and rescan is required" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:283 +#: rhodecode/templates/admin/settings/settings.html:292 msgid "Test Email" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:291 +#: rhodecode/templates/admin/settings/settings.html:300 #, fuzzy msgid "Email to" msgstr "電子郵件" -#: rhodecode/templates/admin/settings/settings.html:299 +#: rhodecode/templates/admin/settings/settings.html:308 #, fuzzy msgid "Send" msgstr "秒" -#: rhodecode/templates/admin/settings/settings.html:305 +#: rhodecode/templates/admin/settings/settings.html:314 msgid "System Info and Packages" msgstr "" -#: rhodecode/templates/admin/settings/settings.html:308 -#, fuzzy -msgid "show" +#: rhodecode/templates/admin/settings/settings.html:317 +#: rhodecode/templates/changelog/changelog.html:42 +msgid "Show" msgstr "顯示" #: rhodecode/templates/admin/users/user_add.html:5 @@ -2657,11 +2932,14 @@ msgstr "新增使用者" #: rhodecode/templates/admin/users/user_add.html:10 #: rhodecode/templates/admin/users/user_edit.html:11 +#: rhodecode/templates/base/base.html:71 msgid "Users" msgstr "使用者" #: rhodecode/templates/admin/users/user_add.html:12 -msgid "add new user" +#: rhodecode/templates/admin/users/users.html:23 +#, fuzzy +msgid "Add new user" msgstr "新增使用者" #: rhodecode/templates/admin/users/user_add.html:50 @@ -2673,6 +2951,12 @@ msgstr "密碼不相符" msgid "Edit user" msgstr "編輯使用者" +#: rhodecode/templates/admin/users/user_edit.html:13 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:13 +#, fuzzy, python-format +msgid "Edit %s" +msgstr "編輯" + #: rhodecode/templates/admin/users/user_edit.html:34 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:10 msgid "Change your avatar at" @@ -2688,27 +2972,32 @@ msgstr "使用中" msgid "API key" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:63 +#: rhodecode/templates/admin/users/user_edit.html:50 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:25 +msgid "Current IP" +msgstr "" + +#: rhodecode/templates/admin/users/user_edit.html:70 msgid "LDAP DN" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:72 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35 +#: rhodecode/templates/admin/users/user_edit.html:79 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 msgid "New password" msgstr "新密碼" -#: rhodecode/templates/admin/users/user_edit.html:81 -#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44 +#: rhodecode/templates/admin/users/user_edit.html:88 +#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53 msgid "New password confirmation" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:151 +#: rhodecode/templates/admin/users/user_edit.html:158 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108 #, fuzzy msgid "Inherit default permissions" msgstr "預設權限" -#: rhodecode/templates/admin/users/user_edit.html:156 +#: rhodecode/templates/admin/users/user_edit.html:163 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113 #, python-format msgid "" @@ -2716,60 +3005,34 @@ msgid "" "options does not have any action" msgstr "" -#: rhodecode/templates/admin/users/user_edit.html:162 +#: rhodecode/templates/admin/users/user_edit.html:169 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119 msgid "Create repositories" msgstr "建立版本庫" -#: rhodecode/templates/admin/users/user_edit.html:170 +#: rhodecode/templates/admin/users/user_edit.html:177 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127 #, fuzzy msgid "Fork repositories" 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: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 -#, fuzzy -msgid "Permission" -msgstr "權限" - -#: 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:247 +#: rhodecode/templates/admin/users/user_edit.html:200 #, fuzzy msgid "Email addresses" msgstr "郵件位址" -#: rhodecode/templates/admin/users/user_edit.html:260 +#: rhodecode/templates/admin/users/user_edit.html:213 #, fuzzy, python-format msgid "Confirm to delete this email: %s" msgstr "確認刪除這個使用者" -#: rhodecode/templates/admin/users/user_edit.html:274 +#: rhodecode/templates/admin/users/user_edit.html:227 #, fuzzy msgid "New email address" msgstr "郵件位址" -#: rhodecode/templates/admin/users/user_edit.html:281 -#, fuzzy -msgid "Add" -msgstr "新增" - #: rhodecode/templates/admin/users/user_edit_my_account.html:5 -#: rhodecode/templates/base/base.html:124 +#: rhodecode/templates/base/base.html:242 msgid "My account" msgstr "我的帳號" @@ -2783,7 +3046,7 @@ msgid "My permissions" msgstr "權限" #: rhodecode/templates/admin/users/user_edit_my_account.html:38 -#: rhodecode/templates/journal/journal.html:49 +#: rhodecode/templates/journal/journal.html:54 #, fuzzy msgid "My repos" msgstr "空的版本庫" @@ -2793,135 +3056,109 @@ msgstr "空的版本庫" msgid "My pull requests" msgstr "建立使用者 %s" -#: rhodecode/templates/admin/users/user_edit_my_account.html:45 -#, fuzzy -msgid "Add repo" -msgstr "新增" - #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:2 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:4 +#, fuzzy +msgid "Show closed pull requests" +msgstr "建立使用者 %s" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:6 msgid "Opened by me" msgstr "" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10 -#, python-format -msgid "Pull request #%s opened on %s" -msgstr "" - #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15 +#, python-format +msgid "Pull request #%s opened on %s" +msgstr "" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:17 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:45 +#: rhodecode/templates/pullrequests/pullrequest_data.html:7 +#: rhodecode/templates/pullrequests/pullrequest_show.html:27 +#: rhodecode/templates/pullrequests/pullrequest_show.html:42 +msgid "Closed" +msgstr "" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:23 #, fuzzy msgid "Confirm to delete this pull request" msgstr "確認移除這個版本庫" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:26 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:30 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:51 +#, fuzzy +msgid "Nothing here yet" +msgstr "尚未有任何變更" + +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:34 msgid "I participate in" msgstr "" -#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:33 -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:30 +#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:42 +#: rhodecode/templates/pullrequests/pullrequest_data.html:11 #, python-format msgid "Pull request #%s opened by %s on %s" 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: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_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_page_repos.html:42 -msgid "No repositories yet" -msgstr "沒有任何版本庫" - -#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40 -#: rhodecode/templates/journal/journal_page_repos.html:44 -msgid "create one now" -msgstr "" - #: rhodecode/templates/admin/users/users.html:5 msgid "Users administration" msgstr "使用者管理員" #: rhodecode/templates/admin/users/users.html:9 -#: rhodecode/templates/base/base.html:235 msgid "users" msgstr "使用者" -#: rhodecode/templates/admin/users/users.html:23 -msgid "ADD NEW USER" -msgstr "新增使用者" - -#: rhodecode/templates/admin/users/users.html:77 -msgid "username" -msgstr "使用者名稱" - #: rhodecode/templates/admin/users/users.html:80 #, fuzzy -msgid "firstname" +msgid "Firstname" msgstr "名" #: rhodecode/templates/admin/users/users.html:81 -msgid "lastname" +#, fuzzy +msgid "Lastname" msgstr "姓" #: rhodecode/templates/admin/users/users.html:82 -msgid "last login" +#, fuzzy +msgid "Last login" msgstr "最後登入" -#: rhodecode/templates/admin/users/users.html:84 -#: rhodecode/templates/admin/users_groups/users_groups.html:34 -msgid "active" -msgstr "啟用" - -#: rhodecode/templates/admin/users/users.html:86 -#: rhodecode/templates/base/base.html:238 -msgid "ldap" -msgstr "" - #: rhodecode/templates/admin/users_groups/users_group_add.html:5 -msgid "Add users group" +#, fuzzy +msgid "Add user group" msgstr "新增使用者群組" #: rhodecode/templates/admin/users_groups/users_group_add.html:10 -#: rhodecode/templates/admin/users_groups/users_groups.html:9 -msgid "Users groups" +#: rhodecode/templates/admin/users_groups/users_groups.html:11 +#: rhodecode/templates/base/base.html:72 +#, fuzzy +msgid "User groups" msgstr "使用者群組" #: rhodecode/templates/admin/users_groups/users_group_add.html:12 -msgid "add new users group" +#: rhodecode/templates/admin/users_groups/users_groups.html:25 +#, fuzzy +msgid "Add new user group" msgstr "新增使用者群組" #: rhodecode/templates/admin/users_groups/users_group_edit.html:5 -msgid "Edit users group" +#, fuzzy +msgid "Edit user group" msgstr "編輯使用者群組" #: rhodecode/templates/admin/users_groups/users_group_edit.html:11 -msgid "UsersGroups" +#, fuzzy +msgid "UserGroups" msgstr "使用者群組" #: rhodecode/templates/admin/users_groups/users_group_edit.html:50 +#: rhodecode/templates/admin/users_groups/users_groups.html:35 msgid "Members" msgstr "成員" #: rhodecode/templates/admin/users_groups/users_group_edit.html:58 -msgid "Choosen group members" +#, fuzzy +msgid "Chosen group members" msgstr "選擇群組成員" #: rhodecode/templates/admin/users_groups/users_group_edit.html:61 @@ -2936,273 +3173,283 @@ msgstr "啟用的成員" msgid "Add all elements" msgstr "新增索有元素" -#: rhodecode/templates/admin/users_groups/users_group_edit.html:146 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:150 #, fuzzy msgid "Group members" msgstr "選擇群組成員" -#: rhodecode/templates/admin/users_groups/users_group_edit.html:163 +#: rhodecode/templates/admin/users_groups/users_group_edit.html:167 #, 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" +#, fuzzy +msgid "User groups administration" msgstr "使用者群組管理員" -#: rhodecode/templates/admin/users_groups/users_groups.html:23 -msgid "ADD NEW USER GROUP" -msgstr "建立新的使用者群組" - -#: rhodecode/templates/admin/users_groups/users_groups.html:32 -msgid "group name" -msgstr "群組名稱" - -#: rhodecode/templates/admin/users_groups/users_groups.html:33 -#: rhodecode/templates/base/root.html:46 -msgid "members" -msgstr "成員" - -#: rhodecode/templates/admin/users_groups/users_groups.html:45 +#: rhodecode/templates/admin/users_groups/users_groups.html:47 #, fuzzy, python-format -msgid "Confirm to delete this users group: %s" +msgid "Confirm to delete this user group: %s" msgstr "確認刪除這個群組" -#: rhodecode/templates/base/base.html:41 +#: rhodecode/templates/base/base.html:42 msgid "Submit a bug" msgstr "回報錯誤" -#: rhodecode/templates/base/base.html:77 -msgid "Login to your account" -msgstr "" - -#: rhodecode/templates/base/base.html:100 -msgid "Forgot password ?" -msgstr "忘記密碼?" - -#: rhodecode/templates/base/base.html:107 -#, fuzzy -msgid "Log In" -msgstr "登入" - -#: rhodecode/templates/base/base.html:118 -msgid "Inbox" -msgstr "" - -#: 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/public_journal.html:4 -msgid "Journal" -msgstr "日誌" - -#: rhodecode/templates/base/base.html:125 -msgid "Log Out" -msgstr "登出" - -#: rhodecode/templates/base/base.html:144 -msgid "Switch repository" -msgstr "切換版本庫" - -#: rhodecode/templates/base/base.html:146 -msgid "Products" -msgstr "" - -#: rhodecode/templates/base/base.html:152 -#: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47 -msgid "loading..." -msgstr "載入中..." - -#: 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/base/base.html:108 +#: rhodecode/templates/data_table/_dt_elements.html:9 +#: rhodecode/templates/data_table/_dt_elements.html:11 +#: rhodecode/templates/data_table/_dt_elements.html:13 +#: rhodecode/templates/pullrequests/pullrequest_show.html:81 +#: rhodecode/templates/summary/summary.html:8 +msgid "Summary" +msgstr "概況" + +#: rhodecode/templates/base/base.html:109 +#: rhodecode/templates/changelog/changelog.html:11 #: rhodecode/templates/data_table/_dt_elements.html:17 #: rhodecode/templates/data_table/_dt_elements.html:19 -msgid "Summary" -msgstr "概況" - -#: 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 +#: rhodecode/templates/data_table/_dt_elements.html:21 msgid "Changelog" msgstr "修改紀錄" -#: rhodecode/templates/base/base.html:175 -#: rhodecode/templates/base/base.html:177 -#: rhodecode/templates/base/base.html:179 -msgid "Switch to" -msgstr "切換至" - -#: 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 +#: rhodecode/templates/base/base.html:110 +#: rhodecode/templates/data_table/_dt_elements.html:25 +#: rhodecode/templates/data_table/_dt_elements.html:27 +#: rhodecode/templates/data_table/_dt_elements.html:29 +#: rhodecode/templates/files/files.html:12 msgid "Files" msgstr "檔案" -#: rhodecode/templates/base/base.html:195 -#: rhodecode/templates/base/base.html:199 +#: rhodecode/templates/base/base.html:112 +#, fuzzy +msgid "Switch To" +msgstr "切換至" + +#: rhodecode/templates/base/base.html:114 +#: rhodecode/templates/base/base.html:267 +msgid "loading..." +msgstr "載入中..." + +#: rhodecode/templates/base/base.html:118 msgid "Options" msgstr "選項" -#: rhodecode/templates/base/base.html:204 -#: rhodecode/templates/base/base.html:206 -#, 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:212 rhodecode/templates/base/root.html:50 -#: rhodecode/templates/changelog/changelog.html:43 -msgid "Open new pull request" -msgstr "" - -#: rhodecode/templates/base/base.html:215 +#: rhodecode/templates/base/base.html:124 #: 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:223 -#, fuzzy -msgid "lock" -msgstr "解鎖" - -#: rhodecode/templates/base/base.html:234 -msgid "repositories groups" -msgstr "版本庫群組" - -#: rhodecode/templates/base/base.html:236 -msgid "users groups" -msgstr "使用者群組" - -#: rhodecode/templates/base/base.html:237 -msgid "permissions" -msgstr "權限" - -#: 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:259 -#: rhodecode/templates/base/base.html:261 -msgid "Forks" -msgstr "" - -#: rhodecode/templates/base/base.html:340 -#: rhodecode/templates/base/base.html:342 -#: rhodecode/templates/base/base.html:344 -#: rhodecode/templates/search/search.html:52 +#: rhodecode/templates/base/base.html:126 +msgid "Lightweight changelog" +msgstr "" + +#: rhodecode/templates/base/base.html:127 +#: rhodecode/templates/base/base.html:287 +#: rhodecode/templates/search/search.html:14 +#: rhodecode/templates/search/search.html:54 msgid "Search" msgstr "搜尋" -#: rhodecode/templates/base/root.html:42 -#, fuzzy -msgid "add another comment" -msgstr "新增另ㄧ位成員" +#: rhodecode/templates/base/base.html:133 +#, fuzzy +msgid "Lock" +msgstr "解鎖" + +#: rhodecode/templates/base/base.html:141 +#, fuzzy +msgid "Follow" +msgstr "追蹤者" + +#: rhodecode/templates/base/base.html:142 +#, fuzzy +msgid "Unfollow" +msgstr "追蹤者" + +#: rhodecode/templates/base/base.html:145 +#: rhodecode/templates/data_table/_dt_elements.html:33 +#: rhodecode/templates/data_table/_dt_elements.html:35 +#: rhodecode/templates/data_table/_dt_elements.html:37 +#: rhodecode/templates/data_table/_dt_elements.html:74 +#: rhodecode/templates/forks/fork.html:9 +msgid "Fork" +msgstr "分支" + +#: rhodecode/templates/base/base.html:147 +#, fuzzy +msgid "Create Pull Request" +msgstr "建立使用者 %s" + +#: rhodecode/templates/base/base.html:153 +#, fuzzy +msgid "Show Pull Requests" +msgstr "建立使用者 %s" + +#: rhodecode/templates/base/base.html:153 +#, fuzzy +msgid "Pull Requests" +msgstr "建立使用者 %s" + +#: rhodecode/templates/base/base.html:190 +#, fuzzy +msgid "Not logged in" +msgstr "最後登入" + +#: rhodecode/templates/base/base.html:197 +msgid "Login to your account" +msgstr "" + +#: rhodecode/templates/base/base.html:220 +msgid "Forgot password ?" +msgstr "忘記密碼?" + +#: rhodecode/templates/base/base.html:243 +msgid "Log Out" +msgstr "登出" + +#: rhodecode/templates/base/base.html:262 +msgid "Switch repository" +msgstr "切換版本庫" + +#: rhodecode/templates/base/base.html:274 +msgid "Show recent activity" +msgstr "" + +#: rhodecode/templates/base/base.html:275 +#: rhodecode/templates/journal/journal.html:4 +msgid "Journal" +msgstr "日誌" + +#: rhodecode/templates/base/base.html:286 +#, fuzzy +msgid "Search in repositories" +msgstr "於所有的版本庫" + +#: rhodecode/templates/base/perms_summary.html:8 +#, fuzzy +msgid "No permissions defined yet" +msgstr "權限" + +#: rhodecode/templates/base/perms_summary.html:15 +#, fuzzy +msgid "Permission" +msgstr "權限" + +#: rhodecode/templates/base/perms_summary.html:16 +#, fuzzy +msgid "Edit Permission" +msgstr "版本庫權限" #: rhodecode/templates/base/root.html:43 -#: rhodecode/templates/journal/journal.html:83 -#: rhodecode/templates/summary/summary.html:57 -msgid "Stop following this repository" -msgstr "停止追蹤這個版本庫" +#, fuzzy +msgid "Add another comment" +msgstr "新增另ㄧ位成員" #: rhodecode/templates/base/root.html:44 -#: rhodecode/templates/summary/summary.html:61 +#: rhodecode/templates/data_table/_dt_elements.html:140 +msgid "Stop following this repository" +msgstr "停止追蹤這個版本庫" + +#: rhodecode/templates/base/root.html:45 msgid "Start following this repository" msgstr "開始追蹤這個版本庫" -#: rhodecode/templates/base/root.html:45 +#: rhodecode/templates/base/root.html:46 msgid "Group" msgstr "群組" +#: rhodecode/templates/base/root.html:47 +msgid "members" +msgstr "成員" + #: rhodecode/templates/base/root.html:48 -msgid "search truncated" -msgstr "" +#: rhodecode/templates/pullrequests/pullrequest.html:181 +#, fuzzy +msgid "Loading ..." +msgstr "載入中..." #: rhodecode/templates/base/root.html:49 -msgid "no matching files" +msgid "Search truncated" +msgstr "" + +#: rhodecode/templates/base/root.html:50 +#, fuzzy +msgid "No matching files" msgstr "無符合的檔案" #: rhodecode/templates/base/root.html:51 -msgid "Open new pull request for selected changesets" +#: rhodecode/templates/changelog/changelog.html:36 +msgid "Open new pull request" msgstr "" #: rhodecode/templates/base/root.html:52 -msgid "Show selected changes __S -> __E" +msgid "Open new pull request for selected changesets" msgstr "" #: rhodecode/templates/base/root.html:53 +msgid "Show selected changesets __S -> __E" +msgstr "" + +#: rhodecode/templates/base/root.html:54 +#, fuzzy +msgid "Show selected changeset __S" +msgstr "尚未有任何變更" + +#: rhodecode/templates/base/root.html:55 msgid "Selection link" msgstr "" +#: rhodecode/templates/base/root.html:56 +#: rhodecode/templates/changeset/diff_block.html:8 +#, fuzzy +msgid "Collapse diff" +msgstr "檔案差異" + +#: rhodecode/templates/base/root.html:57 +#, fuzzy +msgid "Expand diff" +msgstr "原始差異" + #: rhodecode/templates/bookmarks/bookmarks.html:5 #, python-format msgid "%s Bookmarks" msgstr "" -#: rhodecode/templates/bookmarks/bookmarks.html:39 +#: rhodecode/templates/bookmarks/bookmarks.html:37 #: rhodecode/templates/bookmarks/bookmarks_data.html:8 -#: rhodecode/templates/branches/branches.html:53 +#: rhodecode/templates/branches/branches.html:50 #: rhodecode/templates/branches/branches_data.html:8 -#: rhodecode/templates/tags/tags.html:54 +#: rhodecode/templates/shortlog/shortlog_data.html:8 +#: rhodecode/templates/tags/tags.html:51 #: rhodecode/templates/tags/tags_data.html:8 #, fuzzy msgid "Author" msgstr "作者" +#: rhodecode/templates/bookmarks/bookmarks.html:38 +#: rhodecode/templates/bookmarks/bookmarks_data.html:9 +#: rhodecode/templates/branches/branches.html:51 +#: rhodecode/templates/branches/branches_data.html:9 +#: rhodecode/templates/shortlog/shortlog_data.html:5 +#: rhodecode/templates/tags/tags.html:52 +#: rhodecode/templates/tags/tags_data.html:9 +msgid "Revision" +msgstr "修訂" + #: rhodecode/templates/branches/branches.html:5 #, fuzzy, python-format msgid "%s Branches" msgstr "分支" -#: rhodecode/templates/branches/branches.html:29 +#: rhodecode/templates/branches/branches.html:26 #, fuzzy msgid "Compare branches" msgstr "分支" -#: rhodecode/templates/branches/branches.html:56 +#: rhodecode/templates/branches/branches.html:53 #: 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.html:54 #: rhodecode/templates/tags/tags_data.html:10 #, fuzzy msgid "Compare" @@ -3213,229 +3460,233 @@ msgstr "比較顯示" msgid "%s Changelog" msgstr "修改紀錄" -#: rhodecode/templates/changelog/changelog.html:15 +#: rhodecode/templates/changelog/changelog.html:11 #, python-format msgid "showing %d out of %d revision" msgid_plural "showing %d out of %d revisions" msgstr[0] "" -#: rhodecode/templates/changelog/changelog.html:37 +#: rhodecode/templates/changelog/changelog.html:30 #, fuzzy msgid "Clear selection" msgstr "搜尋選項" -#: rhodecode/templates/changelog/changelog.html:40 +#: rhodecode/templates/changelog/changelog.html:33 #: rhodecode/templates/forks/forks_data.html:19 -#, python-format -msgid "compare fork with %s" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:40 +#, fuzzy, python-format +msgid "Compare fork with %s" +msgstr "比較顯示" + +#: rhodecode/templates/changelog/changelog.html:33 msgid "Compare fork with parent" msgstr "" -#: rhodecode/templates/changelog/changelog.html:49 -msgid "Show" -msgstr "顯示" - -#: rhodecode/templates/changelog/changelog.html:74 -#: rhodecode/templates/summary/summary.html:375 -msgid "show more" +#: rhodecode/templates/changelog/changelog.html:76 +#: rhodecode/templates/summary/summary.html:404 +#, fuzzy +msgid "Show more" msgstr "顯示更多" -#: rhodecode/templates/changelog/changelog.html:78 -msgid "Affected number of files, click to show more details" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:91 -#: rhodecode/templates/changeset/changeset.html:65 -#: 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:94 -#: rhodecode/templates/shortlog/shortlog_data.html:20 -msgid "Click to open associated pull request" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:104 -msgid "Parent" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:110 -#: rhodecode/templates/changeset/changeset.html:42 -msgid "No parents" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:115 +#: rhodecode/templates/changelog/changelog.html:89 +#: rhodecode/templates/changeset/changeset_range.html:86 +#, python-format +msgid "Bookmark %s" +msgstr "" + +#: rhodecode/templates/changelog/changelog.html:95 +#: rhodecode/templates/changeset/changeset.html:111 +#: rhodecode/templates/changeset/changeset_range.html:92 +#, fuzzy, python-format +msgid "Tag %s" +msgstr "標籤" + +#: rhodecode/templates/changelog/changelog.html:100 #: rhodecode/templates/changeset/changeset.html:106 -#: rhodecode/templates/changeset/changeset_range.html:79 -msgid "merge" -msgstr "合併" - -#: rhodecode/templates/changelog/changelog.html:118 -#: rhodecode/templates/changeset/changeset.html:109 -#: 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" +#: rhodecode/templates/changeset/changeset_range.html:80 +#, fuzzy, python-format +msgid "Branch %s" msgstr "分支" -#: rhodecode/templates/changelog/changelog.html:124 -#: rhodecode/templates/changeset/changeset_range.html:88 -msgid "bookmark" -msgstr "" - -#: rhodecode/templates/changelog/changelog.html:130 -#: rhodecode/templates/changeset/changeset.html:114 -#: rhodecode/templates/changeset/changeset_range.html:94 -msgid "tag" -msgstr "標籤" - -#: rhodecode/templates/changelog/changelog.html:301 +#: rhodecode/templates/changelog/changelog.html:258 msgid "There are no changes yet" msgstr "尚未有任何變更" #: rhodecode/templates/changelog/changelog_details.html:4 -#: rhodecode/templates/changeset/changeset.html:94 -msgid "removed" +#: rhodecode/templates/changeset/changeset.html:91 +#, fuzzy +msgid "Removed" msgstr "移除" #: rhodecode/templates/changelog/changelog_details.html:5 -#: rhodecode/templates/changeset/changeset.html:95 -msgid "changed" +#: rhodecode/templates/changeset/changeset.html:92 +#, fuzzy +msgid "Changed" msgstr "修改" #: rhodecode/templates/changelog/changelog_details.html:6 -#: rhodecode/templates/changeset/changeset.html:96 -msgid "added" +#: rhodecode/templates/changeset/changeset.html:93 +#, fuzzy +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:98 -#: rhodecode/templates/changeset/changeset.html:99 -#: rhodecode/templates/changeset/changeset.html:100 -#, python-format -msgid "affected %s files" -msgstr "" +#: rhodecode/templates/changeset/changeset.html:95 +#: rhodecode/templates/changeset/changeset.html:96 +#: rhodecode/templates/changeset/changeset.html:97 +#, fuzzy, python-format +msgid "Affected %s files" +msgstr "檔案" #: rhodecode/templates/changeset/changeset.html:6 #, fuzzy, python-format msgid "%s Changeset" msgstr "沒有修改" -#: rhodecode/templates/changeset/changeset.html:14 -msgid "Changeset" -msgstr "" - -#: rhodecode/templates/changeset/changeset.html:52 +#: rhodecode/templates/changeset/changeset.html:39 +msgid "No parents" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:49 msgid "No children" msgstr "" -#: rhodecode/templates/changeset/changeset.html:70 -#: rhodecode/templates/changeset/diff_block.html:20 -msgid "raw diff" +#: rhodecode/templates/changeset/changeset.html:62 +#: rhodecode/templates/changeset/changeset_file_comment.html:20 +#: rhodecode/templates/changeset/changeset_range.html:44 +#, fuzzy +msgid "Changeset status" +msgstr "變更" + +#: rhodecode/templates/changeset/changeset.html:67 +#: rhodecode/templates/changeset/diff_block.html:23 +#, fuzzy +msgid "Raw diff" msgstr "原始差異" -#: rhodecode/templates/changeset/changeset.html:71 -#, fuzzy -msgid "patch diff" +#: rhodecode/templates/changeset/changeset.html:68 +#, fuzzy +msgid "Patch diff" msgstr "原始差異" -#: rhodecode/templates/changeset/changeset.html:72 -#: rhodecode/templates/changeset/diff_block.html:21 -msgid "download diff" +#: rhodecode/templates/changeset/changeset.html:69 +#: rhodecode/templates/changeset/diff_block.html:24 +#, fuzzy +msgid "Download diff" msgstr "下載差異" -#: rhodecode/templates/changeset/changeset.html:76 -#: rhodecode/templates/changeset/changeset_file_comment.html:82 +#: rhodecode/templates/changeset/changeset.html:73 +#: rhodecode/templates/changeset/changeset_file_comment.html:97 #, fuzzy, python-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "遞交" -#: rhodecode/templates/changeset/changeset.html:76 -#: rhodecode/templates/changeset/changeset_file_comment.html:82 +#: rhodecode/templates/changeset/changeset.html:73 +#: rhodecode/templates/changeset/changeset_file_comment.html:97 #, python-format msgid "(%d inline)" msgid_plural "(%d inline)" msgstr[0] "" -#: rhodecode/templates/changeset/changeset.html:122 -#: rhodecode/templates/compare/compare_diff.html:44 -#: rhodecode/templates/pullrequests/pullrequest_show.html:76 +#: rhodecode/templates/changeset/changeset.html:103 +#: rhodecode/templates/changeset/changeset_range.html:77 +msgid "merge" +msgstr "合併" + +#: rhodecode/templates/changeset/changeset.html:119 +#: rhodecode/templates/compare/compare_diff.html:40 +#: rhodecode/templates/pullrequests/pullrequest_show.html:113 #, fuzzy, python-format msgid "%s file changed" msgid_plural "%s files changed" msgstr[0] "檔案修改" -#: rhodecode/templates/changeset/changeset.html:124 -#: rhodecode/templates/compare/compare_diff.html:46 -#: rhodecode/templates/pullrequests/pullrequest_show.html:78 +#: rhodecode/templates/changeset/changeset.html:121 +#: rhodecode/templates/compare/compare_diff.html:42 +#: rhodecode/templates/pullrequests/pullrequest_show.html:115 #, 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] "" -#: rhodecode/templates/changeset/changeset_file_comment.html:42 +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 +msgid "Showing a huge diff might take some time and resources" +msgstr "" + +#: rhodecode/templates/changeset/changeset.html:134 +#: rhodecode/templates/changeset/changeset.html:146 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +#: rhodecode/templates/pullrequests/pullrequest_show.html:131 +#: rhodecode/templates/pullrequests/pullrequest_show.html:195 +#, fuzzy +msgid "Show full diff" +msgstr "載入檔案列表..." + +#: rhodecode/templates/changeset/changeset_file_comment.html:30 +#, fuzzy, python-format +msgid "Status change on pull request #%s" +msgstr "建立使用者 %s" + +#: rhodecode/templates/changeset/changeset_file_comment.html:32 +#, fuzzy, python-format +msgid "Comment on pull request #%s" +msgstr "建立使用者 %s" + +#: rhodecode/templates/changeset/changeset_file_comment.html:57 msgid "Submitting..." msgstr "" -#: rhodecode/templates/changeset/changeset_file_comment.html:45 +#: rhodecode/templates/changeset/changeset_file_comment.html:60 msgid "Commenting on line {1}." msgstr "" -#: rhodecode/templates/changeset/changeset_file_comment.html:46 -#: rhodecode/templates/changeset/changeset_file_comment.html:121 +#: rhodecode/templates/changeset/changeset_file_comment.html:61 +#: rhodecode/templates/changeset/changeset_file_comment.html:139 #, python-format msgid "Comments parsed using %s syntax with %s support." msgstr "" -#: rhodecode/templates/changeset/changeset_file_comment.html:48 -#: rhodecode/templates/changeset/changeset_file_comment.html:123 +#: rhodecode/templates/changeset/changeset_file_comment.html:63 +#: rhodecode/templates/changeset/changeset_file_comment.html:141 msgid "Use @username inside this text to send notification to this RhodeCode user" msgstr "" -#: rhodecode/templates/changeset/changeset_file_comment.html:59 -#: rhodecode/templates/changeset/changeset_file_comment.html:143 +#: rhodecode/templates/changeset/changeset_file_comment.html:74 +#: rhodecode/templates/changeset/changeset_file_comment.html:161 #, fuzzy msgid "Comment" msgstr "遞交" -#: rhodecode/templates/changeset/changeset_file_comment.html:60 -#: rhodecode/templates/changeset/changeset_file_comment.html:71 -msgid "Hide" -msgstr "" - -#: rhodecode/templates/changeset/changeset_file_comment.html:67 +#: rhodecode/templates/changeset/changeset_file_comment.html:75 +#, fuzzy +msgid "Cancel" +msgstr "修改" + +#: rhodecode/templates/changeset/changeset_file_comment.html:82 #, fuzzy msgid "You need to be logged in to comment." msgstr "您必須登入後才能瀏覽這個頁面" -#: rhodecode/templates/changeset/changeset_file_comment.html:67 +#: rhodecode/templates/changeset/changeset_file_comment.html:82 msgid "Login now" msgstr "" -#: rhodecode/templates/changeset/changeset_file_comment.html:118 -msgid "Leave a comment" -msgstr "" - -#: rhodecode/templates/changeset/changeset_file_comment.html:125 -msgid "Check this to change current status of code-review for this changeset" -msgstr "" - -#: rhodecode/templates/changeset/changeset_file_comment.html:125 -#, fuzzy -msgid "change status" +#: rhodecode/templates/changeset/changeset_file_comment.html:86 +msgid "Hide" +msgstr "" + +#: rhodecode/templates/changeset/changeset_file_comment.html:143 +#, fuzzy +msgid "Change status" msgstr "變更" -#: rhodecode/templates/changeset/changeset_file_comment.html:145 +#: rhodecode/templates/changeset/changeset_file_comment.html:163 msgid "Comment and close" msgstr "" @@ -3444,121 +3695,145 @@ msgstr "" msgid "%s Changesets" msgstr "變更" -#: 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 -#, fuzzy -msgid "Show combined compare" -msgstr "文件內容" - -#: rhodecode/templates/changeset/changeset_range.html:54 +#: rhodecode/templates/changeset/changeset_range.html:52 msgid "Files affected" msgstr "" -#: rhodecode/templates/changeset/diff_block.html:19 -msgid "show full diff for this file" -msgstr "" - -#: rhodecode/templates/changeset/diff_block.html:27 -#, fuzzy -msgid "show inline comments" +#: rhodecode/templates/changeset/diff_block.html:22 +msgid "Show full diff for this file" +msgstr "" + +#: rhodecode/templates/changeset/diff_block.html:30 +#, fuzzy +msgid "Show inline comments" msgstr "文件內容" -#: rhodecode/templates/compare/compare_cs.html:5 +#: rhodecode/templates/changeset/diff_block.html:55 +msgid "Show file at latest version in this repo" +msgstr "" + +#: rhodecode/templates/changeset/diff_block.html:56 +msgid "Show file at initial version in this repo" +msgstr "" + +#: rhodecode/templates/compare/compare_cs.html:4 #, fuzzy msgid "No changesets" msgstr "尚未有任何變更" -#: rhodecode/templates/compare/compare_diff.html:37 -#: rhodecode/templates/pullrequests/pullrequest_show.html:69 +#: rhodecode/templates/compare/compare_cs.html:32 +#, fuzzy +msgid "Ancestor" +msgstr "分支" + +#: rhodecode/templates/compare/compare_diff.html:5 +#, fuzzy, python-format +msgid "%s Compare" +msgstr "比較顯示" + +#: rhodecode/templates/compare/compare_diff.html:9 +#, fuzzy +msgid "Compare revisions" +msgstr "前一個修訂" + +#: rhodecode/templates/compare/compare_diff.html:33 +#: rhodecode/templates/pullrequests/pullrequest_show.html:106 #, 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 +#: rhodecode/templates/compare/compare_diff.html:48 +#: rhodecode/templates/pullrequests/pullrequest_show.html:121 #, fuzzy msgid "No files" msgstr "檔案" -#: 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 "分支" - -#: rhodecode/templates/data_table/_dt_elements.html:60 -#: rhodecode/templates/journal/journal.html:89 -#: rhodecode/templates/summary/summary.html:77 +#: rhodecode/templates/compare/compare_diff.html:58 +#: rhodecode/templates/compare/compare_diff.html:69 +msgid "confirm to show potentially huge diff" +msgstr "" + +#: rhodecode/templates/data_table/_dt_elements.html:54 +#: rhodecode/templates/summary/summary.html:69 msgid "Mercurial repository" msgstr "Mercurial 版本庫" -#: rhodecode/templates/data_table/_dt_elements.html:62 -#: rhodecode/templates/journal/journal.html:91 -#: rhodecode/templates/summary/summary.html:80 +#: rhodecode/templates/data_table/_dt_elements.html:56 +#: rhodecode/templates/summary/summary.html:72 msgid "Git repository" msgstr "Git 版本庫" -#: rhodecode/templates/data_table/_dt_elements.html:69 -#: rhodecode/templates/journal/journal.html:97 -#: rhodecode/templates/summary/summary.html:87 -msgid "public repository" -msgstr "公開版本庫" - -#: rhodecode/templates/data_table/_dt_elements.html:80 -#: rhodecode/templates/summary/summary.html:96 -#: rhodecode/templates/summary/summary.html:97 -msgid "Fork of" -msgstr "" - -#: rhodecode/templates/data_table/_dt_elements.html:94 +#: rhodecode/templates/data_table/_dt_elements.html:74 +#, fuzzy, python-format +msgid "Fork of %s" +msgstr "fork 名稱" + +#: rhodecode/templates/data_table/_dt_elements.html:88 msgid "No changesets yet" msgstr "尚未有任何變更" -#: rhodecode/templates/data_table/_dt_elements.html:101 -#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:95 +#: rhodecode/templates/data_table/_dt_elements.html:97 #, 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 +#: rhodecode/templates/data_table/_dt_elements.html:103 +#: rhodecode/templates/data_table/_dt_elements.html:105 #, 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 repository: %s" +msgstr "確認移除這個版本庫" + +#: rhodecode/templates/data_table/_dt_elements.html:131 +#, fuzzy, python-format msgid "Confirm to delete this user: %s" msgstr "確認刪除這個使用者" -#: rhodecode/templates/email_templates/changeset_comment.html:10 -#, fuzzy -msgid "New status$" +#: rhodecode/templates/email_templates/changeset_comment.html:9 +#: rhodecode/templates/email_templates/pull_request_comment.html:15 +#, fuzzy +msgid "New status" msgstr "變更" +#: rhodecode/templates/email_templates/changeset_comment.html:11 +#: rhodecode/templates/email_templates/pull_request_comment.html:9 +msgid "View this comment here" +msgstr "" + +#: rhodecode/templates/email_templates/changeset_comment.html:14 +#, fuzzy +msgid "Repo" +msgstr "空的版本庫" + +#: rhodecode/templates/email_templates/changeset_comment.html:16 +msgid "desc" +msgstr "" + #: rhodecode/templates/email_templates/main.html:8 msgid "This is a notification from RhodeCode." msgstr "" #: rhodecode/templates/email_templates/password_reset.html:4 -msgid "Hello" +#, python-format +msgid "Hello %s" +msgstr "" + +#: rhodecode/templates/email_templates/password_reset.html:5 +msgid "We received a request to create a new password for your account." 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." +#: rhodecode/templates/email_templates/password_reset.html:11 +msgid "If you did not request new password please ignore this email." msgstr "" #: rhodecode/templates/email_templates/pull_request.html:4 @@ -3570,37 +3845,32 @@ msgstr "" #: rhodecode/templates/email_templates/pull_request.html:5 #, fuzzy +msgid "View this pull request here" +msgstr "確認移除這個版本庫" + +#: rhodecode/templates/email_templates/pull_request.html:6 +#, fuzzy msgid "title" msgstr "寫" -#: rhodecode/templates/email_templates/pull_request.html:6 -#: rhodecode/templates/pullrequests/pullrequest.html:115 +#: rhodecode/templates/email_templates/pull_request.html:7 #, fuzzy msgid "description" msgstr "描述" -#: rhodecode/templates/email_templates/pull_request.html:11 +#: rhodecode/templates/email_templates/pull_request.html:12 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 +#: rhodecode/templates/email_templates/pull_request_comment.html:3 #, fuzzy, python-format -msgid "User %s commented on pull request #%s for repository %s" +msgid "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/pull_request_comment.html:13 +#, fuzzy +msgid "Closing pull request with status" +msgstr "建立使用者 %s" #: rhodecode/templates/email_templates/registration.html:4 #, fuzzy @@ -3611,116 +3881,119 @@ msgstr "您已經成功註冊rhodecode" msgid "View this user here" msgstr "" -#: rhodecode/templates/errors/error_document.html:46 +#: rhodecode/templates/errors/error_document.html:55 #, python-format msgid "You will be redirected to %s in %s seconds" msgstr "" #: rhodecode/templates/files/file_diff.html:4 #, fuzzy, python-format -msgid "%s File diff" +msgid "%s File Diff" msgstr "檔案差異" -#: rhodecode/templates/files/file_diff.html:12 +#: rhodecode/templates/files/file_diff.html:8 msgid "File diff" msgstr "檔案差異" #: rhodecode/templates/files/files.html:4 -#: rhodecode/templates/files/files.html:74 +#: rhodecode/templates/files/files.html:76 #, fuzzy, python-format -msgid "%s files" +msgid "%s Files" msgstr "檔案" -#: rhodecode/templates/files/files.html:12 -#: rhodecode/templates/summary/summary.html:351 -msgid "files" -msgstr "檔案" +#: rhodecode/templates/files/files.html:30 +#: rhodecode/templates/files/files_add.html:31 +#: rhodecode/templates/files/files_edit.html:31 +#: rhodecode/templates/shortlog/shortlog_data.html:9 +#, fuzzy +msgid "Branch" +msgstr "分支" #: rhodecode/templates/files/files_add.html:4 -#: rhodecode/templates/files/files_edit.html:4 #, fuzzy, python-format -msgid "%s Edit file" -msgstr "編輯檔案" +msgid "%s Files Add" +msgstr "檔案" #: rhodecode/templates/files/files_add.html:19 #, fuzzy -msgid "add file" +msgid "Add file" msgstr "編輯檔案" -#: rhodecode/templates/files/files_add.html:40 +#: rhodecode/templates/files/files_add.html:38 +#: rhodecode/templates/files/files_browser.html:31 +#: rhodecode/templates/shortlog/shortlog_data.html:78 #, fuzzy msgid "Add new file" msgstr "新增使用者" -#: rhodecode/templates/files/files_add.html:45 +#: rhodecode/templates/files/files_add.html:43 #, fuzzy msgid "File Name" msgstr "檔案名稱" -#: rhodecode/templates/files/files_add.html:49 -#: rhodecode/templates/files/files_add.html:58 +#: rhodecode/templates/files/files_add.html:47 +#: rhodecode/templates/files/files_add.html:56 #, fuzzy msgid "or" msgstr "時" -#: rhodecode/templates/files/files_add.html:49 -#: rhodecode/templates/files/files_add.html:54 +#: rhodecode/templates/files/files_add.html:47 +#: rhodecode/templates/files/files_add.html:52 #, fuzzy msgid "Upload file" msgstr "編輯檔案" -#: rhodecode/templates/files/files_add.html:58 +#: rhodecode/templates/files/files_add.html:56 #, fuzzy msgid "Create new file" msgstr "建立使用者 %s" -#: rhodecode/templates/files/files_add.html:63 -#: rhodecode/templates/files/files_edit.html:39 +#: rhodecode/templates/files/files_add.html:61 +#: rhodecode/templates/files/files_edit.html:37 #: rhodecode/templates/files/files_ypjax.html:3 msgid "Location" msgstr "位置" -#: rhodecode/templates/files/files_add.html:67 +#: rhodecode/templates/files/files_add.html:65 msgid "use / to separate directories" msgstr "" -#: rhodecode/templates/files/files_add.html:77 -#: rhodecode/templates/files/files_edit.html:63 +#: rhodecode/templates/files/files_add.html:75 +#: rhodecode/templates/files/files_edit.html:61 #: rhodecode/templates/shortlog/shortlog_data.html:6 -msgid "commit message" +#, fuzzy +msgid "Commit message" msgstr "遞交資訊" -#: rhodecode/templates/files/files_add.html:81 -#: rhodecode/templates/files/files_edit.html:67 +#: rhodecode/templates/files/files_add.html:79 +#: rhodecode/templates/files/files_edit.html:65 msgid "Commit changes" msgstr "遞交修改" #: rhodecode/templates/files/files_browser.html:13 -msgid "view" +#, fuzzy +msgid "View" msgstr "顯示" #: rhodecode/templates/files/files_browser.html:14 -msgid "previous revision" +#, fuzzy +msgid "Previous revision" msgstr "前一個修訂" #: rhodecode/templates/files/files_browser.html:16 -msgid "next revision" +#, fuzzy +msgid "Next revision" msgstr "下一個修訂" #: rhodecode/templates/files/files_browser.html:23 -msgid "follow current branch" +msgid "Follow current branch" msgstr "" #: rhodecode/templates/files/files_browser.html:27 -msgid "search file list" +#, fuzzy +msgid "Search file list" msgstr "搜尋檔案列表" -#: rhodecode/templates/files/files_browser.html:31 -#: rhodecode/templates/shortlog/shortlog_data.html:78 -#, fuzzy -msgid "add new file" -msgstr "新增使用者" - #: rhodecode/templates/files/files_browser.html:35 msgid "Loading file list..." msgstr "載入檔案列表..." @@ -3743,35 +4016,44 @@ msgid "Last modified" msgstr "最後修改" #: rhodecode/templates/files/files_browser.html:52 -msgid "Last commiter" +msgid "Last committer" msgstr "最後的遞交者" +#: rhodecode/templates/files/files_edit.html:4 +#, fuzzy, python-format +msgid "%s Files Edit" +msgstr "檔案" + #: rhodecode/templates/files/files_edit.html:19 -msgid "edit file" +#, fuzzy +msgid "Edit file" msgstr "編輯檔案" +#: rhodecode/templates/files/files_edit.html:47 +#: rhodecode/templates/files/files_source.html:23 +#, fuzzy +msgid "Show annotation" +msgstr "險是註釋" + +#: rhodecode/templates/files/files_edit.html:48 +#: rhodecode/templates/files/files_source.html:25 +#: rhodecode/templates/files/files_source.html:55 +#, fuzzy +msgid "Show as raw" +msgstr "顯示原始文件" + #: rhodecode/templates/files/files_edit.html:49 -#: rhodecode/templates/files/files_source.html:23 -msgid "show annotation" -msgstr "險是註釋" - -#: 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 "顯示原始文件" - -#: rhodecode/templates/files/files_edit.html:51 #: rhodecode/templates/files/files_source.html:26 -msgid "download as raw" +#, fuzzy +msgid "Download as raw" msgstr "下載原始文件" -#: rhodecode/templates/files/files_edit.html:54 -#, fuzzy -msgid "source" +#: rhodecode/templates/files/files_edit.html:52 +#, fuzzy +msgid "Source" msgstr "顯示原始碼" -#: rhodecode/templates/files/files_edit.html:59 +#: rhodecode/templates/files/files_edit.html:57 #, fuzzy msgid "Editing file" msgstr "編輯檔案" @@ -3782,17 +4064,17 @@ msgstr "歷史" #: rhodecode/templates/files/files_history_box.html:9 #, fuzzy -msgid "diff to revision" +msgid "Diff to revision" msgstr "下一個修訂" #: rhodecode/templates/files/files_history_box.html:10 #, fuzzy -msgid "show at revision" +msgid "Show at revision" msgstr "下一個修訂" #: rhodecode/templates/files/files_history_box.html:11 #, fuzzy -msgid "show full history" +msgid "Show full history" msgstr "載入檔案列表..." #: rhodecode/templates/files/files_history_box.html:16 @@ -3807,15 +4089,30 @@ msgid "Load file history" msgstr "載入檔案列表..." #: rhodecode/templates/files/files_source.html:21 -msgid "show source" +#, fuzzy +msgid "Show source" msgstr "顯示原始碼" -#: rhodecode/templates/files/files_source.html:44 +#: rhodecode/templates/files/files_source.html:29 +#, fuzzy, python-format +msgid "Edit on branch:%s" +msgstr "刪除版本庫 %s" + +#: rhodecode/templates/files/files_source.html:31 +#, fuzzy +msgid "Edit on branch:?" +msgstr "刪除版本庫 %s" + +#: rhodecode/templates/files/files_source.html:31 +msgid "Editing files allowed only when on branch head revision" +msgstr "" + +#: rhodecode/templates/files/files_source.html:46 #, python-format msgid "Binary file (%s)" msgstr "二進位檔 (%s)" -#: rhodecode/templates/files/files_source.html:53 +#: rhodecode/templates/files/files_source.html:55 msgid "File is too big to display" msgstr "顯示的檔案太大" @@ -3837,8 +4134,10 @@ msgstr "" msgid "%s Followers" msgstr "追蹤者" -#: rhodecode/templates/followers/followers.html:13 -msgid "followers" +#: rhodecode/templates/followers/followers.html:9 +#: rhodecode/templates/summary/summary.html:183 +#: rhodecode/templates/summary/summary.html:184 +msgid "Followers" msgstr "追蹤者" #: rhodecode/templates/followers/followers_data.html:12 @@ -3851,33 +4150,34 @@ msgstr "開始追蹤" msgid "%s Fork" msgstr "分支" -#: rhodecode/templates/forks/fork.html:31 +#: rhodecode/templates/forks/fork.html:28 msgid "Fork name" msgstr "分支名稱" -#: rhodecode/templates/forks/fork.html:68 +#: rhodecode/templates/forks/fork.html:65 msgid "Private" msgstr "私有" -#: rhodecode/templates/forks/fork.html:77 +#: rhodecode/templates/forks/fork.html:74 #, fuzzy msgid "Copy permissions" msgstr "權限" -#: rhodecode/templates/forks/fork.html:81 +#: rhodecode/templates/forks/fork.html:78 msgid "Copy permissions from forked repository" msgstr "" -#: rhodecode/templates/forks/fork.html:86 +#: rhodecode/templates/forks/fork.html:84 msgid "Update after clone" msgstr "" -#: rhodecode/templates/forks/fork.html:90 +#: rhodecode/templates/forks/fork.html:88 msgid "Checkout source after making a clone" msgstr "" -#: rhodecode/templates/forks/fork.html:94 -msgid "fork this repository" +#: rhodecode/templates/forks/fork.html:93 +#, fuzzy +msgid "Fork this repository" msgstr "fork 這個版本庫" #: rhodecode/templates/forks/forks.html:5 @@ -3885,12 +4185,15 @@ msgstr "fork 這個版本庫" msgid "%s Forks" msgstr "分支" -#: rhodecode/templates/forks/forks.html:13 -msgid "forks" -msgstr "分支" +#: rhodecode/templates/forks/forks.html:9 +#: rhodecode/templates/summary/summary.html:189 +#: rhodecode/templates/summary/summary.html:190 +msgid "Forks" +msgstr "" #: rhodecode/templates/forks/forks_data.html:17 -msgid "forked" +#, fuzzy +msgid "Forked" msgstr "已建立分支" #: rhodecode/templates/forks/forks_data.html:42 @@ -3908,46 +4211,28 @@ msgid "RSS journal feed" msgstr "%s 公開日誌 %s feed" #: rhodecode/templates/journal/journal.html:32 -#: rhodecode/templates/pullrequests/pullrequest.html:55 msgid "Refresh" msgstr "" #: rhodecode/templates/journal/journal.html:35 #: rhodecode/templates/journal/public_journal.html:24 -msgid "RSS feed" -msgstr "" - -#: rhodecode/templates/journal/journal.html:38 -#: rhodecode/templates/journal/public_journal.html:27 msgid "ATOM feed" msgstr "" -#: rhodecode/templates/journal/journal.html:49 +#: rhodecode/templates/journal/journal.html:51 #, fuzzy msgid "Watched" msgstr "快取" -#: rhodecode/templates/journal/journal.html:54 -#, fuzzy -msgid "ADD" -msgstr "新增" - -#: rhodecode/templates/journal/journal.html:77 -msgid "following user" -msgstr "追蹤使用者" - -#: rhodecode/templates/journal/journal.html:77 -msgid "user" -msgstr "使用者" - -#: rhodecode/templates/journal/journal.html:110 -msgid "You are not following any users or repositories" -msgstr "您尚未追蹤任何使用者或版本庫" - #: rhodecode/templates/journal/journal_data.html:55 msgid "No entries yet" msgstr "" +#: rhodecode/templates/journal/public_journal.html:4 +#: rhodecode/templates/journal/public_journal.html:21 +msgid "Public Journal" +msgstr "開放日誌" + #: rhodecode/templates/journal/public_journal.html:13 #, fuzzy msgid "ATOM public journal feed" @@ -3958,157 +4243,139 @@ msgstr "%s 公開日誌 %s feed" msgid "RSS public journal feed" msgstr "%s 公開日誌 %s feed" -#: rhodecode/templates/journal/public_journal.html:21 -msgid "Public Journal" -msgstr "開放日誌" - #: rhodecode/templates/pullrequests/pullrequest.html:4 -#: rhodecode/templates/pullrequests/pullrequest.html:12 +#: rhodecode/templates/pullrequests/pullrequest.html:8 msgid "New pull request" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:54 -msgid "refresh overview" -msgstr "" - -#: rhodecode/templates/pullrequests/pullrequest.html:66 +#: rhodecode/templates/pullrequests/pullrequest.html:52 #, fuzzy msgid "Detailed compare view" msgstr "比較顯示" -#: rhodecode/templates/pullrequests/pullrequest.html:70 -#: rhodecode/templates/pullrequests/pullrequest_show.html:100 +#: rhodecode/templates/pullrequests/pullrequest.html:56 +#: rhodecode/templates/pullrequests/pullrequest_show.html:137 msgid "Pull request reviewers" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:79 -#: rhodecode/templates/pullrequests/pullrequest_show.html:112 +#: rhodecode/templates/pullrequests/pullrequest.html:65 +#: rhodecode/templates/pullrequests/pullrequest_show.html:149 #, fuzzy msgid "owner" msgstr "擁有者" -#: rhodecode/templates/pullrequests/pullrequest.html:91 -#: rhodecode/templates/pullrequests/pullrequest_show.html:127 +#: rhodecode/templates/pullrequests/pullrequest.html:77 msgid "Add reviewer to this pull request." msgstr "" -#: rhodecode/templates/pullrequests/pullrequest.html:97 +#: rhodecode/templates/pullrequests/pullrequest.html:83 #, fuzzy msgid "Create new pull request" msgstr "建立使用者 %s" -#: rhodecode/templates/pullrequests/pullrequest.html:106 +#: rhodecode/templates/pullrequests/pullrequest.html:92 +#: rhodecode/templates/pullrequests/pullrequest_data.html:14 #: rhodecode/templates/pullrequests/pullrequest_show.html:25 -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:33 #, fuzzy msgid "Title" msgstr "寫" -#: rhodecode/templates/pullrequests/pullrequest.html:123 +#: rhodecode/templates/pullrequests/pullrequest.html:109 msgid "Send pull request" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:23 -#, python-format -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" +#: rhodecode/templates/pullrequests/pullrequest_show.html:4 +#, fuzzy, python-format +msgid "%s Pull Request #%s" +msgstr "建立使用者 %s" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:35 +#, fuzzy +msgid "Review status" msgstr "變更" -#: rhodecode/templates/pullrequests/pullrequest_show.html:36 +#: rhodecode/templates/pullrequests/pullrequest_show.html:40 msgid "Pull request status" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:44 +#: rhodecode/templates/pullrequests/pullrequest_show.html:53 msgid "Still not reviewed by" msgstr "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:48 +#: rhodecode/templates/pullrequests/pullrequest_show.html:57 #, python-format msgid "%d reviewer" msgid_plural "%d reviewers" msgstr[0] "" -#: rhodecode/templates/pullrequests/pullrequest_show.html:50 -msgid "pull request was reviewed by all reviewers" -msgstr "" - -#: rhodecode/templates/pullrequests/pullrequest_show.html:58 +#: rhodecode/templates/pullrequests/pullrequest_show.html:59 +msgid "Pull request was reviewed by all reviewers" +msgstr "" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:65 +#, fuzzy +msgid "Origin repository" +msgstr "Git 版本庫" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:89 #, fuzzy msgid "Created on" msgstr "建立使用者 %s" -#: rhodecode/templates/pullrequests/pullrequest_show.html:65 +#: rhodecode/templates/pullrequests/pullrequest_show.html:102 #, fuzzy msgid "Compare view" msgstr "比較顯示" -#: rhodecode/templates/pullrequests/pullrequest_show.html:112 +#: rhodecode/templates/pullrequests/pullrequest_show.html:149 #, fuzzy msgid "reviewer" msgstr "" +#: rhodecode/templates/pullrequests/pullrequest_show.html:164 +#, fuzzy +msgid "Add or remove reviewer to this pull request." +msgstr "確認移除這個版本庫" + +#: rhodecode/templates/pullrequests/pullrequest_show.html:168 +#, fuzzy +msgid "Save changes" +msgstr "沒有修改" + #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4 -#, fuzzy -msgid "all pull requests" +#, fuzzy, python-format +msgid "%s Pull Requests" msgstr "建立使用者 %s" -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:12 -msgid "All pull requests" -msgstr "" - -#: rhodecode/templates/pullrequests/pullrequest_show_all.html:27 -msgid "Closed" -msgstr "" - #: rhodecode/templates/search/search.html:6 -#, fuzzy, python-format -msgid "Search \"%s\" in repository: %s" +#, fuzzy +msgid "Search repository" msgstr "於版本庫:" #: rhodecode/templates/search/search.html:8 -#, fuzzy, python-format -msgid "Search \"%s\" in all repositories" -msgstr "於所有的版本庫" - -#: rhodecode/templates/search/search.html:12 -#: rhodecode/templates/search/search.html:32 -#, fuzzy, python-format -msgid "Search in repository: %s" -msgstr "於版本庫:" - -#: rhodecode/templates/search/search.html:14 -#: rhodecode/templates/search/search.html:34 +#: rhodecode/templates/search/search.html:16 #, fuzzy msgid "Search in all repositories" msgstr "於所有的版本庫" -#: rhodecode/templates/search/search.html:48 +#: rhodecode/templates/search/search.html:50 msgid "Search term" msgstr "搜尋關鍵字" -#: rhodecode/templates/search/search.html:60 +#: rhodecode/templates/search/search.html:62 msgid "Search in" msgstr "搜尋範圍" -#: rhodecode/templates/search/search.html:63 +#: rhodecode/templates/search/search.html:65 msgid "File contents" msgstr "文件內容" -#: rhodecode/templates/search/search.html:64 +#: rhodecode/templates/search/search.html:66 #, fuzzy msgid "Commit messages" msgstr "遞交資訊" -#: rhodecode/templates/search/search.html:65 +#: rhodecode/templates/search/search.html:67 msgid "File names" msgstr "檔案名稱" @@ -4118,42 +4385,25 @@ msgstr "檔案名稱" msgid "Permission denied" msgstr "權限不足" -#: rhodecode/templates/settings/repo_settings.html:5 -#, fuzzy, python-format -msgid "%s Settings" -msgstr "設定" - -#: rhodecode/templates/settings/repo_settings.html:102 -#, fuzzy -msgid "Delete repository" -msgstr "刪除版本庫 %s" - -#: rhodecode/templates/settings/repo_settings.html:109 -#, fuzzy -msgid "Remove repo" -msgstr "移除" - #: rhodecode/templates/shortlog/shortlog.html:5 #, fuzzy, python-format -msgid "%s Shortlog" -msgstr "簡短紀錄" - +msgid "%s Lightweight Changelog" +msgstr "檔案修改" + +#: rhodecode/templates/shortlog/shortlog.html:11 #: 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 "修訂" +msgid "Lightweight Changelog" +msgstr "" #: rhodecode/templates/shortlog/shortlog_data.html:7 -msgid "age" -msgstr "" - -#: rhodecode/templates/shortlog/shortlog_data.html:8 -msgid "author" -msgstr "作者" +#, fuzzy +msgid "Age" +msgstr "標籤" + +#: rhodecode/templates/shortlog/shortlog_data.html:20 +#, python-format +msgid "Click to open associated pull request #%s" +msgstr "" #: rhodecode/templates/shortlog/shortlog_data.html:75 msgid "Add or upload files directly via RhodeCode" @@ -4173,162 +4423,175 @@ msgstr "Git 版本庫" msgid "%s Summary" msgstr "概況" -#: rhodecode/templates/summary/summary.html:12 -msgid "summary" -msgstr "概況" - -#: rhodecode/templates/summary/summary.html:20 -#, fuzzy, python-format -msgid "repo %s ATOM feed" -msgstr "訂閱 %s atom" - -#: rhodecode/templates/summary/summary.html:21 +#: rhodecode/templates/summary/summary.html:16 #, fuzzy, python-format -msgid "repo %s RSS feed" +msgid "%s ATOM feed" +msgstr "訂閱 %s atom" + +#: rhodecode/templates/summary/summary.html:17 +#, fuzzy, python-format +msgid "%s RSS feed" msgstr "訂閱 %s rss" -#: rhodecode/templates/summary/summary.html:49 -#: rhodecode/templates/summary/summary.html:52 -#, fuzzy -msgid "ATOM" -msgstr "作者" - -#: rhodecode/templates/summary/summary.html:70 +#: rhodecode/templates/summary/summary.html:62 #, fuzzy, python-format msgid "Repository locked by %s" msgstr "個版本庫" -#: rhodecode/templates/summary/summary.html:72 +#: rhodecode/templates/summary/summary.html:64 #, fuzzy msgid "Repository unlocked" msgstr "個版本庫" -#: rhodecode/templates/summary/summary.html:91 +#: rhodecode/templates/summary/summary.html:83 #, fuzzy, python-format msgid "Non changable ID %s" msgstr "沒有修改" -#: rhodecode/templates/summary/summary.html:96 -msgid "public" +#: rhodecode/templates/summary/summary.html:88 +#, fuzzy +msgid "Public" msgstr "公開" -#: rhodecode/templates/summary/summary.html:104 -msgid "remote clone" +#: rhodecode/templates/summary/summary.html:88 +#: rhodecode/templates/summary/summary.html:89 +msgid "Fork of" +msgstr "" + +#: rhodecode/templates/summary/summary.html:96 +#, fuzzy +msgid "Remote clone" msgstr "遠端複製" -#: rhodecode/templates/summary/summary.html:125 +#: rhodecode/templates/summary/summary.html:117 msgid "Contact" msgstr "聯絡方式" -#: rhodecode/templates/summary/summary.html:139 +#: rhodecode/templates/summary/summary.html:131 msgid "Clone url" msgstr "複製連結" -#: rhodecode/templates/summary/summary.html:142 +#: rhodecode/templates/summary/summary.html:136 #, fuzzy msgid "Show by Name" msgstr "顯示更多" -#: rhodecode/templates/summary/summary.html:143 +#: rhodecode/templates/summary/summary.html:137 msgid "Show by ID" msgstr "" -#: rhodecode/templates/summary/summary.html:151 +#: rhodecode/templates/summary/summary.html:143 #, fuzzy msgid "Trending files" msgstr "編輯檔案" -#: rhodecode/templates/summary/summary.html:159 -#: rhodecode/templates/summary/summary.html:175 -#: rhodecode/templates/summary/summary.html:203 +#: rhodecode/templates/summary/summary.html:151 +#: rhodecode/templates/summary/summary.html:167 +#: rhodecode/templates/summary/summary.html:232 msgid "enable" msgstr "啟用" -#: rhodecode/templates/summary/summary.html:167 +#: rhodecode/templates/summary/summary.html:159 msgid "Download" msgstr "下載" -#: rhodecode/templates/summary/summary.html:171 +#: rhodecode/templates/summary/summary.html:163 msgid "There are no downloads yet" msgstr "沒有任何下載" -#: rhodecode/templates/summary/summary.html:173 +#: rhodecode/templates/summary/summary.html:165 msgid "Downloads are disabled for this repository" msgstr "這個版本庫的下載已停用" -#: rhodecode/templates/summary/summary.html:179 +#: rhodecode/templates/summary/summary.html:171 #, fuzzy msgid "Download as zip" msgstr "下載原始文件" -#: rhodecode/templates/summary/summary.html:182 +#: rhodecode/templates/summary/summary.html:174 msgid "Check this to download archive with subrepos" msgstr "" -#: rhodecode/templates/summary/summary.html:182 +#: rhodecode/templates/summary/summary.html:174 msgid "with subrepos" msgstr "" -#: rhodecode/templates/summary/summary.html:195 +#: rhodecode/templates/summary/summary.html:197 +#, fuzzy +msgid "Repository Size" +msgstr "個版本庫" + +#: rhodecode/templates/summary/summary.html:204 +#: rhodecode/templates/summary/summary.html:206 +#, fuzzy +msgid "Feed" +msgstr "已建立分支" + +#: rhodecode/templates/summary/summary.html:224 msgid "Commit activity by day / author" msgstr "" -#: rhodecode/templates/summary/summary.html:206 +#: rhodecode/templates/summary/summary.html:235 msgid "Stats gathered: " msgstr "" -#: rhodecode/templates/summary/summary.html:227 -msgid "Shortlog" -msgstr "簡短紀錄" - -#: rhodecode/templates/summary/summary.html:229 +#: rhodecode/templates/summary/summary.html:256 +#, fuzzy +msgid "Latest changes" +msgstr "最後修改" + +#: rhodecode/templates/summary/summary.html:258 #, fuzzy msgid "Quick start" msgstr "快速過濾..." -#: rhodecode/templates/summary/summary.html:243 +#: rhodecode/templates/summary/summary.html:272 #, python-format msgid "Readme file at revision '%s'" msgstr "" -#: rhodecode/templates/summary/summary.html:246 +#: rhodecode/templates/summary/summary.html:275 msgid "Permalink to this readme" msgstr "" -#: rhodecode/templates/summary/summary.html:304 +#: rhodecode/templates/summary/summary.html:333 #, python-format msgid "Download %s as %s" msgstr "下載 %s 為 %s" -#: rhodecode/templates/summary/summary.html:661 +#: rhodecode/templates/summary/summary.html:380 +msgid "files" +msgstr "檔案" + +#: rhodecode/templates/summary/summary.html:690 msgid "commits" msgstr "遞交" -#: rhodecode/templates/summary/summary.html:662 +#: rhodecode/templates/summary/summary.html:691 msgid "files added" msgstr "多個檔案新增" -#: rhodecode/templates/summary/summary.html:663 +#: rhodecode/templates/summary/summary.html:692 msgid "files changed" msgstr "多個檔案修改" -#: rhodecode/templates/summary/summary.html:664 +#: rhodecode/templates/summary/summary.html:693 msgid "files removed" msgstr "移除多個檔案" -#: rhodecode/templates/summary/summary.html:667 +#: rhodecode/templates/summary/summary.html:695 msgid "commit" msgstr "遞交" -#: rhodecode/templates/summary/summary.html:668 +#: rhodecode/templates/summary/summary.html:696 msgid "file added" msgstr "檔案新增" -#: rhodecode/templates/summary/summary.html:669 +#: rhodecode/templates/summary/summary.html:697 msgid "file changed" msgstr "檔案修改" -#: rhodecode/templates/summary/summary.html:670 +#: rhodecode/templates/summary/summary.html:698 msgid "file removed" msgstr "移除檔案" @@ -4337,24 +4600,8 @@ msgstr "移除檔案" msgid "%s Tags" msgstr "之前" -#: rhodecode/templates/tags/tags.html:29 +#: rhodecode/templates/tags/tags.html:26 #, fuzzy msgid "Compare tags" msgstr "比較顯示" -#~ msgid "" -#~ "%s repository is not mapped to db" -#~ " perhaps it was created or renamed" -#~ " from the file system please run " -#~ "the application again in order to " -#~ "rescan repositories" -#~ msgstr "" - -#~ 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 "" - diff --git a/rhodecode/lib/__init__.py b/rhodecode/lib/__init__.py --- a/rhodecode/lib/__init__.py +++ b/rhodecode/lib/__init__.py @@ -19,6 +19,7 @@ def get_current_revision(quiet=False): return (tip.revision, tip.short_id) except Exception, err: if not quiet: - print ("Cannot retrieve rhodecode's revision. Original error " - "was: %s" % err) + print ("WARNING: Cannot retrieve rhodecode's revision. " + "disregard this if you don't know what that means. " + "Original error was: %s" % err) return None diff --git a/rhodecode/lib/annotate.py b/rhodecode/lib/annotate.py --- a/rhodecode/lib/annotate.py +++ b/rhodecode/lib/annotate.py @@ -10,14 +10,13 @@ :copyright: (C) 2011-2012 Marcin Kuzminski :license: GPLv3, see COPYING for more details. """ +import StringIO from rhodecode.lib.vcs.exceptions import VCSError from rhodecode.lib.vcs.nodes import FileNode from pygments.formatters import HtmlFormatter from pygments import highlight -import StringIO - def annotate_highlight(filenode, annotate_from_changeset_func=None, order=None, headers=None, **options): @@ -34,11 +33,12 @@ def annotate_highlight(filenode, annotat :param headers: dictionary with headers (keys are whats in ``order`` parameter) """ + from rhodecode.lib.utils import get_custom_lexer options['linenos'] = True formatter = AnnotateHtmlFormatter(filenode=filenode, order=order, headers=headers, annotate_from_changeset_func=annotate_from_changeset_func, **options) - lexer = filenode.lexer + lexer = get_custom_lexer(filenode.extension) or filenode.lexer highlighted = highlight(filenode.content, lexer, formatter) return highlighted diff --git a/rhodecode/lib/auth.py b/rhodecode/lib/auth.py --- a/rhodecode/lib/auth.py +++ b/rhodecode/lib/auth.py @@ -40,7 +40,8 @@ from rhodecode import __platform__, is_w from rhodecode.model.meta import Session from rhodecode.lib.utils2 import str2bool, safe_unicode -from rhodecode.lib.exceptions import LdapPasswordError, LdapUsernameError +from rhodecode.lib.exceptions import LdapPasswordError, LdapUsernameError,\ + LdapImportError from rhodecode.lib.utils import get_repo_slug, get_repos_group_slug from rhodecode.lib.auth_ldap import AuthLdap @@ -241,7 +242,7 @@ def authenticate(username, password): Session().commit() return True - except (LdapUsernameError, LdapPasswordError,): + except (LdapUsernameError, LdapPasswordError, LdapImportError): pass except (Exception,): log.error(traceback.format_exc()) @@ -381,7 +382,7 @@ class AuthUser(object): if not is_user_loaded: # if we cannot authenticate user try anonymous - if self.anonymous_user.active is True: + if self.anonymous_user.active: user_model.fill_data(self, user_id=self.anonymous_user.user_id) # then we set this user is logged in self.is_authenticated = True @@ -401,6 +402,22 @@ class AuthUser(object): return self.admin @property + def repos_admin(self): + """ + Returns list of repositories you're an admin of + """ + return [x[0] for x in self.permissions['repositories'].iteritems() + if x[1] == 'repository.admin'] + + @property + def groups_admin(self): + """ + Returns list of repository groups you're an admin of + """ + return [x[0] for x in self.permissions['repositories_groups'].iteritems() + if x[1] == 'group.admin'] + + @property def ip_allowed(self): """ Checks if ip_addr used in constructor is allowed from defined list of @@ -663,7 +680,6 @@ class HasRepoPermissionAnyDecorator(Perm def check_permissions(self): repo_name = get_repo_slug(request) - try: user_perms = set([self.user_perms['repositories'][repo_name]]) except KeyError: @@ -686,6 +702,7 @@ class HasReposGroupPermissionAllDecorato user_perms = set([self.user_perms['repositories_groups'][group_name]]) except KeyError: return False + if self.required_perms.issubset(user_perms): return True return False @@ -699,11 +716,11 @@ class HasReposGroupPermissionAnyDecorato def check_permissions(self): group_name = get_repos_group_slug(request) - try: user_perms = set([self.user_perms['repositories_groups'][group_name]]) except KeyError: return False + if self.required_perms.intersection(user_perms): return True return False @@ -726,7 +743,8 @@ class PermsFunction(object): self.repo_name = None self.group_name = None - def __call__(self, check_Location=''): + def __call__(self, check_location=''): + #TODO: put user as attribute here user = request.user cls_name = self.__class__.__name__ check_scope = { @@ -739,19 +757,19 @@ class PermsFunction(object): }.get(cls_name, '?') log.debug('checking cls:%s %s usr:%s %s @ %s', cls_name, self.required_perms, user, check_scope, - check_Location or 'unspecified location') + check_location or 'unspecified location') if not user: log.debug('Empty request user') return False self.user_perms = user.permissions if self.check_permissions(): log.debug('Permission to %s granted for user: %s @ %s', self.repo_name, user, - check_Location or 'unspecified location') + check_location or 'unspecified location') return True else: log.debug('Permission to %s denied for user: %s @ %s', self.repo_name, user, - check_Location or 'unspecified location') + check_location or 'unspecified location') return False def check_permissions(self): @@ -774,9 +792,9 @@ class HasPermissionAny(PermsFunction): class HasRepoPermissionAll(PermsFunction): - def __call__(self, repo_name=None, check_Location=''): + def __call__(self, repo_name=None, check_location=''): self.repo_name = repo_name - return super(HasRepoPermissionAll, self).__call__(check_Location) + return super(HasRepoPermissionAll, self).__call__(check_location) def check_permissions(self): if not self.repo_name: @@ -794,9 +812,9 @@ class HasRepoPermissionAll(PermsFunction class HasRepoPermissionAny(PermsFunction): - def __call__(self, repo_name=None, check_Location=''): + def __call__(self, repo_name=None, check_location=''): self.repo_name = repo_name - return super(HasRepoPermissionAny, self).__call__(check_Location) + return super(HasRepoPermissionAny, self).__call__(check_location) def check_permissions(self): if not self.repo_name: @@ -814,9 +832,9 @@ class HasRepoPermissionAny(PermsFunction class HasReposGroupPermissionAny(PermsFunction): - def __call__(self, group_name=None, check_Location=''): + def __call__(self, group_name=None, check_location=''): self.group_name = group_name - return super(HasReposGroupPermissionAny, self).__call__(check_Location) + return super(HasReposGroupPermissionAny, self).__call__(check_location) def check_permissions(self): try: @@ -831,9 +849,9 @@ class HasReposGroupPermissionAny(PermsFu class HasReposGroupPermissionAll(PermsFunction): - def __call__(self, group_name=None, check_Location=''): + def __call__(self, group_name=None, check_location=''): self.group_name = group_name - return super(HasReposGroupPermissionAll, self).__call__(check_Location) + return super(HasReposGroupPermissionAll, self).__call__(check_location) def check_permissions(self): try: 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 @@ -26,7 +26,7 @@ import logging from rhodecode.lib.exceptions import LdapConnectionError, LdapUsernameError, \ - LdapPasswordError + LdapPasswordError, LdapImportError from rhodecode.lib.utils2 import safe_str log = logging.getLogger(__name__) @@ -36,7 +36,7 @@ try: import ldap except ImportError: # means that python-ldap is not installed - pass + ldap = None class AuthLdap(object): @@ -45,6 +45,9 @@ class AuthLdap(object): tls_kind='PLAIN', tls_reqcert='DEMAND', ldap_version=3, ldap_filter='(&(objectClass=user)(!(objectClass=computer)))', search_scope='SUBTREE', attr_login='uid'): + if ldap is None: + raise LdapImportError + self.ldap_version = ldap_version ldap_server_type = 'ldap' diff --git a/rhodecode/lib/base.py b/rhodecode/lib/base.py --- a/rhodecode/lib/base.py +++ b/rhodecode/lib/base.py @@ -32,6 +32,22 @@ from rhodecode.model.meta import Session log = logging.getLogger(__name__) +def _filter_proxy(ip): + """ + HEADERS can have mutliple ips inside the left-most being the original + client, and each successive proxy that passed the request adding the IP + address where it received the request from. + + :param ip: + """ + if ',' in ip: + _ips = ip.split(',') + _first_ip = _ips[0].strip() + log.debug('Got multiple IPs %s, using %s' % (','.join(_ips), _first_ip)) + return _first_ip + return ip + + def _get_ip_addr(environ): proxy_key = 'HTTP_X_REAL_IP' proxy_key2 = 'HTTP_X_FORWARDED_FOR' @@ -39,22 +55,14 @@ def _get_ip_addr(environ): ip = environ.get(proxy_key) if ip: - return ip + return _filter_proxy(ip) ip = environ.get(proxy_key2) if ip: - return ip + return _filter_proxy(ip) ip = environ.get(def_key, '0.0.0.0') - - # HEADERS can have mutliple ips inside - # the left-most being the original client, and each successive proxy - # that passed the request adding the IP address where it received the - # request from. - if ',' in ip: - ip = ip.split(',')[0].strip() - - return ip + return _filter_proxy(ip) def _get_access_path(environ): @@ -127,7 +135,7 @@ class BaseVCSController(object): if len(by_id) == 2 and by_id[1].isdigit(): _repo_name = Repository.get(by_id[1]).repo_name data[1] = _repo_name - except: + except Exception: log.debug('Failed to extract repo_name from id %s' % ( traceback.format_exc() ) @@ -265,8 +273,8 @@ class BaseController(WSGIController): 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.visual.repository_fields = str2bool(rc_config.get('rhodecode_repository_fields')) + c.repo_name = get_repo_slug(request) # can be empty c.backends = BACKENDS.keys() c.unread_notifications = NotificationModel()\ .get_unread_cnt_for_user(c.rhodecode_user.user_id) @@ -280,7 +288,6 @@ class BaseController(WSGIController): # WSGIController.__call__ dispatches to the Controller method # the request is routed to. This routing information is # available in environ['pylons.routes_dict'] - start = time.time() try: self.ip_addr = _get_ip_addr(environ) # make sure that we update permissions each time we call controller @@ -301,10 +308,6 @@ class BaseController(WSGIController): ) return WSGIController.__call__(self, environ, start_response) finally: - log.info('IP: %s Request to %s time: %.3fs' % ( - _get_ip_addr(environ), - safe_unicode(_get_access_path(environ)), time.time() - start) - ) meta.Session.remove() @@ -317,6 +320,7 @@ class BaseRepoController(BaseController) c.rhodecode_db_repo: instance of db c.repository_followers: number of followers c.repository_forks: number of forks + c.repository_following: weather the current user is following the current repo """ def __before__(self): @@ -337,3 +341,5 @@ class BaseRepoController(BaseController) c.repository_followers = self.scm_model.get_followers(dbr) c.repository_forks = self.scm_model.get_forks(dbr) c.repository_pull_requests = self.scm_model.get_pull_requests(dbr) + c.repository_following = self.scm_model.is_following_repo(c.repo_name, + self.rhodecode_user.user_id) 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 @@ -59,6 +59,7 @@ class ResultWrapper(object): def run_task(task, *args, **kwargs): + global CELERY_ON if CELERY_ON: try: t = task.apply_async(args=args, kwargs=kwargs) @@ -68,6 +69,7 @@ def run_task(task, *args, **kwargs): except socket.error, e: if isinstance(e, IOError) and e.errno == 111: log.debug('Unable to connect to celeryd. Sync execution') + CELERY_ON = False else: log.error(traceback.format_exc()) except KeyError, e: @@ -122,7 +124,7 @@ def dbsession(func): ret = func(*fargs, **fkwargs) return ret finally: - if CELERY_ON and CELERY_EAGER is False: + if CELERY_ON and not CELERY_EAGER: meta.Session.remove() return decorator(__wrapper, func) 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 @@ -87,7 +87,7 @@ def whoosh_index(repo_location, full_ind @task(ignore_result=True) @dbsession -def get_commits_stats(repo_name, ts_min_y, ts_max_y): +def get_commits_stats(repo_name, ts_min_y, ts_max_y, recurse_limit=100): log = get_logger(get_commits_stats) DBS = get_session() lockkey = __get_lockkey('get_commits_stats', repo_name, ts_min_y, @@ -160,9 +160,9 @@ def get_commits_stats(repo_name, ts_min_ co_day_auth_aggr[akc(cs.author)]['data']] time_pos = l.index(k) except ValueError: - time_pos = False + time_pos = None - if time_pos >= 0 and time_pos is not False: + if time_pos >= 0 and time_pos is not None: datadict = \ co_day_auth_aggr[akc(cs.author)]['data'][time_pos] @@ -240,8 +240,12 @@ def get_commits_stats(repo_name, ts_min_ lock.release() # execute another task if celery is enabled - if len(repo.revisions) > 1 and CELERY_ON: - run_task(get_commits_stats, repo_name, ts_min_y, ts_max_y) + if len(repo.revisions) > 1 and CELERY_ON and recurse_limit > 0: + recurse_limit -= 1 + run_task(get_commits_stats, repo_name, ts_min_y, ts_max_y, + recurse_limit) + if recurse_limit <= 0: + log.debug('Breaking recursive mode due to reach of recurse limit') return True except LockHeld: log.info('LockHeld') @@ -250,7 +254,7 @@ def get_commits_stats(repo_name, ts_min_ @task(ignore_result=True) @dbsession -def send_email(recipients, subject, body, html_body=''): +def send_email(recipients, subject, body='', html_body=''): """ Sends an email with defined parameters from the .ini files. @@ -278,7 +282,7 @@ def send_email(recipients, subject, body mail_port = email_config.get('smtp_port') tls = str2bool(email_config.get('smtp_use_tls')) ssl = str2bool(email_config.get('smtp_use_ssl')) - debug = str2bool(config.get('debug')) + debug = str2bool(email_config.get('debug')) smtp_auth = email_config.get('smtp_auth') if not mail_server: @@ -363,6 +367,7 @@ def create_repo_fork(form_data, cur_user fork_name, '', DBS) # finally commit at latest possible stage DBS.commit() + fork_repo.update_changeset_cache() def __get_codes_stats(repo_name): 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 @@ -43,6 +43,7 @@ from sqlalchemy.engine import create_eng from rhodecode.model.repos_group import ReposGroupModel #from rhodecode.model import meta from rhodecode.model.meta import Session, Base +from rhodecode.model.repo import RepoModel log = logging.getLogger(__name__) @@ -66,12 +67,11 @@ class DbManage(object): 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 + force_ask = self.cli_args.get('force_ask') + if force_ask is not None: + global ask_ok + ask_ok = lambda *args, **kwargs: force_ask def init_db(self): engine = create_engine(self.dburi, echo=self.log_sql) @@ -289,6 +289,9 @@ class DbManage(object): def step_10(self): pass + def step_11(self): + self.klass.update_repo_info() + upgrade_steps = [0] + range(curr_version + 1, __dbversion__ + 1) # CALL THE PROPER ORDER OF STEPS TO PERFORM FULL UPGRADE @@ -315,7 +318,7 @@ class DbManage(object): try: self.sa.add(paths) self.sa.commit() - except: + except Exception: self.sa.rollback() raise @@ -335,7 +338,7 @@ class DbManage(object): try: self.sa.add(def_user) self.sa.commit() - except: + except Exception: self.sa.rollback() raise @@ -349,7 +352,7 @@ class DbManage(object): try: self.sa.add(hgsettings3) self.sa.commit() - except: + except Exception: self.sa.rollback() raise @@ -549,6 +552,9 @@ class DbManage(object): self.populate_default_permissions() return fixed + def update_repo_info(self): + RepoModel.update_repoinfo() + def config_prompt(self, test_repo_path='', retries=3): defaults = self.cli_args _path = defaults.get('repos_location') @@ -582,7 +588,7 @@ class DbManage(object): if retries == 0: sys.exit('max retries reached') - if path_ok is False: + if not path_ok: retries -= 1 return self.config_prompt(test_repo_path, retries) @@ -704,7 +710,8 @@ class DbManage(object): reg_perm.permission = perm self.sa.add(reg_perm) - def finish(self): + @staticmethod + def check_waitress(): """ Function executed at the end of setup """ diff --git a/rhodecode/lib/dbmigrate/__init__.py b/rhodecode/lib/dbmigrate/__init__.py --- a/rhodecode/lib/dbmigrate/__init__.py +++ b/rhodecode/lib/dbmigrate/__init__.py @@ -41,7 +41,7 @@ class UpgradeDb(BasePasterCommand): min_args = 1 usage = "CONFIG_FILE" - summary = "Upgrades current db to newer version given configuration file" + summary = "Upgrades current db to newer version" group_name = "RhodeCode" parser = Command.standard_parser(verbose=True) diff --git a/rhodecode/lib/dbmigrate/schema/db_1_2_0.py b/rhodecode/lib/dbmigrate/schema/db_1_2_0.py --- a/rhodecode/lib/dbmigrate/schema/db_1_2_0.py +++ b/rhodecode/lib/dbmigrate/schema/db_1_2_0.py @@ -41,7 +41,7 @@ from rhodecode.lib.vcs.utils.lazy import from rhodecode.lib.utils2 import str2bool, safe_str, get_changeset_safe, \ generate_api_key, safe_unicode -from rhodecode.lib.exceptions import UsersGroupsAssignedException +from rhodecode.lib.exceptions import UserGroupsAssignedException from rhodecode.lib.compat import json from rhodecode.model.meta import Base, Session @@ -282,7 +282,7 @@ class User(Base, BaseModel): 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') - group_member = relationship('UsersGroupMember', cascade='all') + group_member = relationship('UserGroupMember', cascade='all') @property def full_contact(self): @@ -361,7 +361,7 @@ class UserLog(Base, BaseModel): repository = relationship('Repository') -class UsersGroup(Base, BaseModel): +class UserGroup(Base, BaseModel): __tablename__ = 'users_groups' __table_args__ = {'extend_existing':True} @@ -369,7 +369,7 @@ class UsersGroup(Base, BaseModel): users_group_name = Column("users_group_name", String(length=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) - members = relationship('UsersGroupMember', cascade="all, delete, delete-orphan", lazy="joined") + members = relationship('UserGroupMember', cascade="all, delete, delete-orphan", lazy="joined") def __repr__(self): return '' % (self.users_group_name) @@ -425,7 +425,7 @@ class UsersGroup(Base, BaseModel): if v: v = [v] if isinstance(v, basestring) else v for u_id in set(v): - member = UsersGroupMember(users_group_id, u_id) + member = UserGroupMember(users_group_id, u_id) members_list.append(member) setattr(users_group, 'members', members_list) setattr(users_group, k, v) @@ -442,12 +442,12 @@ class UsersGroup(Base, BaseModel): try: # check if this group is not assigned to repo - assigned_groups = UsersGroupRepoToPerm.query()\ - .filter(UsersGroupRepoToPerm.users_group_id == + assigned_groups = UserGroupRepoToPerm.query()\ + .filter(UserGroupRepoToPerm.users_group_id == users_group_id).all() if assigned_groups: - raise UsersGroupsAssignedException('RepoGroup assigned to %s' % + raise UserGroupsAssignedException('RepoGroup assigned to %s' % assigned_groups) users_group = cls.get(users_group_id, cache=False) @@ -458,7 +458,7 @@ class UsersGroup(Base, BaseModel): Session.rollback() raise -class UsersGroupMember(Base, BaseModel): +class UserGroupMember(Base, BaseModel): __tablename__ = 'users_groups_members' __table_args__ = {'extend_existing':True} @@ -467,7 +467,7 @@ class UsersGroupMember(Base, BaseModel): 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') + users_group = relationship('UserGroup') def __init__(self, gr_id='', u_id=''): self.users_group_id = gr_id @@ -475,7 +475,7 @@ class UsersGroupMember(Base, BaseModel): @staticmethod def add_user_to_group(group, user): - ugm = UsersGroupMember() + ugm = UserGroupMember() ugm.users_group = group ugm.user = user Session.add(ugm) @@ -505,7 +505,7 @@ class Repository(Base, BaseModel): 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') + users_group_to_perm = relationship('UserGroupRepoToPerm', cascade='all') stats = relationship('Statistics', cascade='all', uselist=False) followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id', cascade='all') @@ -909,7 +909,7 @@ class UserToPerm(Base, BaseModel): except: Session.rollback() -class UsersGroupRepoToPerm(Base, BaseModel): +class UserGroupRepoToPerm(Base, BaseModel): __tablename__ = 'users_group_repo_to_perm' __table_args__ = (UniqueConstraint('repository_id', 'users_group_id', 'permission_id'), {'extend_existing':True}) users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) @@ -917,21 +917,21 @@ class UsersGroupRepoToPerm(Base, BaseMod 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') + users_group = relationship('UserGroup') permission = relationship('Permission') repository = relationship('Repository') def __repr__(self): return ' %s >' % (self.users_group, self.repository) -class UsersGroupToPerm(Base, BaseModel): +class UserGroupToPerm(Base, BaseModel): __tablename__ = 'users_group_to_perm' __table_args__ = {'extend_existing':True} 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') + users_group = relationship('UserGroup') permission = relationship('Permission') diff --git a/rhodecode/lib/dbmigrate/schema/db_1_3_0.py b/rhodecode/lib/dbmigrate/schema/db_1_3_0.py --- a/rhodecode/lib/dbmigrate/schema/db_1_3_0.py +++ b/rhodecode/lib/dbmigrate/schema/db_1_3_0.py @@ -305,7 +305,7 @@ class User(Base, BaseModel): 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') + group_member = relationship('UserGroupMember', cascade='all') notifications = relationship('UserNotification', cascade='all') # notifications assigned to this user @@ -423,7 +423,7 @@ class UserLog(Base, BaseModel): repository = relationship('Repository', cascade='') -class UsersGroup(Base, BaseModel): +class UserGroup(Base, BaseModel): __tablename__ = 'users_groups' __table_args__ = ( {'extend_existing': True, 'mysql_engine':'InnoDB', @@ -434,9 +434,9 @@ class UsersGroup(Base, BaseModel): users_group_name = Column("users_group_name", String(length=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) - 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') + members = relationship('UserGroupMember', cascade="all, delete, delete-orphan", lazy="joined") + users_group_to_perm = relationship('UserGroupToPerm', cascade='all') + users_group_repo_to_perm = relationship('UserGroupRepoToPerm', cascade='all') def __unicode__(self): return u'' % (self.users_group_name) @@ -465,7 +465,7 @@ class UsersGroup(Base, BaseModel): return users_group.get(users_group_id) -class UsersGroupMember(Base, BaseModel): +class UserGroupMember(Base, BaseModel): __tablename__ = 'users_groups_members' __table_args__ = ( {'extend_existing': True, 'mysql_engine':'InnoDB', @@ -477,7 +477,7 @@ class UsersGroupMember(Base, BaseModel): 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') + users_group = relationship('UserGroup') def __init__(self, gr_id='', u_id=''): self.users_group_id = gr_id @@ -510,7 +510,7 @@ class Repository(Base, BaseModel): 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') + users_group_to_perm = relationship('UserGroupRepoToPerm', cascade='all') stats = relationship('Statistics', cascade='all', uselist=False) followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id', cascade='all') @@ -749,7 +749,7 @@ class RepoGroup(Base, BaseModel): group_description = Column("group_description", String(length=10000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) repo_group_to_perm = relationship('UserRepoGroupToPerm', cascade='all', order_by='UserRepoGroupToPerm.group_to_perm_id') - users_group_to_perm = relationship('UsersGroupRepoGroupToPerm', cascade='all') + users_group_to_perm = relationship('UserGroupRepoGroupToPerm', cascade='all') parent_group = relationship('RepoGroup', remote_side=group_id) @@ -946,7 +946,7 @@ class UserToPerm(Base, BaseModel): permission = relationship('Permission', lazy='joined') -class UsersGroupRepoToPerm(Base, BaseModel): +class UserGroupRepoToPerm(Base, BaseModel): __tablename__ = 'users_group_repo_to_perm' __table_args__ = ( UniqueConstraint('repository_id', 'users_group_id', 'permission_id'), @@ -958,7 +958,7 @@ class UsersGroupRepoToPerm(Base, BaseMod 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') + users_group = relationship('UserGroup') permission = relationship('Permission') repository = relationship('Repository') @@ -975,7 +975,7 @@ class UsersGroupRepoToPerm(Base, BaseMod return u' %s >' % (self.users_group, self.repository) -class UsersGroupToPerm(Base, BaseModel): +class UserGroupToPerm(Base, BaseModel): __tablename__ = 'users_group_to_perm' __table_args__ = ( UniqueConstraint('users_group_id', 'permission_id',), @@ -986,7 +986,7 @@ class UsersGroupToPerm(Base, BaseModel): 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') + users_group = relationship('UserGroup') permission = relationship('Permission') @@ -1008,7 +1008,7 @@ class UserRepoGroupToPerm(Base, BaseMode permission = relationship('Permission') -class UsersGroupRepoGroupToPerm(Base, BaseModel): +class UserGroupRepoGroupToPerm(Base, BaseModel): __tablename__ = 'users_group_repo_group_to_perm' __table_args__ = ( UniqueConstraint('users_group_id', 'group_id'), @@ -1021,7 +1021,7 @@ class UsersGroupRepoGroupToPerm(Base, Ba 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') + users_group = relationship('UserGroup') permission = relationship('Permission') group = relationship('RepoGroup') 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 @@ -322,7 +322,7 @@ class User(Base, BaseModel): 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') + group_member = relationship('UserGroupMember', cascade='all') notifications = relationship('UserNotification', cascade='all') # notifications assigned to this user @@ -521,7 +521,7 @@ class UserLog(Base, BaseModel): repository = relationship('Repository', cascade='') -class UsersGroup(Base, BaseModel): +class UserGroup(Base, BaseModel): __tablename__ = 'users_groups' __table_args__ = ( {'extend_existing': True, 'mysql_engine': 'InnoDB', @@ -533,9 +533,9 @@ class UsersGroup(Base, BaseModel): 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') + members = relationship('UserGroupMember', cascade="all, delete, delete-orphan", lazy="joined") + users_group_to_perm = relationship('UserGroupToPerm', cascade='all') + users_group_repo_to_perm = relationship('UserGroupRepoToPerm', cascade='all') def __unicode__(self): return u'' % (self.users_group_name) @@ -575,7 +575,7 @@ class UsersGroup(Base, BaseModel): return data -class UsersGroupMember(Base, BaseModel): +class UserGroupMember(Base, BaseModel): __tablename__ = 'users_groups_members' __table_args__ = ( {'extend_existing': True, 'mysql_engine': 'InnoDB', @@ -587,7 +587,7 @@ class UsersGroupMember(Base, BaseModel): 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') + users_group = relationship('UserGroup') def __init__(self, gr_id='', u_id=''): self.users_group_id = gr_id @@ -625,7 +625,7 @@ class Repository(Base, BaseModel): 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') + users_group_to_perm = relationship('UserGroupRepoToPerm', cascade='all') stats = relationship('Statistics', cascade='all', uselist=False) followers = relationship('UserFollowing', @@ -1013,7 +1013,7 @@ class RepoGroup(Base, BaseModel): 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') + users_group_to_perm = relationship('UserGroupRepoGroupToPerm', cascade='all') parent_group = relationship('RepoGroup', remote_side=group_id) @@ -1277,7 +1277,7 @@ class UserToPerm(Base, BaseModel): permission = relationship('Permission', lazy='joined') -class UsersGroupRepoToPerm(Base, BaseModel): +class UserGroupRepoToPerm(Base, BaseModel): __tablename__ = 'users_group_repo_to_perm' __table_args__ = ( UniqueConstraint('repository_id', 'users_group_id', 'permission_id'), @@ -1289,7 +1289,7 @@ class UsersGroupRepoToPerm(Base, BaseMod 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') + users_group = relationship('UserGroup') permission = relationship('Permission') repository = relationship('Repository') @@ -1306,7 +1306,7 @@ class UsersGroupRepoToPerm(Base, BaseMod return u' %s >' % (self.users_group, self.repository) -class UsersGroupToPerm(Base, BaseModel): +class UserGroupToPerm(Base, BaseModel): __tablename__ = 'users_group_to_perm' __table_args__ = ( UniqueConstraint('users_group_id', 'permission_id',), @@ -1317,7 +1317,7 @@ class UsersGroupToPerm(Base, BaseModel): 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') + users_group = relationship('UserGroup') permission = relationship('Permission') @@ -1339,7 +1339,7 @@ class UserRepoGroupToPerm(Base, BaseMode permission = relationship('Permission') -class UsersGroupRepoGroupToPerm(Base, BaseModel): +class UserGroupRepoGroupToPerm(Base, BaseModel): __tablename__ = 'users_group_repo_group_to_perm' __table_args__ = ( UniqueConstraint('users_group_id', 'group_id'), @@ -1352,7 +1352,7 @@ class UsersGroupRepoGroupToPerm(Base, Ba 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') + users_group = relationship('UserGroup') permission = relationship('Permission') group = relationship('RepoGroup') diff --git a/rhodecode/lib/dbmigrate/schema/db_1_5_0.py b/rhodecode/lib/dbmigrate/schema/db_1_5_0.py --- a/rhodecode/lib/dbmigrate/schema/db_1_5_0.py +++ b/rhodecode/lib/dbmigrate/schema/db_1_5_0.py @@ -341,7 +341,7 @@ class User(Base, BaseModel): 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') + group_member = relationship('UserGroupMember', cascade='all') notifications = relationship('UserNotification', cascade='all') # notifications assigned to this user @@ -541,7 +541,7 @@ class UserLog(Base, BaseModel): repository = relationship('Repository', cascade='') -class UsersGroup(Base, BaseModel): +class UserGroup(Base, BaseModel): __tablename__ = 'users_groups' __table_args__ = ( {'extend_existing': True, 'mysql_engine': 'InnoDB', @@ -553,9 +553,9 @@ class UsersGroup(Base, BaseModel): 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') + members = relationship('UserGroupMember', cascade="all, delete, delete-orphan", lazy="joined") + users_group_to_perm = relationship('UserGroupToPerm', cascade='all') + users_group_repo_to_perm = relationship('UserGroupRepoToPerm', cascade='all') def __unicode__(self): return u'' % (self.users_group_name) @@ -595,7 +595,7 @@ class UsersGroup(Base, BaseModel): return data -class UsersGroupMember(Base, BaseModel): +class UserGroupMember(Base, BaseModel): __tablename__ = 'users_groups_members' __table_args__ = ( {'extend_existing': True, 'mysql_engine': 'InnoDB', @@ -607,7 +607,7 @@ class UsersGroupMember(Base, BaseModel): 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') + users_group = relationship('UserGroup') def __init__(self, gr_id='', u_id=''): self.users_group_id = gr_id @@ -645,7 +645,7 @@ class Repository(Base, BaseModel): 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') + users_group_to_perm = relationship('UserGroupRepoToPerm', cascade='all') stats = relationship('Statistics', cascade='all', uselist=False) followers = relationship('UserFollowing', @@ -1033,7 +1033,7 @@ class RepoGroup(Base, BaseModel): 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') + users_group_to_perm = relationship('UserGroupRepoGroupToPerm', cascade='all') parent_group = relationship('RepoGroup', remote_side=group_id) @@ -1297,7 +1297,7 @@ class UserToPerm(Base, BaseModel): permission = relationship('Permission', lazy='joined') -class UsersGroupRepoToPerm(Base, BaseModel): +class UserGroupRepoToPerm(Base, BaseModel): __tablename__ = 'users_group_repo_to_perm' __table_args__ = ( UniqueConstraint('repository_id', 'users_group_id', 'permission_id'), @@ -1309,7 +1309,7 @@ class UsersGroupRepoToPerm(Base, BaseMod 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') + users_group = relationship('UserGroup') permission = relationship('Permission') repository = relationship('Repository') @@ -1326,7 +1326,7 @@ class UsersGroupRepoToPerm(Base, BaseMod return u' %s >' % (self.users_group, self.repository) -class UsersGroupToPerm(Base, BaseModel): +class UserGroupToPerm(Base, BaseModel): __tablename__ = 'users_group_to_perm' __table_args__ = ( UniqueConstraint('users_group_id', 'permission_id',), @@ -1337,7 +1337,7 @@ class UsersGroupToPerm(Base, BaseModel): 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') + users_group = relationship('UserGroup') permission = relationship('Permission') @@ -1359,7 +1359,7 @@ class UserRepoGroupToPerm(Base, BaseMode permission = relationship('Permission') -class UsersGroupRepoGroupToPerm(Base, BaseModel): +class UserGroupRepoGroupToPerm(Base, BaseModel): __tablename__ = 'users_group_repo_group_to_perm' __table_args__ = ( UniqueConstraint('users_group_id', 'group_id'), @@ -1372,7 +1372,7 @@ class UsersGroupRepoGroupToPerm(Base, Ba 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') + users_group = relationship('UserGroup') permission = relationship('Permission') group = relationship('RepoGroup') diff --git a/rhodecode/lib/dbmigrate/schema/db_1_5_2.py b/rhodecode/lib/dbmigrate/schema/db_1_5_2.py --- a/rhodecode/lib/dbmigrate/schema/db_1_5_2.py +++ b/rhodecode/lib/dbmigrate/schema/db_1_5_2.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- """ - rhodecode.model.db_1_4_0 + rhodecode.model.db_1_5_2 ~~~~~~~~~~~~~~~~~~~~~~~~ Database Models for RhodeCode <=1.5.X @@ -23,6 +23,1926 @@ # 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 +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, remove_prefix +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 in ["ldap_active", + "default_repo_enable_statistics", + "default_repo_enable_locking", + "default_repo_private", + "default_repo_enable_downloads"]: + 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 + + @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' + __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') + 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') + + group_member = relationship('UserGroupMember', 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 ip_addresses(self): + ret = UserIpMap.query().filter(UserIpMap.user == self).all() + return [x.ip_addr for x in ret] + + @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, + ip_addresses=user.ip_addresses + ) + 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 UserIpMap(Base, BaseModel): + __tablename__ = 'user_ip_map' + __table_args__ = ( + UniqueConstraint('user_id', 'ip_addr'), + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'} + ) + __mapper_args__ = {} + + ip_id = Column("ip_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) + ip_addr = Column("ip_addr", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None) + active = Column("active", Boolean(), nullable=True, unique=None, default=True) + user = relationship('User', lazy='joined') + + @classmethod + def _get_ip_range(cls, ip_addr): + from rhodecode.lib import ipaddr + net = ipaddr.IPv4Network(ip_addr) + return [str(net.network), str(net.broadcast)] + + def __json__(self): + return dict( + ip_addr=self.ip_addr, + ip_range=self._get_ip_range(self.ip_addr) + ) + + +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=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) + 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 UserGroup(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('UserGroupMember', cascade="all, delete, delete-orphan", lazy="joined") + users_group_to_perm = relationship('UserGroupToPerm', cascade='all') + users_group_repo_to_perm = relationship('UserGroupRepoToPerm', 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 UserGroupMember(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('UserGroup') + + 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) + _changeset_cache = Column("changeset_cache", LargeBinary(), nullable=True) #JSON data + + 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('UserGroupRepoToPerm', 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 + + @hybrid_property + def changeset_cache(self): + from rhodecode.lib.vcs.backends.base import EmptyChangeset + dummy = EmptyChangeset().__json__() + if not self._changeset_cache: + return dummy + try: + return json.loads(self._changeset_cache) + except TypeError: + return dummy + + @changeset_cache.setter + def changeset_cache(self, val): + try: + self._changeset_cache = json.dumps(val) + except: + log.error(traceback.format_exc()) + + @classmethod + def url_sep(cls): + return URL_SEP + + @classmethod + def normalize_repo_name(cls, repo_name): + """ + Normalizes os specific repo_name to the format internally stored inside + dabatabase using URL_SEP + + :param cls: + :param repo_name: + """ + return cls.url_sep().join(repo_name.split(os.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] + repo_name = cls.normalize_repo_name(repo_name) + 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, + enable_statistics=repo.enable_statistics, + enable_locking=repo.enable_locking, + enable_downloads=repo.enable_downloads, + last_changeset=repo.changeset_cache + ) + + 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 + + def clone_url(self, **override): + from pylons import url + from urlparse import urlparse + import urllib + parsed_url = urlparse(url('home', qualified=True)) + default_clone_uri = '%(scheme)s://%(user)s%(pass)s%(netloc)s%(prefix)s%(path)s' + decoded_path = safe_unicode(urllib.unquote(parsed_url.path)) + args = { + 'user': '', + 'pass': '', + 'scheme': parsed_url.scheme, + 'netloc': parsed_url.netloc, + 'prefix': decoded_path, + 'path': self.repo_name + } + + args.update(override) + return default_clone_uri % args + + #========================================================================== + # 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_changeset_cache(self, cs_cache=None): + """ + Update cache of last changeset for repository, keys should be:: + + short_id + raw_id + revision + message + date + author + + :param cs_cache: + """ + from rhodecode.lib.vcs.backends.base import BaseChangeset + if cs_cache is None: + cs_cache = self.get_changeset() + if isinstance(cs_cache, BaseChangeset): + cs_cache = cs_cache.__json__() -from rhodecode.model.db import * + if cs_cache != self.changeset_cache: + last_change = cs_cache.get('date') or self.last_change + log.debug('updated repo %s with new cs cache %s' % (self, cs_cache)) + self.updated_on = last_change + self.changeset_cache = cs_cache + 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] + + 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('UserGroupRepoGroupToPerm', 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 UserGroupRepoToPerm(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('UserGroup') + 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 UserGroupToPerm(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('UserGroup') + 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 UserGroupRepoGroupToPerm(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('UserGroup') + 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) + + @property + def org_ref_parts(self): + return self.org_ref.split(':') + + @property + def other_ref_parts(self): + return self.other_ref.split(':') + + 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_6_0.py b/rhodecode/lib/dbmigrate/schema/db_1_6_0.py new file mode 100644 --- /dev/null +++ b/rhodecode/lib/dbmigrate/schema/db_1_6_0.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +""" + rhodecode.model.db_1_6_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 next + +from rhodecode.model.db import * diff --git a/rhodecode/lib/dbmigrate/versions/003_version_1_2_0.py b/rhodecode/lib/dbmigrate/versions/003_version_1_2_0.py --- a/rhodecode/lib/dbmigrate/versions/003_version_1_2_0.py +++ b/rhodecode/lib/dbmigrate/versions/003_version_1_2_0.py @@ -34,26 +34,26 @@ def upgrade(migrate_engine): #========================================================================== # Add table `users_groups` #========================================================================== - from rhodecode.lib.dbmigrate.schema.db_1_2_0 import UsersGroup - UsersGroup().__table__.create() + from rhodecode.lib.dbmigrate.schema.db_1_2_0 import UserGroup + UserGroup().__table__.create() #========================================================================== # Add table `users_groups_members` #========================================================================== - from rhodecode.lib.dbmigrate.schema.db_1_2_0 import UsersGroupMember - UsersGroupMember().__table__.create() + from rhodecode.lib.dbmigrate.schema.db_1_2_0 import UserGroupMember + UserGroupMember().__table__.create() #========================================================================== # Add table `users_group_repo_to_perm` #========================================================================== - from rhodecode.lib.dbmigrate.schema.db_1_2_0 import UsersGroupRepoToPerm - UsersGroupRepoToPerm().__table__.create() + from rhodecode.lib.dbmigrate.schema.db_1_2_0 import UserGroupRepoToPerm + UserGroupRepoToPerm().__table__.create() #========================================================================== # Add table `users_group_to_perm` #========================================================================== - from rhodecode.lib.dbmigrate.schema.db_1_2_0 import UsersGroupToPerm - UsersGroupToPerm().__table__.create() + from rhodecode.lib.dbmigrate.schema.db_1_2_0 import UserGroupToPerm + UserGroupToPerm().__table__.create() #========================================================================== # Upgrade of `users` table diff --git a/rhodecode/lib/dbmigrate/versions/004_version_1_3_0.py b/rhodecode/lib/dbmigrate/versions/004_version_1_3_0.py --- a/rhodecode/lib/dbmigrate/versions/004_version_1_3_0.py +++ b/rhodecode/lib/dbmigrate/versions/004_version_1_3_0.py @@ -21,8 +21,8 @@ def upgrade(migrate_engine): #========================================================================== # Add table `users_group_repo_group_to_perm` #========================================================================== - from rhodecode.lib.dbmigrate.schema.db_1_3_0 import UsersGroupRepoGroupToPerm - UsersGroupRepoGroupToPerm().__table__.create() + from rhodecode.lib.dbmigrate.schema.db_1_3_0 import UserGroupRepoGroupToPerm + UserGroupRepoGroupToPerm().__table__.create() #========================================================================== # Add table `changeset_comments` @@ -45,8 +45,8 @@ def upgrade(migrate_engine): #========================================================================== # Add unique to table `users_group_to_perm` #========================================================================== - from rhodecode.lib.dbmigrate.schema.db_1_3_0 import UsersGroupToPerm - tbl = UsersGroupToPerm().__table__ + from rhodecode.lib.dbmigrate.schema.db_1_3_0 import UserGroupToPerm + tbl = UserGroupToPerm().__table__ cons = UniqueConstraint('users_group_id', 'permission_id', table=tbl) cons.create() diff --git a/rhodecode/lib/dbmigrate/versions/006_version_1_4_0.py b/rhodecode/lib/dbmigrate/versions/006_version_1_4_0.py --- a/rhodecode/lib/dbmigrate/versions/006_version_1_4_0.py +++ b/rhodecode/lib/dbmigrate/versions/006_version_1_4_0.py @@ -74,8 +74,8 @@ def upgrade(migrate_engine): #========================================================================== # USERS GROUP TABLE #========================================================================== - from rhodecode.lib.dbmigrate.schema.db_1_3_0 import UsersGroup - tbl = UsersGroup.__table__ + from rhodecode.lib.dbmigrate.schema.db_1_3_0 import UserGroup + tbl = UserGroup.__table__ # add inherit_default_permission column gr_inherit_default_permissions = Column( "users_group_inherit_default_permissions", diff --git a/rhodecode/lib/dbmigrate/versions/011_version_1_6_0.py b/rhodecode/lib/dbmigrate/versions/011_version_1_6_0.py new file mode 100644 --- /dev/null +++ b/rhodecode/lib/dbmigrate/versions/011_version_1_6_0.py @@ -0,0 +1,36 @@ +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 +from rhodecode.lib.dbmigrate.versions import _reset_base + +log = logging.getLogger(__name__) + + +def upgrade(migrate_engine): + """ + Upgrade operations go here. + Don't create your own engine; bind migrate_engine to your metadata + """ + _reset_base(migrate_engine) + #========================================================================== + # USER LOGS + #========================================================================== + from rhodecode.lib.dbmigrate.schema.db_1_6_0 import RepositoryField + tbl = RepositoryField.__table__ + tbl.create() + + +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 @@ -28,24 +28,16 @@ import re import difflib import logging -import traceback from itertools import tee, imap -from mercurial import patch -from mercurial.mdiff import diffopts -from mercurial.bundlerepo import bundlerepository - from pylons.i18n.translation import _ -from rhodecode.lib.compat import BytesIO -from rhodecode.lib.vcs.utils.hgcompat import localrepo from rhodecode.lib.vcs.exceptions import VCSError from rhodecode.lib.vcs.nodes import FileNode, SubModuleNode from rhodecode.lib.vcs.backends.base import EmptyChangeset from rhodecode.lib.helpers import escape -from rhodecode.lib.utils import make_ui -from rhodecode.lib.utils2 import safe_unicode +from rhodecode.lib.utils2 import safe_unicode, safe_str log = logging.getLogger(__name__) @@ -71,7 +63,7 @@ def wrapped_diff(filenode_old, filenode_ filenode_old = FileNode(filenode_new.path, '', EmptyChangeset()) if filenode_old.is_binary or filenode_new.is_binary: - diff = wrap_to_table(_('binary file')) + diff = wrap_to_table(_('Binary file')) stats = (0, 0) size = 0 @@ -429,7 +421,7 @@ class DiffProcessor(object): sorter = lambda info: {'A': 0, 'M': 1, 'D': 2}.get(info['operation']) - if inline_diff is False: + if not inline_diff: return diff_container(sorted(_files, key=sorter)) # highlight inline changes @@ -692,20 +684,8 @@ class DiffProcessor(object): return self.adds, self.removes -class InMemoryBundleRepo(bundlerepository): - def __init__(self, ui, path, bundlestream): - self._tempparent = None - localrepo.localrepository.__init__(self, ui, path) - self.ui.setconfig('phases', 'publish', False) - - self.bundle = bundlestream - - # dict with the mapping 'filename' -> position in the bundle - self.bundlefilespos = {} - - -def differ(org_repo, org_ref, other_repo, other_ref, discovery_data=None, - remote_compare=False, context=3, ignore_whitespace=False): +def differ(org_repo, org_ref, other_repo, other_ref, + context=3, ignore_whitespace=False): """ General differ between branches, bookmarks, revisions of two remote or local but related repositories @@ -723,48 +703,15 @@ def differ(org_repo, org_ref, other_repo org_repo = org_repo_scm._repo other_repo = other_repo_scm._repo - org_ref = org_ref[1] - other_ref = other_ref[1] + org_ref = safe_str(org_ref[1]) + other_ref = safe_str(other_ref[1]) 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)) + % (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 - org_repo_peer = localrepo.locallegacypeer(org_repo.local()) - # create a bundle (uncompressed if other repo is not local) - 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 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: - chunk = unbundle._stream.read(1024 * 4) - if not chunk: - break - buf.write(chunk) - - buf.seek(0) - # replace chunked _stream with data that can do tell() and seek() - unbundle._stream = buf - - ui = make_ui('db') - bundlerepo = InMemoryBundleRepo(ui, path=org_repo.root, - bundlestream=unbundle) - - return ''.join(patch.diff(bundlerepo, - node1=other_repo[other_ref].node(), - node2=org_repo[org_ref].node(), - opts=opts)) - - return '' + return '' # FIXME: when is it ever relevant to return nothing? diff --git a/rhodecode/lib/exceptions.py b/rhodecode/lib/exceptions.py --- a/rhodecode/lib/exceptions.py +++ b/rhodecode/lib/exceptions.py @@ -50,7 +50,7 @@ class UserOwnsReposException(Exception): pass -class UsersGroupsAssignedException(Exception): +class UserGroupsAssignedException(Exception): pass @@ -58,14 +58,23 @@ class StatusChangeOnClosedPullRequestErr pass +class AttachedForksError(Exception): + pass + + class HTTPLockedRC(HTTPClientError): """ - Special Exception For locked Repos in RhodeCode + Special Exception For locked Repos in RhodeCode, the return code can + be overwritten by _code keyword argument passed into constructors """ code = 423 title = explanation = 'Repository Locked' def __init__(self, reponame, username, *args, **kwargs): + from rhodecode import CONFIG + from rhodecode.lib.utils2 import safe_int + _code = CONFIG.get('lock_ret_code') + self.code = safe_int(_code, self.code) self.title = self.explanation = ('Repository `%s` locked by ' 'user `%s`' % (reponame, username)) super(HTTPLockedRC, self).__init__(*args, **kwargs) diff --git a/rhodecode/lib/helpers.py b/rhodecode/lib/helpers.py --- a/rhodecode/lib/helpers.py +++ b/rhodecode/lib/helpers.py @@ -41,9 +41,10 @@ from webhelpers.html.tags import _set_in convert_boolean_attrs, NotGiven, _make_safe_id_component from rhodecode.lib.annotate import annotate_highlight -from rhodecode.lib.utils import repo_name_slug +from rhodecode.lib.utils import repo_name_slug, get_custom_lexer from rhodecode.lib.utils2 import str2bool, safe_unicode, safe_str, \ - get_changeset_safe, datetime_to_time, time_to_datetime, AttributeDict + get_changeset_safe, datetime_to_time, time_to_datetime, AttributeDict,\ + safe_int from rhodecode.lib.markup_renderer import MarkupRenderer from rhodecode.lib.vcs.exceptions import ChangesetDoesNotExistError from rhodecode.lib.vcs.backends.base import BaseChangeset, EmptyChangeset @@ -253,13 +254,14 @@ class CodeHtmlFormatter(HtmlFormatter): def pygmentize(filenode, **kwargs): - """pygmentize function using pygments + """ + pygmentize function using pygments :param filenode: """ - - return literal(code_highlight(filenode.content, - filenode.lexer, CodeHtmlFormatter(**kwargs))) + lexer = get_custom_lexer(filenode.extension) or filenode.lexer + return literal(code_highlight(filenode.content, lexer, + CodeHtmlFormatter(**kwargs))) def pygmentize_annotation(repo_name, filenode, **kwargs): @@ -362,13 +364,31 @@ from rhodecode.lib.vcs.utils import auth from rhodecode.lib.utils2 import credentials_filter, age as _age from rhodecode.model.db import User, ChangesetStatus -age = lambda x: _age(x) +age = lambda x, y=False: _age(x, y) capitalize = lambda x: x.capitalize() email = author_email short_id = lambda x: x[:12] hide_credentials = lambda x: ''.join(credentials_filter(x)) +def show_id(cs): + """ + Configurable function that shows ID + by default it's r123:fffeeefffeee + + :param cs: changeset instance + """ + from rhodecode import CONFIG + def_len = safe_int(CONFIG.get('show_sha_length', 12)) + show_rev = str2bool(CONFIG.get('show_revision_number', True)) + + raw_id = cs.raw_id[:def_len] + if show_rev: + return 'r%s:%s' % (cs.revision, raw_id) + else: + return '%s' % (raw_id) + + def fmt_date(date): if date: _fmt = _(u"%a, %d %b %Y %H:%M:%S").encode('utf8') @@ -474,23 +494,20 @@ def desc_stylize(value): return value -def bool2icon(value): - """Returns True/False values represented as small html image of true/false +def boolicon(value): + """Returns boolean value of a value, represented as small html image of true/false icons - :param value: bool value + :param value: value """ - if value is True: + if value: return HTML.tag('img', src=url("/images/icons/accept.png"), alt=_('True')) - - if value is False: + else: return HTML.tag('img', src=url("/images/icons/cancel.png"), alt=_('False')) - return value - def action_parser(user_log, feed=False, parse_cs=False): """ @@ -549,13 +566,18 @@ def action_parser(user_log, feed=False, return link_to(lbl, _url, raw_id=rev.raw_id, repo_name=repo_name, class_='lazy-cs' if lazy_cs else '') + def _get_op(rev_txt): + _op = None + _name = rev_txt + if len(rev_txt.split('=>')) == 2: + _op, _name = rev_txt.split('=>') + return _op, _name + revs = [] if len(filter(lambda v: v != '', revs_ids)) > 0: repo = None for rev in revs_ids[:revs_top_limit]: - _op = _name = None - if len(rev.split('=>')) == 2: - _op, _name = rev.split('=>') + _op, _name = _get_op(rev) # we want parsed changesets, or new log store format is bad if parse_cs: @@ -582,6 +604,10 @@ def action_parser(user_log, feed=False, [lnk(rev, repo_name) for rev in revs[:revs_limit]] ) ) + _op1, _name1 = _get_op(revs_ids[0]) + _op2, _name2 = _get_op(revs_ids[-1]) + + _rev = '%s...%s' % (_name1, _name2) compare_view = ( '

' @@ -590,7 +616,7 @@ def action_parser(user_log, feed=False, revs_ids[0][:12], revs_ids[-1][:12] ), url('changeset_home', repo_name=repo_name, - revision='%s...%s' % (revs_ids[0], revs_ids[-1]) + revision=_rev ), _('compare view') ) @@ -683,9 +709,9 @@ def action_parser(user_log, feed=False, get_user_name, 'user_add.png'), 'admin_updated_user': (_('[updated] user'), get_user_name, 'user_edit.png'), - 'admin_created_users_group': (_('[created] users group'), + 'admin_created_users_group': (_('[created] user group'), get_users_group, 'group_add.png'), - 'admin_updated_users_group': (_('[updated] users group'), + 'admin_updated_users_group': (_('[updated] user group'), get_users_group, 'group_edit.png'), 'user_commented_revision': (_('[commented] on revision in repository'), get_cs_links, 'comment_add.png'), @@ -741,7 +767,8 @@ def action_parser(user_log, feed=False, # PERMS #============================================================================== from rhodecode.lib.auth import HasPermissionAny, HasPermissionAll, \ -HasRepoPermissionAny, HasRepoPermissionAll +HasRepoPermissionAny, HasRepoPermissionAll, HasReposGroupPermissionAll, \ +HasReposGroupPermissionAny #============================================================================== @@ -887,7 +914,7 @@ def changed_tooltip(nodes): return ': ' + _('No Files') -def repo_link(groups_and_repos, last_url=None): +def repo_link(groups_and_repos): """ Makes a breadcrumbs link to repo within a group joins » on each group to create a fancy link @@ -898,18 +925,14 @@ def repo_link(groups_and_repos, last_url :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 + groups, just_name, repo_name = groups_and_repos + last_url = url('summary_home', repo_name=repo_name) + last_link = link_to(just_name, last_url) - 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) + [last_link])) + 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) + ['%s' % last_link])) def fancy_file_stats(stats): @@ -975,7 +998,12 @@ def fancy_file_stats(stats): return literal('
%s%s
' % (width, d_a, d_d)) -def urlify_text(text_): +def urlify_text(text_, safe=True): + """ + Extrac urls from text and make html links out of them + + :param text_: + """ url_pat = re.compile(r'''(http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]''' '''|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+)''') @@ -983,8 +1011,10 @@ def urlify_text(text_): def url_func(match_obj): url_full = match_obj.groups()[0] return '%(url)s' % ({'url': url_full}) - - return literal(url_pat.sub(url_func, text_)) + _newtext = url_pat.sub(url_func, text_) + if safe: + return literal(_newtext) + return _newtext def urlify_changesets(text_, repository): @@ -992,26 +1022,26 @@ def urlify_changesets(text_, repository) Extract revision ids from changeset and make link from them :param text_: - :param repository: + :param repository: repo name to build the URL with """ - - URL_PAT = re.compile(r'([0-9a-fA-F]{12,})') + from pylons import url # doh, we need to re-import url to mock it later + URL_PAT = re.compile(r'(^|\s)([0-9a-fA-F]{12,40})($|\s)') def url_func(match_obj): - rev = match_obj.groups()[0] - pref = '' - if match_obj.group().startswith(' '): - pref = ' ' + rev = match_obj.groups()[1] + pref = match_obj.groups()[0] + suf = match_obj.groups()[2] + tmpl = ( '%(pref)s' - '%(rev)s' - '' + '%(rev)s%(suf)s' ) return tmpl % { 'pref': pref, 'cls': 'revision-link', 'url': url('changeset_home', repo_name=repository, revision=rev), 'rev': rev, + 'suf': suf } newtext = URL_PAT.sub(url_func, text_) @@ -1030,6 +1060,7 @@ def urlify_commit(text_, repository=None :param link_: changeset link """ import traceback + from pylons import url # doh, we need to re-import url to mock it later def escaper(string): return string.replace('<', '<').replace('>', '>') @@ -1048,8 +1079,12 @@ def urlify_commit(text_, repository=None # urlify changesets - extrac revisions and make link out of them newtext = urlify_changesets(escaper(text_), repository) + # extract http/https links and make them real urls + newtext = urlify_text(newtext, safe=False) + try: - conf = config['app_conf'] + from rhodecode import CONFIG + conf = CONFIG # allow multiple issue servers to be used valid_indices = [ @@ -1105,7 +1140,7 @@ def urlify_commit(text_, repository=None if link_: # wrap not links into final link => link_ newtext = linkify_others(newtext, link_) - except: + except Exception: log.error(traceback.format_exc()) pass diff --git a/rhodecode/lib/hooks.py b/rhodecode/lib/hooks.py --- a/rhodecode/lib/hooks.py +++ b/rhodecode/lib/hooks.py @@ -26,6 +26,7 @@ import os import sys import time import binascii +import traceback from inspect import isfunction from mercurial.scmutil import revrange @@ -36,7 +37,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, datetime_to_time +from rhodecode.lib.utils2 import safe_str, _extract_extras from rhodecode.model.db import Repository, User @@ -91,55 +92,35 @@ def repo_size(ui, repo, hooktype=None, * def pre_push(ui, repo, **kwargs): # pre push function, currently used to ban pushing when # repository is locked - try: - rc_extras = json.loads(os.environ.get('RC_SCM_DATA', "{}")) - except: - rc_extras = {} - extras = dict(repo.ui.configitems('rhodecode_extras')) + ex = _extract_extras() - if 'username' in extras: - username = extras['username'] - repository = extras['repository'] - scm = extras['scm'] - locked_by = extras['locked_by'] - elif 'username' in rc_extras: - username = rc_extras['username'] - repository = rc_extras['repository'] - scm = rc_extras['scm'] - locked_by = rc_extras['locked_by'] - else: - raise Exception('Missing data in repo.ui and os.environ') - - usr = User.get_by_username(username) - if locked_by[0] and usr.user_id != int(locked_by[0]): - locked_by = User.get(locked_by[0]).username - raise HTTPLockedRC(repository, locked_by) + usr = User.get_by_username(ex.username) + if ex.locked_by[0] and usr.user_id != int(ex.locked_by[0]): + locked_by = User.get(ex.locked_by[0]).username + # this exception is interpreted in git/hg middlewares and based + # on that proper return code is server to client + _http_ret = HTTPLockedRC(ex.repository, locked_by) + if str(_http_ret.code).startswith('2'): + #2xx Codes don't raise exceptions + sys.stdout.write(_http_ret.title) + else: + raise _http_ret def pre_pull(ui, repo, **kwargs): # pre push function, currently used to ban pushing when # repository is locked - try: - rc_extras = json.loads(os.environ.get('RC_SCM_DATA', "{}")) - except: - rc_extras = {} - extras = dict(repo.ui.configitems('rhodecode_extras')) - if 'username' in extras: - username = extras['username'] - repository = extras['repository'] - scm = extras['scm'] - locked_by = extras['locked_by'] - elif 'username' in rc_extras: - username = rc_extras['username'] - repository = rc_extras['repository'] - scm = rc_extras['scm'] - locked_by = rc_extras['locked_by'] - else: - raise Exception('Missing data in repo.ui and os.environ') - - if locked_by[0]: - locked_by = User.get(locked_by[0]).username - raise HTTPLockedRC(repository, locked_by) + ex = _extract_extras() + if ex.locked_by[0]: + locked_by = User.get(ex.locked_by[0]).username + # this exception is interpreted in git/hg middlewares and based + # on that proper return code is server to client + _http_ret = HTTPLockedRC(ex.repository, locked_by) + if str(_http_ret.code).startswith('2'): + #2xx Codes don't raise exceptions + sys.stdout.write(_http_ret.title) + else: + raise _http_ret def log_pull_action(ui, repo, **kwargs): @@ -149,42 +130,30 @@ def log_pull_action(ui, repo, **kwargs): :param ui: :param repo: """ - try: - rc_extras = json.loads(os.environ.get('RC_SCM_DATA', "{}")) - except: - rc_extras = {} - extras = dict(repo.ui.configitems('rhodecode_extras')) - if 'username' in extras: - username = extras['username'] - 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) + ex = _extract_extras() + + user = User.get_by_username(ex.username) action = 'pull' - action_logger(user, action, repository, ip, commit=True) + action_logger(user, action, ex.repository, ex.ip, commit=True) # extension hook call from rhodecode import EXTENSIONS callback = getattr(EXTENSIONS, 'PULL_HOOK', None) - if isfunction(callback): kw = {} - kw.update(extras) + kw.update(ex) callback(**kw) - if make_lock is True: - Repository.lock(Repository.get_by_repo_name(repository), user.user_id) + if ex.make_lock is not None and ex.make_lock: + Repository.lock(Repository.get_by_repo_name(ex.repository), user.user_id) #msg = 'Made lock on repo `%s`' % repository #sys.stdout.write(msg) + if ex.locked_by[0]: + locked_by = User.get(ex.locked_by[0]).username + _http_ret = HTTPLockedRC(ex.repository, locked_by) + if str(_http_ret.code).startswith('2'): + #2xx Codes don't raise exceptions + sys.stdout.write(_http_ret.title) return 0 @@ -196,28 +165,11 @@ def log_push_action(ui, repo, **kwargs): :param repo: repo object containing the `ui` object """ - try: - rc_extras = json.loads(os.environ.get('RC_SCM_DATA', "{}")) - except: - rc_extras = {} + ex = _extract_extras() - extras = dict(repo.ui.configitems('rhodecode_extras')) - if 'username' in extras: - username = extras['username'] - repository = extras['repository'] - scm = extras['scm'] - make_lock = extras['make_lock'] - elif 'username' in rc_extras: - username = rc_extras['username'] - repository = rc_extras['repository'] - scm = rc_extras['scm'] - make_lock = rc_extras['make_lock'] - else: - raise Exception('Missing data in repo.ui and os.environ') + action = ex.action + ':%s' - action = 'push' + ':%s' - - if scm == 'hg': + if ex.scm == 'hg': node = kwargs['node'] def get_revs(repo, rev_opt): @@ -233,28 +185,35 @@ def log_push_action(ui, repo, **kwargs): stop, start = get_revs(repo, [node + ':']) h = binascii.hexlify revs = [h(repo[r].node()) for r in xrange(start, stop + 1)] - elif scm == 'git': + elif ex.scm == 'git': revs = kwargs.get('_git_revs', []) if '_git_revs' in kwargs: kwargs.pop('_git_revs') action = action % ','.join(revs) - action_logger(username, action, repository, extras['ip'], commit=True) + action_logger(ex.username, action, ex.repository, ex.ip, commit=True) # extension hook call from rhodecode import EXTENSIONS callback = getattr(EXTENSIONS, 'PUSH_HOOK', None) if isfunction(callback): kw = {'pushed_revs': revs} - kw.update(extras) + kw.update(ex) callback(**kw) - if make_lock is False: - Repository.unlock(Repository.get_by_repo_name(repository)) - msg = 'Released lock on repo `%s`\n' % repository + if ex.make_lock is not None and not ex.make_lock: + Repository.unlock(Repository.get_by_repo_name(ex.repository)) + msg = 'Released lock on repo `%s`\n' % ex.repository sys.stdout.write(msg) + if ex.locked_by[0]: + locked_by = User.get(ex.locked_by[0]).username + _http_ret = HTTPLockedRC(ex.repository, locked_by) + if str(_http_ret.code).startswith('2'): + #2xx Codes don't raise exceptions + sys.stdout.write(_http_ret.title) + return 0 @@ -359,7 +318,7 @@ def handle_git_receive(repo_path, revs, from rhodecode.model import init_model from rhodecode.model.db import RhodeCodeUi from rhodecode.lib.utils import make_ui - extras = json.loads(env['RHODECODE_EXTRAS']) + extras = _extract_extras(env) path, ini_name = os.path.split(extras['config']) conf = appconfig('config:%s' % ini_name, relative_to=path) @@ -380,15 +339,11 @@ def handle_git_receive(repo_path, revs, _hooks = dict(baseui.configitems('hooks')) or {} - for k, v in extras.items(): - baseui.setconfig('rhodecode_extras', k, v) if hook_type == 'pre': repo = repo.scm_instance else: #post push shouldn't use the cached instance never - repo = repo.scm_instance_no_cache - - repo.ui = baseui + repo = repo.scm_instance_no_cache() if hook_type == 'pre': pre_push(baseui, repo) 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 @@ -105,7 +105,7 @@ class MakeIndex(BasePasterCommand): min_args = 1 usage = "CONFIG_FILE" - summary = "Creates index for full text search given configuration file" + summary = "Creates or update full text search index" group_name = "RhodeCode" takes_config_file = -1 parser = Command.standard_parser(verbose=True) diff --git a/rhodecode/lib/middleware/https_fixup.py b/rhodecode/lib/middleware/https_fixup.py --- a/rhodecode/lib/middleware/https_fixup.py +++ b/rhodecode/lib/middleware/https_fixup.py @@ -23,6 +23,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +from pylons.controllers.util import Request from rhodecode.lib.utils2 import str2bool @@ -34,6 +35,15 @@ class HttpsFixup(object): def __call__(self, environ, start_response): self.__fixup(environ) + debug = str2bool(self.config.get('debug')) + if str2bool(self.config.get('use_htsts')) and not debug: + req = Request(environ, self.application) + resp = req.get_response(self.application) + if environ['wsgi.url_scheme'] == 'https': + resp.headers['Strict-Transport-Security'] = \ + 'max-age=8640000; includeSubDomains' + return resp(environ, start_response) + return self.application(environ, start_response) def __fixup(self, environ): diff --git a/rhodecode/lib/middleware/pygrack.py b/rhodecode/lib/middleware/pygrack.py --- a/rhodecode/lib/middleware/pygrack.py +++ b/rhodecode/lib/middleware/pygrack.py @@ -6,6 +6,7 @@ import traceback from webob import Request, Response, exc +import rhodecode from rhodecode.lib import subprocessio log = logging.getLogger(__name__) @@ -82,10 +83,11 @@ class GitRepository(object): # if you do add '\n' as part of data, count it. server_advert = '# service=%s' % git_command packet_len = str(hex(len(server_advert) + 4)[2:].rjust(4, '0')).lower() + _git_path = rhodecode.CONFIG.get('git_path', 'git') try: out = subprocessio.SubprocessIOChunker( - r'git %s --stateless-rpc --advertise-refs "%s"' % ( - git_command[4:], self.content_path), + r'%s %s --stateless-rpc --advertise-refs "%s"' % ( + _git_path, git_command[4:], self.content_path), starting_values=[ packet_len + server_advert + '0000' ] @@ -119,8 +121,6 @@ class GitRepository(object): try: gitenv = os.environ - from rhodecode.lib.compat import json - gitenv['RHODECODE_EXTRAS'] = json.dumps(self.extras) # forget all configs gitenv['GIT_CONFIG_NOGLOBAL'] = '1' opts = dict( @@ -142,8 +142,9 @@ class GitRepository(object): if git_command in [u'git-receive-pack']: # updating refs manually after each push. # Needed for pre-1.7.0.4 git clients using regular HTTP mode. - cmd = (u'git --git-dir "%s" ' - 'update-server-info' % self.content_path) + _git_path = rhodecode.CONFIG.get('git_path', 'git') + cmd = (u'%s --git-dir "%s" ' + 'update-server-info' % (_git_path, self.content_path)) log.debug('handling cmd %s' % cmd) subprocess.call(cmd, shell=True) 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,8 @@ from paste.httpheaders import REMOTE_USE from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError, \ HTTPBadRequest, HTTPNotAcceptable -from rhodecode.lib.utils2 import safe_str, fix_PATH, get_server_url +from rhodecode.lib.utils2 import safe_str, fix_PATH, get_server_url,\ + _set_extras from rhodecode.lib.base import BaseVCSController from rhodecode.lib.auth import get_container_username from rhodecode.lib.utils import is_valid_repo, make_ui @@ -121,11 +122,11 @@ class SimpleGit(BaseVCSController): try: repo_name = self.__get_repository(environ) log.debug('Extracted repo name is %s' % repo_name) - except: + except Exception: return HTTPInternalServerError()(environ, start_response) # quick check if that dir exists... - if is_valid_repo(repo_name, self.basepath, 'git') is False: + if not is_valid_repo(repo_name, self.basepath, 'git'): return HTTPNotFound()(environ, start_response) #====================================================================== @@ -142,11 +143,11 @@ class SimpleGit(BaseVCSController): anonymous_perm = self._check_permission(action, anonymous_user, repo_name, ip_addr) - if anonymous_perm is not True or anonymous_user.active is False: - if anonymous_perm is not True: + if not anonymous_perm or not anonymous_user.active: + if not anonymous_perm: log.debug('Not enough credentials to access this ' 'repository as anonymous user') - if anonymous_user.active is False: + if not anonymous_user.active: log.debug('Anonymous access is disabled, running ' 'authentication') #============================================================== @@ -177,13 +178,13 @@ class SimpleGit(BaseVCSController): if user is None or not user.active: return HTTPForbidden()(environ, start_response) username = user.username - except: + except Exception: log.error(traceback.format_exc()) return HTTPInternalServerError()(environ, start_response) #check permissions for this repository perm = self._check_permission(action, user, repo_name, ip_addr) - if perm is not True: + if not perm: return HTTPForbidden()(environ, start_response) # extras are injected into UI object and later available @@ -205,7 +206,8 @@ class SimpleGit(BaseVCSController): #=================================================================== # GIT REQUEST HANDLING #=================================================================== - repo_path = os.path.join(safe_str(self.basepath), safe_str(repo_name)) + str_repo_name = safe_str(repo_name) + repo_path = os.path.join(safe_str(self.basepath),str_repo_name) log.debug('Repository path is %s' % repo_path) # CHECK LOCKING only if it's not ANONYMOUS USER @@ -230,11 +232,12 @@ class SimpleGit(BaseVCSController): try: self._handle_githooks(repo_name, action, baseui, environ) log.info('%s action on GIT repo "%s" by "%s" from %s' % - (action, repo_name, username, ip_addr)) + (action, str_repo_name, safe_str(username), ip_addr)) app = self.__make_app(repo_name, repo_path, extras) return app(environ, start_response) except HTTPLockedRC, e: - log.debug('Repository LOCKED ret code 423!') + _code = CONFIG.get('lock_ret_code') + log.debug('Repository LOCKED ret code %s!' % (_code)) return e(environ, start_response) except Exception: log.error(traceback.format_exc()) @@ -270,7 +273,7 @@ class SimpleGit(BaseVCSController): try: environ['PATH_INFO'] = self._get_by_id(environ['PATH_INFO']) repo_name = GIT_PROTO_PAT.match(environ['PATH_INFO']).group(1) - except: + except Exception: log.error(traceback.format_exc()) raise @@ -315,7 +318,6 @@ class SimpleGit(BaseVCSController): from rhodecode.model.db import Repository _repo = Repository.get_by_repo_name(repo_name) _repo = _repo.scm_instance - _repo._repo.ui = baseui _hooks = dict(baseui.configitems('hooks')) or {} if action == 'pull': @@ -332,10 +334,4 @@ class SimpleGit(BaseVCSController): :param extras: dict with extra params to put into baseui """ - # make our hgweb quiet so it doesn't print output - baseui.setconfig('ui', 'quiet', 'true') - - #inject some additional parameters that will be available in ui - #for hooks - for k, v in extras.items(): - baseui.setconfig('rhodecode_extras', k, v) + _set_extras(extras) 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,8 @@ from paste.httpheaders import REMOTE_USE from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError, \ HTTPBadRequest, HTTPNotAcceptable -from rhodecode.lib.utils2 import safe_str, fix_PATH, get_server_url +from rhodecode.lib.utils2 import safe_str, fix_PATH, get_server_url,\ + _set_extras 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 @@ -84,11 +85,11 @@ class SimpleHg(BaseVCSController): try: repo_name = environ['REPO_NAME'] = self.__get_repository(environ) log.debug('Extracted repo name is %s' % repo_name) - except: + except Exception: return HTTPInternalServerError()(environ, start_response) # quick check if that dir exists... - if is_valid_repo(repo_name, self.basepath, 'hg') is False: + if not is_valid_repo(repo_name, self.basepath, 'hg'): return HTTPNotFound()(environ, start_response) #====================================================================== @@ -105,11 +106,11 @@ class SimpleHg(BaseVCSController): anonymous_perm = self._check_permission(action, anonymous_user, repo_name, ip_addr) - if anonymous_perm is not True or anonymous_user.active is False: - if anonymous_perm is not True: + if not anonymous_perm or not anonymous_user.active: + if not anonymous_perm: log.debug('Not enough credentials to access this ' 'repository as anonymous user') - if anonymous_user.active is False: + if not anonymous_user.active: log.debug('Anonymous access is disabled, running ' 'authentication') #============================================================== @@ -140,13 +141,13 @@ class SimpleHg(BaseVCSController): if user is None or not user.active: return HTTPForbidden()(environ, start_response) username = user.username - except: + except Exception: log.error(traceback.format_exc()) return HTTPInternalServerError()(environ, start_response) #check permissions for this repository perm = self._check_permission(action, user, repo_name, ip_addr) - if perm is not True: + if not perm: return HTTPForbidden()(environ, start_response) # extras are injected into mercurial UI object and later available @@ -167,7 +168,8 @@ class SimpleHg(BaseVCSController): #====================================================================== # MERCURIAL REQUEST HANDLING #====================================================================== - repo_path = os.path.join(safe_str(self.basepath), safe_str(repo_name)) + str_repo_name = safe_str(repo_name) + repo_path = os.path.join(safe_str(self.basepath), str_repo_name) log.debug('Repository path is %s' % repo_path) # CHECK LOCKING only if it's not ANONYMOUS USER @@ -192,14 +194,15 @@ class SimpleHg(BaseVCSController): try: log.info('%s action on HG repo "%s" by "%s" from %s' % - (action, repo_name, username, ip_addr)) + (action, str_repo_name, safe_str(username), ip_addr)) app = self.__make_app(repo_path, baseui, extras) return app(environ, start_response) except RepoError, e: if str(e).find('not found') != -1: return HTTPNotFound()(environ, start_response) except HTTPLockedRC, e: - log.debug('Repository LOCKED ret code 423!') + _code = CONFIG.get('lock_ret_code') + log.debug('Repository LOCKED ret code %s!' % (_code)) return e(environ, start_response) except Exception: log.error(traceback.format_exc()) @@ -227,7 +230,7 @@ class SimpleHg(BaseVCSController): repo_name = '/'.join(environ['PATH_INFO'].split('/')[1:]) if repo_name.endswith('/'): repo_name = repo_name.rstrip('/') - except: + except Exception: log.error(traceback.format_exc()) raise @@ -275,11 +278,6 @@ class SimpleHg(BaseVCSController): # make our hgweb quiet so it doesn't print output baseui.setconfig('ui', 'quiet', 'true') - #inject some additional parameters that will be available in ui - #for hooks - for k, v in extras.items(): - baseui.setconfig('rhodecode_extras', k, v) - repoui = make_ui('file', hgrc, False) if repoui: @@ -287,3 +285,4 @@ class SimpleHg(BaseVCSController): for section in ui_sections: for k, v in repoui.configitems(section): baseui.setconfig(section, k, v) + _set_extras(extras) diff --git a/rhodecode/lib/middleware/wrapper.py b/rhodecode/lib/middleware/wrapper.py new file mode 100644 --- /dev/null +++ b/rhodecode/lib/middleware/wrapper.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +""" + rhodecode.lib.middleware.wrapper + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + request time mesuring app + + :created_on: May 23, 2013 + :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 time +import logging +from rhodecode.lib.base import _get_ip_addr, _get_access_path +from rhodecode.lib.utils2 import safe_unicode + + +class RequestWrapper(object): + + def __init__(self, app, config): + self.application = app + self.config = config + + def __call__(self, environ, start_response): + start = time.time() + try: + return self.application(environ, start_response) + finally: + log = logging.getLogger('rhodecode.' + self.__class__.__name__) + log.info('IP: %s Request to %s time: %.3fs' % ( + _get_ip_addr(environ), + safe_unicode(_get_access_path(environ)), time.time() - start) + ) diff --git a/rhodecode/lib/paster_commands/__init__.py b/rhodecode/lib/paster_commands/__init__.py new file mode 100644 diff --git a/rhodecode/lib/paster_commands/cache_keys.py b/rhodecode/lib/paster_commands/cache_keys.py new file mode 100644 --- /dev/null +++ b/rhodecode/lib/paster_commands/cache_keys.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +""" + rhodecode.lib.paster_commands.cache_keys + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + cleanup-keys paster command for RhodeCode + + + :created_on: mar 27, 2013 + :author: marcink + :copyright: (C) 2010-2013 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 logging + +from os.path import dirname as dn, join as jn +from rhodecode.model.meta import Session +#to get the rhodecode import +rc_path = dn(dn(dn(os.path.realpath(__file__)))) +sys.path.append(rc_path) +from rhodecode.lib.utils import BasePasterCommand + +from rhodecode.model.db import CacheInvalidation + + +log = logging.getLogger(__name__) + + +class Command(BasePasterCommand): + + max_args = 1 + min_args = 1 + + usage = "CONFIG_FILE" + group_name = "RhodeCode" + takes_config_file = -1 + parser = BasePasterCommand.standard_parser(verbose=True) + summary = "Cache keys utils" + + def command(self): + #get SqlAlchemy session + self._init_session() + _caches = CacheInvalidation.query().order_by(CacheInvalidation.cache_key).all() + if self.options.show: + for c_obj in _caches: + print 'key:%s active:%s' % (c_obj.cache_key, c_obj.cache_active) + elif self.options.cleanup: + for c_obj in _caches: + Session().delete(c_obj) + print 'removing key:%s' % (c_obj.cache_key) + Session().commit() + else: + print 'nothing done exiting...' + sys.exit(0) + + def update_parser(self): + self.parser.add_option( + '--show', + action='store_true', + dest='show', + help=("show existing cache keys with together with status") + ) + + self.parser.add_option( + '--cleanup', + action="store_true", + dest="cleanup", + help="cleanup existing cache keys" + ) diff --git a/rhodecode/lib/cleanup.py b/rhodecode/lib/paster_commands/cleanup.py rename from rhodecode/lib/cleanup.py rename to rhodecode/lib/paster_commands/cleanup.py --- a/rhodecode/lib/cleanup.py +++ b/rhodecode/lib/paster_commands/cleanup.py @@ -3,6 +3,9 @@ package.rhodecode.lib.cleanup ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + cleanup-repos paster command for RhodeCode + + :created_on: Jul 14, 2012 :author: marcink :copyright: (C) 2010-2012 Marcin Kuzminski @@ -30,30 +33,28 @@ import logging 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, safe_str +#to get the rhodecode import +rc_path = dn(dn(dn(os.path.realpath(__file__)))) +sys.path.append(rc_path) +from rhodecode.lib.utils import BasePasterCommand, ask_ok, REMOVED_REPO_PAT + +from rhodecode.lib.utils2 import safe_str from rhodecode.model.db import RhodeCodeUi -#to get the rhodecode import -sys.path.append(dn(dn(dn(os.path.realpath(__file__))))) - -from rhodecode.lib.utils import BasePasterCommand, Command, ask_ok,\ - REMOVED_REPO_PAT, add_cache - log = logging.getLogger(__name__) -class CleanupCommand(BasePasterCommand): +class Command(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) + parser = BasePasterCommand.standard_parser(verbose=True) + summary = "Cleanup deleted repos" def _parse_older_than(self, val): regex = re.compile(r'((?P\d+?)d)?((?P\d+?)h)?((?P\d+?)m)?((?P\d+?)s)?') @@ -78,21 +79,23 @@ class CleanupCommand(BasePasterCommand): return datetime.datetime.strptime(date_part, '%Y%m%d_%H%M%S') 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) + #get SqlAlchemy session + self._init_session() repos_location = RhodeCodeUi.get_repos_location() to_remove = [] for dn, dirs, f in os.walk(safe_str(repos_location)): - for loc in dirs: + alldirs = list(dirs) + del dirs[:] + if ('.hg' in alldirs or + 'objects' in alldirs and ('refs' in alldirs or 'packed-refs' in f)): + continue + for loc in alldirs: if REMOVED_REPO_PAT.match(loc): to_remove.append([os.path.join(dn, loc), self._extract_date(loc)]) + else: + dirs.append(loc) #filter older than (if present)! now = datetime.datetime.now() @@ -106,7 +109,7 @@ class CleanupCommand(BasePasterCommand): to_remove_filtered.append([name, date_]) to_remove = to_remove_filtered - print >> sys.stdout, 'removing [%s] deleted repos older than %s[%s]' \ + print >> sys.stdout, 'removing %s deleted repos older than %s (%s)' \ % (len(to_remove), older_than, older_than_date) else: print >> sys.stdout, 'removing all [%s] deleted repos' \ @@ -115,30 +118,36 @@ class CleanupCommand(BasePasterCommand): # don't ask just remove ! remove = True else: - remove = ask_ok('are you sure to remove listed repos \n%s [y/n]?' + remove = ask_ok('the following repositories will be deleted completely:\n%s\n' + 'are you sure you want to remove them [y/n]?' % ', \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: - print >> sys.stdout, 'removing repository %s' % name - shutil.rmtree(os.path.join(repos_location, name)) + for path, date_ in to_remove: + print >> sys.stdout, 'removing repository %s' % path + shutil.rmtree(path) else: print 'nothing done exiting...' sys.exit(0) def update_parser(self): - self.parser.add_option('--older-than', - action='store', - dest='older_than', - help=( - "only remove repos that have been removed " - "at least given time ago " - "ex. --older-than=30d deletes repositores " - "removed more than 30days ago. Possible options " - "d[ays]/h[ours]/m[inutes]/s[seconds]. OPTIONAL"), - ) - self.parser.add_option('--dont-ask', - action='store_true', - dest='dont_ask', - help=("Don't ask to remove repos")) + self.parser.add_option( + '--older-than', + action='store', + dest='older_than', + help=("only remove repos that have been removed " + "at least given time ago. " + "The default is to remove all removed repositories. " + "Possible suffixes: " + "d (days), h (hours), m (minutes), s (seconds). " + "For example --older-than=30d deletes repositories " + "removed more than 30 days ago.") + ) + + self.parser.add_option( + '--dont-ask', + action="store_true", + dest="dont_ask", + help="remove repositories without asking for confirmation." + ) diff --git a/rhodecode/lib/paster_commands/ishell.py b/rhodecode/lib/paster_commands/ishell.py new file mode 100644 --- /dev/null +++ b/rhodecode/lib/paster_commands/ishell.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- +""" + rhodecode.lib.paster_commands.ishell + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + interactive shell paster command for RhodeCode + + + :created_on: Apr 4, 2013 + :author: marcink + :copyright: (C) 2010-2013 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 logging + +from os.path import dirname as dn, join as jn +#to get the rhodecode import +rc_path = dn(dn(dn(os.path.realpath(__file__)))) +sys.path.append(rc_path) +from rhodecode.lib.utils import BasePasterCommand + + +log = logging.getLogger(__name__) + + +class Command(BasePasterCommand): + + max_args = 1 + min_args = 1 + + usage = "CONFIG_FILE" + group_name = "RhodeCode" + takes_config_file = -1 + parser = BasePasterCommand.standard_parser(verbose=True) + summary = "Interactive shell" + + def command(self): + #get SqlAlchemy session + self._init_session() + + # imports, used in ipython shell + import os + import sys + import time + import shutil + import datetime + from rhodecode.model.db import * + + try: + from IPython import embed + from IPython.config.loader import Config + cfg = Config() + cfg.InteractiveShellEmbed.confirm_exit = False + embed(config=cfg, banner1="RhodeCode IShell.") + except ImportError: + print 'ipython installation required for ishell' + sys.exit(-1) + + def update_parser(self): + pass diff --git a/rhodecode/config/rcextensions/make_rcextensions.py b/rhodecode/lib/paster_commands/make_rcextensions.py rename from rhodecode/config/rcextensions/make_rcextensions.py rename to rhodecode/lib/paster_commands/make_rcextensions.py --- a/rhodecode/config/rcextensions/make_rcextensions.py +++ b/rhodecode/lib/paster_commands/make_rcextensions.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- """ - rhodecode.config.rcextensions.make_rcextensions + rhodecode.lib.paster_commands.make_rcextensions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Whoosh indexing module for RhodeCode + make-rcext paster command for RhodeCode :created_on: Mar 6, 2012 :author: marcink @@ -29,26 +29,27 @@ import sys import pkg_resources import traceback import logging + from os.path import dirname as dn, join as jn - #to get the rhodecode import -sys.path.append(dn(dn(dn(os.path.realpath(__file__))))) +rc_path = dn(dn(dn(os.path.realpath(__file__)))) +sys.path.append(rc_path) -from rhodecode.lib.utils import BasePasterCommand, Command, ask_ok +from rhodecode.lib.utils import BasePasterCommand, ask_ok log = logging.getLogger(__name__) -class MakeRcExt(BasePasterCommand): +class Command(BasePasterCommand): max_args = 1 min_args = 1 usage = "CONFIG_FILE" - summary = "Creates additional extensions for rhodecode" group_name = "RhodeCode" takes_config_file = -1 - parser = Command.standard_parser(verbose=True) + parser = BasePasterCommand.standard_parser(verbose=True) + summary = "Creates additional extensions for rhodecode" def command(self): logging.config.fileConfig(self.path_to_ini_file) diff --git a/rhodecode/lib/paster_commands/repo_scan.py b/rhodecode/lib/paster_commands/repo_scan.py new file mode 100644 --- /dev/null +++ b/rhodecode/lib/paster_commands/repo_scan.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- +""" + rhodecode.lib.paster_commands.make_rcextensions + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + repo-scan paster command for RhodeCode + + + :created_on: Feb 9, 2013 + :author: marcink + :copyright: (C) 2010-2013 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 logging + +from os.path import dirname as dn, join as jn +from rhodecode.model.scm import ScmModel +#to get the rhodecode import +rc_path = dn(dn(dn(os.path.realpath(__file__)))) +sys.path.append(rc_path) +from rhodecode.lib.utils import BasePasterCommand, repo2db_mapper + +from rhodecode.model.db import Repository +from rhodecode.model.repo import RepoModel +from rhodecode.model.meta import Session + + +log = logging.getLogger(__name__) + + +class Command(BasePasterCommand): + + max_args = 1 + min_args = 1 + + usage = "CONFIG_FILE" + group_name = "RhodeCode" + takes_config_file = -1 + parser = BasePasterCommand.standard_parser(verbose=True) + summary = "Rescan default location for new repositories" + + def command(self): + #get SqlAlchemy session + self._init_session() + rm_obsolete = self.options.delete_obsolete + log.info('Now scanning root location for new repos...') + added, removed = repo2db_mapper(ScmModel().repo_scan(), + remove_obsolete=rm_obsolete) + added = ','.join(added) or '-' + removed = ','.join(removed) or '-' + log.info('Scan completed added:%s removed:%s' % (added, removed)) + + def update_parser(self): + self.parser.add_option('--delete-obsolete', + action='store_true', + help="Use this flag do delete repositories that are " + "present in RhodeCode database but not on the filesystem", + ) diff --git a/rhodecode/config/setup_rhodecode.py b/rhodecode/lib/paster_commands/setup_rhodecode.py rename from rhodecode/config/setup_rhodecode.py rename to rhodecode/lib/paster_commands/setup_rhodecode.py --- a/rhodecode/config/setup_rhodecode.py +++ b/rhodecode/lib/paster_commands/setup_rhodecode.py @@ -1,26 +1,30 @@ import os +import sys from paste.script.appinstall import AbstractInstallCommand from paste.script.command import BadCommand from paste.deploy import appconfig +from os.path import dirname as dn, join as jn +#to get the rhodecode import +rc_path = dn(dn(dn(os.path.realpath(__file__)))) +sys.path.append(rc_path) -class SetupCommand(AbstractInstallCommand): + +class Command(AbstractInstallCommand): default_verbosity = 1 max_args = 1 min_args = 1 summary = "Setup an application, given a config file" usage = "CONFIG_FILE" + group_name = "RhodeCode" description = """\ - Note: this is an experimental command, and it will probably change - in several ways by the next release. - Setup an application according to its configuration file. This is + Setup RhodeCode according to its configuration file. This is the second part of a two-phase web application installation - process (the first phase is prepare-app). The setup process may - consist of things like creating directories and setting up - databases. + process (the first phase is prepare-app). The setup process + consist of things like setting up databases, creating super user """ parser = AbstractInstallCommand.standard_parser( diff --git a/rhodecode/lib/update_repoinfo.py b/rhodecode/lib/paster_commands/update_repoinfo.py rename from rhodecode/lib/update_repoinfo.py rename to rhodecode/lib/paster_commands/update_repoinfo.py --- a/rhodecode/lib/update_repoinfo.py +++ b/rhodecode/lib/paster_commands/update_repoinfo.py @@ -1,7 +1,9 @@ # -*- coding: utf-8 -*- """ - package.rhodecode.lib.cleanup - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + rhodecode.lib.paster_commands.make_rcextensions + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + uodate-repoinfo paster command for RhodeCode :created_on: Jul 14, 2012 :author: marcink @@ -24,64 +26,62 @@ 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 -from rhodecode.lib.vcs.backends.base import EmptyChangeset +#to get the rhodecode import +rc_path = dn(dn(dn(os.path.realpath(__file__)))) +sys.path.append(rc_path) +from rhodecode.lib.utils import BasePasterCommand - -#to get the rhodecode import -sys.path.append(dn(dn(dn(os.path.realpath(__file__))))) - -from rhodecode.lib.utils import BasePasterCommand, Command, add_cache +from rhodecode.model.db import Repository +from rhodecode.model.repo import RepoModel +from rhodecode.model.meta import Session log = logging.getLogger(__name__) -class UpdateCommand(BasePasterCommand): +class Command(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) + parser = BasePasterCommand.standard_parser(verbose=True) + summary = "Updates repositories caches for last changeset" 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) + #get SqlAlchemy session + self._init_session() 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)) + repo_list = Repository.query()\ + .filter(Repository.repo_name.in_(repo_update_list)) else: repo_list = Repository.getAll() - for repo in repo_list: - last_cs = (repo.scm_instance.get_changeset() if repo.scm_instance - else EmptyChangeset()) - repo.update_changeset_cache(last_cs) + RepoModel.update_repoinfo(repositories=repo_list) + Session().commit() + + if self.options.invalidate_cache: + for r in repo_list: + r.set_invalidate() + log.info('Updated cache for %s repositories' % (len(repo_list))) 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", - ) + action='store', + dest='repo_update_list', + help="Specifies a comma separated list of repositores " + "to update last commit info for. OPTIONAL") + self.parser.add_option('--invalidate-cache', + action='store_true', + dest='invalidate_cache', + help="Trigger cache invalidation event for repos. " + "OPTIONAL") diff --git a/rhodecode/lib/rcmail/response.py b/rhodecode/lib/rcmail/response.py --- a/rhodecode/lib/rcmail/response.py +++ b/rhodecode/lib/rcmail/response.py @@ -444,7 +444,7 @@ def properly_encode_header(value, encode try: return value.encode("ascii") except UnicodeEncodeError: - if not_email is False and VALUE_IS_EMAIL_ADDRESS(value): + if not not_email and VALUE_IS_EMAIL_ADDRESS(value): # this could have an email address, make sure we don't screw it up name, address = parseaddr(value) return '"%s" <%s>' % ( diff --git a/rhodecode/lib/subprocessio.py b/rhodecode/lib/subprocessio.py --- a/rhodecode/lib/subprocessio.py +++ b/rhodecode/lib/subprocessio.py @@ -119,7 +119,11 @@ class InputStreamChunker(Thread): kr = self.keep_reading da = self.data_added go = self.go - b = s.read(cs) + + try: + b = s.read(cs) + except ValueError: + b = '' while b and go.is_set(): if len(t) > ccm: @@ -372,7 +376,9 @@ class SubprocessIOChunker(object): bg_out.stop() bg_err.stop() err = '%s' % ''.join(bg_err) - raise EnvironmentError("Subprocess exited due to an error:\n" + err) + if err: + raise EnvironmentError("Subprocess exited due to an error:\n" + err) + raise EnvironmentError("Subprocess exited with non 0 ret code:%s" % _returncode) self.process = _p self.output = bg_out diff --git a/rhodecode/lib/unionrepo.py b/rhodecode/lib/unionrepo.py new file mode 100644 --- /dev/null +++ b/rhodecode/lib/unionrepo.py @@ -0,0 +1,218 @@ +# unionrepo.py - repository class for viewing union of repository changesets +# +# Derived from bundlerepo.py +# Copyright 2006, 2007 Benoit Boissinot +# Copyright 2013 Unity Technologies, Mads Kiilerich +# +# This software may be used and distributed according to the terms of the +# GNU General Public License version 2 or any later version. + +"""Repository class for "in-memory pull" of one local repository to another, +allowing operations like diff and log with revsets. +""" + +import os +from mercurial.node import nullid +from mercurial.i18n import _ +from mercurial import util, mdiff, cmdutil, scmutil +from mercurial import localrepo, changelog, manifest, filelog, revlog + + +class unionrevlog(revlog.revlog): + def __init__(self, opener, indexfile, revlog2, linkmapper): + # How it works: + # To retrieve a revision, we just need to know the node id so we can + # look it up in revlog2. + # + # To differentiate a rev in the second revlog from a rev in the revlog, + # we check revision against repotiprev. + opener = scmutil.readonlyvfs(opener) + revlog.revlog.__init__(self, opener, indexfile) + self.revlog2 = revlog2 + + n = len(self) + self.repotiprev = n - 1 + self.bundlerevs = set() # used by 'bundle()' revset expression + for rev2 in self.revlog2: + rev = self.revlog2.index[rev2] + # rev numbers - in revlog2, very different from self.rev + _start, _csize, _rsize, _base, linkrev, p1rev, p2rev, node = rev + + if linkmapper is None: # link is to same revlog + assert linkrev == rev2 # we never link back + link = n + else: # rev must be mapped from repo2 cl to unified cl by linkmapper + link = linkmapper(linkrev) + + if node in self.nodemap: + # this happens for the common revlog revisions + self.bundlerevs.add(self.nodemap[node]) + continue + + p1node = self.revlog2.node(p1rev) + p2node = self.revlog2.node(p2rev) + + e = (None, None, None, None, + link, self.rev(p1node), self.rev(p2node), node) + self.index.insert(-1, e) + self.nodemap[node] = n + self.bundlerevs.add(n) + n += 1 + + def _chunk(self, rev): + if rev <= self.repotiprev: + return revlog.revlog._chunk(self, rev) + return self.revlog2._chunk(self.node(rev)) + + def revdiff(self, rev1, rev2): + """return or calculate a delta between two revisions""" + if rev1 > self.repotiprev and rev2 > self.repotiprev: + return self.revlog2.revdiff( + self.revlog2.rev(self.node(rev1)), + self.revlog2.rev(self.node(rev2))) + elif rev1 <= self.repotiprev and rev2 <= self.repotiprev: + return revlog.revlog.revdiff(self, rev1, rev2) + + return mdiff.textdiff(self.revision(self.node(rev1)), + self.revision(self.node(rev2))) + + def revision(self, nodeorrev): + """return an uncompressed revision of a given node or revision + number. + """ + if isinstance(nodeorrev, int): + rev = nodeorrev + node = self.node(rev) + else: + node = nodeorrev + rev = self.rev(node) + + if node == nullid: + return "" + + if rev > self.repotiprev: + text = self.revlog2.revision(node) + self._cache = (node, rev, text) + else: + text = revlog.revlog.revision(self, rev) + # already cached + return text + + def addrevision(self, text, transaction, link, p1=None, p2=None, d=None): + raise NotImplementedError + + def addgroup(self, revs, linkmapper, transaction): + raise NotImplementedError + + def strip(self, rev, minlink): + raise NotImplementedError + + def checksize(self): + raise NotImplementedError + + +class unionchangelog(unionrevlog, changelog.changelog): + def __init__(self, opener, opener2): + changelog.changelog.__init__(self, opener) + linkmapper = None + changelog2 = changelog.changelog(opener2) + unionrevlog.__init__(self, opener, self.indexfile, changelog2, + linkmapper) + + +class unionmanifest(unionrevlog, manifest.manifest): + def __init__(self, opener, opener2, linkmapper): + manifest.manifest.__init__(self, opener) + manifest2 = manifest.manifest(opener2) + unionrevlog.__init__(self, opener, self.indexfile, manifest2, + linkmapper) + + +class unionfilelog(unionrevlog, filelog.filelog): + def __init__(self, opener, path, opener2, linkmapper, repo): + filelog.filelog.__init__(self, opener, path) + filelog2 = filelog.filelog(opener2, path) + unionrevlog.__init__(self, opener, self.indexfile, filelog2, + linkmapper) + self._repo = repo + + def _file(self, f): + self._repo.file(f) + + +class unionpeer(localrepo.localpeer): + def canpush(self): + return False + + +class unionrepository(localrepo.localrepository): + def __init__(self, ui, path, path2): + localrepo.localrepository.__init__(self, ui, path) + self.ui.setconfig('phases', 'publish', False) + + self._url = 'union:%s+%s' % (util.expandpath(path), + util.expandpath(path2)) + self.repo2 = localrepo.localrepository(ui, path2) + + @localrepo.unfilteredpropertycache + def changelog(self): + return unionchangelog(self.sopener, self.repo2.sopener) + + def _clrev(self, rev2): + """map from repo2 changelog rev to temporary rev in self.changelog""" + node = self.repo2.changelog.node(rev2) + return self.changelog.rev(node) + + @localrepo.unfilteredpropertycache + def manifest(self): + return unionmanifest(self.sopener, self.repo2.sopener, + self._clrev) + + def url(self): + return self._url + + def file(self, f): + return unionfilelog(self.sopener, f, self.repo2.sopener, + self._clrev, self) + + def close(self): + self.repo2.close() + + def cancopy(self): + return False + + def peer(self): + return unionpeer(self) + + def getcwd(self): + return os.getcwd() # always outside the repo + + +def instance(ui, path, create): + if create: + raise util.Abort(_('cannot create new union repository')) + parentpath = ui.config("bundle", "mainreporoot", "") + if not parentpath: + # try to find the correct path to the working directory repo + parentpath = cmdutil.findrepo(os.getcwd()) + if parentpath is None: + parentpath = '' + if parentpath: + # Try to make the full path relative so we get a nice, short URL. + # In particular, we don't want temp dir names in test outputs. + cwd = os.getcwd() + if parentpath == cwd: + parentpath = '' + else: + cwd = os.path.join(cwd, '') + if parentpath.startswith(cwd): + parentpath = parentpath[len(cwd):] + if path.startswith('union:'): + s = path.split(":", 1)[1].split("+", 1) + if len(s) == 1: + repopath, repopath2 = parentpath, s[0] + else: + repopath, repopath2 = s + else: + repopath, repopath2 = parentpath, path + return unionrepository(ui, repopath, repopath2) diff --git a/rhodecode/lib/utils.py b/rhodecode/lib/utils.py --- a/rhodecode/lib/utils.py +++ b/rhodecode/lib/utils.py @@ -162,16 +162,16 @@ def action_logger(user, action, repo, ip user_log.user_ip = ipaddr sa.add(user_log) - log.info('Logging action %s on %s by %s' % - (action, safe_unicode(repo), user_obj)) + log.info('Logging action:%s on %s by user:%s ip:%s' % + (action, safe_unicode(repo), user_obj, ipaddr)) if commit: sa.commit() - except: + except Exception: log.error(traceback.format_exc()) raise -def get_repos(path, recursive=False, skip_removed_repos=True): +def get_filesystem_repos(path, recursive=False, skip_removed_repos=True): """ Scans given path for repos and return (name,(type,path)) tuple @@ -185,6 +185,7 @@ def get_repos(path, recursive=False, ski def _get_repos(p): if not os.access(p, os.W_OK): + log.warn('ignoring repo path without write access: %s', p) return for dirpath in os.listdir(p): if os.path.isfile(os.path.join(p, dirpath)): @@ -213,9 +214,6 @@ def get_repos(path, recursive=False, ski return _get_repos(path) -#alias for backward compat -get_filesystem_repos = get_repos - def is_valid_repo(repo_name, base_path, scm=None): """ @@ -240,9 +238,9 @@ def is_valid_repo(repo_name, base_path, return False -def is_valid_repos_group(repos_group_name, base_path): +def is_valid_repos_group(repos_group_name, base_path, skip_path_check=False): """ - Returns True if given path is a repos group False otherwise + Returns True if given path is a repository group False otherwise :param repo_name: :param base_path: @@ -263,7 +261,7 @@ def is_valid_repos_group(repos_group_nam pass # check if it's a valid path - if os.path.isdir(full_path): + if skip_path_check or os.path.isdir(full_path): return True return False @@ -429,11 +427,6 @@ def repo2db_mapper(initial_repo_list, re raise Exception('Missing administrative account!') added = [] -# # clear cache keys -# log.debug("Clearing cache keys now...") -# CacheInvalidation.clear_cache() -# sa.commit() - ##creation defaults defs = RhodeCodeSetting.get_default_repo_settings(strip_prefix=True) enable_statistics = defs.get('repo_enable_statistics') @@ -474,10 +467,9 @@ def repo2db_mapper(initial_repo_list, re ScmModel().install_git_hook(db_repo.scm_instance) # 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) + cache_key = CacheInvalidation._get_cache_key(name) + log.debug("Creating invalidation cache key for %s: %s", name, cache_key) CacheInvalidation.invalidate(name) - log.debug("Creating a cache key for %s, instance_id %s" - % (name, _prefix or 'unknown')) sa.commit() removed = [] @@ -491,11 +483,10 @@ def repo2db_mapper(initial_repo_list, re sa.delete(repo) sa.commit() removed.append(repo.repo_name) - except: + except Exception: #don't hold further removals on error log.error(traceback.format_exc()) sa.rollback() - return added, removed @@ -550,6 +541,26 @@ def load_rcextensions(root_path): log.debug('adding extra into INDEX_EXTENSIONS') conf.INDEX_EXTENSIONS.extend(getattr(EXT, 'EXTRA_INDEX_EXTENSIONS', [])) + # auto check if the module is not missing any data, set to default if is + # this will help autoupdate new feature of rcext module + from rhodecode.config import rcextensions + for k in dir(rcextensions): + if not k.startswith('_') and not hasattr(EXT, k): + setattr(EXT, k, getattr(rcextensions, k)) + + +def get_custom_lexer(extension): + """ + returns a custom lexer if it's defined in rcextensions module, or None + if there's no custom lexer defined + """ + import rhodecode + from pygments import lexers + #check if we didn't define this extension as other lexer + if rhodecode.EXTENSIONS and extension in rhodecode.EXTENSIONS.EXTRA_LEXERS: + _lexer_name = rhodecode.EXTENSIONS.EXTRA_LEXERS[extension] + return lexers.get_lexer_by_name(_lexer_name) + #============================================================================== # TEST FUNCTIONS AND CREATORS @@ -704,26 +715,40 @@ class BasePasterCommand(Command): conf = paste.deploy.appconfig('config:' + self.path_to_ini_file) pylonsconfig.init_app(conf.global_conf, conf.local_conf) + def _init_session(self): + """ + Inits SqlAlchemy Session + """ + logging.config.fileConfig(self.path_to_ini_file) + from pylons import config + from rhodecode.model import init_model + from rhodecode.lib.utils2 import engine_from_config + + #get to remove repos !! + add_cache(config) + engine = engine_from_config(config, 'sqlalchemy.db1.') + init_model(engine) + def check_git_version(): """ Checks what version of git is installed in system, and issues a warning if it's too old for RhodeCode to properly work. """ - import subprocess + from rhodecode import BACKENDS + from rhodecode.lib.vcs.backends.git.repository import GitRepository from distutils.version import StrictVersion - from rhodecode import BACKENDS - p = subprocess.Popen('git --version', shell=True, - stdout=subprocess.PIPE, stderr=subprocess.PIPE) - stdout, stderr = p.communicate() + stdout, stderr = GitRepository._run_git_command('--version', _bare=True, + _safe=True) + 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: + except Exception: _ver = StrictVersion('0.0.0') stderr = traceback.format_exc() @@ -735,7 +760,7 @@ def check_git_version(): if 'git' in BACKENDS: log.debug('GIT version detected: %s' % stdout) if stderr: - log.warning('Unable to detect git version org error was:%r' % stderr) + log.warning('Unable to detect git version, org error was: %r' % stderr) elif to_old_git: log.warning('RhodeCode detected git version %s, which is too old ' 'for the system to function properly. Make sure ' diff --git a/rhodecode/lib/utils2.py b/rhodecode/lib/utils2.py --- a/rhodecode/lib/utils2.py +++ b/rhodecode/lib/utils2.py @@ -23,13 +23,17 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +import os import re +import sys import time import datetime +import traceback import webob from pylons.i18n.translation import _, ungettext from rhodecode.lib.vcs.utils.lazy import LazyProperty +from rhodecode.lib.compat import json def __get_lem(): @@ -349,31 +353,35 @@ def engine_from_config(configuration, pr return engine -def age(prevdate): +def age(prevdate, show_short_version=False, now=None): """ turns a datetime into an age string. + If show_short_version is True, then it will generate a not so accurate but shorter string, + example: 2days ago, instead of 2 days and 23 hours ago. :param prevdate: datetime object + :param show_short_version: if it should aproximate the date and return a shorter string :rtype: unicode :returns: unicode words describing age """ - + now = now or datetime.datetime.now() order = ['year', 'month', 'day', 'hour', 'minute', 'second'] deltas = {} future = False - # Get date parts deltas - now = datetime.datetime.now() if prevdate > now: now, prevdate = prevdate, now future = True - + if future: + prevdate = prevdate.replace(microsecond=0) + # Get date parts deltas + from dateutil import relativedelta for part in order: - deltas[part] = getattr(now, part) - getattr(prevdate, part) + d = relativedelta.relativedelta(now, prevdate) + deltas[part] = getattr(d, part + 's') # Fix negative offsets (there is 1 second between 10:59:59 and 11:00:00, # not 1 hour, -59 minutes and -59 seconds) - for num, length in [(5, 60), (4, 60), (3, 24)]: # seconds, minutes, hours part = order[num] carry_part = order[num - 1] @@ -419,7 +427,7 @@ def age(prevdate): else: sub_value = 0 - if sub_value == 0: + if sub_value == 0 or show_short_version: if future: return _(u'in %s') % fmt_funcs[part](value) else: @@ -545,7 +553,6 @@ def fix_PATH(os_=None): Get current active python path, and append it to PATH variable to fix issues of subprocess calls and different python versions """ - import sys if os_ is None: import os else: @@ -563,7 +570,7 @@ def obfuscate_url_pw(engine): _url = sa_url.make_url(engine) if _url.password: _url.password = 'XXXXX' - except: + except Exception: pass return str(_url) @@ -571,3 +578,32 @@ def obfuscate_url_pw(engine): def get_server_url(environ): req = webob.Request(environ) return req.host_url + req.script_name + + +def _extract_extras(env=None): + """ + Extracts the rc extras data from os.environ, and wraps it into named + AttributeDict object + """ + if not env: + env = os.environ + + try: + rc_extras = json.loads(env['RC_SCM_DATA']) + except Exception: + print os.environ + print >> sys.stderr, traceback.format_exc() + rc_extras = {} + + try: + for k in ['username', 'repository', 'locked_by', 'scm', 'make_lock', + 'action', 'ip']: + rc_extras[k] + except KeyError, e: + raise Exception('Missing key %s in os.environ %s' % (e, rc_extras)) + + return AttributeDict(rc_extras) + + +def _set_extras(extras): + os.environ['RC_SCM_DATA'] = json.dumps(extras) 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 @@ -9,7 +9,7 @@ :copyright: (c) 2010-2011 by Marcin Kuzminski, Lukasz Balcerzak. """ - +import datetime from itertools import chain from rhodecode.lib.vcs.utils import author_name, author_email from rhodecode.lib.vcs.utils.lazy import LazyProperty @@ -433,28 +433,28 @@ class BaseChangeset(object): raise NotImplementedError @LazyProperty - def commiter(self): + def committer(self): """ - Returns Commiter for given commit + Returns Committer for given commit """ raise NotImplementedError @LazyProperty - def commiter_name(self): + def committer_name(self): """ Returns Author name for given commit """ - return author_name(self.commiter) + return author_name(self.committer) @LazyProperty - def commiter_email(self): + def committer_email(self): """ Returns Author email address for given commit """ - return author_email(self.commiter) + return author_email(self.committer) @LazyProperty def author(self): @@ -959,12 +959,12 @@ class EmptyChangeset(BaseChangeset): """ def __init__(self, cs='0' * 40, repo=None, requested_revision=None, - alias=None, revision=-1, message='', author='', date=''): + alias=None, revision=-1, message='', author='', date=None): self._empty_cs = cs self.revision = revision self.message = message self.author = author - self.date = date + self.date = date or datetime.datetime.fromtimestamp(0) 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 @@ -2,6 +2,7 @@ import re from itertools import chain from dulwich import objects from subprocess import Popen, PIPE +import rhodecode from rhodecode.lib.vcs.conf import settings from rhodecode.lib.vcs.exceptions import RepositoryError from rhodecode.lib.vcs.exceptions import ChangesetError @@ -16,6 +17,7 @@ from rhodecode.lib.vcs.nodes import File from rhodecode.lib.vcs.utils import safe_unicode from rhodecode.lib.vcs.utils import date_fromtimestamp from rhodecode.lib.vcs.utils.lazy import LazyProperty +from rhodecode.lib.utils2 import safe_int class GitChangeset(BaseChangeset): @@ -40,7 +42,7 @@ class GitChangeset(BaseChangeset): self._commit = commit self._tree_id = commit.tree - self._commiter_property = 'committer' + self._committer_property = 'committer' self._author_property = 'author' self._date_property = 'commit_time' self._date_tz_property = 'commit_timezone' @@ -52,8 +54,8 @@ class GitChangeset(BaseChangeset): self._paths = {} @LazyProperty - def commiter(self): - return safe_unicode(getattr(self._commit, self._commiter_property)) + def committer(self): + return safe_unicode(getattr(self._commit, self._committer_property)) @LazyProperty def author(self): @@ -151,7 +153,7 @@ class GitChangeset(BaseChangeset): self._stat_modes[name] = stat if not path in self._paths: raise NodeDoesNotExistError("There is no file nor directory " - "at the given path %r at revision %r" + "at the given path '%s' at revision %s" % (path, self.short_id)) return self._paths[path] @@ -165,8 +167,8 @@ class GitChangeset(BaseChangeset): 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)) + raise ChangesetError("File does not exist for revision %s at " + " '%s'" % (self.raw_id, path)) return path def _get_file_nodes(self): @@ -185,8 +187,10 @@ class GitChangeset(BaseChangeset): """ Returns list of children changesets. """ + rev_filter = _git_path = rhodecode.CONFIG.get('git_rev_filter', + '--all').strip() so, se = self.repository.run_git_command( - "rev-list --all --children | grep '^%s'" % self.raw_id + "rev-list %s --children | grep '^%s'" % (rev_filter, self.raw_id) ) children = [] @@ -274,10 +278,9 @@ class GitChangeset(BaseChangeset): """ Returns last commit of the file at the given ``path``. """ - node = self.get_node(path) - return node.history[0] + return self.get_file_history(path, limit=1)[0] - def get_file_history(self, path): + def get_file_history(self, path, limit=None): """ Returns history of file as reversed list of ``Changeset`` objects for which file at given ``path`` has been modified. @@ -286,11 +289,16 @@ 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 - ) + if limit: + cmd = 'log -n %s --pretty="format: %%H" -s -p %s -- "%s"' % ( + safe_int(limit, 0), self.id, path + ) + else: + cmd = 'log --pretty="format: %%H" -s -p %s -- "%s"' % ( + self.id, path + ) so, se = self.repository.run_git_command(cmd) ids = re.findall(r'[0-9a-fA-F]{40}', so) return [self.repository.get_changeset(id) for id in ids] @@ -362,8 +370,9 @@ class GitChangeset(BaseChangeset): frmt = 'zip' else: frmt = 'tar' - cmd = 'git archive --format=%s --prefix=%s/ %s' % (frmt, prefix, - self.raw_id) + _git_path = rhodecode.CONFIG.get('git_path', 'git') + cmd = '%s archive --format=%s --prefix=%s/ %s' % (_git_path, + frmt, prefix, self.raw_id) if kind == 'tgz': cmd += ' | gzip -9' elif kind == 'tbz2': @@ -385,8 +394,8 @@ class GitChangeset(BaseChangeset): def get_nodes(self, path): if self._get_kind(path) != NodeKind.DIR: - raise ChangesetError("Directory does not exist for revision %r at " - " %r" % (self.revision, path)) + raise ChangesetError("Directory does not exist for revision %s at " + " '%s'" % (self.revision, path)) path = self._fix_path(path) id = self._get_id_for_path(path) tree = self.repository._repo[id] @@ -449,7 +458,7 @@ class GitChangeset(BaseChangeset): node._blob = obj else: raise NodeDoesNotExistError("There is no file nor directory " - "at the given path %r at revision %r" + "at the given path '%s' at revision %s" % (path, self.short_id)) # cache node self.nodes[path] = node 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 @@ -20,7 +20,8 @@ import urllib2 from dulwich.repo import Repo, NotGitRepository from dulwich.objects import Tag from string import Template -from subprocess import Popen, PIPE + +import rhodecode from rhodecode.lib.vcs.backends.base import BaseRepository from rhodecode.lib.vcs.exceptions import BranchDoesNotExistError from rhodecode.lib.vcs.exceptions import ChangesetDoesNotExistError @@ -63,18 +64,9 @@ class GitRepository(BaseRepository): abspath(get_user_home(), '.gitconfig'), ] - @ThreadLocalLazyProperty + @property 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: - from mercurial.ui import ui - baseui = ui() - # patch the instance of GitRepo with an "FAKE" ui object to add - # compatibility layer with Mercurial - setattr(repo, 'ui', baseui) - return repo + return Repo(self.path) @property def head(self): @@ -91,20 +83,27 @@ class GitRepository(BaseRepository): """ return self._get_all_revisions() - def run_git_command(self, cmd): + @classmethod + def _run_git_command(cls, cmd, **opts): """ Runs given ``cmd`` as git command and returns tuple - (returncode, stdout, stderr). - - .. note:: - This method exists only until log/blame functionality is implemented - at Dulwich (see https://bugs.launchpad.net/bugs/645142). Parsing - os command's output is road to hell... + (stdout, stderr). :param cmd: git command to be executed + :param opts: env options to pass into Subprocess command """ - _copts = ['-c', 'core.quotepath=false', ] + if '_bare' in opts: + _copts = [] + del opts['_bare'] + else: + _copts = ['-c', 'core.quotepath=false', ] + safe_call = False + if '_safe' in opts: + #no exc on failure + del opts['_safe'] + safe_call = True + _str_cmd = False if isinstance(cmd, basestring): cmd = [cmd] @@ -116,24 +115,34 @@ class GitRepository(BaseRepository): del gitenv['GIT_DIR'] gitenv['GIT_CONFIG_NOGLOBAL'] = '1' - cmd = ['git'] + _copts + cmd + _git_path = rhodecode.CONFIG.get('git_path', 'git') + cmd = [_git_path] + _copts + cmd if _str_cmd: cmd = ' '.join(cmd) try: - opts = dict( + _opts = dict( env=gitenv, shell=False, ) - if os.path.isdir(self.path): - opts['cwd'] = self.path - p = subprocessio.SubprocessIOChunker(cmd, **opts) + _opts.update(opts) + p = subprocessio.SubprocessIOChunker(cmd, **_opts) except (EnvironmentError, OSError), err: - log.error(traceback.format_exc()) - raise RepositoryError("Couldn't run git command (%s).\n" - "Original error was:%s" % (cmd, err)) + tb_err = ("Couldn't run git command (%s).\n" + "Original error was:%s\n" % (cmd, err)) + log.error(tb_err) + if safe_call: + return '', err + else: + raise RepositoryError(tb_err) return ''.join(p.output), ''.join(p.error) + def run_git_command(self, cmd): + opts = {} + if os.path.isdir(self.path): + opts['cwd'] = self.path + return self._run_git_command(cmd, **opts) + @classmethod def _check_url(cls, url): """ @@ -203,7 +212,7 @@ class GitRepository(BaseRepository): else: return Repo.init(self.path) else: - return Repo(self.path) + return self._repo except (NotGitRepository, OSError), err: raise RepositoryError(err) @@ -215,7 +224,9 @@ class GitRepository(BaseRepository): self._repo.head() except KeyError: return [] - cmd = 'rev-list --all --reverse --date-order' + rev_filter = _git_path = rhodecode.CONFIG.get('git_rev_filter', + '--all').strip() + cmd = 'rev-list %s --reverse --date-order' % (rev_filter) try: so, se = self.run_git_command(cmd) except RepositoryError: @@ -248,9 +259,9 @@ class GitRepository(BaseRepository): or isinstance(revision, int) or is_null(revision)): try: revision = self.revisions[int(revision)] - except: - raise ChangesetDoesNotExistError("Revision %r does not exist " - "for this repository %s" % (revision, self)) + except Exception: + raise ChangesetDoesNotExistError("Revision %s does not exist " + "for this repository" % (revision)) elif is_bstr(revision): # get by branch/tag name @@ -264,12 +275,12 @@ class GitRepository(BaseRepository): return _tags_shas[_tags_shas.index(revision)] elif not pattern.match(revision) or revision not in self.revisions: - raise ChangesetDoesNotExistError("Revision %r does not exist " - "for this repository %s" % (revision, self)) + raise ChangesetDoesNotExistError("Revision %s does not exist " + "for this repository" % (revision)) # Ensure we return full id if not pattern.match(str(revision)): - raise ChangesetDoesNotExistError("Given revision %r not recognized" + raise ChangesetDoesNotExistError("Given revision %s not recognized" % revision) return revision @@ -288,6 +299,15 @@ class GitRepository(BaseRepository): url = ':///'.join(('file', url)) return url + def get_hook_location(self): + """ + returns absolute path to location where hooks are stored + """ + loc = os.path.join(self.path, 'hooks') + if not self.bare: + loc = os.path.join(self.path, '.git', 'hooks') + return loc + @LazyProperty def name(self): return os.path.basename(self.path) @@ -399,7 +419,9 @@ class GitRepository(BaseRepository): return self._get_parsed_refs() def _get_parsed_refs(self): - refs = self._repo.get_refs() + # cache the property + _repo = self._repo + refs = _repo.get_refs() keys = [('refs/heads/', 'H'), ('refs/remotes/origin/', 'RH'), ('refs/tags/', 'T')] @@ -409,9 +431,9 @@ class GitRepository(BaseRepository): if ref.startswith(k): _key = ref[len(k):] if type_ == 'T': - obj = self._repo.get_object(sha) + obj = _repo.get_object(sha) if isinstance(obj, Tag): - sha = self._repo.get_object(sha).object[1] + sha = _repo.get_object(sha).object[1] _refs[_key] = [sha, type_] break return _refs @@ -480,7 +502,9 @@ class GitRepository(BaseRepository): cmd_template += ' $branch_name' cmd_params['branch_name'] = branch_name else: - cmd_template += ' --all' + rev_filter = _git_path = rhodecode.CONFIG.get('git_rev_filter', + '--all').strip() + cmd_template += ' %s' % (rev_filter) cmd = Template(cmd_template).safe_substitute(**cmd_params) revs = self.run_git_command(cmd)[0].splitlines() 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,8 +44,8 @@ class MercurialChangeset(BaseChangeset): return safe_unicode(self._ctx.description()) @LazyProperty - def commiter(self): - return safe_unicode(self.auhtor) + def committer(self): + return safe_unicode(self.author) @LazyProperty def author(self): @@ -174,14 +174,14 @@ class MercurialChangeset(BaseChangeset): elif path in self._dir_paths: return NodeKind.DIR else: - raise ChangesetError("Node does not exist at the given path %r" + raise ChangesetError("Node does not exist at the given path '%s'" % (path)) 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)) + raise ChangesetError("File does not exist for revision %s at " + " '%s'" % (self.raw_id, path)) return self._ctx.filectx(path) def _extract_submodules(self): @@ -219,19 +219,23 @@ class MercurialChangeset(BaseChangeset): """ Returns last commit of the file at the given ``path``. """ - node = self.get_node(path) - return node.history[0] + return self.get_file_history(path, limit=1)[0] - def get_file_history(self, path): + def get_file_history(self, path, limit=None): """ Returns history of file as reversed list of ``Changeset`` objects for which file at given ``path`` has been modified. """ fctx = self._get_filectx(path) - nodes = [fctx.filectx(x).node() for x in fctx.filelog()] - changesets = [self.repository.get_changeset(hex(node)) - for node in reversed(nodes)] - return changesets + hist = [] + cnt = 0 + for cs in reversed([x for x in fctx.filelog()]): + cnt += 1 + hist.append(hex(fctx.filectx(cs).node())) + if limit and cnt == limit: + break + + return [self.repository.get_changeset(node) for node in hist] def get_file_annotate(self, path): """ @@ -296,8 +300,8 @@ class MercurialChangeset(BaseChangeset): """ if self._get_kind(path) != NodeKind.DIR: - raise ChangesetError("Directory does not exist for revision %r at " - " %r" % (self.revision, path)) + raise ChangesetError("Directory does not exist for revision %s at " + " '%s'" % (self.revision, path)) path = self._fix_path(path) filenodes = [FileNode(f, changeset=self) for f in self._file_paths @@ -340,7 +344,7 @@ class MercurialChangeset(BaseChangeset): node = DirNode(path, changeset=self) else: raise NodeDoesNotExistError("There is no file nor directory " - "at the given path: %r at revision %r" + "at the given path: '%s' at revision %s" % (path, self.short_id)) # cache node self.nodes[path] = node 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 @@ -79,6 +79,13 @@ class MercurialRepository(BaseRepository def branches(self): return self._get_branches() + @LazyProperty + def allbranches(self): + """ + List all branches, including closed branches. + """ + return self._get_branches(closed=True) + def _get_branches(self, closed=False): """ Get's branches for this repository @@ -397,9 +404,9 @@ class MercurialRepository(BaseRepository try: revision = hex(self._repo.lookup(revision)) except (IndexError, ValueError, RepoLookupError, TypeError): - raise ChangesetDoesNotExistError("Revision %r does not " - "exist for this repository %s" \ - % (revision, self)) + raise ChangesetDoesNotExistError("Revision %s does not " + "exist for this repository" + % (revision)) return revision def _get_archives(self, archive_name='tip'): @@ -422,6 +429,12 @@ class MercurialRepository(BaseRepository url = "file:" + urllib.pathname2url(url) return url + def get_hook_location(self): + """ + returns absolute path to location where hooks are stored + """ + return os.path.join(self.path, '.hg', '.hgrc') + def get_changeset(self, revision=None): """ Returns ``MercurialChangeset`` object representing repository's @@ -451,11 +464,11 @@ class MercurialRepository(BaseRepository end_pos = self.revisions.index(end_raw_id) if end else None if None not in [start, end] and start_pos > end_pos: - raise RepositoryError("start revision '%s' cannot be " + raise RepositoryError("Start revision '%s' cannot be " "after end revision '%s'" % (start, end)) - if branch_name and branch_name not in self.branches.keys(): - raise BranchDoesNotExistError('Such branch %s does not exists for' + if branch_name and branch_name not in self.allbranches.keys(): + raise BranchDoesNotExistError('Branch %s not found in' ' this repository' % branch_name) if end_pos is not None: end_pos += 1 @@ -492,7 +505,7 @@ class MercurialRepository(BaseRepository """ return MercurialWorkdir(self) - def get_config_value(self, section, name, config_file=None): + def get_config_value(self, section, name=None, config_file=None): """ Returns configuration value for a given [``section``] and ``name``. 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 @@ -1,3 +1,14 @@ +class _Missing(object): + + def __repr__(self): + return 'no value' + + def __reduce__(self): + return '_missing' + +_missing = _Missing() + + class LazyProperty(object): """ Decorator for easier creation of ``property`` from potentially expensive to @@ -24,8 +35,11 @@ class LazyProperty(object): def __get__(self, obj, klass=None): if obj is None: return self - result = obj.__dict__[self.__name__] = self._func(obj) - return result + value = obj.__dict__.get(self.__name__, _missing) + if value is _missing: + value = self._func(obj) + obj.__dict__[self.__name__] = value + return value import threading @@ -41,5 +55,8 @@ class ThreadLocalLazyProperty(LazyProper if not hasattr(obj, '__tl_dict__'): obj.__tl_dict__ = threading.local().__dict__ - result = obj.__tl_dict__[self.__name__] = self._func(obj) - return result + value = obj.__tl_dict__.get(self.__name__, _missing) + if value is _missing: + value = self._func(obj) + obj.__tl_dict__[self.__name__] = value + return value diff --git a/rhodecode/lib/vcs/utils/lockfiles.py b/rhodecode/lib/vcs/utils/lockfiles.py --- a/rhodecode/lib/vcs/utils/lockfiles.py +++ b/rhodecode/lib/vcs/utils/lockfiles.py @@ -2,71 +2,71 @@ import os class LockFile(object): - """Provides methods to obtain, check for, and release a file based lock which - should be used to handle concurrent access to the same file. + """Provides methods to obtain, check for, and release a file based lock which + should be used to handle concurrent access to the same file. - As we are a utility class to be derived from, we only use protected methods. + As we are a utility class to be derived from, we only use protected methods. - Locks will automatically be released on destruction""" - __slots__ = ("_file_path", "_owns_lock") + Locks will automatically be released on destruction""" + __slots__ = ("_file_path", "_owns_lock") - def __init__(self, file_path): - self._file_path = file_path - self._owns_lock = False + def __init__(self, file_path): + self._file_path = file_path + self._owns_lock = False - def __del__(self): - self._release_lock() + def __del__(self): + self._release_lock() - def _lock_file_path(self): - """:return: Path to lockfile""" - return "%s.lock" % (self._file_path) + def _lock_file_path(self): + """:return: Path to lockfile""" + return "%s.lock" % (self._file_path) - def _has_lock(self): - """:return: True if we have a lock and if the lockfile still exists - :raise AssertionError: if our lock-file does not exist""" - if not self._owns_lock: - return False + def _has_lock(self): + """:return: True if we have a lock and if the lockfile still exists + :raise AssertionError: if our lock-file does not exist""" + if not self._owns_lock: + return False - return True + return True - def _obtain_lock_or_raise(self): - """Create a lock file as flag for other instances, mark our instance as lock-holder + def _obtain_lock_or_raise(self): + """Create a lock file as flag for other instances, mark our instance as lock-holder - :raise IOError: if a lock was already present or a lock file could not be written""" - if self._has_lock(): - return - lock_file = self._lock_file_path() - if os.path.isfile(lock_file): - raise IOError("Lock for file %r did already exist, delete %r in case the lock is illegal" % (self._file_path, lock_file)) + :raise IOError: if a lock was already present or a lock file could not be written""" + if self._has_lock(): + return + lock_file = self._lock_file_path() + if os.path.isfile(lock_file): + raise IOError("Lock for file %r did already exist, delete %r in case the lock is illegal" % (self._file_path, lock_file)) - try: - fd = os.open(lock_file, os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0) - os.close(fd) - except OSError,e: - raise IOError(str(e)) + try: + fd = os.open(lock_file, os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0) + os.close(fd) + except OSError,e: + raise IOError(str(e)) - self._owns_lock = True + self._owns_lock = True - def _obtain_lock(self): - """The default implementation will raise if a lock cannot be obtained. - Subclasses may override this method to provide a different implementation""" - return self._obtain_lock_or_raise() + def _obtain_lock(self): + """The default implementation will raise if a lock cannot be obtained. + Subclasses may override this method to provide a different implementation""" + return self._obtain_lock_or_raise() - def _release_lock(self): - """Release our lock if we have one""" - if not self._has_lock(): - return + def _release_lock(self): + """Release our lock if we have one""" + if not self._has_lock(): + return - # if someone removed our file beforhand, lets just flag this issue - # instead of failing, to make it more usable. - lfp = self._lock_file_path() - try: - # on bloody windows, the file needs write permissions to be removable. - # Why ... - if os.name == 'nt': - os.chmod(lfp, 0777) - # END handle win32 - os.remove(lfp) - except OSError: - pass - self._owns_lock = False + # if someone removed our file beforhand, lets just flag this issue + # instead of failing, to make it more usable. + lfp = self._lock_file_path() + try: + # on bloody windows, the file needs write permissions to be removable. + # Why ... + if os.name == 'nt': + os.chmod(lfp, 0777) + # END handle win32 + os.remove(lfp) + except OSError: + pass + self._owns_lock = False diff --git a/rhodecode/model/changeset_status.py b/rhodecode/model/changeset_status.py --- a/rhodecode/model/changeset_status.py +++ b/rhodecode/model/changeset_status.py @@ -132,10 +132,11 @@ class ChangesetStatusModel(BaseModel): if not comment: from rhodecode.model.comment import ChangesetCommentsModel comment = ChangesetCommentsModel().create( - text='Auto status change', + text='Auto status change to %s' % (ChangesetStatus.get_status_lbl(status)), repo=repo, user=user, pull_request=pull_request, + send_email=False ) if revision: q = q.filter(ChangesetStatus.repo == repo) diff --git a/rhodecode/model/comment.py b/rhodecode/model/comment.py --- a/rhodecode/model/comment.py +++ b/rhodecode/model/comment.py @@ -35,6 +35,7 @@ from rhodecode.model import BaseModel from rhodecode.model.db import ChangesetComment, User, Repository, \ Notification, PullRequest from rhodecode.model.notification import NotificationModel +from rhodecode.model.meta import Session log = logging.getLogger(__name__) @@ -57,8 +58,103 @@ class ChangesetCommentsModel(BaseModel): user_objects.append(user_obj) return user_objects + def _get_notification_data(self, repo, comment, user, comment_text, + line_no=None, revision=None, pull_request=None, + status_change=None, closing_pr=False): + """ + Get notification data + + :param comment_text: + :param line: + :returns: tuple (subj,body,recipients,notification_type,email_kwargs) + """ + # make notification + body = comment_text # text of the comment + line = '' + if line_no: + line = _('on line %s') % line_no + + #changeset + if revision: + notification_type = Notification.TYPE_CHANGESET_COMMENT + cs = repo.scm_instance.get_changeset(revision) + desc = "%s" % (cs.short_id) + + _url = h.url('changeset_home', + repo_name=repo.repo_name, + revision=revision, + anchor='comment-%s' % comment.comment_id, + qualified=True, + ) + subj = safe_unicode( + h.link_to('Re changeset: %(desc)s %(line)s' % \ + {'desc': desc, 'line': line}, + _url) + ) + email_subject = 'User %s commented on changeset %s' % \ + (user.username, h.short_id(revision)) + # get the current participants of this changeset + recipients = ChangesetComment.get_users(revision=revision) + # add changeset author if it's in rhodecode system + cs_author = User.get_from_cs_author(cs.author) + if not cs_author: + #use repo owner if we cannot extract the author correctly + cs_author = repo.user + recipients += [cs_author] + email_kwargs = { + 'status_change': status_change, + 'cs_comment_user': h.person(user.email), + 'cs_target_repo': h.url('summary_home', repo_name=repo.repo_name, + qualified=True), + 'cs_comment_url': _url, + 'raw_id': revision, + 'message': cs.message + } + #pull request + elif pull_request: + notification_type = Notification.TYPE_PULL_REQUEST_COMMENT + desc = comment.pull_request.title + _url = h.url('pullrequest_show', + repo_name=pull_request.other_repo.repo_name, + pull_request_id=pull_request.pull_request_id, + anchor='comment-%s' % comment.comment_id, + qualified=True, + ) + subj = safe_unicode( + h.link_to('Re pull request #%(pr_id)s: %(desc)s %(line)s' % \ + {'desc': desc, + 'pr_id': comment.pull_request.pull_request_id, + 'line': line}, + _url) + ) + email_subject = 'User %s commented on pull request #%s' % \ + (user.username, comment.pull_request.pull_request_id) + # get the current participants of this pull request + recipients = ChangesetComment.get_users(pull_request_id= + pull_request.pull_request_id) + # add pull request author + recipients += [pull_request.author] + + # add the reviewers to notification + recipients += [x.user for x in pull_request.reviewers] + + #set some variables for email notification + email_kwargs = { + 'pr_id': pull_request.pull_request_id, + 'status_change': status_change, + 'closing_pr': closing_pr, + 'pr_comment_url': _url, + 'pr_comment_user': h.person(user.email), + 'pr_target_repo': h.url('summary_home', + repo_name=pull_request.other_repo.repo_name, + qualified=True) + } + + return subj, body, recipients, notification_type, email_kwargs, email_subject + def create(self, text, repo, user, revision=None, pull_request=None, - f_path=None, line_no=None, status_change=None): + f_path=None, line_no=None, status_change=None, closing_pr=False, + send_email=True): """ Creates new comment for changeset or pull request. IF status_change is not none this comment is associated with a @@ -72,8 +168,11 @@ class ChangesetCommentsModel(BaseModel): :param f_path: :param line_no: :param status_change: + :param closing_pr: + :param send_email: """ if not text: + log.warning('Missing text for comment, skipping...') return repo = self._get_repo(repo) @@ -86,100 +185,44 @@ class ChangesetCommentsModel(BaseModel): comment.line_no = line_no if revision: - cs = repo.scm_instance.get_changeset(revision) - desc = "%s - %s" % (cs.short_id, h.shorter(cs.message, 256)) comment.revision = revision elif pull_request: pull_request = self.__get_pull_request(pull_request) comment.pull_request = pull_request - desc = pull_request.pull_request_id else: raise Exception('Please specify revision or pull_request_id') - self.sa.add(comment) - self.sa.flush() - - # make notification - line = '' - body = text + Session().add(comment) + Session().flush() - #changeset - if revision: - if line_no: - line = _('on line %s') % line_no - subj = safe_unicode( - h.link_to('Re commit: %(desc)s %(line)s' % \ - {'desc': desc, 'line': line}, - h.url('changeset_home', repo_name=repo.repo_name, + if send_email: + (subj, body, recipients, notification_type, + email_kwargs, email_subject) = self._get_notification_data( + repo, comment, user, + comment_text=text, + line_no=line_no, revision=revision, - anchor='comment-%s' % comment.comment_id, - qualified=True, - ) - ) - ) - notification_type = Notification.TYPE_CHANGESET_COMMENT - # get the current participants of this changeset - recipients = ChangesetComment.get_users(revision=revision) - # add changeset author if it's in rhodecode system - cs_author = User.get_from_cs_author(cs.author) - if not cs_author: - #use repo owner if we cannot extract the author correctly - cs_author = repo.user - recipients += [cs_author] - email_kwargs = { - 'status_change': status_change, - } - #pull request - elif pull_request: - _url = h.url('pullrequest_show', - repo_name=pull_request.other_repo.repo_name, - pull_request_id=pull_request.pull_request_id, - anchor='comment-%s' % comment.comment_id, - qualified=True, - ) - subj = safe_unicode( - h.link_to('Re pull request: %(desc)s %(line)s' % \ - {'desc': desc, 'line': line}, _url) + pull_request=pull_request, + status_change=status_change, + closing_pr=closing_pr) + # create notification objects, and emails + NotificationModel().create( + created_by=user, subject=subj, body=body, + recipients=recipients, type_=notification_type, + email_kwargs=email_kwargs, email_subject=email_subject ) - notification_type = Notification.TYPE_PULL_REQUEST_COMMENT - # get the current participants of this pull request - recipients = ChangesetComment.get_users(pull_request_id= - pull_request.pull_request_id) - # add pull request author - recipients += [pull_request.author] - - # add the reviewers to notification - recipients += [x.user for x in pull_request.reviewers] - - #set some variables for email notification - email_kwargs = { - 'pr_id': pull_request.pull_request_id, - 'status_change': status_change, - 'pr_comment_url': _url, - 'pr_comment_user': h.person(user.email), - 'pr_target_repo': h.url('summary_home', - repo_name=pull_request.other_repo.repo_name, - qualified=True) - } - # create notification objects, and emails - NotificationModel().create( - created_by=user, subject=subj, body=body, - recipients=recipients, type_=notification_type, - email_kwargs=email_kwargs - ) - - mention_recipients = set(self._extract_mentions(body))\ - .difference(recipients) - if mention_recipients: - email_kwargs.update({'pr_mention': True}) - subj = _('[Mention]') + ' ' + subj - NotificationModel().create( - created_by=user, subject=subj, body=body, - recipients=mention_recipients, - type_=notification_type, - email_kwargs=email_kwargs - ) + mention_recipients = set(self._extract_mentions(body))\ + .difference(recipients) + if mention_recipients: + email_kwargs.update({'pr_mention': True}) + subj = _('[Mention]') + ' ' + subj + NotificationModel().create( + created_by=user, subject=subj, body=body, + recipients=mention_recipients, + type_=notification_type, + email_kwargs=email_kwargs + ) return comment @@ -190,7 +233,7 @@ class ChangesetCommentsModel(BaseModel): :param comment_id: """ comment = self.__get_changeset_comment(comment) - self.sa.delete(comment) + Session().delete(comment) return comment @@ -199,11 +242,8 @@ class ChangesetCommentsModel(BaseModel): Get's main comments based on revision or pull_request_id :param repo_id: - :type repo_id: :param revision: - :type revision: :param pull_request: - :type pull_request: """ q = ChangesetComment.query()\ @@ -221,7 +261,7 @@ class ChangesetCommentsModel(BaseModel): return q.all() def get_inline_comments(self, repo_id, revision=None, pull_request=None): - q = self.sa.query(ChangesetComment)\ + q = Session().query(ChangesetComment)\ .filter(ChangesetComment.repo_id == repo_id)\ .filter(ChangesetComment.line_no != None)\ .filter(ChangesetComment.f_path != None)\ diff --git a/rhodecode/model/db.py b/rhodecode/model/db.py --- a/rhodecode/model/db.py +++ b/rhodecode/model/db.py @@ -44,9 +44,10 @@ from rhodecode.lib.vcs import get_backen 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.vcs.backends.base import EmptyChangeset from rhodecode.lib.utils2 import str2bool, safe_str, get_changeset_safe, \ - safe_unicode, remove_suffix, remove_prefix + safe_unicode, remove_suffix, remove_prefix, time_to_datetime, _set_extras from rhodecode.lib.compat import json from rhodecode.lib.caching_query import FromCache @@ -341,7 +342,7 @@ class User(Base, BaseModel): 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') + group_member = relationship('UserGroupMember', cascade='all') notifications = relationship('UserNotification', cascade='all') # notifications assigned to this user @@ -604,7 +605,7 @@ class UserLog(Base, BaseModel): repository = relationship('Repository', cascade='') -class UsersGroup(Base, BaseModel): +class UserGroup(Base, BaseModel): __tablename__ = 'users_groups' __table_args__ = ( {'extend_existing': True, 'mysql_engine': 'InnoDB', @@ -616,9 +617,9 @@ class UsersGroup(Base, BaseModel): 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') + members = relationship('UserGroupMember', cascade="all, delete, delete-orphan", lazy="joined") + users_group_to_perm = relationship('UserGroupToPerm', cascade='all') + users_group_repo_to_perm = relationship('UserGroupRepoToPerm', cascade='all') def __unicode__(self): return u'' % (self.users_group_name) @@ -658,7 +659,7 @@ class UsersGroup(Base, BaseModel): return data -class UsersGroupMember(Base, BaseModel): +class UserGroupMember(Base, BaseModel): __tablename__ = 'users_groups_members' __table_args__ = ( {'extend_existing': True, 'mysql_engine': 'InnoDB', @@ -670,13 +671,51 @@ class UsersGroupMember(Base, BaseModel): 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') + users_group = relationship('UserGroup') def __init__(self, gr_id='', u_id=''): self.users_group_id = gr_id self.user_id = u_id +class RepositoryField(Base, BaseModel): + __tablename__ = 'repositories_fields' + __table_args__ = ( + UniqueConstraint('repository_id', 'field_key'), # no-multi field + {'extend_existing': True, 'mysql_engine': 'InnoDB', + 'mysql_charset': 'utf8'}, + ) + PREFIX = 'ex_' # prefix used in form to not conflict with already existing fields + + repo_field_id = Column("repo_field_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None) + field_key = Column("field_key", String(250, convert_unicode=False, assert_unicode=None)) + field_label = Column("field_label", String(1024, convert_unicode=False, assert_unicode=None), nullable=False) + field_value = Column("field_value", String(10000, convert_unicode=False, assert_unicode=None), nullable=False) + field_desc = Column("field_desc", String(1024, convert_unicode=False, assert_unicode=None), nullable=False) + field_type = Column("field_type", String(256), nullable=False, unique=None) + created_on = Column('created_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now) + + repository = relationship('Repository') + + @property + def field_key_prefixed(self): + return 'ex_%s' % self.field_key + + @classmethod + def un_prefix_key(cls, key): + if key.startswith(cls.PREFIX): + return key[len(cls.PREFIX):] + return key + + @classmethod + def get_by_key_name(cls, key, repo): + row = cls.query()\ + .filter(cls.repository == repo)\ + .filter(cls.field_key == key).scalar() + return row + + class Repository(Base, BaseModel): __tablename__ = 'repositories' __table_args__ = ( @@ -709,12 +748,14 @@ class Repository(Base, BaseModel): 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') + users_group_to_perm = relationship('UserGroupRepoToPerm', cascade='all') stats = relationship('Statistics', cascade='all', uselist=False) followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id', cascade='all') + extra_fields = relationship('RepositoryField', + cascade="all, delete, delete-orphan") logs = relationship('UserLog') comments = relationship('ChangesetComment', cascade="all, delete, delete-orphan") @@ -761,7 +802,7 @@ class Repository(Base, BaseModel): def changeset_cache(self, val): try: self._changeset_cache = json.dumps(val) - except: + except Exception: log.error(traceback.format_exc()) @classmethod @@ -846,7 +887,7 @@ class Repository(Base, BaseModel): @property def groups_and_repo(self): - return self.groups_with_parents, self.just_name + return self.groups_with_parents, self.just_name, self.repo_name @LazyProperty def repo_path(self): @@ -866,7 +907,7 @@ class Repository(Base, BaseModel): # 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) + return os.path.join(*map(safe_unicode, p)) @property def cache_keys(self): @@ -896,18 +937,6 @@ class Repository(Base, BaseModel): 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 @@ -939,8 +968,17 @@ class Repository(Base, BaseModel): enable_statistics=repo.enable_statistics, enable_locking=repo.enable_locking, enable_downloads=repo.enable_downloads, - last_changeset=repo.changeset_cache + last_changeset=repo.changeset_cache, + locked_by=User.get(self.locked[0]).get_api_data() \ + if self.locked[0] else None, + locked_date=time_to_datetime(self.locked[1]) \ + if self.locked[1] else None ) + rc_config = RhodeCodeSetting.get_app_settings() + repository_fields = str2bool(rc_config.get('rhodecode_repository_fields')) + if repository_fields: + for f in self.extra_fields: + data[f.field_key_prefixed] = f.field_value return data @@ -956,6 +994,10 @@ class Repository(Base, BaseModel): Session().add(repo) Session().commit() + @classmethod + def getlock(cls, repo): + return repo.locked + @property def last_db_change(self): return self.updated_on @@ -1008,22 +1050,27 @@ class Repository(Base, BaseModel): """ from rhodecode.lib.vcs.backends.base import BaseChangeset if cs_cache is None: - cs_cache = self.get_changeset() + cs_cache = EmptyChangeset() + # use no-cache version here + scm_repo = self.scm_instance_no_cache() + if scm_repo: + cs_cache = scm_repo.get_changeset() + if isinstance(cs_cache, BaseChangeset): cs_cache = cs_cache.__json__() - if (cs_cache != self.changeset_cache - or not self.last_change - or not self.changeset_cache): + if (cs_cache != self.changeset_cache or not self.changeset_cache): _default = datetime.datetime.fromtimestamp(0) - last_change = cs_cache.get('date') or self.last_change or _default - log.debug('updated repo %s with new cs cache %s' % (self, cs_cache)) + last_change = cs_cache.get('date') or _default + log.debug('updated repo %s with new cs cache %s' + % (self.repo_name, cs_cache)) self.updated_on = last_change self.changeset_cache = cs_cache Session().add(self) Session().commit() else: - log.debug('Skipping repo:%s already with latest changes' % self) + log.debug('Skipping repo:%s already with latest changes' + % self.repo_name) @property def tip(self): @@ -1085,6 +1132,11 @@ class Repository(Base, BaseModel): pr_id, pr_repo] return grouped + def _repo_size(self): + from rhodecode.lib import helpers as h + log.debug('calculating repository size...') + return h.format_byte_size(self.scm_instance.size) + #========================================================================== # SCM CACHE INSTANCE #========================================================================== @@ -1099,7 +1151,6 @@ class Repository(Base, BaseModel): """ CacheInvalidation.set_invalidate(repo_name=self.repo_name) - @LazyProperty def scm_instance_no_cache(self): return self.__get_instance() @@ -1138,7 +1189,8 @@ class Repository(Base, BaseModel): repo_full_path = self.repo_full_path try: alias = get_scm(repo_full_path)[0] - log.debug('Creating instance of %s repository' % alias) + log.debug('Creating instance of %s repository from %s' + % (alias, repo_full_path)) backend = get_backend(alias) except VCSError: log.error(traceback.format_exc()) @@ -1177,7 +1229,7 @@ class RepoGroup(Base, BaseModel): 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') + users_group_to_perm = relationship('UserGroupRepoGroupToPerm', cascade='all') parent_group = relationship('RepoGroup', remote_side=group_id) @@ -1190,15 +1242,14 @@ class RepoGroup(Base, BaseModel): self.group_name) @classmethod - def groups_choices(cls, check_perms=False): + def groups_choices(cls, groups=None, show_empty_group=True): 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 = [('', '')] + if not groups: + groups = cls.query().all() + + repo_groups = [] + if show_empty_group: + repo_groups = [('-1', '-- %s --' % _('top level'))] sep = ' » ' _name = lambda k: _literal(sep.join(k)) @@ -1311,7 +1362,7 @@ class RepoGroup(Base, BaseModel): def recursive_groups(self): """ - Returns all children groups for this group including children of children + Returns all children groups for this group including children of children """ return self._recursive_objects(include_repos=False) @@ -1339,10 +1390,10 @@ class Permission(Base, BaseModel): ('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')), + ('group.none', _('Repository group no access')), + ('group.read', _('Repository group read access')), + ('group.write', _('Repository group write access')), + ('group.admin', _('Repository group admin access')), ('hg.admin', _('RhodeCode Administrator')), ('hg.create.none', _('Repository creation disabled')), @@ -1451,7 +1502,7 @@ class UserToPerm(Base, BaseModel): permission = relationship('Permission', lazy='joined') -class UsersGroupRepoToPerm(Base, BaseModel): +class UserGroupRepoToPerm(Base, BaseModel): __tablename__ = 'users_group_repo_to_perm' __table_args__ = ( UniqueConstraint('repository_id', 'users_group_id', 'permission_id'), @@ -1463,7 +1514,7 @@ class UsersGroupRepoToPerm(Base, BaseMod 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') + users_group = relationship('UserGroup') permission = relationship('Permission') repository = relationship('Repository') @@ -1480,7 +1531,7 @@ class UsersGroupRepoToPerm(Base, BaseMod return u' %s >' % (self.users_group, self.repository) -class UsersGroupToPerm(Base, BaseModel): +class UserGroupToPerm(Base, BaseModel): __tablename__ = 'users_group_to_perm' __table_args__ = ( UniqueConstraint('users_group_id', 'permission_id',), @@ -1491,7 +1542,7 @@ class UsersGroupToPerm(Base, BaseModel): 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') + users_group = relationship('UserGroup') permission = relationship('Permission') @@ -1513,7 +1564,7 @@ class UserRepoGroupToPerm(Base, BaseMode permission = relationship('Permission') -class UsersGroupRepoGroupToPerm(Base, BaseModel): +class UserGroupRepoGroupToPerm(Base, BaseModel): __tablename__ = 'users_group_repo_group_to_perm' __table_args__ = ( UniqueConstraint('users_group_id', 'group_id'), @@ -1526,7 +1577,7 @@ class UsersGroupRepoGroupToPerm(Base, Ba 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') + users_group = relationship('UserGroup') permission = relationship('Permission') group = relationship('RepoGroup') @@ -1581,9 +1632,13 @@ class CacheInvalidation(Base, BaseModel) {'extend_existing': True, 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8'}, ) + # cache_id, not used cache_id = Column("cache_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) + # cache_key as created by _get_cache_key cache_key = Column("cache_key", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + # cache_args is usually a repo_name, possibly with _README/_RSS/_ATOM suffix cache_args = Column("cache_args", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) + # instance sets cache_active True when it is caching, other instances set cache_active to False to invalidate cache_active = Column("cache_active", Boolean(), nullable=True, unique=None, default=False) def __init__(self, cache_key, cache_args=''): @@ -1595,43 +1650,27 @@ class CacheInvalidation(Base, BaseModel) return u"<%s('%s:%s')>" % (self.__class__.__name__, self.cache_id, self.cache_key) - @property - def prefix(self): + def get_prefix(self): + """ + Guess prefix that might have been used in _get_cache_key to generate self.cache_key . + Only used for informational purposes in repo_edit.html . + """ _split = self.cache_key.split(self.cache_args, 1) - if _split and len(_split) == 2: + if len(_split) == 2: return _split[0] return '' @classmethod - def clear_cache(cls): - cls.query().delete() - - @classmethod - def _get_key(cls, key): + def _get_cache_key(cls, key): """ - Wrapper for generating a key, together with a prefix - - :param key: + Wrapper for generating a unique cache key for this instance and "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 + prefix = rhodecode.CONFIG.get('instance_id', '') + return "%s%s" % (prefix, 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): + def _get_or_create_inv_obj(cls, key, repo_name, commit=True): inv_obj = Session().query(cls).filter(cls.cache_key == key).scalar() if not inv_obj: try: @@ -1658,11 +1697,10 @@ class CacheInvalidation(Base, BaseModel) 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) + cache_key = cls._get_cache_key(key) + inv = cls._get_or_create_inv_obj(cache_key, repo_name) - if inv and inv.cache_active is False: + if inv and not inv.cache_active: return inv @classmethod @@ -1673,22 +1711,27 @@ class CacheInvalidation(Base, BaseModel) :param key: """ + invalidated_keys = [] if key: - key, _prefix, _org_key = cls._get_key(key) - inv_objs = Session().query(cls).filter(cls.cache_key == key).all() - elif repo_name: + assert not repo_name + cache_key = cls._get_cache_key(key) + inv_objs = Session().query(cls).filter(cls.cache_key == cache_key).all() + else: + assert 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 + log.debug('marking %s key for invalidation based on key=%s,repo_name=%s' + % (inv_obj, key, safe_str(repo_name))) + invalidated_keys.append(inv_obj.cache_key) Session().add(inv_obj) Session().commit() except Exception: log.error(traceback.format_exc()) Session().rollback() + return invalidated_keys @classmethod def set_valid(cls, key): @@ -1697,7 +1740,7 @@ class CacheInvalidation(Base, BaseModel) :param key: """ - inv_obj = cls.get_by_key(key) + inv_obj = cls.query().filter(cls.cache_key == key).scalar() inv_obj.cache_active = True Session().add(inv_obj) Session().commit() @@ -1708,28 +1751,26 @@ class CacheInvalidation(Base, BaseModel) class cachemapdict(dict): def __init__(self, *args, **kwargs): - fixkey = kwargs.get('fixkey') - if fixkey: - del kwargs['fixkey'] - self.fixkey = fixkey + self.fixkey = kwargs.pop('fixkey', False) super(cachemapdict, self).__init__(*args, **kwargs) def __getattr__(self, name): - key = name + cache_key = name if self.fixkey: - key, _prefix, _org_key = cls._get_key(key) - if key in self.__dict__: - return self.__dict__[key] + cache_key = cls._get_cache_key(name) + if cache_key in self.__dict__: + return self.__dict__[cache_key] else: - return self[key] + return self[cache_key] - def __getitem__(self, key): + def __getitem__(self, name): + cache_key = name if self.fixkey: - key, _prefix, _org_key = cls._get_key(key) + cache_key = cls._get_cache_key(name) try: - return super(cachemapdict, self).__getitem__(key) + return super(cachemapdict, self).__getitem__(cache_key) except KeyError: - return + return None cache_map = cachemapdict(fixkey=True) for obj in cls.query().all(): @@ -1882,6 +1923,10 @@ class PullRequest(Base, BaseModel): def is_closed(self): return self.status == self.STATUS_CLOSED + @property + def last_review_status(self): + return self.statuses[-1].status if self.statuses else '' + def __json__(self): return dict( revisions=self.revisions diff --git a/rhodecode/model/forms.py b/rhodecode/model/forms.py --- a/rhodecode/model/forms.py +++ b/rhodecode/model/forms.py @@ -94,14 +94,14 @@ def UserForm(edit=False, old_data={}): return _UserForm -def UsersGroupForm(edit=False, old_data={}, available_members=[]): - class _UsersGroupForm(formencode.Schema): +def UserGroupForm(edit=False, old_data={}, available_members=[]): + class _UserGroupForm(formencode.Schema): allow_extra_fields = True filter_extra_fields = True users_group_name = All( v.UnicodeString(strip=True, min=1, not_empty=True), - v.ValidUsersGroup(edit, old_data) + v.ValidUserGroup(edit, old_data) ) users_group_active = v.StringBoolean(if_missing=False) @@ -112,10 +112,11 @@ def UsersGroupForm(edit=False, old_data= if_missing=None, not_empty=False ) - return _UsersGroupForm + return _UserGroupForm -def ReposGroupForm(edit=False, old_data={}, available_groups=[]): +def ReposGroupForm(edit=False, old_data={}, available_groups=[], + can_create_in_root=False): class _ReposGroupForm(formencode.Schema): allow_extra_fields = True filter_extra_fields = False @@ -123,10 +124,15 @@ def ReposGroupForm(edit=False, old_data= group_name = All(v.UnicodeString(strip=True, min=1, not_empty=True), v.SlugifyName()) group_description = v.UnicodeString(strip=True, min=1, - not_empty=True) - group_parent_id = v.OneOf(available_groups, hideList=False, - testValueList=True, - if_missing=None, not_empty=False) + not_empty=False) + if edit: + #FIXME: do a special check that we cannot move a group to one of + #it's children + pass + group_parent_id = All(v.CanCreateGroup(can_create_in_root), + v.OneOf(available_groups, hideList=False, + testValueList=True, + if_missing=None, not_empty=True)) enable_locking = v.StringBoolean(if_missing=False) recursive = v.StringBoolean(if_missing=False) chained_validators = [v.ValidReposGroup(edit, old_data), @@ -193,30 +199,32 @@ def RepoForm(edit=False, old_data={}, su user = All(v.UnicodeString(not_empty=True), v.ValidRepoUser()) chained_validators = [v.ValidCloneUri(), - v.ValidRepoName(edit, old_data), - v.ValidPerms()] + v.ValidRepoName(edit, old_data)] return _RepoForm -def RepoSettingsForm(edit=False, old_data={}, supported_backends=BACKENDS.keys(), - repo_groups=[], landing_revs=[]): - class _RepoForm(formencode.Schema): +def RepoPermsForm(): + class _RepoPermsForm(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(old_data), - 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.ValidPerms()] + return _RepoPermsForm + + +def RepoFieldForm(): + class _RepoFieldForm(formencode.Schema): + filter_extra_fields = True + allow_extra_fields = True - chained_validators = [v.ValidCloneUri(), - v.ValidRepoName(edit, old_data), - v.ValidPerms(), - v.ValidSettings()] - return _RepoForm + new_field_key = All(v.FieldKey(), + v.UnicodeString(strip=True, min=3, not_empty=True)) + new_field_value = v.UnicodeString(not_empty=False, if_missing='') + new_field_type = v.OneOf(['str', 'unicode', 'list', 'tuple'], + if_missing='str') + new_field_label = v.UnicodeString(not_empty=False) + new_field_desc = v.UnicodeString(not_empty=False) + + return _RepoFieldForm def RepoForkForm(edit=False, old_data={}, supported_backends=BACKENDS.keys(), @@ -260,6 +268,7 @@ def ApplicationVisualisationForm(): rhodecode_stylify_metatags = v.StringBoolean(if_missing=False) rhodecode_lightweight_dashboard = v.StringBoolean(if_missing=False) + rhodecode_repository_fields = v.StringBoolean(if_missing=False) rhodecode_lightweight_journal = v.StringBoolean(if_missing=False) return _ApplicationVisualisationForm @@ -332,10 +341,7 @@ def LdapSettingsForm(tls_reqcert_choices ldap_base_dn = v.UnicodeString(strip=True,) ldap_filter = v.UnicodeString(strip=True,) ldap_search_scope = v.OneOf(search_scope_choices) - ldap_attr_login = All( - v.AttrLoginValidator(), - v.UnicodeString(strip=True,) - ) + ldap_attr_login = v.AttrLoginValidator()(not_empty=True) ldap_attr_firstname = v.UnicodeString(strip=True,) ldap_attr_lastname = v.UnicodeString(strip=True,) ldap_attr_email = v.UnicodeString(strip=True,) @@ -372,4 +378,7 @@ def PullRequestForm(repo_id): pullrequest_title = v.UnicodeString(strip=True, required=True, min=3) pullrequest_desc = v.UnicodeString(strip=True, required=False) + ancestor_rev = v.UnicodeString(strip=True, required=True) + merge_rev = v.UnicodeString(strip=True, required=True) + return _PullRequestForm diff --git a/rhodecode/model/notification.py b/rhodecode/model/notification.py --- a/rhodecode/model/notification.py +++ b/rhodecode/model/notification.py @@ -28,12 +28,14 @@ import os import logging import traceback +from pylons import tmpl_context as c from pylons.i18n.translation import _ import rhodecode from rhodecode.lib import helpers as h from rhodecode.model import BaseModel from rhodecode.model.db import Notification, User, UserNotification +from rhodecode.model.meta import Session log = logging.getLogger(__name__) @@ -54,7 +56,7 @@ class NotificationModel(BaseModel): def create(self, created_by, subject, body, recipients=None, type_=Notification.TYPE_MESSAGE, with_email=True, - email_kwargs={}): + email_kwargs={}, email_subject=None): """ Creates notification of given type @@ -68,11 +70,12 @@ class NotificationModel(BaseModel): :param type_: type of notification :param with_email: send email with this notification :param email_kwargs: additional dict to pass as args to email template + :param email_subject: use given subject as email subject """ from rhodecode.lib.celerylib import tasks, run_task if recipients and not getattr(recipients, '__iter__', False): - raise Exception('recipients must be a list of iterable') + raise Exception('recipients must be a list or iterable') created_by_obj = self._get_user(created_by) @@ -97,7 +100,7 @@ class NotificationModel(BaseModel): body=body, recipients=recipients_objs, type_=type_ ) - if with_email is False: + if not with_email: return notif #don't send email to person who created this comment @@ -105,9 +108,11 @@ class NotificationModel(BaseModel): # send email with notification to all other participants for rec in rec_objs: - email_subject = NotificationModel().make_description(notif, False) + if not email_subject: + email_subject = NotificationModel()\ + .make_description(notif, show_age=False) type_ = type_ - email_body = body + email_body = None # we set body to none, we just send HTML emails ## this is passed into template kwargs = {'subject': subject, 'body': h.rst_w_mentions(body)} kwargs.update(email_kwargs) @@ -130,7 +135,7 @@ class NotificationModel(BaseModel): .filter(UserNotification.notification == notification)\ .one() - self.sa.delete(obj) + Session().delete(obj) return True except Exception: log.error(traceback.format_exc()) @@ -141,7 +146,6 @@ class NotificationModel(BaseModel): Get mentions for given user, filter them if filter dict is given :param user: - :type user: :param filter: """ user = self._get_user(user) @@ -167,7 +171,7 @@ class NotificationModel(BaseModel): == notification)\ .one() obj.read = True - self.sa.add(obj) + Session().add(obj) return True except Exception: log.error(traceback.format_exc()) @@ -187,7 +191,7 @@ class NotificationModel(BaseModel): # update on joined tables :( for obj in q.all(): obj.read = True - self.sa.add(obj) + Session().add(obj) def get_unread_cnt_for_user(self, user): user = self._get_user(user) @@ -217,32 +221,30 @@ class NotificationModel(BaseModel): #alias _n = notification _map = { - _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') + _n.TYPE_CHANGESET_COMMENT: _('%(user)s commented on changeset at %(when)s'), + _n.TYPE_MESSAGE: _('%(user)s sent message at %(when)s'), + _n.TYPE_MENTION: _('%(user)s mentioned you at %(when)s'), + _n.TYPE_REGISTRATION: _('%(user)s registered in RhodeCode at %(when)s'), + _n.TYPE_PULL_REQUEST: _('%(user)s opened new pull request at %(when)s'), + _n.TYPE_PULL_REQUEST_COMMENT: _('%(user)s commented on pull request at %(when)s') } + tmpl = _map[notification.type_] - # action == _map string - tmpl = "%(user)s %(action)s " if show_age: when = h.age(notification.created_on) else: when = h.fmt_date(notification.created_on) - data = dict( + return tmpl % dict( user=notification.created_by_user.username, - action=_map[notification.type_] - ) - return (tmpl % data) % {'when': when} + when=when, + ) class EmailNotificationModel(BaseModel): TYPE_CHANGESET_COMMENT = Notification.TYPE_CHANGESET_COMMENT - TYPE_PASSWORD_RESET = 'passoword_link' + TYPE_PASSWORD_RESET = 'password_link' TYPE_REGISTRATION = Notification.TYPE_REGISTRATION TYPE_PULL_REQUEST = Notification.TYPE_PULL_REQUEST TYPE_PULL_REQUEST_COMMENT = Notification.TYPE_PULL_REQUEST_COMMENT @@ -272,7 +274,8 @@ class EmailNotificationModel(BaseModel): email_template = self._tmpl_lookup.get_template(base) # translator and helpers inject _kwargs = {'_': _, - 'h': h} + 'h': h, + 'c': c} _kwargs.update(kwargs) log.debug('rendering tmpl %s with kwargs %s' % (base, _kwargs)) return email_template.render(**_kwargs) diff --git a/rhodecode/model/permission.py b/rhodecode/model/permission.py --- a/rhodecode/model/permission.py +++ b/rhodecode/model/permission.py @@ -118,8 +118,11 @@ class PermissionModel(BaseModel): for r2p in self.sa.query(UserRepoToPerm)\ .filter(UserRepoToPerm.user == perm_user)\ .all(): - r2p.permission = _def - self.sa.add(r2p) + + #don't reset PRIVATE repositories + if not r2p.repository.private: + r2p.permission = _def + self.sa.add(r2p) if form_result['overwrite_default_group'] == True: _def_name = form_result['default_group_perm'].split('group.')[-1] 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 @@ -24,22 +24,22 @@ # along with this program. If not, see . import logging -import binascii import datetime import re from pylons.i18n.translation import _ from rhodecode.model.meta import Session -from rhodecode.lib import helpers as h +from rhodecode.lib import helpers as h, unionrepo from rhodecode.model import BaseModel from rhodecode.model.db import PullRequest, PullRequestReviewers, Notification,\ ChangesetStatus from rhodecode.model.notification import NotificationModel from rhodecode.lib.utils2 import safe_unicode -from rhodecode.lib.vcs.utils.hgcompat import discovery, localrepo, scmutil, \ - findcommonoutgoing +from rhodecode.lib.vcs.utils.hgcompat import scmutil +from rhodecode.lib.vcs.utils import safe_str +from rhodecode.lib.vcs.backends.base import EmptyChangeset log = logging.getLogger(__name__) @@ -53,7 +53,10 @@ class PullRequestModel(BaseModel): def get_all(self, repo): repo = self._get_repo(repo) - return PullRequest.query().filter(PullRequest.other_repo == repo).all() + return PullRequest.query()\ + .filter(PullRequest.other_repo == repo)\ + .order_by(PullRequest.created_on.desc())\ + .all() def create(self, created_by, org_repo, org_ref, other_repo, other_ref, revisions, reviewers, title, description=None): @@ -72,13 +75,13 @@ class PullRequestModel(BaseModel): new.title = title new.description = description new.author = created_by_user - self.sa.add(new) + Session().add(new) Session().flush() #members - for member in reviewers: + for member in set(reviewers): _usr = self._get_user(member) reviewer = PullRequestReviewers(_usr, new) - self.sa.add(reviewer) + Session().add(reviewer) #reset state to under-review ChangesetStatusModel().set_status( @@ -87,7 +90,8 @@ class PullRequestModel(BaseModel): user=created_by_user, pull_request=new ) - + revision_data = [(x.raw_id, x.message) + for x in map(org_repo.get_changeset, revisions)] #notification to reviewers notif = NotificationModel() @@ -97,8 +101,9 @@ class PullRequestModel(BaseModel): ) subject = safe_unicode( h.link_to( - _('%(user)s wants you to review pull request #%(pr_id)s') % \ + _('%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s') % \ {'user': created_by_user.username, + 'pr_title': new.title, 'pr_id': new.pull_request_id}, pr_url ) @@ -110,8 +115,9 @@ class PullRequestModel(BaseModel): 'pr_repo_url': h.url('summary_home', repo_name=other_repo.repo_name, qualified=True,), 'pr_url': pr_url, - 'pr_revisions': revisions + 'pr_revisions': revision_data } + notif.create(created_by=created_by_user, subject=subject, body=body, recipients=reviewers, type_=Notification.TYPE_PULL_REQUEST, email_kwargs=kwargs) @@ -135,7 +141,7 @@ class PullRequestModel(BaseModel): for uid in to_add: _usr = self._get_user(uid) reviewer = PullRequestReviewers(_usr, pull_request) - self.sa.add(reviewer) + Session().add(reviewer) for uid in to_remove: reviewer = PullRequestReviewers.query()\ @@ -143,7 +149,7 @@ class PullRequestModel(BaseModel): PullRequestReviewers.pull_request==pull_request)\ .scalar() if reviewer: - self.sa.delete(reviewer) + Session().delete(reviewer) def delete(self, pull_request): pull_request = self.__get_pull_request(pull_request) @@ -153,13 +159,12 @@ class PullRequestModel(BaseModel): pull_request = self.__get_pull_request(pull_request) pull_request.status = PullRequest.STATUS_CLOSED pull_request.updated_on = datetime.datetime.now() - self.sa.add(pull_request) + Session().add(pull_request) - def _get_changesets(self, alias, org_repo, org_ref, other_repo, other_ref, - discovery_data): + def _get_changesets(self, alias, org_repo, org_ref, other_repo, other_ref, merge): """ - Returns a list of changesets that are incoming from org_repo@org_ref - to other_repo@other_ref + Returns a list of changesets that can be merged from org_repo@org_ref + to other_repo@other_ref ... and the ancestor that would be used for merge :param org_repo: :param org_ref: @@ -168,110 +173,79 @@ class PullRequestModel(BaseModel): :param tmp: """ - changesets = [] - #case two independent repos - common, incoming, rheads = discovery_data - if org_repo != other_repo: - revs = [ - org_repo._repo.lookup(org_ref[1]), - org_repo._repo.lookup(other_ref[1]), - ] + ancestor = None + + if alias == 'hg': + # lookup up the exact node id + _revset_predicates = { + 'branch': 'branch', + 'book': 'bookmark', + 'tag': 'tag', + 'rev': 'id', + } - obj = findcommonoutgoing(org_repo._repo, - localrepo.locallegacypeer(other_repo._repo.local()), - revs, - force=True) - revs = obj.missing + org_rev_spec = "%s('%s')" % (_revset_predicates[org_ref[0]], + safe_str(org_ref[1])) + if org_ref[1] == EmptyChangeset().raw_id: + org_rev = org_ref[1] + else: + org_rev = org_repo._repo[scmutil.revrange(org_repo._repo, + [org_rev_spec])[-1]] + other_rev_spec = "%s('%s')" % (_revset_predicates[other_ref[0]], + safe_str(other_ref[1])) + if other_ref[1] == EmptyChangeset().raw_id: + other_rev = other_ref[1] + else: + other_rev = other_repo._repo[scmutil.revrange(other_repo._repo, + [other_rev_spec])[-1]] - 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: + #case two independent repos + if org_repo != other_repo: + hgrepo = unionrepo.unionrepository(other_repo.baseui, + other_repo.path, + org_repo.path) + # all the changesets we are looking for will be in other_repo, + # so rev numbers from hgrepo can be used in other_repo + #no remote compare do it on the same repository - if alias == 'hg': - _revset_predicates = { - 'branch': 'branch', - 'book': 'bookmark', - 'tag': 'tag', - 'rev': 'id', - } + else: + hgrepo = other_repo._repo + + if merge: + revs = ["ancestors(id('%s')) and not ancestors(id('%s')) and not id('%s')" % + (other_rev, org_rev, org_rev)] - 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], - ) - ] + ancestors = scmutil.revrange(hgrepo, + ["ancestor(id('%s'), id('%s'))" % (org_rev, other_rev)]) + if len(ancestors) == 1: + ancestor = hgrepo[ancestors[0]].hex() + else: + # TODO: have both + and - changesets + revs = ["id('%s') :: id('%s') - id('%s')" % + (org_rev, other_rev, org_rev)] - 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)) + changesets = [other_repo.get_changeset(cs) + for cs in scmutil.revrange(hgrepo, revs)] - return changesets + elif alias == 'git': + assert org_repo == other_repo, (org_repo, other_repo) # no git support for different repos + so, se = org_repo.run_git_command( + 'log --reverse --pretty="format: %%H" -s -p %s..%s' % (org_ref[1], + other_ref[1]) + ) + changesets = [org_repo.get_changeset(cs) + for cs in re.findall(r'[0-9a-fA-F]{40}', so)] - def _get_discovery(self, org_repo, org_ref, other_repo, other_ref): + return changesets, ancestor + + def get_compare_data(self, org_repo, org_ref, other_repo, other_ref, merge): """ - Get's mercurial discovery data used to calculate difference between - repos and refs + Returns incoming changesets for mercurial 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: - """ - - _org_repo = org_repo._repo - org_rev_type, org_rev = org_ref - - _other_repo = other_repo._repo - other_rev_type, other_rev = other_ref - - log.debug('Doing discovery for %s@%s vs %s@%s' % ( - org_repo, org_ref, other_repo, other_ref) - ) - - #log.debug('Filter heads are %s[%s]' % ('', org_ref[1])) - org_peer = localrepo.locallegacypeer(_org_repo.local()) - 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()], - 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 for - mercurial 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: """ if len(org_ref) != 2 or not isinstance(org_ref, (list, tuple)): @@ -280,16 +254,8 @@ 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') - 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 + cs_ranges, ancestor = self._get_changesets(org_repo.scm_instance.alias, + org_repo.scm_instance, org_ref, + other_repo.scm_instance, other_ref, + merge) + return cs_ranges, ancestor diff --git a/rhodecode/model/repo.py b/rhodecode/model/repo.py --- a/rhodecode/model/repo.py +++ b/rhodecode/model/repo.py @@ -38,10 +38,11 @@ from rhodecode.lib.hooks import log_crea from rhodecode.model import BaseModel from rhodecode.model.db import Repository, UserRepoToPerm, User, Permission, \ - Statistics, UsersGroup, UsersGroupRepoToPerm, RhodeCodeUi, RepoGroup,\ - RhodeCodeSetting + Statistics, UserGroup, UserGroupRepoToPerm, RhodeCodeUi, RepoGroup,\ + RhodeCodeSetting, RepositoryField from rhodecode.lib import helpers as h from rhodecode.lib.auth import HasRepoPermissionAny +from rhodecode.lib.exceptions import AttachedForksError log = logging.getLogger(__name__) @@ -52,8 +53,8 @@ class RepoModel(BaseModel): URL_SEPARATOR = Repository.url_sep() def __get_users_group(self, users_group): - return self._get_instance(UsersGroup, users_group, - callback=UsersGroup.get_by_group_name) + return self._get_instance(UserGroup, users_group, + callback=UserGroup.get_by_group_name) def _get_repos_group(self, repos_group): return self._get_instance(RepoGroup, repos_group, @@ -118,8 +119,8 @@ class RepoModel(BaseModel): ) def get_users_groups_js(self): - users_groups = self.sa.query(UsersGroup)\ - .filter(UsersGroup.users_group_active == True).all() + users_groups = self.sa.query(UserGroup)\ + .filter(UserGroup.users_group_active == True).all() return json.dumps([ { @@ -142,7 +143,15 @@ class RepoModel(BaseModel): kwargs.update(dict(_=_, h=h, c=c)) return tmpl.render(*args, **kwargs) - def get_repos_as_dict(self, repos_list=None, admin=False, perm_check=True): + @classmethod + def update_repoinfo(cls, repositories=None): + if not repositories: + repositories = Repository.getAll() + for repo in repositories: + repo.update_changeset_cache() + + def get_repos_as_dict(self, repos_list=None, admin=False, perm_check=True, + super_user_actions=False): _render = self._render_datatable def quick_menu(repo_name): @@ -174,7 +183,7 @@ class RepoModel(BaseModel): return h.urlify_text(h.truncate(desc, 60)) def repo_actions(repo_name): - return _render('repo_actions', repo_name) + return _render('repo_actions', repo_name, super_user_actions) def owner_actions(user_id, username): return _render('user_name', user_id, username) @@ -232,7 +241,7 @@ class RepoModel(BaseModel): return None defaults = repo_info.get_dict() - group, repo_name = repo_info.groups_and_repo + group, repo_name, repo_name_full = repo_info.groups_and_repo defaults['repo_name'] = repo_name defaults['repo_group'] = getattr(group[-1] if group else None, 'group_id', None) @@ -271,28 +280,6 @@ class RepoModel(BaseModel): try: cur_repo = self.get_by_repo_name(org_repo_name, cache=False) - # update permissions - for member, perm, member_type in kwargs['perms_updates']: - if member_type == 'user': - # this updates existing one - RepoModel().grant_user_permission( - repo=cur_repo, user=member, perm=perm - ) - else: - RepoModel().grant_users_group_permission( - repo=cur_repo, group_name=member, perm=perm - ) - # set new permissions - for member, perm, member_type in kwargs['perms_new']: - if member_type == 'user': - RepoModel().grant_user_permission( - repo=cur_repo, user=member, perm=perm - ) - else: - RepoModel().grant_users_group_permission( - repo=cur_repo, group_name=member, perm=perm - ) - if 'user' in kwargs: cur_repo.user = User.get_by_username(kwargs['user']) @@ -311,7 +298,20 @@ class RepoModel(BaseModel): new_name = cur_repo.get_new_name(kwargs['repo_name']) cur_repo.repo_name = new_name + #if private flag is set, reset default permission to NONE + if kwargs.get('repo_private'): + EMPTY_PERM = 'repository.none' + RepoModel().grant_user_permission( + repo=cur_repo, user='default', perm=EMPTY_PERM + ) + #handle extra fields + for field in filter(lambda k: k.startswith(RepositoryField.PREFIX), kwargs): + k = RepositoryField.un_prefix_key(field) + ex_field = RepositoryField.get_by_key_name(key=k, repo=cur_repo) + if ex_field: + ex_field.field_value = kwargs[field] + self.sa.add(ex_field) self.sa.add(cur_repo) if org_repo_name != new_name: @@ -319,7 +319,7 @@ class RepoModel(BaseModel): self.__rename_repo(old=org_repo_name, new=new_name) return cur_repo - except: + except Exception: log.error(traceback.format_exc()) raise @@ -394,15 +394,15 @@ class RepoModel(BaseModel): repo = fork_of user_perms = UserRepoToPerm.query()\ .filter(UserRepoToPerm.repository == repo).all() - group_perms = UsersGroupRepoToPerm.query()\ - .filter(UsersGroupRepoToPerm.repository == repo).all() + group_perms = UserGroupRepoToPerm.query()\ + .filter(UserGroupRepoToPerm.repository == repo).all() for perm in user_perms: UserRepoToPerm.create(perm.user, new_repo, perm.permission) for perm in group_perms: - UsersGroupRepoToPerm.create(perm.users_group, new_repo, + UserGroupRepoToPerm.create(perm.users_group, new_repo, perm.permission) else: _create_default_perms() @@ -420,7 +420,7 @@ class RepoModel(BaseModel): ScmModel(self.sa).toggle_following_repo(new_repo.repo_id, owner.user_id) return new_repo - except: + except Exception: log.error(traceback.format_exc()) raise @@ -466,9 +466,27 @@ class RepoModel(BaseModel): from rhodecode.lib.celerylib import tasks, run_task run_task(tasks.create_repo_fork, form_data, cur_user) - def delete(self, repo): + def delete(self, repo, forks=None): + """ + Delete given repository, forks parameter defines what do do with + attached forks. Throws AttachedForksError if deleted repo has attached + forks + + :param repo: + :param forks: str 'delete' or 'detach' + """ repo = self._get_repo(repo) if repo: + if forks == 'detach': + for r in repo.forks: + r.fork = None + self.sa.add(r) + elif forks == 'delete': + for r in repo.forks: + self.delete(r, forks='delete') + elif [f for f in repo.forks]: + raise AttachedForksError() + old_repo_dict = repo.get_dict() owner = repo.user try: @@ -476,7 +494,7 @@ class RepoModel(BaseModel): self.__delete_repo(repo) log_delete_repository(old_repo_dict, deleted_by=owner.username) - except: + except Exception: log.error(traceback.format_exc()) raise @@ -528,12 +546,12 @@ class RepoModel(BaseModel): def grant_users_group_permission(self, repo, group_name, perm): """ - Grant permission for users group on given repository, or update + Grant permission for user group on given repository, or update existing one if found :param repo: Instance of Repository, repository_id, or repository name :param group_name: Instance of UserGroup, users_group_id, - or users group name + or user group name :param perm: Instance of Permission, or permission_name """ repo = self._get_repo(repo) @@ -541,14 +559,14 @@ class RepoModel(BaseModel): permission = self._get_perm(perm) # check if we have that permission already - obj = self.sa.query(UsersGroupRepoToPerm)\ - .filter(UsersGroupRepoToPerm.users_group == group_name)\ - .filter(UsersGroupRepoToPerm.repository == repo)\ + obj = self.sa.query(UserGroupRepoToPerm)\ + .filter(UserGroupRepoToPerm.users_group == group_name)\ + .filter(UserGroupRepoToPerm.repository == repo)\ .scalar() if obj is None: # create new - obj = UsersGroupRepoToPerm() + obj = UserGroupRepoToPerm() obj.repository = repo obj.users_group = group_name @@ -558,18 +576,18 @@ class RepoModel(BaseModel): def revoke_users_group_permission(self, repo, group_name): """ - Revoke permission for users group on given repository + Revoke permission for user group on given repository :param repo: Instance of Repository, repository_id, or repository name :param group_name: Instance of UserGroup, users_group_id, - or users group name + or user group name """ repo = self._get_repo(repo) group_name = self.__get_users_group(group_name) - obj = self.sa.query(UsersGroupRepoToPerm)\ - .filter(UsersGroupRepoToPerm.repository == repo)\ - .filter(UsersGroupRepoToPerm.users_group == group_name)\ + obj = self.sa.query(UserGroupRepoToPerm)\ + .filter(UserGroupRepoToPerm.repository == repo)\ + .filter(UserGroupRepoToPerm.users_group == group_name)\ .scalar() if obj: self.sa.delete(obj) @@ -581,13 +599,13 @@ class RepoModel(BaseModel): :param repo_name: """ + repo = self._get_repo(repo_name) try: obj = self.sa.query(Statistics)\ - .filter(Statistics.repository == - self.get_by_repo_name(repo_name))\ - .one() - self.sa.delete(obj) - except: + .filter(Statistics.repository == repo).scalar() + if obj: + self.sa.delete(obj) + except Exception: log.error(traceback.format_exc()) raise diff --git a/rhodecode/model/repo_permission.py b/rhodecode/model/repo_permission.py --- a/rhodecode/model/repo_permission.py +++ b/rhodecode/model/repo_permission.py @@ -26,7 +26,7 @@ import logging from rhodecode.model import BaseModel -from rhodecode.model.db import UserRepoToPerm, UsersGroupRepoToPerm, \ +from rhodecode.model.db import UserRepoToPerm, UserGroupRepoToPerm, \ Permission log = logging.getLogger(__name__) @@ -64,9 +64,9 @@ class RepositoryPermissionModel(BaseMode self.sa.delete(current) def get_users_group_permission(self, repository, users_group): - return UsersGroupRepoToPerm.query() \ - .filter(UsersGroupRepoToPerm.users_group == users_group) \ - .filter(UsersGroupRepoToPerm.repository == repository) \ + return UserGroupRepoToPerm.query() \ + .filter(UserGroupRepoToPerm.users_group == users_group) \ + .filter(UserGroupRepoToPerm.repository == repository) \ .scalar() def update_users_group_permission(self, repository, users_group, @@ -77,7 +77,7 @@ class RepositoryPermissionModel(BaseMode if not current.permission is permission: current.permission = permission else: - p = UsersGroupRepoToPerm() + p = UserGroupRepoToPerm() p.users_group = users_group p.repository = repository p.permission = permission 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 @@ -3,7 +3,7 @@ rhodecode.model.user_group ~~~~~~~~~~~~~~~~~~~~~~~~~~ - users groups model for RhodeCode + repo group model for RhodeCode :created_on: Jan 25, 2011 :author: marcink @@ -33,7 +33,7 @@ from rhodecode.lib.utils2 import LazyPro from rhodecode.model import BaseModel from rhodecode.model.db import RepoGroup, RhodeCodeUi, UserRepoGroupToPerm, \ - User, Permission, UsersGroupRepoGroupToPerm, UsersGroup, Repository + User, Permission, UserGroupRepoGroupToPerm, UserGroup, Repository log = logging.getLogger(__name__) @@ -43,8 +43,8 @@ class ReposGroupModel(BaseModel): cls = RepoGroup def __get_users_group(self, users_group): - return self._get_instance(UsersGroup, users_group, - callback=UsersGroup.get_by_group_name) + return self._get_instance(UserGroup, users_group, + callback=UserGroup.get_by_group_name) def _get_repos_group(self, repos_group): return self._get_instance(RepoGroup, repos_group, @@ -79,7 +79,7 @@ class ReposGroupModel(BaseModel): def __create_group(self, group_name): """ - makes repositories group on filesystem + makes repository group on filesystem :param repo_name: :param parent_id: @@ -104,7 +104,7 @@ class ReposGroupModel(BaseModel): log.debug('skipping group rename') return - log.debug('renaming repos group from %s to %s' % (old, new)) + log.debug('renaming repository group from %s to %s' % (old, new)) old_path = os.path.join(self.repos_path, old) new_path = os.path.join(self.repos_path, new) @@ -140,16 +140,21 @@ class ReposGroupModel(BaseModel): 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): + def create(self, group_name, group_description, owner, parent=None, just_db=False): try: new_repos_group = RepoGroup() - new_repos_group.group_description = group_description + new_repos_group.group_description = group_description or group_name new_repos_group.parent_group = self._get_repos_group(parent) new_repos_group.group_name = new_repos_group.get_new_name(group_name) self.sa.add(new_repos_group) self._create_default_perms(new_repos_group) + #create an ADMIN permission for owner, later owner should go into + #the owner field of groups + self.grant_user_permission(repos_group=new_repos_group, + user=owner, perm='group.admin') + if not just_db: # we need to flush here, in order to check if database won't # throw any exceptions, create filesystem dirs at the very end @@ -157,7 +162,7 @@ class ReposGroupModel(BaseModel): self.__create_group(new_repos_group.group_name) return new_repos_group - except: + except Exception: log.error(traceback.format_exc()) raise @@ -213,7 +218,7 @@ class ReposGroupModel(BaseModel): if member_type == 'user': # this updates also current one if found _set_perm_user(obj, user=member, perm=perm) - ## set for users group + ## set for user group else: _set_perm_group(obj, users_group=member, perm=perm) # set new permissions @@ -229,10 +234,10 @@ class ReposGroupModel(BaseModel): break return updates - def update(self, repos_group_id, form_data): + def update(self, repos_group, form_data): try: - repos_group = RepoGroup.get(repos_group_id) + repos_group = self._get_repos_group(repos_group) recursive = form_data['recursive'] # iterate over all members(if in recursive mode) of this groups and # set the permissions ! @@ -278,7 +283,7 @@ class ReposGroupModel(BaseModel): self.__rename_group(old_path, new_path) return repos_group - except: + except Exception: log.error(traceback.format_exc()) raise @@ -287,18 +292,18 @@ class ReposGroupModel(BaseModel): try: self.sa.delete(repos_group) self.__delete_group(repos_group, force_delete) - except: + except Exception: log.error('Error removing repos_group %s' % repos_group) raise def delete_permission(self, repos_group, obj, obj_type, recursive): """ Revokes permission for repos_group for given obj(user or users_group), - obj_type can be user or users group + obj_type can be user or user group :param repos_group: - :param obj: user or users group id - :param obj_type: user or users group type + :param obj: user or user group id + :param obj_type: user or user group type :param recursive: recurse to all children of group """ from rhodecode.model.repo import RepoModel @@ -332,7 +337,7 @@ class ReposGroupModel(BaseModel): def grant_user_permission(self, repos_group, user, perm): """ - Grant permission for user on given repositories group, or update + Grant permission for user on given repository group, or update existing one if found :param repos_group: Instance of ReposGroup, repositories_group_id, @@ -361,7 +366,7 @@ class ReposGroupModel(BaseModel): def revoke_user_permission(self, repos_group, user): """ - Revoke permission for user on given repositories group + Revoke permission for user on given repository group :param repos_group: Instance of ReposGroup, repositories_group_id, or repositories_group name @@ -381,13 +386,13 @@ class ReposGroupModel(BaseModel): def grant_users_group_permission(self, repos_group, group_name, perm): """ - Grant permission for users group on given repositories group, or update + Grant permission for user group on given repository group, or update existing one if found :param repos_group: Instance of ReposGroup, repositories_group_id, or repositories_group name :param group_name: Instance of UserGroup, users_group_id, - or users group name + or user group name :param perm: Instance of Permission, or permission_name """ repos_group = self._get_repos_group(repos_group) @@ -395,14 +400,14 @@ class ReposGroupModel(BaseModel): permission = self._get_perm(perm) # check if we have that permission already - obj = self.sa.query(UsersGroupRepoGroupToPerm)\ - .filter(UsersGroupRepoGroupToPerm.group == repos_group)\ - .filter(UsersGroupRepoGroupToPerm.users_group == group_name)\ + obj = self.sa.query(UserGroupRepoGroupToPerm)\ + .filter(UserGroupRepoGroupToPerm.group == repos_group)\ + .filter(UserGroupRepoGroupToPerm.users_group == group_name)\ .scalar() if obj is None: # create new - obj = UsersGroupRepoGroupToPerm() + obj = UserGroupRepoGroupToPerm() obj.group = repos_group obj.users_group = group_name @@ -412,19 +417,19 @@ class ReposGroupModel(BaseModel): def revoke_users_group_permission(self, repos_group, group_name): """ - Revoke permission for users group on given repositories group + Revoke permission for user group on given repository group :param repos_group: Instance of ReposGroup, repositories_group_id, or repositories_group name :param group_name: Instance of UserGroup, users_group_id, - or users group name + or user group name """ repos_group = self._get_repos_group(repos_group) group_name = self.__get_users_group(group_name) - obj = self.sa.query(UsersGroupRepoGroupToPerm)\ - .filter(UsersGroupRepoGroupToPerm.group == repos_group)\ - .filter(UsersGroupRepoGroupToPerm.users_group == group_name)\ + obj = self.sa.query(UserGroupRepoGroupToPerm)\ + .filter(UserGroupRepoGroupToPerm.group == repos_group)\ + .filter(UserGroupRepoGroupToPerm.users_group == group_name)\ .scalar() if obj: self.sa.delete(obj) diff --git a/rhodecode/model/scm.py b/rhodecode/model/scm.py --- a/rhodecode/model/scm.py +++ b/rhodecode/model/scm.py @@ -44,13 +44,15 @@ from rhodecode.lib.vcs.backends.base imp from rhodecode import BACKENDS from rhodecode.lib import helpers as h -from rhodecode.lib.utils2 import safe_str, safe_unicode +from rhodecode.lib.utils2 import safe_str, safe_unicode, get_server_url,\ + _set_extras from rhodecode.lib.auth import HasRepoPermissionAny, HasReposGroupPermissionAny from rhodecode.lib.utils import get_filesystem_repos, make_ui, \ action_logger, REMOVED_REPO_PAT from rhodecode.model import BaseModel from rhodecode.model.db import Repository, RhodeCodeUi, CacheInvalidation, \ UserFollowing, UserLog, User, RepoGroup, PullRequest +from rhodecode.lib.hooks import log_push_action log = logging.getLogger(__name__) @@ -77,11 +79,15 @@ class CachedRepoList(object): super fast """ - def __init__(self, db_repo_list, repos_path, order_by=None): + def __init__(self, db_repo_list, repos_path, order_by=None, perm_set=None): self.db_repo_list = db_repo_list self.repos_path = repos_path self.order_by = order_by self.reversed = (order_by or '').startswith('-') + if not perm_set: + perm_set = ['repository.read', 'repository.write', + 'repository.admin'] + self.perm_set = perm_set def __len__(self): return len(self.db_repo_list) @@ -98,20 +104,21 @@ class CachedRepoList(object): scmr = dbr.scm_instance_cached(cache_map) # check permission at this level if not HasRepoPermissionAny( - 'repository.read', 'repository.write', 'repository.admin' + *self.perm_set )(dbr.repo_name, 'get repo check'): continue - if scmr is None: + try: + last_change = scmr.last_change + tip = h.get_changeset_safe(scmr, 'tip') + except Exception: log.error( '%s this repository is present in database but it ' - 'cannot be created as an scm instance' % dbr.repo_name + 'cannot be created as an scm instance, org_exc:%s' + % (dbr.repo_name, traceback.format_exc()) ) continue - last_change = scmr.last_change - tip = h.get_changeset_safe(scmr, 'tip') - tmp_d = {} tmp_d['name'] = dbr.repo_name tmp_d['name_sort'] = tmp_d['name'].lower() @@ -143,7 +150,7 @@ class SimpleCachedRepoList(CachedRepoLis for dbr in self.db_repo_list: # check permission at this level if not HasRepoPermissionAny( - 'repository.read', 'repository.write', 'repository.admin' + *self.perm_set )(dbr.repo_name, 'get repo check'): continue @@ -160,8 +167,18 @@ class SimpleCachedRepoList(CachedRepoLis class GroupList(object): - def __init__(self, db_repo_group_list): + def __init__(self, db_repo_group_list, perm_set=None): + """ + Creates iterator from given list of group objects, additionally + checking permission for them from perm_set var + + :param db_repo_group_list: + :param perm_set: list of permissons to check + """ self.db_repo_group_list = db_repo_group_list + if not perm_set: + perm_set = ['group.read', 'group.write', 'group.admin'] + self.perm_set = perm_set def __len__(self): return len(self.db_repo_group_list) @@ -173,7 +190,7 @@ class GroupList(object): for dbgr in self.db_repo_group_list: # check permission at this level if not HasReposGroupPermissionAny( - 'group.read', 'group.write', 'group.admin' + *self.perm_set )(dbgr.group_name, 'get group repo check'): continue @@ -276,9 +293,7 @@ class ScmModel(BaseModel): if all_groups is None: all_groups = RepoGroup.query()\ .filter(RepoGroup.group_parent_id == None).all() - group_iter = GroupList(all_groups) - - return group_iter + return [x for x in GroupList(all_groups)] def mark_for_invalidation(self, repo_name): """ @@ -287,10 +302,11 @@ class ScmModel(BaseModel): :param repo_name: this repo that should invalidation take place """ - CacheInvalidation.set_invalidate(repo_name=repo_name) + invalidated_keys = CacheInvalidation.set_invalidate(repo_name=repo_name) repo = Repository.get_by_repo_name(repo_name) if repo: repo.update_changeset_cache() + return invalidated_keys def toggle_following_repo(self, follow_repo_id, user_id): @@ -305,7 +321,7 @@ class ScmModel(BaseModel): 'stopped_following_repo', RepoTemp(follow_repo_id)) return - except: + except Exception: log.error(traceback.format_exc()) raise @@ -318,7 +334,7 @@ class ScmModel(BaseModel): action_logger(UserTemp(user_id), 'started_following_repo', RepoTemp(follow_repo_id)) - except: + except Exception: log.error(traceback.format_exc()) raise @@ -331,7 +347,7 @@ class ScmModel(BaseModel): try: self.sa.delete(f) return - except: + except Exception: log.error(traceback.format_exc()) raise @@ -340,7 +356,7 @@ class ScmModel(BaseModel): f.user_id = user_id f.follows_user_id = follow_user_id self.sa.add(f) - except: + except Exception: log.error(traceback.format_exc()) raise @@ -377,7 +393,8 @@ class ScmModel(BaseModel): def get_pull_requests(self, repo): repo = self._get_repo(repo) return self.sa.query(PullRequest)\ - .filter(PullRequest.other_repo == repo).count() + .filter(PullRequest.other_repo == repo)\ + .filter(PullRequest.status != PullRequest.STATUS_CLOSED).count() def mark_as_fork(self, repo, fork, user): repo = self.__get_repo(repo) @@ -388,6 +405,60 @@ class ScmModel(BaseModel): self.sa.add(repo) return repo + def _handle_push(self, repo, username, action, repo_name, revisions): + """ + Triggers push action hooks + + :param repo: SCM repo + :param username: username who pushes + :param action: push/push_loca/push_remote + :param repo_name: name of repo + :param revisions: list of revisions that we pushed + """ + from rhodecode import CONFIG + from rhodecode.lib.base import _get_ip_addr + try: + from pylons import request + environ = request.environ + except TypeError: + # we might use this outside of request context, let's fake the + # environ data + from webob import Request + environ = Request.blank('').environ + + #trigger push hook + extras = { + 'ip': _get_ip_addr(environ), + 'username': username, + 'action': 'push_local', + 'repository': repo_name, + 'scm': repo.alias, + 'config': CONFIG['__file__'], + 'server_url': get_server_url(environ), + 'make_lock': None, + 'locked_by': [None, None] + } + _scm_repo = repo._repo + _set_extras(extras) + if repo.alias == 'hg': + log_push_action(_scm_repo.ui, _scm_repo, node=revisions[0]) + elif repo.alias == 'git': + log_push_action(None, _scm_repo, _git_revs=revisions) + + def _get_IMC_module(self, scm_type): + """ + Returns InMemoryCommit class based on scm_type + + :param scm_type: + """ + if scm_type == 'hg': + from rhodecode.lib.vcs.backends.hg import \ + MercurialInMemoryChangeset as IMC + elif scm_type == 'git': + from rhodecode.lib.vcs.backends.git import \ + GitInMemoryChangeset as IMC + return IMC + def pull_changes(self, repo, username): dbrepo = self.__get_repo(repo) clone_uri = dbrepo.clone_uri @@ -395,27 +466,14 @@ class ScmModel(BaseModel): raise Exception("This repository doesn't have a clone uri") repo = dbrepo.scm_instance - from rhodecode import CONFIG + repo_name = dbrepo.repo_name try: - extras = { - 'ip': '', - 'username': username, - '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': repo.fetch(clone_uri) else: repo.pull(clone_uri) - self.mark_for_invalidation(dbrepo.repo_name) - except: + self.mark_for_invalidation(repo_name) + except Exception: log.error(traceback.format_exc()) raise @@ -427,13 +485,8 @@ class ScmModel(BaseModel): :param repo: SCM instance """ - - if repo.alias == 'hg': - from rhodecode.lib.vcs.backends.hg import \ - MercurialInMemoryChangeset as IMC - elif repo.alias == 'git': - from rhodecode.lib.vcs.backends.git import \ - GitInMemoryChangeset as IMC + user = self._get_user(user) + IMC = self._get_IMC_module(repo.alias) # decoding here will force that we have proper encoded values # in any other case this will throw exceptions and deny commit @@ -449,20 +502,21 @@ class ScmModel(BaseModel): author=author, parents=[cs], branch=cs.branch) - action = 'push_local:%s' % tip.raw_id - action_logger(user, action, repo_name) self.mark_for_invalidation(repo_name) + self._handle_push(repo, + username=user.username, + action='push_local', + repo_name=repo_name, + revisions=[tip.raw_id]) return tip def create_node(self, repo, repo_name, cs, user, author, message, content, f_path): - if repo.alias == 'hg': - from rhodecode.lib.vcs.backends.hg import MercurialInMemoryChangeset as IMC - elif repo.alias == 'git': - from rhodecode.lib.vcs.backends.git import GitInMemoryChangeset as IMC + user = self._get_user(user) + IMC = self._get_IMC_module(repo.alias) + # decoding here will force that we have proper encoded values # in any other case this will throw exceptions and deny commit - if isinstance(content, (basestring,)): content = safe_str(content) elif isinstance(content, (file, cStringIO.OutputType,)): @@ -488,9 +542,12 @@ class ScmModel(BaseModel): author=author, parents=parents, branch=cs.branch) - action = 'push_local:%s' % tip.raw_id - action_logger(user, action, repo_name) self.mark_for_invalidation(repo_name) + self._handle_push(repo, + username=user.username, + action='push_local', + repo_name=repo_name, + revisions=[tip.raw_id]) return tip def get_nodes(self, repo_name, revision, root_path='/', flat=True): @@ -601,7 +658,7 @@ class ScmModel(BaseModel): ver = matches.groups()[0] log.debug('got %s it is rhodecode' % (ver)) _rhodecode_hook = True - except: + except Exception: log.error(traceback.format_exc()) else: # there is no hook in this dir, so we want to create one diff --git a/rhodecode/model/user.py b/rhodecode/model/user.py --- a/rhodecode/model/user.py +++ b/rhodecode/model/user.py @@ -37,8 +37,8 @@ from rhodecode.lib.utils2 import safe_un from rhodecode.lib.caching_query import FromCache from rhodecode.model import BaseModel from rhodecode.model.db import User, UserRepoToPerm, Repository, Permission, \ - UserToPerm, UsersGroupRepoToPerm, UsersGroupToPerm, UsersGroupMember, \ - Notification, RepoGroup, UserRepoGroupToPerm, UsersGroupRepoGroupToPerm, \ + UserToPerm, UserGroupRepoToPerm, UserGroupToPerm, UserGroupMember, \ + Notification, RepoGroup, UserRepoGroupToPerm, UserGroupRepoGroupToPerm, \ UserEmailMap, UserIpMap from rhodecode.lib.exceptions import DefaultUserException, \ UserOwnsReposException @@ -95,7 +95,7 @@ class UserModel(BaseModel): new_user.api_key = generate_api_key(form_data['username']) self.sa.add(new_user) return new_user - except: + except Exception: log.error(traceback.format_exc()) raise @@ -132,7 +132,7 @@ class UserModel(BaseModel): new_user.username = username new_user.admin = admin # set password only if creating an user or password is changed - if edit is False or user.password != password: + if not edit or user.password != password: new_user.password = get_crypt_password(password) new_user.api_key = generate_api_key(username) new_user.email = email @@ -229,7 +229,7 @@ class UserModel(BaseModel): self.sa.flush() # notification to admins - subject = _('new user registration') + subject = _('New user registration') body = ('New user registration\n' '---------------------\n' '- Username: %s\n' @@ -244,7 +244,7 @@ class UserModel(BaseModel): type_=Notification.TYPE_REGISTRATION, email_kwargs=kw) - except: + except Exception: log.error(traceback.format_exc()) raise @@ -268,7 +268,7 @@ class UserModel(BaseModel): k = 'name' setattr(user, k, v) self.sa.add(user) - except: + except Exception: log.error(traceback.format_exc()) raise @@ -290,7 +290,7 @@ class UserModel(BaseModel): setattr(user, k, v) self.sa.add(user) return user - except: + except Exception: log.error(traceback.format_exc()) raise @@ -311,7 +311,7 @@ class UserModel(BaseModel): % (user.username, len(repos), ', '.join(repos)) ) self.sa.delete(user) - except: + except Exception: log.error(traceback.format_exc()) raise @@ -331,11 +331,11 @@ class UserModel(BaseModel): 'reset_url': link}) log.debug('sending email') run_task(tasks.send_email, user_email, - _("password reset link"), body, body) + _("Password reset link"), body, body) log.info('send new password mail to %s' % user_email) else: log.debug("password reset email %s not found" % user_email) - except: + except Exception: log.error(traceback.format_exc()) return False @@ -358,7 +358,7 @@ class UserModel(BaseModel): log.info('change password for %s' % user_email) if new_passwd is None: raise Exception('unable to generate new password') - except: + except Exception: log.error(traceback.format_exc()) Session().rollback() @@ -367,7 +367,7 @@ class UserModel(BaseModel): _('Your new RhodeCode password:%s') % (new_passwd)) log.info('send new password mail to %s' % user_email) - except: + except Exception: log.error('Failed to update user password') log.error(traceback.format_exc()) @@ -400,7 +400,7 @@ class UserModel(BaseModel): else: return False - except: + except Exception: log.error(traceback.format_exc()) auth_user.is_authenticated = False return False @@ -464,7 +464,7 @@ class UserModel(BaseModel): p = 'repository.admin' user.permissions[RK][r_k] = p - # repositories groups + # repository groups for perm in default_repo_groups_perms: rg_k = perm.UserRepoGroupToPerm.group.group_name p = 'group.admin' @@ -472,7 +472,7 @@ class UserModel(BaseModel): return user #================================================================== - # SET DEFAULTS GLOBAL, REPOS, REPOS GROUPS + # SET DEFAULTS GLOBAL, REPOS, REPOSITORY GROUPS #================================================================== uid = user.user_id @@ -497,7 +497,7 @@ class UserModel(BaseModel): user.permissions[RK][r_k] = p - # defaults for repositories groups taken from default user permission + # defaults for repository groups taken from default user permission # on given group for perm in default_repo_groups_perms: rg_k = perm.UserRepoGroupToPerm.group.group_name @@ -512,13 +512,13 @@ class UserModel(BaseModel): 'hg.create.none', 'hg.create.repository']) # USER GROUPS comes first - # users group global permissions - user_perms_from_users_groups = self.sa.query(UsersGroupToPerm)\ - .options(joinedload(UsersGroupToPerm.permission))\ - .join((UsersGroupMember, UsersGroupToPerm.users_group_id == - UsersGroupMember.users_group_id))\ - .filter(UsersGroupMember.user_id == uid)\ - .order_by(UsersGroupToPerm.users_group_id)\ + # user group global permissions + user_perms_from_users_groups = self.sa.query(UserGroupToPerm)\ + .options(joinedload(UserGroupToPerm.permission))\ + .join((UserGroupMember, UserGroupToPerm.users_group_id == + UserGroupMember.users_group_id))\ + .filter(UserGroupMember.user_id == uid)\ + .order_by(UserGroupToPerm.users_group_id)\ .all() #need to group here by groups since user can be in more than one group _grouped = [[x, list(y)] for x, y in @@ -559,21 +559,21 @@ class UserModel(BaseModel): # permission should be selected based on selected method #====================================================================== - # users group for repositories permissions + # user group for repositories permissions user_repo_perms_from_users_groups = \ - self.sa.query(UsersGroupRepoToPerm, Permission, Repository,)\ - .join((Repository, UsersGroupRepoToPerm.repository_id == + self.sa.query(UserGroupRepoToPerm, Permission, Repository,)\ + .join((Repository, UserGroupRepoToPerm.repository_id == Repository.repo_id))\ - .join((Permission, UsersGroupRepoToPerm.permission_id == + .join((Permission, UserGroupRepoToPerm.permission_id == Permission.permission_id))\ - .join((UsersGroupMember, UsersGroupRepoToPerm.users_group_id == - UsersGroupMember.users_group_id))\ - .filter(UsersGroupMember.user_id == uid)\ + .join((UserGroupMember, UserGroupRepoToPerm.users_group_id == + UserGroupMember.users_group_id))\ + .filter(UserGroupMember.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 + r_k = perm.UserGroupRepoToPerm.repository.repo_name multiple_counter[r_k] += 1 p = perm.Permission.permission_name cur_perm = user.permissions[RK][r_k] @@ -610,27 +610,27 @@ class UserModel(BaseModel): user.permissions[RK][r_k] = p #====================================================================== - # !! PERMISSIONS FOR REPOSITORIES GROUPS !! + # !! PERMISSIONS FOR REPOSITORY 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 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 + self.sa.query(UserGroupRepoGroupToPerm, Permission, RepoGroup)\ + .join((RepoGroup, UserGroupRepoGroupToPerm.group_id == RepoGroup.group_id))\ + .join((Permission, UserGroupRepoGroupToPerm.permission_id == Permission.permission_id))\ - .join((UsersGroupMember, UsersGroupRepoGroupToPerm.users_group_id - == UsersGroupMember.users_group_id))\ - .filter(UsersGroupMember.user_id == uid)\ + .join((UserGroupMember, UserGroupRepoGroupToPerm.users_group_id + == UserGroupMember.users_group_id))\ + .filter(UserGroupMember.user_id == uid)\ .all() multiple_counter = collections.defaultdict(int) for perm in user_repo_group_perms_from_users_groups: - g_k = perm.UsersGroupRepoGroupToPerm.group.group_name + g_k = perm.UserGroupRepoGroupToPerm.group.group_name multiple_counter[g_k] += 1 p = perm.Permission.permission_name cur_perm = user.permissions[GK][g_k] diff --git a/rhodecode/model/users_group.py b/rhodecode/model/users_group.py --- a/rhodecode/model/users_group.py +++ b/rhodecode/model/users_group.py @@ -3,7 +3,7 @@ rhodecode.model.users_group ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - users group model for RhodeCode + user group model for RhodeCode :created_on: Oct 1, 2011 :author: nvinot @@ -28,38 +28,38 @@ import logging import traceback from rhodecode.model import BaseModel -from rhodecode.model.db import UsersGroupMember, UsersGroup,\ - UsersGroupRepoToPerm, Permission, UsersGroupToPerm, User -from rhodecode.lib.exceptions import UsersGroupsAssignedException +from rhodecode.model.db import UserGroupMember, UserGroup,\ + UserGroupRepoToPerm, Permission, UserGroupToPerm, User +from rhodecode.lib.exceptions import UserGroupsAssignedException log = logging.getLogger(__name__) -class UsersGroupModel(BaseModel): +class UserGroupModel(BaseModel): - cls = UsersGroup + cls = UserGroup def __get_users_group(self, users_group): - return self._get_instance(UsersGroup, users_group, - callback=UsersGroup.get_by_group_name) + return self._get_instance(UserGroup, users_group, + callback=UserGroup.get_by_group_name) def get(self, users_group_id, cache=False): - return UsersGroup.get(users_group_id) + return UserGroup.get(users_group_id) def get_group(self, users_group): return self.__get_users_group(users_group) def get_by_name(self, name, cache=False, case_insensitive=False): - return UsersGroup.get_by_group_name(name, cache, case_insensitive) + return UserGroup.get_by_group_name(name, cache, case_insensitive) def create(self, name, active=True): try: - new = UsersGroup() + new = UserGroup() new.users_group_name = name new.users_group_active = active self.sa.add(new) return new - except: + except Exception: log.error(traceback.format_exc()) raise @@ -76,19 +76,19 @@ class UsersGroupModel(BaseModel): if v: v = [v] if isinstance(v, basestring) else v for u_id in set(v): - member = UsersGroupMember(users_group.users_group_id, u_id) + member = UserGroupMember(users_group.users_group_id, u_id) members_list.append(member) setattr(users_group, 'members', members_list) setattr(users_group, k, v) self.sa.add(users_group) - except: + except Exception: log.error(traceback.format_exc()) raise def delete(self, users_group, force=False): """ - Deletes repos group, unless force flag is used + Deletes repository group, unless force flag is used raises exception if there are members in that group, else deletes group and users @@ -99,15 +99,15 @@ class UsersGroupModel(BaseModel): users_group = self.__get_users_group(users_group) # check if this group is not assigned to repo - assigned_groups = UsersGroupRepoToPerm.query()\ - .filter(UsersGroupRepoToPerm.users_group == users_group).all() + assigned_groups = UserGroupRepoToPerm.query()\ + .filter(UserGroupRepoToPerm.users_group == users_group).all() - if assigned_groups and force is False: - raise UsersGroupsAssignedException('RepoGroup assigned to %s' % + if assigned_groups and not force: + raise UserGroupsAssignedException('RepoGroup assigned to %s' % assigned_groups) self.sa.delete(users_group) - except: + except Exception: log.error(traceback.format_exc()) raise @@ -121,7 +121,7 @@ class UsersGroupModel(BaseModel): return True try: - users_group_member = UsersGroupMember() + users_group_member = UserGroupMember() users_group_member.user = user users_group_member.users_group = users_group @@ -130,7 +130,7 @@ class UsersGroupModel(BaseModel): self.sa.add(users_group_member) return users_group_member - except: + except Exception: log.error(traceback.format_exc()) raise @@ -149,7 +149,7 @@ class UsersGroupModel(BaseModel): try: self.sa.delete(users_group_member) return True - except: + except Exception: log.error(traceback.format_exc()) raise else: @@ -160,23 +160,23 @@ class UsersGroupModel(BaseModel): users_group = self.__get_users_group(users_group) perm = self._get_perm(perm) - return UsersGroupToPerm.query()\ - .filter(UsersGroupToPerm.users_group == users_group)\ - .filter(UsersGroupToPerm.permission == perm).scalar() is not None + return UserGroupToPerm.query()\ + .filter(UserGroupToPerm.users_group == users_group)\ + .filter(UserGroupToPerm.permission == perm).scalar() is not None def grant_perm(self, users_group, perm): users_group = self.__get_users_group(users_group) perm = self._get_perm(perm) # if this permission is already granted skip it - _perm = UsersGroupToPerm.query()\ - .filter(UsersGroupToPerm.users_group == users_group)\ - .filter(UsersGroupToPerm.permission == perm)\ + _perm = UserGroupToPerm.query()\ + .filter(UserGroupToPerm.users_group == users_group)\ + .filter(UserGroupToPerm.permission == perm)\ .scalar() if _perm: return - new = UsersGroupToPerm() + new = UserGroupToPerm() new.users_group = users_group new.permission = perm self.sa.add(new) @@ -185,8 +185,8 @@ class UsersGroupModel(BaseModel): users_group = self.__get_users_group(users_group) perm = self._get_perm(perm) - obj = UsersGroupToPerm.query()\ - .filter(UsersGroupToPerm.users_group == users_group)\ - .filter(UsersGroupToPerm.permission == perm).scalar() + obj = UserGroupToPerm.query()\ + .filter(UserGroupToPerm.users_group == users_group)\ + .filter(UserGroupToPerm.permission == perm).scalar() if obj: self.sa.delete(obj) diff --git a/rhodecode/model/validators.py b/rhodecode/model/validators.py --- a/rhodecode/model/validators.py +++ b/rhodecode/model/validators.py @@ -16,8 +16,8 @@ from formencode.validators import ( from rhodecode.lib.compat import OrderedSet from rhodecode.lib import ipaddr from rhodecode.lib.utils import repo_name_slug -from rhodecode.lib.utils2 import safe_int -from rhodecode.model.db import RepoGroup, Repository, UsersGroup, User,\ +from rhodecode.lib.utils2 import safe_int, str2bool +from rhodecode.model.db import RepoGroup, Repository, UserGroup, User,\ ChangesetStatus from rhodecode.lib.exceptions import LdapImportError from rhodecode.config.routing import ADMIN_PREFIX @@ -105,7 +105,7 @@ def ValidUsername(edit=False, old_data={ msg = M(self, 'username_exists', state, username=value) raise formencode.Invalid(msg, value, state) - if re.match(r'^[a-zA-Z0-9]{1}[a-zA-Z0-9\-\_\.]+$', value) is None: + if re.match(r'^[a-zA-Z0-9]{1}[a-zA-Z0-9\-\_\.]*$', value) is None: msg = M(self, 'invalid_username', state) raise formencode.Invalid(msg, value, state) return _validator @@ -130,13 +130,13 @@ def ValidRepoUser(): return _validator -def ValidUsersGroup(edit=False, old_data={}): +def ValidUserGroup(edit=False, old_data={}): class _validator(formencode.validators.FancyValidator): messages = { - 'invalid_group': _(u'Invalid users group name'), - 'group_exist': _(u'Users group "%(usersgroup)s" already exists'), - 'invalid_usersgroup_name': - _(u'users group name may only contain alphanumeric ' + 'invalid_group': _(u'Invalid user group name'), + 'group_exist': _(u'User group "%(usergroup)s" already exists'), + 'invalid_usergroup_name': + _(u'user group name may only contain alphanumeric ' 'characters underscores, periods or dashes and must begin ' 'with alphanumeric character') } @@ -151,19 +151,19 @@ def ValidUsersGroup(edit=False, old_data old_ugname = None if edit: old_id = old_data.get('users_group_id') - old_ugname = UsersGroup.get(old_id).users_group_name + old_ugname = UserGroup.get(old_id).users_group_name if old_ugname != value or not edit: - is_existing_group = UsersGroup.get_by_group_name(value, + is_existing_group = UserGroup.get_by_group_name(value, case_insensitive=True) if is_existing_group: - msg = M(self, 'group_exist', state, usersgroup=value) + msg = M(self, 'group_exist', state, usergroup=value) raise formencode.Invalid(msg, value, state, error_dict=dict(users_group_name=msg) ) if re.match(r'^[a-zA-Z0-9]{1}[a-zA-Z0-9\-\_\.]+$', value) is None: - msg = M(self, 'invalid_usersgroup_name', state) + msg = M(self, 'invalid_usergroup_name', state) raise formencode.Invalid(msg, value, state, error_dict=dict(users_group_name=msg) ) @@ -280,7 +280,7 @@ def ValidAuth(): if not authenticate(username, password): user = User.get_by_username(username) - if user and user.active is False: + if user and not user.active: log.warning('user %s is disabled' % username) msg = M(self, 'disabled_account', state) raise formencode.Invalid(msg, value, state, @@ -318,7 +318,7 @@ def ValidRepoName(edit=False, old_data={ _(u'Repository named %(repo)s already exists'), 'repository_in_group_exists': _(u'Repository "%(repo)s" already ' 'exists in group "%(group)s"'), - 'same_group_exists': _(u'Repositories group with name "%(repo)s" ' + 'same_group_exists': _(u'Repository group with name "%(repo)s" ' 'already exists') } @@ -477,16 +477,24 @@ def CanWriteGroup(old_data=None): class _validator(formencode.validators.FancyValidator): messages = { 'permission_denied': _(u"You don't have permissions " - "to create repository in this group") + "to create repository in this group"), + 'permission_denied_root': _(u"no permission to create repository " + "in root location") } + def _to_python(self, value, state): + #root location + if value in [-1, "-1"]: + return None + return value + def validate_python(self, value, state): gr = RepoGroup.get(value) gr_name = gr.group_name if gr else None # None means ROOT location val = HasReposGroupPermissionAny('group.write', 'group.admin') can_create_repos = HasPermissionAny('hg.admin', 'hg.create.repository') forbidden = not val(gr_name, 'can write into group validator') - value_changed = old_data['repo_group'].get('group_id') != safe_int(value) + value_changed = True # old_data['repo_group'].get('group_id') != safe_int(value) if value_changed: # do check if we changed the value #parent group need to be existing if gr and forbidden: @@ -495,7 +503,7 @@ def CanWriteGroup(old_data=None): error_dict=dict(repo_type=msg) ) ## check if we can write to root location ! - elif gr is None and can_create_repos() is False: + elif gr is None and not can_create_repos(): msg = M(self, 'permission_denied_root', state) raise formencode.Invalid(msg, value, state, error_dict=dict(repo_type=msg) @@ -525,7 +533,7 @@ def CanCreateGroup(can_create_in_root=Fa #we can create in root, we're fine no validations required return - forbidden_in_root = gr is None and can_create_in_root is False + forbidden_in_root = gr is None and not can_create_in_root val = HasReposGroupPermissionAny('group.admin') forbidden = not val(gr_name, 'can create group validator') if forbidden_in_root or forbidden: @@ -546,7 +554,7 @@ def ValidPerms(type_='repo'): class _validator(formencode.validators.FancyValidator): messages = { 'perm_new_member_name': - _(u'This username or users group name is not valid') + _(u'This username or user group name is not valid') } def to_python(self, value, state): @@ -583,9 +591,9 @@ def ValidPerms(type_='repo'): 'g': 'users_group' }[k[0]] if member == 'default': - if value.get('repo_private'): + if str2bool(value.get('repo_private')): # set none for default when updating to - # private repo + # private repo protects agains form manipulation v = EMPTY_PERM perms_update.add((member, v, t)) @@ -600,9 +608,9 @@ def ValidPerms(type_='repo'): .filter(User.active == True)\ .filter(User.username == k).one() if t is 'users_group': - self.user_db = UsersGroup.query()\ - .filter(UsersGroup.users_group_active == True)\ - .filter(UsersGroup.users_group_name == k).one() + self.user_db = UserGroup.query()\ + .filter(UserGroup.users_group_active == True)\ + .filter(UserGroup.users_group_name == k).one() except Exception: log.exception('Updated permission failed') @@ -715,13 +723,7 @@ def AttrLoginValidator(): 'this is the name of the attribute that is equivalent ' 'to "username"') } - - def validate_python(self, value, state): - if not value or not isinstance(value, (str, unicode)): - msg = M(self, 'invalid_cn', state) - raise formencode.Invalid(msg, value, state, - error_dict=dict(ldap_attr_login=msg) - ) + messages['empty'] = messages['invalid_cn'] return _validator @@ -790,3 +792,16 @@ def ValidIp(): value, state) return _validator + + +def FieldKey(): + class _validator(formencode.validators.FancyValidator): + messages = dict( + badFormat=_('Key name can only consist of letters, ' + 'underscore, dash or numbers'),) + + def validate_python(self, value, state): + if not re.match('[a-zA-Z0-9_-]+$', value): + raise formencode.Invalid(self.message('badFormat', state), + value, state) + return _validator diff --git a/rhodecode/public/css/contextbar.css b/rhodecode/public/css/contextbar.css new file mode 100644 --- /dev/null +++ b/rhodecode/public/css/contextbar.css @@ -0,0 +1,342 @@ +/** + * Stylesheets for the context bar + */ + +#quick .repo_switcher { background-image: url("../images/icons/database.png"); } +#quick .journal { background-image: url("../images/icons/book.png"); } +#quick .search { background-image: url("../images/icons/search_16.png"); } +#quick .admin { background-image: url("../images/icons/cog_edit.png"); } + +#context-bar a.follow { background-image: url("../images/icons/heart.png"); } +#context-bar a.following { background-image: url("../images/icons/heart_delete.png"); } +#context-bar a.fork { background-image: url("../images/icons/arrow_divide.png"); } +#context-bar a.summary { background-image: url("../images/icons/clipboard_16.png"); } +#context-bar a.changelogs { background-image: url("../images/icons/time.png"); } +#context-bar a.files { background-image: url("../images/icons/file.png"); } +#context-bar a.switch-to { background-image: url("../images/icons/arrow_switch.png"); } +#context-bar a.options { background-image: url("../images/icons/table_gear.png"); } +#context-bar a.forks { background-image: url("../images/icons/arrow_divide.png"); } +#context-bar a.pull-request { background-image: url("../images/icons/arrow_join.png"); } +#context-bar a.branches { background-image: url("../images/icons/arrow_branch.png"); } +#context-bar a.tags { background-image: url("../images/icons/tag_blue.png"); } +#context-bar a.bookmarks { background-image: url("../images/icons/tag_green.png"); } +#context-bar a.settings { background-image: url("../images/icons/cog.png"); } +#context-bar a.shortlog { background-image: url("../images/icons/time.png"); } +#context-bar a.search { background-image: url("../images/icons/search_16.png"); } +#context-bar a.admin { background-image: url("../images/icons/cog_edit.png"); } + +#context-bar a.journal { background-image: url("../images/icons/book.png"); } +#context-bar a.repos { background-image: url("../images/icons/database_edit.png"); } +#context-bar a.repos_groups { background-image: url("../images/icons/database_link.png"); } +#context-bar a.users { background-image: url("../images/icons/user_edit.png"); } +#context-bar a.groups { background-image: url("../images/icons/group_edit.png"); } +#context-bar a.permissions { background-image: url("../images/icons/key.png"); } +#context-bar a.ldap { background-image: url("../images/icons/server_key.png"); } +#context-bar a.defaults { background-image: url("../images/icons/wrench.png"); } +#context-bar a.settings { background-image: url("../images/icons/cog_edit.png"); } +#context-bar a.compare_request { background-image: url('../images/icons/arrow_inout.png')} +#context-bar a.locking_del { background-image: url('../images/icons/lock_delete.png')} +#context-bar a.locking_add { background-image: url('../images/icons/lock_add.png')} + +#content #context-bar { + position: relative; + overflow: visible; + background-color: #336699; + border-top: 1px solid #517da8; + border-bottom: 1px solid #003162; + padding: 0 5px; + min-height: 36px; +} + +#header #header-inner #quick a, +#content #context-bar, +#content #context-bar a { + color: #FFFFFF; +} + +#header #header-inner #quick a:hover, +#content #context-bar a:hover { + text-decoration: none; +} + +#content #context-bar .icon { + display: inline-block; + width: 16px; + height: 16px; + vertical-align: text-bottom; +} + +ul.horizontal-list { + display: block; +} + +ul.horizontal-list > li { + float: left; + position: relative; +} + +#header #header-inner #quick ul, +ul.horizontal-list > li ul { + position: absolute; + display: none; + right: 0; + z-index: 999; +} + +#header #header-inner #quick li:hover > ul, +ul.horizontal-list li:hover > ul { + display: block; +} + +#header #header-inner #quick li ul li, +ul.horizontal-list ul li { + position: relative; + border-bottom: 1px solid rgba(0,0,0,0.1); + border-top: 1px solid rgba(255,255,255,0.1); +} + +ul.horizontal-list > li ul ul { + position: absolute; + right: 100%; + top: -1px; + min-width: 200px; + max-height: 400px; + overflow-x: hidden; + overflow-y: auto; +} + +#header #header-inner #quick ul a, +ul.horizontal-list li a { + white-space: nowrap; +} + +#breadcrumbs { + float: left; + padding: 6px 0 5px 0; + padding-left: 5px; + font-weight: bold; + font-size: 14px; +} + +#breadcrumbs span { + font-weight: bold; + font-size: 1.4em; +} + +#header #header-inner #quick ul, +#revision-changer, +#context-pages, +#context-pages ul { + background: #3b6998; /* Old browsers */ + background: -moz-linear-gradient(top, #4574a2 0%, #2f5d8b 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#4574a2), color-stop(100%,#2f5d8b)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #4574a2 0%, #2f5d8b 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #4574a2 0%, #2f5d8b 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #4574a2 0%, #2f5d8b 100%); /* IE10+ */ + background: linear-gradient(to bottom, #4574a2 0%, #2f5d8b 100%); /* W3C */ + /*Filter on IE will also use overflow:hidden implicitly, and that would clip our inner menus.*/ + /*filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#4574a2', endColorstr='#2f5d8b',GradientType=0 ); /* IE6-9 */*/ +} + +#header #header-inner #quick a, +#context-actions a, +#context-pages a { + background-repeat: no-repeat; + background-position: 10px 50%; + padding-left: 30px; +} + +#quick a, +#context-pages ul ul a { + padding-left: 10px; +} + +ul#context-actions { + display: inline-block; + float: right; + border-radius: 4px; + background-image: linear-gradient(top, #4574a2 0%, #2f5d8b 100%); +} + +#content ul#context-actions li { + padding: 0px; + border-right: 1px solid rgba(0,0,0,0.1); + border-left: 1px solid rgba(255,255,255,0.1); +} + +#context-actions a { + display: block; + cursor: pointer; + background: none; + border: none; + margin: 0px; + height: auto; + padding: 10px 10px 10px 30px; + background-repeat: no-repeat; + background-position: 10px 50%; + font-size: 1em; +} + +#context-actions a { + padding: 11px 10px 12px 30px; +} + +#header #header-inner #quick li:hover, +#revision-changer:hover, +#context-pages li:hover, +#context-actions li:hover, +#content #context-actions li:hover, +#header #header-inner #quick li.current, +#context-pages li.current { + background: #6388ad; /* Old browsers */ + background: -moz-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0.1)), color-stop(100%,rgba(255,255,255,0))); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* IE10+ */ + background: linear-gradient(to bottom, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* W3C */ + /*filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#88bfe8', endColorstr='#70b0e0',GradientType=0 ); /* IE6-9 */*/ +} + + +#content #context-actions li:first-child { + border-left: none; + border-radius: 4px 0 0px 4px; +} + +#content #context-actions li:last-child { + border-right: none; + border-radius: 0 4px 4px 0; +} + +#content #context-actions .icon { + margin: auto; + margin-bottom: 5px; + display: block; + clear: both; + float: none; +} + +#content #context-pages .follow .show-following, +#content #context-pages .following .show-follow { + display: none; +} + +#context-pages { + float: right; + border-left: 1px solid rgba(0,0,0,0.1); +} + +#context-pages li.current { + background: #535353; /* Old browsers */ + background: -moz-linear-gradient(top, #5d5d5d 0%, #484848 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#5d5d5d), color-stop(100%,#484848)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #5d5d5d 0%, #484848 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #5d5d5d 0%, #484848 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #5d5d5d 0%, #484848 100%); /* IE10+ */ + background: linear-gradient(to bottom, #5d5d5d 0%, #484848 100%); /* W3C */ +} + +#content #context-pages .icon { + margin-right: 5px; +} + +#header #header-inner #quick li, +#content #context-pages li { + border-right: 1px solid rgba(0,0,0,0.1); + border-left: 1px solid rgba(255,255,255,0.1); + padding: 0; +} +#header #header-inner #quick li:last-child, +#content #context-pages li:last-child { + border-right: none; +} + +#header #header-inner #quick > li:first-child { + border-left: none; +} + +#header #header-inner #quick > li:first-child > a { + border-radius: 4px 0 0 4px; +} + +#header #header-inner #quick a, +#context-pages a, +#context-pages .admin_menu a { + display: block; + padding: 0px 10px 1px 30px; + padding-left: 30px; + line-height: 35px; +} + +#header #header-inner #quick a.thin, +#context-pages a.thin, +#context-pages .admin_menu a.thin { + line-height: 28px !important; +} + +#header #header-inner #quick a#quick_login_link { + padding-left: 0px; +} + +#header #header-inner #quick a { + overflow: hidden; +} +#quick a.childs:after, +#revision-changer:before, +#context-pages a.childs:after, +#context-pages a.dropdown:after { + content: ' \25BE'; +} +#context-pages a.childs { + padding-right: 30px; +} +#context-pages a.childs:after { + position: absolute; + float: right; + padding-left: 5px; + padding-right: 5px; +} + +#revision-changer:before { + position: absolute; + top: 0px; + right: 0px; + border-right: 1px solid rgba(0,0,0,0.1); + height: 25px; + padding-top: 10px; + padding-right: 10px; +} + +#context-pages li:last-child a { + padding-right: 10px; +} + +#context-bar #revision-changer { + position: relative; + cursor: pointer; + border: none; + padding: 0; + margin: 0; + color: #FFFFFF; + font-size: 0.85em; + padding: 2px 15px; + padding-bottom: 3px; + padding-right: 30px; + border-right: 1px solid rgba(255,255,255,0.1); +} + +#revision-changer .branch-name, +#revision-changer .revision { + display: block; + text-align: center; + line-height: 1.5em; +} + +#revision-changer .branch-name { + font-weight: bold; +} + +#revision-changer .revision { + text-transform: uppercase; +} diff --git a/rhodecode/public/css/pygments.css b/rhodecode/public/css/pygments.css --- a/rhodecode/public/css/pygments.css +++ b/rhodecode/public/css/pygments.css @@ -9,71 +9,70 @@ div.codeblock { line-height: 125%; -webkit-border-radius: 4px; -moz-border-radius: 4px; - border-radius: 4px; + border-radius: 4px; } -div.codeblock .code-header{ - border-bottom: 1px solid #CCCCCC; - background: #EEEEEE; - padding:10px 0 10px 0; +div.codeblock .code-header { + border-bottom: 1px solid #CCCCCC; + background: #EEEEEE; + padding: 10px 0 10px 0; } -div.codeblock .code-header .stats{ - clear: both; - padding: 6px 8px 6px 10px; - border-bottom: 1px solid rgb(204, 204, 204); - height: 23px; - margin-bottom: 6px; +div.codeblock .code-header .stats { + clear: both; + padding: 6px 8px 6px 10px; + border-bottom: 1px solid rgb(204, 204, 204); + height: 23px; + margin-bottom: 6px; } -div.codeblock .code-header .stats .left{ - float:left; +div.codeblock .code-header .stats .left { + float: left; } -div.codeblock .code-header .stats .left.img{ - margin-top:-2px; +div.codeblock .code-header .stats .left.img { + margin-top: -2px; } -div.codeblock .code-header .stats .left.item{ - float:left; - padding: 0 9px 0 9px; - border-right:1px solid #ccc; +div.codeblock .code-header .stats .left.item { + float: left; + padding: 0 9px 0 9px; + border-right: 1px solid #ccc; +} +div.codeblock .code-header .stats .left.item pre { } -div.codeblock .code-header .stats .left.item pre{ - +div.codeblock .code-header .stats .left.item.last { + border-right: none; } -div.codeblock .code-header .stats .left.item.last{ - border-right:none; -} -div.codeblock .code-header .stats .buttons{ - float:right; - padding-right:4px; +div.codeblock .code-header .stats .buttons { + float: right; + padding-right: 4px; } -div.codeblock .code-header .author{ - margin-left:25px; - font-weight: bold; - height: 25px; +div.codeblock .code-header .author { + margin-left: 25px; + font-weight: bold; + height: 25px; } -div.codeblock .code-header .author .user{ - padding-top:3px; +div.codeblock .code-header .author .user { + padding-top: 3px; } -div.codeblock .code-header .commit{ - margin-left:25px; - font-weight: normal; - white-space:pre; +div.codeblock .code-header .commit { + margin-left: 25px; + font-weight: normal; + white-space: pre; } -div.codeblock .code-body table{ +div.codeblock .code-body table { width: 0 !important; border: 0px !important; } div.codeblock .code-body table td { - border: 0px !important; + border: 0px !important; } div.code-body { - background-color: #FFFFFF; + background-color: #FFFFFF; } div.codeblock .code-header .search-path { - padding: 0px 0px 0px 10px; + padding: 0px 0px 0px 10px; } div.search-code-body { @@ -81,19 +80,18 @@ div.search-code-body { padding: 5px 0px 5px 10px; } -div.search-code-body pre .match{ - background-color: #FAFFA6; +div.search-code-body pre .match { + background-color: #FAFFA6; } -div.search-code-body pre .break{ - background-color: #DDE7EF; - width: 100%; - color: #747474; - display: block; - +div.search-code-body pre .break { + background-color: #DDE7EF; + width: 100%; + color: #747474; + display: block; } -div.annotatediv{ - margin-left:2px; - margin-right:4px; +div.annotatediv { + margin-left: 2px; + margin-right: 4px; } .code-highlight { padding: 0px; @@ -101,14 +99,14 @@ div.annotatediv{ margin-bottom: 5px; border-left: 2px solid #ccc; } -.code-highlight pre, .linenodiv pre { - padding: 5px; +.code-highlight pre, .linenodiv pre { + padding: 5px; margin: 0; } -.code-highlight pre div:target { +.code-highlight pre div:target { background-color: #FFFFBE !important; } - + .linenos a { text-decoration: none; } .code { display: block; } diff --git a/rhodecode/public/css/style.css b/rhodecode/public/css/style.css old mode 100644 new mode 100755 --- a/rhodecode/public/css/style.css +++ b/rhodecode/public/css/style.css @@ -1,4849 +1,4867 @@ -html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td - { - border: 0; - outline: 0; - font-size: 100%; - vertical-align: baseline; - background: transparent; - margin: 0; - padding: 0; -} - -body { - line-height: 1; - height: 100%; - background: url("../images/background.png") repeat scroll 0 0 #B0B0B0; - font-family: Lucida Grande, Verdana, Lucida Sans Regular, - Lucida Sans Unicode, Arial, sans-serif; font-size : 12px; - color: #000; - margin: 0; - padding: 0; - font-size: 12px; -} - -ol,ul { - list-style: none; -} - -blockquote,q { - quotes: none; -} - -blockquote:before,blockquote:after,q:before,q:after { - content: none; -} - -:focus { - outline: 0; -} - -del { - text-decoration: line-through; -} - -table { - border-collapse: collapse; - border-spacing: 0; -} - -html { - height: 100%; -} - -a { - color: #003367; - text-decoration: none; - cursor: pointer; -} - -a:hover { - color: #316293; - text-decoration: underline; -} - -h1,h2,h3,h4,h5,h6, -div.h1,div.h2,div.h3,div.h4,div.h5,div.h6 { - color: #292929; - font-weight: 700; -} - -h1,div.h1 { - font-size: 22px; -} - -h2,div.h2 { - font-size: 20px; -} - -h3,div.h3 { - font-size: 18px; -} - -h4,div.h4 { - font-size: 16px; -} - -h5,div.h5 { - font-size: 14px; -} - -h6,div.h6 { - font-size: 11px; -} - -ul.circle { - list-style-type: circle; -} - -ul.disc { - list-style-type: disc; -} - -ul.square { - list-style-type: square; -} - -ol.lower-roman { - list-style-type: lower-roman; -} - -ol.upper-roman { - list-style-type: upper-roman; -} - -ol.lower-alpha { - list-style-type: lower-alpha; -} - -ol.upper-alpha { - list-style-type: upper-alpha; -} - -ol.decimal { - list-style-type: decimal; -} - -div.color { - clear: both; - overflow: hidden; - position: absolute; - background: #FFF; - margin: 7px 0 0 60px; - padding: 1px 1px 1px 0; -} - -div.color a { - width: 15px; - height: 15px; - display: block; - float: left; - margin: 0 0 0 1px; - padding: 0; -} - -div.options { - clear: both; - overflow: hidden; - position: absolute; - background: #FFF; - margin: 7px 0 0 162px; - padding: 0; -} - -div.options a { - height: 1%; - display: block; - text-decoration: none; - margin: 0; - padding: 3px 8px; -} - -.top-left-rounded-corner { - -webkit-border-top-left-radius: 8px; - -khtml-border-radius-topleft: 8px; - -moz-border-radius-topleft: 8px; - border-top-left-radius: 8px; -} - -.top-right-rounded-corner { - -webkit-border-top-right-radius: 8px; - -khtml-border-radius-topright: 8px; - -moz-border-radius-topright: 8px; - border-top-right-radius: 8px; -} - -.bottom-left-rounded-corner { - -webkit-border-bottom-left-radius: 8px; - -khtml-border-radius-bottomleft: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-left-radius: 8px; -} - -.bottom-right-rounded-corner { - -webkit-border-bottom-right-radius: 8px; - -khtml-border-radius-bottomright: 8px; - -moz-border-radius-bottomright: 8px; - border-bottom-right-radius: 8px; -} - -.top-left-rounded-corner-mid { - -webkit-border-top-left-radius: 4px; - -khtml-border-radius-topleft: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; -} - -.top-right-rounded-corner-mid { - -webkit-border-top-right-radius: 4px; - -khtml-border-radius-topright: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; -} - -.bottom-left-rounded-corner-mid { - -webkit-border-bottom-left-radius: 4px; - -khtml-border-radius-bottomleft: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} - -.bottom-right-rounded-corner-mid { - -webkit-border-bottom-right-radius: 4px; - -khtml-border-radius-bottomright: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} - -.help-block { - color: #999999; - display: block; - margin-bottom: 0; - margin-top: 5px; -} - -.empty_data{ - color:#B9B9B9; -} - -a.permalink{ - visibility: hidden; -} - -a.permalink:hover{ - text-decoration: none; -} - -h1:hover > a.permalink, -h2:hover > a.permalink, -h3:hover > a.permalink, -h4:hover > a.permalink, -h5:hover > a.permalink, -h6:hover > a.permalink, -div:hover > a.permalink { - visibility: visible; -} - -#header { - margin: 0; - padding: 0 10px; -} - -#header ul#logged-user { - margin-bottom: 5px !important; - -webkit-border-radius: 0px 0px 8px 8px; - -khtml-border-radius: 0px 0px 8px 8px; - -moz-border-radius: 0px 0px 8px 8px; - border-radius: 0px 0px 8px 8px; - height: 37px; - background-color: #003B76; - background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) ); - background-image: -moz-linear-gradient(top, #003b76, #00376e); - background-image: -ms-linear-gradient(top, #003b76, #00376e); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) ); - background-image: -webkit-linear-gradient(top, #003b76, #00376e); - background-image: -o-linear-gradient(top, #003b76, #00376e); - background-image: linear-gradient(top, #003b76, #00376e); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',endColorstr='#00376e', GradientType=0 ); - box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); -} - -#header ul#logged-user li { - list-style: none; - float: left; - margin: 8px 0 0; - padding: 4px 12px; - border-left: 1px solid #316293; -} - -#header ul#logged-user li.first { - border-left: none; - margin: 4px; -} - -#header ul#logged-user li.first div.gravatar { - margin-top: -2px; -} - -#header ul#logged-user li.first div.account { - padding-top: 4px; - float: left; -} - -#header ul#logged-user li.last { - border-right: none; -} - -#header ul#logged-user li a { - color: #fff; - font-weight: 700; - text-decoration: none; -} - -#header ul#logged-user li a:hover { - text-decoration: underline; -} - -#header ul#logged-user li.highlight a { - color: #fff; -} - -#header ul#logged-user li.highlight a:hover { - color: #FFF; -} - -#header #header-inner { - min-height: 44px; - clear: both; - position: relative; - background-color: #003B76; - background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) ); - background-image: -moz-linear-gradient(top, #003b76, #00376e); - background-image: -ms-linear-gradient(top, #003b76, #00376e); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),color-stop(100%, #00376e) ); - background-image: -webkit-linear-gradient(top, #003b76, #00376e); - background-image: -o-linear-gradient(top, #003b76, #00376e); - background-image: linear-gradient(top, #003b76, #00376e); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',endColorstr='#00376e', GradientType=0 ); - margin: 0; - padding: 0; - display: block; - box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); - -webkit-border-radius: 4px 4px 4px 4px; - -khtml-border-radius: 4px 4px 4px 4px; - -moz-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} -#header #header-inner.hover{ - position: fixed !important; - width: 100% !important; - margin-left: -10px !important; - z-index: 10000; - -webkit-border-radius: 0px 0px 0px 0px; - -khtml-border-radius: 0px 0px 0px 0px; - -moz-border-radius: 0px 0px 0px 0px; - border-radius: 0px 0px 0px 0px; -} - -.ie7 #header #header-inner.hover, -.ie8 #header #header-inner.hover, -.ie9 #header #header-inner.hover -{ - z-index: auto !important; -} - -.header-pos-fix, .anchor{ - margin-top: -46px; - padding-top: 46px; -} - -#header #header-inner #home a { - height: 40px; - width: 46px; - display: block; - background: url("../images/button_home.png"); - background-position: 0 0; - margin: 0; - padding: 0; -} - -#header #header-inner #home a:hover { - background-position: 0 -40px; -} - -#header #header-inner #logo { - float: left; - position: absolute; -} - -#header #header-inner #logo h1 { - color: #FFF; - font-size: 20px; - margin: 12px 0 0 13px; - padding: 0; -} - -#header #header-inner #logo a { - color: #fff; - text-decoration: none; -} - -#header #header-inner #logo a:hover { - color: #bfe3ff; -} - -#header #header-inner #quick,#header #header-inner #quick ul { - position: relative; - float: right; - list-style-type: none; - list-style-position: outside; - margin: 8px 8px 0 0; - padding: 0; -} - -#header #header-inner #quick li { - position: relative; - float: left; - margin: 0 5px 0 0; - padding: 0; -} - -#header #header-inner #quick li a.menu_link { - top: 0; - left: 0; - height: 1%; - display: block; - clear: both; - overflow: hidden; - color: #FFF; - font-weight: 700; - text-decoration: none; - background: #369; - padding: 0; - -webkit-border-radius: 4px 4px 4px 4px; - -khtml-border-radius: 4px 4px 4px 4px; - -moz-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} - -#header #header-inner #quick li span.short { - padding: 9px 6px 8px 6px; -} - -#header #header-inner #quick li span { - top: 0; - right: 0; - height: 1%; - display: block; - float: left; - border-left: 1px solid #3f6f9f; - margin: 0; - padding: 10px 12px 8px 10px; -} - -#header #header-inner #quick li span.normal { - border: none; - padding: 10px 12px 8px; -} - -#header #header-inner #quick li span.icon { - top: 0; - left: 0; - border-left: none; - border-right: 1px solid #2e5c89; - padding: 8px 6px 4px; -} - -#header #header-inner #quick li span.icon_short { - top: 0; - left: 0; - border-left: none; - border-right: 1px solid #2e5c89; - padding: 8px 6px 4px; -} - -#header #header-inner #quick li span.icon img,#header #header-inner #quick li span.icon_short img - { - margin: 0px -2px 0px 0px; -} - -#header #header-inner #quick li a:hover { - background: #4e4e4e no-repeat top left; -} - -#header #header-inner #quick li a:hover span { - border-left: 1px solid #545454; -} - -#header #header-inner #quick li a:hover span.icon,#header #header-inner #quick li a:hover span.icon_short - { - border-left: none; - border-right: 1px solid #464646; -} - -#header #header-inner #quick ul { - top: 29px; - right: 0; - min-width: 200px; - display: none; - position: absolute; - background: #FFF; - border: 1px solid #666; - border-top: 1px solid #003367; - z-index: 100; - margin: 0px 0px 0px 0px; - padding: 0; -} - -#header #header-inner #quick ul.repo_switcher { - max-height: 275px; - overflow-x: hidden; - overflow-y: auto; -} - -#header #header-inner #quick ul.repo_switcher li.qfilter_rs { - float: none; - margin: 0; - border-bottom: 2px solid #003367; -} - -#header #header-inner #quick .repo_switcher_type { - position: absolute; - left: 0; - top: 9px; -} - -#header #header-inner #quick li ul li { - border-bottom: 1px solid #ddd; -} - -#header #header-inner #quick li ul li a { - width: 182px; - height: auto; - display: block; - float: left; - background: #FFF; - color: #003367; - font-weight: 400; - margin: 0; - padding: 7px 9px; -} - -#header #header-inner #quick li ul li a:hover { - color: #000; - background: #FFF; -} - -#header #header-inner #quick ul ul { - top: auto; -} - -#header #header-inner #quick li ul ul { - right: 200px; - max-height: 290px; - overflow: auto; - overflow-x: hidden; - white-space: normal; -} - -#header #header-inner #quick li ul li a.journal,#header #header-inner #quick li ul li a.journal:hover - { - background: url("../images/icons/book.png") no-repeat scroll 4px 9px - #FFF; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; -} - -#header #header-inner #quick li ul li a.private_repo,#header #header-inner #quick li ul li a.private_repo:hover - { - background: url("../images/icons/lock.png") no-repeat scroll 4px 9px - #FFF; - min-width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; -} - -#header #header-inner #quick li ul li a.public_repo,#header #header-inner #quick li ul li a.public_repo:hover - { - background: url("../images/icons/lock_open.png") no-repeat scroll 4px - 9px #FFF; - min-width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; -} - -#header #header-inner #quick li ul li a.hg,#header #header-inner #quick li ul li a.hg:hover - { - background: url("../images/icons/hgicon.png") no-repeat scroll 4px 9px - #FFF; - min-width: 167px; - margin: 0 0 0 14px; - padding: 12px 9px 7px 24px; -} - -#header #header-inner #quick li ul li a.git,#header #header-inner #quick li ul li a.git:hover - { - background: url("../images/icons/giticon.png") no-repeat scroll 4px 9px - #FFF; - min-width: 167px; - margin: 0 0 0 14px; - padding: 12px 9px 7px 24px; -} - -#header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover - { - background: url("../images/icons/database_edit.png") no-repeat scroll - 4px 9px #FFF; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; -} - -#header #header-inner #quick li ul li a.repos_groups,#header #header-inner #quick li ul li a.repos_groups:hover - { - background: url("../images/icons/database_link.png") no-repeat scroll - 4px 9px #FFF; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; -} - -#header #header-inner #quick li ul li a.users,#header #header-inner #quick li ul li a.users:hover - { - background: #FFF url("../images/icons/user_edit.png") no-repeat 4px 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; -} - -#header #header-inner #quick li ul li a.groups,#header #header-inner #quick li ul li a.groups:hover - { - background: #FFF url("../images/icons/group_edit.png") no-repeat 4px 9px; - width: 167px; - margin: 0; - 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; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; -} - -#header #header-inner #quick li ul li a.permissions,#header #header-inner #quick li ul li a.permissions:hover - { - background: #FFF url("../images/icons/key.png") no-repeat 4px 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; -} - -#header #header-inner #quick li ul li a.ldap,#header #header-inner #quick li ul li a.ldap:hover - { - background: #FFF url("../images/icons/server_key.png") no-repeat 4px 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; -} - -#header #header-inner #quick li ul li a.fork,#header #header-inner #quick li ul li a.fork:hover - { - background: #FFF url("../images/icons/arrow_divide.png") no-repeat 4px - 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; -} - -#header #header-inner #quick li ul li a.locking_add,#header #header-inner #quick li ul li a.locking_add:hover - { - background: #FFF url("../images/icons/lock_add.png") no-repeat 4px - 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; -} - -#header #header-inner #quick li ul li a.locking_del,#header #header-inner #quick li ul li a.locking_del:hover - { - background: #FFF url("../images/icons/lock_delete.png") no-repeat 4px - 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; -} - -#header #header-inner #quick li ul li a.pull_request,#header #header-inner #quick li ul li a.pull_request:hover - { - background: #FFF url("../images/icons/arrow_join.png") no-repeat 4px - 9px; - width: 167px; - margin: 0; - 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; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; -} - -#header #header-inner #quick li ul li a.delete,#header #header-inner #quick li ul li a.delete:hover - { - background: #FFF url("../images/icons/delete.png") no-repeat 4px 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; -} - -#header #header-inner #quick li ul li a.branches,#header #header-inner #quick li ul li a.branches:hover - { - background: #FFF url("../images/icons/arrow_branch.png") no-repeat 4px - 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; -} - -#header #header-inner #quick li ul li a.tags, -#header #header-inner #quick li ul li a.tags:hover{ - background: #FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; -} - -#header #header-inner #quick li ul li a.bookmarks, -#header #header-inner #quick li ul li a.bookmarks:hover{ - background: #FFF url("../images/icons/tag_green.png") no-repeat 4px 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; -} - -#header #header-inner #quick li ul li a.admin, -#header #header-inner #quick li ul li a.admin:hover{ - background: #FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px; - width: 167px; - margin: 0; - padding: 12px 9px 7px 24px; -} - -.groups_breadcrumbs a { - color: #fff; -} - -.groups_breadcrumbs a:hover { - color: #bfe3ff; - text-decoration: none; -} - -td.quick_repo_menu { - background: #FFF url("../images/vertical-indicator.png") 8px 50% no-repeat !important; - cursor: pointer; - width: 8px; - border: 1px solid transparent; -} - -td.quick_repo_menu.active { - background: url("../images/dt-arrow-dn.png") no-repeat scroll 5px 50% #FFFFFF !important; - border: 1px solid #003367; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); - cursor: pointer; -} - -td.quick_repo_menu .menu_items { - margin-top: 10px; - margin-left:-6px; - width: 150px; - position: absolute; - background-color: #FFF; - background: none repeat scroll 0 0 #FFFFFF; - border-color: #003367 #666666 #666666; - border-right: 1px solid #666666; - border-style: solid; - border-width: 1px; - box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2); - border-top-style: none; -} - -td.quick_repo_menu .menu_items li { - padding: 0 !important; -} - -td.quick_repo_menu .menu_items a { - display: block; - padding: 4px 12px 4px 8px; -} - -td.quick_repo_menu .menu_items a:hover { - background-color: #EEE; - text-decoration: none; -} - -td.quick_repo_menu .menu_items .icon img { - margin-bottom: -2px; -} - -td.quick_repo_menu .menu_items.hidden { - display: none; -} - -.yui-dt-first th { - text-align: left; -} - -/* -Copyright (c) 2011, Yahoo! Inc. All rights reserved. -Code licensed under the BSD License: -http://developer.yahoo.com/yui/license.html -version: 2.9.0 -*/ -.yui-skin-sam .yui-dt-mask { - position: absolute; - z-index: 9500; -} -.yui-dt-tmp { - position: absolute; - left: -9000px; -} -.yui-dt-scrollable .yui-dt-bd { overflow: auto } -.yui-dt-scrollable .yui-dt-hd { - overflow: hidden; - position: relative; -} -.yui-dt-scrollable .yui-dt-bd thead tr, -.yui-dt-scrollable .yui-dt-bd thead th { - position: absolute; - left: -1500px; -} -.yui-dt-scrollable tbody { -moz-outline: 0 } -.yui-skin-sam thead .yui-dt-sortable { cursor: pointer } -.yui-skin-sam thead .yui-dt-draggable { cursor: move } -.yui-dt-coltarget { - position: absolute; - z-index: 999; -} -.yui-dt-hd { zoom: 1 } -th.yui-dt-resizeable .yui-dt-resizerliner { position: relative } -.yui-dt-resizer { - position: absolute; - right: 0; - bottom: 0; - height: 100%; - cursor: e-resize; - cursor: col-resize; - background-color: #CCC; - opacity: 0; - filter: alpha(opacity=0); -} -.yui-dt-resizerproxy { - visibility: hidden; - position: absolute; - z-index: 9000; - background-color: #CCC; - opacity: 0; - filter: alpha(opacity=0); -} -th.yui-dt-hidden .yui-dt-liner, -td.yui-dt-hidden .yui-dt-liner, -th.yui-dt-hidden .yui-dt-resizer { display: none } -.yui-dt-editor, -.yui-dt-editor-shim { - position: absolute; - z-index: 9000; -} -.yui-skin-sam .yui-dt table { - margin: 0; - padding: 0; - font-family: arial; - font-size: inherit; - border-collapse: separate; - *border-collapse: collapse; - border-spacing: 0; - border: 1px solid #7f7f7f; -} -.yui-skin-sam .yui-dt thead { border-spacing: 0 } -.yui-skin-sam .yui-dt caption { - color: #000; - font-size: 85%; - font-weight: normal; - font-style: italic; - line-height: 1; - padding: 1em 0; - text-align: center; -} -.yui-skin-sam .yui-dt th { background: #d8d8da url(../images/sprite.png) repeat-x 0 0 } -.yui-skin-sam .yui-dt th, -.yui-skin-sam .yui-dt th a { - font-weight: normal; - text-decoration: none; - color: #000; - vertical-align: bottom; -} -.yui-skin-sam .yui-dt th { - margin: 0; - padding: 0; - border: 0; - border-right: 1px solid #cbcbcb; -} -.yui-skin-sam .yui-dt tr.yui-dt-first td { border-top: 1px solid #7f7f7f } -.yui-skin-sam .yui-dt th .yui-dt-liner { white-space: nowrap } -.yui-skin-sam .yui-dt-liner { - margin: 0; - padding: 0; -} -.yui-skin-sam .yui-dt-coltarget { - width: 5px; - background-color: red; -} -.yui-skin-sam .yui-dt td { - margin: 0; - padding: 0; - border: 0; - border-right: 1px solid #cbcbcb; - text-align: left; -} -.yui-skin-sam .yui-dt-list td { border-right: 0 } -.yui-skin-sam .yui-dt-resizer { width: 6px } -.yui-skin-sam .yui-dt-mask { - background-color: #000; - opacity: .25; - filter: alpha(opacity=25); -} -.yui-skin-sam .yui-dt-message { background-color: #FFF } -.yui-skin-sam .yui-dt-scrollable table { border: 0 } -.yui-skin-sam .yui-dt-scrollable .yui-dt-hd { - border-left: 1px solid #7f7f7f; - border-top: 1px solid #7f7f7f; - border-right: 1px solid #7f7f7f; -} -.yui-skin-sam .yui-dt-scrollable .yui-dt-bd { - border-left: 1px solid #7f7f7f; - border-bottom: 1px solid #7f7f7f; - border-right: 1px solid #7f7f7f; - background-color: #FFF; -} -.yui-skin-sam .yui-dt-scrollable .yui-dt-data tr.yui-dt-last td { border-bottom: 1px solid #7f7f7f } -.yui-skin-sam th.yui-dt-asc, -.yui-skin-sam th.yui-dt-desc { background: url(../images/sprite.png) repeat-x 0 -100px } -.yui-skin-sam th.yui-dt-sortable .yui-dt-label { margin-right: 10px } -.yui-skin-sam th.yui-dt-asc .yui-dt-liner { background: url(../images/dt-arrow-up.png) no-repeat right } -.yui-skin-sam th.yui-dt-desc .yui-dt-liner { background: url(../images/dt-arrow-dn.png) no-repeat right } -tbody .yui-dt-editable { cursor: pointer } -.yui-dt-editor { - text-align: left; - background-color: #f2f2f2; - border: 1px solid #808080; - padding: 6px; -} -.yui-dt-editor label { - padding-left: 4px; - padding-right: 6px; -} -.yui-dt-editor .yui-dt-button { - padding-top: 6px; - text-align: right; -} -.yui-dt-editor .yui-dt-button button { - background: url(../images/sprite.png) repeat-x 0 0; - border: 1px solid #999; - width: 4em; - height: 1.8em; - margin-left: 6px; -} -.yui-dt-editor .yui-dt-button button.yui-dt-default { - background: url(../images/sprite.png) repeat-x 0 -1400px; - background-color: #5584e0; - border: 1px solid #304369; - color: #FFF; -} -.yui-dt-editor .yui-dt-button button:hover { - background: url(../images/sprite.png) repeat-x 0 -1300px; - color: #000; -} -.yui-dt-editor .yui-dt-button button:active { - background: url(../images/sprite.png) repeat-x 0 -1700px; - color: #000; -} -.yui-skin-sam tr.yui-dt-even { background-color: #FFF } -.yui-skin-sam tr.yui-dt-odd { background-color: #edf5ff } -.yui-skin-sam tr.yui-dt-even td.yui-dt-asc, -.yui-skin-sam tr.yui-dt-even td.yui-dt-desc { background-color: #edf5ff } -.yui-skin-sam tr.yui-dt-odd td.yui-dt-asc, -.yui-skin-sam tr.yui-dt-odd td.yui-dt-desc { background-color: #dbeaff } -.yui-skin-sam .yui-dt-list tr.yui-dt-even { background-color: #FFF } -.yui-skin-sam .yui-dt-list tr.yui-dt-odd { background-color: #FFF } -.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-asc, -.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-desc { background-color: #edf5ff } -.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-asc, -.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-desc { background-color: #edf5ff } -.yui-skin-sam th.yui-dt-highlighted, -.yui-skin-sam th.yui-dt-highlighted a { background-color: #b2d2ff } -.yui-skin-sam tr.yui-dt-highlighted, -.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-asc, -.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-desc, -.yui-skin-sam tr.yui-dt-even td.yui-dt-highlighted, -.yui-skin-sam tr.yui-dt-odd td.yui-dt-highlighted { - cursor: pointer; - background-color: #b2d2ff; -} -.yui-skin-sam .yui-dt-list th.yui-dt-highlighted, -.yui-skin-sam .yui-dt-list th.yui-dt-highlighted a { background-color: #b2d2ff } -.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted, -.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-asc, -.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-desc, -.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-highlighted, -.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-highlighted { - cursor: pointer; - background-color: #b2d2ff; -} -.yui-skin-sam th.yui-dt-selected, -.yui-skin-sam th.yui-dt-selected a { background-color: #446cd7 } -.yui-skin-sam tr.yui-dt-selected td, -.yui-skin-sam tr.yui-dt-selected td.yui-dt-asc, -.yui-skin-sam tr.yui-dt-selected td.yui-dt-desc { - background-color: #426fd9; - color: #FFF; -} -.yui-skin-sam tr.yui-dt-even td.yui-dt-selected, -.yui-skin-sam tr.yui-dt-odd td.yui-dt-selected { - background-color: #446cd7; - color: #FFF; -} -.yui-skin-sam .yui-dt-list th.yui-dt-selected, -.yui-skin-sam .yui-dt-list th.yui-dt-selected a { background-color: #446cd7 } -.yui-skin-sam .yui-dt-list tr.yui-dt-selected td, -.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-asc, -.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-desc { - background-color: #426fd9; - color: #FFF; -} -.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-selected, -.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-selected { - background-color: #446cd7; - color: #FFF; -} -.yui-skin-sam .yui-dt-paginator { - display: block; - margin: 6px 0; - white-space: nowrap; -} -.yui-skin-sam .yui-dt-paginator .yui-dt-first, -.yui-skin-sam .yui-dt-paginator .yui-dt-last, -.yui-skin-sam .yui-dt-paginator .yui-dt-selected { padding: 2px 6px } -.yui-skin-sam .yui-dt-paginator a.yui-dt-first, -.yui-skin-sam .yui-dt-paginator a.yui-dt-last { text-decoration: none } -.yui-skin-sam .yui-dt-paginator .yui-dt-previous, -.yui-skin-sam .yui-dt-paginator .yui-dt-next { display: none } -.yui-skin-sam a.yui-dt-page { - border: 1px solid #cbcbcb; - padding: 2px 6px; - text-decoration: none; - background-color: #fff; -} -.yui-skin-sam .yui-dt-selected { - border: 1px solid #fff; - background-color: #fff; -} - -#content #left { - left: 0; - width: 280px; - position: absolute; -} - -#content #right { - margin: 0 60px 10px 290px; -} - -#content div.box { - clear: both; - overflow: hidden; - background: #fff; - margin: 0 0 10px; - padding: 0 0 10px; - -webkit-border-radius: 4px 4px 4px 4px; - -khtml-border-radius: 4px 4px 4px 4px; - -moz-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; - box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); -} - -#content div.box-left { - width: 49%; - clear: none; - float: left; - margin: 0 0 10px; -} - -#content div.box-right { - width: 49%; - clear: none; - float: right; - margin: 0 0 10px; -} - -#content div.box div.title { - clear: both; - overflow: hidden; - background-color: #003B76; - background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) ); - background-image: -moz-linear-gradient(top, #003b76, #00376e); - background-image: -ms-linear-gradient(top, #003b76, #00376e); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) ); - background-image: -webkit-linear-gradient(top, #003b76, #00376e); - background-image: -o-linear-gradient(top, #003b76, #00376e); - background-image: linear-gradient(top, #003b76, #00376e); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76', endColorstr='#00376e', GradientType=0 ); - margin: 0 0 20px; - padding: 0; -} - -#content div.box div.title h5 { - float: left; - border: none; - color: #fff; - text-transform: uppercase; - margin: 0; - padding: 11px 0 11px 10px; -} - -#content div.box div.title .link-white{ - color: #FFFFFF; -} - -#content div.box div.title .link-white.current{ - color: #BFE3FF; -} - -#content div.box div.title ul.links li { - list-style: none; - float: left; - margin: 0; - padding: 0; -} - -#content div.box div.title ul.links li a { - border-left: 1px solid #316293; - color: #FFFFFF; - display: block; - float: left; - font-size: 13px; - font-weight: 700; - height: 1%; - margin: 0; - padding: 11px 22px 12px; - 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 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; - border-bottom: 1px solid #DDD; - margin: 10px 20px; - padding: 0 0 15px; -} - -#content div.box p { - color: #5f5f5f; - font-size: 12px; - line-height: 150%; - margin: 0 24px 10px; - padding: 0; -} - -#content div.box blockquote { - border-left: 4px solid #DDD; - color: #5f5f5f; - font-size: 11px; - line-height: 150%; - margin: 0 34px; - padding: 0 0 0 14px; -} - -#content div.box blockquote p { - margin: 10px 0; - padding: 0; -} - -#content div.box dl { - margin: 10px 0px; -} - -#content div.box dt { - font-size: 12px; - margin: 0; -} - -#content div.box dd { - font-size: 12px; - margin: 0; - padding: 8px 0 8px 15px; -} - -#content div.box li { - font-size: 12px; - padding: 4px 0; -} - -#content div.box ul.disc,#content div.box ul.circle { - margin: 10px 24px 10px 38px; -} - -#content div.box ul.square { - margin: 10px 24px 10px 40px; -} - -#content div.box img.left { - border: none; - float: left; - margin: 10px 10px 10px 0; -} - -#content div.box img.right { - border: none; - float: right; - margin: 10px 0 10px 10px; -} - -#content div.box div.messages { - clear: both; - overflow: hidden; - margin: 0 20px; - padding: 0; -} - -#content div.box div.message { - clear: both; - overflow: hidden; - margin: 0; - padding: 5px 0; - white-space: pre-wrap; -} -#content div.box div.expand { - width: 110%; - height:14px; - font-size:10px; - text-align:center; - cursor: pointer; - color:#666; - - background:-webkit-gradient(linear,0% 50%,100% 50%,color-stop(0%,rgba(255,255,255,0)),color-stop(100%,rgba(64,96,128,0.1))); - background:-webkit-linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1)); - background:-moz-linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1)); - background:-o-linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1)); - background:-ms-linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1)); - background:linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1)); - - display: none; -} -#content div.box div.expand .expandtext { - background-color: #ffffff; - padding: 2px; - border-radius: 2px; -} - -#content div.box div.message a { - font-weight: 400 !important; -} - -#content div.box div.message div.image { - float: left; - margin: 9px 0 0 5px; - padding: 6px; -} - -#content div.box div.message div.image img { - vertical-align: middle; - margin: 0; -} - -#content div.box div.message div.text { - float: left; - margin: 0; - padding: 9px 6px; -} - -#content div.box div.message div.dismiss a { - height: 16px; - width: 16px; - display: block; - background: url("../images/icons/cross.png") no-repeat; - margin: 15px 14px 0 0; - padding: 0; -} - -#content div.box div.message div.text h1,#content div.box div.message div.text h2,#content div.box div.message div.text h3,#content div.box div.message div.text h4,#content div.box div.message div.text h5,#content div.box div.message div.text h6 - { - border: none; - margin: 0; - padding: 0; -} - -#content div.box div.message div.text span { - height: 1%; - display: block; - margin: 0; - padding: 5px 0 0; -} - -#content div.box div.message-error { - height: 1%; - clear: both; - overflow: hidden; - background: #FBE3E4; - border: 1px solid #FBC2C4; - color: #860006; -} - -#content div.box div.message-error h6 { - color: #860006; -} - -#content div.box div.message-warning { - height: 1%; - clear: both; - overflow: hidden; - background: #FFF6BF; - border: 1px solid #FFD324; - color: #5f5200; -} - -#content div.box div.message-warning h6 { - color: #5f5200; -} - -#content div.box div.message-notice { - height: 1%; - clear: both; - overflow: hidden; - background: #8FBDE0; - border: 1px solid #6BACDE; - color: #003863; -} - -#content div.box div.message-notice h6 { - color: #003863; -} - -#content div.box div.message-success { - height: 1%; - clear: both; - overflow: hidden; - background: #E6EFC2; - border: 1px solid #C6D880; - color: #4e6100; -} - -#content div.box div.message-success h6 { - color: #4e6100; -} - -#content div.box div.form div.fields div.field { - height: 1%; - border-bottom: 1px solid #DDD; - clear: both; - margin: 0; - padding: 10px 0; -} - -#content div.box div.form div.fields div.field-first { - padding: 0 0 10px; -} - -#content div.box div.form div.fields div.field-noborder { - border-bottom: 0 !important; -} - -#content div.box div.form div.fields div.field span.error-message { - height: 1%; - display: inline-block; - color: red; - margin: 8px 0 0 4px; - padding: 0; -} - -#content div.box div.form div.fields div.field span.success { - height: 1%; - display: block; - color: #316309; - margin: 8px 0 0; - padding: 0; -} - -#content div.box div.form div.fields div.field div.label { - left: 70px; - width: 155px; - position: absolute; - margin: 0; - padding: 5px 0 0 0px; -} - -#content div.box div.form div.fields div.field div.label-summary { - left: 30px; - width: 155px; - position: absolute; - margin: 0; - padding: 0px 0 0 0px; -} - -#content div.box-left div.form div.fields div.field div.label, -#content div.box-right div.form div.fields div.field div.label, -#content div.box-left div.form div.fields div.field div.label, -#content div.box-left div.form div.fields div.field div.label-summary, -#content div.box-right div.form div.fields div.field div.label-summary, -#content div.box-left div.form div.fields div.field div.label-summary - { - clear: both; - overflow: hidden; - left: 0; - width: auto; - position: relative; - margin: 0; - padding: 0 0 8px; -} - -#content div.box div.form div.fields div.field div.label-select { - padding: 5px 0 0 5px; -} - -#content div.box-left div.form div.fields div.field div.label-select, -#content div.box-right div.form div.fields div.field div.label-select - { - padding: 0 0 8px; -} - -#content div.box-left div.form div.fields div.field div.label-textarea, -#content div.box-right div.form div.fields div.field div.label-textarea - { - padding: 0 0 8px !important; -} - -#content div.box div.form div.fields div.field div.label label,div.label label - { - color: #393939; - font-weight: 700; -} -#content div.box div.form div.fields div.field div.label label,div.label-summary label - { - color: #393939; - font-weight: 700; -} -#content div.box div.form div.fields div.field div.input { - margin: 0 0 0 200px; -} - -#content div.box div.form div.fields div.field div.input.summary { - margin: 0 0 0 110px; -} -#content div.box div.form div.fields div.field div.input.summary-short { - margin: 0 0 0 110px; -} -#content div.box div.form div.fields div.field div.file { - margin: 0 0 0 200px; -} - -#content div.box-left div.form div.fields div.field div.input,#content div.box-right div.form div.fields div.field div.input - { - margin: 0 0 0 0px; -} - -#content div.box div.form div.fields div.field div.input input, -.reviewer_ac input { - background: #FFF; - border-top: 1px solid #b3b3b3; - border-left: 1px solid #b3b3b3; - border-right: 1px solid #eaeaea; - border-bottom: 1px solid #eaeaea; - color: #000; - font-size: 11px; - margin: 0; - padding: 7px 7px 6px; -} - -#content div.box div.form div.fields div.field div.input input#clone_url, -#content div.box div.form div.fields div.field div.input input#clone_url_id -{ - font-size: 16px; - padding: 2px; -} - -#content div.box div.form div.fields div.field div.file input { - background: none repeat scroll 0 0 #FFFFFF; - border-color: #B3B3B3 #EAEAEA #EAEAEA #B3B3B3; - border-style: solid; - border-width: 1px; - color: #000000; - font-size: 11px; - margin: 0; - padding: 7px 7px 6px; -} - -input.disabled { - background-color: #F5F5F5 !important; -} -#content div.box div.form div.fields div.field div.input input.small { - width: 30%; -} - -#content div.box div.form div.fields div.field div.input input.medium { - width: 55%; -} - -#content div.box div.form div.fields div.field div.input input.large { - width: 85%; -} - -#content div.box div.form div.fields div.field div.input input.date { - width: 177px; -} - -#content div.box div.form div.fields div.field div.input input.button { - background: #D4D0C8; - border-top: 1px solid #FFF; - border-left: 1px solid #FFF; - border-right: 1px solid #404040; - border-bottom: 1px solid #404040; - color: #000; - margin: 0; - padding: 4px 8px; -} - -#content div.box div.form div.fields div.field div.textarea { - border-top: 1px solid #b3b3b3; - border-left: 1px solid #b3b3b3; - border-right: 1px solid #eaeaea; - border-bottom: 1px solid #eaeaea; - margin: 0 0 0 200px; - padding: 10px; -} - -#content div.box div.form div.fields div.field div.textarea-editor { - border: 1px solid #ddd; - padding: 0; -} - -#content div.box div.form div.fields div.field div.textarea textarea { - width: 100%; - height: 220px; - overflow: hidden; - background: #FFF; - color: #000; - font-size: 11px; - outline: none; - border-width: 0; - margin: 0; - padding: 0; -} - -#content div.box-left div.form div.fields div.field div.textarea textarea,#content div.box-right div.form div.fields div.field div.textarea textarea - { - width: 100%; - height: 100px; -} - -#content div.box div.form div.fields div.field div.textarea table { - width: 100%; - border: none; - margin: 0; - padding: 0; -} - -#content div.box div.form div.fields div.field div.textarea table td { - background: #DDD; - border: none; - padding: 0; -} - -#content div.box div.form div.fields div.field div.textarea table td table - { - width: auto; - border: none; - margin: 0; - padding: 0; -} - -#content div.box div.form div.fields div.field div.textarea table td table td - { - font-size: 11px; - padding: 5px 5px 5px 0; -} - -#content div.box div.form div.fields div.field input[type=text]:focus, -#content div.box div.form div.fields div.field input[type=password]:focus, -#content div.box div.form div.fields div.field input[type=file]:focus, -#content div.box div.form div.fields div.field textarea:focus, -#content div.box div.form div.fields div.field select:focus, -.reviewer_ac input:focus - { - background: #f6f6f6; - border-color: #666; -} - -.reviewer_ac { - padding:10px -} - -div.form div.fields div.field div.button { - margin: 0; - padding: 0 0 0 8px; -} -#content div.box table.noborder { - border: 1px solid transparent; -} - -#content div.box table { - width: 100%; - border-collapse: separate; - margin: 0; - padding: 0; - border: 1px solid #eee; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -#content div.box table th { - background: #eee; - border-bottom: 1px solid #ddd; - padding: 5px 0px 5px 5px; - text-align: left; -} - -#content div.box table th.left { - text-align: left; -} - -#content div.box table th.right { - text-align: right; -} - -#content div.box table th.center { - text-align: center; -} - -#content div.box table th.selected { - vertical-align: middle; - padding: 0; -} - -#content div.box table td { - background: #fff; - border-bottom: 1px solid #cdcdcd; - vertical-align: middle; - padding: 5px; -} - -#content div.box table tr.selected td { - background: #FFC; -} - -#content div.box table td.selected { - width: 3%; - text-align: center; - vertical-align: middle; - padding: 0; -} - -#content div.box table td.action { - width: 45%; - text-align: left; -} - -#content div.box table td.date { - width: 33%; - text-align: center; -} - -#content div.box div.action { - float: right; - background: #FFF; - text-align: right; - margin: 10px 0 0; - padding: 0; -} - -#content div.box div.action select { - font-size: 11px; - margin: 0; -} - -#content div.box div.action .ui-selectmenu { - margin: 0; - padding: 0; -} - -#content div.box div.pagination { - height: 1%; - clear: both; - overflow: hidden; - margin: 10px 0 0; - padding: 0; -} - -#content div.box div.pagination ul.pager { - float: right; - text-align: right; - margin: 0; - padding: 0; -} - -#content div.box div.pagination ul.pager li { - height: 1%; - float: left; - list-style: none; - background: #ebebeb url("../images/pager.png") repeat-x; - border-top: 1px solid #dedede; - border-left: 1px solid #cfcfcf; - border-right: 1px solid #c4c4c4; - border-bottom: 1px solid #c4c4c4; - color: #4A4A4A; - font-weight: 700; - margin: 0 0 0 4px; - padding: 0; -} - -#content div.box div.pagination ul.pager li.separator { - padding: 6px; -} - -#content div.box div.pagination ul.pager li.current { - background: #b4b4b4 url("../images/pager_selected.png") repeat-x; - border-top: 1px solid #ccc; - border-left: 1px solid #bebebe; - border-right: 1px solid #b1b1b1; - border-bottom: 1px solid #afafaf; - color: #515151; - padding: 6px; -} - -#content div.box div.pagination ul.pager li a { - height: 1%; - display: block; - float: left; - color: #515151; - text-decoration: none; - margin: 0; - padding: 6px; -} - -#content div.box div.pagination ul.pager li a:hover,#content div.box div.pagination ul.pager li a:active - { - background: #b4b4b4 url("../images/pager_selected.png") repeat-x; - border-top: 1px solid #ccc; - border-left: 1px solid #bebebe; - border-right: 1px solid #b1b1b1; - border-bottom: 1px solid #afafaf; - margin: -1px; -} - -#content div.box div.pagination-wh { - height: 1%; - clear: both; - overflow: hidden; - text-align: right; - margin: 10px 0 0; - padding: 0; -} - -#content div.box div.pagination-right { - float: right; -} - -#content div.box div.pagination-wh a, -#content div.box div.pagination-wh span.pager_dotdot, -#content div.box div.pagination-wh span.yui-pg-previous, -#content div.box div.pagination-wh span.yui-pg-last, -#content div.box div.pagination-wh span.yui-pg-next, -#content div.box div.pagination-wh span.yui-pg-first - { - height: 1%; - float: left; - background: #ebebeb url("../images/pager.png") repeat-x; - border-top: 1px solid #dedede; - border-left: 1px solid #cfcfcf; - border-right: 1px solid #c4c4c4; - border-bottom: 1px solid #c4c4c4; - color: #4A4A4A; - font-weight: 700; - margin: 0 0 0 4px; - padding: 6px; -} - -#content div.box div.pagination-wh span.pager_curpage { - height: 1%; - float: left; - background: #b4b4b4 url("../images/pager_selected.png") repeat-x; - border-top: 1px solid #ccc; - border-left: 1px solid #bebebe; - border-right: 1px solid #b1b1b1; - border-bottom: 1px solid #afafaf; - color: #515151; - font-weight: 700; - margin: 0 0 0 4px; - padding: 6px; -} - -#content div.box div.pagination-wh a:hover,#content div.box div.pagination-wh a:active - { - background: #b4b4b4 url("../images/pager_selected.png") repeat-x; - border-top: 1px solid #ccc; - border-left: 1px solid #bebebe; - border-right: 1px solid #b1b1b1; - border-bottom: 1px solid #afafaf; - text-decoration: none; -} - -#content div.box div.traffic div.legend { - clear: both; - overflow: hidden; - border-bottom: 1px solid #ddd; - margin: 0 0 10px; - padding: 0 0 10px; -} - -#content div.box div.traffic div.legend h6 { - float: left; - border: none; - margin: 0; - padding: 0; -} - -#content div.box div.traffic div.legend li { - list-style: none; - float: left; - font-size: 11px; - margin: 0; - padding: 0 8px 0 4px; -} - -#content div.box div.traffic div.legend li.visits { - border-left: 12px solid #edc240; -} - -#content div.box div.traffic div.legend li.pageviews { - border-left: 12px solid #afd8f8; -} - -#content div.box div.traffic table { - width: auto; -} - -#content div.box div.traffic table td { - background: transparent; - border: none; - padding: 2px 3px 3px; -} - -#content div.box div.traffic table td.legendLabel { - padding: 0 3px 2px; -} - -#summary { - -} - -#summary .metatag { - display: inline-block; - padding: 3px 5px; - margin-bottom: 3px; - margin-right: 1px; - border-radius: 5px; -} - -#content div.box #summary p { - margin-bottom: -5px; - width: 600px; - white-space: pre-wrap; -} - -#content div.box #summary p:last-child { - margin-bottom: 9px; -} - -#content div.box #summary p:first-of-type { - margin-top: 9px; -} - - .metatag { - display: inline-block; - margin-right: 1px; - -webkit-border-radius: 4px 4px 4px 4px; - -khtml-border-radius: 4px 4px 4px 4px; - -moz-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; - - border: solid 1px #9CF; - padding: 2px 3px 2px 3px !important; - background-color: #DEF; -} - -.metatag[tag="dead"] { - background-color: #E44; -} - -.metatag[tag="stale"] { - background-color: #EA4; -} - -.metatag[tag="featured"] { - background-color: #AEA; -} - -.metatag[tag="requires"] { - background-color: #9CF; -} - -.metatag[tag="recommends"] { - background-color: #BDF; -} - -.metatag[tag="lang"] { - background-color: #FAF474; -} - -.metatag[tag="license"] { - border: solid 1px #9CF; - background-color: #DEF; - target-new: tab !important; -} -.metatag[tag="see"] { - border: solid 1px #CBD; - background-color: #EDF; -} - -a.metatag[tag="license"]:hover { - background-color: #003367; - color: #FFF; - text-decoration: none; -} - -#summary .desc { - white-space: pre; - width: 100%; -} - -#summary .repo_name { - font-size: 1.6em; - font-weight: bold; - vertical-align: baseline; - clear: right -} - -#footer { - clear: both; - overflow: hidden; - text-align: right; - margin: 0; - padding: 0 10px 4px; - margin: -10px 0 0; -} - -#footer div#footer-inner { - background-color: #003B76; - background-repeat : repeat-x; - background-image : -khtml-gradient( linear, left top, left bottom, from(#003B76), to(#00376E)); - background-image : -moz-linear-gradient(top, #003b76, #00376e); - background-image : -ms-linear-gradient( top, #003b76, #00376e); - background-image : -webkit-gradient( linear, left top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e)); - background-image : -webkit-linear-gradient( top, #003b76, #00376e)); - background-image : -o-linear-gradient( top, #003b76, #00376e)); - background-image : linear-gradient( top, #003b76, #00376e); - filter :progid : DXImageTransform.Microsoft.gradient ( startColorstr = '#003b76', endColorstr = '#00376e', GradientType = 0); - box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); - -webkit-border-radius: 4px 4px 4px 4px; - -khtml-border-radius: 4px 4px 4px 4px; - -moz-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; -} - -#footer div#footer-inner p { - padding: 15px 25px 15px 0; - color: #FFF; - font-weight: 700; -} - -#footer div#footer-inner .footer-link { - float: left; - padding-left: 10px; -} - -#footer div#footer-inner .footer-link a,#footer div#footer-inner .footer-link-right a - { - color: #FFF; -} - -#login div.title { - clear: both; - overflow: hidden; - position: relative; - background-color: #003B76; - background-repeat : repeat-x; - background-image : -khtml-gradient( linear, left top, left bottom, from(#003B76), to(#00376E)); - background-image : -moz-linear-gradient( top, #003b76, #00376e); - background-image : -ms-linear-gradient( top, #003b76, #00376e); - background-image : -webkit-gradient( linear, left top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e)); - background-image : -webkit-linear-gradient( top, #003b76, #00376e)); - background-image : -o-linear-gradient( top, #003b76, #00376e)); - background-image : linear-gradient( top, #003b76, #00376e); - filter : progid : DXImageTransform.Microsoft.gradient ( startColorstr = '#003b76', endColorstr = '#00376e', GradientType = 0); - margin: 0 auto; - padding: 0; -} - -#login div.inner { - background: #FFF url("../images/login.png") no-repeat top left; - border-top: none; - border-bottom: none; - margin: 0 auto; - padding: 20px; -} - -#login div.form div.fields div.field div.label { - width: 173px; - float: left; - text-align: right; - margin: 2px 10px 0 0; - padding: 5px 0 0 5px; -} - -#login div.form div.fields div.field div.input input { - background: #FFF; - border-top: 1px solid #b3b3b3; - border-left: 1px solid #b3b3b3; - border-right: 1px solid #eaeaea; - border-bottom: 1px solid #eaeaea; - color: #000; - font-size: 11px; - margin: 0; - padding: 7px 7px 6px; -} - -#login div.form div.fields div.buttons { - clear: both; - overflow: hidden; - border-top: 1px solid #DDD; - text-align: right; - margin: 0; - padding: 10px 0 0; -} - -#login div.form div.links { - clear: both; - overflow: hidden; - margin: 10px 0 0; - padding: 0 0 2px; -} - -.user-menu{ - margin: 0px !important; - float: left; -} - -.user-menu .container{ - padding:0px 4px 0px 4px; - margin: 0px 0px 0px 0px; -} - -.user-menu .gravatar{ - margin: 0px 0px 0px 0px; - cursor: pointer; -} -.user-menu .gravatar.enabled{ - background-color: #FDF784 !important; -} -.user-menu .gravatar:hover{ - background-color: #FDF784 !important; -} -#quick_login{ - min-height: 80px; - margin: 37px 0 0 -251px; - padding: 4px; - position: absolute; - width: 278px; - background-color: #003B76; - background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) ); - background-image: -moz-linear-gradient(top, #003b76, #00376e); - background-image: -ms-linear-gradient(top, #003b76, #00376e); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) ); - background-image: -webkit-linear-gradient(top, #003b76, #00376e); - background-image: -o-linear-gradient(top, #003b76, #00376e); - background-image: linear-gradient(top, #003b76, #00376e); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76', endColorstr='#00376e', GradientType=0 ); - - z-index: 999; - -webkit-border-radius: 0px 0px 4px 4px; - -khtml-border-radius: 0px 0px 4px 4px; - -moz-border-radius: 0px 0px 4px 4px; - border-radius: 0px 0px 4px 4px; - box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); -} -#quick_login h4{ - color: #fff; - padding: 5px 0px 5px 14px; -} - -#quick_login .password_forgoten { - padding-right: 10px; - padding-top: 0px; - text-align: left; -} - -#quick_login .password_forgoten a { - font-size: 10px; - color: #fff; -} - -#quick_login .register { - padding-right: 10px; - padding-top: 5px; - text-align: left; -} - -#quick_login .register a { - font-size: 10px; - color: #fff; -} - -#quick_login .submit { - margin: -20px 0 0 0px; - position: absolute; - right: 15px; -} - -#quick_login .links_left{ - float: left; -} -#quick_login .links_right{ - float: right; -} -#quick_login .full_name{ - color: #FFFFFF; - font-weight: bold; - padding: 3px; -} -#quick_login .big_gravatar{ - padding:4px 0px 0px 6px; -} -#quick_login .inbox{ - padding:4px 0px 0px 6px; - color: #FFFFFF; - font-weight: bold; -} -#quick_login .inbox a{ - color: #FFFFFF; -} -#quick_login .email,#quick_login .email a{ - color: #FFFFFF; - padding: 3px; - -} -#quick_login .links .logout{ - -} - -#quick_login div.form div.fields { - padding-top: 2px; - padding-left: 10px; -} - -#quick_login div.form div.fields div.field { - padding: 5px; -} - -#quick_login div.form div.fields div.field div.label label { - color: #fff; - padding-bottom: 3px; -} - -#quick_login div.form div.fields div.field div.input input { - width: 236px; - background: #FFF; - border-top: 1px solid #b3b3b3; - border-left: 1px solid #b3b3b3; - border-right: 1px solid #eaeaea; - border-bottom: 1px solid #eaeaea; - color: #000; - font-size: 11px; - margin: 0; - padding: 5px 7px 4px; -} - -#quick_login div.form div.fields div.buttons { - clear: both; - overflow: hidden; - text-align: right; - margin: 0; - padding: 5px 14px 0px 5px; -} - -#quick_login div.form div.links { - clear: both; - overflow: hidden; - margin: 10px 0 0; - padding: 0 0 2px; -} - -#quick_login ol.links{ - display: block; - font-weight: bold; - list-style: none outside none; - text-align: right; -} -#quick_login ol.links li{ - line-height: 27px; - margin: 0; - padding: 0; - color: #fff; - display: block; - float:none !important; -} - -#quick_login ol.links li a{ - color: #fff; - display: block; - padding: 2px; -} -#quick_login ol.links li a:HOVER{ - background-color: inherit !important; -} - -#register div.title { - clear: both; - overflow: hidden; - position: relative; - background-color: #003B76; - background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) ); - background-image: -moz-linear-gradient(top, #003b76, #00376e); - background-image: -ms-linear-gradient(top, #003b76, #00376e); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) ); - background-image: -webkit-linear-gradient(top, #003b76, #00376e); - background-image: -o-linear-gradient(top, #003b76, #00376e); - background-image: linear-gradient(top, #003b76, #00376e); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76', - endColorstr='#00376e', GradientType=0 ); - margin: 0 auto; - padding: 0; -} - -#register div.inner { - background: #FFF; - border-top: none; - border-bottom: none; - margin: 0 auto; - padding: 20px; -} - -#register div.form div.fields div.field div.label { - width: 135px; - float: left; - text-align: right; - margin: 2px 10px 0 0; - padding: 5px 0 0 5px; -} - -#register div.form div.fields div.field div.input input { - width: 300px; - background: #FFF; - border-top: 1px solid #b3b3b3; - border-left: 1px solid #b3b3b3; - border-right: 1px solid #eaeaea; - border-bottom: 1px solid #eaeaea; - color: #000; - font-size: 11px; - margin: 0; - padding: 7px 7px 6px; -} - -#register div.form div.fields div.buttons { - clear: both; - overflow: hidden; - border-top: 1px solid #DDD; - text-align: left; - margin: 0; - padding: 10px 0 0 150px; -} - -#register div.form div.activation_msg { - padding-top: 4px; - padding-bottom: 4px; -} - -#journal .journal_day { - font-size: 20px; - padding: 10px 0px; - border-bottom: 2px solid #DDD; - margin-left: 10px; - margin-right: 10px; -} - -#journal .journal_container { - padding: 5px; - clear: both; - margin: 0px 5px 0px 10px; -} - -#journal .journal_action_container { - padding-left: 38px; -} - -#journal .journal_user { - color: #747474; - font-size: 14px; - font-weight: bold; - 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; - padding-right: 4px; - padding-top: 3px; -} - -#journal .journal_action { - padding-top: 4px; - min-height: 2px; - float: left -} - -#journal .journal_action_params { - clear: left; - padding-left: 22px; -} - -#journal .journal_repo { - float: left; - margin-left: 6px; - padding-top: 3px; -} - -#journal .date { - clear: both; - color: #777777; - font-size: 11px; - padding-left: 22px; -} - -#journal .journal_repo .journal_repo_name { - font-weight: bold; - font-size: 1.1em; -} - -#journal .compare_view { - padding: 5px 0px 5px 0px; - width: 95px; -} - -.journal_highlight { - font-weight: bold; - padding: 0 2px; - vertical-align: bottom; -} - -.trending_language_tbl,.trending_language_tbl td { - border: 0 !important; - margin: 0 !important; - padding: 0 !important; -} - -.trending_language_tbl,.trending_language_tbl tr { - border-spacing: 1px; -} - -.trending_language { - background-color: #003367; - color: #FFF; - display: block; - min-width: 20px; - text-decoration: none; - height: 12px; - margin-bottom: 0px; - margin-left: 5px; - white-space: pre; - padding: 3px; -} - -h3.files_location { - font-size: 1.8em; - font-weight: 700; - border-bottom: none !important; - margin: 10px 0 !important; -} - -#files_data dl dt { - float: left; - width: 60px; - margin: 0 !important; - padding: 5px; -} - -#files_data dl dd { - margin: 0 !important; - padding: 5px !important; -} - -.file_history{ - padding-top:10px; - font-size:16px; -} -.file_author{ - float: left; -} - -.file_author .item{ - float:left; - padding:5px; - color: #888; -} - -.tablerow0 { - background-color: #F8F8F8; -} - -.tablerow1 { - background-color: #FFFFFF; -} - -.changeset_id { - font-family: monospace; - color: #666666; -} - -.changeset_hash { - color: #000000; -} - -#changeset_content { - border-left: 1px solid #CCC; - border-right: 1px solid #CCC; - border-bottom: 1px solid #CCC; - padding: 5px; -} - -#changeset_compare_view_content { - border: 1px solid #CCC; - padding: 5px; -} - -#changeset_content .container { - min-height: 100px; - font-size: 1.2em; - overflow: hidden; -} - -#changeset_compare_view_content .compare_view_commits { - width: auto !important; -} - -#changeset_compare_view_content .compare_view_commits td { - padding: 0px 0px 0px 12px !important; -} - -#changeset_content .container .right { - float: right; - width: 20%; - text-align: right; -} - -#changeset_content .container .left .message { - white-space: pre-wrap; -} -#changeset_content .container .left .message a:hover { - text-decoration: none; -} -.cs_files .cur_cs { - margin: 10px 2px; - font-weight: bold; -} - -.cs_files .node { - float: left; -} - -.cs_files .changes { - float: right; - color:#003367; - -} - -.cs_files .changes .added { - background-color: #BBFFBB; - float: left; - text-align: center; - font-size: 9px; - padding: 2px 0px 2px 0px; -} - -.cs_files .changes .deleted { - background-color: #FF8888; - float: left; - text-align: center; - 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 - 3px; - height: 16px; - padding-left: 20px; - margin-top: 7px; - text-align: left; -} - -.cs_files .cs_changed,.cs_files .cs_M { - background: url("../images/icons/page_white_edit.png") no-repeat scroll - 3px; - height: 16px; - padding-left: 20px; - margin-top: 7px; - text-align: left; -} - -.cs_files .cs_removed,.cs_files .cs_D { - background: url("../images/icons/page_white_delete.png") no-repeat - scroll 3px; - height: 16px; - padding-left: 20px; - margin-top: 7px; - text-align: left; -} - -#graph { - overflow: hidden; -} - -#graph_nodes { - float: left; - margin-right: 0px; - margin-top: 0px; -} - -#graph_content { - width: 80%; - float: left; -} - -#graph_content .container_header { - border-bottom: 1px solid #DDD; - padding: 10px; - height: 25px; -} - -#graph_content #rev_range_container { - float: left; - 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; - overflow: hidden; -} - -#graph_content .container .right { - float: right; - width: 23%; - text-align: right; -} - -#graph_content .container .left { - float: left; - width: 25%; - padding-left: 5px; -} - -#graph_content .container .mid { - float: left; - width: 49%; -} - - -#graph_content .container .left .date { - color: #666; - padding-left: 22px; - font-size: 10px; -} - -#graph_content .container .left .author { - height: 22px; -} - -#graph_content .container .left .author .user { - color: #444444; - float: left; - margin-left: -4px; - margin-top: 4px; -} - -#graph_content .container .mid .message { - white-space: pre-wrap; -} - -#graph_content .container .mid .message a:hover{ - text-decoration: none; -} - -.revision-link - { - color:#3F6F9F; - font-weight: bold !important; -} - -.issue-tracker-link{ - color:#3F6F9F; - font-weight: bold !important; -} - -.changeset-status-container{ - padding-right: 5px; - margin-top:1px; - float:right; - height:14px; -} -.code-header .changeset-status-container{ - float:left; - padding:2px 0px 0px 2px; -} -.changeset-status-container .changeset-status-lbl{ - color: rgb(136, 136, 136); - float: left; - padding: 3px 4px 0px 0px -} -.code-header .changeset-status-container .changeset-status-lbl{ - float: left; - padding: 0px 4px 0px 0px; -} -.changeset-status-container .changeset-status-ico{ - float: left; -} -.code-header .changeset-status-container .changeset-status-ico, .container .changeset-status-ico{ - float: left; -} -.right .comments-container{ - padding-right: 5px; - margin-top:1px; - float:right; - height:14px; -} - -.right .comments-cnt{ - float: left; - color: rgb(136, 136, 136); - padding-right: 2px; -} - -.right .changes{ - clear: both; -} - -.right .changes .changed_total { - display: block; - float: right; - text-align: center; - min-width: 45px; - cursor: pointer; - color: #444444; - background: #FEA; - -webkit-border-radius: 0px 0px 0px 6px; - -moz-border-radius: 0px 0px 0px 6px; - border-radius: 0px 0px 0px 6px; - padding: 1px; -} - -.right .changes .added,.changed,.removed { - display: block; - padding: 1px; - color: #444444; - float: right; - text-align: center; - min-width: 15px; -} - -.right .changes .added { - background: #CFC; -} - -.right .changes .changed { - background: #FEA; -} - -.right .changes .removed { - background: #FAA; -} - -.right .merge { - padding: 1px 3px 1px 3px; - background-color: #fca062; - font-size: 10px; - font-weight: bold; - color: #ffffff; - text-transform: uppercase; - white-space: nowrap; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - margin-right: 2px; -} - -.right .parent { - color: #666666; - clear:both; -} -.right .logtags{ - padding: 2px 2px 2px 2px; -} -.right .logtags .branchtag,.right .logtags .tagtag,.right .logtags .booktag{ - margin: 0px 2px; -} - -.right .logtags .branchtag, -.logtags .branchtag, -.spantag { - padding: 1px 3px 1px 3px; - background-color: #bfbfbf; - font-size: 10px; - font-weight: bold; - color: #ffffff; - text-transform: uppercase; - white-space: nowrap; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.right .logtags .branchtag a:hover,.logtags .branchtag a{ - color: #ffffff; -} -.right .logtags .branchtag a:hover,.logtags .branchtag a:hover{ - text-decoration: none; - color: #ffffff; -} -.right .logtags .tagtag,.logtags .tagtag { - padding: 1px 3px 1px 3px; - background-color: #62cffc; - font-size: 10px; - font-weight: bold; - color: #ffffff; - text-transform: uppercase; - white-space: nowrap; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.right .logtags .tagtag a:hover,.logtags .tagtag a{ - color: #ffffff; -} -.right .logtags .tagtag a:hover,.logtags .tagtag a:hover{ - text-decoration: none; - color: #ffffff; -} -.right .logbooks .bookbook,.logbooks .bookbook,.right .logtags .bookbook,.logtags .bookbook { - padding: 1px 3px 1px 3px; - background-color: #46A546; - font-size: 10px; - font-weight: bold; - color: #ffffff; - text-transform: uppercase; - white-space: nowrap; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.right .logbooks .bookbook,.logbooks .bookbook a,.right .logtags .bookbook,.logtags .bookbook a{ - color: #ffffff; -} -.right .logbooks .bookbook,.logbooks .bookbook a:hover,.right .logtags .bookbook,.logtags .bookbook a:hover{ - text-decoration: none; - color: #ffffff; -} -div.browserblock { - overflow: hidden; - border: 1px solid #ccc; - background: #f8f8f8; - font-size: 100%; - line-height: 125%; - padding: 0; - -webkit-border-radius: 6px 6px 0px 0px; - -moz-border-radius: 6px 6px 0px 0px; - border-radius: 6px 6px 0px 0px; -} - -div.browserblock .browser-header { - background: #FFF; - padding: 10px 0px 15px 0px; - width: 100%; -} - -div.browserblock .browser-nav { - float: left -} - -div.browserblock .browser-branch { - float: left; -} - -div.browserblock .browser-branch label { - color: #4A4A4A; - vertical-align: text-top; -} - -div.browserblock .browser-header span { - margin-left: 5px; - font-weight: 700; -} - -div.browserblock .browser-search { - clear: both; - padding: 8px 8px 0px 5px; - height: 20px; -} - -div.browserblock #node_filter_box { - -} - -div.browserblock .search_activate { - float: left -} - -div.browserblock .add_node { - float: left; - padding-left: 5px; -} - -div.browserblock .search_activate a:hover,div.browserblock .add_node a:hover - { - text-decoration: none !important; -} - -div.browserblock .browser-body { - background: #EEE; - border-top: 1px solid #CCC; -} - -table.code-browser { - border-collapse: collapse; - width: 100%; -} - -table.code-browser tr { - margin: 3px; -} - -table.code-browser thead th { - background-color: #EEE; - height: 20px; - font-size: 1.1em; - font-weight: 700; - text-align: left; - padding-left: 10px; -} - -table.code-browser tbody td { - padding-left: 10px; - height: 20px; -} - -table.code-browser .browser-file { - background: url("../images/icons/document_16.png") no-repeat scroll 3px; - height: 16px; - padding-left: 20px; - text-align: left; -} -.diffblock .changeset_header { - height: 16px; -} -.diffblock .changeset_file { - background: url("../images/icons/file.png") no-repeat scroll 3px; - text-align: left; - float: left; - padding: 2px 0px 2px 22px; -} -.diffblock .diff-menu-wrapper{ - float: left; -} - -.diffblock .diff-menu{ - position: absolute; - background: none repeat scroll 0 0 #FFFFFF; - border-color: #003367 #666666 #666666; - border-right: 1px solid #666666; - border-style: solid solid solid; - border-width: 1px; - box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2); - margin-top:5px; - margin-left:1px; - -} -.diffblock .diff-actions { - padding: 2px 0px 0px 2px; - float: left; -} -.diffblock .diff-menu ul li { - padding: 0px 0px 0px 0px !important; -} -.diffblock .diff-menu ul li a{ - display: block; - padding: 3px 8px 3px 8px !important; -} -.diffblock .diff-menu ul li a:hover{ - text-decoration: none; - background-color: #EEEEEE; -} -table.code-browser .browser-dir { - background: url("../images/icons/folder_16.png") no-repeat scroll 3px; - height: 16px; - padding-left: 20px; - text-align: left; -} - -table.code-browser .submodule-dir { - background: url("../images/icons/disconnect.png") no-repeat scroll 3px; - height: 16px; - padding-left: 20px; - text-align: left; -} - - -.box .search { - clear: both; - overflow: hidden; - margin: 0; - padding: 0 20px 10px; -} - -.box .search div.search_path { - background: none repeat scroll 0 0 #EEE; - border: 1px solid #CCC; - color: blue; - margin-bottom: 10px; - padding: 10px 0; -} - -.box .search div.search_path div.link { - font-weight: 700; - margin-left: 25px; -} - -.box .search div.search_path div.link a { - color: #003367; - cursor: pointer; - text-decoration: none; -} - -#path_unlock { - color: red; - font-size: 1.2em; - padding-left: 4px; -} - -.info_box span { - margin-left: 3px; - margin-right: 3px; -} - -.info_box .rev { - color: #003367; - font-size: 1.6em; - font-weight: bold; - vertical-align: sub; -} - -.info_box input#at_rev,.info_box input#size { - background: #FFF; - border-top: 1px solid #b3b3b3; - border-left: 1px solid #b3b3b3; - border-right: 1px solid #eaeaea; - border-bottom: 1px solid #eaeaea; - color: #000; - font-size: 12px; - margin: 0; - padding: 1px 5px 1px; -} - -.info_box input#view { - text-align: center; - padding: 4px 3px 2px 2px; -} - -.yui-overlay,.yui-panel-container { - visibility: hidden; - position: absolute; - z-index: 2; -} - -#tip-box { - position: absolute; - - 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; -} -.mentions-container .yui-ac-content{ - width: 100% !important; -} - -.ac { - vertical-align: top; -} - -.ac .yui-ac { - position: inherit; - font-size: 100%; -} - -.ac .perm_ac { - width: 20em; -} - -.ac .yui-ac-input { - width: 100%; -} - -.ac .yui-ac-container { - position: absolute; - top: 1.6em; - width: auto; -} - -.ac .yui-ac-content { - position: absolute; - border: 1px solid gray; - background: #fff; - z-index: 9050; - -} - -.ac .yui-ac-shadow { - position: absolute; - width: 100%; - background: #000; - -moz-opacity: 0.1px; - opacity: .10; - filter: alpha(opacity = 10); - z-index: 9049; - margin: .3em; -} - -.ac .yui-ac-content ul { - width: 100%; - margin: 0; - padding: 0; - z-index: 9050; -} - -.ac .yui-ac-content li { - cursor: default; - white-space: nowrap; - margin: 0; - padding: 2px 5px; - height: 18px; - z-index: 9050; - display: block; - width: auto !important; -} - -.ac .yui-ac-content li .ac-container-wrap{ - width: auto; -} - -.ac .yui-ac-content li.yui-ac-prehighlight { - background: #B3D4FF; - z-index: 9050; -} - -.ac .yui-ac-content li.yui-ac-highlight { - background: #556CB5; - color: #FFF; - z-index: 9050; -} -.ac .yui-ac-bd{ - z-index: 9050; -} - -.follow { - background: url("../images/icons/heart_add.png") no-repeat scroll 3px; - height: 16px; - width: 20px; - cursor: pointer; - display: block; - float: right; - margin-top: 2px; -} - -.following { - background: url("../images/icons/heart_delete.png") no-repeat scroll 3px; - height: 16px; - width: 20px; - cursor: pointer; - display: block; - float: right; - 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; -} - -.add_icon { - background: url("../images/icons/add.png") no-repeat scroll 3px; - padding-left: 20px; - padding-top: 0px; - text-align: left; -} - -.accept_icon { - background: url("../images/icons/accept.png") no-repeat scroll 3px; - padding-left: 20px; - padding-top: 0px; - text-align: left; -} - -.edit_icon { - background: url("../images/icons/application_form_edit.png") no-repeat scroll 3px; - padding-left: 20px; - padding-top: 0px; - text-align: left; -} - -.delete_icon { - background: url("../images/icons/delete.png") no-repeat scroll 3px; - padding-left: 20px; - padding-top: 0px; - text-align: left; -} - -.refresh_icon { - background: url("../images/icons/arrow_refresh.png") no-repeat scroll - 3px; - padding-left: 20px; - padding-top: 0px; - text-align: left; -} - -.pull_icon { - background: url("../images/icons/connect.png") no-repeat scroll 3px; - padding-left: 20px; - padding-top: 0px; - text-align: left; -} - -.rss_icon { - background: url("../images/icons/rss_16.png") no-repeat scroll 3px; - padding-left: 20px; - padding-top: 4px; - text-align: left; - font-size: 8px -} - -.atom_icon { - background: url("../images/icons/atom.png") no-repeat scroll 3px; - padding-left: 20px; - padding-top: 4px; - text-align: left; - font-size: 8px -} - -.archive_icon { - background: url("../images/icons/compress.png") no-repeat scroll 3px; - padding-left: 20px; - text-align: left; - padding-top: 1px; -} - -.start_following_icon { - background: url("../images/icons/heart_add.png") no-repeat scroll 3px; - padding-left: 20px; - text-align: left; - padding-top: 0px; -} - -.stop_following_icon { - background: url("../images/icons/heart_delete.png") no-repeat scroll 3px; - padding-left: 20px; - text-align: left; - padding-top: 0px; -} - -.action_button { - border: 0; - display: inline; -} - -.action_button:hover { - border: 0; - text-decoration: underline; - cursor: pointer; -} - -#switch_repos { - position: absolute; - height: 25px; - z-index: 1; -} - -#switch_repos select { - min-width: 150px; - max-height: 250px; - z-index: 1; -} - -.breadcrumbs { - border: medium none; - color: #FFF; - float: left; - text-transform: uppercase; - font-weight: 700; - font-size: 14px; - margin: 0; - padding: 11px 0 11px 10px; -} - -.breadcrumbs .hash { - text-transform: none; - color: #fff; -} - -.breadcrumbs a { - color: #FFF; -} - -.flash_msg { - -} - -.flash_msg ul { - -} - -.error_red { - color:red; -} - -.error_msg { - background-color: #c43c35; - background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35) ); - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35) ); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(top, #ee5f5b, #c43c35); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b',endColorstr='#c43c35', GradientType=0 ); - border-color: #c43c35 #c43c35 #882a25; -} - -.warning_msg { - color: #404040 !important; - background-color: #eedc94; - background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94) ); - background-image: -moz-linear-gradient(top, #fceec1, #eedc94); - background-image: -ms-linear-gradient(top, #fceec1, #eedc94); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94) ); - background-image: -webkit-linear-gradient(top, #fceec1, #eedc94); - background-image: -o-linear-gradient(top, #fceec1, #eedc94); - background-image: linear-gradient(top, #fceec1, #eedc94); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0 ); - border-color: #eedc94 #eedc94 #e4c652; -} - -.success_msg { - background-color: #57a957; - background-repeat: repeat-x !important; - background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957) ); - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -ms-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957) ); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(top, #62c462, #57a957); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0 ); - border-color: #57a957 #57a957 #3d773d; -} - -.notice_msg { - background-color: #339bb9; - background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9) ); - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -ms-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9) ); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(top, #5bc0de, #339bb9); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0 ); - border-color: #339bb9 #339bb9 #22697d; -} - -.success_msg,.error_msg,.notice_msg,.warning_msg { - font-size: 12px; - font-weight: 700; - min-height: 14px; - line-height: 14px; - margin-bottom: 10px; - margin-top: 0; - display: block; - overflow: auto; - padding: 6px 10px 6px 10px; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - position: relative; - color: #FFF; - border-width: 1px; - border-style: solid; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); -} - -#msg_close { - background: transparent url("../icons/cross_grey_small.png") no-repeat scroll 0 0; - cursor: pointer; - height: 16px; - position: absolute; - right: 5px; - top: 5px; - width: 16px; -} -div#legend_data{ - padding-left:10px; -} -div#legend_container table{ - border: none !important; -} -div#legend_container table,div#legend_choices table { - width: auto !important; -} - -table#permissions_manage { - width: 0 !important; -} - -table#permissions_manage span.private_repo_msg { - font-size: 0.8em; - opacity: 0.6px; -} - -table#permissions_manage td.private_repo_msg { - font-size: 0.8em; -} - -table#permissions_manage tr#add_perm_input td { - vertical-align: middle; -} - -div.gravatar { - background-color: #FFF; - float: left; - margin-right: 0.7em; - padding: 1px 1px 1px 1px; - line-height:0; - -webkit-border-radius: 3px; - -khtml-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -div.gravatar img { - -webkit-border-radius: 2px; - -khtml-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; -} - -#header,#content,#footer { - min-width: 978px; -} - -#content { - clear: both; - overflow: hidden; - padding: 54px 10px 14px 10px; -} - -#content div.box div.title div.search { - - border-left: 1px solid #316293; -} - -#content div.box div.title div.search div.input input { - border: 1px solid #316293; -} - -.ui-btn{ - color: #515151; - background-color: #DADADA; - background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#F4F4F4),to(#DADADA) ); - background-image: -moz-linear-gradient(top, #F4F4F4, #DADADA); - background-image: -ms-linear-gradient(top, #F4F4F4, #DADADA); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #F4F4F4),color-stop(100%, #DADADA) ); - background-image: -webkit-linear-gradient(top, #F4F4F4, #DADADA) ); - background-image: -o-linear-gradient(top, #F4F4F4, #DADADA) ); - background-image: linear-gradient(top, #F4F4F4, #DADADA); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#F4F4F4', endColorstr='#DADADA', GradientType=0); - - border-top: 1px solid #DDD; - border-left: 1px solid #c6c6c6; - border-right: 1px solid #DDD; - border-bottom: 1px solid #c6c6c6; - color: #515151; - outline: none; - margin: 0px 3px 3px 0px; - -webkit-border-radius: 4px 4px 4px 4px !important; - -khtml-border-radius: 4px 4px 4px 4px !important; - -moz-border-radius: 4px 4px 4px 4px !important; - border-radius: 4px 4px 4px 4px !important; - cursor: pointer !important; - padding: 3px 3px 3px 3px; - background-position: 0 -15px; - -} -.ui-btn.xsmall{ - padding: 1px 2px 1px 1px; -} - -.ui-btn.large{ - padding: 6px 12px; -} - -.ui-btn.clone{ - padding: 5px 2px 6px 1px; - margin: 0px -4px 3px 0px; - -webkit-border-radius: 4px 0px 0px 4px !important; - -khtml-border-radius: 4px 0px 0px 4px !important; - -moz-border-radius: 4px 0px 0px 4px !important; - border-radius: 4px 0px 0px 4px !important; - width: 100px; - text-align: center; - float: left; - position: absolute; -} -.ui-btn:focus { - outline: none; -} -.ui-btn:hover{ - background-position: 0 0px; - text-decoration: none; - color: #515151; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25), 0 0 3px #FFFFFF !important; -} - -.ui-btn.red{ - color:#fff; - background-color: #c43c35; - background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35)); - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(top, #ee5f5b, #c43c35); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); - border-color: #c43c35 #c43c35 #882a25; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); -} - - -.ui-btn.blue{ - color:#fff; - background-color: #339bb9; - background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9)); - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -ms-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(top, #5bc0de, #339bb9); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0); - border-color: #339bb9 #339bb9 #22697d; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); -} - -.ui-btn.green{ - background-color: #57a957; - background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957)); - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -ms-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(top, #62c462, #57a957); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); - border-color: #57a957 #57a957 #3d773d; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); -} - -.ui-btn.blue.hidden{ - display: none; -} - -.ui-btn.active{ - font-weight: bold; -} - -ins,div.options a:hover { - text-decoration: none; -} - -img, -#header #header-inner #quick li a:hover span.normal, -#header #header-inner #quick li ul li.last, -#content div.box div.form div.fields div.field div.textarea table td table td a, -#clone_url, -#clone_url_id -{ - border: none; -} - -img.icon,.right .merge img { - vertical-align: bottom; -} - -#header ul#logged-user,#content div.box div.title ul.links, -#content div.box div.message div.dismiss, -#content div.box div.traffic div.legend ul - { - float: right; - margin: 0; - padding: 0; -} - -#header #header-inner #home,#header #header-inner #logo, -#content div.box ul.left,#content div.box ol.left, -#content div.box div.pagination-left,div#commit_history, -div#legend_data,div#legend_container,div#legend_choices - { - float: left; -} - -#header #header-inner #quick li:hover ul ul, -#header #header-inner #quick li:hover ul ul ul, -#header #header-inner #quick li:hover ul ul ul ul, -#content #left #menu ul.closed,#content #left #menu li ul.collapsed,.yui-tt-shadow - { - display: none; -} - -#header #header-inner #quick li:hover ul,#header #header-inner #quick li li:hover ul,#header #header-inner #quick li li li:hover ul,#header #header-inner #quick li li li li:hover ul,#content #left #menu ul.opened,#content #left #menu li ul.expanded - { - display: block; -} - -#content div.graph { - padding: 0 10px 10px; -} - -#content div.box div.title ul.links li a:hover,#content div.box div.title ul.links li.ui-tabs-selected a - { - color: #bfe3ff; -} - -#content div.box ol.lower-roman,#content div.box ol.upper-roman,#content div.box ol.lower-alpha,#content div.box ol.upper-alpha,#content div.box ol.decimal - { - margin: 10px 24px 10px 44px; -} - -#content div.box div.form,#content div.box div.table,#content div.box div.traffic - { - clear: both; - overflow: hidden; - margin: 0; - padding: 0 20px 10px; -} - -#content div.box div.form div.fields,#login div.form,#login div.form div.fields,#register div.form,#register div.form div.fields - { - clear: both; - overflow: hidden; - margin: 0; - padding: 0; -} - -#content div.box div.form div.fields div.field div.label span,#login div.form div.fields div.field div.label span,#register div.form div.fields div.field div.label span - { - height: 1%; - display: block; - color: #363636; - margin: 0; - padding: 2px 0 0; -} - -#content div.box div.form div.fields div.field div.input input.error,#login div.form div.fields div.field div.input input.error,#register div.form div.fields div.field div.input input.error - { - background: #FBE3E4; - border-top: 1px solid #e1b2b3; - border-left: 1px solid #e1b2b3; - border-right: 1px solid #FBC2C4; - border-bottom: 1px solid #FBC2C4; -} - -#content div.box div.form div.fields div.field div.input input.success,#login div.form div.fields div.field div.input input.success,#register div.form div.fields div.field div.input input.success - { - background: #E6EFC2; - border-top: 1px solid #cebb98; - border-left: 1px solid #cebb98; - border-right: 1px solid #c6d880; - border-bottom: 1px solid #c6d880; -} - -#content div.box-left div.form div.fields div.field div.textarea,#content div.box-right div.form div.fields div.field div.textarea,#content div.box div.form div.fields div.field div.select select,#content div.box table th.selected input,#content div.box table td.selected input - { - margin: 0; -} - -#content div.box-left div.form div.fields div.field div.select,#content div.box-left div.form div.fields div.field div.checkboxes,#content div.box-left div.form div.fields div.field div.radios,#content div.box-right div.form div.fields div.field div.select,#content div.box-right div.form div.fields div.field div.checkboxes,#content div.box-right div.form div.fields div.field div.radios - { - margin: 0 0 0 0px !important; - padding: 0; -} - -#content div.box div.form div.fields div.field div.select,#content div.box div.form div.fields div.field div.checkboxes,#content div.box div.form div.fields div.field div.radios - { - margin: 0 0 0 200px; - padding: 0; -} - -#content div.box div.form div.fields div.field div.select a:hover,#content div.box div.form div.fields div.field div.select a.ui-selectmenu:hover,#content div.box div.action a:hover - { - color: #000; - text-decoration: none; -} - -#content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus,#content div.box div.action a.ui-selectmenu-focus - { - border: 1px solid #666; -} - -#content div.box div.form div.fields div.field div.checkboxes div.checkbox,#content div.box div.form div.fields div.field div.radios div.radio - { - clear: both; - overflow: hidden; - margin: 0; - padding: 8px 0 2px; -} - -#content div.box div.form div.fields div.field div.checkboxes div.checkbox input,#content div.box div.form div.fields div.field div.radios div.radio input - { - float: left; - margin: 0; -} - -#content div.box div.form div.fields div.field div.checkboxes div.checkbox label,#content div.box div.form div.fields div.field div.radios div.radio label - { - height: 1%; - display: block; - float: left; - margin: 2px 0 0 4px; -} - -div.form div.fields div.field div.button input, -#content div.box div.form div.fields div.buttons input -div.form div.fields div.buttons input, -#content div.box div.action div.button input { - /*color: #000;*/ - font-size: 11px; - font-weight: 700; - margin: 0; -} - -input.ui-button { - background: #e5e3e3 url("../images/button.png") repeat-x; - border-top: 1px solid #DDD; - border-left: 1px solid #c6c6c6; - border-right: 1px solid #DDD; - border-bottom: 1px solid #c6c6c6; - color: #515151 !important; - outline: none; - margin: 0; - padding: 6px 12px; - -webkit-border-radius: 4px 4px 4px 4px; - -khtml-border-radius: 4px 4px 4px 4px; - -moz-border-radius: 4px 4px 4px 4px; - border-radius: 4px 4px 4px 4px; - box-shadow: 0 1px 0 #ececec; - cursor: pointer; -} - -input.ui-button:hover { - background: #b4b4b4 url("../images/button_selected.png") repeat-x; - border-top: 1px solid #ccc; - border-left: 1px solid #bebebe; - border-right: 1px solid #b1b1b1; - border-bottom: 1px solid #afafaf; -} - -div.form div.fields div.field div.highlight,#content div.box div.form div.fields div.buttons div.highlight - { - display: inline; -} - -#content div.box div.form div.fields div.buttons,div.form div.fields div.buttons - { - margin: 10px 0 0 200px; - padding: 0; -} - -#content div.box-left div.form div.fields div.buttons,#content div.box-right div.form div.fields div.buttons,div.box-left div.form div.fields div.buttons,div.box-right div.form div.fields div.buttons - { - margin: 10px 0 0; -} - -#content div.box table td.user,#content div.box table td.address { - width: 10%; - text-align: center; -} - -#content div.box div.action div.button,#login div.form div.fields div.field div.input div.link,#register div.form div.fields div.field div.input div.link - { - text-align: right; - margin: 6px 0 0; - padding: 0; -} - -#content div.box div.action div.button input.ui-state-hover,#login div.form div.fields div.buttons input.ui-state-hover,#register div.form div.fields div.buttons input.ui-state-hover - { - background: #b4b4b4 url("../images/button_selected.png") repeat-x; - border-top: 1px solid #ccc; - border-left: 1px solid #bebebe; - border-right: 1px solid #b1b1b1; - border-bottom: 1px solid #afafaf; - color: #515151; - margin: 0; - padding: 6px 12px; -} - -#content div.box div.pagination div.results,#content div.box div.pagination-wh div.results - { - text-align: left; - float: left; - margin: 0; - padding: 0; -} - -#content div.box div.pagination div.results span,#content div.box div.pagination-wh div.results span - { - height: 1%; - display: block; - float: left; - background: #ebebeb url("../images/pager.png") repeat-x; - border-top: 1px solid #dedede; - border-left: 1px solid #cfcfcf; - border-right: 1px solid #c4c4c4; - border-bottom: 1px solid #c4c4c4; - color: #4A4A4A; - font-weight: 700; - margin: 0; - padding: 6px 8px; -} - -#content div.box div.pagination ul.pager li.disabled,#content div.box div.pagination-wh a.disabled - { - color: #B4B4B4; - padding: 6px; -} - -#login,#register { - width: 520px; - margin: 10% auto 0; - padding: 0; -} - -#login div.color,#register div.color { - clear: both; - overflow: hidden; - background: #FFF; - margin: 10px auto 0; - padding: 3px 3px 3px 0; -} - -#login div.color a,#register div.color a { - width: 20px; - height: 20px; - display: block; - float: left; - margin: 0 0 0 3px; - padding: 0; -} - -#login div.title h5,#register div.title h5 { - color: #fff; - margin: 10px; - padding: 0; -} - -#login div.form div.fields div.field,#register div.form div.fields div.field - { - clear: both; - overflow: hidden; - margin: 0; - padding: 0 0 10px; -} - -#login div.form div.fields div.field span.error-message,#register div.form div.fields div.field span.error-message - { - height: 1%; - display: block; - color: red; - margin: 8px 0 0; - padding: 0; - max-width: 320px; -} - -#login div.form div.fields div.field div.label label,#register div.form div.fields div.field div.label label - { - color: #000; - font-weight: 700; -} - -#login div.form div.fields div.field div.input,#register div.form div.fields div.field div.input - { - float: left; - margin: 0; - padding: 0; -} - -#login div.form div.fields div.field div.checkbox,#register div.form div.fields div.field div.checkbox - { - margin: 0 0 0 184px; - padding: 0; -} - -#login div.form div.fields div.field div.checkbox label,#register div.form div.fields div.field div.checkbox label - { - color: #565656; - font-weight: 700; -} - -#login div.form div.fields div.buttons input,#register div.form div.fields div.buttons input - { - color: #000; - font-size: 1em; - font-weight: 700; - margin: 0; -} - -#changeset_content .container .wrapper,#graph_content .container .wrapper - { - width: 600px; -} - -#changeset_content .container .left { - float: left; - width: 75%; - padding-left: 5px; -} - -#changeset_content .container .left .date,.ac .match { - font-weight: 700; - padding-top: 5px; - padding-bottom: 5px; -} - -div#legend_container table td,div#legend_choices table td { - border: none !important; - height: 20px !important; - padding: 0 !important; -} - -.q_filter_box { - -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - border: 0 none; - color: #AAAAAA; - margin-bottom: -4px; - margin-top: -4px; - padding-left: 3px; -} - -#node_filter { - border: 0px solid #545454; - color: #AAAAAA; - padding-left: 3px; -} - - -.group_members_wrap{ - min-height: 85px; - padding-left: 20px; -} - -.group_members .group_member{ - height: 30px; - padding:0px 0px 0px 0px; -} - -.reviewers_member{ - height: 15px; - padding:0px 0px 0px 10px; -} - -.emails_wrap{ - padding: 0px 20px; -} - -.emails_wrap .email_entry{ - height: 30px; - padding:0px 0px 0px 10px; -} -.emails_wrap .email_entry .email{ - float: left -} -.emails_wrap .email_entry .email_action{ - float: left -} - -.ips_wrap{ - padding: 0px 20px; -} - -.ips_wrap .ip_entry{ - height: 30px; - padding:0px 0px 0px 10px; -} -.ips_wrap .ip_entry .ip{ - float: left -} -.ips_wrap .ip_entry .ip_action{ - float: left -} - - -/*README STYLE*/ - -div.readme { - padding:0px; -} - -div.readme h2 { - font-weight: normal; -} - -div.readme .readme_box { - background-color: #fafafa; -} - -div.readme .readme_box { -clear:both; -overflow:hidden; -margin:0; -padding:0 20px 10px; -} - -div.readme .readme_box h1, div.readme .readme_box h2, div.readme .readme_box h3, div.readme .readme_box h4, div.readme .readme_box h5, div.readme .readme_box h6 { -border-bottom: 0 !important; -margin: 0 !important; -padding: 0 !important; -line-height: 1.5em !important; -} - - -div.readme .readme_box h1:first-child { -padding-top: .25em !important; -} - -div.readme .readme_box h2, div.readme .readme_box h3 { -margin: 1em 0 !important; -} - -div.readme .readme_box h2 { -margin-top: 1.5em !important; -border-top: 4px solid #e0e0e0 !important; -padding-top: .5em !important; -} - -div.readme .readme_box p { -color: black !important; -margin: 1em 0 !important; -line-height: 1.5em !important; -} - -div.readme .readme_box ul { -list-style: disc !important; -margin: 1em 0 1em 2em !important; -} - -div.readme .readme_box ol { -list-style: decimal; -margin: 1em 0 1em 2em !important; -} - -div.readme .readme_box pre, code { -font: 12px "Bitstream Vera Sans Mono","Courier",monospace; -} - -div.readme .readme_box code { - font-size: 12px !important; - background-color: ghostWhite !important; - color: #444 !important; - padding: 0 .2em !important; - border: 1px solid #dedede !important; -} - -div.readme .readme_box pre code { - padding: 0 !important; - font-size: 12px !important; - background-color: #eee !important; - border: none !important; -} - -div.readme .readme_box pre { - margin: 1em 0; - font-size: 12px; - background-color: #eee; - border: 1px solid #ddd; - padding: 5px; - color: #444; - overflow: auto; - -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -div.readme .readme_box table { - display: table; - border-collapse: separate; - border-spacing: 2px; - border-color: gray; - width: auto !important; -} - - -/** RST STYLE **/ - - -div.rst-block { - padding:0px; -} - -div.rst-block h2 { - font-weight: normal; -} - -div.rst-block { - background-color: #fafafa; -} - -div.rst-block { -clear:both; -overflow:hidden; -margin:0; -padding:0 20px 10px; -} - -div.rst-block h1, div.rst-block h2, div.rst-block h3, div.rst-block h4, div.rst-block h5, div.rst-block h6 { -border-bottom: 0 !important; -margin: 0 !important; -padding: 0 !important; -line-height: 1.5em !important; -} - - -div.rst-block h1:first-child { -padding-top: .25em !important; -} - -div.rst-block h2, div.rst-block h3 { -margin: 1em 0 !important; -} - -div.rst-block h2 { -margin-top: 1.5em !important; -border-top: 4px solid #e0e0e0 !important; -padding-top: .5em !important; -} - -div.rst-block p { -color: black !important; -margin: 1em 0 !important; -line-height: 1.5em !important; -} - -div.rst-block ul { -list-style: disc !important; -margin: 1em 0 1em 2em !important; -} - -div.rst-block ol { -list-style: decimal; -margin: 1em 0 1em 2em !important; -} - -div.rst-block pre, code { -font: 12px "Bitstream Vera Sans Mono","Courier",monospace; -} - -div.rst-block code { - font-size: 12px !important; - background-color: ghostWhite !important; - color: #444 !important; - padding: 0 .2em !important; - border: 1px solid #dedede !important; -} - -div.rst-block pre code { - padding: 0 !important; - font-size: 12px !important; - background-color: #eee !important; - border: none !important; -} - -div.rst-block pre { - margin: 1em 0; - font-size: 12px; - background-color: #eee; - border: 1px solid #ddd; - padding: 5px; - color: #444; - overflow: auto; - -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - - -/** comment main **/ -.comments { - padding:10px 20px; -} - -.comments .comment { - border: 1px solid #ddd; - margin-top: 10px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.comments .comment .meta { - background: #f8f8f8; - padding: 4px; - border-bottom: 1px solid #ddd; - height: 18px; -} - -.comments .comment .meta img { - vertical-align: middle; -} - -.comments .comment .meta .user { - font-weight: bold; - float: left; - padding: 4px 2px 2px 2px; -} - -.comments .comment .meta .date { - float: left; - padding:4px 4px 0px 4px; -} - -.comments .comment .text { - background-color: #FAFAFA; -} -.comment .text div.rst-block p { - margin: 0.5em 0px !important; -} - -.comments .comments-number{ - padding:0px 0px 10px 0px; - font-weight: bold; - color: #666; - font-size: 16px; -} - -/** comment form **/ - -.status-block{ - height:80px; - clear:both -} - -.comment-form .clearfix{ - background: #EEE; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - padding: 10px; -} - -div.comment-form { - margin-top: 20px; -} - -.comment-form strong { - display: block; - margin-bottom: 15px; -} - -.comment-form textarea { - width: 100%; - height: 100px; - font-family: 'Monaco', 'Courier', 'Courier New', monospace; -} - -form.comment-form { - margin-top: 10px; - margin-left: 10px; -} - -.comment-form-submit { - margin-top: 5px; - margin-left: 525px; -} - -.file-comments { - display: none; -} - -.comment-form .comment { - margin-left: 10px; -} - -.comment-form .comment-help{ - padding: 0px 0px 5px 0px; - color: #666; -} - -.comment-form .comment-button{ - padding-top:5px; -} - -.add-another-button { - margin-left: 10px; - margin-top: 10px; - margin-bottom: 10px; -} - -.comment .buttons { - float: right; - padding:2px 2px 0px 0px; -} - - -.show-inline-comments{ - position: relative; - top:1px -} - -/** comment inline form **/ -.comment-inline-form .overlay{ - display: none; -} -.comment-inline-form .overlay.submitting{ - display:block; - background: none repeat scroll 0 0 white; - font-size: 16px; - opacity: 0.5; - position: absolute; - text-align: center; - vertical-align: top; - -} -.comment-inline-form .overlay.submitting .overlay-text{ - width:100%; - margin-top:5%; -} - -.comment-inline-form .clearfix{ - background: #EEE; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - padding: 5px; -} - -div.comment-inline-form { - padding:4px 0px 6px 0px; -} - - -tr.hl-comment{ -/* - background-color: #FFFFCC !important; -*/ -} - -/* -tr.hl-comment pre { - border-top: 2px solid #FFEE33; - border-left: 2px solid #FFEE33; - border-right: 2px solid #FFEE33; -} -*/ - -.comment-inline-form strong { - display: block; - margin-bottom: 15px; -} - -.comment-inline-form textarea { - width: 100%; - height: 100px; - font-family: 'Monaco', 'Courier', 'Courier New', monospace; -} - -form.comment-inline-form { - margin-top: 10px; - margin-left: 10px; -} - -.comment-inline-form-submit { - margin-top: 5px; - margin-left: 525px; -} - -.file-comments { - display: none; -} - -.comment-inline-form .comment { - margin-left: 10px; -} - -.comment-inline-form .comment-help{ - padding: 0px 0px 2px 0px; - color: #666666; - font-size: 10px; -} - -.comment-inline-form .comment-button{ - padding-top:5px; -} - -/** comment inline **/ -.inline-comments { - padding:10px 20px; -} - -.inline-comments div.rst-block { - clear:both; - overflow:hidden; - margin:0; - padding:0 20px 0px; -} -.inline-comments .comment { - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - margin: 3px 3px 5px 5px; - background-color: #FAFAFA; -} -.inline-comments .add-comment { - padding: 2px 4px 8px 5px; -} - -.inline-comments .comment-wrapp{ - padding:1px; -} -.inline-comments .comment .meta { - background: #f8f8f8; - padding: 4px; - border-bottom: 1px solid #ddd; - height: 20px; -} - -.inline-comments .comment .meta img { - vertical-align: middle; -} - -.inline-comments .comment .meta .user { - font-weight: bold; - float:left; - padding: 3px; -} - -.inline-comments .comment .meta .date { - float:left; - padding: 3px; -} - -.inline-comments .comment .text { - background-color: #FAFAFA; -} - -.inline-comments .comments-number{ - padding:0px 0px 10px 0px; - font-weight: bold; - color: #666; - font-size: 16px; -} -.inline-comments-button .add-comment{ - margin:2px 0px 8px 5px !important -} - - -.notification-paginator{ - padding: 0px 0px 4px 16px; - float: left; -} - -.notifications{ - border-radius: 4px 4px 4px 4px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - float: right; - margin: 20px 0px 0px 0px; - position: absolute; - text-align: center; - width: 26px; - z-index: 1000; -} -.notifications a{ - color:#888 !important; - display: block; - font-size: 10px; - background-color: #DEDEDE !important; - border-radius: 2px !important; - -webkit-border-radius: 2px !important; - -moz-border-radius: 2px !important; -} -.notifications a:hover{ - text-decoration: none !important; - background-color: #EEEFFF !important; -} -.notification-header{ - padding-top:6px; -} -.notification-header .desc{ - font-size: 16px; - height: 24px; - float: left -} -.notification-list .container.unread{ - background: none repeat scroll 0 0 rgba(255, 255, 180, 0.6); -} -.notification-header .gravatar{ - background: none repeat scroll 0 0 transparent; - padding: 0px 0px 0px 8px; -} -.notification-list .container .notification-header .desc{ - font-weight: bold; - font-size: 17px; -} -.notification-table{ - border: 1px solid #ccc; - -webkit-border-radius: 6px 6px 6px 6px; - -moz-border-radius: 6px 6px 6px 6px; - border-radius: 6px 6px 6px 6px; - clear: both; - margin: 0px 20px 0px 20px; -} -.notification-header .delete-notifications{ - float: right; - padding-top: 8px; - cursor: pointer; -} -.notification-header .read-notifications{ - float: right; - padding-top: 8px; - cursor: pointer; -} -.notification-subject{ - clear:both; - border-bottom: 1px solid #eee; - padding:5px 0px 5px 38px; -} - -.notification-body{ - clear:both; - margin: 34px 2px 2px 8px -} - -/**** -PULL REQUESTS -*****/ -.pullrequests_section_head { - padding:10px 10px 10px 0px; - font-size:16px; - font-weight: bold; -} - -/**** - PERMS -*****/ -#perms .perms_section_head { - padding:10px 10px 10px 0px; - font-size:16px; - font-weight: bold; -} - -#perms .perm_tag{ - padding: 1px 3px 1px 3px; - font-size: 10px; - font-weight: bold; - text-transform: uppercase; - white-space: nowrap; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -#perms .perm_tag.admin{ - background-color: #B94A48; - color: #ffffff; -} - -#perms .perm_tag.write{ - background-color: #B94A48; - color: #ffffff; -} - -#perms .perm_tag.read{ - background-color: #468847; - color: #ffffff; -} - -#perms .perm_tag.none{ - background-color: #bfbfbf; - color: #ffffff; -} - -.perm-gravatar{ - vertical-align:middle; - padding:2px; -} -.perm-gravatar-ac{ - vertical-align:middle; - padding:2px; - width: 14px; - height: 14px; -} - -/***************************************************************************** - DIFFS CSS -******************************************************************************/ - -div.diffblock { - overflow: auto; - padding: 0px; - border: 1px solid #ccc; - background: #f8f8f8; - font-size: 100%; - line-height: 100%; - /* new */ - line-height: 125%; - -webkit-border-radius: 6px 6px 0px 0px; - -moz-border-radius: 6px 6px 0px 0px; - border-radius: 6px 6px 0px 0px; -} -div.diffblock.margined{ - margin: 0px 20px 0px 20px; -} -div.diffblock .code-header{ - border-bottom: 1px solid #CCCCCC; - background: #EEEEEE; - 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; -} -div.diffblock .code-header-title{ - padding: 0px 0px 10px 5px !important; - margin: 0 !important; -} -div.diffblock .code-header .hash{ - float: left; - padding: 2px 0 0 2px; -} -div.diffblock .code-header .date{ - float:left; - text-transform: uppercase; - padding: 2px 0px 0px 2px; -} -div.diffblock .code-header div{ - margin-left:4px; - 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; -} -div.diffblock pre.raw{ - background: #FFFFFF; - color:#000000; -} -table.code-difftable{ - border-collapse: collapse; - width: 99%; -} -table.code-difftable td { - padding: 0 !important; - background: none !important; - border:0 !important; - vertical-align: none !important; -} -table.code-difftable .context{ - background:none repeat scroll 0 0 #DDE7EF; -} -table.code-difftable .add{ - background:none repeat scroll 0 0 #DDFFDD; -} -table.code-difftable .add ins{ - background:none repeat scroll 0 0 #AAFFAA; - text-decoration:none; -} -table.code-difftable .del{ - background:none repeat scroll 0 0 #FFDDDD; -} -table.code-difftable .del del{ - background:none repeat scroll 0 0 #FFAAAA; - text-decoration:none; -} - -/** LINE NUMBERS **/ -table.code-difftable .lineno{ - - padding-left:2px; - padding-right:2px; - text-align:right; - width:32px; - -moz-user-select:none; - -webkit-user-select: none; - border-right: 1px solid #CCC !important; - border-left: 0px solid #CCC !important; - border-top: 0px solid #CCC !important; - border-bottom: none !important; - vertical-align: middle !important; - -} -table.code-difftable .lineno.new { -} -table.code-difftable .lineno.old { -} -table.code-difftable .lineno a{ - color:#747474 !important; - font:11px "Bitstream Vera Sans Mono",Monaco,"Courier New",Courier,monospace !important; - letter-spacing:-1px; - text-align:right; - padding-right: 2px; - cursor: pointer; - display: block; - width: 32px; -} - -table.code-difftable .lineno-inline{ - background:none repeat scroll 0 0 #FFF !important; - padding-left:2px; - padding-right:2px; - text-align:right; - width:30px; - -moz-user-select:none; - -webkit-user-select: none; -} - -/** CODE **/ -table.code-difftable .code { - display: block; - width: 100%; -} -table.code-difftable .code td{ - margin:0; - padding:0; -} -table.code-difftable .code pre{ - margin:0; - padding:0; - height: 17px; - line-height: 17px; -} - - -.diffblock.margined.comm .line .code:hover{ - background-color:#FFFFCC !important; - cursor: pointer !important; - background-image:url("../images/icons/comment_add.png") !important; - background-repeat:no-repeat !important; - background-position: right !important; - background-position: 0% 50% !important; -} -.diffblock.margined.comm .line .code.no-comment:hover{ - background-image: none !important; - cursor: auto !important; - background-color: inherit !important; - -} +html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td { + border: 0; + outline: 0; + font-size: 100%; + vertical-align: baseline; + background: transparent; + margin: 0; + padding: 0; +} + +body { + line-height: 1; + height: 100%; + background: url("../images/background.png") repeat scroll 0 0 #B0B0B0; + font-family: Lucida Grande, Verdana, Lucida Sans Regular, + Lucida Sans Unicode, Arial, sans-serif; font-size : 12px; + color: #000; + margin: 0; + padding: 0; + font-size: 12px; +} + +ol, ul { + list-style: none; +} + +blockquote, q { + quotes: none; +} + +blockquote:before, blockquote:after, q:before, q:after { + content: none; +} + +:focus { + outline: 0; +} + +del { + text-decoration: line-through; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +html { + height: 100%; +} + +a { + color: #003367; + text-decoration: none; + cursor: pointer; +} + +a:hover { + color: #316293; + text-decoration: underline; +} + +h1, h2, h3, h4, h5, h6, +div.h1, div.h2, div.h3, div.h4, div.h5, div.h6 { + color: #292929; + font-weight: 700; +} + +h1, div.h1 { + font-size: 22px; +} + +h2, div.h2 { + font-size: 20px; +} + +h3, div.h3 { + font-size: 18px; +} + +h4, div.h4 { + font-size: 16px; +} + +h5, div.h5 { + font-size: 14px; +} + +h6, div.h6 { + font-size: 11px; +} + +ul.circle { + list-style-type: circle; +} + +ul.disc { + list-style-type: disc; +} + +ul.square { + list-style-type: square; +} + +ol.lower-roman { + list-style-type: lower-roman; +} + +ol.upper-roman { + list-style-type: upper-roman; +} + +ol.lower-alpha { + list-style-type: lower-alpha; +} + +ol.upper-alpha { + list-style-type: upper-alpha; +} + +ol.decimal { + list-style-type: decimal; +} + +div.color { + clear: both; + overflow: hidden; + position: absolute; + background: #FFF; + margin: 7px 0 0 60px; + padding: 1px 1px 1px 0; +} + +div.color a { + width: 15px; + height: 15px; + display: block; + float: left; + margin: 0 0 0 1px; + padding: 0; +} + +div.options { + clear: both; + overflow: hidden; + position: absolute; + background: #FFF; + margin: 7px 0 0 162px; + padding: 0; +} + +div.options a { + height: 1%; + display: block; + text-decoration: none; + margin: 0; + padding: 3px 8px; +} + +.top-left-rounded-corner { + -webkit-border-top-left-radius: 8px; + -khtml-border-radius-topleft: 8px; + border-top-left-radius: 8px; +} + +.top-right-rounded-corner { + -webkit-border-top-right-radius: 8px; + -khtml-border-radius-topright: 8px; + border-top-right-radius: 8px; +} + +.bottom-left-rounded-corner { + -webkit-border-bottom-left-radius: 8px; + -khtml-border-radius-bottomleft: 8px; + border-bottom-left-radius: 8px; +} + +.bottom-right-rounded-corner { + -webkit-border-bottom-right-radius: 8px; + -khtml-border-radius-bottomright: 8px; + border-bottom-right-radius: 8px; +} + +.top-left-rounded-corner-mid { + -webkit-border-top-left-radius: 4px; + -khtml-border-radius-topleft: 4px; + border-top-left-radius: 4px; +} + +.top-right-rounded-corner-mid { + -webkit-border-top-right-radius: 4px; + -khtml-border-radius-topright: 4px; + border-top-right-radius: 4px; +} + +.bottom-left-rounded-corner-mid { + -webkit-border-bottom-left-radius: 4px; + -khtml-border-radius-bottomleft: 4px; + border-bottom-left-radius: 4px; +} + +.bottom-right-rounded-corner-mid { + -webkit-border-bottom-right-radius: 4px; + -khtml-border-radius-bottomright: 4px; + border-bottom-right-radius: 4px; +} + +.help-block { + color: #999999; + display: block; + margin-bottom: 0; + margin-top: 5px; +} + +.empty_data { + color: #B9B9B9; +} + +a.permalink { + visibility: hidden; +} + +a.permalink:hover { + text-decoration: none; +} + +h1:hover > a.permalink, +h2:hover > a.permalink, +h3:hover > a.permalink, +h4:hover > a.permalink, +h5:hover > a.permalink, +h6:hover > a.permalink, +div:hover > a.permalink { + visibility: visible; +} + +#header { +} +#header ul#logged-user { + margin-bottom: 5px !important; + -webkit-border-radius: 0px 0px 8px 8px; + -khtml-border-radius: 0px 0px 8px 8px; + border-radius: 0px 0px 8px 8px; + height: 37px; + background-color: #003B76; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) ); + background-image: -moz-linear-gradient(top, #003b76, #00376e); + background-image: -ms-linear-gradient(top, #003b76, #00376e); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) ); + background-image: -webkit-linear-gradient(top, #003b76, #00376e); + background-image: -o-linear-gradient(top, #003b76, #00376e); + background-image: linear-gradient(to bottom, #003b76, #00376e); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',endColorstr='#00376e', GradientType=0 ); + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); +} + +#header ul#logged-user li { + list-style: none; + float: left; + margin: 8px 0 0; + padding: 4px 12px; + border-left: 1px solid #316293; +} + +#header ul#logged-user li.first { + border-left: none; + margin: 4px; +} + +#header ul#logged-user li.first div.gravatar { + margin-top: -2px; +} + +#header ul#logged-user li.first div.account { + padding-top: 4px; + float: left; +} + +#header ul#logged-user li.last { + border-right: none; +} + +#header ul#logged-user li a { + color: #fff; + font-weight: 700; + text-decoration: none; +} + +#header ul#logged-user li a:hover { + text-decoration: underline; +} + +#header ul#logged-user li.highlight a { + color: #fff; +} + +#header ul#logged-user li.highlight a:hover { + color: #FFF; +} +#header-dd { + clear: both; + position: fixed !important; + background-color: #003B76; + opacity: 0.01; + cursor: pointer; + min-height: 10px; + width: 100% !important; + -webkit-border-radius: 0px 0px 4px 4px; + -khtml-border-radius: 0px 0px 4px 4px; + border-radius: 0px 0px 4px 4px; +} + +#header-dd:hover { + opacity: 0.2; + -webkit-transition: opacity 0.5s ease-in-out; + -moz-transition: opacity 0.5s ease-in-out; + transition: opacity 0.5s ease-in-out; +} + +#header #header-inner { + min-height: 44px; + clear: both; + position: relative; + background-color: #003B76; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) ); + background-image: -moz-linear-gradient(top, #003b76, #00376e); + background-image: -ms-linear-gradient(top, #003b76, #00376e); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),color-stop(100%, #00376e) ); + background-image: -webkit-linear-gradient(top, #003b76, #00376e); + background-image: -o-linear-gradient(top, #003b76, #00376e); + background-image: linear-gradient(to bottom, #003b76, #00376e); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',endColorstr='#00376e', GradientType=0 ); + margin: 0; + padding: 0; + display: block; + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); + -webkit-border-radius: 0px 0px 4px 4px; + -khtml-border-radius: 0px 0px 4px 4px; + border-radius: 0px 0px 4px 4px; +} +#header #header-inner.hover { + width: 100% !important; + -webkit-border-radius: 0px 0px 0px 0px; + -khtml-border-radius: 0px 0px 0px 0px; + border-radius: 0px 0px 0px 0px; + position: fixed !important; + z-index: 10000; +} + +.ie7 #header #header-inner.hover, +.ie8 #header #header-inner.hover, +.ie9 #header #header-inner.hover +{ + z-index: auto !important; +} + +.header-pos-fix, .anchor { + margin-top: -46px; + padding-top: 46px; +} + +#header #header-inner #home a { + height: 40px; + width: 46px; + display: block; + background: url("../images/button_home.png"); + background-position: 0 0; + margin: 0; + padding: 0; +} + +#header #header-inner #home a:hover { + background-position: 0 -40px; +} + +#header #header-inner #logo { + float: left; + position: absolute; +} + +#header #header-inner #logo h1 { + color: #FFF; + font-size: 20px; + margin: 12px 0 0 13px; + padding: 0; +} + +#header #header-inner #logo a { + color: #fff; + text-decoration: none; +} + +#header #header-inner #logo a:hover { + color: #bfe3ff; +} + +#header #header-inner #quick { + position: relative; + float: right; + list-style-type: none; + list-style-position: outside; + margin: 4px 8px 0 0; + padding: 0; + border-radius: 4px; +} + +#header #header-inner #quick li span.short { + padding: 9px 6px 8px 6px; +} + +#header #header-inner #quick li span { + display: inline; + margin: 0; +} + +#header #header-inner #quick li span.normal { + border: none; + padding: 10px 12px 8px; +} + +#header #header-inner #quick li span.icon { + border-left: none; + padding-left: 10px; +} + +#header #header-inner #quick li span.icon_short { + top: 0; + left: 0; + border-left: none; + border-right: 1px solid #2e5c89; + padding: 8px 6px 4px; +} + +#header #header-inner #quick li span.icon img, #header #header-inner #quick li span.icon_short img { + vertical-align: middle; + margin-bottom: 2px; +} + +#header #header-inner #quick ul.repo_switcher { + max-height: 275px; + overflow-x: hidden; + overflow-y: auto; +} + +#header #header-inner #quick ul.repo_switcher li.qfilter_rs { + padding: 2px 3px; + padding-right: 17px; +} + +#header #header-inner #quick ul.repo_switcher li.qfilter_rs input { + width: 100%; + border-radius: 10px; + padding: 2px 7px; +} + +#header #header-inner #quick .repo_switcher_type { + position: absolute; + left: 0; + top: 9px; + margin: 0px 2px 0px 2px; +} + +#header #header-inner #quick li ul li a.journal, #header #header-inner #quick li ul li a.journal:hover { + background-image: url("../images/icons/book.png"); +} + +#header #header-inner #quick li ul li a.private_repo, #header #header-inner #quick li ul li a.private_repo:hover { + background-image: url("../images/icons/lock.png") +} + +#header #header-inner #quick li ul li a.public_repo, #header #header-inner #quick li ul li a.public_repo:hover { + background-image: url("../images/icons/lock_open.png"); +} + +#header #header-inner #quick li ul li a.hg, #header #header-inner #quick li ul li a.hg:hover { + background-image: url("../images/icons/hgicon.png"); + padding-left: 42px; + background-position: 20px 9px; +} + +#header #header-inner #quick li ul li a.git, #header #header-inner #quick li ul li a.git:hover { + background-image: url("../images/icons/giticon.png"); + padding-left: 42px; + background-position: 20px 9px; +} + +#header #header-inner #quick li ul li a.repos, #header #header-inner #quick li ul li a.repos:hover { + background-image: url("../images/icons/database_edit.png"); +} + +#header #header-inner #quick li ul li a.repos_groups, #header #header-inner #quick li ul li a.repos_groups:hover { + background-image: url("../images/icons/database_link.png"); +} + +#header #header-inner #quick li ul li a.users, #header #header-inner #quick li ul li a.users:hover { + background-image: url("../images/icons/user_edit.png"); +} + +#header #header-inner #quick li ul li a.groups, #header #header-inner #quick li ul li a.groups:hover { + background-image: url("../images/icons/group_edit.png"); +} + +#header #header-inner #quick li ul li a.defaults, #header #header-inner #quick li ul li a.defaults:hover { + background-image: url("../images/icons/wrench.png"); +} + +#header #header-inner #quick li ul li a.settings, #header #header-inner #quick li ul li a.settings:hover { + background-image: url("../images/icons/cog.png"); +} + +#header #header-inner #quick li ul li a.permissions, #header #header-inner #quick li ul li a.permissions:hover { + background-image: url("../images/icons/key.png"); +} + +#header #header-inner #quick li ul li a.ldap, #header #header-inner #quick li ul li a.ldap:hover { + background-image: url("../images/icons/server_key.png"); +} + +#header #header-inner #quick li ul li a.fork, #header #header-inner #quick li ul li a.fork:hover { + background-image: url("../images/icons/arrow_divide.png"); +} + +#header #header-inner #quick li ul li a.locking_add, #header #header-inner #quick li ul li a.locking_add:hover { + background-image: url("../images/icons/lock_add.png"); +} + +#header #header-inner #quick li ul li a.locking_del, #header #header-inner #quick li ul li a.locking_del:hover { + background-image: url("../images/icons/lock_delete.png"); +} + +#header #header-inner #quick li ul li a.pull_request, #header #header-inner #quick li ul li a.pull_request:hover { + background-image: url("../images/icons/arrow_join.png") ; +} + +#header #header-inner #quick li ul li a.compare_request, #header #header-inner #quick li ul li a.compare_request:hover { + background-image: url("../images/icons/arrow_inout.png"); +} + +#header #header-inner #quick li ul li a.search, #header #header-inner #quick li ul li a.search:hover { + background-image: url("../images/icons/search_16.png"); +} + +#header #header-inner #quick li ul li a.shortlog, #header #header-inner #quick li ul li a.shortlog:hover { + background-image: url("../images/icons/clock_16.png"); +} + +#header #header-inner #quick li ul li a.delete, #header #header-inner #quick li ul li a.delete:hover { + background-image: url("../images/icons/delete.png"); +} + +#header #header-inner #quick li ul li a.branches, #header #header-inner #quick li ul li a.branches:hover { + background-image: url("../images/icons/arrow_branch.png"); +} + +#header #header-inner #quick li ul li a.tags, +#header #header-inner #quick li ul li a.tags:hover { + background: #FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px; + width: 167px; + margin: 0; + padding: 12px 9px 7px 24px; +} + +#header #header-inner #quick li ul li a.bookmarks, +#header #header-inner #quick li ul li a.bookmarks:hover { + background: #FFF url("../images/icons/tag_green.png") no-repeat 4px 9px; + width: 167px; + margin: 0; + padding: 12px 9px 7px 24px; +} + +#header #header-inner #quick li ul li a.admin, +#header #header-inner #quick li ul li a.admin:hover { + background: #FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px; + width: 167px; + margin: 0; + padding: 12px 9px 7px 24px; +} + +.groups_breadcrumbs a { + color: #fff; +} + +.groups_breadcrumbs a:hover { + color: #bfe3ff; + text-decoration: none; +} + +td.quick_repo_menu { + background: #FFF url("../images/vertical-indicator.png") 8px 50% no-repeat !important; + cursor: pointer; + width: 8px; + border: 1px solid transparent; +} + +td.quick_repo_menu.active { + background: url("../images/dt-arrow-dn.png") no-repeat scroll 5px 50% #FFFFFF !important; + border: 1px solid #003367; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + cursor: pointer; +} + +td.quick_repo_menu .menu_items { + margin-top: 10px; + margin-left: -6px; + width: 150px; + position: absolute; + background-color: #FFF; + background: none repeat scroll 0 0 #FFFFFF; + border-color: #003367 #666666 #666666; + border-right: 1px solid #666666; + border-style: solid; + border-width: 1px; + box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2); + border-top-style: none; +} + +td.quick_repo_menu .menu_items li { + padding: 0 !important; +} + +td.quick_repo_menu .menu_items a { + display: block; + padding: 4px 12px 4px 8px; +} + +td.quick_repo_menu .menu_items a:hover { + background-color: #EEE; + text-decoration: none; +} + +td.quick_repo_menu .menu_items .icon img { + margin-bottom: -2px; +} + +td.quick_repo_menu .menu_items.hidden { + display: none; +} + +.yui-dt-first th { + text-align: left; +} + +/* +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/ +.yui-skin-sam .yui-dt-mask { + position: absolute; + z-index: 9500; +} +.yui-dt-tmp { + position: absolute; + left: -9000px; +} +.yui-dt-scrollable .yui-dt-bd { overflow: auto } +.yui-dt-scrollable .yui-dt-hd { + overflow: hidden; + position: relative; +} +.yui-dt-scrollable .yui-dt-bd thead tr, +.yui-dt-scrollable .yui-dt-bd thead th { + position: absolute; + left: -1500px; +} +.yui-dt-scrollable tbody { -moz-outline: 0 } +.yui-skin-sam thead .yui-dt-sortable { cursor: pointer } +.yui-skin-sam thead .yui-dt-draggable { cursor: move } +.yui-dt-coltarget { + position: absolute; + z-index: 999; +} +.yui-dt-hd { zoom: 1 } +th.yui-dt-resizeable .yui-dt-resizerliner { position: relative } +.yui-dt-resizer { + position: absolute; + right: 0; + bottom: 0; + height: 100%; + cursor: e-resize; + cursor: col-resize; + background-color: #CCC; + opacity: 0; + filter: alpha(opacity=0); +} +.yui-dt-resizerproxy { + visibility: hidden; + position: absolute; + z-index: 9000; + background-color: #CCC; + opacity: 0; + filter: alpha(opacity=0); +} +th.yui-dt-hidden .yui-dt-liner, +td.yui-dt-hidden .yui-dt-liner, +th.yui-dt-hidden .yui-dt-resizer { display: none } +.yui-dt-editor, +.yui-dt-editor-shim { + position: absolute; + z-index: 9000; +} +.yui-skin-sam .yui-dt table { + margin: 0; + padding: 0; + font-family: arial; + font-size: inherit; + border-collapse: separate; + *border-collapse: collapse; + border-spacing: 0; + border: 1px solid #7f7f7f; +} +.yui-skin-sam .yui-dt thead { border-spacing: 0 } +.yui-skin-sam .yui-dt caption { + color: #000; + font-size: 85%; + font-weight: normal; + font-style: italic; + line-height: 1; + padding: 1em 0; + text-align: center; +} +.yui-skin-sam .yui-dt th { background: #d8d8da url(../images/sprite.png) repeat-x 0 0 } +.yui-skin-sam .yui-dt th, +.yui-skin-sam .yui-dt th a { + font-weight: normal; + text-decoration: none; + color: #000; + vertical-align: bottom; +} +.yui-skin-sam .yui-dt th { + margin: 0; + padding: 0; + border: 0; + border-right: 1px solid #cbcbcb; +} +.yui-skin-sam .yui-dt tr.yui-dt-first td { border-top: 1px solid #7f7f7f } +.yui-skin-sam .yui-dt th .yui-dt-liner { white-space: nowrap } +.yui-skin-sam .yui-dt-liner { + margin: 0; + padding: 0; +} +.yui-skin-sam .yui-dt-coltarget { + width: 5px; + background-color: red; +} +.yui-skin-sam .yui-dt td { + margin: 0; + padding: 0; + border: 0; + border-right: 1px solid #cbcbcb; + text-align: left; +} +.yui-skin-sam .yui-dt-list td { border-right: 0 } +.yui-skin-sam .yui-dt-resizer { width: 6px } +.yui-skin-sam .yui-dt-mask { + background-color: #000; + opacity: .25; + filter: alpha(opacity=25); +} +.yui-skin-sam .yui-dt-message { background-color: #FFF } +.yui-skin-sam .yui-dt-scrollable table { border: 0 } +.yui-skin-sam .yui-dt-scrollable .yui-dt-hd { + border-left: 1px solid #7f7f7f; + border-top: 1px solid #7f7f7f; + border-right: 1px solid #7f7f7f; +} +.yui-skin-sam .yui-dt-scrollable .yui-dt-bd { + border-left: 1px solid #7f7f7f; + border-bottom: 1px solid #7f7f7f; + border-right: 1px solid #7f7f7f; + background-color: #FFF; +} +.yui-skin-sam .yui-dt-scrollable .yui-dt-data tr.yui-dt-last td { border-bottom: 1px solid #7f7f7f } +.yui-skin-sam th.yui-dt-asc, +.yui-skin-sam th.yui-dt-desc { background: url(../images/sprite.png) repeat-x 0 -100px } +.yui-skin-sam th.yui-dt-sortable .yui-dt-label { margin-right: 10px } +.yui-skin-sam th.yui-dt-asc .yui-dt-liner { background: url(../images/dt-arrow-up.png) no-repeat right } +.yui-skin-sam th.yui-dt-desc .yui-dt-liner { background: url(../images/dt-arrow-dn.png) no-repeat right } +tbody .yui-dt-editable { cursor: pointer } +.yui-dt-editor { + text-align: left; + background-color: #f2f2f2; + border: 1px solid #808080; + padding: 6px; +} +.yui-dt-editor label { + padding-left: 4px; + padding-right: 6px; +} +.yui-dt-editor .yui-dt-button { + padding-top: 6px; + text-align: right; +} +.yui-dt-editor .yui-dt-button button { + background: url(../images/sprite.png) repeat-x 0 0; + border: 1px solid #999; + width: 4em; + height: 1.8em; + margin-left: 6px; +} +.yui-dt-editor .yui-dt-button button.yui-dt-default { + background: url(../images/sprite.png) repeat-x 0 -1400px; + background-color: #5584e0; + border: 1px solid #304369; + color: #FFF; +} +.yui-dt-editor .yui-dt-button button:hover { + background: url(../images/sprite.png) repeat-x 0 -1300px; + color: #000; +} +.yui-dt-editor .yui-dt-button button:active { + background: url(../images/sprite.png) repeat-x 0 -1700px; + color: #000; +} +.yui-skin-sam tr.yui-dt-even { background-color: #FFF } +.yui-skin-sam tr.yui-dt-odd { background-color: #edf5ff } +.yui-skin-sam tr.yui-dt-even td.yui-dt-asc, +.yui-skin-sam tr.yui-dt-even td.yui-dt-desc { background-color: #edf5ff } +.yui-skin-sam tr.yui-dt-odd td.yui-dt-asc, +.yui-skin-sam tr.yui-dt-odd td.yui-dt-desc { background-color: #dbeaff } +.yui-skin-sam .yui-dt-list tr.yui-dt-even { background-color: #FFF } +.yui-skin-sam .yui-dt-list tr.yui-dt-odd { background-color: #FFF } +.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-asc, +.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-desc { background-color: #edf5ff } +.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-asc, +.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-desc { background-color: #edf5ff } +.yui-skin-sam th.yui-dt-highlighted, +.yui-skin-sam th.yui-dt-highlighted a { background-color: #b2d2ff } +.yui-skin-sam tr.yui-dt-highlighted, +.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-asc, +.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-desc, +.yui-skin-sam tr.yui-dt-even td.yui-dt-highlighted, +.yui-skin-sam tr.yui-dt-odd td.yui-dt-highlighted { + cursor: pointer; + background-color: #b2d2ff; +} +.yui-skin-sam .yui-dt-list th.yui-dt-highlighted, +.yui-skin-sam .yui-dt-list th.yui-dt-highlighted a { background-color: #b2d2ff } +.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted, +.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-asc, +.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-desc, +.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-highlighted, +.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-highlighted { + cursor: pointer; + background-color: #b2d2ff; +} +.yui-skin-sam th.yui-dt-selected, +.yui-skin-sam th.yui-dt-selected a { background-color: #446cd7 } +.yui-skin-sam tr.yui-dt-selected td, +.yui-skin-sam tr.yui-dt-selected td.yui-dt-asc, +.yui-skin-sam tr.yui-dt-selected td.yui-dt-desc { + background-color: #426fd9; + color: #FFF; +} +.yui-skin-sam tr.yui-dt-even td.yui-dt-selected, +.yui-skin-sam tr.yui-dt-odd td.yui-dt-selected { + background-color: #446cd7; + color: #FFF; +} +.yui-skin-sam .yui-dt-list th.yui-dt-selected, +.yui-skin-sam .yui-dt-list th.yui-dt-selected a { background-color: #446cd7 } +.yui-skin-sam .yui-dt-list tr.yui-dt-selected td, +.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-asc, +.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-desc { + background-color: #426fd9; + color: #FFF; +} +.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-selected, +.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-selected { + background-color: #446cd7; + color: #FFF; +} +.yui-skin-sam .yui-dt-paginator { + display: block; + margin: 6px 0; + white-space: nowrap; +} +.yui-skin-sam .yui-dt-paginator .yui-dt-first, +.yui-skin-sam .yui-dt-paginator .yui-dt-last, +.yui-skin-sam .yui-dt-paginator .yui-dt-selected { padding: 2px 6px } +.yui-skin-sam .yui-dt-paginator a.yui-dt-first, +.yui-skin-sam .yui-dt-paginator a.yui-dt-last { text-decoration: none } +.yui-skin-sam .yui-dt-paginator .yui-dt-previous, +.yui-skin-sam .yui-dt-paginator .yui-dt-next { display: none } +.yui-skin-sam a.yui-dt-page { + border: 1px solid #cbcbcb; + padding: 2px 6px; + text-decoration: none; + background-color: #fff; +} +.yui-skin-sam .yui-dt-selected { + border: 1px solid #fff; + background-color: #fff; +} + +#content #left { + left: 0; + width: 280px; + position: absolute; +} + +#content #right { + margin: 0 60px 10px 290px; +} + +#content div.box { + clear: both; + background: #fff; + margin: 0 0 10px; + padding: 0 0 10px; + -webkit-border-radius: 4px 4px 4px 4px; + -khtml-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); +} + +#content div.box-left { + width: 49%; + clear: none; + float: left; + margin: 0 0 10px; +} + +#content div.box-right { + width: 49%; + clear: none; + float: right; + margin: 0 0 10px; +} + +#content div.box div.title { + clear: both; + overflow: hidden; + background-color: #003B76; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) ); + background-image: -moz-linear-gradient(top, #003b76, #00376e); + background-image: -ms-linear-gradient(top, #003b76, #00376e); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) ); + background-image: -webkit-linear-gradient(top, #003b76, #00376e); + background-image: -o-linear-gradient(top, #003b76, #00376e); + background-image: linear-gradient(to bottom, #003b76, #00376e); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76', endColorstr='#00376e', GradientType=0 ); + margin: 0 0 20px; + padding: 0; + border-radius: 4px 4px 0 0; +} + +#content div.box div.title h5 { + float: left; + border: none; + color: #fff; + margin: 0; + padding: 11px 0 11px 10px; +} + +#content div.box div.title .link-white { + color: #FFFFFF; +} + +#content div.box div.title .link-white.current { + color: #BFE3FF; +} + +#content div.box div.title ul.links li { + list-style: none; + float: left; + margin: 0; + padding: 0; +} + +#content div.box div.title ul.links li a { + border-left: 1px solid #316293; + color: #FFFFFF; + display: block; + float: left; + font-size: 13px; + font-weight: 700; + height: 1%; + margin: 0; + padding: 11px 22px 12px; + 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 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; + border-bottom: 1px solid #DDD; + margin: 10px 20px; + padding: 0 0 15px; +} + +#content div.box p { + color: #5f5f5f; + font-size: 12px; + line-height: 150%; + margin: 0 24px 10px; + padding: 0; +} + +#content div.box blockquote { + border-left: 4px solid #DDD; + color: #5f5f5f; + font-size: 11px; + line-height: 150%; + margin: 0 34px; + padding: 0 0 0 14px; +} + +#content div.box blockquote p { + margin: 10px 0; + padding: 0; +} + +#content div.box dl { + margin: 10px 0px; +} + +#content div.box dt { + font-size: 12px; + margin: 0; +} + +#content div.box dd { + font-size: 12px; + margin: 0; + padding: 8px 0 8px 15px; +} + +#content div.box li { + font-size: 12px; + padding: 4px 0; +} + +#content div.box ul.disc, #content div.box ul.circle { + margin: 10px 24px 10px 38px; +} + +#content div.box ul.square { + margin: 10px 24px 10px 40px; +} + +#content div.box img.left { + border: none; + float: left; + margin: 10px 10px 10px 0; +} + +#content div.box img.right { + border: none; + float: right; + margin: 10px 0 10px 10px; +} + +#content div.box div.messages { + clear: both; + overflow: hidden; + margin: 0 20px; + padding: 0; +} + +#content div.box div.message { + clear: both; + overflow: hidden; + margin: 0; + padding: 5px 0; + white-space: pre-wrap; +} +#content div.box div.expand { + width: 110%; + height: 14px; + font-size: 10px; + text-align: center; + cursor: pointer; + color: #666; + + background: -webkit-gradient(linear,0% 50%,100% 50%,color-stop(0%,rgba(255,255,255,0)),color-stop(100%,rgba(64,96,128,0.1))); + background: -webkit-linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1)); + background: -moz-linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1)); + background: -o-linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1)); + background: -ms-linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1)); + background: linear-gradient(to bottom,rgba(255,255,255,0),rgba(64,96,128,0.1)); + + display: none; + overflow: hidden; +} +#content div.box div.expand .expandtext { + background-color: #ffffff; + padding: 2px; + border-radius: 2px; +} + +#content div.box div.message a { + font-weight: 400 !important; +} + +#content div.box div.message div.image { + float: left; + margin: 9px 0 0 5px; + padding: 6px; +} + +#content div.box div.message div.image img { + vertical-align: middle; + margin: 0; +} + +#content div.box div.message div.text { + float: left; + margin: 0; + padding: 9px 6px; +} + +#content div.box div.message div.dismiss a { + height: 16px; + width: 16px; + display: block; + background: url("../images/icons/cross.png") no-repeat; + margin: 15px 14px 0 0; + padding: 0; +} + +#content div.box div.message div.text h1, #content div.box div.message div.text h2, #content div.box div.message div.text h3, #content div.box div.message div.text h4, #content div.box div.message div.text h5, #content div.box div.message div.text h6 { + border: none; + margin: 0; + padding: 0; +} + +#content div.box div.message div.text span { + height: 1%; + display: block; + margin: 0; + padding: 5px 0 0; +} + +#content div.box div.message-error { + height: 1%; + clear: both; + overflow: hidden; + background: #FBE3E4; + border: 1px solid #FBC2C4; + color: #860006; +} + +#content div.box div.message-error h6 { + color: #860006; +} + +#content div.box div.message-warning { + height: 1%; + clear: both; + overflow: hidden; + background: #FFF6BF; + border: 1px solid #FFD324; + color: #5f5200; +} + +#content div.box div.message-warning h6 { + color: #5f5200; +} + +#content div.box div.message-notice { + height: 1%; + clear: both; + overflow: hidden; + background: #8FBDE0; + border: 1px solid #6BACDE; + color: #003863; +} + +#content div.box div.message-notice h6 { + color: #003863; +} + +#content div.box div.message-success { + height: 1%; + clear: both; + overflow: hidden; + background: #E6EFC2; + border: 1px solid #C6D880; + color: #4e6100; +} + +#content div.box div.message-success h6 { + color: #4e6100; +} + +#content div.box div.form div.fields div.field { + height: 1%; + min-height: 12px; + border-bottom: 1px solid #DDD; + clear: both; + margin: 0; + padding: 10px 0; +} + +#content div.box div.form div.fields div.field-first { + padding: 0 0 10px; +} + +#content div.box div.form div.fields div.field-noborder { + border-bottom: 0 !important; +} + +#content div.box div.form div.fields div.field span.error-message { + height: 1%; + display: inline-block; + color: red; + margin: 8px 0 0 4px; + padding: 0; +} + +#content div.box div.form div.fields div.field span.success { + height: 1%; + display: block; + color: #316309; + margin: 8px 0 0; + padding: 0; +} + +#content div.box div.form div.fields div.field div.label { + left: 70px; + width: 155px; + position: absolute; + margin: 0; + padding: 5px 0 0 0px; +} + +#content div.box div.form div.fields div.field div.label-summary { + left: 30px; + width: 155px; + position: absolute; + margin: 0; + padding: 0px 0 0 0px; +} + +#content div.box-left div.form div.fields div.field div.label, +#content div.box-right div.form div.fields div.field div.label, +#content div.box-left div.form div.fields div.field div.label, +#content div.box-left div.form div.fields div.field div.label-summary, +#content div.box-right div.form div.fields div.field div.label-summary, +#content div.box-left div.form div.fields div.field div.label-summary { + clear: both; + overflow: hidden; + left: 0; + width: auto; + position: relative; + margin: 0; + padding: 0 0 8px; +} + +#content div.box div.form div.fields div.field div.label-select { + padding: 5px 0 0 5px; +} + +#content div.box-left div.form div.fields div.field div.label-select, +#content div.box-right div.form div.fields div.field div.label-select { + padding: 0 0 8px; +} + +#content div.box-left div.form div.fields div.field div.label-textarea, +#content div.box-right div.form div.fields div.field div.label-textarea { + padding: 0 0 8px !important; +} + +#content div.box div.form div.fields div.field div.label label, div.label label { + color: #393939; + font-weight: 700; +} +#content div.box div.form div.fields div.field div.label label, div.label-summary label { + color: #393939; + font-weight: 700; +} +#content div.box div.form div.fields div.field div.input { + margin: 0 0 0 200px; +} + +#content div.box div.form div.fields div.field div.input.summary { + margin: 0 0 0 110px; +} +#content div.box div.form div.fields div.field div.input.summary-short { + margin: 0 0 0 110px; +} +#content div.box div.form div.fields div.field div.file { + margin: 0 0 0 200px; +} + +#content div.box-left div.form div.fields div.field div.input, #content div.box-right div.form div.fields div.field div.input { + margin: 0 0 0 0px; +} + +#content div.box div.form div.fields div.field div.input input, +.reviewer_ac input { + background: #FFF; + border-top: 1px solid #b3b3b3; + border-left: 1px solid #b3b3b3; + border-right: 1px solid #eaeaea; + border-bottom: 1px solid #eaeaea; + color: #000; + font-size: 11px; + margin: 0; + padding: 7px 7px 6px; +} + +#content div.box div.form div.fields div.field div.input input#clone_url, +#content div.box div.form div.fields div.field div.input input#clone_url_id +{ + font-size: 16px; + padding: 2px; +} + +#content div.box div.form div.fields div.field div.file input { + background: none repeat scroll 0 0 #FFFFFF; + border-color: #B3B3B3 #EAEAEA #EAEAEA #B3B3B3; + border-style: solid; + border-width: 1px; + color: #000000; + font-size: 11px; + margin: 0; + padding: 7px 7px 6px; +} + +input.disabled { + background-color: #F5F5F5 !important; +} +#content div.box div.form div.fields div.field div.input input.small { + width: 30%; +} + +#content div.box div.form div.fields div.field div.input input.medium { + width: 55%; +} + +#content div.box div.form div.fields div.field div.input input.large { + width: 85%; +} + +#content div.box div.form div.fields div.field div.input input.date { + width: 177px; +} + +#content div.box div.form div.fields div.field div.input input.button { + background: #D4D0C8; + border-top: 1px solid #FFF; + border-left: 1px solid #FFF; + border-right: 1px solid #404040; + border-bottom: 1px solid #404040; + color: #000; + margin: 0; + padding: 4px 8px; +} + +#content div.box div.form div.fields div.field div.textarea { + border-top: 1px solid #b3b3b3; + border-left: 1px solid #b3b3b3; + border-right: 1px solid #eaeaea; + border-bottom: 1px solid #eaeaea; + margin: 0 0 0 200px; + padding: 10px; +} + +#content div.box div.form div.fields div.field div.textarea-editor { + border: 1px solid #ddd; + padding: 0; +} + +#content div.box div.form div.fields div.field div.textarea textarea { + width: 100%; + height: 220px; + overflow: hidden; + background: #FFF; + color: #000; + font-size: 11px; + outline: none; + border-width: 0; + margin: 0; + padding: 0; +} + +#content div.box-left div.form div.fields div.field div.textarea textarea, #content div.box-right div.form div.fields div.field div.textarea textarea { + width: 100%; + height: 100px; +} + +#content div.box div.form div.fields div.field div.textarea table { + width: 100%; + border: none; + margin: 0; + padding: 0; +} + +#content div.box div.form div.fields div.field div.textarea table td { + background: #DDD; + border: none; + padding: 0; +} + +#content div.box div.form div.fields div.field div.textarea table td table { + width: auto; + border: none; + margin: 0; + padding: 0; +} + +#content div.box div.form div.fields div.field div.textarea table td table td { + font-size: 11px; + padding: 5px 5px 5px 0; +} + +#content div.box div.form div.fields div.field input[type=text]:focus, +#content div.box div.form div.fields div.field input[type=password]:focus, +#content div.box div.form div.fields div.field input[type=file]:focus, +#content div.box div.form div.fields div.field textarea:focus, +#content div.box div.form div.fields div.field select:focus, +.reviewer_ac input:focus { + background: #f6f6f6; + border-color: #666; +} + +.reviewer_ac { + padding: 10px +} + +div.form div.fields div.field div.button { + margin: 0; + padding: 0 0 0 8px; +} +#content div.box table.noborder { + border: 1px solid transparent; +} + +#content div.box table { + width: 100%; + border-collapse: separate; + margin: 0; + padding: 0; + border: 1px solid #eee; + -webkit-border-radius: 4px; + border-radius: 4px; +} + +#content div.box table th { + background: #eee; + border-bottom: 1px solid #ddd; + padding: 5px 0px 5px 5px; + text-align: left; +} + +#content div.box table th.left { + text-align: left; +} + +#content div.box table th.right { + text-align: right; +} + +#content div.box table th.center { + text-align: center; +} + +#content div.box table th.selected { + vertical-align: middle; + padding: 0; +} + +#content div.box table td { + background: #fff; + border-bottom: 1px solid #cdcdcd; + vertical-align: middle; + padding: 5px; +} + +#content div.box table tr.selected td { + background: #FFC; +} + +#content div.box table td.selected { + width: 3%; + text-align: center; + vertical-align: middle; + padding: 0; +} + +#content div.box table td.action { + width: 45%; + text-align: left; +} + +#content div.box table td.date { + width: 33%; + text-align: center; +} + +#content div.box div.action { + float: right; + background: #FFF; + text-align: right; + margin: 10px 0 0; + padding: 0; +} + +#content div.box div.action select { + font-size: 11px; + margin: 0; +} + +#content div.box div.action .ui-selectmenu { + margin: 0; + padding: 0; +} + +#content div.box div.pagination { + height: 1%; + clear: both; + overflow: hidden; + margin: 10px 0 0; + padding: 0; +} + +#content div.box div.pagination ul.pager { + float: right; + text-align: right; + margin: 0; + padding: 0; +} + +#content div.box div.pagination ul.pager li { + height: 1%; + float: left; + list-style: none; + background: #ebebeb url("../images/pager.png") repeat-x; + border-top: 1px solid #dedede; + border-left: 1px solid #cfcfcf; + border-right: 1px solid #c4c4c4; + border-bottom: 1px solid #c4c4c4; + color: #4A4A4A; + font-weight: 700; + margin: 0 0 0 4px; + padding: 0; +} + +#content div.box div.pagination ul.pager li.separator { + padding: 6px; +} + +#content div.box div.pagination ul.pager li.current { + background: #b4b4b4 url("../images/pager_selected.png") repeat-x; + border-top: 1px solid #ccc; + border-left: 1px solid #bebebe; + border-right: 1px solid #b1b1b1; + border-bottom: 1px solid #afafaf; + color: #515151; + padding: 6px; +} + +#content div.box div.pagination ul.pager li a { + height: 1%; + display: block; + float: left; + color: #515151; + text-decoration: none; + margin: 0; + padding: 6px; +} + +#content div.box div.pagination ul.pager li a:hover, #content div.box div.pagination ul.pager li a:active { + background: #b4b4b4 url("../images/pager_selected.png") repeat-x; + border-top: 1px solid #ccc; + border-left: 1px solid #bebebe; + border-right: 1px solid #b1b1b1; + border-bottom: 1px solid #afafaf; + margin: -1px; +} + +#content div.box div.pagination-wh { + height: 1%; + clear: both; + overflow: hidden; + text-align: right; + margin: 10px 0 0; + padding: 0; +} + +#content div.box div.pagination-right { + float: right; +} + +#content div.box div.pagination-wh a, +#content div.box div.pagination-wh span.pager_dotdot, +#content div.box div.pagination-wh span.yui-pg-previous, +#content div.box div.pagination-wh span.yui-pg-last, +#content div.box div.pagination-wh span.yui-pg-next, +#content div.box div.pagination-wh span.yui-pg-first { + height: 1%; + float: left; + background: #ebebeb url("../images/pager.png") repeat-x; + border-top: 1px solid #dedede; + border-left: 1px solid #cfcfcf; + border-right: 1px solid #c4c4c4; + border-bottom: 1px solid #c4c4c4; + color: #4A4A4A; + font-weight: 700; + margin: 0 0 0 4px; + padding: 6px; +} + +#content div.box div.pagination-wh span.pager_curpage { + height: 1%; + float: left; + background: #b4b4b4 url("../images/pager_selected.png") repeat-x; + border-top: 1px solid #ccc; + border-left: 1px solid #bebebe; + border-right: 1px solid #b1b1b1; + border-bottom: 1px solid #afafaf; + color: #515151; + font-weight: 700; + margin: 0 0 0 4px; + padding: 6px; +} + +#content div.box div.pagination-wh a:hover, #content div.box div.pagination-wh a:active { + background: #b4b4b4 url("../images/pager_selected.png") repeat-x; + border-top: 1px solid #ccc; + border-left: 1px solid #bebebe; + border-right: 1px solid #b1b1b1; + border-bottom: 1px solid #afafaf; + text-decoration: none; +} + +#content div.box div.traffic div.legend { + clear: both; + overflow: hidden; + border-bottom: 1px solid #ddd; + margin: 0 0 10px; + padding: 0 0 10px; +} + +#content div.box div.traffic div.legend h6 { + float: left; + border: none; + margin: 0; + padding: 0; +} + +#content div.box div.traffic div.legend li { + list-style: none; + float: left; + font-size: 11px; + margin: 0; + padding: 0 8px 0 4px; +} + +#content div.box div.traffic div.legend li.visits { + border-left: 12px solid #edc240; +} + +#content div.box div.traffic div.legend li.pageviews { + border-left: 12px solid #afd8f8; +} + +#content div.box div.traffic table { + width: auto; +} + +#content div.box div.traffic table td { + background: transparent; + border: none; + padding: 2px 3px 3px; +} + +#content div.box div.traffic table td.legendLabel { + padding: 0 3px 2px; +} + +#content div.box #summary { + margin-right: 200px; +} + +#summary-menu-stats { + float: left; + width: 180px; + position: absolute; + top: 0; + right: 0; +} + +#summary-menu-stats ul { + margin: 0 10px; + display: block; + background-color: #f9f9f9; + border: 1px solid #d1d1d1; + border-radius: 4px; +} + +#content #summary-menu-stats li { + border-top: 1px solid #d1d1d1; + padding: 0; +} + +#content #summary-menu-stats li:hover { + background: #f0f0f0; +} + +#content #summary-menu-stats li:first-child { + border-top: none; +} + +#summary-menu-stats a.followers { background-image: url('../images/icons/heart.png')} +#summary-menu-stats a.forks { background-image: url('../images/icons/arrow_divide.png')} +#summary-menu-stats a.settings { background-image: url('../images/icons/cog_edit.png')} +#summary-menu-stats a.feed { background-image: url('../images/icons/rss_16.png')} +#summary-menu-stats a.repo-size { background-image: url('../images/icons/server.png')} + +#summary-menu-stats a { + display: block; + padding: 12px 30px; + background-repeat: no-repeat; + background-position: 10px 50%; + padding-right: 10px; +} + +#repo_size_2.loaded { + margin-left: 30px; + display: block; + padding-right: 10px; + padding-bottom: 7px; +} + +#summary-menu-stats a:hover { + text-decoration: none; +} + +#summary-menu-stats a span { + background-color: #DEDEDE; + color: 888 !important; + border-radius: 4px; + padding: 2px 4px; + font-size: 10px; +} + +#summary .metatag { + display: inline-block; + padding: 3px 5px; + margin-bottom: 3px; + margin-right: 1px; + border-radius: 5px; +} + +#content div.box #summary p { + margin-bottom: -5px; + width: 600px; + white-space: pre-wrap; +} + +#content div.box #summary p:last-child { + margin-bottom: 9px; +} + +#content div.box #summary p:first-of-type { + margin-top: 9px; +} + +.metatag { + display: inline-block; + margin-right: 1px; + -webkit-border-radius: 4px 4px 4px 4px; + -khtml-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; + + border: solid 1px #9CF; + padding: 2px 3px 2px 3px !important; + background-color: #DEF; +} + +.metatag[tag="dead"] { + background-color: #E44; +} + +.metatag[tag="stale"] { + background-color: #EA4; +} + +.metatag[tag="featured"] { + background-color: #AEA; +} + +.metatag[tag="requires"] { + background-color: #9CF; +} + +.metatag[tag="recommends"] { + background-color: #BDF; +} + +.metatag[tag="lang"] { + background-color: #FAF474; +} + +.metatag[tag="license"] { + border: solid 1px #9CF; + background-color: #DEF; + target-new: tab !important; +} +.metatag[tag="see"] { + border: solid 1px #CBD; + background-color: #EDF; +} + +a.metatag[tag="license"]:hover { + background-color: #003367; + color: #FFF; + text-decoration: none; +} + +#summary .desc { + white-space: pre; + width: 100%; +} + +#summary .repo_name { + font-size: 1.6em; + font-weight: bold; + vertical-align: baseline; + clear: right +} + +#footer { + clear: both; + overflow: hidden; + text-align: right; + margin: 0; + padding: 0 10px 4px; + margin: -10px 0 0; +} + +#footer div#footer-inner { + background-color: #003B76; + background-repeat: repeat-x; + background-image: -khtml-gradient( linear, left top, left bottom, from(#003B76), to(#00376E)); + background-image: -moz-linear-gradient(top, #003b76, #00376e); + background-image: -ms-linear-gradient( top, #003b76, #00376e); + background-image: -webkit-gradient( linear, left top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e)); + background-image: -webkit-linear-gradient( top, #003b76, #00376e)); + background-image: -o-linear-gradient( top, #003b76, #00376e)); + background-image: linear-gradient(to bottom, #003b76, #00376e); + filter: progid : DXImageTransform.Microsoft.gradient ( startColorstr = '#003b76', endColorstr = '#00376e', GradientType = 0); + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); + -webkit-border-radius: 4px 4px 4px 4px; + -khtml-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; +} + +#footer div#footer-inner p { + padding: 15px 25px 15px 0; + color: #FFF; + font-weight: 700; +} + +#footer div#footer-inner .footer-link { + float: left; + padding-left: 10px; +} + +#footer div#footer-inner .footer-link a, #footer div#footer-inner .footer-link-right a { + color: #FFF; +} + +#login div.title { + clear: both; + overflow: hidden; + position: relative; + background-color: #003B76; + background-repeat: repeat-x; + background-image: -khtml-gradient( linear, left top, left bottom, from(#003B76), to(#00376E)); + background-image: -moz-linear-gradient( top, #003b76, #00376e); + background-image: -ms-linear-gradient( top, #003b76, #00376e); + background-image: -webkit-gradient( linear, left top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e)); + background-image: -webkit-linear-gradient( top, #003b76, #00376e)); + background-image: -o-linear-gradient( top, #003b76, #00376e)); + background-image: linear-gradient(to bottom, #003b76, #00376e); + filter: progid : DXImageTransform.Microsoft.gradient ( startColorstr = '#003b76', endColorstr = '#00376e', GradientType = 0); + margin: 0 auto; + padding: 0; +} + +#login div.inner { + background: #FFF url("../images/login.png") no-repeat top left; + border-top: none; + border-bottom: none; + margin: 0 auto; + padding: 20px; +} + +#login div.form div.fields div.field div.label { + width: 173px; + float: left; + text-align: right; + margin: 2px 10px 0 0; + padding: 5px 0 0 5px; +} + +#login div.form div.fields div.field div.input input { + background: #FFF; + border-top: 1px solid #b3b3b3; + border-left: 1px solid #b3b3b3; + border-right: 1px solid #eaeaea; + border-bottom: 1px solid #eaeaea; + color: #000; + font-size: 11px; + margin: 0; + padding: 7px 7px 6px; +} + +#login div.form div.fields div.buttons { + clear: both; + overflow: hidden; + border-top: 1px solid #DDD; + text-align: right; + margin: 0; + padding: 10px 0 0; +} + +#login div.form div.links { + clear: both; + overflow: hidden; + margin: 10px 0 0; + padding: 0 0 2px; +} + +.user-menu { + margin: 0px !important; + float: left; +} + +.user-menu .container { + padding: 0px 4px 0px 4px; + margin: 0px 0px 0px 0px; +} + +.user-menu .gravatar { + margin: 0px 0px 0px 0px; + cursor: pointer; +} +.user-menu .gravatar.enabled { + background-color: #FDF784 !important; +} +.user-menu .gravatar:hover { + background-color: #FDF784 !important; +} +#quick_login { + min-height: 110px; + padding: 4px; + position: absolute; + right: 0; + background-color: #003B76; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) ); + background-image: -moz-linear-gradient(top, #003b76, #00376e); + background-image: -ms-linear-gradient(top, #003b76, #00376e); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) ); + background-image: -webkit-linear-gradient(top, #003b76, #00376e); + background-image: -o-linear-gradient(top, #003b76, #00376e); + background-image: linear-gradient(to bottom, #003b76, #00376e); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76', endColorstr='#00376e', GradientType=0 ); + + z-index: 999; + -webkit-border-radius: 0px 0px 4px 4px; + -khtml-border-radius: 0px 0px 4px 4px; + border-radius: 0px 0px 4px 4px; + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6); + + overflow: hidden; +} +#quick_login h4 { + color: #fff; + padding: 5px 0px 5px 14px; +} + +#quick_login .password_forgoten { + padding-right: 0px; + padding-top: 0px; + text-align: left; +} + +#quick_login .password_forgoten a { + font-size: 10px; + color: #fff; + padding: 0px !important; + line-height: 20px !important; +} + +#quick_login .register { + padding-right: 10px; + padding-top: 5px; + text-align: left; +} + +#quick_login .register a { + font-size: 10px; + color: #fff; + padding: 0px !important; + line-height: 20px !important; +} + +#quick_login .submit { + margin: -20px 0 0 0px; + position: absolute; + right: 15px; +} + +#quick_login .links_left { + float: left; + margin-right: 130px; + width: 170px; +} +#quick_login .links_right { + + position: absolute; + right: 0; +} +#quick_login .full_name { + color: #FFFFFF; + font-weight: bold; + padding: 3px 3px 3px 6px; +} +#quick_login .big_gravatar { + padding: 4px 0px 0px 6px; +} +#quick_login .notifications { + padding: 2px 0px 0px 6px; + color: #FFFFFF; + font-weight: bold; + line-height: 10px !important; +} +#quick_login .notifications a, +#quick_login .unread a { + color: #FFFFFF; + display: block; + padding: 0px !important; +} +#quick_login .notifications a:hover, +#quick_login .unread a:hover { + background-color: inherit !important; +} +#quick_login .email, #quick_login .unread { + color: #FFFFFF; + padding: 3px 3px 3px 6px; +} +#quick_login .links .logout { +} + +#quick_login div.form div.fields { + padding-top: 2px; + padding-left: 10px; +} + +#quick_login div.form div.fields div.field { + padding: 5px; +} + +#quick_login div.form div.fields div.field div.label label { + color: #fff; + padding-bottom: 3px; +} + +#quick_login div.form div.fields div.field div.input input { + width: 236px; + background: #FFF; + border-top: 1px solid #b3b3b3; + border-left: 1px solid #b3b3b3; + border-right: 1px solid #eaeaea; + border-bottom: 1px solid #eaeaea; + color: #000; + font-size: 11px; + margin: 0; + padding: 5px 7px 4px; +} + +#quick_login div.form div.fields div.buttons { + clear: both; + overflow: hidden; + text-align: right; + margin: 0; + padding: 5px 14px 0px 5px; +} + +#quick_login div.form div.links { + clear: both; + overflow: hidden; + margin: 10px 0 0; + padding: 0 0 2px; +} + +#quick_login ol.links { + display: block; + font-weight: bold; + list-style: none outside none; + text-align: right; +} +#quick_login ol.links li { + line-height: 27px; + margin: 0; + padding: 0; + color: #fff; + display: block; + float: none !important; +} + +#quick_login ol.links li a { + color: #fff; + display: block; + padding: 2px; +} +#quick_login ol.links li a:HOVER { + background-color: inherit !important; +} + +#register div.title { + clear: both; + overflow: hidden; + position: relative; + background-color: #003B76; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) ); + background-image: -moz-linear-gradient(top, #003b76, #00376e); + background-image: -ms-linear-gradient(top, #003b76, #00376e); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) ); + background-image: -webkit-linear-gradient(top, #003b76, #00376e); + background-image: -o-linear-gradient(top, #003b76, #00376e); + background-image: linear-gradient(to bottom, #003b76, #00376e); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76', + endColorstr='#00376e', GradientType=0 ); + margin: 0 auto; + padding: 0; +} + +#register div.inner { + background: #FFF; + border-top: none; + border-bottom: none; + margin: 0 auto; + padding: 20px; +} + +#register div.form div.fields div.field div.label { + width: 135px; + float: left; + text-align: right; + margin: 2px 10px 0 0; + padding: 5px 0 0 5px; +} + +#register div.form div.fields div.field div.input input { + width: 300px; + background: #FFF; + border-top: 1px solid #b3b3b3; + border-left: 1px solid #b3b3b3; + border-right: 1px solid #eaeaea; + border-bottom: 1px solid #eaeaea; + color: #000; + font-size: 11px; + margin: 0; + padding: 7px 7px 6px; +} + +#register div.form div.fields div.buttons { + clear: both; + overflow: hidden; + border-top: 1px solid #DDD; + text-align: left; + margin: 0; + padding: 10px 0 0 150px; +} + +#register div.form div.activation_msg { + padding-top: 4px; + padding-bottom: 4px; +} + +#journal .journal_day { + font-size: 20px; + padding: 10px 0px; + border-bottom: 2px solid #DDD; + margin-left: 10px; + margin-right: 10px; +} + +#journal .journal_container { + padding: 5px; + clear: both; + margin: 0px 5px 0px 10px; +} + +#journal .journal_action_container { + padding-left: 38px; +} + +#journal .journal_user { + color: #747474; + font-size: 14px; + font-weight: bold; + 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; + padding-right: 4px; + padding-top: 3px; +} + +#journal .journal_action { + padding-top: 4px; + min-height: 2px; + float: left +} + +#journal .journal_action_params { + clear: left; + padding-left: 22px; +} + +#journal .journal_repo { + float: left; + margin-left: 6px; + padding-top: 3px; +} + +#journal .date { + clear: both; + color: #777777; + font-size: 11px; + padding-left: 22px; +} + +#journal .journal_repo .journal_repo_name { + font-weight: bold; + font-size: 1.1em; +} + +#journal .compare_view { + padding: 5px 0px 5px 0px; + width: 95px; +} + +.journal_highlight { + font-weight: bold; + padding: 0 2px; + vertical-align: bottom; +} + +.trending_language_tbl, .trending_language_tbl td { + border: 0 !important; + margin: 0 !important; + padding: 0 !important; +} + +.trending_language_tbl, .trending_language_tbl tr { + border-spacing: 1px; +} + +.trending_language { + background-color: #003367; + color: #FFF; + display: block; + min-width: 20px; + text-decoration: none; + height: 12px; + margin-bottom: 0px; + margin-left: 5px; + white-space: pre; + padding: 3px; +} + +h3.files_location { + font-size: 1.8em; + font-weight: 700; + border-bottom: none !important; + margin: 10px 0 !important; +} + +#files_data dl dt { + float: left; + width: 60px; + margin: 0 !important; + padding: 5px; +} + +#files_data dl dd { + margin: 0 !important; + padding: 5px !important; +} + +.file_history { + padding-top: 10px; + font-size: 16px; +} +.file_author { + float: left; +} + +.file_author .item { + float: left; + padding: 5px; + color: #888; +} + +.tablerow0 { + background-color: #F8F8F8; +} + +.tablerow1 { + background-color: #FFFFFF; +} + +.changeset_id { + color: #666666; + margin-right: -3px; +} + +.changeset_hash { + color: #000000; +} + +#changeset_content { + border-left: 1px solid #CCC; + border-right: 1px solid #CCC; + border-bottom: 1px solid #CCC; + padding: 5px; +} + +#changeset_compare_view_content { + border: 1px solid #CCC; + padding: 5px; +} + +#changeset_content .container { + min-height: 100px; + font-size: 1.2em; + overflow: hidden; +} + +#changeset_compare_view_content .compare_view_commits { + width: auto !important; +} + +#changeset_compare_view_content .compare_view_commits td { + padding: 0px 0px 0px 12px !important; +} + +#changeset_content .container .right { + float: right; + width: 20%; + text-align: right; +} + +#changeset_content .container .message { + white-space: pre-wrap; +} +#changeset_content .container .message a:hover { + text-decoration: none; +} +.cs_files .cur_cs { + margin: 10px 2px; + font-weight: bold; +} + +.cs_files .node { + float: left; +} + +.cs_files .changes { + float: right; + color: #003367; +} + +.cs_files .changes .added { + background-color: #BBFFBB; + float: left; + text-align: center; + font-size: 9px; + padding: 2px 0px 2px 0px; +} + +.cs_files .changes .deleted { + background-color: #FF8888; + float: left; + text-align: center; + 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 + 3px; + height: 16px; + padding-left: 20px; + margin-top: 7px; + text-align: left; +} + +.cs_files .cs_changed, .cs_files .cs_M { + background: url("../images/icons/page_white_edit.png") no-repeat scroll + 3px; + height: 16px; + padding-left: 20px; + margin-top: 7px; + text-align: left; +} + +.cs_files .cs_removed, .cs_files .cs_D { + background: url("../images/icons/page_white_delete.png") no-repeat + scroll 3px; + height: 16px; + padding-left: 20px; + margin-top: 7px; + text-align: left; +} + +.table { + position: relative; +} + +#graph { + position: relative; + overflow: hidden; +} + +#graph_nodes { + position: absolute; +} + +#graph_content, +#graph .info_box, +#graph .container_header { + margin-left: 100px; +} + +#graph_content { + position: relative; +} + +#graph .container_header { + padding: 10px; + height: 25px; +} + +#graph_content #rev_range_container { + float: left; + margin: 0px 0px 0px 3px; +} + +#graph_content #rev_range_clear { + float: left; + margin: 0px 0px 0px 3px; +} + +#graph_content #changesets { + table-layout: fixed; + border-collapse: collapse; + border-left: none; + border-right: none; + border-color: #cdcdcd; +} + +#graph_content #changesets td { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + height: 31px; + border-color: #cdcdcd; + text-align: left; +} + +#graph_content .container .author { + width: 105px; +} + +#graph_content .container .hash { + width: 100px; + font-size: 0.85em; +} + +#graph_content #changesets .container .date { + width: 76px; + color: #666; + font-size: 10px; +} + +#graph_content #changesets .container .right { + width: 120px; + padding-right: 0px; + overflow: visible; + position: relative; +} + +#graph_content .container .mid { + padding: 0; +} + +#graph_content .log-container { + position: relative; +} + +#graph_content #changesets td.checkbox { + width: 20px; +} + +#graph_content .container .changeset_range { + float: left; + margin: 6px 3px; +} + +#graph_content .container .author img { + vertical-align: middle; +} + +#graph_content .container .author .user { + color: #444444; +} + +#graph_content .container .mid .message { + white-space: pre-wrap; + padding: 0; + overflow: hidden; + height: 1.1em; +} + +#graph_content .container .extra-container { + display: block; + position: absolute; + top: -15px; + right: 0; + padding-left: 5px; + background: #FFFFFF; + height: 41px; +} + +#graph_content .comments-container, +#graph_content .logtags { + display: block; + float: left; + overflow: hidden; + padding: 0; + margin: 0; +} + +#graph_content .comments-container { + margin: 0.8em 0; + margin-right: 0.5em; +} + +#graph_content .tagcontainer { + width: 80px; + position: relative; + float: right; + height: 100%; + top: 7px; + margin-left: 0.5em; +} + +#graph_content .logtags { + min-width: 80px; + height: 1.1em; + position: absolute; + left: 0px; + width: auto; + top: 0px; +} + +#graph_content .logtags.tags { + top: 14px; +} + +#graph_content .logtags:hover { + overflow: visible; + position: absolute; + width: auto; + right: 0; + left: initial; +} + +#graph_content .logtags .bookbook, +#graph_content .logtags .tagtag { + float: left; + line-height: 1em; + margin-bottom: 1px; + margin-right: 1px; + padding: 1px 3px; + font-size: 10px; +} + +#graph_content .container .mid .message a:hover { + text-decoration: none; +} + +.revision-link { + color: #3F6F9F; + font-weight: bold !important; +} + +.issue-tracker-link { + color: #3F6F9F; + font-weight: bold !important; +} + +.changeset-status-container { + padding-right: 5px; + margin-top: 1px; + float: right; + height: 14px; +} +.code-header .changeset-status-container { + float: left; + padding: 2px 0px 0px 2px; +} +.changeset-status-container .changeset-status-lbl { + color: rgb(136, 136, 136); + float: left; + padding: 3px 4px 0px 0px +} +.code-header .changeset-status-container .changeset-status-lbl { + float: left; + padding: 0px 4px 0px 0px; +} +.changeset-status-container .changeset-status-ico { + float: left; +} +.code-header .changeset-status-container .changeset-status-ico, .container .changeset-status-ico { + float: left; +} + +#graph_content .comments-cnt { + color: rgb(136, 136, 136); + padding: 5px 0; +} + +#graph_content .comments-cnt a { + background-image: url('../images/icons/comments.png'); + background-repeat: no-repeat; + background-position: 100% 50%; + padding: 5px 0; + padding-right: 20px; +} + +.right .changes { + clear: both; +} + +.right .changes .changed_total { + display: block; + float: right; + text-align: center; + min-width: 45px; + cursor: pointer; + color: #444444; + background: #FEA; + -webkit-border-radius: 0px 0px 0px 6px; + border-radius: 0px 0px 0px 6px; + padding: 1px; +} + +.right .changes .added, .changed, .removed { + display: block; + padding: 1px; + color: #444444; + float: right; + text-align: center; + min-width: 15px; +} + +.right .changes .added { + background: #CFC; +} + +.right .changes .changed { + background: #FEA; +} + +.right .changes .removed { + background: #FAA; +} + +.right .merge { + padding: 1px 3px 1px 3px; + background-color: #fca062; + font-size: 10px; + color: #ffffff; + text-transform: uppercase; + white-space: nowrap; + -webkit-border-radius: 3px; + border-radius: 3px; + margin-right: 2px; +} + +.right .parent { + color: #666666; + clear: both; +} +.right .logtags { + line-height: 2.2em; +} +.branchtag, .logtags .tagtag, .logtags .booktag { + margin: 0px 2px; +} + +.branchtag, +.tagtag, +.bookbook, +.spantag { + padding: 1px 3px 1px 3px; + font-size: 10px; + color: #336699; + white-space: nowrap; + -webkit-border-radius: 4px; + border-radius: 4px; + border: 1px solid #d9e8f8; + line-height: 1.5em; +} + +#graph_content .branchtag, +#graph_content .tagtag, +#graph_content .bookbook { + margin: 1.1em 0; + margin-right: 0.5em; +} + +.branchtag, +.tagtag, +.bookbook { + float: left; +} + +.right .logtags .branchtag, +.logtags .tagtag, +.right .merge { + float: right; + line-height: 1em; + margin: 1px 1px !important; + display: block; +} + +.bookbook { + border-color: #46A546; + color: #46A546; +} + +.tagtag { + border-color: #62cffc; + color: #62cffc; +} + +.logtags .branchtag a:hover, +.logtags .branchtag a, +.branchtag a, +.branchtag a:hover { + text-decoration: none; + color: inherit; +} +.logtags .tagtag { + padding: 1px 3px 1px 3px; + background-color: #62cffc; + font-size: 10px; + color: #ffffff; + white-space: nowrap; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.tagtag a, +.tagtag a:hover, +.logtags .tagtag a, +.logtags .tagtag a:hover { + text-decoration: none; + color: inherit; +} +.logbooks .bookbook, .logbooks .bookbook, .logtags .bookbook, .logtags .bookbook { + padding: 1px 3px 1px 3px; + background-color: #46A546; + font-size: 10px; + color: #ffffff; + white-space: nowrap; + -webkit-border-radius: 3px; + border-radius: 3px; +} +.logbooks .bookbook, .logbooks .bookbook a, .right .logtags .bookbook, .logtags .bookbook a { + color: #ffffff; +} + +.logbooks .bookbook, .logbooks .bookbook a:hover, +.logtags .bookbook, .logtags .bookbook a:hover, +.bookbook a, +.bookbook a:hover { + text-decoration: none; + color: inherit; +} +div.browserblock { + overflow: hidden; + border: 1px solid #ccc; + background: #f8f8f8; + font-size: 100%; + line-height: 125%; + padding: 0; + -webkit-border-radius: 6px 6px 0px 0px; + border-radius: 6px 6px 0px 0px; +} + +div.browserblock .browser-header { + background: #FFF; + padding: 10px 0px 15px 0px; + width: 100%; +} + +div.browserblock .browser-nav { + float: left +} + +div.browserblock .browser-branch { + float: left; +} + +div.browserblock .browser-branch label { + color: #4A4A4A; + vertical-align: text-top; +} + +div.browserblock .browser-header span { + margin-left: 5px; + font-weight: 700; +} + +div.browserblock .browser-search { + clear: both; + padding: 8px 8px 0px 5px; + height: 20px; +} + +div.browserblock #node_filter_box { +} + +div.browserblock .search_activate { + float: left +} + +div.browserblock .add_node { + float: left; + padding-left: 5px; +} + +div.browserblock .search_activate a:hover, div.browserblock .add_node a:hover { + text-decoration: none !important; +} + +div.browserblock .browser-body { + background: #EEE; + border-top: 1px solid #CCC; +} + +table.code-browser { + border-collapse: collapse; + width: 100%; +} + +table.code-browser tr { + margin: 3px; +} + +table.code-browser thead th { + background-color: #EEE; + height: 20px; + font-size: 1.1em; + font-weight: 700; + text-align: left; + padding-left: 10px; +} + +table.code-browser tbody td { + padding-left: 10px; + height: 20px; +} + +table.code-browser .browser-file { + background: url("../images/icons/document_16.png") no-repeat scroll 3px; + height: 16px; + padding-left: 20px; + text-align: left; +} +.diffblock .changeset_header { + height: 16px; +} +.diffblock .changeset_file { + background: url("../images/icons/file.png") no-repeat scroll 3px; + text-align: left; + float: left; + padding: 2px 0px 2px 22px; +} +.diffblock .diff-menu-wrapper { + float: left; +} + +.diffblock .diff-menu { + position: absolute; + background: none repeat scroll 0 0 #FFFFFF; + border-color: #003367 #666666 #666666; + border-right: 1px solid #666666; + border-style: solid solid solid; + border-width: 1px; + box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2); + margin-top: 5px; + margin-left: 1px; + +} +.diffblock .diff-actions { + padding: 2px 0px 0px 2px; + float: left; +} +.diffblock .diff-menu ul li { + padding: 0px 0px 0px 0px !important; +} +.diffblock .diff-menu ul li a { + display: block; + padding: 3px 8px 3px 8px !important; +} +.diffblock .diff-menu ul li a:hover { + text-decoration: none; + background-color: #EEEEEE; +} +table.code-browser .browser-dir { + background: url("../images/icons/folder_16.png") no-repeat scroll 3px; + height: 16px; + padding-left: 20px; + text-align: left; +} + +table.code-browser .submodule-dir { + background: url("../images/icons/disconnect.png") no-repeat scroll 3px; + height: 16px; + padding-left: 20px; + text-align: left; +} + + +.box .search { + clear: both; + overflow: hidden; + margin: 0; + padding: 0 20px 10px; +} + +.box .search div.search_path { + background: none repeat scroll 0 0 #EEE; + border: 1px solid #CCC; + color: blue; + margin-bottom: 10px; + padding: 10px 0; +} + +.box .search div.search_path div.link { + font-weight: 700; + margin-left: 25px; +} + +.box .search div.search_path div.link a { + color: #003367; + cursor: pointer; + text-decoration: none; +} + +#path_unlock { + color: red; + font-size: 1.2em; + padding-left: 4px; +} + +.info_box span { + margin-left: 3px; + margin-right: 3px; +} + +.info_box .rev { + color: #003367; + font-size: 1.6em; + font-weight: bold; + vertical-align: sub; +} + +.info_box input#at_rev, .info_box input#size { + background: #FFF; + border-top: 1px solid #b3b3b3; + border-left: 1px solid #b3b3b3; + border-right: 1px solid #eaeaea; + border-bottom: 1px solid #eaeaea; + color: #000; + font-size: 12px; + margin: 0; + padding: 1px 5px 1px; +} + +.info_box input#view { + text-align: center; + padding: 4px 3px 2px 2px; +} + +.yui-overlay, .yui-panel-container { + visibility: hidden; + position: absolute; + z-index: 2; +} + +#tip-box { + position: absolute; + + background-color: #FFF; + border: 2px solid #003367; + font: 100% sans-serif; + width: auto; + opacity: 1; + padding: 8px; + + white-space: pre-wrap; + -webkit-border-radius: 8px 8px 8px 8px; + -khtml-border-radius: 8px 8px 8px 8px; + border-radius: 8px 8px 8px 8px; + 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: 1; + padding: 8px; + white-space: pre-wrap; + -webkit-border-radius: 8px 8px 8px 8px; + -khtml-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; +} +.mentions-container .yui-ac-content { + width: 100% !important; +} + +.ac { + vertical-align: top; +} + +.ac .yui-ac { + position: inherit; + font-size: 100%; +} + +.ac .perm_ac { + width: 20em; +} + +.ac .yui-ac-input { + width: 100%; +} + +.ac .yui-ac-container { + position: absolute; + top: 1.6em; + width: auto; +} + +.ac .yui-ac-content { + position: absolute; + border: 1px solid gray; + background: #fff; + z-index: 9050; +} + +.ac .yui-ac-shadow { + position: absolute; + width: 100%; + background: #000; + opacity: .10; + filter: alpha(opacity = 10); + z-index: 9049; + margin: .3em; +} + +.ac .yui-ac-content ul { + width: 100%; + margin: 0; + padding: 0; + z-index: 9050; +} + +.ac .yui-ac-content li { + cursor: default; + white-space: nowrap; + margin: 0; + padding: 2px 5px; + height: 18px; + z-index: 9050; + display: block; + width: auto !important; +} + +.ac .yui-ac-content li .ac-container-wrap { + width: auto; +} + +.ac .yui-ac-content li.yui-ac-prehighlight { + background: #B3D4FF; + z-index: 9050; +} + +.ac .yui-ac-content li.yui-ac-highlight { + background: #556CB5; + color: #FFF; + z-index: 9050; +} +.ac .yui-ac-bd { + z-index: 9050; +} + +.reposize { + background: url("../images/icons/server.png") no-repeat scroll 3px; + height: 16px; + width: 20px; + cursor: pointer; + display: block; + float: right; + margin-top: 2px; +} + +#repo_size { + display: block; + margin-top: 4px; + color: #666; + float: right; +} + +.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; +} + +.add_icon { + background: url("../images/icons/add.png") no-repeat scroll 3px; + padding-left: 20px; + padding-top: 0px; + text-align: left; +} + +.accept_icon { + background: url("../images/icons/accept.png") no-repeat scroll 3px; + padding-left: 20px; + padding-top: 0px; + text-align: left; +} + +.edit_icon { + background: url("../images/icons/application_form_edit.png") no-repeat scroll 3px; + padding-left: 20px; + padding-top: 0px; + text-align: left; +} + +.delete_icon { + background: url("../images/icons/delete.png") no-repeat scroll 3px; + padding-left: 20px; + padding-top: 0px; + text-align: left; +} + +.refresh_icon { + background: url("../images/icons/arrow_refresh.png") no-repeat scroll + 3px; + padding-left: 20px; + padding-top: 0px; + text-align: left; +} + +.pull_icon { + background: url("../images/icons/connect.png") no-repeat scroll 3px; + padding-left: 20px; + padding-top: 0px; + text-align: left; +} + +.rss_icon { + background: url("../images/icons/rss_16.png") no-repeat scroll 3px; + padding-left: 20px; + padding-top: 4px; + text-align: left; + font-size: 8px +} + +.atom_icon { + background: url("../images/icons/rss_16.png") no-repeat scroll 3px; + padding-left: 20px; + padding-top: 4px; + text-align: left; + font-size: 8px +} + +.archive_icon { + background: url("../images/icons/compress.png") no-repeat scroll 3px; + padding-left: 20px; + text-align: left; + padding-top: 1px; +} + +.start_following_icon { + background: url("../images/icons/heart_add.png") no-repeat scroll 3px; + padding-left: 20px; + text-align: left; + padding-top: 0px; +} + +.stop_following_icon { + background: url("../images/icons/heart_delete.png") no-repeat scroll 3px; + padding-left: 20px; + text-align: left; + padding-top: 0px; +} + +.action_button { + border: 0; + display: inline; +} + +.action_button:hover { + border: 0; + text-decoration: underline; + cursor: pointer; +} + +#switch_repos { + position: absolute; + height: 25px; + z-index: 1; +} + +#switch_repos select { + min-width: 150px; + max-height: 250px; + z-index: 1; +} + +.breadcrumbs { + border: medium none; + color: #FFF; + float: left; + font-weight: 700; + font-size: 14px; + margin: 0; + padding: 11px 0 11px 10px; +} + +.breadcrumbs .hash { + text-transform: none; + color: #fff; +} + +.breadcrumbs a { + color: #FFF; +} + +.flash_msg { +} + +.flash_msg ul { +} + +.error_red { + color: red; +} + +.error_msg { + background-color: #c43c35; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35) ); + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35) ); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b',endColorstr='#c43c35', GradientType=0 ); + border-color: #c43c35 #c43c35 #882a25; +} + +.error_msg a { + text-decoration: underline; +} + +.warning_msg { + color: #404040 !important; + background-color: #eedc94; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94) ); + background-image: -moz-linear-gradient(top, #fceec1, #eedc94); + background-image: -ms-linear-gradient(top, #fceec1, #eedc94); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94) ); + background-image: -webkit-linear-gradient(top, #fceec1, #eedc94); + background-image: -o-linear-gradient(top, #fceec1, #eedc94); + background-image: linear-gradient(to bottom, #fceec1, #eedc94); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0 ); + border-color: #eedc94 #eedc94 #e4c652; +} + +.warning_msg a { + text-decoration: underline; +} + +.success_msg { + background-color: #57a957; + background-repeat: repeat-x !important; + background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957) ); + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -ms-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957) ); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(to bottom, #62c462, #57a957); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0 ); + border-color: #57a957 #57a957 #3d773d; +} + +.success_msg a { + text-decoration: underline; + color: #FFF !important; +} + +.notice_msg { + background-color: #339bb9; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9) ); + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -ms-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9) ); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(to bottom, #5bc0de, #339bb9); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0 ); + border-color: #339bb9 #339bb9 #22697d; +} + +.notice_msg a { + text-decoration: underline; +} + +.success_msg, .error_msg, .notice_msg, .warning_msg { + font-size: 12px; + font-weight: 700; + min-height: 14px; + line-height: 14px; + margin-bottom: 10px; + margin-top: 0; + display: block; + overflow: auto; + padding: 6px 10px 6px 10px; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + position: relative; + color: #FFF; + border-width: 1px; + border-style: solid; + -webkit-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); +} + +#msg_close { + background: transparent url("../icons/cross_grey_small.png") no-repeat scroll 0 0; + cursor: pointer; + height: 16px; + position: absolute; + right: 5px; + top: 5px; + width: 16px; +} +div#legend_data { + padding-left: 10px; +} +div#legend_container table { + border: none !important; +} +div#legend_container table, div#legend_choices table { + width: auto !important; +} + +table#permissions_manage { + width: 0 !important; +} + +table#permissions_manage span.private_repo_msg { + font-size: 0.8em; + opacity: 0.6; +} + +table#permissions_manage td.private_repo_msg { + font-size: 0.8em; +} + +table#permissions_manage tr#add_perm_input td { + vertical-align: middle; +} + +div.gravatar { + background-color: #FFF; + float: left; + margin-right: 0.7em; + padding: 1px 1px 1px 1px; + line-height: 0; + -webkit-border-radius: 3px; + -khtml-border-radius: 3px; + border-radius: 3px; +} + +div.gravatar img { + -webkit-border-radius: 2px; + -khtml-border-radius: 2px; + border-radius: 2px; +} + +#header, #content, #footer { + min-width: 978px; +} + +#content { + clear: both; + padding: 10px 10px 14px 10px; +} + +#content.hover { + padding: 55px 10px 14px 10px !important; +} + +#content div.box div.title div.search { + border-left: 1px solid #316293; +} + +#content div.box div.title div.search div.input input { + border: 1px solid #316293; +} + +.ui-btn { + color: #515151; + background-color: #DADADA; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#F4F4F4),to(#DADADA) ); + background-image: -moz-linear-gradient(top, #F4F4F4, #DADADA); + background-image: -ms-linear-gradient(top, #F4F4F4, #DADADA); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #F4F4F4),color-stop(100%, #DADADA) ); + background-image: -webkit-linear-gradient(top, #F4F4F4, #DADADA) ); + background-image: -o-linear-gradient(top, #F4F4F4, #DADADA) ); + background-image: linear-gradient(to bottom, #F4F4F4, #DADADA); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#F4F4F4', endColorstr='#DADADA', GradientType=0); + + border-top: 1px solid #DDD; + border-left: 1px solid #c6c6c6; + border-right: 1px solid #DDD; + border-bottom: 1px solid #c6c6c6; + color: #515151; + outline: none; + margin: 0px 3px 3px 0px; + -webkit-border-radius: 4px 4px 4px 4px !important; + -khtml-border-radius: 4px 4px 4px 4px !important; + border-radius: 4px 4px 4px 4px !important; + cursor: pointer !important; + padding: 3px 3px 3px 3px; + background-position: 0 -15px; + +} + +.ui-btn.disabled { + color: #999; +} + +.ui-btn.xsmall { + padding: 1px 2px 1px 1px; +} + +.ui-btn.large { + padding: 6px 12px; +} + +.ui-btn.clone { + padding: 5px 2px 6px 1px; + margin: 0px 0px 3px -4px; + -webkit-border-radius: 0px 4px 4px 0px !important; + -khtml-border-radius: 0px 4px 4px 0px !important; + border-radius: 0px 4px 4px 0px !important; + width: 100px; + text-align: center; + display: inline-block; + position: relative; + top: -2px; +} +.ui-btn:focus { + outline: none; +} +.ui-btn:hover { + background-position: 0 -15px; + text-decoration: none; + color: #515151; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25), 0 0 3px #FFFFFF !important; +} + +.ui-btn.disabled:hover { + background-position: 0; + color: #999; + text-decoration: none; + box-shadow: none !important; +} + +.ui-btn.red { + color: #fff; + background-color: #c43c35; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35)); + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); + border-color: #c43c35 #c43c35 #882a25; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + + +.ui-btn.blue { + color: #fff; + background-color: #339bb9; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9)); + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -ms-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(to bottom, #5bc0de, #339bb9); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0); + border-color: #339bb9 #339bb9 #22697d; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.ui-btn.green { + background-color: #57a957; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957)); + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -ms-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(to bottom, #62c462, #57a957); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); + border-color: #57a957 #57a957 #3d773d; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.ui-btn.blue.hidden { + display: none; +} + +.ui-btn.active { + font-weight: bold; +} + +ins, div.options a:hover { + text-decoration: none; +} + +img, +#header #header-inner #quick li a:hover span.normal, +#content div.box div.form div.fields div.field div.textarea table td table td a, +#clone_url, +#clone_url_id +{ + border: none; +} + +img.icon, .right .merge img { + vertical-align: bottom; +} + +#header ul#logged-user, #content div.box div.title ul.links, +#content div.box div.message div.dismiss, +#content div.box div.traffic div.legend ul { + float: right; + margin: 0; + padding: 0; +} + +#header #header-inner #home, #header #header-inner #logo, +#content div.box ul.left, #content div.box ol.left, +div#commit_history, +div#legend_data, div#legend_container, div#legend_choices { + float: left; +} + +#header #header-inner #quick li #quick_login, +#header #header-inner #quick li:hover ul ul, +#header #header-inner #quick li:hover ul ul ul, +#header #header-inner #quick li:hover ul ul ul ul, +#content #left #menu ul.closed, #content #left #menu li ul.collapsed, .yui-tt-shadow { + display: none; +} + +#header #header-inner #quick li:hover #quick_login, +#header #header-inner #quick li:hover ul, #header #header-inner #quick li li:hover ul, #header #header-inner #quick li li li:hover ul, #header #header-inner #quick li li li li:hover ul, #content #left #menu ul.opened, #content #left #menu li ul.expanded { + display: block; +} + +#content div.graph { + padding: 0 10px 10px; +} + +#content div.box div.title ul.links li a:hover, +#content div.box div.title ul.links li.ui-tabs-selected a { + + background: #6388ad; /* Old browsers */ + background: -moz-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0.1)), color-stop(100%,rgba(255,255,255,0))); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* IE10+ */ + background: linear-gradient(to bottom, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* W3C */ + /*filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#88bfe8', endColorstr='#70b0e0',GradientType=0 ); /* IE6-9 */*/ +} + +#content div.box ol.lower-roman, #content div.box ol.upper-roman, #content div.box ol.lower-alpha, #content div.box ol.upper-alpha, #content div.box ol.decimal { + margin: 10px 24px 10px 44px; +} + +#content div.box div.form, #content div.box div.table, #content div.box div.traffic { + position: relative; + clear: both; + margin: 0; + padding: 0 20px 10px; +} + +#content div.box div.form div.fields, #login div.form, #login div.form div.fields, #register div.form, #register div.form div.fields { + clear: both; + overflow: hidden; + margin: 0; + padding: 0; +} + +#content div.box div.form div.fields div.field div.label span, #login div.form div.fields div.field div.label span, #register div.form div.fields div.field div.label span { + height: 1%; + display: block; + color: #363636; + margin: 0; + padding: 2px 0 0; +} + +#content div.box div.form div.fields div.field div.input input.error, #login div.form div.fields div.field div.input input.error, #register div.form div.fields div.field div.input input.error { + background: #FBE3E4; + border-top: 1px solid #e1b2b3; + border-left: 1px solid #e1b2b3; + border-right: 1px solid #FBC2C4; + border-bottom: 1px solid #FBC2C4; +} + +#content div.box div.form div.fields div.field div.input input.success, #login div.form div.fields div.field div.input input.success, #register div.form div.fields div.field div.input input.success { + background: #E6EFC2; + border-top: 1px solid #cebb98; + border-left: 1px solid #cebb98; + border-right: 1px solid #c6d880; + border-bottom: 1px solid #c6d880; +} + +#content div.box-left div.form div.fields div.field div.textarea, #content div.box-right div.form div.fields div.field div.textarea, #content div.box div.form div.fields div.field div.select select, #content div.box table th.selected input, #content div.box table td.selected input { + margin: 0; +} + +#content div.box-left div.form div.fields div.field div.select, #content div.box-left div.form div.fields div.field div.checkboxes, #content div.box-left div.form div.fields div.field div.radios, #content div.box-right div.form div.fields div.field div.select, #content div.box-right div.form div.fields div.field div.checkboxes, #content div.box-right div.form div.fields div.field div.radios { + margin: 0 0 0 0px !important; + padding: 0; +} + +#content div.box div.form div.fields div.field div.select, #content div.box div.form div.fields div.field div.checkboxes, #content div.box div.form div.fields div.field div.radios { + margin: 0 0 0 200px; + padding: 0; +} + +#content div.box div.form div.fields div.field div.select a:hover, #content div.box div.form div.fields div.field div.select a.ui-selectmenu:hover, #content div.box div.action a:hover { + color: #000; + text-decoration: none; +} + +#content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus, #content div.box div.action a.ui-selectmenu-focus { + border: 1px solid #666; +} + +#content div.box div.form div.fields div.field div.checkboxes div.checkbox, #content div.box div.form div.fields div.field div.radios div.radio { + clear: both; + overflow: hidden; + margin: 0; + padding: 8px 0 2px; +} + +#content div.box div.form div.fields div.field div.checkboxes div.checkbox input, #content div.box div.form div.fields div.field div.radios div.radio input { + float: left; + margin: 0; +} + +#content div.box div.form div.fields div.field div.checkboxes div.checkbox label, #content div.box div.form div.fields div.field div.radios div.radio label { + height: 1%; + display: block; + float: left; + margin: 2px 0 0 4px; +} + +div.form div.fields div.field div.button input, +#content div.box div.form div.fields div.buttons input +div.form div.fields div.buttons input, +#content div.box div.action div.button input { + font-size: 11px; + font-weight: 700; + margin: 0; +} + +input.ui-button { + background: #e5e3e3 url("../images/button.png") repeat-x; + border-top: 1px solid #DDD; + border-left: 1px solid #c6c6c6; + border-right: 1px solid #DDD; + border-bottom: 1px solid #c6c6c6; + color: #515151 !important; + outline: none; + margin: 0; + padding: 6px 12px; + -webkit-border-radius: 4px 4px 4px 4px; + -khtml-border-radius: 4px 4px 4px 4px; + border-radius: 4px 4px 4px 4px; + box-shadow: 0 1px 0 #ececec; + cursor: pointer; +} + +input.ui-button:hover { + background: #b4b4b4 url("../images/button_selected.png") repeat-x; + border-top: 1px solid #ccc; + border-left: 1px solid #bebebe; + border-right: 1px solid #b1b1b1; + border-bottom: 1px solid #afafaf; +} + +div.form div.fields div.field div.highlight, #content div.box div.form div.fields div.buttons div.highlight { + display: inline; +} + +#content div.box div.form div.fields div.buttons, div.form div.fields div.buttons { + margin: 10px 0 0 200px; + padding: 0; +} + +#content div.box-left div.form div.fields div.buttons, #content div.box-right div.form div.fields div.buttons, div.box-left div.form div.fields div.buttons, div.box-right div.form div.fields div.buttons { + margin: 10px 0 0; +} + +#content div.box table td.user, #content div.box table td.address { + width: 10%; + text-align: center; +} + +#content div.box div.action div.button, #login div.form div.fields div.field div.input div.link, #register div.form div.fields div.field div.input div.link { + text-align: right; + margin: 6px 0 0; + padding: 0; +} + +#content div.box div.action div.button input.ui-state-hover, #login div.form div.fields div.buttons input.ui-state-hover, #register div.form div.fields div.buttons input.ui-state-hover { + background: #b4b4b4 url("../images/button_selected.png") repeat-x; + border-top: 1px solid #ccc; + border-left: 1px solid #bebebe; + border-right: 1px solid #b1b1b1; + border-bottom: 1px solid #afafaf; + color: #515151; + margin: 0; + padding: 6px 12px; +} + +#content div.box div.pagination div.results, #content div.box div.pagination-wh div.results { + text-align: left; + float: left; + margin: 0; + padding: 0; +} + +#content div.box div.pagination div.results span, #content div.box div.pagination-wh div.results span { + height: 1%; + display: block; + float: left; + background: #ebebeb url("../images/pager.png") repeat-x; + border-top: 1px solid #dedede; + border-left: 1px solid #cfcfcf; + border-right: 1px solid #c4c4c4; + border-bottom: 1px solid #c4c4c4; + color: #4A4A4A; + font-weight: 700; + margin: 0; + padding: 6px 8px; +} + +#content div.box div.pagination ul.pager li.disabled, #content div.box div.pagination-wh a.disabled { + color: #B4B4B4; + padding: 6px; +} + +#login, #register { + width: 520px; + margin: 10% auto 0; + padding: 0; +} + +#login div.color, #register div.color { + clear: both; + overflow: hidden; + background: #FFF; + margin: 10px auto 0; + padding: 3px 3px 3px 0; +} + +#login div.color a, #register div.color a { + width: 20px; + height: 20px; + display: block; + float: left; + margin: 0 0 0 3px; + padding: 0; +} + +#login div.title h5, #register div.title h5 { + color: #fff; + margin: 10px; + padding: 0; +} + +#login div.form div.fields div.field, #register div.form div.fields div.field { + clear: both; + overflow: hidden; + margin: 0; + padding: 0 0 10px; +} + +#login div.form div.fields div.field span.error-message, #register div.form div.fields div.field span.error-message { + height: 1%; + display: block; + color: red; + margin: 8px 0 0; + padding: 0; + max-width: 320px; +} + +#login div.form div.fields div.field div.label label, #register div.form div.fields div.field div.label label { + color: #000; + font-weight: 700; +} + +#login div.form div.fields div.field div.input, #register div.form div.fields div.field div.input { + float: left; + margin: 0; + padding: 0; +} + +#login div.form div.fields div.field div.input input.large { + width: 250px; +} + +#login div.form div.fields div.field div.checkbox, #register div.form div.fields div.field div.checkbox { + margin: 0 0 0 184px; + padding: 0; +} + +#login div.form div.fields div.field div.checkbox label, #register div.form div.fields div.field div.checkbox label { + color: #565656; + font-weight: 700; +} + +#login div.form div.fields div.buttons input, #register div.form div.fields div.buttons input { + color: #000; + font-size: 1em; + font-weight: 700; + margin: 0; +} + +#changeset_content .container .wrapper, #graph_content .container .wrapper { + width: 600px; +} + +#changeset_content .container .date, .ac .match { + font-weight: 700; + padding-top: 5px; + padding-bottom: 5px; +} + +div#legend_container table td, div#legend_choices table td { + border: none !important; + height: 20px !important; + padding: 0 !important; +} + +.q_filter_box { + -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset; + -webkit-border-radius: 4px; + border-radius: 4px; + border: 0 none; + color: #AAAAAA; + margin-bottom: -4px; + margin-top: -4px; + padding-left: 3px; +} + +#node_filter { + border: 0px solid #545454; + color: #AAAAAA; + padding-left: 3px; +} + + +.group_members_wrap { + min-height: 85px; + padding-left: 20px; +} + +.group_members .group_member { + height: 30px; + padding: 0px 0px 0px 0px; +} + +.reviewers_member { + height: 15px; + padding: 0px 0px 0px 10px; +} + +.emails_wrap { + padding: 0px 20px; +} + +.emails_wrap .email_entry { + height: 30px; + padding: 0px 0px 0px 10px; +} +.emails_wrap .email_entry .email { + float: left +} +.emails_wrap .email_entry .email_action { + float: left +} + +.ips_wrap { + padding: 0px 20px; +} + +.ips_wrap .ip_entry { + height: 30px; + padding: 0px 0px 0px 10px; +} +.ips_wrap .ip_entry .ip { + float: left +} +.ips_wrap .ip_entry .ip_action { + float: left +} + + +/*README STYLE*/ + +div.readme { + padding: 0px; +} + +div.readme h2 { + font-weight: normal; +} + +div.readme .readme_box { + background-color: #fafafa; +} + +div.readme .readme_box { + clear: both; + overflow: hidden; + margin: 0; + padding: 0 20px 10px; +} + +div.readme .readme_box h1, div.readme .readme_box h2, div.readme .readme_box h3, div.readme .readme_box h4, div.readme .readme_box h5, div.readme .readme_box h6 { + border-bottom: 0 !important; + margin: 0 !important; + padding: 0 !important; + line-height: 1.5em !important; +} + + +div.readme .readme_box h1:first-child { + padding-top: .25em !important; +} + +div.readme .readme_box h2, div.readme .readme_box h3 { + margin: 1em 0 !important; +} + +div.readme .readme_box h2 { + margin-top: 1.5em !important; + border-top: 4px solid #e0e0e0 !important; + padding-top: .5em !important; +} + +div.readme .readme_box p { + color: black !important; + margin: 1em 0 !important; + line-height: 1.5em !important; +} + +div.readme .readme_box ul { + list-style: disc !important; + margin: 1em 0 1em 2em !important; +} + +div.readme .readme_box ol { + list-style: decimal; + margin: 1em 0 1em 2em !important; +} + +div.readme .readme_box pre, code { + font: 12px "Bitstream Vera Sans Mono","Courier",monospace; +} + +div.readme .readme_box code { + font-size: 12px !important; + background-color: ghostWhite !important; + color: #444 !important; + padding: 0 .2em !important; + border: 1px solid #dedede !important; +} + +div.readme .readme_box pre code { + padding: 0 !important; + font-size: 12px !important; + background-color: #eee !important; + border: none !important; +} + +div.readme .readme_box pre { + margin: 1em 0; + font-size: 12px; + background-color: #eee; + border: 1px solid #ddd; + padding: 5px; + color: #444; + overflow: auto; + -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +div.readme .readme_box table { + display: table; + border-collapse: separate; + border-spacing: 2px; + border-color: gray; + width: auto !important; +} + + +/** RST STYLE **/ + + +div.rst-block { + padding: 0px; +} + +div.rst-block h2 { + font-weight: normal; +} + +div.rst-block { + background-color: #fafafa; +} + +div.rst-block { + clear: both; + overflow: hidden; + margin: 0; + padding: 0 20px 10px; +} + +div.rst-block h1, div.rst-block h2, div.rst-block h3, div.rst-block h4, div.rst-block h5, div.rst-block h6 { + border-bottom: 0 !important; + margin: 0 !important; + padding: 0 !important; + line-height: 1.5em !important; +} + + +div.rst-block h1:first-child { + padding-top: .25em !important; +} + +div.rst-block h2, div.rst-block h3 { + margin: 1em 0 !important; +} + +div.rst-block h2 { + margin-top: 1.5em !important; + border-top: 4px solid #e0e0e0 !important; + padding-top: .5em !important; +} + +div.rst-block p { + color: black !important; + margin: 1em 0 !important; + line-height: 1.5em !important; +} + +div.rst-block ul { + list-style: disc !important; + margin: 1em 0 1em 2em !important; +} + +div.rst-block ol { + list-style: decimal; + margin: 1em 0 1em 2em !important; +} + +div.rst-block pre, code { + font: 12px "Bitstream Vera Sans Mono","Courier",monospace; +} + +div.rst-block code { + font-size: 12px !important; + background-color: ghostWhite !important; + color: #444 !important; + padding: 0 .2em !important; + border: 1px solid #dedede !important; +} + +div.rst-block pre code { + padding: 0 !important; + font-size: 12px !important; + background-color: #eee !important; + border: none !important; +} + +div.rst-block pre { + margin: 1em 0; + font-size: 12px; + background-color: #eee; + border: 1px solid #ddd; + padding: 5px; + color: #444; + overflow: auto; + -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset; + -webkit-border-radius: 3px; + border-radius: 3px; +} + + +/** comment main **/ +.comments { + padding: 10px 20px; +} + +.comments .comment { + border: 1px solid #ddd; + margin-top: 10px; + -webkit-border-radius: 4px; + border-radius: 4px; +} + +.comments .comment .meta { + background: #f8f8f8; + padding: 4px; + border-bottom: 1px solid #ddd; + height: 18px; +} + +.comments .comment .meta img { + vertical-align: middle; +} + +.comments .comment .meta .user { + font-weight: bold; + float: left; + padding: 4px 2px 2px 2px; +} + +.comments .comment .meta .date { + float: left; + padding: 4px 4px 0px 4px; +} + +.comments .comment .text { + background-color: #FAFAFA; +} +.comment .text div.rst-block p { + margin: 0.5em 0px !important; +} + +.comments .comments-number { + padding: 0px 0px 10px 0px; + font-weight: bold; + color: #666; + font-size: 16px; +} + +/** comment form **/ + +.status-block { + min-height: 80px; + clear: both +} + +.comment-form .clearfix { + background: #EEE; + -webkit-border-radius: 4px; + border-radius: 4px; + padding: 10px; +} + +div.comment-form { + margin-top: 20px; +} + +.comment-form strong { + display: block; + margin-bottom: 15px; +} + +.comment-form textarea { + width: 100%; + height: 100px; + font-family: 'Monaco', 'Courier', 'Courier New', monospace; +} + +form.comment-form { + margin-top: 10px; + margin-left: 10px; +} + +.comment-form-submit { + margin-top: 5px; + margin-left: 525px; +} + +.file-comments { + display: none; +} + +.comment-form .comment { + margin-left: 10px; +} + +.comment-form .comment-help { + padding: 0px 0px 5px 0px; + color: #666; +} + +.comment-form .comment-button { + padding-top: 5px; +} + +.add-another-button { + margin-left: 10px; + margin-top: 10px; + margin-bottom: 10px; +} + +.comment .buttons { + float: right; + padding: 2px 2px 0px 0px; +} + + +.show-inline-comments { + position: relative; + top: 1px +} + +/** comment inline form **/ +.comment-inline-form .overlay { + display: none; +} +.comment-inline-form .overlay.submitting { + display: block; + background: none repeat scroll 0 0 white; + font-size: 16px; + opacity: 0.5; + position: absolute; + text-align: center; + vertical-align: top; + +} +.comment-inline-form .overlay.submitting .overlay-text { + width: 100%; + margin-top: 5%; +} + +.comment-inline-form .clearfix { + background: #EEE; + -webkit-border-radius: 4px; + border-radius: 4px; + padding: 5px; +} + +div.comment-inline-form { + padding: 4px 0px 6px 0px; +} + +.comment-inline-form strong { + display: block; + margin-bottom: 15px; +} + +.comment-inline-form textarea { + width: 100%; + height: 100px; + font-family: 'Monaco', 'Courier', 'Courier New', monospace; +} + +form.comment-inline-form { + margin-top: 10px; + margin-left: 10px; +} + +.comment-inline-form-submit { + margin-top: 5px; + margin-left: 525px; +} + +.file-comments { + display: none; +} + +.comment-inline-form .comment { + margin-left: 10px; +} + +.comment-inline-form .comment-help { + padding: 0px 0px 2px 0px; + color: #666666; + font-size: 10px; +} + +.comment-inline-form .comment-button { + padding-top: 5px; +} + +/** comment inline **/ +.inline-comments { + padding: 10px 20px; +} + +.inline-comments div.rst-block { + clear: both; + overflow: hidden; + margin: 0; + padding: 0 20px 0px; +} +.inline-comments .comment { + border: 1px solid #ddd; + -webkit-border-radius: 4px; + border-radius: 4px; + margin: 3px 3px 5px 5px; + background-color: #FAFAFA; +} +.inline-comments .add-comment { + padding: 2px 4px 8px 5px; +} + +.inline-comments .comment-wrapp { + padding: 1px; +} +.inline-comments .comment .meta { + background: #f8f8f8; + padding: 4px; + border-bottom: 1px solid #ddd; + height: 20px; +} + +.inline-comments .comment .meta img { + vertical-align: middle; +} + +.inline-comments .comment .meta .user { + font-weight: bold; + float: left; + padding: 3px; +} + +.inline-comments .comment .meta .date { + float: left; + padding: 3px; +} + +.inline-comments .comment .text { + background-color: #FAFAFA; +} + +.inline-comments .comments-number { + padding: 0px 0px 10px 0px; + font-weight: bold; + color: #666; + font-size: 16px; +} +.inline-comments-button .add-comment { + margin: 2px 0px 8px 5px !important +} + +.notification-paginator { + padding: 0px 0px 4px 16px; +} + +#context-pages .pull-request span, +.menu_link_notifications { + padding: 4px 4px !important; + text-align: center; + color: #888 !important; + background-color: #DEDEDE !important; + border-radius: 4px !important; + -webkit-border-radius: 4px !important; +} + +#context-pages .forks span, +.menu_link_notifications { + padding: 4px 4px !important; + text-align: center; + color: #888 !important; + background-color: #DEDEDE !important; + border-radius: 4px !important; + -webkit-border-radius: 4px !important; +} + + +.notification-header { + padding-top: 6px; +} +.notification-header .desc { + font-size: 16px; + height: 24px; + float: left +} +.notification-list .container.unread { + background: none repeat scroll 0 0 rgba(255, 255, 180, 0.6); +} +.notification-header .gravatar { + background: none repeat scroll 0 0 transparent; + padding: 0px 0px 0px 8px; +} +.notification-list .container .notification-header .desc { + font-weight: bold; + font-size: 17px; +} +.notification-table { + border: 1px solid #ccc; + -webkit-border-radius: 6px 6px 6px 6px; + border-radius: 6px 6px 6px 6px; + clear: both; + margin: 0px 20px 0px 20px; +} +.notification-header .delete-notifications { + float: right; + padding-top: 8px; + cursor: pointer; +} +.notification-header .read-notifications { + float: right; + padding-top: 8px; + cursor: pointer; +} +.notification-subject { + clear: both; + border-bottom: 1px solid #eee; + padding: 5px 0px 5px 38px; +} + +.notification-body { + clear: both; + margin: 34px 2px 2px 8px +} + +/**** +PULL REQUESTS +*****/ +.pullrequests_section_head { + padding: 10px 10px 10px 0px; + font-size: 16px; + font-weight: bold; +} + +h3.closed, +#pullrequests_container li.closed a + { + color: #555; + background: #eee; +} + +div.pr-title { + font-size: 1.6em; +} + +div.pr { + border-bottom: 1px solid #DDD; + margin: 0px 20px; + padding: 10px 4px; +} +div.pr-closed { + background-color: rgba(245,245,245,0.5); +} + +span.pr-closed-tag { + margin-bottom: 1px; + margin-right: 1px; + padding: 1px 3px; + font-size: 10px; + padding: 1px 3px 1px 3px; + font-size: 10px; + color: #336699; + white-space: nowrap; + -webkit-border-radius: 4px; + border-radius: 4px; + border: 1px solid #d9e8f8; + line-height: 1.5em; +} + +/**** + PERMS +*****/ +#perms .perms_section_head { + padding: 10px 10px 10px 0px; + font-size: 16px; + font-weight: bold; +} + +#perms .perm_tag { + padding: 1px 3px 1px 3px; + font-size: 10px; + font-weight: bold; + text-transform: uppercase; + white-space: nowrap; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +#perms .perm_tag.admin { + background-color: #B94A48; + color: #ffffff; +} + +#perms .perm_tag.write { + background-color: #DB7525; + color: #ffffff; +} + +#perms .perm_tag.read { + background-color: #468847; + color: #ffffff; +} + +#perms .perm_tag.none { + background-color: #bfbfbf; + color: #ffffff; +} + +.perm-gravatar { + vertical-align: middle; + padding: 2px; +} +.perm-gravatar-ac { + vertical-align: middle; + padding: 2px; + width: 14px; + height: 14px; +} + +/***************************************************************************** + DIFFS CSS +******************************************************************************/ +.diff-collapse { + text-align: center; + margin-bottom: -15px; +} +.diff-collapse-button { + cursor: pointer; + color: #666; + font-size: 16px; +} +.diff-container { + +} + +.diff-container.hidden { + display: none; + overflow: hidden; +} + + +div.diffblock { + overflow: auto; + padding: 0px; + border: 1px solid #ccc; + background: #f8f8f8; + font-size: 100%; + line-height: 100%; + /* new */ + line-height: 125%; + -webkit-border-radius: 6px 6px 0px 0px; + border-radius: 6px 6px 0px 0px; +} +div.diffblock.margined { + margin: 0px 20px 0px 20px; +} +div.diffblock .code-header { + border-bottom: 1px solid #CCCCCC; + background: #EEEEEE; + 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-title { + padding: 0px 0px 10px 5px !important; + margin: 0 !important; +} +div.diffblock .code-header .hash { + float: left; + padding: 2px 0 0 2px; +} +div.diffblock .code-header .date { + float: left; + text-transform: uppercase; + padding: 2px 0px 0px 2px; +} +div.diffblock .code-header div { + margin-left: 4px; + 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; +} +div.diffblock pre.raw { + background: #FFFFFF; + color: #000000; +} +table.code-difftable { + border-collapse: collapse; + width: 99%; + border-radius: 0px !important; +} +table.code-difftable td { + padding: 0 !important; + background: none !important; + border: 0 !important; + vertical-align: baseline !important +} +table.code-difftable .context { + background: none repeat scroll 0 0 #DDE7EF; +} +table.code-difftable .add { + background: none repeat scroll 0 0 #DDFFDD; +} +table.code-difftable .add ins { + background: none repeat scroll 0 0 #AAFFAA; + text-decoration: none; +} +table.code-difftable .del { + background: none repeat scroll 0 0 #FFDDDD; +} +table.code-difftable .del del { + background: none repeat scroll 0 0 #FFAAAA; + text-decoration: none; +} + +/** LINE NUMBERS **/ +table.code-difftable .lineno { + + padding-left: 2px; + padding-right: 2px; + text-align: right; + width: 32px; + -moz-user-select: none; + -webkit-user-select: none; + border-right: 1px solid #CCC !important; + border-left: 0px solid #CCC !important; + border-top: 0px solid #CCC !important; + border-bottom: none !important; + vertical-align: middle !important; + +} +table.code-difftable .lineno.new { +} +table.code-difftable .lineno.old { +} +table.code-difftable .lineno a { + color: #747474 !important; + font: 11px "Bitstream Vera Sans Mono",Monaco,"Courier New",Courier,monospace !important; + letter-spacing: -1px; + text-align: right; + padding-right: 2px; + cursor: pointer; + display: block; + width: 32px; +} + +table.code-difftable .lineno-inline { + background: none repeat scroll 0 0 #FFF !important; + padding-left: 2px; + padding-right: 2px; + text-align: right; + width: 30px; + -moz-user-select: none; + -webkit-user-select: none; +} + +/** CODE **/ +table.code-difftable .code { + display: block; + width: 100%; +} +table.code-difftable .code td { + margin: 0; + padding: 0; +} +table.code-difftable .code pre { + margin: 0; + padding: 0; + height: 17px; + line-height: 17px; +} + + +.diffblock.margined.comm .line .code:hover { + background-color: #FFFFCC !important; + cursor: pointer !important; + background-image: url("../images/icons/comment_add.png") !important; + background-repeat: no-repeat !important; + background-position: right !important; + background-position: 0% 50% !important; +} +.diffblock.margined.comm .line .code.no-comment:hover { + background-image: none !important; + cursor: auto !important; + background-color: inherit !important; +} + +div.comment:target>.comment-wrapp { + border: solid 2px #ee0 !important; +} + +.lineno:target a { + border: solid 2px #ee0 !important; + margin: -2px; +} diff --git a/rhodecode/public/images/icons/flag_status_approved.png b/rhodecode/public/images/icons/flag_status_approved.png index e4bc611f87b454e5969078aa167f48798adfd208..8179fa62d5503a0e790a046c97cde561f1d0da0a GIT binary patch literal 3222 zc$@*23~BR;P)KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde00d`2O+f$vv5tKEQIh}w03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(` z>RI+y?e7jKeZ#YO-C0kcU&K~#9!)RVnV8&MF2&;42Uj|F425{Z&c6@gF+5JDJ? zgeV|ox;#KalqRWDMan}^0v1(3c>pI>1XxBCNC?rSu+rGryBG?4jlJu;_oj_tlN7Ep zCdWA(iDD9NR@3Z7CgQd3% zZsNsj&(`NY&3f}*#>i^*R;}~>{x$Hf%SO9tlHHZr}?xkTK6OCa@dXRH!4Y#%791wil3Vw zd7#O=%R~?uhr{PQ)J~5IbF3BTg!rIcA~#5x-rAG=_E);cPb1)Cb*bWJX;q|J`tqIB^I`?j#HEuD4!PWS z@45HfnGg{<`wBT8oK+1AWM^KYxd5u@*(jX&6k|gORB#Dr+0kf1h#MpBk zVK^L;q9|$moGgky=Qf>ADGGg!R5f=Cqsip`u_P<27~HSzIE+!TC||(z^CY}5<{rI` z#|f|cC4s~DeY(Hv-zchjg)PLH9n9Bb*|xo3tyWJA!&u@H9LJ$vuXovQxA$=W^yhyt zU#HABVp-N^7>0VY*}QJGTDR~`P$bDDK+->bOdkRa09Ti#50*_Jxc~qF07*qoM6N<$ Ef=dg~xBvhE diff --git a/rhodecode/public/images/icons/flag_status_rejected.png b/rhodecode/public/images/icons/flag_status_rejected.png index e8a602da7b17a323b2c9afe3d8aac62cb717a0b8..c33f7b0c3e956b53bd0f2c047d4a7a6e323c9b3a GIT binary patch literal 495 zc$@+60TBL)P)eW_ISy?7Uqfgn&s*f(dP60&3?h?i_2l#1S!sjQB#lA&i;J)823_`8@+n4hrB~ zUAb{WZ#4+WpAp&6Kg^ z6OL%@`K`5}PwG&)fI?7(fTqSE=N304#4-i)O%sTLSvl1+pbR)zpJ2b=ip!yC8D-?! zE5y?$mjHO^)flSB)VerzNF#;?@D3ORWVa5_i5c*JIgATD@_|+Lo0TQV_P60k$AA_v z&*3IIEI{M2k~nSOr+1$3vbNiaU}%TXZ^ltC z=g!Tjxkaq{Zx-pb%0%r-t_qHbxq!=XmR-|dhk}U70>%8FR$0M}HnYHs00RIM>zx$4 SyR^*!0000= 0) + if (!document.createElement("canvas").getContext) this.canvas = window.G_vmlCanvasManager.initElement(this.canvas); this.ctx = this.canvas.getContext('2d'); this.ctx.strokeStyle = 'rgb(0, 0, 0)'; diff --git a/rhodecode/public/js/pyroutes_map.js b/rhodecode/public/js/pyroutes_map.js new file mode 100644 --- /dev/null +++ b/rhodecode/public/js/pyroutes_map.js @@ -0,0 +1,11 @@ +//Format is key == name +// "mark_error_fixed": [ # key +// "/mark_error_fixed/%(error_id)s", #url template +// [ +// "error_id" # list of args +// ] +// ], +// +var PROUTES_MAP = { + +} \ 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 @@ -86,19 +86,6 @@ var prevElementSibling = function( el ) } } -var setSelectValue = function(select, val){ - var selection = YUD.get(select); - - // select element - for(var i=0;i + */ +var pyroutes = (function() { + // access global map defined in special file pyroutes + var matchlist = PROUTES_MAP; + var sprintf = (function() { + function get_type(variable) { + return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase(); + } + function str_repeat(input, multiplier) { + for (var output = []; multiplier > 0; output[--multiplier] = input) {/* do nothing */} + return output.join(''); + } + var str_format = function() { + if (!str_format.cache.hasOwnProperty(arguments[0])) { + str_format.cache[arguments[0]] = str_format.parse(arguments[0]); + } + return str_format.format.call(null, str_format.cache[arguments[0]], arguments); + }; + + str_format.format = function(parse_tree, argv) { + var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length; + for (i = 0; i < tree_length; i++) { + node_type = get_type(parse_tree[i]); + if (node_type === 'string') { + output.push(parse_tree[i]); + } + else if (node_type === 'array') { + match = parse_tree[i]; // convenience purposes only + if (match[2]) { // keyword argument + arg = argv[cursor]; + for (k = 0; k < match[2].length; k++) { + if (!arg.hasOwnProperty(match[2][k])) { + throw(sprintf('[sprintf] property "%s" does not exist', match[2][k])); + } + arg = arg[match[2][k]]; + } + } + else if (match[1]) { // positional argument (explicit) + arg = argv[match[1]]; + } + else { // positional argument (implicit) + arg = argv[cursor++]; + } + + if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) { + throw(sprintf('[sprintf] expecting number but found %s', get_type(arg))); + } + switch (match[8]) { + case 'b': arg = arg.toString(2); break; + case 'c': arg = String.fromCharCode(arg); break; + case 'd': arg = parseInt(arg, 10); break; + case 'e': arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential(); break; + case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg); break; + case 'o': arg = arg.toString(8); break; + case 's': arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg); break; + case 'u': arg = Math.abs(arg); break; + case 'x': arg = arg.toString(16); break; + case 'X': arg = arg.toString(16).toUpperCase(); break; + } + arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+'+ arg : arg); + pad_character = match[4] ? match[4] == '0' ? '0' : match[4].charAt(1) : ' '; + pad_length = match[6] - String(arg).length; + pad = match[6] ? str_repeat(pad_character, pad_length) : ''; + output.push(match[5] ? arg + pad : pad + arg); + } + } + return output.join(''); + }; + + str_format.cache = {}; + + str_format.parse = function(fmt) { + var _fmt = fmt, match = [], parse_tree = [], arg_names = 0; + while (_fmt) { + if ((match = /^[^\x25]+/.exec(_fmt)) !== null) { + parse_tree.push(match[0]); + } + else if ((match = /^\x25{2}/.exec(_fmt)) !== null) { + parse_tree.push('%'); + } + else if ((match = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(_fmt)) !== null) { + if (match[2]) { + arg_names |= 1; + var field_list = [], replacement_field = match[2], field_match = []; + if ((field_match = /^([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) { + field_list.push(field_match[1]); + while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') { + if ((field_match = /^\.([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) { + field_list.push(field_match[1]); + } + else if ((field_match = /^\[(\d+)\]/.exec(replacement_field)) !== null) { + field_list.push(field_match[1]); + } + else { + throw('[sprintf] huh?'); + } + } + } + else { + throw('[sprintf] huh?'); + } + match[2] = field_list; + } + else { + arg_names |= 2; + } + if (arg_names === 3) { + throw('[sprintf] mixing positional and named placeholders is not (yet) supported'); + } + parse_tree.push(match); + } + else { + throw('[sprintf] huh?'); + } + _fmt = _fmt.substring(match[0].length); + } + return parse_tree; + }; + + return str_format; + })(); + + var vsprintf = function(fmt, argv) { + argv.unshift(fmt); + return sprintf.apply(null, argv); + }; + return { + 'url': function(route_name, params) { + var result = route_name; + if (typeof(params) != 'object'){ + params = {}; + } + if (matchlist.hasOwnProperty(route_name)) { + var route = matchlist[route_name]; + // param substitution + for(var i=0; i < route[1].length; i++) { + + if (!params.hasOwnProperty(route[1][i])) + throw new Error(route[1][i] + ' missing in "' + route_name + '" route generation'); + } + result = sprintf(route[0], params); + + var ret = []; + //extra params => GET + for(param in params){ + if (route[1].indexOf(param) == -1){ + ret.push(encodeURIComponent(param) + "=" + encodeURIComponent(params[param])); + } + } + var _parts = ret.join("&"); + if(_parts){ + result = result +'?'+ _parts + } + } + + return result; + }, + 'register': function(route_name, route_tmpl, req_params) { + if (typeof(req_params) != 'object') { + req_params = []; + } + //fix escape + route_tmpl = unescape(route_tmpl); + keys = []; + for (o in req_params){ + keys.push(req_params[o]) + } + matchlist[route_name] = [ + route_tmpl, + keys + ] + }, + '_routes': function(){ + return matchlist; + } + } +})(); @@ -257,7 +425,9 @@ var ajaxGET = function(url,success) { var callback = { success: success, failure: function (o) { - alert("error"); + if (o.status != 0) { + alert("error: " + o.statusText); + }; }, }; @@ -333,14 +503,15 @@ var show_changeset_tooltip = function(){ YUD.setAttribute(target,'id',ttid); YUD.setAttribute(target, 'title',_TM['loading...']); YAHOO.yuitip.main.set_listeners(target); - YAHOO.yuitip.main.show_yuitip(e, target); - ajaxGET(LAZY_CS_URL.replace('__NAME__',repo_name).replace('__REV__', rid), success) + YAHOO.yuitip.main.show_yuitip(e, target); + var url = pyroutes.url('changeset_info', {"repo_name":repo_name, "revision": rid}); + ajaxGET(url, success) } }); }; var onSuccessFollow = function(target){ - var f = YUD.get(target.id); + var f = YUD.get(target); var f_cnt = YUD.get('current_followers_count'); if(YUD.hasClass(f, 'follow')){ @@ -391,6 +562,21 @@ var toggleFollowingRepo = function(targe return false; } +var showRepoSize = function(target, repo_name, token){ + var args= 'auth_token='+token; + + if(!YUD.hasClass(target, 'loaded')){ + YUD.get(target).innerHTML = _TM['Loading ...']; + var url = pyroutes.url('repo_size', {"repo_name":repo_name}); + YUC.asyncRequest('POST',url,{ + success:function(o){ + YUD.get(target).innerHTML = JSON.parse(o.responseText); + YUD.addClass(target, 'loaded'); + } + },args); + } + return false; +} /** * TOOLTIP IMPL. @@ -513,10 +699,6 @@ var q_filter = function(target,nodes,dis var q_filter_field = YUD.get(target); var F = YAHOO.namespace(target); - YUE.on(q_filter_field,'click',function(){ - q_filter_field.value = ''; - }); - YUE.on(q_filter_field,'keyup',function(e){ clearTimeout(F.filterTimeout); F.filterTimeout = setTimeout(F.updateFilter,600); @@ -710,27 +892,9 @@ var deleteComment = function(comment_id) ajaxPOST(url,postData,success); } -var updateReviewers = function(reviewers_ids){ - if (reviewers_ids === undefined){ - var reviewers_ids = []; - var ids = YUQ('#review_members input'); - for(var i=0; i{2}'.format(t,new_url,n_hl)); } if(match.length >= matches_max){ - match.push('{0}'.format(_TM['search truncated'])); + match.push('{0}'.format(_TM['Search truncated'])); } } } @@ -943,7 +1099,7 @@ var fileBrowserListeners = function(curr YUD.setStyle('tbody_filtered','display',''); if (match.length==0){ - match.push('{0}'.format(_TM['no matching files'])); + match.push('{0}'.format(_TM['No matching files'])); } YUD.get('tbody_filtered').innerHTML = match.join(""); @@ -1130,7 +1286,7 @@ var MembersAutoComplete = function (divi return matches; }; - // Define a custom search function for the DataSource of usersGroups + // Define a custom search function for the DataSource of userGroups var matchGroups = function (sQuery) { // Case insensitive matching var query = sQuery.toLowerCase(); @@ -1473,6 +1629,56 @@ var MentionsAutoComplete = function (div }; } +var addReviewMember = function(id,fname,lname,nname,gravatar_link){ + var members = YUD.get('review_members'); + var tmpl = '
  • '+ + '
    '+ + '
    gravatar
    '+ + '
    {1}
    '+ + ''+ + ''+ + '
    '+ + '
  • ' ; + var displayname = "{0} {1} ({2})".format(fname,lname,nname); + var element = tmpl.format(gravatar_link,displayname,id); + // check if we don't have this ID already in + var ids = []; + var _els = YUQ('#review_members li'); + for (el in _els){ + ids.push(_els[el].id) + } + if(ids.indexOf('reviewer_'+id) == -1){ + //only add if it's not there + members.innerHTML += element; + } + +} + +var removeReviewMember = function(reviewer_id, repo_name, pull_request_id){ + var el = YUD.get('reviewer_{0}'.format(reviewer_id)); + if (el.parentNode !== undefined){ + el.parentNode.removeChild(el); + } +} + +var updateReviewers = function(reviewers_ids, repo_name, pull_request_id){ + if (reviewers_ids === undefined){ + var reviewers_ids = []; + var ids = YUQ('#review_members input'); + for(var i=0; i'+ - '
    gravatar
    '+ - '
    {1}
    '+ - ''+ - ''+ - '
    '+ - '' - - var displayname = "{0} {1} ({2})".format(oData.fname,oData.lname,oData.nname); - var element = tmpl.format(oData.gravatar_lnk,displayname,oData.id); - members.innerHTML += element; + addReviewMember(oData.id, oData.fname, oData.lname, oData.nname, + oData.gravatar_lnk); myAC.dataSource.cache.push(oData.id); YUD.get('user').value = '' } @@ -1636,7 +1828,6 @@ var PullRequestAutoComplete = function ( }; } - /** * QUICK REPO MENU */ @@ -1787,14 +1978,13 @@ var dateSort = function(a, b, desc, fiel return compState; }; -var linkSort = function(a, b, desc, field) { +var usernamelinkSort = function(a, b, desc, field) { var a_ = fromHTML(a.getData(field)); - var b_ = fromHTML(a.getData(field)); + var b_ = fromHTML(b.getData(field)); // extract url text from string nodes a_ = get_link(a_) b_ = get_link(b_) - var comp = YAHOO.util.Sort.compare; var compState = comp(a_, b_, desc); return compState; @@ -1849,7 +2039,7 @@ var MultiSelectWidget = function(selecte av_cache.push(node); } - //fill available only with those not in choosen + //fill available only with those not in chosen ac.options.length=0; tmp_cache = new Array(); @@ -1872,7 +2062,7 @@ var MultiSelectWidget = function(selecte function prompts_action_callback(e){ - var choosen = YUD.get(selected_container); + var chosen = YUD.get(selected_container); var available = YUD.get(available_container); //get checked and unchecked options from field @@ -1915,30 +2105,30 @@ var MultiSelectWidget = function(selecte // add action if (this.id=='add_element'){ var c = get_checked(available); - add_to(choosen,c[0]); + add_to(chosen,c[0]); fill_with(available,c[1]); } // remove action if (this.id=='remove_element'){ - var c = get_checked(choosen); + var c = get_checked(chosen); add_to(available,c[0]); - fill_with(choosen,c[1]); + fill_with(chosen,c[1]); } // add all elements if(this.id=='add_all_elements'){ for(var i=0; node = available.options[i];i++){ - choosen.appendChild(new Option(node.text, + chosen.appendChild(new Option(node.text, node.value, false, false)); } available.options.length = 0; } //remove all elements if(this.id=='remove_all_elements'){ - for(var i=0; node = choosen.options[i];i++){ + for(var i=0; node = chosen.options[i];i++){ available.appendChild(new Option(node.text, node.value, false, false)); } - choosen.options.length = 0; + chosen.options.length = 0; } } @@ -1948,10 +2138,33 @@ var MultiSelectWidget = function(selecte prompts_action_callback) if (form_id !== undefined) { YUE.addListener(form_id,'submit',function(){ - var choosen = YUD.get(selected_container); - for (var i = 0; i < choosen.options.length; i++) { - choosen.options[i].selected = 'selected'; + var chosen = YUD.get(selected_container); + for (var i = 0; i < chosen.options.length; i++) { + chosen.options[i].selected = 'selected'; } }); } } + + +// global hooks after DOM is loaded + +YUE.onDOMReady(function(){ + YUE.on(YUQ('.diff-collapse-button'), 'click', function(e){ + var button = e.currentTarget; + var t = YUD.get(button).getAttribute('target'); + console.log(t); + if(YUD.hasClass(t, 'hidden')){ + YUD.removeClass(t, 'hidden'); + YUD.get(button).innerHTML = "↑ {0} ↑".format(_TM['Collapse diff']); + } + else if(!YUD.hasClass(t, 'hidden')){ + YUD.addClass(t, 'hidden'); + YUD.get(button).innerHTML = "↓ {0} ↓".format(_TM['Expand diff']); + } + }); + + + +}); + 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 @@ -2,7 +2,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('Admin journal')} - ${c.rhodecode_name} + ${_('Admin journal')} · ${c.rhodecode_name} <%def name="breadcrumbs_links()"> @@ -16,39 +16,39 @@ <%def name="page_nav()"> - ${self.menu('admin')} + ${self.menu('admin')} <%def name="main()">
    - -
    - ${self.breadcrumbs()} -
    - -
    -
    - ${c.log_data} -
    -
    + +
    + ${self.breadcrumbs()} +
    + +
    +
    + ${c.log_data} +
    +
    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 @@ -1,40 +1,40 @@ ## -*- coding: utf-8 -*- %if c.users_log: - - - - - - - + + + + + + + - %for cnt,l in enumerate(c.users_log): - - + - - + + - - - - %endfor + + + + %endfor
    ${_('Username')}${_('Action')}${_('Repository')}${_('Date')}${_('From IP')}
    ${_('Username')}${_('Action')}${_('Repository')}${_('Date')}${_('From IP')}
    + %for cnt,l in enumerate(c.users_log): +
    %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]())} -
    -
    - %if l.repository is not None: - ${h.link_to(l.repository.repo_name,h.url('summary_home',repo_name=l.repository.repo_name))} - %else: - ${l.repository_name} - %endif - ${h.action_parser(l)[0]()} +
    + ${h.literal(h.action_parser(l)[1]())} +
    +
    + %if l.repository is not None: + ${h.link_to(l.repository.repo_name,h.url('summary_home',repo_name=l.repository.repo_name))} + %else: + ${l.repository_name} + %endif + ${h.fmt_date(l.action_date)}${l.user_ip}
    ${h.fmt_date(l.action_date)}${l.user_ip}
    diff --git a/rhodecode/templates/admin/notifications/show_notification.html b/rhodecode/templates/admin/notifications/show_notification.html --- a/rhodecode/templates/admin/notifications/show_notification.html +++ b/rhodecode/templates/admin/notifications/show_notification.html @@ -2,7 +2,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('Show notification')} ${c.rhodecode_user.username} - ${c.rhodecode_name} + ${_('Show notification')} ${c.rhodecode_user.username} · ${c.rhodecode_name} <%def name="breadcrumbs_links()"> @@ -39,7 +39,12 @@ -
    ${h.rst_w_mentions(c.notification.body)}
    +
    +
    ${h.literal(c.notification.subject)}
    + %if c.notification.body: + ${h.rst_w_mentions(c.notification.body)} + %endif +
    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 @@ -2,7 +2,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('Permissions administration')} - ${c.rhodecode_name} + ${_('Permissions administration')} · ${c.rhodecode_name} <%def name="breadcrumbs_links()"> @@ -12,7 +12,7 @@ <%def name="page_nav()"> - ${self.menu('admin')} + ${self.menu('admin')} <%def name="main()"> @@ -36,49 +36,49 @@ -
    -
    - -
    -
    - ${h.select('default_repo_perm','',c.repo_perms_choices)} +
    +
    + +
    +
    + ${h.select('default_repo_perm','',c.repo_perms_choices)} - ${h.checkbox('overwrite_default_repo','true')} - -
    -
    -
    -
    - -
    -
    - ${h.select('default_group_perm','',c.group_perms_choices)} + ${h.checkbox('overwrite_default_repo','true')} + +
    +
    +
    +
    + +
    +
    + ${h.select('default_group_perm','',c.group_perms_choices)} ${h.checkbox('overwrite_default_group','true')} + title="${h.tooltip(_('All default permissions on each repository group will be reset to chosen permission, note that all custom default permission on repository groups will be lost'))}"> + ${_('Overwrite existing settings')} -
    -
    -
    -
    - -
    -
    - ${h.select('default_register','',c.register_choices)} -
    -
    +
    +
    +
    +
    + +
    +
    + ${h.select('default_register','',c.register_choices)} +
    +
    -
    - ${h.select('default_create','',c.create_choices)} -
    +
    + ${h.select('default_create','',c.create_choices)} +
    @@ -88,10 +88,10 @@ ${h.select('default_fork','',c.fork_choices)}
    -
    +
    ${h.submit('save',_('Save'),class_="ui-btn large")} ${h.reset('reset',_('Reset'),class_="ui-btn large")} -
    +
    ${h.end_form()} @@ -104,63 +104,8 @@ ## permissions overview -
    - %for section in sorted(c.perm_user.permissions.keys()): -
    ${section.replace("_"," ").capitalize()}
    - %if not c.perm_user.permissions[section]: - ${_('Nothing here yet')} - %else: -
    - - - - - - - - - %for k in c.perm_user.permissions[section]: - <% - if section != 'global': - section_perm = c.perm_user.permissions[section].get(k) - _perm = section_perm.split('.')[-1] - else: - _perm = section_perm = None - %> - - - - - - %endfor - -
    ${_('Name')}${_('Permission')}${_('Edit Permission')}
    - %if section == 'repositories': - ${k} - %elif section == 'repositories_groups': - ${k} - %else: - ${h.get_permission_name(k)} - %endif - - %if section == 'global': - ${h.bool2icon(k.split('.')[-1] != 'none')} - %else: - ${section_perm} - %endif - - %if section == 'repositories': - ${_('edit')} - %elif section == 'repositories_groups': - ${_('edit')} - %else: - -- - %endif -
    -
    - %endif - %endfor -
    + <%include file="/base/perms_summary.html"/> +
    @@ -180,7 +125,7 @@ ${h.hidden('del_ip',ip.ip_id)} ${h.hidden('default_user', 'True')} ${h.submit('remove_',_('delete'),id="remove_ip_%s" % ip.ip_id, - class_="delete_icon action_button", onclick="return confirm('"+_('Confirm to delete this ip: %s') % ip.ip_addr+"');")} + class_="delete_icon action_button", onclick="return confirm('"+_('Confirm to delete this ip: %s') % ip.ip_addr+"');")} ${h.end_form()} diff --git a/rhodecode/templates/admin/repos/repo_add.html b/rhodecode/templates/admin/repos/repo_add.html --- a/rhodecode/templates/admin/repos/repo_add.html +++ b/rhodecode/templates/admin/repos/repo_add.html @@ -2,27 +2,33 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('Add repository')} - ${c.rhodecode_name} + ${_('Add repository')} · ${c.rhodecode_name} <%def name="breadcrumbs_links()"> + %if c.rhodecode_user.is_admin: ${h.link_to(_('Admin'),h.url('admin_home'))} » ${h.link_to(_('Repositories'),h.url('repos'))} + %else: + ${_('Admin')} » - ${_('add new')} + ${_('Repositories')} + %endif + » + ${_('Add new')} <%def name="page_nav()"> - ${self.menu('admin')} + ${self.menu('admin')} <%def name="main()"> -
    - -
    - ${self.breadcrumbs()} -
    +
    + +
    + ${self.breadcrumbs()} +
    <%include file="repo_add_base.html"/>
    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 @@ -9,8 +9,8 @@
    - ${h.text('repo_name',c.new_repo,class_="small")} - %if not h.HasPermissionAll('hg.admin')('repo create form'): + ${h.text('repo_name',class_="small")} + %if not c.rhodecode_user.is_admin: ${h.hidden('user_created',True)} %endif
    @@ -70,7 +70,7 @@
    - ${h.submit('add',_('add'),class_="ui-btn large")} + ${h.submit('add',_('Add'),class_="ui-btn large")}
    diff --git a/rhodecode/templates/admin/repos/repo_add_create_repository.html b/rhodecode/templates/admin/repos/repo_add_create_repository.html deleted file mode 100644 --- a/rhodecode/templates/admin/repos/repo_add_create_repository.html +++ /dev/null @@ -1,24 +0,0 @@ -## -*- coding: utf-8 -*- -<%inherit file="/base/base.html"/> - -<%def name="title()"> - ${_('Add repository')} - ${c.rhodecode_name} - - -<%def name="breadcrumbs_links()"> - ${_('add new repository')} - - -<%def name="page_nav()"> - ${self.menu('admin')} - - -<%def name="main()"> -
    - -
    - ${self.breadcrumbs()} -
    - <%include file="repo_add_base.html"/> -
    - 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 @@ -1,23 +1,23 @@ ## -*- coding: utf-8 -*- +## +## See also repo_settings.html +## <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('Edit repository')} ${c.repo_info.repo_name} - ${c.rhodecode_name} + ${_('Edit repository')} ${c.repo_info.repo_name} · ${c.rhodecode_name} <%def name="breadcrumbs_links()"> - ${h.link_to(_('Admin'),h.url('admin_home'))} - » - ${h.link_to(_('Repositories'),h.url('repos'))} - » - ${_('edit')} » ${h.link_to(c.repo_info.just_name,h.url('summary_home',repo_name=c.repo_name))} + ${_('Settings')} <%def name="page_nav()"> - ${self.menu('admin')} + ${self.menu('admin')} <%def name="main()"> +${self.context_bar('options')}
    @@ -35,24 +35,24 @@ ${h.text('repo_name',class_="medium")}
    -
    -
    - -
    -
    - ${h.text('clone_uri',class_="medium")} +
    +
    + +
    +
    + ${h.text('clone_uri',class_="medium")} ${_('Optional http[s] url from which repository should be cloned.')} -
    -
    -
    -
    - -
    -
    - ${h.select('repo_group','',c.repo_groups,class_="medium")} +
    +
    +
    +
    + +
    +
    + ${h.select('repo_group','',c.repo_groups,class_="medium")} ${_('Optional select a group to put this repository into.')} -
    -
    +
    +
    @@ -128,162 +128,268 @@
    - -
    -
    - -
    -
    - <%include file="repo_edit_perms.html"/> -
    - -
    - ${h.submit('save',_('Save'),class_="ui-btn large")} - ${h.reset('reset',_('Reset'),class_="ui-btn large")} -
    + %if c.visual.repository_fields: + ## EXTRA FIELDS + %for field in c.repo_fields: +
    +
    + +
    +
    + ${h.text(field.field_key_prefixed, field.field_value, class_='medium')} + %if field.field_desc: + ${field.field_desc} + %endif +
    +
    + %endfor + %endif +
    + ${h.submit('save',_('Save'),class_="ui-btn large")} + ${h.reset('reset',_('Reset'),class_="ui-btn large")}
    -
    + ${h.end_form()}
    -
    ${_('Administration')}
    +
    ${_('Permissions')}
    +
    + ${h.form(url('set_repo_perm_member', repo_name=c.repo_info.repo_name),method='post')} +
    +
    +
    +
    + +
    +
    + ${h.hidden('repo_private')} + <%include file="repo_edit_perms.html"/> +
    +
    +
    + ${h.submit('save',_('Save'),class_="ui-btn large")} + ${h.reset('reset',_('Reset'),class_="ui-btn large")} +
    +
    +
    + ${h.end_form()} +
    + + +
    +
    +
    ${_('Advanced settings')}
    -

    ${_('Statistics')}

    - ${h.form(url('repo_stats', repo_name=c.repo_info.repo_name),method='delete')} -
    -
    - ${h.submit('reset_stats_%s' % c.repo_info.repo_name,_('Reset current statistics'),class_="ui-btn",onclick="return confirm('"+_('Confirm to remove current statistics')+"');")} -
    -
      -
    • ${_('Fetched to rev')}: ${c.stats_revision}/${c.repo_last_rev}
    • -
    • ${_('Stats gathered')}: ${c.stats_percentage}%
    • -
    -
    -
    -
    - ${h.end_form()} - - %if c.repo_info.clone_uri: -

    ${_('Remote')}

    - ${h.form(url('repo_pull', repo_name=c.repo_info.repo_name),method='put')} -
    -
    - ${h.submit('remote_pull_%s' % c.repo_info.repo_name,_('Pull changes from remote location'),class_="ui-btn",onclick="return confirm('"+_('Confirm to pull changes from remote side')+"');")} - -
    -
    - ${h.end_form()} - %endif - -

    ${_('Cache')}

    - ${h.form(url('repo_cache', repo_name=c.repo_info.repo_name),method='delete')} -
    -
    - ${h.submit('reset_cache_%s' % c.repo_info.repo_name,_('Invalidate repository cache'),class_="ui-btn",onclick="return confirm('"+_('Confirm to invalidate repository cache')+"');")} -
    -
      -
    • ${_('Manually invalidate cache for this repository. On first access repository will be cached again')} -
    • -
    -
    -
    - ${_('List of cached values')} - - - - - - - %for cache in c.repo_info.cache_keys: - - - - - - %endfor -
    ${_('Prefix')}${_('Key')}${_('Active')}
    ${cache.prefix or '-'}${cache.cache_key}${h.bool2icon(cache.cache_active)}
    -
    -
    -
    - ${h.end_form()} - -

    ${_('Public journal')}

    - ${h.form(url('repo_public_journal', repo_name=c.repo_info.repo_name),method='put')} -
    - ${h.hidden('auth_token',str(h.get_token()))} -
    - %if c.in_public_journal: - ${h.submit('set_public_%s' % c.repo_info.repo_name,_('Remove from public journal'),class_="ui-btn")} - %else: - ${h.submit('set_public_%s' % c.repo_info.repo_name,_('Add to public journal'),class_="ui-btn")} - %endif -
    -
    -
      -
    • ${_('All actions made on this repository will be accessible to everyone in public journal')} -
    • -
    -
    -
    - ${h.end_form()} - -

    ${_('Locking')}

    - ${h.form(url('repo_locking', repo_name=c.repo_info.repo_name),method='put')} -
    -
    - %if c.repo_info.locked[0]: - ${h.submit('set_unlock' ,_('Unlock locked repo'),class_="ui-btn",onclick="return confirm('"+_('Confirm to unlock repository')+"');")} - ${'Locked by %s on %s' % (h.person_by_id(c.repo_info.locked[0]),h.fmt_date(h.time_to_datetime(c.repo_info.locked[1])))} - %else: - ${h.submit('set_lock',_('lock repo'),class_="ui-btn",onclick="return confirm('"+_('Confirm to lock repository')+"');")} - ${_('Repository is not locked')} - %endif -
    +

    ${_('Statistics')}

    + ${h.form(url('repo_stats', repo_name=c.repo_info.repo_name),method='delete')} +
    +
    + ${h.submit('reset_stats_%s' % c.repo_info.repo_name,_('Reset current statistics'),class_="ui-btn",onclick="return confirm('"+_('Confirm to remove current statistics')+"');")}
      -
    • ${_('Force locking on repository. Works only when anonymous access is disabled')} -
    • +
    • ${_('Fetched to rev')}: ${c.stats_revision}/${c.repo_last_rev}
    • +
    • ${_('Stats gathered')}: ${c.stats_percentage}%
    • +
    +
    +
    +
    + ${h.end_form()} + + %if c.repo_info.clone_uri: +

    ${_('Remote')}

    + ${h.form(url('repo_pull', repo_name=c.repo_info.repo_name),method='put')} +
    +
    + ${h.submit('remote_pull_%s' % c.repo_info.repo_name,_('Pull changes from remote location'),class_="ui-btn",onclick="return confirm('"+_('Confirm to pull changes from remote side')+"');")} + -
    - ${h.end_form()} +
    +
    + ${h.end_form()} + %endif + +

    ${_('Cache')}

    + ${h.form(url('repo_cache', repo_name=c.repo_info.repo_name),method='delete')} +
    +
    + ${h.submit('reset_cache_%s' % c.repo_info.repo_name,_('Invalidate repository cache'),class_="ui-btn",onclick="return confirm('"+_('Confirm to invalidate repository cache')+"');")} +
    +
      +
    • ${_('Manually invalidate cache for this repository. On first access repository will be cached again')} +
    • +
    +
    +
    + ${_('List of cached values')} + + + + + + + %for cache in c.repo_info.cache_keys: + + + + + + %endfor +
    ${_('Prefix')}${_('Key')}${_('Active')}
    ${cache.get_prefix() or '-'}${cache.cache_key}${h.boolicon(cache.cache_active)}
    +
    +
    +
    + ${h.end_form()} -

    ${_('Set as fork of')}

    - ${h.form(url('repo_as_fork', repo_name=c.repo_info.repo_name),method='put')} -
    -
    - ${h.select('id_fork_of','',c.repos_list,class_="medium")} - ${h.submit('set_as_fork_%s' % c.repo_info.repo_name,_('set'),class_="ui-btn",)} -
    -
    -
      -
    • ${_('''Manually set this repository as a fork of another from the list''')}
    • -
    -
    -
    - ${h.end_form()} +

    ${_('Public journal')}

    + ${h.form(url('repo_public_journal', repo_name=c.repo_info.repo_name),method='put')} +
    + ${h.hidden('auth_token',str(h.get_token()))} +
    + %if c.in_public_journal: + ${h.submit('set_public_%s' % c.repo_info.repo_name,_('Remove from public journal'),class_="ui-btn")} + %else: + ${h.submit('set_public_%s' % c.repo_info.repo_name,_('Add to public journal'),class_="ui-btn")} + %endif +
    +
    +
      +
    • ${_('All actions made on this repository will be accessible to everyone in public journal')} +
    • +
    +
    +
    + ${h.end_form()} -

    ${_('Delete')}

    - ${h.form(url('repo', repo_name=c.repo_info.repo_name),method='delete')} -
    -
    - ${h.submit('remove_%s' % c.repo_info.repo_name,_('Remove this repository'),class_="ui-btn red",onclick="return confirm('"+_('Confirm to delete this repository')+"');")} -
    +

    ${_('Locking')}

    + ${h.form(url('repo_locking', repo_name=c.repo_info.repo_name),method='put')} +
    +
    + %if c.repo_info.locked[0]: + ${h.submit('set_unlock' ,_('Unlock locked repo'),class_="ui-btn",onclick="return confirm('"+_('Confirm to unlock repository')+"');")} + ${'Locked by %s on %s' % (h.person_by_id(c.repo_info.locked[0]),h.fmt_date(h.time_to_datetime(c.repo_info.locked[1])))} + %else: + ${h.submit('set_lock',_('lock repo'),class_="ui-btn",onclick="return confirm('"+_('Confirm to lock repository')+"');")} + ${_('Repository is not locked')} + %endif +
    +
    +
      +
    • ${_('Force locking on repository. Works only when anonymous access is disabled')} +
    • +
    +
    +
    + ${h.end_form()} + +

    ${_('Set as fork of')}

    + ${h.form(url('repo_as_fork', repo_name=c.repo_info.repo_name),method='put')} +
    +
    + ${h.select('id_fork_of','',c.repos_list,class_="medium")} + ${h.submit('set_as_fork_%s' % c.repo_info.repo_name,_('set'),class_="ui-btn",)} +
      -
    • ${_('This repository will be renamed in a special way in order to be unaccesible for RhodeCode and VCS systems. If you need fully delete it from file system please do it manually')}
    • +
    • ${_('''Manually set this repository as a fork of another from the list''')}
    +
    + ${h.end_form()} + +

    ${_('Delete')}

    + ${h.form(url('repo', repo_name=c.repo_info.repo_name),method='delete')} +
    +
    +
    +##
    +## +##
    +
    + ${h.submit('remove_%s' % c.repo_info.repo_name,_('Remove this repository'),class_="ui-btn red",onclick="return confirm('"+_('Confirm to delete this repository')+"');")} + %if c.repo_info.forks.count(): + - ${ungettext('this repository has %s fork', 'this repository has %s forks', c.repo_info.forks.count()) % c.repo_info.forks.count()} + + + %endif +
      +
    • ${_('This repository will be renamed in a special way in order to be unaccesible for RhodeCode and VCS systems. If you need to fully delete it from file system please do it manually')}
    • +
    +
    +
    - ${h.end_form()} +
    + ${h.end_form()}
    +##TODO: this should be controlled by the VISUAL setting +%if c.visual.repository_fields: +
    + +
    +
    ${_('Extra fields')}
    +
    + +
    + + %for field in c.repo_fields: + + + + + + %endfor +
    ${field.field_label} (${field.field_key})${field.field_type} + ${h.form(url('delete_repo_fields', repo_name=c.repo_info.repo_name, field_id=field.repo_field_id),method='delete')} + ${h.submit('remove_%s' % field.repo_field_id, _('delete'), id="remove_field_%s" % field.repo_field_id, + class_="delete_icon action_button", onclick="return confirm('"+_('Confirm to delete this field: %s') % field.field_key+"');")} + ${h.end_form()} +
    +
    + + ${h.form(url('create_repo_fields', repo_name=c.repo_info.repo_name),method='put')} +
    + +
    +
    +
    + +
    +
    + ${h.text('new_field_key', class_='small')} +
    +
    +
    +
    + +
    +
    + ${h.text('new_field_label', class_='small', placeholder=_('Enter short label'))} +
    +
    + +
    +
    + +
    +
    + ${h.text('new_field_desc', class_='small', placeholder=_('Enter description of a field'))} +
    +
    + +
    + ${h.submit('save',_('Add'),class_="ui-btn large")} + ${h.reset('reset',_('Reset'),class_="ui-btn large")} +
    +
    +
    + ${h.end_form()} +
    +%endif diff --git a/rhodecode/templates/admin/repos/repo_edit_perms.html b/rhodecode/templates/admin/repos/repo_edit_perms.html --- a/rhodecode/templates/admin/repos/repo_edit_perms.html +++ b/rhodecode/templates/admin/repos/repo_edit_perms.html @@ -38,7 +38,7 @@ %endif %endfor - ## USERS GROUPS + ## USER GROUPS %for g2p in c.repo_info.users_group_to_perm: ${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'repository.none')} @@ -54,7 +54,7 @@ %endif - + ${_('revoke')} @@ -101,15 +101,15 @@ function ajaxActionUser(user_id, field_i var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData); }; -function ajaxActionUsersGroup(users_group_id,field_id){ +function ajaxActionUserGroup(users_group_id,field_id){ var sUrl = "${h.url('delete_repo_users_group',repo_name=c.repo_name)}"; var callback = { - success:function(o){ - var tr = YUD.get(String(field_id)); - tr.parentNode.removeChild(tr); - }, + success:function(o){ + var tr = YUD.get(String(field_id)); + tr.parentNode.removeChild(tr); + }, failure:function(o){ - alert("${_('Failed to remove users group')}"); + alert("${_('Failed to remove user group')}"); }, }; var postData = '_method=delete&users_group_id='+users_group_id; diff --git a/rhodecode/templates/admin/repos/repos.html b/rhodecode/templates/admin/repos/repos.html --- a/rhodecode/templates/admin/repos/repos.html +++ b/rhodecode/templates/admin/repos/repos.html @@ -2,14 +2,14 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('Repositories administration')} - ${c.rhodecode_name} + ${_('Repositories administration')} · ${c.rhodecode_name} <%def name="breadcrumbs_links()"> - ${h.link_to(_('Admin'),h.url('admin_home'))} » 0 ${_('repositories')} + ${h.link_to(_('Admin'),h.url('admin_home'))} » 0 ${_('repositories')} <%def name="page_nav()"> - ${self.menu('admin')} + ${self.menu('admin')} <%def name="main()">
    @@ -18,7 +18,7 @@ ${self.breadcrumbs()}
    @@ -69,7 +69,7 @@ var myColumnDefs = [ {key:"menu",label:"",sortable:false,className:"quick_repo_menu hidden"}, {key:"name",label:"${_('Name')}",sortable:true, - sortOptions: { sortFunction: nameSort }}, + sortOptions: { sortFunction: nameSort }}, {key:"desc",label:"${_('Description')}",sortable:true}, {key:"last_changeset",label:"${_('Tip')}",sortable:true, sortOptions: { sortFunction: revisionSort }}, @@ -126,11 +126,10 @@ }; YUE.on('q_filter','click',function(){ - if(!YUD.hasClass('q_filter', 'loaded')){ - YUD.get('q_filter').value = ''; - //TODO: load here full list later to do search within groups - YUD.addClass('q_filter', 'loaded'); - } + if(!YUD.hasClass('q_filter', 'loaded')){ + //TODO: load here full list later to do search within groups + YUD.addClass('q_filter', 'loaded'); + } }); YUE.on('q_filter','keyup',function (e) { diff --git a/rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html b/rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html --- a/rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html +++ b/rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html @@ -9,7 +9,9 @@ ## USERS %for r2p in c.repos_group.repo_group_to_perm: + ##forbid revoking permission from yourself + %if c.rhodecode_user.user_id != r2p.user.user_id or c.rhodecode_user.is_admin: ${h.radio('u_perm_%s' % r2p.user.username,'group.none')} ${h.radio('u_perm_%s' % r2p.user.username,'group.read')} ${h.radio('u_perm_%s' % r2p.user.username,'group.write')} @@ -24,10 +26,21 @@
    %endif + %else: + ${h.radio('u_perm_%s' % r2p.user.username,'group.none', disabled="disabled")} + ${h.radio('u_perm_%s' % r2p.user.username,'group.read', disabled="disabled")} + ${h.radio('u_perm_%s' % r2p.user.username,'group.write', disabled="disabled")} + ${h.radio('u_perm_%s' % r2p.user.username,'group.admin', disabled="disabled")} + + ${r2p.user.username if r2p.user.username != 'default' else _('default')} + + + + %endif %endfor - ## USERS GROUPS + ## USER GROUPS %for g2p in c.repos_group.users_group_to_perm: ${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'group.none')} @@ -38,7 +51,7 @@ ${g2p.users_group.users_group_name} - + ${_('revoke')} @@ -92,7 +105,7 @@ function ajaxActionUser(user_id, field_i var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData); }; -function ajaxActionUsersGroup(users_group_id,field_id){ +function ajaxActionUserGroup(users_group_id,field_id){ var sUrl = "${h.url('delete_repos_group_users_group_perm',group_name=c.repos_group.group_name)}"; var callback = { success:function(o){ @@ -100,7 +113,7 @@ function ajaxActionUsersGroup(users_grou tr.parentNode.removeChild(tr); }, failure:function(o){ - alert("${_('Failed to remove users group')}"); + alert("${_('Failed to remove user group')}"); }, }; var recursive = YUD.get('recursive').checked; @@ -113,7 +126,7 @@ YUE.onDOMReady(function () { YUD.setStyle('add_perm_input', 'display', 'none'); } YAHOO.util.Event.addListener('add_perm', 'click', function () { - addPermAction(${_tmpl}, ${c.users_array|n}, ${c.users_groups_array|n}); + addPermAction(${_tmpl}, ${c.users_array|n}, ${c.users_groups_array|n}); }); }); diff --git a/rhodecode/templates/admin/repos_groups/repos_groups.html b/rhodecode/templates/admin/repos_groups/repos_groups.html --- a/rhodecode/templates/admin/repos_groups/repos_groups.html +++ b/rhodecode/templates/admin/repos_groups/repos_groups.html @@ -1,7 +1,7 @@ ## -*- coding: utf-8 -*- <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('Repository group')} - ${c.rhodecode_name} + ${_('%s Group Dashboard') % c.group.group_name} · ${c.rhodecode_name} <%def name="breadcrumbs()"> @@ -15,8 +15,9 @@ <%def name="page_nav()"> - ${self.menu('admin')} + ${self.menu('repositories')} + <%def name="main()"> <%include file="/index_base.html" args="parent=self,short_repo_names=True"/> diff --git a/rhodecode/templates/admin/repos_groups/repos_groups_add.html b/rhodecode/templates/admin/repos_groups/repos_groups_add.html --- a/rhodecode/templates/admin/repos_groups/repos_groups_add.html +++ b/rhodecode/templates/admin/repos_groups/repos_groups_add.html @@ -2,14 +2,15 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('Add repos group')} - ${c.rhodecode_name} + ${_('Add repository group')} · ${c.rhodecode_name} + <%def name="breadcrumbs_links()"> ${h.link_to(_('Admin'),h.url('admin_home'))} » - ${h.link_to(_('Repos groups'),h.url('repos_groups'))} + ${h.link_to(_('Repository groups'),h.url('repos_groups'))} » - ${_('add new repos group')} + ${_('Add new repository group')} <%def name="page_nav()"> @@ -50,7 +51,7 @@
    - ${h.select('group_parent_id','',c.repo_groups,class_="medium")} + ${h.select('group_parent_id',request.GET.get('parent_group'),c.repo_groups,class_="medium")}
    diff --git a/rhodecode/templates/admin/repos_groups/repos_groups_edit.html b/rhodecode/templates/admin/repos_groups/repos_groups_edit.html --- a/rhodecode/templates/admin/repos_groups/repos_groups_edit.html +++ b/rhodecode/templates/admin/repos_groups/repos_groups_edit.html @@ -2,14 +2,15 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('Edit repos group')} ${c.repos_group.name} - ${c.rhodecode_name} + ${_('Edit repository group')} ${c.repos_group.name} · ${c.rhodecode_name} + <%def name="breadcrumbs_links()"> ${h.link_to(_('Admin'),h.url('admin_home'))} » - ${h.link_to(_('Repos groups'),h.url('repos_groups'))} + ${h.link_to(_('Repository groups'),h.url('repos_groups'))} » - ${_('edit repos group')} "${c.repos_group.name}" + ${_('Edit repository group %s') % c.repos_group.name}" <%def name="page_nav()"> @@ -21,38 +22,43 @@
    ${self.breadcrumbs()} +
    - ${h.form(url('repos_group',id=c.repos_group.group_id),method='put')} + ${h.form(url('repos_group',group_name=c.repos_group.group_name),method='put')}
    -
    +
    ${h.text('group_name',class_='medium')}
    -
    +
    -
    -
    - -
    -
    - ${h.textarea('group_description',cols=23,rows=5,class_="medium")} -
    -
    +
    +
    + +
    +
    + ${h.textarea('group_description',cols=23,rows=5,class_="medium")} +
    +
    -
    -
    - -
    -
    - ${h.select('group_parent_id','',c.repo_groups,class_="medium")} -
    -
    +
    +
    + +
    +
    + ${h.select('group_parent_id','',c.repo_groups,class_="medium")} +
    +
    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 @@ -2,16 +2,24 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('Repositories groups administration')} - ${c.rhodecode_name} + ${_('Repository groups administration')} · ${c.rhodecode_name} <%def name="breadcrumbs_links()"> - ${h.link_to(_('Admin'),h.url('admin_home'))} » ${_('Repositories')} + %if h.HasPermissionAny('hg.admin')(): + ${h.link_to(_('Admin'),h.url('admin_home'))} + %else: + ${_('Admin')} + %endif + » + ${_('Repository groups')} + <%def name="page_nav()"> ${self.menu('admin')} + <%def name="main()">
    @@ -19,7 +27,9 @@ ${self.breadcrumbs()}
    @@ -33,7 +43,7 @@ ${_('Group name')} ${_('Description')} ${_('Number of toplevel repositories')} - ${_('action')} + ${_('Action')} @@ -44,23 +54,28 @@
    - ${_('Repositories group')} - ${h.link_to(h.literal(' » '.join(map(h.safe_unicode,[g.name for g in gr.parents+[gr]]))),url('edit_repos_group',id=gr.group_id))} + ${_('Repository group')} + ${h.link_to(h.literal(' » '.join(map(h.safe_unicode,[g.name for g in gr.parents+[gr]]))), url('repos_group_home',group_name=gr.group_name))}
    ${gr.group_description} ${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('"+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()} - + + + ${h.submit('edit_%s' % gr.group_name,_('edit'),class_="edit_icon action_button")} + + + + ${h.form(url('repos_group', group_name=gr.group_name),method='delete')} + ${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()} + % endfor % else: - ${_('There are no repositories groups yet')} + ${_('There are no repository groups yet')} % endif
    diff --git a/rhodecode/templates/admin/settings/hooks.html b/rhodecode/templates/admin/settings/hooks.html --- a/rhodecode/templates/admin/settings/hooks.html +++ b/rhodecode/templates/admin/settings/hooks.html @@ -2,7 +2,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('Settings administration')} - ${c.rhodecode_name} + ${_('Settings administration')} · ${c.rhodecode_name} <%def name="breadcrumbs_links()"> @@ -10,7 +10,7 @@ <%def name="page_nav()"> - ${self.menu('admin')} + ${self.menu('admin')} <%def name="main()"> @@ -25,16 +25,16 @@
    % for hook in c.hooks: -
    -
    - -
    -
    +
    +
    + +
    +
    ${h.text(hook.ui_key,hook.ui_value,size=60,readonly="readonly")} -
    -
    +
    +
    % endfor -
    +

    ${_('Custom hooks')}

    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 @@ -2,15 +2,17 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('Settings administration')} - ${c.rhodecode_name} + ${_('Settings administration')} · ${c.rhodecode_name} <%def name="breadcrumbs_links()"> - ${h.link_to(_('Admin'),h.url('admin_home'))} » ${_('Settings')} + ${h.link_to(_('Admin'),h.url('admin_home'))} + » + ${_('Settings')} <%def name="page_nav()"> - ${self.menu('admin')} + ${self.menu('admin')} <%def name="main()"> @@ -27,20 +29,20 @@
    -
    -
    - -
    -
    -
    - ${h.checkbox('destroy',True)} - -
    +
    +
    + +
    +
    +
    + ${h.checkbox('destroy',True)} + +
    ${_('Rescan repositories location for new repositories. Also deletes obsolete if `destroy` flag is checked ')} -
    -
    +
    +
    ${h.submit('rescan',_('Rescan repositories'),class_="ui-btn large")} @@ -57,12 +59,12 @@
    - +
    ${h.checkbox('full_index',True)} - +
    @@ -83,7 +85,7 @@
    - +
    ${h.text('rhodecode_title',size=30)} @@ -92,7 +94,7 @@
    - +
    ${h.text('rhodecode_realm',size=30)} @@ -101,7 +103,7 @@
    - +
    ${h.text('rhodecode_ga_code',size=30)} @@ -131,7 +133,13 @@ ${h.checkbox('rhodecode_lightweight_dashboard','True')}
    -
    +
    +
    +
    + ${h.checkbox('rhodecode_repository_fields','True')} + +
    +
    @@ -191,17 +199,17 @@
    -
    +
    -
    - ${h.checkbox('web_push_ssl', 'True')} - -
    +
    + ${h.checkbox('web_push_ssl', 'True')} + +
    ${_('RhodeCode will require SSL for pushing or pulling. If SSL is missing it will return HTTP Error 406: Not Acceptable')} -
    +
    @@ -209,14 +217,14 @@
    -
    - ${h.checkbox('hooks_changegroup_update','True')} - -
    -
    - ${h.checkbox('hooks_changegroup_repo_size','True')} - -
    +
    + ${h.checkbox('hooks_changegroup_update','True')} + +
    +
    + ${h.checkbox('hooks_changegroup_repo_size','True')} + +
    ${h.checkbox('hooks_changegroup_push_logger','True')} @@ -225,9 +233,9 @@ ${h.checkbox('hooks_outgoing_pull_logger','True')}
    -
    +
    - ${h.link_to(_('advanced setup'),url('admin_edit_setting',setting_id='hooks'),class_="ui-btn")} + ${h.link_to(_('Advanced setup'),url('admin_edit_setting',setting_id='hooks'))}
    @@ -237,29 +245,30 @@
    ${h.checkbox('extensions_largefiles','True')} - +
    ${h.checkbox('extensions_hgsubversion','True')} - +
    - ${_('Requires hgsubversion library installed. Allows clonning from svn remote locations')} + ${_('Requires hgsubversion library installed. Allows cloning from svn remote locations')} ##
    ## ${h.checkbox('extensions_hggit','True')} - ## + ## ##
    - ##${_('Requires hg-git library installed. Allows clonning from git remote locations')} + ##${_('Requires hg-git library installed. Allows cloning from git remote locations')}
    -
    +
    ${h.text('paths_root_path',size=30,readonly="readonly")} - - ${_('unlock')} + + ${_('Unlock')} + ${_('Location where repositories are stored. After changing this value a restart, and rescan is required')}
    @@ -304,9 +313,9 @@

    ${_('System Info and Packages')}

    -
    -
    ↓ ${_('show')} ↓
    -
    +
    +
    ↓ ${_('Show')} ↓
    +
    - ${h.submit('save',_('save'),class_="ui-btn large")} + ${h.submit('save',_('Save'),class_="ui-btn large")}
    -
    +
    ${h.end_form()}
    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 @@ -2,7 +2,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('Edit user')} ${c.user.username} - ${c.rhodecode_name} + ${_('Edit user')} ${c.user.username} · ${c.rhodecode_name} <%def name="breadcrumbs_links()"> @@ -10,11 +10,11 @@ » ${h.link_to(_('Users'),h.url('users'))} » - ${_('edit')} "${c.user.username}" + ${_('Edit %s') % c.user.username} <%def name="page_nav()"> - ${self.menu('admin')} + ${self.menu('admin')} <%def name="main()"> @@ -40,14 +40,17 @@
    - ${c.user.api_key} + ${c.user.api_key}
    + ##show current ip just if we show ourself + %if c.rhodecode_user.username == c.user.username:
    - ${c.perm_user.ip_addr or "?"} + ${c.perm_user.ip_addr or "?"}
    + %endif
    @@ -137,7 +140,7 @@ ${h.submit('save',_('Save'),class_="ui-btn large")} ${h.reset('reset',_('Reset'),class_="ui-btn large")}
    -
    +
    ${h.end_form()}
    @@ -187,65 +190,11 @@ ${h.end_form()} ## permissions overview -
    - %for section in sorted(c.perm_user.permissions.keys()): -
    ${section.replace("_"," ").capitalize()}
    - %if not c.perm_user.permissions[section]: - ${_('Nothing here yet')} - %else: -
    - - - - - - - - - %for k in c.perm_user.permissions[section]: - <% - if section != 'global': - section_perm = c.perm_user.permissions[section].get(k) - _perm = section_perm.split('.')[-1] - else: - _perm = section_perm = None - %> - - - - - - %endfor - -
    ${_('Name')}${_('Permission')}${_('Edit Permission')}
    - %if section == 'repositories': - ${k} - %elif section == 'repositories_groups': - ${k} - %else: - ${h.get_permission_name(k)} - %endif - - %if section == 'global': - ${h.bool2icon(k.split('.')[-1] != 'none')} - %else: - ${section_perm} - %endif - - %if section == 'repositories': - ${_('edit')} - %elif section == 'repositories_groups': - ${_('edit')} - %else: - -- - %endif -
    -
    - %endif - %endfor -
    + <%namespace name="p" file="/base/perms_summary.html"/> + ${p.perms_summary(c.perm_user.permissions)} + -
    +
    ${_('Email addresses')}
    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 @@ -2,7 +2,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('My account')} ${c.rhodecode_user.username} - ${c.rhodecode_name} + ${_('My account')} ${c.rhodecode_user.username} · ${c.rhodecode_name} <%def name="breadcrumbs_links()"> @@ -10,7 +10,7 @@ <%def name="page_nav()"> - ${self.menu('admin')} + ${self.menu('admin')} <%def name="main()"> @@ -28,7 +28,7 @@
    - +
    -
    - %for section in sorted(c.rhodecode_user.permissions.keys()): -
    ${section.replace("_"," ").capitalize()}
    + ## permissions overview +
    + <%namespace name="p" file="/base/perms_summary.html"/> + ${p.perms_summary(c.perm_user.permissions)} +
    -
    - - - - - - - - %for k in c.rhodecode_user.permissions[section]: - <% - if section != 'global': - section_perm = c.rhodecode_user.permissions[section].get(k) - _perm = section_perm.split('.')[-1] - else: - _perm = section_perm = None - %> - %if _perm not in ['none']: - - - - - %endif - %endfor - -
    ${_('Name')}${_('Permission')}
    - %if section == 'repositories': - ${k} - %elif section == 'repositories_groups': - ${k} - %else: - ${k} - %endif - - %if section == 'global': - ${h.bool2icon(True)} - %else: - ${section_perm} - %endif -
    -
    - %endfor -
    diff --git a/rhodecode/templates/admin/users/user_edit_my_account_form.html b/rhodecode/templates/admin/users/user_edit_my_account_form.html --- a/rhodecode/templates/admin/users/user_edit_my_account_form.html +++ b/rhodecode/templates/admin/users/user_edit_my_account_form.html @@ -20,6 +20,11 @@ ${c.user.api_key}
    +
    +
    + ${c.perm_user.ip_addr or "?"} +
    +
    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 @@ -1,14 +1,22 @@ - +%if c.show_closed: + ${h.checkbox('show_closed',checked="checked", label=_('Show closed pull requests'))} +%else: + ${h.checkbox('show_closed',label=_('Show closed pull requests'))} +%endif
    ${_('Opened by me')}
    @@ -36,7 +36,7 @@ myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON; myDataSource.responseSchema = { - resultsList: "records", + resultsList: "records", fields: [ {key: "gravatar"}, {key: "raw_username"}, @@ -60,7 +60,7 @@ if (req) { req = req.toLowerCase(); for (i = 0; i <%def name="title()"> - ${_('Add users group')} - ${c.rhodecode_name} + ${_('Add user group')} · ${c.rhodecode_name} <%def name="breadcrumbs_links()"> ${h.link_to(_('Admin'),h.url('admin_home'))} » - ${h.link_to(_('Users groups'),h.url('users_groups'))} + ${h.link_to(_('User groups'),h.url('users_groups'))} » - ${_('add new users group')} + ${_('Add new user group')} <%def name="page_nav()"> @@ -46,7 +46,7 @@
    - ${h.submit('save',_('save'),class_="ui-btn large")} + ${h.submit('save',_('Save'),class_="ui-btn large")}
    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 @@ -2,15 +2,15 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('Edit users group')} ${c.users_group.users_group_name} - ${c.rhodecode_name} + ${_('Edit user group')} ${c.users_group.users_group_name} · ${c.rhodecode_name} <%def name="breadcrumbs_links()"> ${h.link_to(_('Admin'),h.url('admin_home'))} » - ${h.link_to(_('UsersGroups'),h.url('users_groups'))} + ${h.link_to(_('UserGroups'),h.url('users_groups'))} » - ${_('edit')} "${c.users_group.users_group_name}" + ${_('Edit %s') % c.users_group.users_group_name} <%def name="page_nav()"> @@ -27,67 +27,67 @@ ${h.form(url('users_group', id=c.users_group.users_group_id),method='put', id='edit_users_group')}
    -
    -
    -
    - -
    -
    - ${h.text('users_group_name',class_='small')} -
    -
    +
    +
    +
    + +
    +
    + ${h.text('users_group_name',class_='small')} +
    +
    -
    -
    - -
    -
    - ${h.checkbox('users_group_active',value=True)} -
    -
    -
    +
    +
    + +
    +
    + ${h.checkbox('users_group_active',value=True)} +
    +
    +
    - - - - -
    -
    -
    -
    ${_('Choosen group members')}
    - ${h.select('users_group_members',[x[0] for x in c.group_members],c.group_members,multiple=True,size=8,style="min-width:210px")} -
    - ${_('Remove all elements')} - remove -
    -
    -
    - add -
    - remove -
    -
    -
    ${_('Available members')}
    - ${h.select('available_members',[],c.available_members,multiple=True,size=8,style="min-width:210px")} -
    - add - ${_('Add all elements')} -
    -
    -
    -
    + + + + +
    +
    +
    +
    ${_('Chosen group members')}
    + ${h.select('users_group_members',[x[0] for x in c.group_members],c.group_members,multiple=True,size=8,style="min-width:210px")} +
    + ${_('Remove all elements')} + remove +
    +
    +
    + add +
    + remove +
    +
    +
    ${_('Available members')}
    + ${h.select('available_members',[],c.available_members,multiple=True,size=8,style="min-width:210px")} +
    + add + ${_('Add all elements')} +
    +
    +
    +
    - ${h.submit('save',_('save'),class_="ui-btn large")} + ${h.submit('Save',_('Save'),class_="ui-btn large")}
    @@ -138,9 +138,13 @@
    ${h.end_form()} + + ## permissions overview + <%namespace name="p" file="/base/perms_summary.html"/> + ${p.perms_summary(c.users_group.permissions)} -
    +
    ${_('Group members')}
    @@ -165,63 +169,6 @@
    -
    - -
    -
    ${_('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/admin/users_groups/users_groups.html b/rhodecode/templates/admin/users_groups/users_groups.html --- a/rhodecode/templates/admin/users_groups/users_groups.html +++ b/rhodecode/templates/admin/users_groups/users_groups.html @@ -2,11 +2,13 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('Users groups administration')} - ${c.rhodecode_name} + ${_('User groups administration')} · ${c.rhodecode_name} <%def name="breadcrumbs_links()"> - ${h.link_to(_('Admin'),h.url('admin_home'))} » ${_('Users groups')} + ${h.link_to(_('Admin'),h.url('admin_home'))} + » + ${_('User groups')} <%def name="page_nav()"> @@ -20,7 +22,7 @@ ${self.breadcrumbs()} @@ -29,20 +31,20 @@
    - - - - + + + + %for cnt,u_group in enumerate(c.users_groups_list): - + 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 @@ -2,8 +2,9 @@ <%inherit file="root.html"/> +
    + ### MAKO DEFS ### -<%def name="page_nav()"> - ${self.menu()} - - <%def name="breadcrumbs()"> +<%def name="context_bar(current)"> + ${repo_context_bar(current)} + + +<%def name="admin_menu()"> +
      +
    • ${h.link_to(_('Admin journal'),h.url('admin_home'),class_='journal ')}
    • +
    • ${h.link_to(_('Repositories'),h.url('repos'),class_='repos')}
    • +
    • ${h.link_to(_('Repository groups'),h.url('repos_groups'),class_='repos_groups')}
    • +
    • ${h.link_to(_('Users'),h.url('users'),class_='users')}
    • +
    • ${h.link_to(_('User 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')}
    • +
    + + +<%def name="admin_menu_simple()"> +
      +
    • ${h.link_to(_('Repository groups'),h.url('repos_groups'),class_='repos_groups')}
    • +
    + + +<%def name="repo_context_bar(current=None)"> + <% + def follow_class(): + if c.repository_following: + return h.literal('following') + else: + return h.literal('follow') + %> + <% + def is_current(selected): + if selected == current: + return h.literal('class="current"') + %> + + +
    + +
      +
    • ${_('Summary')}
    • +
    • ${_('Changelog')}
    • +
    • ${_('Files')}
    • +
    • + ${_('Switch To')} + +
    • +
    • + ${_('Options')} +
        + %if h.HasRepoPermissionAll('repository.admin')(c.repo_name): +
      • ${h.link_to(_('Settings'),h.url('edit_repo',repo_name=c.repo_name),class_='settings')}
      • + %endif + %if c.rhodecode_db_repo.fork: +
      • ${h.link_to(_('Compare fork'),h.url('compare_url',repo_name=c.rhodecode_db_repo.fork.repo_name,org_ref_type='branch',org_ref='default',other_repo=c.repo_name,other_ref_type='branch',other_ref=request.GET.get('branch') or 'default', merge=1),class_='compare_request')}
      • + %endif +
      • ${h.link_to(_('Lightweight changelog'),h.url('shortlog_home',repo_name=c.repo_name),class_='shortlog')}
      • +
      • ${h.link_to(_('Search'),h.url('search_repo',repo_name=c.repo_name),class_='search')}
      • + + %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking: + %if c.rhodecode_db_repo.locked[0]: +
      • ${h.link_to(_('Unlock'), h.url('toggle_locking',repo_name=c.repo_name),class_='locking_del')}
      • + %else: +
      • ${h.link_to(_('Lock'), h.url('toggle_locking',repo_name=c.repo_name),class_='locking_add')}
      • + %endif + %endif + ## TODO: this check feels wrong, it would be better to have a check for permissions + ## also it feels like a job for the controller + %if c.rhodecode_user.username != 'default': +
      • + + ${_('Follow')} + ${_('Unfollow')} + +
      • +
      • ${_('Fork')}
      • + %if h.is_hg(c.rhodecode_repo): +
      • ${_('Create Pull Request')}
      • + %endif + %endif +
      +
    • +
    • + ${_('Pull Requests')} + %if c.repository_pull_requests: + ${c.repository_pull_requests} + %endif + +
    • +
    +
    + + + + <%def name="usermenu()"> + ## USER MENU +
  • + + + avatar + + %if c.rhodecode_user.username != 'default': + ${c.rhodecode_user.username} + %if c.unread_notifications != 0: + ${c.unread_notifications} + %endif + %else: + ${_('Not logged in')} + %endif + +
    -
    - - %if c.rhodecode_user.username != 'default' and c.unread_notifications != 0: - - %endif -
    - @@ -92,7 +212,7 @@
    - ${h.password('password',class_='focus',size=40)} + ${h.password('password',class_='focus')}
    @@ -112,251 +232,105 @@ ${h.end_form()} %else: %endif - + + +
  • <%def name="menu(current=None)"> - <% - def is_current(selected): - if selected == current: - return h.literal('class="current"') - %> - %if current not in ['home','admin']: - ##REGULAR MENU -
      - -
    • - - - ${_('Products')} - - - - -
    • - -
    • - - - ${_('Summary')} - - ${_('Summary')} - -
    • -
    • - - - ${_('Changelog')} - - ${_('Changelog')} - -
    • - -
    • - - - ${_('Switch to')} - - ${_('Switch to')} - - -
    • -
    • - - - ${_('Files')} - - ${_('Files')} - -
    • - -
    • - - - ${_('Admin')} - - ${_('Options')} - -
        - %if h.HasRepoPermissionAll('repository.admin')(c.repo_name): - %if h.HasPermissionAll('hg.admin')('access settings on repository'): -
      • ${h.link_to(_('repository settings'),h.url('edit_repo',repo_name=c.repo_name),class_='settings')}
      • - %else: -
      • ${h.link_to(_('repository settings'),h.url('repo_settings_home',repo_name=c.repo_name),class_='settings')}
      • - %endif - %endif - -
      • ${h.link_to(_('fork'),h.url('repo_fork_home',repo_name=c.repo_name),class_='fork')}
      • - %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: - %if c.rhodecode_db_repo.locked[0]: -
      • ${h.link_to(_('unlock'), h.url('toggle_locking',repo_name=c.repo_name),class_='locking_del')}
      • - %else: -
      • ${h.link_to(_('lock'), h.url('toggle_locking',repo_name=c.repo_name),class_='locking_add')}
      • - %endif - %endif + <% + def is_current(selected): + if selected == current: + return h.literal('class="current"') + %> +
          + +
        • + + ${_('Repositories')} + + +
        • + ##ROOT MENU + %if c.rhodecode_user.username != 'default': +
        • + + ${_('Journal')} + +
        • + %else: +
        • + + ${_('Public journal')} + +
        • + %endif +
        • + + ${_('Search')} + +
        • + % if h.HasPermissionAll('hg.admin')('access admin main page'): +
        • + + ${_('Admin')} + + ${admin_menu()} +
        • + % elif c.rhodecode_user.groups_admin: +
        • + + ${_('Admin')} + + ${admin_menu_simple()} +
        • + % endif + ${usermenu()} + - %else: - ##ROOT MENU - - %endif + diff --git a/rhodecode/templates/base/perms_summary.html b/rhodecode/templates/base/perms_summary.html new file mode 100644 --- /dev/null +++ b/rhodecode/templates/base/perms_summary.html @@ -0,0 +1,63 @@ +## snippet for displaying permissions overview for users + +<%def name="perms_summary(permissions)"> +
          + %for section in sorted(permissions.keys()): +
          ${section.replace("_"," ").capitalize()}
          + %if not permissions[section]: + ${_('No permissions defined yet')} + %else: +
          +
    ${_('group name')}${_('members')}${_('active')}${_('action')}${_('Group name')}${_('Members')}${_('Active')}${_('Action')}
    ${h.link_to(u_group.users_group_name,h.url('edit_users_group', id=u_group.users_group_id))} ${len(u_group.members)}${h.bool2icon(u_group.users_group_active)}${h.boolicon(u_group.users_group_active)} ${h.form(url('users_group', id=u_group.users_group_id),method='delete')} ${h.submit('remove_',_('delete'),id="remove_group_%s" % u_group.users_group_id, - class_="delete_icon action_button",onclick="return confirm('"+_('Confirm to delete this users group: %s') % u_group.users_group_name+"');")} + class_="delete_icon action_button",onclick="return confirm('"+_('Confirm to delete this user group: %s') % u_group.users_group_name+"');")} ${h.end_form()}
    + + + + + + + + %if section == 'global': + %for k in sorted(permissions[section], key=lambda s: s.lower()): + + + + + + %endfor + %else: + %for k, section_perm in sorted(permissions[section].items(), key=lambda s: s[1]+s[0].lower()): + + + + + + %endfor + %endif + + +
    ${_('Name')}${_('Permission')}${_('Edit Permission')}
    + ${h.get_permission_name(k)} + + ${h.boolicon(k.split('.')[-1] != 'none')} + + ${_('edit')} +
    + %if section == 'repositories': + ${k} + %elif section == 'repositories_groups': + ${k} + %endif + + ${section_perm} + + %if section == 'repositories': + ${_('edit')} + %elif section == 'repositories_groups': + ${_('edit')} + %endif +
    +
    + %endif + %endfor +
    + 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 @@ -11,6 +11,7 @@ <%def name="css()"> + ## EXTRA FOR CSS ${self.css_extra()} @@ -21,40 +22,44 @@ %if c.ga_code: - - %endif + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + + %endif ## JAVASCRIPT ## <%def name="js()"> + ## EXTRA FOR JS ${self.js_extra()} @@ -80,24 +86,10 @@ tooltip_activate(); show_more_event(); show_changeset_tooltip(); - - YUE.on('quick_login_link','click',function(e){ - // make sure we don't redirect - YUE.preventDefault(e); - - if(YUD.hasClass('quick_login_link','enabled')){ - YUD.setStyle('quick_login','display','none'); - YUD.removeClass('quick_login_link','enabled'); - } - else{ - YUD.setStyle('quick_login','display',''); - YUD.addClass('quick_login_link','enabled'); - var usr = YUD.get('username'); - if(usr){ - usr.focus(); - } - } - }); + // routes registration + pyroutes.register('toggle_following', "${h.url('toggle_following')}"); + pyroutes.register('changeset_info', "${h.url('changeset_info', repo_name='%(repo_name)s', revision='%(revision)s')}", ['repo_name', 'revision']); + pyroutes.register('repo_size', "${h.url('repo_size', repo_name='%(repo_name)s')}", ['repo_name']); }) diff --git a/rhodecode/templates/bookmarks/bookmarks.html b/rhodecode/templates/bookmarks/bookmarks.html --- a/rhodecode/templates/bookmarks/bookmarks.html +++ b/rhodecode/templates/bookmarks/bookmarks.html @@ -2,23 +2,20 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('%s Bookmarks') % c.repo_name} - ${c.rhodecode_name} + ${_('%s Bookmarks') % c.repo_name} · ${c.rhodecode_name} - <%def name="breadcrumbs_links()"> - - ${h.link_to(_(u'Home'),h.url('/'))} - » - ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))} - » - ${_('bookmarks')} + + ${_('Bookmarks')} <%def name="page_nav()"> - ${self.menu('bookmarks')} + ${self.menu('repositories')} + <%def name="main()"> +${self.context_bar('switch-to')}
    @@ -29,6 +26,7 @@ <%include file='bookmarks_data.html'/>
    + + - - %else: - ${_('There are no changes yet')} - %endif + }); + + %else: + ${_('There are no changes yet')} + %endif diff --git a/rhodecode/templates/changelog/changelog_details.html b/rhodecode/templates/changelog/changelog_details.html --- a/rhodecode/templates/changelog/changelog_details.html +++ b/rhodecode/templates/changelog/changelog_details.html @@ -1,11 +1,11 @@ ## small box that displays changed/added/removed details fetched by AJAX % if len(c.cs.affected_files) <= c.affected_files_cut_off: -${len(c.cs.removed)} -${len(c.cs.changed)} -${len(c.cs.added)} +${len(c.cs.removed)} +${len(c.cs.changed)} +${len(c.cs.added)} % else: - ! - ! - ! + ! + ! + ! % endif diff --git a/rhodecode/templates/changeset/changeset.html b/rhodecode/templates/changeset/changeset.html --- a/rhodecode/templates/changeset/changeset.html +++ b/rhodecode/templates/changeset/changeset.html @@ -3,22 +3,19 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('%s Changeset') % c.repo_name} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} - ${c.rhodecode_name} + ${_('%s Changeset') % c.repo_name} - ${h.show_id(c.changeset)} · ${c.rhodecode_name} <%def name="breadcrumbs_links()"> - ${h.link_to(_(u'Home'),h.url('/'))} - » - ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))} - » ${_('Changeset')} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} <%def name="page_nav()"> - ${self.menu('changelog')} + ${self.menu('repositories')} <%def name="main()"> +${self.context_bar('changelog')}
    @@ -31,7 +28,7 @@ AJAX_COMMENT_DELETE_URL = "${url('changeset_comment_delete',repo_name=c.repo_name,comment_id='__COMMENT_ID__')}";
    -
    +
    %if c.changeset.parents: %for n, p_cs in enumerate(reversed(c.changeset.parents)): @@ -52,7 +49,7 @@ ${_('No children')} %endif
    - -
    -
    -
    -
    -
    - gravatar -
    - ${h.person(c.changeset.author)}
    - ${h.email_or_none(c.changeset.author)}
    -
    -
    ${h.urlify_commit(c.changeset.message, c.repo_name)}
    -
    -
    -
    +
    +
    +
    +
    +
    +
    + gravatar +
    + ${h.person(c.changeset.author)}
    + ${h.email_or_none(c.changeset.author)}
    +
    +
    ${h.urlify_commit(c.changeset.message, c.repo_name)}
    +
    +
    +
    % if (len(c.changeset.affected_files) <= c.affected_files_cut_off) or c.fulldiff: - ${len(c.changeset.removed)} - ${len(c.changeset.changed)} - ${len(c.changeset.added)} - % else: - ! - ! - ! - % endif -
    + ${len(c.changeset.removed)} + ${len(c.changeset.changed)} + ${len(c.changeset.added)} + % else: + ! + ! + ! + % endif +
    - + %if len(c.changeset.parents)>1: ${_('merge')} %endif - %if c.changeset.branch: - - ${h.link_to(c.changeset.branch,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))} + %if c.changeset.branch: + + ${h.link_to(c.changeset.branch,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))} %endif - %for tag in c.changeset.tags: - - ${h.link_to(tag,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))} - %endfor - -
    -
    - + %for tag in c.changeset.tags: + + ${h.link_to(tag,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))} + %endfor + +
    +
    + % if c.limited_diff: ${ungettext('%s file changed','%s files changed',len(c.changeset.affected_files)) % (len(c.changeset.affected_files))}: % else: - ${ungettext('%s file changed with %s insertions and %s deletions','%s files changed with %s insertions and %s deletions', len(c.changeset.affected_files)) % (len(c.changeset.affected_files),c.lines_added,c.lines_deleted)}: - %endif + ${ungettext('%s file changed with %s insertions and %s deletions','%s files changed with %s insertions and %s deletions', len(c.changeset.affected_files)) % (len(c.changeset.affected_files),c.lines_added,c.lines_deleted)}: + %endif -
    +
    %for FID, (cs1, cs2, change, path, diff, stats) in c.changes[c.changeset.raw_id].iteritems():
    @@ -134,10 +131,10 @@
    %endfor % if c.limited_diff: -
    ${_('Changeset was too big and was cut off...')}
    +
    ${_('Changeset was too big and was cut off...')} ${_('Show full diff')}
    % endif -
    -
    +
    +
    @@ -146,7 +143,7 @@ ${diff_block.diff_block(c.changes[c.changeset.raw_id])} % if c.limited_diff: -

    ${_('Changeset was too big and was cut off...')}

    +

    ${_('Changeset was too big and was cut off...')} ${_('Show full diff')}

    % endif ## template for inline comment form diff --git a/rhodecode/templates/changeset/changeset_file_comment.html b/rhodecode/templates/changeset/changeset_file_comment.html --- a/rhodecode/templates/changeset/changeset_file_comment.html +++ b/rhodecode/templates/changeset/changeset_file_comment.html @@ -6,35 +6,45 @@ <%def name="comment_block(co)">
    -
    +
    -
    - ${co.author.username} -
    -
    - ${h.age(co.modified_at)} -
    +
    + ${co.author.username} +
    +
    + ${h.age(co.modified_at)} +
    %if co.status_change:
    ${co.status_change[0].status_lbl}
    -
    %endif + + + %if h.HasPermissionAny('hg.admin', 'repository.admin')() or co.author.user_id == c.rhodecode_user.user_id:
    ${_('Delete')}
    %endif -
    -
    - ${h.rst_w_mentions(co.text)|n} -
    +
    +
    + ${h.rst_w_mentions(co.text)|n} +
    @@ -50,7 +60,7 @@
    ${_('Commenting on line {1}.')} ${(_('Comments parsed using %s syntax with %s support.') % ( ('RST' % h.url('rst_help')), - ('@mention' % _('Use @username inside this text to send notification to this RhodeCode user')) + ('@mention' % _('Use @username inside this text to send notification to this RhodeCode user')) ) )|n } @@ -62,7 +72,7 @@ ${h.submit('save', _('Comment'), class_='ui-btn save-inline-form')} - ${h.reset('hide-inline-form', _('Hide'), class_='ui-btn hide-inline-form')} + ${h.reset('hide-inline-form', _('Cancel'), class_='ui-btn hide-inline-form')}
    ${h.end_form()} %else: @@ -98,7 +108,7 @@ ## generate inline comments and the main ones -<%def name="generate_comments()"> +<%def name="generate_comments(include_pr=False)">
    ## generate inlines for this changeset @@ -107,7 +117,11 @@ %for co in c.comments:
    + ## only render comments that are not from pull request, or from + ## pull request and a status change + %if not co.pull_request or (co.pull_request and co.status_change) or include_pr: ${comment_block(co)} + %endif
    %endfor
    @@ -120,15 +134,14 @@ %if c.rhodecode_user.username != 'default':
    ${h.form(post_url)} - ${_('Leave a comment')}
    ${(_('Comments parsed using %s syntax with %s support.') % (('RST' % h.url('rst_help')), - '@mention' % - _('Use @username inside this text to send notification to this RhodeCode user')))|n} + '@mention' % + _('Use @username inside this text to send notification to this RhodeCode user')))|n} %if change_status: - | - + | ${_('Change status')} + %endif
    %if change_status: @@ -155,26 +168,23 @@ %endif
    diff --git a/rhodecode/templates/changeset/changeset_range.html b/rhodecode/templates/changeset/changeset_range.html --- a/rhodecode/templates/changeset/changeset_range.html +++ b/rhodecode/templates/changeset/changeset_range.html @@ -2,39 +2,37 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('%s Changesets') % c.repo_name} - r${c.cs_ranges[0].revision}:${h.short_id(c.cs_ranges[0].raw_id)} -> r${c.cs_ranges[-1].revision}:${h.short_id(c.cs_ranges[-1].raw_id)} - ${c.rhodecode_name} + ${_('%s Changesets') % c.repo_name} - r${c.cs_ranges[0].revision}:${h.short_id(c.cs_ranges[0].raw_id)} -> r${c.cs_ranges[-1].revision}:${h.short_id(c.cs_ranges[-1].raw_id)} · ${c.rhodecode_name} <%def name="breadcrumbs_links()"> - ${h.link_to(_(u'Home'),h.url('/'))} - » - ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))} - » - ${_('Changesets')} - r${c.cs_ranges[0].revision}:${h.short_id(c.cs_ranges[0].raw_id)} -> r${c.cs_ranges[-1].revision}:${h.short_id(c.cs_ranges[-1].raw_id)} + ${_('Changesets')} - r${c.cs_ranges[0].revision}:${h.short_id(c.cs_ranges[0].raw_id)} -> r${c.cs_ranges[-1].revision}:${h.short_id(c.cs_ranges[-1].raw_id)} <%def name="page_nav()"> - ${self.menu('changelog')} + ${self.menu('repositories')} <%def name="main()"> +${self.context_bar('changelog')}
    ${self.breadcrumbs()}
    -
    -
    -

    ${_('Compare View')} / ${h.link_to(_('Show combined compare'),h.url('compare_url',repo_name=c.repo_name,org_ref_type='rev',org_ref=getattr(c.cs_ranges[0].parents[0] if c.cs_ranges[0].parents else h.EmptyChangeset(),'raw_id'),other_ref_type='rev',other_ref=c.cs_ranges[-1].raw_id))}

    +
    +
    - ${_('Changesets')} - r${c.cs_ranges[0].revision}:${h.short_id(c.cs_ranges[0].raw_id)} -> r${c.cs_ranges[-1].revision}:${h.short_id(c.cs_ranges[-1].raw_id)} -
    -
    -
    -
    -
    - + ${h.link_to('r%s:%s -> r%s:%s' % (c.cs_ranges[0].revision, h.short_id(c.cs_ranges[0].raw_id), c.cs_ranges[-1].revision, h.short_id(c.cs_ranges[-1].raw_id)), + h.url('compare_url',repo_name=c.repo_name,org_ref_type='rev',org_ref=getattr(c.cs_ranges[0].parents[0] if c.cs_ranges[0].parents else h.EmptyChangeset(),'raw_id'),other_ref_type='rev',other_ref=c.cs_ranges[-1].raw_id) + )} + + + +
    +
    +
    %for cnt,cs in enumerate(c.cs_ranges): @@ -50,17 +48,17 @@ %endfor
    gravatar
    -
    -
    ${_('Files affected')}
    -
    - %for cs in c.cs_ranges: -
    ${h.link_to('r%s:%s' % (cs.revision,h.short_id(cs.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}
    - %for FID, (cs1, cs2, change, path, diff, stats) in c.changes[cs.raw_id].iteritems(): -
    ${h.link_to(h.safe_unicode(path),h.url.current(anchor=FID))}
    - %endfor - %endfor -
    -
    +
    +
    ${_('Files affected')}
    +
    + %for cs in c.cs_ranges: +
    ${h.link_to('r%s:%s' % (cs.revision,h.short_id(cs.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}
    + %for FID, (cs1, cs2, change, path, diff, stats) in c.changes[cs.raw_id].iteritems(): +
    ${h.link_to(h.safe_unicode(path),h.url.current(anchor=FID))}
    + %endfor + %endfor +
    +
    <%namespace name="comment" file="/changeset/changeset_file_comment.html"/> @@ -79,19 +77,19 @@ ${_('merge')} %endif %if cs.branch: - + ${h.link_to(h.shorter(cs.branch),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))} %endif %if h.is_hg(c.rhodecode_repo): %for book in cs.bookmarks: - + ${h.link_to(h.shorter(book),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))} %endfor %endif %for tag in cs.tags: - + ${h.link_to(h.shorter(tag),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))} %endfor diff --git a/rhodecode/templates/changeset/diff_block.html b/rhodecode/templates/changeset/diff_block.html --- a/rhodecode/templates/changeset/diff_block.html +++ b/rhodecode/templates/changeset/diff_block.html @@ -4,7 +4,10 @@ ## ${diff_block.diff_block(change)} ## <%def name="diff_block(change)"> - +
    + ↑ ${_('Collapse diff')} ↑ +
    +
    %for FID,(cs1, cs2, change, path, diff, stats) in change.iteritems(): ##%if op !='removed':
    @@ -16,15 +19,15 @@ revision=cs2,f_path=h.safe_unicode(path)))}
    - - - + + + ${c.ignorews_url(request.GET, h.FID(cs2,path))} ${c.context_url(request.GET, h.FID(cs2,path))}
    @@ -37,7 +40,7 @@
    ##%endif %endfor - +
    <%def name="diff_block_simple(change)"> @@ -48,7 +51,9 @@ diff --git a/rhodecode/templates/changeset/patch_changeset.html b/rhodecode/templates/changeset/patch_changeset.html --- a/rhodecode/templates/changeset/patch_changeset.html +++ b/rhodecode/templates/changeset/patch_changeset.html @@ -1,16 +1,16 @@ %if h.is_hg(c.rhodecode_repo): # ${c.rhodecode_repo.alias.upper()} changeset patch -# User ${c.changeset.author|n} +# User ${c.changeset.author |n} # Date ${c.changeset.date} # Node ID ${c.changeset.raw_id} ${c.parent_tmpl} -${c.changeset.message} +${c.changeset.message |n} %elif h.is_git(c.rhodecode_repo): -From 35d9475598be9f807cd800e51212b8f1efbeacd9 Mon Sep 17 00:00:00 2001 -From: ${c.changeset.author} +From ${c.changeset.raw_id} ${c.changeset.date} +From: ${c.changeset.author |n} Date: ${c.changeset.date} -Subject: [PATCH] ${c.changeset.message} +Subject: [PATCH] ${c.changeset.message |n} --- %endif diff --git a/rhodecode/templates/compare/compare_cs.html b/rhodecode/templates/compare/compare_cs.html --- a/rhodecode/templates/compare/compare_cs.html +++ b/rhodecode/templates/compare/compare_cs.html @@ -1,28 +1,41 @@ ## Changesets table !
    - %if not c.cs_ranges: ${_('No changesets')} %else: - %for cnt, cs in enumerate(c.cs_ranges): +
    + %for cs in reversed(c.cs_ranges): - - + + + - - + %endfor - +
    gravatar
    %if cs.raw_id in c.statuses:
    %endif
    ${h.link_to('r%s:%s' % (cs.revision,h.short_id(cs.raw_id)),h.url('changeset_home',repo_name=c.target_repo,revision=cs.raw_id))} + ${cs.date}
    gravatar
    ${h.person(cs.author)}
    ${h.link_to('r%s:%s' % (cs.revision,h.short_id(cs.raw_id)),h.url('changeset_home',repo_name=c.other_repo.repo_name,revision=cs.raw_id))} %if c.as_form: ${h.hidden('revisions',cs.raw_id)} %endif
    ${h.person(cs.author)}
    ${cs.date} + %if cs.branch: + ${cs.branch} + %endif +
    ${h.urlify_commit(h.shorter(cs.message, 60),c.repo_name)}
    + %if c.ancestor: + ${_('Ancestor')}: + ${h.link_to(h.short_id(c.ancestor),h.url('changeset_home',repo_name=c.repo_name,revision=c.ancestor))} + + %endif + %if c.as_form: + ${h.hidden('ancestor_rev',c.ancestor)} + ${h.hidden('merge_rev',c.cs_ranges[-1].raw_id)} + %endif %endif -
    diff --git a/rhodecode/templates/compare/compare_diff.html b/rhodecode/templates/compare/compare_diff.html --- a/rhodecode/templates/compare/compare_diff.html +++ b/rhodecode/templates/compare/compare_diff.html @@ -2,22 +2,19 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${c.repo_name} ${_('Compare')} ${'%s@%s' % (c.org_repo.repo_name, c.org_ref)} -> ${'%s@%s' % (c.other_repo.repo_name, c.other_ref)} + ${_('%s Compare') % c.repo_name} - ${'%s@%s' % (c.org_repo.repo_name, c.org_ref)} -> ${'%s@%s' % (c.other_repo.repo_name, c.other_ref)} · ${c.rhodecode_name} <%def name="breadcrumbs_links()"> - ${h.link_to(_(u'Home'),h.url('/'))} - » - ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))} - » - ${_('Compare')} + ${_('Compare revisions')} <%def name="page_nav()"> - ${self.menu('changelog')} + ${self.menu('repositories')} <%def name="main()"> +${self.context_bar('changelog')}
    @@ -25,8 +22,7 @@
    -
    -

    ${_('Compare View')}

    +
    ${'%s@%s' % (c.org_repo.repo_name, c.org_ref)} -> ${'%s@%s' % (c.other_repo.repo_name, c.other_ref)} [swap]
    @@ -53,13 +49,13 @@ %endif %for fid, change, f, stat in c.files:
    -
    ${h.link_to(h.safe_unicode(f),h.url.current(anchor=fid))}
    +
    ${h.link_to(h.safe_unicode(f),h.url.current(anchor=fid, **request.GET.mixed()))}
    ${h.fancy_file_stats(stat)}
    %endfor
    % if c.limited_diff: -
    ${_('Changeset was too big and was cut off...')}
    +
    ${_('Changeset was too big and was cut off...')} ${_('Show full diff')}
    % endif
    @@ -70,7 +66,7 @@ ${diff_block.diff_block_simple([c.changes[fid]])} %endfor % if c.limited_diff: -

    ${_('Changeset was too big and was cut off...')}

    +

    ${_('Changeset was too big and was cut off...')} ${_('Show full diff')}

    % endif -
    +
    + ${h.end_form()} + +
    diff --git a/rhodecode/templates/files/files_browser.html b/rhodecode/templates/files/files_browser.html --- a/rhodecode/templates/files/files_browser.html +++ b/rhodecode/templates/files/files_browser.html @@ -1,34 +1,34 @@ <%def name="file_class(node)"> - %if node.is_file(): - <%return "browser-file" %> - %else: - <%return "browser-dir"%> - %endif + %if node.is_file(): + <%return "browser-file" %> + %else: + <%return "browser-dir"%> + %endif
    -
    - ${h.form(h.url.current())} -
    - ${_('view')}@rev - « - ${h.text('at_rev',value=c.changeset.revision,size=5)} - » - ## ${h.submit('view',_('view'),class_="ui-btn")} -
    - ${h.end_form()} -
    -
    - ${h.checkbox('stay_at_branch',c.changeset.branch,c.changeset.branch==c.branch)} - -
    +
    + ${h.form(h.url.current())} +
    + ${_('View')}@rev + « + ${h.text('at_rev',value=c.changeset.revision,size=5)} + » + ## ${h.submit('view',_('View'),class_="ui-btn")} +
    + ${h.end_form()} +
    +
    + ${h.checkbox('stay_at_branch',c.changeset.branch,c.changeset.branch==c.branch)} + +
    -
    - - - - - - - - - - - +
    +
    ${_('Name')}${_('Size')}${_('Mimetype')}${_('Last Revision')}${_('Last modified')}${_('Last commiter')}
    + + + + + + + + + + - - %if c.file.parent: - - - - - - - - - %endif + + %if c.file.parent: + + + + + + + + + %endif - %for cnt,node in enumerate(c.file): - - + - - - - + + + + - + - - %endfor - - - -
    ${_('Name')}${_('Size')}${_('Mimetype')}${_('Last Revision')}${_('Last modified')}${_('Last committer')}
    - ${h.link_to('..',h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.file.parent.path),class_="browser-dir ypjax-link")} -
    + ${h.link_to('..',h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.file.parent.path),class_="browser-dir ypjax-link")} +
    + %for cnt,node in enumerate(c.file): +
    %if node.is_submodule(): ${h.link_to(node.name,node.url or '#',class_="submodule-dir ypjax-link")} %else: ${h.link_to(node.name, h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=h.safe_unicode(node.path)),class_=file_class(node)+" ypjax-link")} %endif: - - %if node.is_file(): - ${h.format_byte_size(node.size,binary=True)} - %endif - - %if node.is_file(): - ${node.mimetype} - %endif - - %if node.is_file(): -
    -
    ${'r%s:%s' % (node.last_changeset.revision,node.last_changeset.short_id)}
    -
    - %endif -
    - %if node.is_file(): - + + %if node.is_file(): + ${h.format_byte_size(node.size,binary=True)} + %endif + + %if node.is_file(): + ${node.mimetype} + %endif + + %if node.is_file(): +
    +
    ${'r%s:%s' % (node.last_changeset.revision,node.last_changeset.short_id)}
    +
    + %endif +
    + %if node.is_file(): + ${h.age(node.last_changeset.date)} - %endif - - %if node.is_file(): - + %endif + + %if node.is_file(): + ${h.person(node.last_changeset.author)} - %endif -
    -
    + %endif + + + %endfor + + + + +
    diff --git a/rhodecode/templates/files/files_edit.html b/rhodecode/templates/files/files_edit.html --- a/rhodecode/templates/files/files_edit.html +++ b/rhodecode/templates/files/files_edit.html @@ -1,7 +1,7 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${_('%s Edit file') % c.repo_name} - ${c.rhodecode_name} + ${_('%s Files Edit') % c.repo_name} · ${c.rhodecode_name} <%def name="js_extra()"> @@ -11,18 +11,16 @@ -<%def name="breadcrumbs_links()"> - ${h.link_to(_(u'Home'),h.url('/'))} - » - ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))} - » - ${_('edit file')} @ R${c.cs.revision}:${h.short_id(c.cs.raw_id)} +<%def name="page_nav()"> + ${self.menu('repositories')} -<%def name="page_nav()"> - ${self.menu('files')} +<%def name="breadcrumbs_links()"> + ${_('Edit file')} @ ${h.show_id(c.cs)} + <%def name="main()"> +${self.context_bar('files')}
    -
    -

    ${_('Location')}: ${h.files_breadcrumbs(c.repo_name,c.cs.revision,c.file.path)}

    - ${h.form(h.url.current(),method='post',id='eform')} -
    +
    +

    ${_('Location')}: ${h.files_breadcrumbs(c.repo_name,c.cs.revision,c.file.path)}

    + ${h.form(h.url.current(),method='post',id='eform')} +
    @@ -46,33 +44,33 @@
    ${h.format_byte_size(c.file.size,binary=True)}
    ${c.file.mimetype}
    - ${h.link_to(_('show annotation'),h.url('files_annotate_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-btn")} - ${h.link_to(_('show as raw'),h.url('files_raw_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-btn")} - ${h.link_to(_('download as raw'),h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-btn")} + ${h.link_to(_('Show annotation'),h.url('files_annotate_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-btn")} + ${h.link_to(_('Show as raw'),h.url('files_raw_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-btn")} + ${h.link_to(_('Download as raw'),h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-btn")} % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name): % if not c.file.is_binary: - ${h.link_to(_('source'),h.url('files_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-btn")} + ${h.link_to(_('Source'),h.url('files_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-btn")} % endif % endif
    ${_('Editing file')}: ${c.file.unicode_path}
    -
    
    -				
    -				
    ${_('commit message')}
    - -
    -
    +
    
    +                
    +                
    ${_('Commit message')}
    + +
    +
    ${h.submit('commit',_('Commit changes'),class_="ui-btn")} ${h.reset('reset',_('Reset'),class_="ui-btn")} -
    - ${h.end_form()} - -
    +
    + ${h.end_form()} + +
    diff --git a/rhodecode/templates/files/files_history_box.html b/rhodecode/templates/files/files_history_box.html --- a/rhodecode/templates/files/files_history_box.html +++ b/rhodecode/templates/files/files_history_box.html @@ -6,9 +6,9 @@ ${h.form(h.url('files_diff_home',repo_name=c.repo_name,f_path=c.f_path),method='get')} ${h.hidden('diff2',c.file_changeset.raw_id)} ${h.select('diff1',c.file_changeset.raw_id,c.file_history)} - ${h.submit('diff',_('diff to revision'),class_="ui-btn")} - ${h.submit('show_rev',_('show at revision'),class_="ui-btn")} - ${h.link_to(_('show full history'),h.url('shortlog_file_home',repo_name=c.repo_name, revision=c.file_changeset.raw_id, f_path=c.f_path),class_="ui-btn")} + ${h.submit('diff',_('Diff to revision'),class_="ui-btn")} + ${h.submit('show_rev',_('Show at revision'),class_="ui-btn")} + ${h.link_to(_('Show full history'),h.url('shortlog_file_home',repo_name=c.repo_name, revision=c.file_changeset.raw_id, f_path=c.f_path),class_="ui-btn")} ${h.hidden('annotate', c.annotate)} ${h.end_form()}
    diff --git a/rhodecode/templates/files/files_source.html b/rhodecode/templates/files/files_source.html --- a/rhodecode/templates/files/files_source.html +++ b/rhodecode/templates/files/files_source.html @@ -10,7 +10,7 @@
    -
    +
    ${h.link_to("r%s:%s" % (c.file_changeset.revision,h.short_id(c.file_changeset.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=c.file_changeset.raw_id))}
    @@ -18,15 +18,17 @@
    ${c.file.mimetype}
    %if c.annotate: - ${h.link_to(_('show source'), h.url('files_home', repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path),class_="ui-btn")} + ${h.link_to(_('Show source'), h.url('files_home', repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path),class_="ui-btn")} %else: - ${h.link_to(_('show annotation'),h.url('files_annotate_home',repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path),class_="ui-btn")} + ${h.link_to(_('Show annotation'),h.url('files_annotate_home',repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path),class_="ui-btn")} %endif - ${h.link_to(_('show as raw'),h.url('files_raw_home',repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path),class_="ui-btn")} - ${h.link_to(_('download as raw'),h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path),class_="ui-btn")} + ${h.link_to(_('Show as raw'),h.url('files_raw_home',repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path),class_="ui-btn")} + ${h.link_to(_('Download as raw'),h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path),class_="ui-btn")} % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name): - % if not c.file.is_binary: - ${h.link_to(_('edit'),h.url('files_edit_home',repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path),class_="ui-btn")} + % if c.on_branch_head and c.changeset.branch and not c.file.is_binary: + ${h.link_to(_('Edit on branch:%s') % c.changeset.branch,h.url('files_edit_home',repo_name=c.repo_name,revision=c.changeset.branch,f_path=c.f_path),class_="ui-btn")} + %else: + ${h.link_to(_('Edit on branch:?'), '#', class_="ui-btn disabled tooltip", title=_('Editing files allowed only when on branch head revision'))} % endif % endif
    @@ -37,24 +39,24 @@
    ${h.person(c.file_changeset.author)}
    -
    ${h.urlify_commit(c.file_changeset.message,c.repo_name)}
    -
    -
    - %if c.file.is_binary: - ${_('Binary file (%s)') % c.file.mimetype} - %else: - % if c.file.size < c.cut_off_limit: +
    ${h.urlify_commit(c.file_changeset.message,c.repo_name)}
    +
    +
    + %if c.file.is_binary: + ${_('Binary file (%s)') % c.file.mimetype} + %else: + % if c.file.size < c.cut_off_limit: %if c.annotate: ${h.pygmentize_annotation(c.repo_name,c.file,linenos=True,anchorlinenos=True,lineanchors='L',cssclass="code-highlight")} %else: - ${h.pygmentize(c.file,linenos=True,anchorlinenos=True,lineanchors='L',cssclass="code-highlight")} + ${h.pygmentize(c.file,linenos=True,anchorlinenos=True,lineanchors='L',cssclass="code-highlight")} %endif - %else: - ${_('File is too big to display')} ${h.link_to(_('show as raw'), - h.url('files_raw_home',repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path))} - %endif + %else: + ${_('File is too big to display')} ${h.link_to(_('Show as raw'), + h.url('files_raw_home',repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path))} + %endif %endif -
    +
    diff --git a/rhodecode/templates/password_reset.html b/rhodecode/templates/password_reset.html --- a/rhodecode/templates/password_reset.html +++ b/rhodecode/templates/password_reset.html @@ -2,42 +2,42 @@ <%inherit file="base/root.html"/> <%def name="title()"> - ${_('Reset your password')} - ${c.rhodecode_name} + ${_('Password Reset')} · ${c.rhodecode_name}
    -
    -
    ${_('Reset your password to')} ${c.rhodecode_name}
    -
    -
    - ${h.form(url('password_reset'))} -
    - -
    +
    +
    ${_('Reset your password to')} ${c.rhodecode_name}
    +
    +
    + ${h.form(url('password_reset'))} +
    + +
    -
    -
    - -
    -
    - ${h.text('email')} -
    -
    +
    +
    + +
    +
    + ${h.text('email')} +
    +
    -
    -
    - ${h.submit('send',_('Reset my password'),class_="ui-btn large")} -
    ${_('Password reset link will be send to matching email address')}
    -
    -
    -
    -
    - ${h.end_form()} +
    +
    + ${h.submit('send',_('Reset my password'),class_="ui-btn large")} +
    ${_('Password reset link will be send to matching email address')}
    +
    +
    +
    +
    + ${h.end_form()} -
    +
    diff --git a/rhodecode/templates/pullrequests/pullrequest.html b/rhodecode/templates/pullrequests/pullrequest.html --- a/rhodecode/templates/pullrequests/pullrequest.html +++ b/rhodecode/templates/pullrequests/pullrequest.html @@ -5,15 +5,15 @@ <%def name="breadcrumbs_links()"> - ${h.link_to(_(u'Home'),h.url('/'))} - » - ${h.link_to(c.repo_name,h.url('changelog_home',repo_name=c.repo_name))} - » ${_('New pull request')} +<%def name="page_nav()"> + ${self.menu('repositories')} + + <%def name="main()"> - +${self.context_bar('showpullrequest')}
    @@ -21,19 +21,13 @@
    ${h.form(url('pullrequest', repo_name=c.repo_name), method='post', id='pull_request_form')}
    - - - ##ORG
    -
    -
    - gravatar -
    +
    - ${h.select('org_repo','',c.org_repos,class_='refs')}:${h.select('org_ref','',c.org_refs,class_='refs')} + ${h.select('org_repo','',c.org_repos,class_='refs')}:${h.select('org_ref',c.default_org_ref,c.org_refs,class_='refs')} -
    ${c.rhodecode_db_repo.description}
    +
    ${c.rhodecode_db_repo.description}
    @@ -43,19 +37,11 @@ ##OTHER, most Probably the PARENT OF THIS FORK
    -
    -
    - gravatar -
    +
    - ${h.select('other_repo',c.default_pull_request ,c.other_repos,class_='refs')}:${h.select('other_ref',c.default_pull_request_rev,c.default_revs,class_='refs')} + ${h.select('other_repo',c.default_other_repo,c.other_repos,class_='refs')}:${c.default_other_repo_info['revs']} - - - ${_('Refresh')} - - -
    +
    @@ -72,13 +58,13 @@ ## members goes here !
      - %for member in c.review_members: -
    • + %for member in [c.default_other_repo_info['user']]: +
    • -
      gravatar
      -
      ${member.full_name} (${_('owner')})
      - - +
      gravatar
      +
      ${member['firstname']} ${member['lastname']} (${_('owner')})
      + +
    • %endfor @@ -112,7 +98,7 @@
      - +
      ${h.textarea('pullrequest_desc',size=30)} @@ -136,68 +122,87 @@ var other_repos_info = ${c.other_repos_info|n}; + var otherrepoChanged = function(){ + var sel_box = YUQ('#pull_request_form #other_repo')[0]; + var repo_name = sel_box.options[sel_box.selectedIndex].value; + + YUD.get('other_repo_desc').innerHTML = other_repos_info[repo_name]['description']; + // replace options of other_ref with the ones for the current other_repo + var other_ref_selector = YUD.get('other_ref'); + var new_select = YUD.createElementFromMarkup(other_repos_info[repo_name]['revs']); + var new_selectedIndex = new_select.selectedIndex; + other_ref_selector.innerHTML = ""; // clear old options + while (new_select.length > 0){ // children will be popped when appened to other_ref_selector + other_ref_selector.appendChild(new_select.children[0]); + } + // browsers lost track of selected when appendChild was used + other_ref_selector.selectedIndex = new_selectedIndex; + + // reset && add the reviewer based on selected repo + var _data = other_repos_info[repo_name]; + YUD.get('review_members').innerHTML = ''; + addReviewMember(_data.user.user_id, _data.user.firstname, + _data.user.lastname, _data.user.username, + _data.user.gravatar_link); + } + var loadPreview = function(){ - YUD.setStyle(YUD.get('pull_request_overview_url').parentElement,'display','none'); + //url template var url = "${h.url('compare_url', - repo_name='org_repo', - org_ref_type='org_ref_type', org_ref='org_ref', - other_ref_type='other_ref_type', other_ref='other_ref', - repo='other_repo', - as_form=True, bundle=False, - rev_start=request.GET.get('rev_start',''), - rev_end=request.GET.get('rev_end',''))}"; + repo_name='__other_repo__', + org_ref_type='__other_ref_type__', + org_ref='__other_ref__', + other_repo='__org_repo__', + other_ref_type='__org_ref_type__', + other_ref='__org_ref__', + as_form=True, + merge=True, + )}"; + var org_repo = YUQ('#pull_request_form #org_repo')[0].value; + var org_ref = YUQ('#pull_request_form #org_ref')[0].value.split(':'); + + var other_repo = YUQ('#pull_request_form #other_repo')[0].value; + var other_ref = YUQ('#pull_request_form #other_ref')[0].value.split(':'); var select_refs = YUQ('#pull_request_form select.refs') - var rev_data = {}; // gather the org/other ref and repo here - for(var i=0;i1){ - key = select_ref.name+"_type"; - val = select_ref_data[0]; - url = url.replace(key,val); - rev_data[key] = val; - - key = select_ref.name; - val = select_ref_data[1]; - url = url.replace(key,val); - rev_data[key] = val; - - }else{ - key = select_ref.name; - val = select_ref.value; - url = url.replace(key,val); - rev_data[key] = val; - } + for (k in rev_data){ + url = url.replace('__'+k+'__',rev_data[k]); } - YUE.on('other_repo', 'change', function(e){ - var repo_name = e.currentTarget.value; - // replace the %if not c.pull_request.is_closed() and (h.HasPermissionAny('hg.admin', 'repository.admin')() or c.pull_request.user_id == c.rhodecode_user.user_id): - + %endif
      @@ -142,11 +161,11 @@ %if h.HasPermissionAny('hg.admin', 'repository.admin')() or c.pull_request.author.user_id == c.rhodecode_user.user_id:
      ${h.text('user', class_='yui-ac-input')} - ${_('Add reviewer to this pull request.')} + ${_('Add or remove reviewer to this pull request.')}
      - ${_('save')} + ${_('Save changes')}
      %endif
      @@ -157,9 +176,14 @@ ## diff block @@ -168,7 +192,7 @@ ${diff_block.diff_block_simple([c.changes[fid]])} %endfor % if c.limited_diff: -

      ${_('Changeset was too big and was cut off...')}

      +

      ${_('Changeset was too big and was cut off...')} ${_('Show full diff')}

      % endif @@ -177,7 +201,7 @@ ${comment.comment_inline_form()} ## render comments and inlines - ${comment.generate_comments()} + ${comment.generate_comments(include_pr=True)} % if not c.pull_request.is_closed(): ## main comment form and it status @@ -189,7 +213,7 @@ diff --git a/rhodecode/templates/pullrequests/pullrequest_show_all.html b/rhodecode/templates/pullrequests/pullrequest_show_all.html --- a/rhodecode/templates/pullrequests/pullrequest_show_all.html +++ b/rhodecode/templates/pullrequests/pullrequest_show_all.html @@ -1,42 +1,26 @@ <%inherit file="/base/base.html"/> <%def name="title()"> - ${c.repo_name} ${_('all pull requests')} + ${_('%s Pull Requests') % c.repo_name} · ${c.rhodecode_name} <%def name="breadcrumbs_links()"> - ${h.link_to(_(u'Home'),h.url('/'))} - » - ${h.link_to(c.repo_name,h.url('changelog_home',repo_name=c.repo_name))} - » - ${_('All pull requests')} + ${_('Pull requests')} + + +<%def name="page_nav()"> + ${self.menu('repositories')} <%def name="main()"> +${self.context_bar('showpullrequest')}
      ${self.breadcrumbs()}
      - - %for pr in c.pull_requests: -
      -

      - %if pr.is_closed(): - ${_('Closed')} - %endif - - ${_('Pull request #%s opened by %s on %s') % (pr.pull_request_id, pr.author.full_name, h.fmt_date(pr.created_on))} - -

      -
      ${_('Title')}: ${pr.title}
      -
      ${pr.description}
      -
      - %endfor - + ${c.pullrequest_data}
      - - diff --git a/rhodecode/templates/register.html b/rhodecode/templates/register.html --- a/rhodecode/templates/register.html +++ b/rhodecode/templates/register.html @@ -2,90 +2,90 @@ <%inherit file="base/root.html"/> <%def name="title()"> - ${_('Sign Up')} - ${c.rhodecode_name} + ${_('Sign Up')} · ${c.rhodecode_name}
      -
      -
      ${_('Sign Up to')} ${c.rhodecode_name}
      -
      -
      - ${h.form(url('register'))} -
      - -
      -
      -
      - -
      -
      - ${h.text('username',class_="medium")} -
      -
      +
      +
      ${_('Sign Up to')} ${c.rhodecode_name}
      +
      +
      + ${h.form(url('register'))} +
      + +
      +
      +
      + +
      +
      + ${h.text('username',class_="medium")} +
      +
      -
      -
      - -
      -
      - ${h.password('password',class_="medium")} -
      -
      +
      +
      + +
      +
      + ${h.password('password',class_="medium")} +
      +
      -
      -
      - -
      -
      - ${h.password('password_confirmation',class_="medium")} -
      -
      +
      +
      + +
      +
      + ${h.password('password_confirmation',class_="medium")} +
      +
      -
      -
      - -
      -
      - ${h.text('firstname',class_="medium")} -
      -
      +
      +
      + +
      +
      + ${h.text('firstname',class_="medium")} +
      +
      -
      -
      - -
      -
      - ${h.text('lastname',class_="medium")} -
      -
      +
      +
      + +
      +
      + ${h.text('lastname',class_="medium")} +
      +
      -
      -
      - -
      -
      - ${h.text('email',class_="medium")} -
      -
      +
      +
      + +
      +
      + ${h.text('email',class_="medium")} +
      +
      -
      -
      - ${h.submit('sign_up',_('Sign Up'),class_="ui-btn large")} - %if c.auto_active: -
      ${_('Your account will be activated right after registration')}
      - %else: -
      ${_('Your account must wait for activation by administrator')}
      - %endif -
      -
      -
      -
      - ${h.end_form()} +
      +
      + ${h.submit('sign_up',_('Sign Up'),class_="ui-btn large")} + %if c.auto_active: +
      ${_('Your account will be activated right after registration')}
      + %else: +
      ${_('Your account must wait for activation by administrator')}
      + %endif +
      +
      +
      +
      + ${h.end_form()} -
      +
      diff --git a/rhodecode/templates/repo_switcher_list.html b/rhodecode/templates/repo_switcher_list.html --- a/rhodecode/templates/repo_switcher_list.html +++ b/rhodecode/templates/repo_switcher_list.html @@ -1,20 +1,16 @@ ## -*- coding: utf-8 -*-
    • - +
    • %for repo in c.repos_list: - +
    • %if repo['dbrepo']['private'] and c.visual.show_private_icon: -
    • ${_('Private repository')} - ${h.link_to(repo['name'],h.url('summary_home',repo_name=repo['name']),class_="repo_name %s" % repo['dbrepo']['repo_type'])} -
    • %elif not repo['dbrepo']['private'] and c.visual.show_public_icon: -
    • ${_('Public repository')} - ${h.link_to(repo['name'],h.url('summary_home',repo_name=repo['name']),class_="repo_name %s" % repo['dbrepo']['repo_type'])} -
    • %endif + ${h.link_to(repo['name'],h.url('summary_home',repo_name=repo['name']),class_="repo_name thin %s" % repo['dbrepo']['repo_type'])} + %endfor diff --git a/rhodecode/templates/search/search.html b/rhodecode/templates/search/search.html --- a/rhodecode/templates/search/search.html +++ b/rhodecode/templates/search/search.html @@ -1,64 +1,66 @@ ## -*- coding: utf-8 -*- <%inherit file="/base/base.html"/> + <%def name="title()"> - %if c.cur_query: - %if c.repo_name: - ${_('Search "%s" in repository: %s') % (c.cur_query, c.repo_name)} - %else: - ${_('Search "%s" in all repositories') % c.cur_query} - %endif - %else: - %if c.repo_name: - ${_('Search in repository: %s') % c.repo_name} - %else: - ${_('Search in all repositories')} - %endif - %endif - - ${c.rhodecode_name} + %if c.repo_name: + ${_('Search repository')} ${c.repo_name} · ${c.rhodecode_name} + %else: + ${_('Search in all repositories')} + %endif -<%def name="breadcrumbs()"> - ${c.rhodecode_name} + +<%def name="breadcrumbs_links()"> + %if c.repo_name: + ${_('Search')} + %else: + ${_('Search in all repositories')} + %endif + %if c.cur_query: + » + ${c.cur_query} + %endif + <%def name="page_nav()"> - ${self.menu('home')} + %if c.repo_name: + ${self.menu('repositories')} + %else: + ${self.menu('search')} + %endif <%def name="main()"> - +%if c.repo_name: +${self.context_bar('options')} +%endif
      - -
      -
      - %if c.repo_name: - ${_('Search in repository: %s') % c.repo_name} - %else: - ${_('Search in all repositories')} - %endif -
      -
      - - %if c.repo_name: - ${h.form(h.url('search_repo',search_repo=c.repo_name),method='get')} - %else: - ${h.form(h.url('search'),method='get')} - %endif -
      -
      -
      + +
      + ${self.breadcrumbs()} +
      + + %if c.repo_name: + ${h.form(h.url('search_repo',repo_name=c.repo_name),method='get')} + %else: + ${h.form(h.url('search'),method='get')} + %endif +
      +
      +
      -
      ${h.text('q',c.cur_query,class_="small")} -
      - -
      -
      -
      ${c.runtime}
      -
      +
      ${h.text('q',c.cur_query,class_="small")} +
      + +
      +
      +
      ${c.runtime}
      +
      -
      -
      - -
      +
      +
      + +
      ${h.select('type',c.cur_type,[('content',_('File contents')), ('commit',_('Commit messages')), @@ -68,9 +70,9 @@
      -
      -
      - ${h.end_form()} +
      +
      + ${h.end_form()} -
      -
      +
      +
      -
      -
      - -
      -
      -
      - %if c.rhodecode_user.username != 'default': - ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='rss_icon')} - ${h.link_to(_('ATOM'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='atom_icon')} - %else: - ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.dbrepo.repo_name),class_='rss_icon')} - ${h.link_to(_('ATOM'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name),class_='atom_icon')} - %endif -
      - %if c.rhodecode_user.username != 'default': - %if c.following: - - - %else: - - %endif - %endif: +
      +
      + +
      +
      ## locking icon %if c.rhodecode_db_repo.enable_locking: @@ -73,119 +65,156 @@ %endif %endif ##REPO TYPE - %if h.is_hg(c.dbrepo): - ${_('Mercurial repository')} - %endif - %if h.is_git(c.dbrepo): - ${_('Git repository')} - %endif + %if h.is_hg(c.dbrepo): + ${_('Mercurial repository')} + %endif + %if h.is_git(c.dbrepo): + ${_('Git repository')} + %endif ##PUBLIC/PRIVATE - %if c.dbrepo.private: - ${_('private repository')} - %else: - ${_('public repository')} - %endif + %if c.dbrepo.private: + ${_('Private repository')} + %else: + ${_('Public repository')} + %endif - ##REPO NAME - ${h.repo_link(c.dbrepo.groups_and_repo)} + ##REPO NAME + ${h.repo_link(c.dbrepo.groups_and_repo)} ##FORK - %if c.dbrepo.fork: - - %endif - ##REMOTE - %if c.dbrepo.clone_uri: + %if c.dbrepo.fork: + %endif + ##REMOTE + %if c.dbrepo.clone_uri: + - %endif -
      -
      + %endif +
      +
      -
      -
      - -
      +
      +
      + +
      %if c.visual.stylify_metatags:
      ${h.urlify_text(h.desc_stylize(c.dbrepo.description))}
      %else:
      ${h.urlify_text(c.dbrepo.description)}
      %endif -
      +
      -
      -
      - -
      -
      -
      - gravatar -
      - ${_('Username')}: ${c.dbrepo.user.username}
      - ${_('Name')}: ${c.dbrepo.user.name} ${c.dbrepo.user.lastname}
      - ${_('Email')}: ${c.dbrepo.user.email} -
      -
      +
      +
      + +
      +
      +
      + gravatar +
      + ${_('Username')}: ${c.dbrepo.user.username}
      + ${_('Name')}: ${c.dbrepo.user.name} ${c.dbrepo.user.lastname}
      + ${_('Email')}: ${c.dbrepo.user.email} +
      +
      -
      -
      - -
      -
      - +
      +
      + +
      +
      + + +
      ${_('Show by ID')}
      - - -
      -
      +
      +
      -
      -
      - -
      -
      +
      +
      + +
      +
      %if c.show_stats: -
      +
      %else: ${_('Statistics are disabled for this repository')} %if h.HasPermissionAll('hg.admin')('enable stats on from summary'): ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-btn")} %endif %endif -
      -
      +
      +
      -
      -
      - -
      -
      - %if len(c.rhodecode_repo.revisions) == 0: - ${_('There are no downloads yet')} - %elif c.enable_downloads is False: - ${_('Downloads are disabled for this repository')} +
      +
      + +
      +
      + %if len(c.rhodecode_repo.revisions) == 0: + ${_('There are no downloads yet')} + %elif not c.enable_downloads: + ${_('Downloads are disabled for this repository')} %if h.HasPermissionAll('hg.admin')('enable downloads on from summary'): ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-btn")} %endif - %else: - ${h.select('download_options',c.rhodecode_repo.get_changeset().raw_id,c.download_options)} - ${h.link_to(_('Download as zip'), h.url('files_archive_home',repo_name=c.dbrepo.repo_name,fname='tip.zip'),class_="archive_icon ui-btn")} + %else: + ${h.select('download_options',c.rhodecode_repo.get_changeset().raw_id,c.download_options)} + ${h.link_to(_('Download as zip'), h.url('files_archive_home',repo_name=c.dbrepo.repo_name,fname='tip.zip'),class_="archive_icon ui-btn")} - %endif -
      -
      -
      -
      + %endif +
      +
      +
      +
      +
        +
      • + + ${_('Followers')} + ${c.repository_followers} + +
      • +
      • + + ${_('Forks')} + ${c.repository_forks} + +
      • + + %if c.rhodecode_user.username != 'default': +
      • + ${_('Repository Size')} + +
      • + %endif + +
      • + %if c.rhodecode_user.username != 'default': + ${h.link_to(_('Feed'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='feed')} + %else: + ${h.link_to(_('Feed'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name),class_='feed')} + %endif +
      • + + %if h.HasRepoPermissionAll('repository.admin')(c.repo_name): +
      • + ${h.link_to(_('Settings'),h.url('edit_repo',repo_name=c.repo_name),class_='settings')} +
      • + %endif +
      +
      +
      %if c.show_stats: @@ -210,12 +239,12 @@
      -
      -
      -
      -
      -
      -
      +
      +
      +
      +
      +
      +
    %endif @@ -224,7 +253,7 @@